@standardagents/builder 0.15.0 → 0.15.1
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/built-in-routes.js +1650 -502
- package/dist/built-in-routes.js.map +1 -1
- package/dist/client/ApiKeysView.js +1 -1
- package/dist/client/CenteredContentView.js +1 -1
- package/dist/client/CompositionView.js +5 -5
- package/dist/client/ConfirmDialog.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/client/CopyButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/client/DataTable.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/client/JsonViewer.js +1 -1
- package/dist/client/LoginView.js +1 -1
- package/dist/client/Modal.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/client/ModelModal.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/client/ModelsView.js +1 -1
- package/dist/client/PromptEditView.js +1 -1
- package/dist/client/PromptModal.js +1 -1
- package/dist/client/PromptsView.js +1 -1
- package/dist/client/ProvidersView.js +2 -2
- package/dist/client/ThreadInspectorPane.vue_vue_type_script_setup_true_lang.js +19 -19
- package/dist/client/ToolsView.js +1 -1
- package/dist/client/UsersView.js +1 -1
- package/dist/client/VariablesView.js +1 -0
- package/dist/client/assets/CompositionView.css +1 -1
- package/dist/client/assets/ThreadInspectorPane.css +1 -1
- package/dist/client/assets/VariablesView.css +1 -0
- package/dist/client/assets/index.css +1 -1
- package/dist/client/index.js +6 -6
- package/dist/{index-D6_KjpVv.d.ts → index-BwqQtJ4r.d.ts} +47 -0
- package/dist/index.d.ts +116 -4
- package/dist/index.js +1547 -706
- package/dist/index.js.map +1 -1
- package/dist/plugin.js +548 -372
- package/dist/plugin.js.map +1 -1
- package/dist/test.d.ts +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as z,c as h,b as x,e as r,m as p,z as w,B as T,w as j,a3 as E,H as $,j as o,Z as C,k as u,q as
|
|
1
|
+
import{d as z,c as h,b as x,e as r,m as p,z as w,B as T,w as j,a3 as E,H as $,j as o,Z as C,k as u,q as B,f as i,K as N,u as b,J as y,s as _}from"./vue.js";import{B as S,b as D,ai as L,_ as V}from"./index.js";const A=["disabled","aria-label","title"],I="inline-flex items-center justify-center rounded transition-colors disabled:opacity-50 disabled:cursor-not-allowed",K=z({__name:"UiIconButton",props:{icon:{},label:{},size:{default:"sm"},variant:{default:"default"},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["click"],setup(e,{emit:l}){const t=e,c=l,a=h(()=>{switch(t.variant){case"default":return"hover:bg-black/10 dark:hover:bg-white/10";case"ghost":return"hover:bg-black/5 dark:hover:bg-white/5";case"danger":return"text-red-600 hover:bg-red-50 dark:hover:bg-red-900/20";default:return""}}),m=h(()=>{switch(t.size){case"xs":return"p-0.5";case"sm":return"p-1";case"md":return"p-1.5";default:return""}}),v=h(()=>{switch(t.size){case"xs":return"w-3.5 h-3.5";case"sm":return"w-4 h-4";case"md":return"w-5 h-5";default:return""}}),s=n=>{!t.disabled&&!t.loading&&c("click",n)};return(n,d)=>(r(),x("button",{type:"button",disabled:e.disabled||e.loading,"aria-label":e.label,title:e.label,class:p([I,a.value,m.value]),onClick:s},[e.loading?(r(),w(S,{key:0,size:"xs"})):(r(),w(T(e.icon),{key:1,class:p(v.value)},null,8,["class"]))],10,A))}});let f=0,k=null;function M(){return typeof document>"u"?null:document.body}function U(){const e=M();if(!e)return()=>{};f===0&&(k=e.style.overflow,e.style.overflow="hidden"),f+=1;let l=!1;return()=>{l||(l=!0,f=Math.max(0,f-1),f===0&&(e.style.overflow=k??"",k=null))}}const q={key:0,class:"w-full max-w-md"},H={class:"flex items-center justify-between p-4 border-b border-red-200 dark:border-red-900 flex-shrink-0"},J={class:"text-xl font-bold text-red-600"},O={class:"p-6"},X={class:"text-neutral-700 dark:text-neutral-300 mb-6"},Y={class:"flex justify-end gap-3"},G=z({__name:"ConfirmDialog",props:{modelValue:{type:Boolean},title:{default:"Confirm Action"},message:{default:"Are you sure you want to continue? You will lose any unsaved changes."},confirmText:{default:"Continue"},cancelText:{default:"Cancel"}},emits:["update:modelValue","confirm","cancel"],setup(e,{emit:l}){const t=e,c=l;let a=null;const m=()=>{c("update:modelValue",!1)},v=()=>{c("confirm"),m()},s=()=>{c("cancel"),m()},n=d=>{d.key==="Escape"&&t.modelValue&&s()};return j(()=>t.modelValue,d=>{d?(document.addEventListener("keydown",n),a=U()):(document.removeEventListener("keydown",n),a?.(),a=null)}),E(()=>{document.removeEventListener("keydown",n),a?.(),a=null}),(d,g)=>(r(),w($,{to:"body"},[o(C,{"enter-active-class":"transition-opacity duration-200","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity duration-200","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:u(()=>[e.modelValue?(r(),x("div",{key:0,class:"fixed inset-0 z-[60] flex items-center justify-center p-4 bg-white/80 dark:bg-black/80 backdrop-blur-sm dark:text-white",onClick:s},[o(C,{"enter-active-class":"transition-all duration-200","enter-from-class":"opacity-0 scale-95","enter-to-class":"opacity-100 scale-100","leave-active-class":"transition-all duration-200","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-95"},{default:u(()=>[e.modelValue?(r(),x("div",q,[o(D,{"offset-x":8,"offset-y":8,intensity:.35},{default:u(()=>[i("div",{class:"bg-white dark:bg-neutral-900 border border-red-400 dark:border-red-500 rounded-lg flex flex-col",onClick:g[0]||(g[0]=N(()=>{},["stop"]))},[i("div",H,[i("h2",J,b(e.title),1),o(y(K),{icon:y(L),label:"Close dialog",variant:"danger",onClick:s},null,8,["icon"])]),i("div",O,[i("p",X,b(e.message),1),i("div",Y,[o(y(V),{variant:"secondary",onClick:s},{default:u(()=>[_(b(e.cancelText),1)]),_:1}),o(y(V),{variant:"danger",onClick:v},{default:u(()=>[_(b(e.confirmText),1)]),_:1})])])])]),_:1})])):B("",!0)]),_:1})])):B("",!0)]),_:1})]))}});export{G as _,K as a,U as l};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{B as h}from"./index.js";import{r as p,ad as f,A as k,b as m,e as l,f as y,d as C,J as e,m as g,z as b,u as v}from"./vue.js";import{I as x}from"./check.js";function w(t={}){const r=t.resetDelayMs??2e3,n=p(!1),o=p(!1),a=p(null);let s=null;const i=()=>{s&&(clearTimeout(s),s=null)},c=async d=>{n.value=!0,a.value=null,i();try{await navigator.clipboard.writeText(d),o.value=!0,s=setTimeout(()=>{o.value=!1,s=null},r)}catch(u){o.value=!1,a.value=u instanceof Error?u.message:"Failed to copy"}finally{n.value=!1}};return f(i,!0),{copying:n,copied:o,error:a,copy:c,clearResetTimer:i}}const B={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function z(t,r){return l(),m("svg",B,[...r[0]||(r[0]=[y("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[y("rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}),y("path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"})],-1)])])}const T=k({name:"lucide-copy",render:z}),D=["disabled","title","aria-label"],$={key:3},R=C({__name:"CopyButton",props:{content:{},variant:{},size:{},disabled:{type:Boolean}},setup(t){const r=t,{copying:n,copied:o,error:a,copy:s}=w(),i=async()=>{await s(r.content)},c={xs:"p-1 text-xs",sm:"px-2 py-1 text-xs"},d={solid:"bg-black text-white dark:bg-white dark:text-black",ghost:"bg-white dark:bg-neutral-950 border border-neutral-300 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-900"};return(u,I)=>(l(),m("button",{onClick:i,disabled:e(n)||t.disabled,class:g([c[t.size||"sm"],d[t.variant||"solid"],"font-medium rounded hover:opacity-80 disabled:opacity-50 disabled:cursor-not-allowed transition-all"]),title:t.disabled?"No content to copy":e(a)?`Copy failed: ${e(a)}`:e(o)?"Copied!":"Copy to clipboard","aria-label":t.disabled?"No content to copy":e(a)?`Copy failed: ${e(a)}`:e(o)?"Copied to clipboard":"Copy to clipboard"},[e(n)?(l(),b(h,{key:0,size:"xs"})):t.variant==="ghost"&&!e(o)?(l(),b(e(T),{key:1,class:"h-3.5 w-3.5"})):t.variant==="ghost"&&e(o)?(l(),b(e(x),{key:2,class:"h-3.5 w-3.5"})):(l(),m("span",$,v(e(o)?"Copied!":"Copy"),1))],10,D))}});export{R as _,w as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as q,b as r,e as n,f as l,d as oe,c as k,q as b,s as B,u as x,j as A,J as Q,F as C,l as D,m as I,r as K,O as Se,g as H,k as _e,z as E,B as G,K as se,x as le,y as re,az as $e}from"./vue.js";import{d as Ie,c as Ae,b as ze,I as Re,a as De}from"./chevron-right.js";import{ak as Me,_ as Be,B as Ve}from"./index.js";import{_ as je}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";const Ke={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Le(a,o){return n(),r("svg",Ke,[...o[0]||(o[0]=[l("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[l("path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),l("path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"})],-1)])])}const Fe=q({name:"lucide-edit",render:Le}),Pe={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Te(a,o){return n(),r("svg",Pe,[...o[0]||(o[0]=[l("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[l("path",{d:"M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0"}),l("circle",{cx:"12",cy:"12",r:"3"})],-1)])])}const Oe=q({name:"lucide-eye",render:Te}),He={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Ee(a,o){return n(),r("svg",He,[...o[0]||(o[0]=[l("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[l("path",{d:"M22 12h-6l-2 3h-4l-2-3H2"}),l("path",{d:"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11"})],-1)])])}const Qe=q({name:"lucide-inbox",render:Ee}),Ue={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Ne(a,o){return n(),r("svg",Ue,[...o[0]||(o[0]=[l("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m11 17l-5-5l5-5m7 10l-5-5l5-5"},null,-1)])])}const Ge=q({name:"lucide-chevrons-left",render:Ne}),qe={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Je(a,o){return n(),r("svg",qe,[...o[0]||(o[0]=[l("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m6 17l5-5l-5-5m7 10l5-5l-5-5"},null,-1)])])}const We=q({name:"lucide-chevrons-right",render:Je}),Xe={key:0,class:"flex flex-wrap items-center justify-between gap-4 px-4 py-2.5 text-sm bg-neutral-50 dark:bg-neutral-800/50 border-t border-neutral-300 dark:border-neutral-700"},Ye={class:"text-neutral-500 dark:text-neutral-400 text-xs font-medium"},Ze={class:"text-neutral-700 dark:text-neutral-300"},et={class:"text-neutral-700 dark:text-neutral-300"},tt={class:"text-neutral-700 dark:text-neutral-300"},at={class:"flex items-center gap-0.5"},nt=["disabled"],st=["disabled"],lt={class:"flex items-center gap-0.5 mx-1"},rt={key:0,class:"px-2 text-neutral-400 dark:text-neutral-500 text-xs"},ot=["onClick"],it=["disabled"],ut=["disabled"],ct={class:"flex items-center gap-2"},dt=["value"],ht=["value"],gt=oe({__name:"DataTablePagination",props:{page:{},pageSize:{},totalItems:{},pageSizeOptions:{default:()=>[10,25,50,100]}},emits:["update:page","update:pageSize"],setup(a,{emit:o}){const t=a,u=o,d=k(()=>Math.ceil(t.totalItems/t.pageSize)),c=k(()=>t.totalItems===0?0:(t.page-1)*t.pageSize+1),g=k(()=>Math.min(t.page*t.pageSize,t.totalItems)),y=k(()=>t.page>1),_=k(()=>t.page<d.value),S=k(()=>{const p=[],f=d.value,v=t.page;if(f<=7)for(let $=1;$<=f;$++)p.push($);else{p.push(1),v>3&&p.push("...");const $=Math.max(2,v-1),j=Math.min(f-1,v+1);for(let P=$;P<=j;P++)p.includes(P)||p.push(P);v<f-2&&p.push("..."),p.includes(f)||p.push(f)}return p}),w=p=>{p>=1&&p<=d.value&&u("update:page",p)},R=()=>w(1),V=()=>w(t.page-1),J=()=>w(t.page+1),L=()=>w(d.value),F=p=>{const f=p.target;u("update:pageSize",parseInt(f.value,10)),u("update:page",1)};return(p,f)=>a.totalItems>0?(n(),r("div",Xe,[l("div",Ye,[f[0]||(f[0]=B(" Showing ",-1)),l("span",Ze,x(c.value),1),f[1]||(f[1]=B(" to ",-1)),l("span",et,x(g.value),1),f[2]||(f[2]=B(" of ",-1)),l("span",tt,x(a.totalItems),1)]),l("div",at,[l("button",{type:"button",onClick:R,disabled:!y.value,class:"p-1.5 rounded-md transition-all duration-150 hover:bg-neutral-200 dark:hover:bg-neutral-700 disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent",title:"First page"},[A(Q(Ge),{class:"w-4 h-4 text-neutral-500 dark:text-neutral-400"})],8,nt),l("button",{type:"button",onClick:V,disabled:!y.value,class:"p-1.5 rounded-md transition-all duration-150 hover:bg-neutral-200 dark:hover:bg-neutral-700 disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent",title:"Previous page"},[A(Q(Me),{class:"w-4 h-4 text-neutral-500 dark:text-neutral-400"})],8,st),l("div",lt,[(n(!0),r(C,null,D(S.value,(v,$)=>(n(),r(C,{key:$},[v==="..."?(n(),r("span",rt," ... ")):(n(),r("button",{key:1,type:"button",onClick:j=>w(v),class:I(["min-w-[1.75rem] px-2 py-1 rounded-md text-xs font-medium transition-all duration-150",v===a.page?"bg-accent-600 text-white shadow-sm":"text-neutral-600 dark:text-neutral-400 hover:bg-neutral-200 dark:hover:bg-neutral-700 hover:text-neutral-900 dark:hover:text-neutral-200"])},x(v),11,ot))],64))),128))]),l("button",{type:"button",onClick:J,disabled:!_.value,class:"p-1.5 rounded-md transition-all duration-150 hover:bg-neutral-200 dark:hover:bg-neutral-700 disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent",title:"Next page"},[A(Q(Ie),{class:"w-4 h-4 text-neutral-500 dark:text-neutral-400"})],8,it),l("button",{type:"button",onClick:L,disabled:!_.value,class:"p-1.5 rounded-md transition-all duration-150 hover:bg-neutral-200 dark:hover:bg-neutral-700 disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent",title:"Last page"},[A(Q(We),{class:"w-4 h-4 text-neutral-500 dark:text-neutral-400"})],8,ut)]),l("div",ct,[l("select",{value:a.pageSize,onChange:F,class:"px-2 py-1 rounded-md border border-neutral-200 dark:border-neutral-700 bg-white dark:bg-neutral-800 text-xs font-medium text-neutral-700 dark:text-neutral-300 focus:outline-none focus:ring-2 focus:ring-accent-500/30 focus:border-accent-500 dark:focus:border-accent-400 cursor-pointer transition-all"},[(n(!0),r(C,null,D(a.pageSizeOptions,v=>(n(),r("option",{key:v,value:v},x(v),9,ht))),128))],40,dt),f[3]||(f[3]=l("span",{class:"text-neutral-500 dark:text-neutral-400 text-xs"},"per page",-1))])])):b("",!0)}});function z(a,o){return a[o]}function ft(a,o){const t=z(a,o.key);return o.formatter?o.formatter(t,a):t??"-"}function vt(a,o){return a.filter(t=>t.filterable===!0).map(t=>{const u=new Map;for(const d of o){const c=z(d,t.key);if(c==null)continue;const g=t.formatter?t.formatter(c,d):String(c);u.has(g)||u.set(g,{value:g,icon:t.filterIcon?.(c,d)})}return{key:t.key,label:t.label,options:Array.from(u.entries()).sort((d,c)=>d[0].localeCompare(c[0])).map(([d,c])=>({value:d,label:d,icon:c.icon}))}})}function pt(a,o,t,u,d){let c=a;const g=Object.entries(t);if(g.length>0&&(c=c.filter(_=>g.every(([S,w])=>{const R=o.find(L=>L.key===S);if(!R)return!0;const V=z(_,S);return V==null?!1:(R.formatter?R.formatter(V,_):String(V))===w}))),!d||!u.trim())return c;const y=u.toLowerCase().trim();return c.filter(_=>o.some(S=>{if(S.searchable===!1)return!1;const w=z(_,S.key);return w==null?!1:(S.formatter?S.formatter(w,_):String(w)).toLowerCase().includes(y)}))}function bt(a,o,t){return o?[...a].sort((u,d)=>{const c=z(u,o),g=z(d,o);if(c==null&&g==null)return 0;if(c==null)return t==="asc"?1:-1;if(g==null)return t==="asc"?-1:1;let y=0;return typeof c=="string"&&typeof g=="string"?y=c.localeCompare(g,void 0,{sensitivity:"base"}):typeof c=="number"&&typeof g=="number"?y=c-g:y=String(c).localeCompare(String(g)),t==="asc"?y:-y}):a}function kt(a,o,t){const u=z(a,t);return o.some(d=>z(d,t)===u)}const xt={class:"w-full"},mt={key:0,class:"flex flex-wrap items-start justify-between gap-4 mb-5"},yt={class:"flex items-center gap-3"},wt={class:"flex items-center gap-2"},Ct={key:0,class:"text-xl font-bold tracking-tight"},St={key:1,class:"text-xs font-mono text-neutral-400 dark:text-neutral-500"},_t={key:0,class:"text-sm text-neutral-500 dark:text-neutral-400 mt-0.5"},$t={key:0,class:"flex items-center gap-2"},It={key:1,class:"mb-4"},At={class:"flex flex-wrap items-center gap-3"},zt={key:0,class:"flex-1 min-w-[200px] max-w-md"},Rt={key:2,class:"flex items-center gap-2 ml-auto"},Dt={class:"text-sm text-neutral-500 dark:text-neutral-400 font-medium"},Mt={class:"flex items-center gap-1.5"},Bt=["onClick"],Vt={class:"rounded-xl border border-neutral-300 dark:border-neutral-700 overflow-hidden bg-white dark:bg-transparent"},jt={class:"overflow-x-auto"},Kt={class:"w-full"},Lt={class:"bg-neutral-50 dark:bg-neutral-800/50 border-b border-neutral-300 dark:border-neutral-700"},Ft={key:0,class:"px-4 py-2.5 w-12"},Pt={class:"flex items-center justify-center"},Tt=["checked","indeterminate"],Ot=["onClick"],Ht={key:1,class:"px-4 py-2.5 text-right font-medium text-xs uppercase tracking-wide text-neutral-500 dark:text-neutral-400 w-24"},Et={class:"divide-y divide-neutral-200 dark:divide-neutral-800"},Qt={key:0},Ut=["colspan"],Nt={class:"flex flex-col items-center justify-center gap-3 text-neutral-400"},Gt={key:1},qt=["colspan"],Jt={class:"flex flex-col items-center justify-center gap-3 text-neutral-400"},Wt={class:"w-12 h-12 rounded-full bg-neutral-100 dark:bg-neutral-800 flex items-center justify-center"},Xt={class:"text-sm"},Yt=["onClick"],Zt={key:0,class:"absolute left-0 top-0 bottom-0 w-0.5 bg-accent-500"},ea={class:"flex items-center justify-center"},ta=["checked","onChange"],aa=["innerHTML"],na={class:"inline-flex gap-0.5"},sa=["disabled","onClick","title"],la=["disabled","onClick","title"],ca=oe({__name:"DataTable",props:{columns:{},data:{},actions:{},emptyMessage:{default:"No data available"},loading:{type:Boolean,default:!1},title:{},description:{},primaryAction:{},sortable:{type:Boolean,default:!1},sortKey:{},sortDirection:{default:"asc"},searchable:{type:Boolean,default:!1},searchQuery:{default:""},searchPlaceholder:{default:"Search..."},paginated:{type:Boolean,default:!1},page:{default:1},pageSize:{default:10},totalItems:{default:0},pageSizeOptions:{default:()=>[10,25,50,100]},selectable:{type:Boolean,default:!1},selectedRows:{default:()=>[]},rowKey:{default:"id"},bulkActions:{default:()=>[]}},emits:["update:sortKey","update:sortDirection","sort","update:searchQuery","search","update:page","update:pageSize","page-change","update:selectedRows","selection-change","row-click"],setup(a,{emit:o}){const t=a,u=o,d=K(!1),c=K(""),g=K(null),y=e=>{if(typeof e!="string")return e;switch(e){case"edit":return Fe;case"delete":return Ae;case"view":return Oe;default:return null}},_=(e,i)=>ft(e,i),S=e=>{switch(e){case"center":return"text-center";case"right":return"text-right";default:return"text-left"}},w=(e,i)=>i.cellClass?typeof i.cellClass=="function"?i.cellClass(e):i.cellClass:"",R=async(e,i)=>{if(e.confirm){const m=typeof e.confirmMessage=="function"?e.confirmMessage(i):e.confirmMessage||`Are you sure you want to ${e.label.toLowerCase()}?`;c.value=m,g.value=async()=>{await e.handler(i)},d.value=!0}else await e.handler(i)},V=async()=>{g.value&&(await g.value(),g.value=null),d.value=!1},J=()=>{g.value=null,d.value=!1},L=(e,i)=>e.visible===void 0?!0:typeof e.visible=="function"?e.visible(i):e.visible,F=(e,i)=>e.disabled===void 0?!1:typeof e.disabled=="function"?e.disabled(i):e.disabled,p=K(null),f=K("asc"),v=k(()=>t.sortKey??p.value),$=k(()=>t.sortKey!==void 0?t.sortDirection:f.value),j=e=>t.sortable&&e.sortable===!0,P=e=>{if(!j(e))return;const i=e.key;let m="asc";v.value===i&&(m=$.value==="asc"?"desc":"asc"),p.value=i,f.value=m,u("update:sortKey",i),u("update:sortDirection",m),u("sort",{key:i,direction:m})},ie=e=>v.value!==e.key?ze:$.value==="asc"?Re:De,T=k(()=>!v.value||!t.sortable?W.value:bt(W.value,v.value,$.value)),U=K(t.searchQuery),M=K({}),ue=$e(e=>{u("update:searchQuery",e),u("search",e)},300),ce=e=>{U.value=e,ue(e)},de=()=>{U.value="",u("update:searchQuery",""),u("search","")},ee=k(()=>vt(t.columns,t.data)),he=(e,i)=>{if(i===""){const{[e]:m,...s}=M.value;M.value=s}else M.value={...M.value,[e]:i}},W=k(()=>pt(t.data,t.columns,M.value,U.value,t.searchable)),X=k(()=>{let e=0;return U.value&&e++,e+=Object.keys(M.value).length,e}),te=()=>{de(),M.value={}},ge=e=>z(e,t.rowKey),N=e=>kt(e,t.selectedRows,t.rowKey),ae=k(()=>T.value.length>0&&t.selectedRows.length===T.value.length),fe=k(()=>t.selectedRows.length>0&&t.selectedRows.length<T.value.length),ve=e=>{const i=ge(e);let m;N(e)?m=t.selectedRows.filter(s=>z(s,t.rowKey)!==i):m=[...t.selectedRows,e],u("update:selectedRows",m),u("selection-change",m)},pe=()=>{const e=ae.value?[]:[...T.value];u("update:selectedRows",e),u("selection-change",e)},be=async e=>{if(e.confirm){const i=e.confirmMessage||`Are you sure you want to ${e.label.toLowerCase()} ${t.selectedRows.length} item(s)?`;c.value=i,g.value=async()=>{await e.handler(t.selectedRows)},d.value=!0}else await e.handler(t.selectedRows)},ke=e=>{u("update:page",e),u("page-change",e)},xe=e=>{u("update:pageSize",e)},me=k(()=>t.title||t.description||t.primaryAction),Y=k(()=>t.actions&&t.actions.length>0),ye=k(()=>t.actions?.filter(e=>e.variant!=="danger")||[]),we=k(()=>t.actions?.filter(e=>e.variant==="danger")||[]),ne=k(()=>{let e=t.columns.length;return t.selectable&&e++,Y.value&&e++,e});return(e,i)=>{const m=Se("FormKit");return n(),r("div",xt,[me.value?(n(),r("div",mt,[l("div",yt,[l("div",null,[l("div",wt,[a.title?(n(),r("h2",Ct,x(a.title),1)):b("",!0),!a.loading&&a.data.length>0?(n(),r("span",St,[X.value>0&&W.value.length!==a.data.length?(n(),r(C,{key:0},[B(" ("+x(W.value.length)+" of "+x(a.data.length)+") ",1)],64)):(n(),r(C,{key:1},[B(" ("+x(a.data.length)+") ",1)],64))])):b("",!0)]),a.description?(n(),r("p",_t,x(a.description),1)):b("",!0)])]),a.primaryAction?(n(),r("div",$t,[H(e.$slots,"header-actions"),A(Q(Be),{onClick:a.primaryAction.handler},{default:_e(()=>[a.primaryAction.icon?(n(),E(G(a.primaryAction.icon),{key:0,class:"w-4 h-4 mr-2"})):b("",!0),B(" "+x(a.primaryAction.label),1)]),_:1},8,["onClick"])])):b("",!0)])):b("",!0),a.searchable||ee.value.length>0?(n(),r("div",It,[l("div",At,[a.searchable?(n(),r("div",zt,[A(m,{type:"searchInput",value:U.value,placeholder:a.searchPlaceholder,onInput:ce},null,8,["value","placeholder"])])):b("",!0),(n(!0),r(C,null,D(ee.value,s=>(n(),r("div",{key:s.key,class:"min-w-[220px]"},[A(m,{type:"selectSearch",value:M.value[s.key]||"",options:s.options,placeholder:`All ${s.label}s`,onInput:O=>he(s.key,O)},null,8,["value","options","placeholder","onInput"])]))),128)),X.value>0?(n(),r("button",{key:1,type:"button",onClick:te,class:"px-3 py-2 text-sm font-medium text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors"}," Clear filters ")):b("",!0),a.selectable&&a.selectedRows.length>0&&a.bulkActions.length>0?(n(),r("div",Rt,[l("span",Dt,x(a.selectedRows.length)+" selected ",1),l("div",Mt,[(n(!0),r(C,null,D(a.bulkActions,(s,O)=>(n(),r("button",{key:O,type:"button",onClick:h=>be(s),class:I(["inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm font-medium transition-all duration-150",s.variant==="danger"?"bg-red-100 text-red-700 hover:bg-red-200 dark:bg-red-900/30 dark:text-red-400 dark:hover:bg-red-900/50":"bg-neutral-100 text-neutral-700 hover:bg-neutral-200 dark:bg-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-700"])},[(n(),E(G(s.icon),{class:"w-4 h-4"})),B(" "+x(s.label),1)],10,Bt))),128))])])):b("",!0)])])):b("",!0),H(e.$slots,"toolbar"),l("div",Vt,[l("div",jt,[l("table",Kt,[l("thead",Lt,[l("tr",null,[a.selectable?(n(),r("th",Ft,[l("div",Pt,[l("input",{type:"checkbox",checked:ae.value,indeterminate:fe.value,onChange:pe,class:"w-4 h-4 rounded border-neutral-300 dark:border-neutral-600 text-accent-600 focus:ring-accent-500 focus:ring-offset-0 cursor-pointer transition-colors"},null,40,Tt)])])):b("",!0),(n(!0),r(C,null,D(a.columns,s=>(n(),r("th",{key:s.key,class:I(["px-4 py-2.5 font-medium text-xs uppercase tracking-wide text-neutral-500 dark:text-neutral-400",S(s.align),s.width||"",j(s)?"cursor-pointer select-none group":""]),onClick:O=>P(s)},[l("div",{class:I(["inline-flex items-center gap-1",s.align==="right"?"flex-row-reverse":"",j(s)?"hover:text-neutral-700 dark:hover:text-neutral-200 transition-colors":""])},[l("span",null,x(s.label),1),j(s)?(n(),r("span",{key:0,class:I(["inline-flex items-center justify-center w-5 h-5 rounded transition-all duration-150",v.value===s.key?"bg-accent-100 dark:bg-accent-900/50":"group-hover:bg-neutral-200 dark:group-hover:bg-neutral-700"])},[(n(),E(G(ie(s)),{class:I(["w-3.5 h-3.5",v.value===s.key?"text-accent-600 dark:text-accent-400":"text-neutral-400 dark:text-neutral-500"])},null,8,["class"]))],2)):b("",!0)],2)],10,Ot))),128)),Y.value?(n(),r("th",Ht," Actions ")):b("",!0)])]),l("tbody",Et,[a.loading?(n(),r("tr",Qt,[l("td",{colspan:ne.value,class:"px-4 py-16"},[H(e.$slots,"loading",{},()=>[l("div",Nt,[A(Ve,{size:"md"}),i[3]||(i[3]=l("span",{class:"text-sm"},"Loading data...",-1))])])],8,Ut)])):T.value.length===0?(n(),r("tr",Gt,[l("td",{colspan:ne.value,class:"px-4 py-16"},[H(e.$slots,"empty",{},()=>[l("div",Jt,[l("div",Wt,[A(Q(Qe),{class:"w-6 h-6"})]),l("p",Xt,x(a.emptyMessage),1),X.value>0?(n(),r("button",{key:0,onClick:te,type:"button",class:"text-xs text-accent-600 dark:text-accent-400 hover:underline font-medium"}," Clear filters ")):b("",!0)])])],8,qt)])):(n(!0),r(C,{key:2},D(T.value,(s,O)=>(n(),r("tr",{key:s[a.rowKey]??O,class:I(["transition-all duration-150 cursor-pointer relative",N(s)?"bg-accent-50 dark:bg-accent-950/30":"hover:bg-neutral-50 dark:hover:bg-neutral-900/50"]),onClick:h=>u("row-click",s)},[N(s)?(n(),r("div",Zt)):b("",!0),a.selectable?(n(),r("td",{key:1,class:"px-4 py-3",onClick:i[0]||(i[0]=se(()=>{},["stop"]))},[l("div",ea,[l("input",{type:"checkbox",checked:N(s),onChange:h=>ve(s),class:"w-4 h-4 rounded border-neutral-300 dark:border-neutral-600 text-accent-600 focus:ring-accent-500 focus:ring-offset-0 cursor-pointer transition-colors"},null,40,ta)])])):b("",!0),(n(!0),r(C,null,D(a.columns,h=>(n(),r("td",{key:h.key,class:I(["px-4 py-3 text-sm",S(h.align),w(s,h),N(s)?"text-accent-900 dark:text-accent-100":"text-neutral-700 dark:text-neutral-300"])},[H(e.$slots,`cell-${h.key}`,{value:s[h.key],row:s,column:h},()=>[h.html?(n(),r("span",{key:0,innerHTML:_(s,h)},null,8,aa)):(n(),r(C,{key:1},[B(x(_(s,h)),1)],64))])],2))),128)),Y.value?(n(),r("td",{key:2,class:"px-4 py-3 text-right",onClick:i[1]||(i[1]=se(()=>{},["stop"]))},[l("div",na,[(n(!0),r(C,null,D(ye.value,(h,Z)=>le((n(),r("button",{key:`non-delete-${Z}`,disabled:F(h,s),onClick:Ce=>R(h,s),class:I(["p-1.5 rounded-md transition-all duration-150",F(h,s)?"opacity-30 cursor-not-allowed":"text-neutral-400 hover:text-neutral-700 hover:bg-neutral-100 dark:hover:text-neutral-200 dark:hover:bg-neutral-800"]),title:h.label},[(n(),E(G(y(h.icon)),{class:"w-4 h-4"}))],10,sa)),[[re,L(h,s)]])),128)),H(e.$slots,"extra-actions",{row:s}),(n(!0),r(C,null,D(we.value,(h,Z)=>le((n(),r("button",{key:`delete-${Z}`,disabled:F(h,s),onClick:Ce=>R(h,s),class:I(["p-1.5 rounded-md transition-all duration-150",F(h,s)?"opacity-30 cursor-not-allowed":"text-neutral-400 hover:text-red-600 hover:bg-red-50 dark:hover:text-red-400 dark:hover:bg-red-900/30"]),title:h.label},[(n(),E(G(y(h.icon)),{class:"w-4 h-4"}))],10,la)),[[re,L(h,s)]])),128))])])):b("",!0)],10,Yt))),128))])])]),a.paginated?(n(),E(gt,{key:0,page:a.page,"page-size":a.pageSize,"total-items":a.totalItems,"page-size-options":a.pageSizeOptions,"onUpdate:page":ke,"onUpdate:pageSize":xe},null,8,["page","page-size","total-items","page-size-options"])):b("",!0)]),A(je,{modelValue:d.value,"onUpdate:modelValue":i[2]||(i[2]=s=>d.value=s),title:"Confirm Action",message:c.value,"confirm-text":"Confirm","cancel-text":"Cancel",onConfirm:V,onCancel:J},null,8,["modelValue","message"])])}}});export{Oe as I,ca as _};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as E,
|
|
1
|
+
import{a as E,m as H}from"./index.js";import{_ as M}from"./CopyButton.vue_vue_type_script_setup_true_lang.js";import{d as z,r as h,c as j,b as m,e as d,q as y,f as _,z as R,j as P,H as F,n as K}from"./vue.js";const U={class:"json-viewer relative bg-white dark:bg-neutral-900"},W={key:0,class:"absolute top-[5px] right-[5px] z-10"},q=["innerHTML"],D=["src","alt"],G="__agentbuilder_json_viewer_interactive_string__",Q=z({__name:"JsonViewer",props:{json:{},threadId:{},showCopyButton:{type:Boolean},actions:{}},emits:["action"],setup(u,{emit:x}){const r=u,k=x,l=h(null),p=h(null),I=t=>!!t&&typeof t=="object"&&t.__agentbuilderJsonViewerKind===G&&typeof t.value=="string",w=t=>[".jpg",".jpeg",".png",".gif",".webp",".svg",".bmp"].some(n=>t.toLowerCase().endsWith(n)),N=t=>r.threadId?E(`/api/threads/${r.threadId}/fs${t}`):null,S=j(()=>{if(!r.json)return"";if(typeof r.json=="string")try{return JSON.stringify(JSON.parse(r.json),null,2)}catch{return r.json}return JSON.stringify(r.json,null,2)}),a=t=>t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),$=t=>{const e=a(t.label),n=a(t.title||t.label);return`<button type="button" class="json-inline-action json-inline-action--${a(t.action)}" data-action="${a(t.action)}" data-index="${t.index??""}" title="${n}">${e}</button>`},v=t=>{if(!t)return"";const e=(r.actions||[]).find(n=>n.token===t);return e?$(e):""},C=t=>{let e="",n=a(t);for(const s of r.actions||[]){const o=a(s.token),i=$(s);s.placement==="before"?(n.includes(o)&&(e+=i),n=n.split(o).join("")):n=n.split(o).join(i)}return{before:e,content:n}},b=(t,e,n={})=>{const{before:s,content:o}=C(t),i=v(n.beforeActionToken),c=n.afterLabel?` <span class="json-fold-marker">${a(n.afterLabel)}</span>`:"";return r.threadId&&w(t)&&t.startsWith("/attachments/")?`${i}${s}${e('"')}<span class="json-image-path" data-path="${a(t)}">${o}</span>${e('"')}${c}`:`${i}${s}${e('"')}<span class="json-string">${o}</span>${e('"')}${c}`},f=(t,e=0)=>{const n=" ".repeat(e),s=o=>`<span class="json-punct">${o}</span>`;if(t===null)return'<span class="json-null">null</span>';if(typeof t=="boolean")return`<span class="json-boolean">${t}</span>`;if(typeof t=="number")return`<span class="json-number">${t}</span>`;if(typeof t=="string")return b(t,s);if(I(t))return b(t.value,s,{beforeActionToken:t.beforeActionToken,afterLabel:t.afterLabel});if(Array.isArray(t)){if(t.length===0)return`${s("[")}${s("]")}`;const o=t.map((i,c)=>{const g=c<t.length-1?s(","):"";return`${n} ${f(i,e+1)}${g}`});return`${s("[")}
|
|
2
2
|
${o.join(`
|
|
3
3
|
`)}
|
|
4
4
|
${n}${s("]")}`}if(typeof t=="object"){const o=Object.entries(t);if(o.length===0)return`${s("{")}${s("}")}`;const i=o.map(([c,g],V)=>{const B=V<o.length-1?s(","):"",O=`${s('"')}<span class="json-key">${a(c)}</span>${s('"')}`;return`${n} ${O}${s(":")} ${f(g,e+1)}${B}`});return`${s("{")}
|
package/dist/client/LoginView.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as
|
|
1
|
+
import{d as B,X as F,Y as O,r as s,c as z,o as G,O as x,b as n,e as l,f as t,j as u,k as b,q as m,u as V,F as E,J as T,s as H,m as K}from"./vue.js";import{r as R,s as y,a as p,_ as D,b as U,g as $,l as J,c as W,d as X,e as _}from"./index.js";import"./formkit.js";import"./vendor.js";import"./syntax.js";import"./monaco.js";const Y={class:"login-container flex-1 flex items-center justify-center px-4"},I={class:"max-w-md w-full space-y-8"},Q={class:"flex justify-center"},Z=["src"],ee={class:"bg-white dark:bg-neutral-900 border border-neutral-300 dark:border-neutral-700 py-8 px-6 rounded-lg"},te={key:0,class:"bg-red-50 dark:bg-red-950 border border-red-500 text-red-700 dark:text-red-400 px-4 py-3 mb-6 rounded"},re={key:1,class:"py-6 text-center text-sm text-neutral-600 dark:text-neutral-300"},ae={class:"mt-6"},oe={key:0,class:"mt-6"},fe=B({__name:"LoginView",setup(se){function k(r){if(r.startsWith("/src/")||r.startsWith("data:"))return r;const e=$();return e==="/"?r.replace("/agents/","/"):r.replace("/agents/",`${e}/`)}const C=k(J),P=k(W),v=F(),w=O(),i=s(""),g=s(!1),h=s(!0),d=s(!1),c=s(!1),j=s(R()==="dark"),f=s(null),L=z(()=>j.value?P:C);async function S(){try{const r=await fetch(p("/api/auth/bootstrap"),{method:"POST",headers:{Accept:"application/json"}});if(!r.ok)return!1;const e=await r.json();return e.token?(y(e.token),await v.push("/"),!0):!1}catch{return!1}}G(async()=>{const r=w.query.token,e=w.query.error;if(r){y(r),v.push("/");return}if(e&&(e==="oauth_failed"?i.value="OAuth authentication failed. Please try again.":e==="oauth_not_configured"&&(i.value="OAuth provider is not configured.")),!await S()){h.value=!1;try{const a=await fetch(p("/api/auth/config"));if(a.ok){const o=await a.json();d.value=o.github||!1,c.value=o.google||!1}}catch{d.value=!1,c.value=!1}}});async function q(r){i.value="",X(f),g.value=!0;try{const e=await fetch(p("/api/auth/login"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:r.username,password:r.password})}),a=await e.json();e.ok?(y(a.token),v.push("/")):_(a,f)||(i.value=a.error||"Login failed")}catch{_({error:"Network error. Please try again."},f)}finally{g.value=!1}}function A(){window.location.href=p("/api/auth/oauth/github")}function M(){window.location.href=p("/api/auth/oauth/google")}return(r,e)=>{const a=x("FormKitMessages"),o=x("FormKit");return l(),n("div",Y,[t("div",I,[t("div",Q,[t("img",{src:L.value,alt:"AgentBuilder",class:"h-16 pointer-events-none select-none"},null,8,Z)]),u(U,{offsetX:8,offsetY:8,intensity:.2,pattern:"crosshatch"},{default:b(()=>[t("div",ee,[u(o,{type:"form",actions:!1,onSubmit:q,onNode:e[0]||(e[0]=N=>f.value=N),disabled:g.value},{default:b(()=>[i.value?(l(),n("div",te,V(i.value),1)):m("",!0),u(a,{node:f.value||void 0},null,8,["node"]),h.value?(l(),n("div",re," Connecting to your Standard Agents account... ")):(l(),n(E,{key:2},[u(o,{type:"text",name:"username",label:"Username",placeholder:"Enter your username",validation:"required","validation-messages":{required:"Username is required"}}),u(o,{type:"password",name:"password",label:"Password",placeholder:"Enter your password",validation:"required","validation-messages":{required:"Password is required"}}),t("div",ae,[u(T(D),{type:"submit",variant:"primary","full-width":"",loading:g.value},{default:b(()=>[...e[1]||(e[1]=[H(" Sign in ",-1)])]),_:1},8,["loading"])])],64))]),_:1},8,["disabled"]),!h.value&&(d.value||c.value)?(l(),n("div",oe,[e[4]||(e[4]=t("div",{class:"relative"},[t("div",{class:"absolute inset-0 flex items-center"},[t("div",{class:"w-full border-t border-neutral-300 dark:border-neutral-600"})]),t("div",{class:"relative flex justify-center text-sm"},[t("span",{class:"px-2 bg-white dark:bg-neutral-900 text-neutral-500 dark:text-neutral-400"},"Or continue with")])],-1)),t("div",{class:K(["mt-6 grid gap-3",d.value&&c.value?"grid-cols-2":"grid-cols-1"])},[d.value?(l(),n("button",{key:0,onClick:A,type:"button",class:"w-full inline-flex justify-center items-center px-4 py-2.5 border border-neutral-300 dark:border-neutral-600 bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 rounded-md font-medium hover:bg-neutral-50 dark:hover:bg-neutral-700 transition-colors"},[...e[2]||(e[2]=[t("svg",{class:"h-5 w-5",fill:"currentColor",viewBox:"0 0 20 20"},[t("path",{"fill-rule":"evenodd",d:"M10 0C4.477 0 0 4.484 0 10.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0110 4.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.203 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.942.359.31.678.921.678 1.856 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0020 10.017C20 4.484 15.522 0 10 0z","clip-rule":"evenodd"})],-1),t("span",{class:"ml-2"},"GitHub",-1)])])):m("",!0),c.value?(l(),n("button",{key:1,onClick:M,type:"button",class:"w-full inline-flex justify-center items-center px-4 py-2.5 border border-neutral-300 dark:border-neutral-600 bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 rounded-md font-medium hover:bg-neutral-50 dark:hover:bg-neutral-700 transition-colors"},[...e[3]||(e[3]=[t("svg",{class:"h-5 w-5",viewBox:"0 0 24 24"},[t("path",{fill:"currentColor",d:"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"}),t("path",{fill:"currentColor",d:"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"}),t("path",{fill:"currentColor",d:"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"}),t("path",{fill:"currentColor",d:"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"})],-1),t("span",{class:"ml-2"},"Google",-1)])])):m("",!0)],2)])):m("",!0)])]),_:1})])])}}});export{fe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as j,r as d,w as z,a3 as H,z as O,e as f,H as R,j as r,k as C,b as w,q as b,Z as S,m as x,f as m,u as F,J as E,g as _,h as K}from"./vue.js";import{b as P,
|
|
1
|
+
import{d as j,r as d,w as z,a3 as H,z as O,e as f,H as R,j as r,k as C,b as w,q as b,Z as S,m as x,f as m,u as F,J as E,g as _,h as K}from"./vue.js";import{b as P,ai as J}from"./index.js";import{a as X,_ as Y,l as Z}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";const G={class:"flex items-center justify-between p-4 border-b border-neutral-200 dark:border-neutral-700 flex-shrink-0"},Q={class:"text-xl font-bold"},W={key:0,class:"p-6 border-t border-neutral-200 dark:border-neutral-700 flex-shrink-0"},le=j({__name:"Modal",props:{modelValue:{type:Boolean},title:{},width:{default:"max-w-lg"},minHeight:{default:"min-h-[24rem]"},hasChanges:{type:Boolean,default:void 0},contentPadding:{type:Boolean,default:!0}},emits:["update:modelValue","close"],setup(l,{emit:T}){const c=l,V=T,a=d(),n=d(!1),v=d(new Map);let s=null,i=null;const h=()=>{i&&(clearTimeout(i),i=null)},y=()=>a.value&&(a.value.querySelector("input")||a.value.querySelector("textarea")||a.value.querySelector("select")||a.value.querySelector("[contenteditable]")||a.value.querySelector(".monaco-editor")),q=()=>{if(!a.value)return;a.value.querySelectorAll(".monaco-editor-container").forEach(t=>{const o=t.__monacoEditor;if(o&&typeof o.getValue=="function"){const k=o.getValue();v.value.set(t,k)}})},M=()=>{if(!a.value)return!1;const e=a.value.querySelectorAll(".monaco-editor-container");for(const t of e){const o=t.__monacoEditor;if(o&&typeof o.getValue=="function"){const k=o.getValue(),B=v.value.get(t);if(B===void 0||(o.getRawOptions?.()||{}).readOnly===!0)continue;if(k!==B)return!0}}return!1},I=e=>{const t=e;return t.type==="checkbox"||t.type==="radio"?t.checked!==t.defaultChecked:(t.tagName==="SELECT",t.value!==t.defaultValue)},$=()=>{if(c.hasChanges!==void 0)return c.hasChanges;if(!a.value)return!1;if(M())return!0;const e=a.value.querySelectorAll("input, textarea, select");for(const t of e)if(I(t))return!0;return!1},A=()=>{y()&&$()?n.value=!0:u()},u=()=>{V("update:modelValue",!1),V("close")},D=()=>{n.value=!1,u()},L=()=>{n.value=!1},p=e=>{e.key==="Escape"&&c.modelValue&&(y()||u())};z(()=>c.modelValue,async e=>{e?(document.addEventListener("keydown",p),s=Z(),await K(),h(),i=setTimeout(()=>{q()},100)):(document.removeEventListener("keydown",p),s?.(),s=null,h(),v.value.clear())}),H(()=>{document.removeEventListener("keydown",p),s?.(),s=null,h()});const g=d(!1),N=e=>{g.value=e.target===e.currentTarget},U=e=>{e.target===e.currentTarget&&g.value&&(y()||u()),g.value=!1};return(e,t)=>(f(),O(R,{to:"body"},[r(S,{"enter-active-class":"transition-opacity duration-200","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity duration-200","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:C(()=>[l.modelValue?(f(),w("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-white/80 dark:bg-black/80 backdrop-blur-sm dark:text-white",onMousedown:N,onClick:U},[r(S,{"enter-active-class":"transition-all duration-200","enter-from-class":"opacity-0 scale-95","enter-to-class":"opacity-100 scale-100","leave-active-class":"transition-all duration-200","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-95"},{default:C(()=>[l.modelValue?(f(),w("div",{key:0,class:x(["w-full",l.width,"max-h-[85vh] flex flex-col"])},[r(P,{"offset-x":8,"offset-y":8,intensity:.35},{default:C(()=>[m("div",{ref_key:"modalRef",ref:a,class:x(["bg-white dark:bg-neutral-900 border border-neutral-300 dark:border-neutral-600 rounded-lg flex flex-col max-h-[85vh]",l.minHeight])},[m("div",G,[m("h2",Q,F(l.title),1),r(E(X),{icon:E(J),label:"Close modal",variant:"ghost",onClick:A},null,8,["icon"])]),m("div",{class:x(["flex-1 min-h-0",l.contentPadding?"overflow-y-auto p-6":"overflow-hidden flex flex-col"])},[_(e.$slots,"default")],2),e.$slots.footer?(f(),w("div",W,[_(e.$slots,"footer")])):b("",!0)],2)]),_:3})],2)):b("",!0)]),_:3})],32)):b("",!0)]),_:3}),r(Y,{modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=o=>n.value=o),title:"Unsaved Changes",message:"You have unsaved changes that will be lost. Are you sure you want to close?","confirm-text":"Close Anyway","cancel-text":"Keep Editing",onConfirm:D,onCancel:L},null,8,["modelValue"])]))}});export{le as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as K,c as C,O as q,b,e as d,f as v,q as M,j as x,J as $,aj as R,z as T,k as F,s as G,u as I,r as u,w as te,B as Ae,a5 as Be,ao as Ee,L as Ue,m as Fe,_ as Je}from"./vue.js";import{_ as Re}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{a5 as xe,a6 as Ke,_ as fe,a7 as be,A as ze,a8 as Ie,a9 as qe,aa as _e,ab as W,S as Le,a as E,ac as oe,ad as De,ae as ye,af as He}from"./index.js";const We={class:"space-y-3"},Ge={class:"flex items-center justify-between"},Qe={key:0,class:"text-sm text-neutral-500 dark:text-neutral-400"},Xe={key:1,class:"space-y-3"},Ye={class:"grid grid-cols-2 gap-x-4 gap-y-2"},Ze={class:"grid grid-cols-2 gap-4"},el=K({__name:"ModelCapabilitiesSection",props:{capabilities:{},detectedCapabilities:{},loadingCapabilities:{type:Boolean}},emits:["update:capabilities","reset"],setup(t,{emit:w}){const g=t,s=w,c=p=>C({get:()=>g.capabilities[p],set:i=>{const V=typeof g.capabilities[p]=="boolean"?!!i:Number(i||0);s("update:capabilities",{...g.capabilities,[p]:V})}}),f=c("supportsImages"),e=c("supportsToolCalls"),a=c("supportsStreaming"),y=c("supportsJsonMode"),h=c("maxContextTokens"),O=c("maxOutputTokens");return(p,i)=>{const V=q("FormKit");return d(),b("div",We,[v("div",Ge,[i[7]||(i[7]=v("label",{class:"block text-sm font-medium"},"Model Capabilities",-1)),t.detectedCapabilities?(d(),b("button",{key:0,onClick:i[0]||(i[0]=m=>s("reset")),type:"button",class:"text-xs text-accent-600 dark:text-accent-400 hover:underline"}," Reset to detected ")):M("",!0)]),i[8]||(i[8]=v("p",{class:"text-xs text-neutral-500 dark:text-neutral-400 -mt-1"}," Auto-detected from the provider. Override if needed. ",-1)),t.loadingCapabilities?(d(),b("div",Qe," Detecting capabilities... ")):(d(),b("div",Xe,[v("div",Ye,[x(V,{type:"checkbox",name:"supports_images",modelValue:$(f),"onUpdate:modelValue":i[1]||(i[1]=m=>R(f)?f.value=m:null),label:"Vision/Images"},null,8,["modelValue"]),x(V,{type:"checkbox",name:"supports_tool_calls",modelValue:$(e),"onUpdate:modelValue":i[2]||(i[2]=m=>R(e)?e.value=m:null),label:"Tool Calls"},null,8,["modelValue"]),x(V,{type:"checkbox",name:"supports_streaming",modelValue:$(a),"onUpdate:modelValue":i[3]||(i[3]=m=>R(a)?a.value=m:null),label:"Streaming"},null,8,["modelValue"]),x(V,{type:"checkbox",name:"supports_json_mode",modelValue:$(y),"onUpdate:modelValue":i[4]||(i[4]=m=>R(y)?y.value=m:null),label:"JSON Mode"},null,8,["modelValue"])]),v("div",Ze,[x(V,{type:"unit",name:"max_context_tokens",modelValue:$(h),"onUpdate:modelValue":i[5]||(i[5]=m=>R(h)?h.value=m:null),label:"Max Context Tokens",placeholder:"e.g., 128,000",unit:"",decimals:"0",step:"1000",min:"0"},null,8,["modelValue"]),x(V,{type:"unit",name:"max_output_tokens",modelValue:$(O),"onUpdate:modelValue":i[6]||(i[6]=m=>R(O)?O.value=m:null),label:"Max Output Tokens",placeholder:"e.g., 16,384",unit:"",decimals:"0",step:"1000",min:"0"},null,8,["modelValue"])])]))])}}}),ll={class:"space-y-3"},al=K({__name:"ModelFallbacksSection",props:{fallbackModels:{},configuredModelOptions:{},loadingConfiguredModels:{type:Boolean}},emits:["update:fallbackModels"],setup(t,{emit:w}){const g=t,s=w,c=C({get:()=>g.fallbackModels,set:f=>s("update:fallbackModels",f)});return(f,e)=>{const a=q("FormKit");return d(),b("div",ll,[e[1]||(e[1]=v("label",{class:"block text-sm font-medium"},"Fallback Models",-1)),e[2]||(e[2]=v("p",{class:"text-xs text-neutral-500 dark:text-neutral-400 -mt-1"}," Used in order if the primary model fails. ",-1)),x(a,{type:"sortableMultiSelect",name:"fallbacks",modelValue:c.value,"onUpdate:modelValue":e[0]||(e[0]=y=>c.value=y),options:t.configuredModelOptions,loading:t.loadingConfiguredModels,placeholder:"Add fallback model...","search-placeholder":"Search models...","add-label":"Add another model","rich-row-component":xe},null,8,["modelValue","options","loading"])])}}}),tl={class:"flex items-center justify-between gap-4"},ol={key:1},sl={class:"flex gap-2"},ge=K({__name:"ModelModalFooter",props:{readonly:{type:Boolean},formSubmitted:{type:Boolean},formValid:{type:Boolean},saving:{type:Boolean},isEditMode:{type:Boolean}},emits:["cancel"],setup(t,{emit:w}){const g=w;return(s,c)=>(d(),b("div",tl,[!t.readonly&&t.formSubmitted&&!t.formValid?(d(),T($(Ke),{key:0},{default:F(()=>[...c[1]||(c[1]=[G(" Please fix the errors above before submitting. ",-1)])]),_:1})):(d(),b("div",ol)),v("div",sl,[x($(fe),{variant:"ghost",size:"sm",disabled:t.saving,onClick:c[0]||(c[0]=f=>g("cancel"))},{default:F(()=>[G(I(t.readonly?"Close":"Cancel"),1)]),_:1},8,["disabled"]),t.readonly?M("",!0):(d(),T($(fe),{key:0,variant:"primary",size:"sm",disabled:t.saving,loading:t.saving,type:"submit",form:"model-form"},{default:F(()=>[G(I(t.isEditMode?"Update Model":"Add Model"),1)]),_:1},8,["disabled","loading"]))])]))}}),il={class:"space-y-3"},nl={class:"flex items-center justify-between"},dl={key:0,class:"flex gap-2"},ul={key:0,class:"flex items-center gap-2 py-4"},rl={key:1,class:"py-4 text-sm text-neutral-500 dark:text-neutral-400"},vl=K({__name:"ModelOpenRouterEndpointsSection",props:{endpoints:{},selectedEndpoints:{},loading:{type:Boolean}},emits:["selectAll","clear","update:selectedEndpoints"],setup(t,{emit:w}){const g=t,s=w,c=C({get:()=>g.selectedEndpoints,set:e=>s("update:selectedEndpoints",e)}),f=C(()=>g.endpoints.map(e=>({value:e.id,label:e.name,badge:e.quantization&&e.quantization!=="unknown"?e.quantization:void 0,meta:[`Input: ${be(e.pricing.prompt)}`,`Output: ${be(e.pricing.completion)}`,e.maxPromptTokens?`Max prompt: ${e.maxPromptTokens.toLocaleString()}`:"",e.maxCompletionTokens?`Max output: ${e.maxCompletionTokens.toLocaleString()}`:""].filter(Boolean)})));return(e,a)=>{const y=q("FormKit");return d(),b("div",il,[v("div",nl,[a[4]||(a[4]=v("label",{class:"block text-sm font-medium"},"Available Providers",-1)),t.endpoints.length>0?(d(),b("div",dl,[v("button",{type:"button",onClick:a[0]||(a[0]=h=>s("selectAll")),class:"text-xs text-accent-600 dark:text-accent-400 hover:underline"}," Select all "),a[3]||(a[3]=v("span",{class:"text-xs text-neutral-300 dark:text-neutral-600"},"|",-1)),v("button",{type:"button",onClick:a[1]||(a[1]=h=>s("clear")),class:"text-xs text-accent-600 dark:text-accent-400 hover:underline"}," Clear ")])):M("",!0)]),a[6]||(a[6]=v("p",{class:"text-xs text-neutral-500 dark:text-neutral-400 -mt-1"}," OpenRouter routes to the cheapest available provider. ",-1)),t.loading?(d(),b("div",ul,[x(ze,{class:"w-4 h-4"}),a[5]||(a[5]=v("span",{class:"text-sm text-neutral-500 dark:text-neutral-400"},"Loading providers...",-1))])):t.endpoints.length===0?(d(),b("div",rl," No providers available for this model ")):(d(),T(y,{key:2,type:"selectableCardList",name:"included_providers",modelValue:c.value,"onUpdate:modelValue":a[2]||(a[2]=h=>c.value=h),options:f.value,"empty-message":"No providers available for this model.","outer-class":"$reset"},null,8,["modelValue","options"]))])}}}),cl={key:0,class:"space-y-3"},ml={key:0,class:"text-sm text-neutral-500 dark:text-neutral-400"},pl=K({__name:"ModelProviderToolsSection",props:{tools:{},selectedTools:{},loading:{type:Boolean}},emits:["update:selectedTools"],setup(t,{emit:w}){const g=t,s=w,c=C({get:()=>g.selectedTools,set:e=>s("update:selectedTools",e)}),f=C(()=>g.tools.map(e=>({value:e.name,label:e.name,description:e.description,warning:e.tenvs&&e.tenvs.length>0?`Requires: ${e.tenvs.filter(a=>a.required).map(a=>a.name).join(", ")||"none (optional config available)"}`:void 0})));return(e,a)=>{const y=q("FormKit");return t.tools.length>0?(d(),b("div",cl,[a[1]||(a[1]=v("label",{class:"block text-sm font-medium"},"Provider Tools",-1)),a[2]||(a[2]=v("p",{class:"text-xs text-neutral-500 dark:text-neutral-400 -mt-1"}," Built-in tools available for this model. ",-1)),t.loading?(d(),b("div",ml," Loading provider tools... ")):(d(),T(y,{key:1,type:"selectableCardList",name:"provider_tools",modelValue:c.value,"onUpdate:modelValue":a[0]||(a[0]=h=>c.value=h),options:f.value,"outer-class":"$reset"},null,8,["modelValue","options"]))])):M("",!0)}}}),fl={key:0,class:"flex items-start justify-between gap-3 border-b border-neutral-200 px-5 py-3 dark:border-neutral-700"},bl={class:"min-w-0"},yl={class:"text-[10px] font-bold uppercase tracking-[0.18em] text-neutral-400 dark:text-neutral-500"},gl={class:"text-sm font-semibold text-neutral-900 dark:text-neutral-100"},xl=["disabled"],kl={class:"space-y-4"},Ml={key:0},hl={key:1},Cl={class:"px-1 py-0.5 bg-neutral-100 dark:bg-neutral-800 rounded"},Vl={key:1,class:"flex items-center justify-between gap-4 border-t border-neutral-200 px-5 py-3 dark:border-neutral-700"},$l=K({__name:"ModelModal",props:{modelValue:{type:Boolean},editModel:{},mode:{default:"add"},readonly:{type:Boolean,default:!1},saving:{type:Boolean,default:!1},inline:{type:Boolean,default:!1}},emits:["update:modelValue","save"],setup(t,{expose:w,emit:g}){const s=t,c=g,f=u([]),e=u(""),a=u(""),y=u({}),h=u(!1),O=u(!1),p=u([]),i=u([]),V=u(!1),m=u(ye()),J=u(null),Q=u(!1),j=u([]),k=u([]),X=u(!1),Y=u([]),Z=u(!1),ke=C(()=>Y.value.map(Ie)),Me=async()=>{Z.value=!0;try{const l=await fetch(E("/api/models"));if(l.ok){const o=await l.json();Y.value=o.models||[]}}catch{Y.value=[]}finally{Z.value=!1}},A=u([]),S=C(()=>s.mode==="edit"),_=u(null),L=u(!0),D=u(!1),he=l=>{_.value=l,l.on("commit",()=>{L.value=l.context?.state.valid??!0,D.value=l.context?.state.submitted??!1})},ee=u(""),N=u(""),se=C({get:()=>N.value,set:l=>{N.value=qe(l)}}),U=u(!1),P=u(null),Ce=C(()=>f.value.filter(l=>l.hasApiKey).map(_e)),ie=l=>{if(!l.length)return;const o={...y.value};for(const r of l)o[r.value]=r;y.value=o},ne=l=>y.value[l],Ve=C(()=>Object.values(y.value).map(l=>W(l,e.value))),we=C(()=>!S.value||!P.value||U.value?!1:N.value!==P.value.name||e.value!==P.value.provider||a.value!==P.value.model||JSON.stringify(i.value.sort())!==JSON.stringify(P.value.endpoints.sort())||JSON.stringify(A.value)!==JSON.stringify(P.value.fallbacks)||JSON.stringify(m.value)!==JSON.stringify(P.value.capabilities)||JSON.stringify(k.value.sort())!==JSON.stringify(P.value.providerTools.sort())),de=C(()=>f.value.find(o=>o.name===e.value)?.sdk==="openrouter"),ue=async()=>{h.value=!0;try{const l=await fetch(E("/api/providers"));if(l.ok){const o=await l.json();f.value=o.providers||[]}}catch{f.value=[]}finally{h.value=!1}},Se=async l=>{if(!e.value)return[];O.value=!0;try{const o=await fetch(E("/api/models/available"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e.value,search:l?.search||void 0,page:l?.page||1,perPage:25})});if(!o.ok)return[];const r=await o.json(),n=r.models||[];return ie(n),r.hasNextPage&&typeof l?.hasNextPage=="function"&&l.hasNextPage(),n.map(B=>W(B,e.value))}catch{return[]}finally{O.value=!1}},re=async l=>{const o=ne(l);if(o)return W(o,e.value);if(!e.value||!l)return null;O.value=!0;try{const r=await fetch(E("/api/models/available"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e.value,search:l,page:1,perPage:25})});if(!r.ok)return null;const B=(await r.json()).models||[];ie(B);const H=B.find(z=>z.value===l)||B.find(z=>z.slug===l)||B.find(z=>z.label===l);return H?W(H,e.value):null}catch{return null}finally{O.value=!1}},ve=async()=>{if(!(!e.value||!a.value)){Q.value=!0;try{const l=await fetch(E("/api/models/capabilities"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e.value,modelId:a.value})});if(l.ok){const o=await l.json();o.capabilities&&(J.value=o.capabilities,m.value=oe(o.capabilities))}}catch{J.value=null}finally{Q.value=!1}}},ce=async()=>{if(!e.value||!a.value){j.value=[],k.value=[];return}X.value=!0;try{const l=await fetch(E(`/api/providers/${e.value}/tools?model=${encodeURIComponent(a.value)}`));if(l.ok){const o=await l.json();if(j.value=o.tools||[],!S.value)k.value=j.value.map(r=>r.name);else{const r=new Set(j.value.map(n=>n.name));k.value=k.value.filter(n=>r.has(n))}}else j.value=[],k.value=[]}catch{j.value=[],k.value=[]}finally{X.value=!1}},me=()=>{m.value=ye(),J.value=null},Te=()=>{i.value=p.value.map(l=>l.id)},$e=()=>{i.value=[]},Oe=()=>{J.value&&(m.value=oe(J.value))},le=()=>{N.value="",ee.value="",e.value="",a.value="",y.value={},A.value=[],p.value=[],i.value=[],j.value=[],k.value=[],me(),P.value=null,U.value=!1,L.value=!0,D.value=!1,_.value?.reset()},Ne=async()=>{if(s.editModel){U.value=!0;try{await ue(),N.value=s.editModel.name||"",ee.value=s.editModel.name||"",e.value=s.editModel.provider_id||s.editModel.provider,a.value=s.editModel.model,await pe(),s.editModel.included_providers&&s.editModel.included_providers.length>0&&(i.value=s.editModel.included_providers),await Pe(),s.editModel.capabilities?m.value=oe(s.editModel.capabilities):await ve(),await ce(),s.editModel.providerTools&&Array.isArray(s.editModel.providerTools)&&(k.value=s.editModel.providerTools),P.value={name:N.value,provider:e.value,model:a.value,endpoints:[...i.value],fallbacks:[...A.value],capabilities:{...m.value},providerTools:[...k.value]}}finally{U.value=!1}}};te(()=>s.modelValue,async l=>{l?(Me(),S.value&&s.editModel?await Ne():(await ue(),le())):le()});const Pe=async()=>{if(s.editModel?.id){if(s.editModel.fallbacks&&Array.isArray(s.editModel.fallbacks)){A.value=He(s.editModel.fallbacks);return}try{const l=await fetch(E(`/api/models/${encodeURIComponent(s.editModel.id)}/fallbacks`));if(l.ok){const o=await l.json();A.value=(o.fallbacks||[]).map(r=>r.fallback_model_id)}}catch{A.value=[]}}};te(e,async(l,o)=>{U.value||S.value&&!o&&l===(s.editModel?.provider_id||s.editModel?.provider)||(a.value="",y.value={},p.value=[],i.value=[],e.value&&(O.value=!1))});const pe=async()=>{if(!a.value||!e.value){p.value=[];return}const l=f.value.find(n=>n.name===e.value);if(!l||l.sdk!=="openrouter"){p.value=[];return}const r=(ne(a.value)||await re(a.value))?.slug||(a.value.includes("/")?a.value:void 0);if(!r){p.value=[];return}V.value=!0;try{const n=await fetch(E("/api/models/endpoints"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e.value,modelSlug:r})});if(n.ok){const B=await n.json();p.value=B.endpoints||[],S.value||(i.value=p.value.map(H=>H.id))}else p.value=[]}catch{p.value=[]}finally{V.value=!1}};te(a,async(l,o)=>{U.value||S.value&&!o&&l===s.editModel?.model||(a.value?(await pe(),await ve(),await ce(),o&&l!==o&&(i.value=p.value.map(r=>r.id))):(p.value=[],i.value=[],j.value=[],k.value=[],me()))});const je=()=>{c("save",De({isEditMode:S.value,editModel:s.editModel,originalName:ee.value,modelName:N.value,selectedModel:a.value,selectedProvider:e.value,isOpenRouter:de.value,selectedEndpoints:i.value,fallbackModels:A.value,capabilities:m.value,selectedProviderTools:k.value}))};w({formNode:_});const ae=()=>{le(),c("update:modelValue",!1)};return(l,o)=>{const r=q("FormKit");return d(),T(Ae(t.inline?"div":Re),Be(t.inline?{class:"flex max-h-[80vh] w-[576px] flex-col overflow-hidden rounded-xl border border-neutral-200 bg-white shadow-lg dark:border-neutral-700 dark:bg-neutral-950"}:{modelValue:t.modelValue,title:S.value?"Edit Model":"Add Model",width:"max-w-2xl",minHeight:"min-h-[36rem]",hasChanges:we.value},Ee(t.inline?{}:{"update:modelValue":n=>l.$emit("update:modelValue",n)})),Ue({default:F(()=>[t.inline?(d(),b("div",fl,[v("div",bl,[v("div",yl,I(t.editModel?.name||t.editModel?.id||"Model"),1),v("h2",gl,I(S.value?"Edit Model":"Add Model"),1)]),v("button",{type:"button",class:"shrink-0 rounded-md border border-neutral-200 px-2.5 py-1 text-xs font-medium text-neutral-500 transition-colors hover:border-neutral-300 hover:text-neutral-800 dark:border-neutral-700 dark:text-neutral-400 dark:hover:border-neutral-500 dark:hover:text-neutral-100",disabled:t.saving,onClick:ae}," Cancel ",8,xl)])):M("",!0),v("div",{class:Fe(t.inline?"min-h-0 flex-1 overflow-y-auto p-5":"")},[x(r,{type:"form",id:"model-form",actions:!1,disabled:t.readonly||t.saving||U.value,onSubmit:je,onNode:he},{default:F(()=>[v("div",kl,[x(r,{type:"autocomplete",name:"provider",modelValue:e.value,"onUpdate:modelValue":o[0]||(o[0]=n=>e.value=n),options:Ce.value,label:"Provider",placeholder:"Search providers...",disabled:h.value,validation:"required","validation-visibility":"submit","selection-removable":""},null,8,["modelValue","options","disabled"]),e.value?(d(),b("div",Ml,[x(r,{type:"selectSearch",name:"model",modelValue:a.value,"onUpdate:modelValue":o[1]||(o[1]=n=>a.value=n),options:Ve.value,"options-loader":Se,"option-loader":re,"load-on-scroll":"","search-debounce":150,label:"Model",placeholder:"Select a model","search-placeholder":"Search models...",loading:O.value,"rich-row-component":xe,validation:"required","validation-visibility":"submit"},null,8,["modelValue","options","loading"])])):M("",!0),a.value?(d(),b("div",hl,[x(r,{type:"text",name:"name",modelValue:se.value,"onUpdate:modelValue":o[2]||(o[2]=n=>se.value=n),label:"Name",placeholder:"e.g., coding_model, planning_model, fast_response",validation:"required|snakeCase","validation-visibility":"blur",help:N.value?void 0:"A descriptive name for this model. This becomes the filename and reference ID."},null,8,["modelValue","help"]),N.value?(d(),T($(Le),{key:0,class:"mt-1"},{default:F(()=>[o[7]||(o[7]=G(" Will be saved as: ",-1)),v("code",Cl,I(N.value),1)]),_:1})):M("",!0)])):M("",!0),a.value?(d(),T(el,{key:2,capabilities:m.value,"onUpdate:capabilities":o[3]||(o[3]=n=>m.value=n),"detected-capabilities":J.value,"loading-capabilities":Q.value,onReset:Oe},null,8,["capabilities","detected-capabilities","loading-capabilities"])):M("",!0),a.value?(d(),T(pl,{key:3,"selected-tools":k.value,"onUpdate:selectedTools":o[4]||(o[4]=n=>k.value=n),tools:j.value,loading:X.value},null,8,["selected-tools","tools","loading"])):M("",!0),a.value&&de.value?(d(),T(vl,{key:4,endpoints:p.value,"selected-endpoints":i.value,"onUpdate:selectedEndpoints":o[5]||(o[5]=n=>i.value=n),loading:V.value,onSelectAll:Te,onClear:$e},null,8,["endpoints","selected-endpoints","loading"])):M("",!0),a.value?(d(),T(al,{key:5,"fallback-models":A.value,"onUpdate:fallbackModels":o[6]||(o[6]=n=>A.value=n),"configured-model-options":ke.value,"loading-configured-models":Z.value},null,8,["fallback-models","configured-model-options","loading-configured-models"])):M("",!0),t.readonly?M("",!0):(d(),T($(Je),{key:6,node:_.value||void 0},null,8,["node"]))])]),_:1},8,["disabled"])],2),t.inline?(d(),b("div",Vl,[x(ge,{readonly:t.readonly,"form-submitted":D.value,"form-valid":L.value,saving:t.saving,"is-edit-mode":S.value,onCancel:ae},null,8,["readonly","form-submitted","form-valid","saving","is-edit-mode"])])):M("",!0)]),_:2},[t.inline?void 0:{name:"footer",fn:F(()=>[x(ge,{readonly:t.readonly,"form-submitted":D.value,"form-valid":L.value,saving:t.saving,"is-edit-mode":S.value,onCancel:ae},null,8,["readonly","form-submitted","form-valid","saving","is-edit-mode"])]),key:"0"}]),1040)}}});export{$l as _};
|
|
1
|
+
import{d as K,c as C,O as q,b,e as d,f as v,q as M,j as x,J as $,aj as R,z as T,k as F,s as G,u as I,r as u,w as te,B as Be,a5 as Ue,ao as Ee,L as Ae,m as Fe,_ as Je}from"./vue.js";import{_ as Re}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{a7 as xe,a8 as Ke,_ as fe,a9 as be,B as ze,aa as Ie,ab as qe,ac as _e,ad as W,U as Le,a as E,ae as oe,af as De,ag as ye,ah as He}from"./index.js";const We={class:"space-y-3"},Ge={class:"flex items-center justify-between"},Qe={key:0,class:"text-sm text-neutral-500 dark:text-neutral-400"},Xe={key:1,class:"space-y-3"},Ye={class:"grid grid-cols-2 gap-x-4 gap-y-2"},Ze={class:"grid grid-cols-2 gap-4"},el=K({__name:"ModelCapabilitiesSection",props:{capabilities:{},detectedCapabilities:{},loadingCapabilities:{type:Boolean}},emits:["update:capabilities","reset"],setup(t,{emit:w}){const g=t,s=w,c=p=>C({get:()=>g.capabilities[p],set:i=>{const V=typeof g.capabilities[p]=="boolean"?!!i:Number(i||0);s("update:capabilities",{...g.capabilities,[p]:V})}}),f=c("supportsImages"),e=c("supportsToolCalls"),a=c("supportsStreaming"),y=c("supportsJsonMode"),h=c("maxContextTokens"),O=c("maxOutputTokens");return(p,i)=>{const V=q("FormKit");return d(),b("div",We,[v("div",Ge,[i[7]||(i[7]=v("label",{class:"block text-sm font-medium"},"Model Capabilities",-1)),t.detectedCapabilities?(d(),b("button",{key:0,onClick:i[0]||(i[0]=m=>s("reset")),type:"button",class:"text-xs text-accent-600 dark:text-accent-400 hover:underline"}," Reset to detected ")):M("",!0)]),i[8]||(i[8]=v("p",{class:"text-xs text-neutral-500 dark:text-neutral-400 -mt-1"}," Auto-detected from the provider. Override if needed. ",-1)),t.loadingCapabilities?(d(),b("div",Qe," Detecting capabilities... ")):(d(),b("div",Xe,[v("div",Ye,[x(V,{type:"checkbox",name:"supports_images",modelValue:$(f),"onUpdate:modelValue":i[1]||(i[1]=m=>R(f)?f.value=m:null),label:"Vision/Images"},null,8,["modelValue"]),x(V,{type:"checkbox",name:"supports_tool_calls",modelValue:$(e),"onUpdate:modelValue":i[2]||(i[2]=m=>R(e)?e.value=m:null),label:"Tool Calls"},null,8,["modelValue"]),x(V,{type:"checkbox",name:"supports_streaming",modelValue:$(a),"onUpdate:modelValue":i[3]||(i[3]=m=>R(a)?a.value=m:null),label:"Streaming"},null,8,["modelValue"]),x(V,{type:"checkbox",name:"supports_json_mode",modelValue:$(y),"onUpdate:modelValue":i[4]||(i[4]=m=>R(y)?y.value=m:null),label:"JSON Mode"},null,8,["modelValue"])]),v("div",Ze,[x(V,{type:"unit",name:"max_context_tokens",modelValue:$(h),"onUpdate:modelValue":i[5]||(i[5]=m=>R(h)?h.value=m:null),label:"Max Context Tokens",placeholder:"e.g., 128,000",unit:"",decimals:"0",step:"1000",min:"0"},null,8,["modelValue"]),x(V,{type:"unit",name:"max_output_tokens",modelValue:$(O),"onUpdate:modelValue":i[6]||(i[6]=m=>R(O)?O.value=m:null),label:"Max Output Tokens",placeholder:"e.g., 16,384",unit:"",decimals:"0",step:"1000",min:"0"},null,8,["modelValue"])])]))])}}}),ll={class:"space-y-3"},al=K({__name:"ModelFallbacksSection",props:{fallbackModels:{},configuredModelOptions:{},loadingConfiguredModels:{type:Boolean}},emits:["update:fallbackModels"],setup(t,{emit:w}){const g=t,s=w,c=C({get:()=>g.fallbackModels,set:f=>s("update:fallbackModels",f)});return(f,e)=>{const a=q("FormKit");return d(),b("div",ll,[e[1]||(e[1]=v("label",{class:"block text-sm font-medium"},"Fallback Models",-1)),e[2]||(e[2]=v("p",{class:"text-xs text-neutral-500 dark:text-neutral-400 -mt-1"}," Used in order if the primary model fails. ",-1)),x(a,{type:"sortableMultiSelect",name:"fallbacks",modelValue:c.value,"onUpdate:modelValue":e[0]||(e[0]=y=>c.value=y),options:t.configuredModelOptions,loading:t.loadingConfiguredModels,placeholder:"Add fallback model...","search-placeholder":"Search models...","add-label":"Add another model","rich-row-component":xe},null,8,["modelValue","options","loading"])])}}}),tl={class:"flex items-center justify-between gap-4"},ol={key:1},sl={class:"flex gap-2"},ge=K({__name:"ModelModalFooter",props:{readonly:{type:Boolean},formSubmitted:{type:Boolean},formValid:{type:Boolean},saving:{type:Boolean},isEditMode:{type:Boolean}},emits:["cancel"],setup(t,{emit:w}){const g=w;return(s,c)=>(d(),b("div",tl,[!t.readonly&&t.formSubmitted&&!t.formValid?(d(),T($(Ke),{key:0},{default:F(()=>[...c[1]||(c[1]=[G(" Please fix the errors above before submitting. ",-1)])]),_:1})):(d(),b("div",ol)),v("div",sl,[x($(fe),{variant:"ghost",size:"sm",disabled:t.saving,onClick:c[0]||(c[0]=f=>g("cancel"))},{default:F(()=>[G(I(t.readonly?"Close":"Cancel"),1)]),_:1},8,["disabled"]),t.readonly?M("",!0):(d(),T($(fe),{key:0,variant:"primary",size:"sm",disabled:t.saving,loading:t.saving,type:"submit",form:"model-form"},{default:F(()=>[G(I(t.isEditMode?"Update Model":"Add Model"),1)]),_:1},8,["disabled","loading"]))])]))}}),il={class:"space-y-3"},nl={class:"flex items-center justify-between"},dl={key:0,class:"flex gap-2"},ul={key:0,class:"flex items-center gap-2 py-4"},rl={key:1,class:"py-4 text-sm text-neutral-500 dark:text-neutral-400"},vl=K({__name:"ModelOpenRouterEndpointsSection",props:{endpoints:{},selectedEndpoints:{},loading:{type:Boolean}},emits:["selectAll","clear","update:selectedEndpoints"],setup(t,{emit:w}){const g=t,s=w,c=C({get:()=>g.selectedEndpoints,set:e=>s("update:selectedEndpoints",e)}),f=C(()=>g.endpoints.map(e=>({value:e.id,label:e.name,badge:e.quantization&&e.quantization!=="unknown"?e.quantization:void 0,meta:[`Input: ${be(e.pricing.prompt)}`,`Output: ${be(e.pricing.completion)}`,e.maxPromptTokens?`Max prompt: ${e.maxPromptTokens.toLocaleString()}`:"",e.maxCompletionTokens?`Max output: ${e.maxCompletionTokens.toLocaleString()}`:""].filter(Boolean)})));return(e,a)=>{const y=q("FormKit");return d(),b("div",il,[v("div",nl,[a[4]||(a[4]=v("label",{class:"block text-sm font-medium"},"Available Providers",-1)),t.endpoints.length>0?(d(),b("div",dl,[v("button",{type:"button",onClick:a[0]||(a[0]=h=>s("selectAll")),class:"text-xs text-accent-600 dark:text-accent-400 hover:underline"}," Select all "),a[3]||(a[3]=v("span",{class:"text-xs text-neutral-300 dark:text-neutral-600"},"|",-1)),v("button",{type:"button",onClick:a[1]||(a[1]=h=>s("clear")),class:"text-xs text-accent-600 dark:text-accent-400 hover:underline"}," Clear ")])):M("",!0)]),a[6]||(a[6]=v("p",{class:"text-xs text-neutral-500 dark:text-neutral-400 -mt-1"}," OpenRouter routes to the cheapest available provider. ",-1)),t.loading?(d(),b("div",ul,[x(ze,{class:"w-4 h-4"}),a[5]||(a[5]=v("span",{class:"text-sm text-neutral-500 dark:text-neutral-400"},"Loading providers...",-1))])):t.endpoints.length===0?(d(),b("div",rl," No providers available for this model ")):(d(),T(y,{key:2,type:"selectableCardList",name:"included_providers",modelValue:c.value,"onUpdate:modelValue":a[2]||(a[2]=h=>c.value=h),options:f.value,"empty-message":"No providers available for this model.","outer-class":"$reset"},null,8,["modelValue","options"]))])}}}),cl={key:0,class:"space-y-3"},ml={key:0,class:"text-sm text-neutral-500 dark:text-neutral-400"},pl=K({__name:"ModelProviderToolsSection",props:{tools:{},selectedTools:{},loading:{type:Boolean}},emits:["update:selectedTools"],setup(t,{emit:w}){const g=t,s=w,c=C({get:()=>g.selectedTools,set:e=>s("update:selectedTools",e)}),f=C(()=>g.tools.map(e=>({value:e.name,label:e.name,description:e.description,warning:e.tenvs&&e.tenvs.length>0?`Requires: ${e.tenvs.filter(a=>a.required).map(a=>a.name).join(", ")||"none (optional config available)"}`:void 0})));return(e,a)=>{const y=q("FormKit");return t.tools.length>0?(d(),b("div",cl,[a[1]||(a[1]=v("label",{class:"block text-sm font-medium"},"Provider Tools",-1)),a[2]||(a[2]=v("p",{class:"text-xs text-neutral-500 dark:text-neutral-400 -mt-1"}," Built-in tools available for this model. ",-1)),t.loading?(d(),b("div",ml," Loading provider tools... ")):(d(),T(y,{key:1,type:"selectableCardList",name:"provider_tools",modelValue:c.value,"onUpdate:modelValue":a[0]||(a[0]=h=>c.value=h),options:f.value,"outer-class":"$reset"},null,8,["modelValue","options"]))])):M("",!0)}}}),fl={key:0,class:"flex items-start justify-between gap-3 border-b border-neutral-200 px-5 py-3 dark:border-neutral-700"},bl={class:"min-w-0"},yl={class:"text-[10px] font-bold uppercase tracking-[0.18em] text-neutral-400 dark:text-neutral-500"},gl={class:"text-sm font-semibold text-neutral-900 dark:text-neutral-100"},xl=["disabled"],kl={class:"space-y-4"},Ml={key:0},hl={key:1},Cl={class:"px-1 py-0.5 bg-neutral-100 dark:bg-neutral-800 rounded"},Vl={key:1,class:"flex items-center justify-between gap-4 border-t border-neutral-200 px-5 py-3 dark:border-neutral-700"},$l=K({__name:"ModelModal",props:{modelValue:{type:Boolean},editModel:{},mode:{default:"add"},readonly:{type:Boolean,default:!1},saving:{type:Boolean,default:!1},inline:{type:Boolean,default:!1}},emits:["update:modelValue","save"],setup(t,{expose:w,emit:g}){const s=t,c=g,f=u([]),e=u(""),a=u(""),y=u({}),h=u(!1),O=u(!1),p=u([]),i=u([]),V=u(!1),m=u(ye()),J=u(null),Q=u(!1),j=u([]),k=u([]),X=u(!1),Y=u([]),Z=u(!1),ke=C(()=>Y.value.map(Ie)),Me=async()=>{Z.value=!0;try{const l=await fetch(E("/api/models"));if(l.ok){const o=await l.json();Y.value=o.models||[]}}catch{Y.value=[]}finally{Z.value=!1}},B=u([]),S=C(()=>s.mode==="edit"),_=u(null),L=u(!0),D=u(!1),he=l=>{_.value=l,l.on("commit",()=>{L.value=l.context?.state.valid??!0,D.value=l.context?.state.submitted??!1})},ee=u(""),N=u(""),se=C({get:()=>N.value,set:l=>{N.value=qe(l)}}),A=u(!1),P=u(null),Ce=C(()=>f.value.filter(l=>l.hasApiKey).map(_e)),ie=l=>{if(!l.length)return;const o={...y.value};for(const r of l)o[r.value]=r;y.value=o},ne=l=>y.value[l],Ve=C(()=>Object.values(y.value).map(l=>W(l,e.value))),we=C(()=>!S.value||!P.value||A.value?!1:N.value!==P.value.name||e.value!==P.value.provider||a.value!==P.value.model||JSON.stringify(i.value.sort())!==JSON.stringify(P.value.endpoints.sort())||JSON.stringify(B.value)!==JSON.stringify(P.value.fallbacks)||JSON.stringify(m.value)!==JSON.stringify(P.value.capabilities)||JSON.stringify(k.value.sort())!==JSON.stringify(P.value.providerTools.sort())),de=C(()=>f.value.find(o=>o.name===e.value)?.sdk==="openrouter"),ue=async()=>{h.value=!0;try{const l=await fetch(E("/api/providers"));if(l.ok){const o=await l.json();f.value=o.providers||[]}}catch{f.value=[]}finally{h.value=!1}},Se=async l=>{if(!e.value)return[];O.value=!0;try{const o=await fetch(E("/api/models/available"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e.value,search:l?.search||void 0,page:l?.page||1,perPage:25})});if(!o.ok)return[];const r=await o.json(),n=r.models||[];return ie(n),r.hasNextPage&&typeof l?.hasNextPage=="function"&&l.hasNextPage(),n.map(U=>W(U,e.value))}catch{return[]}finally{O.value=!1}},re=async l=>{const o=ne(l);if(o)return W(o,e.value);if(!e.value||!l)return null;O.value=!0;try{const r=await fetch(E("/api/models/available"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e.value,search:l,page:1,perPage:25})});if(!r.ok)return null;const U=(await r.json()).models||[];ie(U);const H=U.find(z=>z.value===l)||U.find(z=>z.slug===l)||U.find(z=>z.label===l);return H?W(H,e.value):null}catch{return null}finally{O.value=!1}},ve=async()=>{if(!(!e.value||!a.value)){Q.value=!0;try{const l=await fetch(E("/api/models/capabilities"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e.value,modelId:a.value})});if(l.ok){const o=await l.json();o.capabilities&&(J.value=o.capabilities,m.value=oe(o.capabilities))}}catch{J.value=null}finally{Q.value=!1}}},ce=async()=>{if(!e.value||!a.value){j.value=[],k.value=[];return}X.value=!0;try{const l=await fetch(E(`/api/providers/${e.value}/tools?model=${encodeURIComponent(a.value)}`));if(l.ok){const o=await l.json();if(j.value=o.tools||[],!S.value)k.value=j.value.map(r=>r.name);else{const r=new Set(j.value.map(n=>n.name));k.value=k.value.filter(n=>r.has(n))}}else j.value=[],k.value=[]}catch{j.value=[],k.value=[]}finally{X.value=!1}},me=()=>{m.value=ye(),J.value=null},Te=()=>{i.value=p.value.map(l=>l.id)},$e=()=>{i.value=[]},Oe=()=>{J.value&&(m.value=oe(J.value))},le=()=>{N.value="",ee.value="",e.value="",a.value="",y.value={},B.value=[],p.value=[],i.value=[],j.value=[],k.value=[],me(),P.value=null,A.value=!1,L.value=!0,D.value=!1,_.value?.reset()},Ne=async()=>{if(s.editModel){A.value=!0;try{await ue(),N.value=s.editModel.name||"",ee.value=s.editModel.name||"",e.value=s.editModel.provider_id||s.editModel.provider,a.value=s.editModel.model,await pe(),s.editModel.included_providers&&s.editModel.included_providers.length>0&&(i.value=s.editModel.included_providers),await Pe(),s.editModel.capabilities?m.value=oe(s.editModel.capabilities):await ve(),await ce(),s.editModel.providerTools&&Array.isArray(s.editModel.providerTools)&&(k.value=s.editModel.providerTools),P.value={name:N.value,provider:e.value,model:a.value,endpoints:[...i.value],fallbacks:[...B.value],capabilities:{...m.value},providerTools:[...k.value]}}finally{A.value=!1}}};te(()=>s.modelValue,async l=>{l?(Me(),S.value&&s.editModel?await Ne():(await ue(),le())):le()});const Pe=async()=>{if(s.editModel?.id){if(s.editModel.fallbacks&&Array.isArray(s.editModel.fallbacks)){B.value=He(s.editModel.fallbacks);return}try{const l=await fetch(E(`/api/models/${encodeURIComponent(s.editModel.id)}/fallbacks`));if(l.ok){const o=await l.json();B.value=(o.fallbacks||[]).map(r=>r.fallback_model_id)}}catch{B.value=[]}}};te(e,async(l,o)=>{A.value||S.value&&!o&&l===(s.editModel?.provider_id||s.editModel?.provider)||(a.value="",y.value={},p.value=[],i.value=[],e.value&&(O.value=!1))});const pe=async()=>{if(!a.value||!e.value){p.value=[];return}const l=f.value.find(n=>n.name===e.value);if(!l||l.sdk!=="openrouter"){p.value=[];return}const r=(ne(a.value)||await re(a.value))?.slug||(a.value.includes("/")?a.value:void 0);if(!r){p.value=[];return}V.value=!0;try{const n=await fetch(E("/api/models/endpoints"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e.value,modelSlug:r})});if(n.ok){const U=await n.json();p.value=U.endpoints||[],S.value||(i.value=p.value.map(H=>H.id))}else p.value=[]}catch{p.value=[]}finally{V.value=!1}};te(a,async(l,o)=>{A.value||S.value&&!o&&l===s.editModel?.model||(a.value?(await pe(),await ve(),await ce(),o&&l!==o&&(i.value=p.value.map(r=>r.id))):(p.value=[],i.value=[],j.value=[],k.value=[],me()))});const je=()=>{c("save",De({isEditMode:S.value,editModel:s.editModel,originalName:ee.value,modelName:N.value,selectedModel:a.value,selectedProvider:e.value,isOpenRouter:de.value,selectedEndpoints:i.value,fallbackModels:B.value,capabilities:m.value,selectedProviderTools:k.value}))};w({formNode:_});const ae=()=>{le(),c("update:modelValue",!1)};return(l,o)=>{const r=q("FormKit");return d(),T(Be(t.inline?"div":Re),Ue(t.inline?{class:"flex max-h-[80vh] w-[576px] flex-col overflow-hidden rounded-xl border border-neutral-200 bg-white shadow-lg dark:border-neutral-700 dark:bg-neutral-950"}:{modelValue:t.modelValue,title:S.value?"Edit Model":"Add Model",width:"max-w-2xl",minHeight:"min-h-[36rem]",hasChanges:we.value},Ee(t.inline?{}:{"update:modelValue":n=>l.$emit("update:modelValue",n)})),Ae({default:F(()=>[t.inline?(d(),b("div",fl,[v("div",bl,[v("div",yl,I(t.editModel?.name||t.editModel?.id||"Model"),1),v("h2",gl,I(S.value?"Edit Model":"Add Model"),1)]),v("button",{type:"button",class:"shrink-0 rounded-md border border-neutral-200 px-2.5 py-1 text-xs font-medium text-neutral-500 transition-colors hover:border-neutral-300 hover:text-neutral-800 dark:border-neutral-700 dark:text-neutral-400 dark:hover:border-neutral-500 dark:hover:text-neutral-100",disabled:t.saving,onClick:ae}," Cancel ",8,xl)])):M("",!0),v("div",{class:Fe(t.inline?"min-h-0 flex-1 overflow-y-auto p-5":"")},[x(r,{type:"form",id:"model-form",actions:!1,disabled:t.readonly||t.saving||A.value,onSubmit:je,onNode:he},{default:F(()=>[v("div",kl,[x(r,{type:"autocomplete",name:"provider",modelValue:e.value,"onUpdate:modelValue":o[0]||(o[0]=n=>e.value=n),options:Ce.value,label:"Provider",placeholder:"Search providers...",disabled:h.value,validation:"required","validation-visibility":"submit","selection-removable":""},null,8,["modelValue","options","disabled"]),e.value?(d(),b("div",Ml,[x(r,{type:"selectSearch",name:"model",modelValue:a.value,"onUpdate:modelValue":o[1]||(o[1]=n=>a.value=n),options:Ve.value,"options-loader":Se,"option-loader":re,"load-on-scroll":"","search-debounce":150,label:"Model",placeholder:"Select a model","search-placeholder":"Search models...",loading:O.value,"rich-row-component":xe,validation:"required","validation-visibility":"submit"},null,8,["modelValue","options","loading"])])):M("",!0),a.value?(d(),b("div",hl,[x(r,{type:"text",name:"name",modelValue:se.value,"onUpdate:modelValue":o[2]||(o[2]=n=>se.value=n),label:"Name",placeholder:"e.g., coding_model, planning_model, fast_response",validation:"required|snakeCase","validation-visibility":"blur",help:N.value?void 0:"A descriptive name for this model. This becomes the filename and reference ID."},null,8,["modelValue","help"]),N.value?(d(),T($(Le),{key:0,class:"mt-1"},{default:F(()=>[o[7]||(o[7]=G(" Will be saved as: ",-1)),v("code",Cl,I(N.value),1)]),_:1})):M("",!0)])):M("",!0),a.value?(d(),T(el,{key:2,capabilities:m.value,"onUpdate:capabilities":o[3]||(o[3]=n=>m.value=n),"detected-capabilities":J.value,"loading-capabilities":Q.value,onReset:Oe},null,8,["capabilities","detected-capabilities","loading-capabilities"])):M("",!0),a.value?(d(),T(pl,{key:3,"selected-tools":k.value,"onUpdate:selectedTools":o[4]||(o[4]=n=>k.value=n),tools:j.value,loading:X.value},null,8,["selected-tools","tools","loading"])):M("",!0),a.value&&de.value?(d(),T(vl,{key:4,endpoints:p.value,"selected-endpoints":i.value,"onUpdate:selectedEndpoints":o[5]||(o[5]=n=>i.value=n),loading:V.value,onSelectAll:Te,onClear:$e},null,8,["endpoints","selected-endpoints","loading"])):M("",!0),a.value?(d(),T(al,{key:5,"fallback-models":B.value,"onUpdate:fallbackModels":o[6]||(o[6]=n=>B.value=n),"configured-model-options":ke.value,"loading-configured-models":Z.value},null,8,["fallback-models","configured-model-options","loading-configured-models"])):M("",!0),t.readonly?M("",!0):(d(),T($(Je),{key:6,node:_.value||void 0},null,8,["node"]))])]),_:1},8,["disabled"])],2),t.inline?(d(),b("div",Vl,[x(ge,{readonly:t.readonly,"form-submitted":D.value,"form-valid":L.value,saving:t.saving,"is-edit-mode":S.value,onCancel:ae},null,8,["readonly","form-submitted","form-valid","saving","is-edit-mode"])])):M("",!0)]),_:2},[t.inline?void 0:{name:"footer",fn:F(()=>[x(ge,{readonly:t.readonly,"form-submitted":D.value,"form-valid":L.value,saving:t.saving,"is-edit-mode":S.value,onCancel:ae},null,8,["readonly","form-submitted","form-valid","saving","is-edit-mode"])]),key:"0"}]),1040)}}});export{$l as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{y as D,D as T,C as j,a as q,a6 as C}from"./index.js";import{_ as P}from"./ModelModal.vue_vue_type_script_setup_true_lang.js";import{_ as z}from"./DataTable.vue_vue_type_script_setup_true_lang.js";import{C as J}from"./CenteredContentView.js";import{I as L}from"./plus.js";import{u as G}from"./useActionFeedback.js";import{d as H,r as c,c as K,o as O,z as $,e as r,k as m,q as v,b as s,j as A,J as l,s as Q,u,F as W,l as X,f as n}from"./vue.js";import"./formkit.js";import"./vendor.js";import"./monaco.js";import"./syntax.js";import"./Modal.vue_vue_type_script_setup_true_lang.js";import"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";import"./chevron-right.js";const Y={key:1,class:"mb-5 rounded-lg border border-amber-200 dark:border-amber-800 bg-amber-50 dark:bg-amber-950/30 px-4 py-3 text-sm text-amber-800 dark:text-amber-200"},Z={class:"flex items-center gap-2"},ee=["src","alt"],oe={class:"text-sm text-neutral-600 dark:text-neutral-400 font-mono"},te={class:"flex items-center gap-2"},ae=["src","alt"],re={key:0,class:"space-y-0.5"},le=["title"],se={class:"shrink-0 font-mono pr-2"},de=["src","alt"],ne={class:"truncate"},ie={key:1,class:"text-neutral-400 dark:text-neutral-600 text-sm"},Ce=H({__name:"ModelsView",setup(ce){const i=c(!1),_=c([]),g=c(!1),d=c(null),p=c("add"),M=c(null),{saving:I,saveModel:F,deleteModel:N}=D(),f=T(),{feedback:y,setFeedback:h,clearFeedback:k}=G(),V=[{key:"name",label:"Name",width:"w-1/4",sortable:!0},{key:"model",label:"Model",width:"w-1/4",sortable:!0,filterable:!0,filterIcon:(a,o)=>`/api/providers/${o.provider}/icon?model=${encodeURIComponent(o.model||"")}`},{key:"provider",label:"Provider",width:"w-1/4",sortable:!0,filterable:!0,filterIcon:(a,o)=>`/api/providers/${o.provider}/icon`},{key:"fallbacks",label:"Fallbacks",width:"w-1/4"}],w=a=>{d.value=a,p.value="edit",i.value=!0},x=[{icon:"edit",label:"Edit",handler:a=>w(a)},{icon:"delete",label:"Delete",confirm:!0,confirmMessage:"Are you sure you want to delete this model? This action cannot be undone.",variant:"danger",handler:async a=>{await S(a.id)}}],R=K(()=>f?x:x.filter(a=>a.variant!=="danger")),b=async()=>{g.value=!0,k();try{const a=await fetch(q("/api/models"));if(!a.ok)throw new Error("Failed to fetch models");const o=await a.json();_.value=o.models||[]}catch{h("error","Models could not be loaded."),_.value=[]}finally{g.value=!1}},E=async a=>{k();const o=!!d.value,e=await F({mode:o?"edit":"add",data:a,editingId:o?d.value.id:null,formNode:M.value?.formNode});if(!e.ok){if(!e.formErrorsApplied){const t=C(e.error,`Failed to ${o?"update":"add"} model`);h("error",t)}return}await b(),i.value=!1,d.value=null,p.value="add"},S=async a=>{k();const o=await N({id:String(a)});if(!o.ok){const e=C(o.error,"Failed to delete model");h("error",e);return}await b(),h("success","Model deleted.")},U=()=>{p.value="add",d.value=null,i.value=!0};return O(()=>{b()}),(a,o)=>(r(),$(J,null,{default:m(()=>[l(y)?(r(),$(l(j),{key:0,variant:l(y).variant,class:"mb-4"},{default:m(()=>[Q(u(l(y).message),1)]),_:1},8,["variant"])):v("",!0),l(f)?v("",!0):(r(),s("div",Y," Configuration is read-only in production. To make changes, edit your configuration files locally and deploy. ")),A(z,{title:"Models",description:"Configure AI models from your connected providers. Models define which AI capabilities are available to your agents.","primary-action":l(f)?{label:"Add Model",icon:l(L),handler:U}:void 0,columns:V,data:_.value,actions:R.value,loading:g.value,sortable:"",searchable:"","search-placeholder":"Search models...","empty-message":"No models configured yet. Add your first model to get started.",onRowClick:w},{"cell-name":m(({value:e,row:t})=>[n("div",Z,[t.provider?(r(),s("img",{key:0,src:`/api/providers/${t.provider}/icon?model=${encodeURIComponent(t.model||"")}`,class:"w-5 h-5 shrink-0",alt:t.provider},null,8,ee)):v("",!0),n("span",null,u(e),1)])]),"cell-model":m(({value:e})=>[n("span",oe,u(e||"—"),1)]),"cell-provider":m(({value:e,row:t})=>[n("div",te,[t.provider?(r(),s("img",{key:0,src:`/api/providers/${t.provider}/icon`,class:"w-5 h-5 shrink-0",alt:t.provider},null,8,ae)):v("",!0),n("span",null,u(e||"—"),1)])]),"cell-fallbacks":m(({value:e})=>[e&&e.length>0?(r(),s("div",re,[(r(!0),s(W,null,X(e,(t,B)=>(r(),s("div",{key:t.id,class:"text-sm text-neutral-600 dark:text-neutral-400 flex items-center",title:t.name},[n("span",se,u(B===e.length-1?"└─":"├─"),1),t.provider?(r(),s("img",{key:0,src:`/api/providers/${t.provider}/icon?model=${encodeURIComponent(t.model||"")}`,class:"w-4 h-4 shrink-0 mr-1.5",alt:t.provider},null,8,de)):v("",!0),n("span",ne,u(t.name),1)],8,le))),128))])):(r(),s("span",ie," None "))]),_:1},8,["primary-action","data","actions","loading"]),A(P,{ref_key:"modelModalRef",ref:M,modelValue:i.value,"onUpdate:modelValue":[o[0]||(o[0]=e=>i.value=e),o[1]||(o[1]=e=>{i.value=e,e||(d.value=null,p.value="add")})],"edit-model":d.value,mode:p.value,readonly:!l(f),saving:l(I),onSave:E},null,8,["modelValue","edit-model","mode","readonly","saving"])]),_:1}))}});export{Ce as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as C,X as M,Y as V,r as p,o as b,w as R,b as u,e as s,z as v,q as
|
|
1
|
+
import{d as C,X as M,Y as V,r as p,o as b,w as R,b as u,e as s,z as v,q as F,J as a,k as N,s as B,u as D,f as k}from"./vue.js";import{D as S,x as j,C as q,H as E}from"./index.js";import{P as I}from"./PromptModal.js";import{u as A}from"./useActionFeedback.js";import"./formkit.js";import"./vendor.js";import"./syntax.js";import"./monaco.js";import"./Modal.vue_vue_type_script_setup_true_lang.js";import"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";import"./check.js";const L={class:"p-8"},U={key:1,class:"flex items-center justify-center min-h-[400px]"},$={key:3,class:"flex items-center justify-center min-h-[400px]"},ee=C({__name:"PromptEditView",setup(z){const y=S(),r=M(),h=V(),i=p(!0),o=p(null),l=p(!0),c=p(null),{saving:_,savePrompt:g}=j(),{feedback:d,setFeedback:m,clearFeedback:f}=A(),x=async()=>{const t=h.params.id;if(!t){r.push("/prompts");return}l.value=!0,f();try{const e=await E(`/prompts/${encodeURIComponent(t)}`);if(e.ok){const n=await e.json();o.value=n.prompt||n}else o.value=null,m("error","Prompt not found.")}catch{o.value=null,m("error","Failed to load prompt.")}finally{l.value=!1}},P=async t=>{f();const e=await g({mode:"edit",data:t,editingId:o.value?.id,formNode:c.value?.formNode});e.ok?r.push({path:"/prompts",query:{refresh:Date.now().toString()}}):e.formErrorsApplied||m("error","Failed to update prompt.")},w=t=>{t||r.push("/prompts")};return b(()=>{x()}),R(i,t=>{t||r.push("/prompts")}),(t,e)=>(s(),u("div",L,[a(d)?(s(),v(a(q),{key:0,variant:a(d).variant,class:"mb-4"},{default:N(()=>[B(D(a(d).message),1)]),_:1},8,["variant"])):F("",!0),l.value?(s(),u("div",U,[...e[1]||(e[1]=[k("span",{class:"text-neutral-500"},"Loading prompt...",-1)])])):o.value?(s(),v(I,{key:2,ref_key:"promptModalRef",ref:c,modelValue:i.value,"onUpdate:modelValue":[e[0]||(e[0]=n=>i.value=n),w],mode:"edit","edit-prompt":o.value,readonly:!a(y),saving:a(_),onSave:P},null,8,["modelValue","edit-prompt","readonly","saving"])):(s(),u("div",$,[...e[2]||(e[2]=[k("span",{class:"text-neutral-500"},"Prompt not found",-1)])]))]))}});export{ee as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as G,b as m,e as a,f as d,d as K,m as B,z as h,q as f,J as o,k as p,s as V,u as H,j as w,_ as pe,B as j,g as U,r as $,w as T,F as ne,l as se,K as ge,h as P,a3 as xe,c as x,O as re,a5 as ye,ao as we,a4 as Se,C as $e,D as Be}from"./vue.js";import{_ as Ce}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{_,H as Te,Y as He,K as Q,i as X,L as ee,y as te,B as Fe,Z as Pe,$ as Ve,a0 as Ee,a1 as Me,a2 as Ne,a3 as ze,k as De}from"./index.js";import{I as Re}from"./check.js";const Ie={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Ke(e,c){return a(),m("svg",Ie,[...c[0]||(c[0]=[d("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z"},null,-1)])])}const ae=G({name:"lucide-wrench",render:Ke}),Le={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Ae(e,c){return a(),m("svg",Le,[...c[0]||(c[0]=[d("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"},null,-1)])])}const le=G({name:"lucide-zap",render:Ae}),je={class:"p-6 border-t border-neutral-200 dark:border-neutral-700 flex-shrink-0"},qe={key:1,class:"flex items-center gap-3"},Oe={key:0,class:"text-sm text-red-600 dark:text-red-400"},_e=K({__name:"EditFormFooter",props:{formId:{},formNode:{},readonly:{type:Boolean,default:!1},inline:{type:Boolean,default:!1},saving:{type:Boolean,default:!1},dirty:{type:Boolean,default:!1},saveSucceeded:{type:Boolean,default:!1},saveLabel:{},saveDisabled:{type:Boolean,default:!1},apiError:{default:null},cancelLabel:{default:"Cancel"}},emits:["cancel","discard"],setup(e,{emit:c}){const b=c;return(s,v)=>(a(),m("div",je,[d("div",{class:B(["flex items-center",e.inline?"justify-end":"justify-between"])},[e.inline?f("",!0):(a(),h(o(_),{key:0,variant:"ghost",size:"sm",disabled:e.saving,onClick:v[0]||(v[0]=u=>b("cancel"))},{default:p(()=>[V(H(e.cancelLabel),1)]),_:1},8,["disabled"])),e.readonly?f("",!0):(a(),m("div",qe,[e.apiError?(a(),m("span",Oe,H(e.apiError),1)):f("",!0),w(o(pe),{node:e.formNode||void 0},null,8,["node"]),e.inline&&e.dirty?(a(),h(o(_),{key:1,variant:"ghost",size:"sm",disabled:e.saving,onClick:v[1]||(v[1]=u=>b("discard"))},{default:p(()=>[...v[2]||(v[2]=[V(" Discard changes ",-1)])]),_:1},8,["disabled"])):f("",!0),w(o(_),{variant:e.saveSucceeded?"success":"primary",size:"sm",disabled:e.saveDisabled,loading:e.saving,"icon-left":e.saveSucceeded?o(Re):void 0,type:"submit",form:e.formId},{default:p(()=>[V(H(e.saveLabel),1)]),_:1},8,["variant","disabled","loading","icon-left","form"])]))],2)]))}}),Ue=["id"],Ge={class:"modal-card-header border-b border-neutral-100 px-5 py-3 dark:border-neutral-800"},Je={class:"text-sm font-semibold text-neutral-900 dark:text-neutral-100 flex items-center gap-2"},Ze={class:"p-5"},F=K({__name:"ModalCard",props:{id:{},title:{},icon:{},flat:{type:Boolean,default:!1}},setup(e){return(c,b)=>(a(),m("section",{id:e.id,class:B(e.flat?"modal-card overflow-hidden border-y border-neutral-200 bg-white dark:border-neutral-800 dark:bg-neutral-900":"modal-card overflow-hidden rounded-lg border border-neutral-200 bg-white dark:border-neutral-700 dark:bg-neutral-900")},[d("div",Ge,[d("h3",Je,[e.icon?(a(),h(j(e.icon),{key:0,class:"w-4 h-4 text-neutral-500"})):f("",!0),V(" "+H(e.title),1)])]),d("div",Ze,[U(c.$slots,"default")]),c.$slots.footer?(a(),m("div",{key:0,class:B(["modal-card-footer",e.flat?"border-t border-neutral-100 bg-transparent px-5 py-3 dark:border-neutral-800":"border-t border-neutral-100 bg-neutral-50 px-5 py-3 dark:border-neutral-800 dark:bg-neutral-800/50"])},[U(c.$slots,"footer")],2)):f("",!0)],10,Ue))}}),We=["onClick"],Ye={class:"overflow-hidden text-ellipsis whitespace-nowrap"},Qe=K({__name:"ModalTabs",props:{tabs:{},activeTab:{},accentActive:{type:Boolean},orientation:{default:"vertical"}},emits:["select"],setup(e,{emit:c}){const b=e,s=c,v=$({}),u=()=>b.orientation==="horizontal";function i(l,n){v.value[l]=n instanceof HTMLButtonElement?n:null}return T(()=>[b.activeTab,b.orientation],async()=>{u()&&(await P(),v.value[b.activeTab]?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"}))},{immediate:!0}),(l,n)=>(a(),m("div",{class:B(e.orientation==="horizontal"?"flex min-w-0 gap-1 overflow-x-auto px-2 py-2":"flex flex-col gap-1 px-2")},[(a(!0),m(ne,null,se(e.tabs,k=>(a(),m("button",{key:k.id,ref_for:!0,ref:y=>i(k.id,y),type:"button",onClick:ge(y=>s("select",k.id),["prevent"]),class:B([e.orientation==="horizontal"?"flex shrink-0 items-center gap-1.5 rounded px-2.5 py-1.5 text-xs font-medium transition-all":"flex w-full items-center gap-3 rounded px-3 py-2.5 text-left text-sm font-medium transition-all",e.activeTab===k.id?e.accentActive?"agents-surface-selected agents-text-selected":"bg-black text-white dark:bg-white dark:text-black":"text-neutral-600 dark:text-neutral-400 hover:bg-black/5 dark:hover:bg-white/10"])},[(a(),h(j(k.icon),{class:B(e.orientation==="horizontal"?"h-3.5 w-3.5 flex-shrink-0":"h-4 w-4 flex-shrink-0")},null,8,["class"])),d("span",Ye,H(k.label),1)],10,We))),128))],2))}});function Xe(e,c){const b=$(c[0]);let s=null;const v=(l,n)=>l.querySelector(`#section-${n}`),u=()=>{const l=e.value;if(!l||l.clientHeight<=0)return;const n=c.filter(M=>v(l,M)!==null);if(n.length===0)return;if(l.scrollHeight>l.clientHeight+1&&l.scrollHeight-l.scrollTop-l.clientHeight<50){b.value=n[n.length-1];return}const t=l.getBoundingClientRect(),E=t.top+t.height*.3;let I=n[0];for(const M of n)v(l,M).getBoundingClientRect().top<=E&&(I=M);b.value=I},i=l=>{const n=e.value,k=n?v(n,l):null;if(k&&n){const y=n.getBoundingClientRect().top,t=k.getBoundingClientRect().top,E=n.scrollTop+(t-y);n.scrollTo({top:E,behavior:"smooth"})}};return T(e,(l,n)=>{n&&(n.removeEventListener("scroll",u),s?.disconnect(),s=null),l&&(l.addEventListener("scroll",u),s=new ResizeObserver(u),s.observe(l),u())}),xe(()=>{e.value?.removeEventListener("scroll",u),s?.disconnect()}),{activeTab:b,scrollToSection:i}}const et={key:0,class:"mb-4 space-y-2"},tt={class:"min-w-0 flex-1"},at={class:"text-sm font-medium"},lt={class:"text-xs text-neutral-500 dark:text-neutral-400"},ot=["onClick","aria-label"],nt={key:2,class:"rounded-lg border border-dashed border-neutral-300 px-4 py-6 text-center dark:border-neutral-600"},st={key:3,class:"py-3 text-center text-xs text-neutral-400 dark:text-neutral-500"},rt=K({__name:"PromptHooksFields",props:{form:{}},setup(e){const c=e,b=$(""),s=x(()=>{const u=new Set(c.form.selectedHooks.value);return c.form.availableHooks.value.filter(i=>!u.has(i.id)).map(i=>({value:i.id,label:i.id,attrs:{description:i.hook}}))}),v=u=>{u&&(c.form.selectedHooks.value.includes(u)||(c.form.selectedHooks.value=[...c.form.selectedHooks.value,u],P(()=>{b.value=""})))};return(u,i)=>{const l=re("FormKit");return a(),m("div",null,[i[3]||(i[3]=d("p",{class:"mb-4 text-sm text-neutral-500 dark:text-neutral-400"}," Select hooks to run when this prompt is active. Hooks execute in the order listed. ",-1)),e.form.selectedHooks.value.length>0?(a(),m("div",et,[(a(!0),m(ne,null,se(e.form.selectedHooks.value,n=>(a(),m("div",{key:n,class:"flex items-center justify-between rounded-lg border border-neutral-300 p-3 dark:border-neutral-600"},[d("div",tt,[d("div",at,H(n),1),d("div",lt,H(e.form.availableHooks.value.find(k=>k.id===n)?.hook||"unknown"),1)]),d("button",{onClick:k=>e.form.selectedHooks.value=e.form.selectedHooks.value.filter(y=>y!==n),type:"button",class:"rounded p-1 text-neutral-500 transition-colors hover:bg-neutral-200 hover:text-red-500 dark:hover:bg-neutral-800","aria-label":`Remove ${n}`},[...i[1]||(i[1]=[d("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[d("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,ot)]))),128))])):f("",!0),s.value.length>0?(a(),h(l,{key:1,type:"selectSearch",modelValue:b.value,"onUpdate:modelValue":i[0]||(i[0]=n=>b.value=n),onInput:v,placeholder:e.form.selectedHooks.value.length>0?"Add another hook...":"Select a hook","search-placeholder":"Search hooks...",options:s.value,"outer-class":"$reset"},null,8,["modelValue","placeholder","options"])):f("",!0),e.form.availableHooks.value.length===0?(a(),m("div",nt,[...i[2]||(i[2]=[d("p",{class:"text-sm text-neutral-500 dark:text-neutral-400"},[V(" No hooks available. Create hooks in "),d("code",{class:"rounded bg-neutral-200 px-1.5 py-0.5 font-mono text-xs dark:bg-neutral-700"},"agents/hooks/"),V(" to enable them here. ")],-1)])])):s.value.length===0&&e.form.selectedHooks.value.length>0?(a(),m("div",st," All available hooks are selected. ")):f("",!0)])}}}),it={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function ct(e,c){return a(),m("svg",it,[...c[0]||(c[0]=[d("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2a2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1m8 0h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"},null,-1)])])}const oe=G({name:"lucide-braces",render:ct}),dt={key:0,class:"flex min-h-[500px] items-center justify-center"},ut={class:"flex min-h-0 min-w-0 flex-1 flex-col"},ft={key:0,class:"sticky top-0 z-10 flex min-w-0 shrink-0 items-center gap-2 border-b border-neutral-200 bg-neutral-50/95 px-3 backdrop-blur dark:border-neutral-800 dark:bg-neutral-950/95"},mt={class:"min-w-0 flex-1"},vt={class:"edit-sections-query"},bt=K({__name:"PromptModal",props:{modelValue:{type:Boolean},editPrompt:{},mode:{},readonly:{type:Boolean,default:!1},saving:{type:Boolean,default:!1},apiError:{default:null},inline:{type:Boolean,default:!1},inlineGlobalNotice:{type:Boolean,default:!1},inlineAccentTabs:{type:Boolean,default:!1},inlineFlatSections:{type:Boolean,default:!1},saveSuccessKey:{default:0},resetSuccessKey:{default:0},surfaceSection:{default:null},surfaceDefaultToolTab:{default:null}},emits:["update:modelValue","save"],setup(e,{expose:c,emit:b}){const s=e,v=b,u=x(()=>s.mode==="edit"),i=x(()=>!!s.surfaceSection),l=x(()=>s.inline&&s.inlineFlatSections),n=x(()=>s.inline||i.value),k=x(()=>n.value?{config:Te}:{}),y=x(()=>u.value&&(s.editPrompt?.id||s.editPrompt?.name)||""),t=He(()=>y.value,{autoload:!1}),E=$(null),I=$(null),M=["basics","schema","prompt","tools","hooks","variables","behavior"],{activeTab:J,scrollToSection:Z}=Xe(E,M),ie=[{id:"basics",label:"Basics",icon:Q},{id:"schema",label:"Schema",icon:oe},{id:"prompt",label:"Prompt",icon:X},{id:"tools",label:"Tools",icon:ae},{id:"hooks",label:"Hooks",icon:le},{id:"variables",label:"Variables",icon:ee},{id:"behavior",label:"Behavior",icon:te}],S=$(!1),N=$(!1),z=$(!1),L=$(null);let A=0;const W=x(()=>JSON.stringify({name:t.name.value,toolDescription:t.toolDescription.value,selectedModel:t.selectedModel.value,requiredSchema:t.requiredSchema.value,promptText:t.promptText.value,includeChat:t.includeChat.value,includePastTools:t.includePastTools.value,selectedTools:t.selectedTools.value,parallelToolCalls:t.parallelToolCalls.value,toolChoice:t.toolChoice.value,reasoningEffort:t.reasoningEffort.value,reasoningMaxTokens:t.reasoningMaxTokens.value,reasoningExclude:t.reasoningExclude.value,includeReasoning:t.includeReasoning.value,selectedHooks:t.selectedHooks.value,promptVariables:t.promptVariables.value,promptEnv:t.promptEnv.value}));x(()=>z.value?"success":"primary");const ce=x(()=>z.value?"Saved":u.value?"Save Prompt Changes":"Create Prompt"),de=x(()=>s.saving||N.value||s.inline&&!S.value),ue=x(()=>i.value||s.inline?{class:s.inline?"flex h-full min-w-0 flex-col":"min-w-0"}:{modelValue:s.modelValue,title:u.value?"Edit Prompt":"Add Prompt",width:"max-w-5xl",contentPadding:!1});function C(){z.value=!1,L.value=null}function D(){P().then(()=>{if(N.value){S.value=!1;return}S.value=!!t.formNode.value?.context?.state.dirty})}function fe(r){t.handleFormNode(r),r.on("commit",D),r.on("reset",D),r.on("message-added",D),r.on("message-updated",D),r.on("message-removed",D),D()}async function q(){const r=++A;N.value=!0,S.value=!1,await P();const g=t.formNode.value;if(!g||r!==A){N.value=!1,S.value=!1;return}await g.settled,g.reset(g.value),await P(),r===A&&(N.value=!1,S.value=!1)}async function Y(){await q(),z.value=!0,L.value=W.value}async function O(){C(),t.resetForm(),await P(),u.value&&y.value?await t.load():(await t.loadPrerequisites(),await t.fetchScannedVariables()),await q()}async function me(){I.value?.removeUnavailableTools(),await P();const r=await t.prepareSubmit();v("save",r)}function ve(){t.resetForm(),C(),v("update:modelValue",!1)}async function be(){C(),await O()}function he(r){v("update:modelValue",r)}function R(r){return!s.surfaceSection||s.surfaceSection===r}return T(()=>s.modelValue,async r=>{r?await O():(A+=1,t.resetForm(),C(),S.value=!1,N.value=!1)},{immediate:!0}),T(()=>y.value,async(r,g)=>{!s.modelValue||r===g||await O()}),T(()=>s.saveSuccessKey,(r,g)=>{r===g||r<=0||Y()}),T(()=>s.resetSuccessKey,(r,g)=>{r!==g&&C()}),T(W,r=>{z.value&&L.value!==null&&r!==L.value&&C()}),T(S,r=>{r&&C()}),c({formNode:t.formNode,markSaveSucceeded:Y,markCurrentFormCleanAfterSettle:q,resetSaveSuccess:C}),(r,g)=>{const ke=re("FormKit");return a(),h(j(i.value||e.inline?"div":Ce),ye(ue.value,we(i.value||e.inline?void 0:{"update:modelValue":he})),{default:p(()=>[(a(),h(j(n.value?o(Se):"div"),$e(Be(k.value)),{default:p(()=>[o(t).isLoading.value?(a(),m("div",dt,[...g[0]||(g[0]=[d("span",{class:"text-neutral-500"},"Loading prompt data...",-1)])])):(a(),h(ke,{key:1,type:"form",id:"prompt-form",actions:!1,disabled:e.readonly||e.saving,onSubmit:me,onNode:fe,"dirty-behavior":"compare","outer-class":"$reset flex min-h-0 min-w-0 flex-1 flex-col","form-class":i.value?"$reset min-w-0 flex flex-col":"$reset flex-1 min-h-0 min-w-0 flex flex-col"},{default:p(()=>[d("div",ut,[i.value?f("",!0):(a(),m("nav",ft,[U(r.$slots,"nav-leading",{},void 0,!0),d("div",mt,[w(o(Qe),{tabs:ie,"active-tab":o(J),"accent-active":e.inlineAccentTabs,orientation:"horizontal",onSelect:o(Z)},null,8,["active-tab","accent-active","onSelect"])])])),d("div",{ref_key:"contentRef",ref:E,class:B(["min-h-0 flex-1 overflow-y-auto",i.value?"p-5":l.value?"bg-neutral-100 dark:bg-neutral-950":"bg-neutral-100 p-5 dark:bg-neutral-950"])},[d("div",vt,[e.inlineGlobalNotice?(a(),m("div",{key:0,class:B(["edit-sections-notice rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-800 dark:border-amber-700 dark:bg-amber-950/30 dark:text-amber-200",l.value?"mx-5 mb-4 mt-5":"mb-4"])}," Changes here are global and will affect all new messages across all threads. ",2)):f("",!0),d("div",{class:B([l.value?"space-y-4 pb-5":"space-y-4","edit-sections-stack"])},[e.apiError?(a(),h(o(Fe),{key:0,variant:"error"},{default:p(()=>[V(H(e.apiError),1)]),_:1})):f("",!0),R("basic")?(a(),h(o(F),{key:1,id:"section-basics",title:"Basics",icon:o(Q),flat:l.value},{default:p(()=>[w(Pe,{form:o(t)},null,8,["form"])]),_:1},8,["icon","flat"])):f("",!0),R("schema")?(a(),h(o(F),{key:2,id:"section-schema",title:"Schema",icon:o(oe),flat:l.value},{default:p(()=>[w(Ve,{form:o(t)},null,8,["form"])]),_:1},8,["icon","flat"])):f("",!0),R("prompt")?(a(),h(o(F),{key:3,id:"section-prompt",title:"Prompt",icon:o(X),flat:l.value},{default:p(()=>[w(Ee,{form:o(t)},null,8,["form"])]),_:1},8,["icon","flat"])):f("",!0),R("tools")?(a(),h(o(F),{key:4,id:"section-tools",title:"Tools",icon:o(ae),flat:l.value},{default:p(()=>[w(Me,{ref_key:"toolsFieldsRef",ref:I,form:o(t),"default-tab":e.surfaceDefaultToolTab},null,8,["form","default-tab"])]),_:1},8,["icon","flat"])):f("",!0),i.value?f("",!0):(a(),h(o(F),{key:5,id:"section-hooks",title:"Hooks",icon:o(le),flat:l.value},{default:p(()=>[w(rt,{form:o(t)},null,8,["form"])]),_:1},8,["icon","flat"])),R("variables")?(a(),h(o(F),{key:6,id:"section-variables",title:"Variables",icon:o(ee),flat:l.value},{default:p(()=>[w(Ne,{form:o(t),readonly:e.readonly},null,8,["form","readonly"])]),_:1},8,["icon","flat"])):f("",!0),R("behavior")?(a(),h(o(F),{key:7,id:"section-behavior",title:"Behavior",icon:o(te),flat:l.value},{default:p(()=>[w(ze,{form:o(t)},null,8,["form"])]),_:1},8,["icon","flat"])):f("",!0)],2)])],2)]),i.value?f("",!0):(a(),h(_e,{key:0,"form-id":"prompt-form","form-node":o(t).formNode.value,readonly:e.readonly,inline:e.inline,saving:e.saving,dirty:S.value,"save-succeeded":z.value,"save-label":ce.value,"save-disabled":de.value,"api-error":e.apiError,"cancel-label":e.readonly?"Close":"Cancel",onCancel:ve,onDiscard:be},null,8,["form-node","readonly","inline","saving","dirty","save-succeeded","save-label","save-disabled","api-error","cancel-label"]))]),_:3},8,["disabled","form-class"]))]),_:3},16))]),_:3},16)}}}),xt=De(bt,[["__scopeId","data-v-e5d80261"]]);export{ae as I,xt as P,Qe as _,le as a,F as b,_e as c,Xe as u};
|
|
1
|
+
import{A as J,b as m,e as a,f as d,d as L,m as C,z as h,q as f,J as o,k as p,s as V,u as H,j as w,_ as pe,B as j,g as U,r as $,w as T,F as ne,l as se,K as ge,h as P,a3 as xe,c as x,O as re,a5 as ye,ao as we,a4 as Se,C as $e,D as Ce}from"./vue.js";import{_ as Be}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{_,J as Te,$ as He,L as X,i as Y,M as ee,z as te,C as Fe,a0 as Pe,a1 as Ve,a2 as Ee,a3 as Me,a4 as ze,a5 as Ne,m as De}from"./index.js";import{I as Re}from"./check.js";const Ie={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Le(e,c){return a(),m("svg",Ie,[...c[0]||(c[0]=[d("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z"},null,-1)])])}const ae=J({name:"lucide-wrench",render:Le}),Ke={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Ae(e,c){return a(),m("svg",Ke,[...c[0]||(c[0]=[d("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"},null,-1)])])}const le=J({name:"lucide-zap",render:Ae}),je={class:"p-6 border-t border-neutral-200 dark:border-neutral-700 flex-shrink-0"},qe={key:1,class:"flex items-center gap-3"},Oe={key:0,class:"text-sm text-red-600 dark:text-red-400"},_e=L({__name:"EditFormFooter",props:{formId:{},formNode:{},readonly:{type:Boolean,default:!1},inline:{type:Boolean,default:!1},saving:{type:Boolean,default:!1},dirty:{type:Boolean,default:!1},saveSucceeded:{type:Boolean,default:!1},saveLabel:{},saveDisabled:{type:Boolean,default:!1},apiError:{default:null},cancelLabel:{default:"Cancel"}},emits:["cancel","discard"],setup(e,{emit:c}){const b=c;return(s,v)=>(a(),m("div",je,[d("div",{class:C(["flex items-center",e.inline?"justify-end":"justify-between"])},[e.inline?f("",!0):(a(),h(o(_),{key:0,variant:"ghost",size:"sm",disabled:e.saving,onClick:v[0]||(v[0]=u=>b("cancel"))},{default:p(()=>[V(H(e.cancelLabel),1)]),_:1},8,["disabled"])),e.readonly?f("",!0):(a(),m("div",qe,[e.apiError?(a(),m("span",Oe,H(e.apiError),1)):f("",!0),w(o(pe),{node:e.formNode||void 0},null,8,["node"]),e.inline&&e.dirty?(a(),h(o(_),{key:1,variant:"ghost",size:"sm",disabled:e.saving,onClick:v[1]||(v[1]=u=>b("discard"))},{default:p(()=>[...v[2]||(v[2]=[V(" Discard changes ",-1)])]),_:1},8,["disabled"])):f("",!0),w(o(_),{variant:e.saveSucceeded?"success":"primary",size:"sm",disabled:e.saveDisabled,loading:e.saving,"icon-left":e.saveSucceeded?o(Re):void 0,type:"submit",form:e.formId},{default:p(()=>[V(H(e.saveLabel),1)]),_:1},8,["variant","disabled","loading","icon-left","form"])]))],2)]))}}),Ue=["id"],Je={class:"modal-card-header border-b border-neutral-100 px-5 py-3 dark:border-neutral-800"},Ge={class:"text-sm font-semibold text-neutral-900 dark:text-neutral-100 flex items-center gap-2"},We={class:"p-5"},F=L({__name:"ModalCard",props:{id:{},title:{},icon:{},flat:{type:Boolean,default:!1}},setup(e){return(c,b)=>(a(),m("section",{id:e.id,class:C(e.flat?"modal-card overflow-hidden border-y border-neutral-200 bg-white dark:border-neutral-800 dark:bg-neutral-900":"modal-card overflow-hidden rounded-lg border border-neutral-200 bg-white dark:border-neutral-700 dark:bg-neutral-900")},[d("div",Je,[d("h3",Ge,[e.icon?(a(),h(j(e.icon),{key:0,class:"w-4 h-4 text-neutral-500"})):f("",!0),V(" "+H(e.title),1)])]),d("div",We,[U(c.$slots,"default")]),c.$slots.footer?(a(),m("div",{key:0,class:C(["modal-card-footer",e.flat?"border-t border-neutral-100 bg-transparent px-5 py-3 dark:border-neutral-800":"border-t border-neutral-100 bg-neutral-50 px-5 py-3 dark:border-neutral-800 dark:bg-neutral-800/50"])},[U(c.$slots,"footer")],2)):f("",!0)],10,Ue))}}),Ze=["onClick"],Qe={class:"overflow-hidden text-ellipsis whitespace-nowrap"},Xe=L({__name:"ModalTabs",props:{tabs:{},activeTab:{},accentActive:{type:Boolean},orientation:{default:"vertical"}},emits:["select"],setup(e,{emit:c}){const b=e,s=c,v=$({}),u=()=>b.orientation==="horizontal";function i(l,n){v.value[l]=n instanceof HTMLButtonElement?n:null}return T(()=>[b.activeTab,b.orientation],async()=>{u()&&(await P(),v.value[b.activeTab]?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"}))},{immediate:!0}),(l,n)=>(a(),m("div",{class:C(e.orientation==="horizontal"?"flex min-w-0 gap-1 overflow-x-auto px-2 py-2":"flex flex-col gap-1 px-2")},[(a(!0),m(ne,null,se(e.tabs,k=>(a(),m("button",{key:k.id,ref_for:!0,ref:y=>i(k.id,y),type:"button",onClick:ge(y=>s("select",k.id),["prevent"]),class:C([e.orientation==="horizontal"?"flex shrink-0 items-center gap-1.5 rounded px-2.5 py-1.5 text-xs font-medium transition-all":"flex w-full items-center gap-3 rounded px-3 py-2.5 text-left text-sm font-medium transition-all",e.activeTab===k.id?e.accentActive?"agents-surface-selected agents-text-selected":"bg-black text-white dark:bg-white dark:text-black":"text-neutral-600 dark:text-neutral-400 hover:bg-black/5 dark:hover:bg-white/10"])},[(a(),h(j(k.icon),{class:C(e.orientation==="horizontal"?"h-3.5 w-3.5 flex-shrink-0":"h-4 w-4 flex-shrink-0")},null,8,["class"])),d("span",Qe,H(k.label),1)],10,Ze))),128))],2))}});function Ye(e,c){const b=$(c[0]);let s=null;const v=(l,n)=>l.querySelector(`#section-${n}`),u=()=>{const l=e.value;if(!l||l.clientHeight<=0)return;const n=c.filter(M=>v(l,M)!==null);if(n.length===0)return;if(l.scrollHeight>l.clientHeight+1&&l.scrollHeight-l.scrollTop-l.clientHeight<50){b.value=n[n.length-1];return}const t=l.getBoundingClientRect(),E=t.top+t.height*.3;let I=n[0];for(const M of n)v(l,M).getBoundingClientRect().top<=E&&(I=M);b.value=I},i=l=>{const n=e.value,k=n?v(n,l):null;if(k&&n){const y=n.getBoundingClientRect().top,t=k.getBoundingClientRect().top,E=n.scrollTop+(t-y);n.scrollTo({top:E,behavior:"smooth"})}};return T(e,(l,n)=>{n&&(n.removeEventListener("scroll",u),s?.disconnect(),s=null),l&&(l.addEventListener("scroll",u),s=new ResizeObserver(u),s.observe(l),u())}),xe(()=>{e.value?.removeEventListener("scroll",u),s?.disconnect()}),{activeTab:b,scrollToSection:i}}const et={key:0,class:"mb-4 space-y-2"},tt={class:"min-w-0 flex-1"},at={class:"text-sm font-medium"},lt={class:"text-xs text-neutral-500 dark:text-neutral-400"},ot=["onClick","aria-label"],nt={key:2,class:"rounded-lg border border-dashed border-neutral-300 px-4 py-6 text-center dark:border-neutral-600"},st={key:3,class:"py-3 text-center text-xs text-neutral-400 dark:text-neutral-500"},rt=L({__name:"PromptHooksFields",props:{form:{}},setup(e){const c=e,b=$(""),s=x(()=>{const u=new Set(c.form.selectedHooks.value);return c.form.availableHooks.value.filter(i=>!u.has(i.id)).map(i=>({value:i.id,label:i.id,attrs:{description:i.hook}}))}),v=u=>{u&&(c.form.selectedHooks.value.includes(u)||(c.form.selectedHooks.value=[...c.form.selectedHooks.value,u],P(()=>{b.value=""})))};return(u,i)=>{const l=re("FormKit");return a(),m("div",null,[i[3]||(i[3]=d("p",{class:"mb-4 text-sm text-neutral-500 dark:text-neutral-400"}," Select hooks to run when this prompt is active. Hooks execute in the order listed. ",-1)),e.form.selectedHooks.value.length>0?(a(),m("div",et,[(a(!0),m(ne,null,se(e.form.selectedHooks.value,n=>(a(),m("div",{key:n,class:"flex items-center justify-between rounded-lg border border-neutral-300 p-3 dark:border-neutral-600"},[d("div",tt,[d("div",at,H(n),1),d("div",lt,H(e.form.availableHooks.value.find(k=>k.id===n)?.hook||"unknown"),1)]),d("button",{onClick:k=>e.form.selectedHooks.value=e.form.selectedHooks.value.filter(y=>y!==n),type:"button",class:"rounded p-1 text-neutral-500 transition-colors hover:bg-neutral-200 hover:text-red-500 dark:hover:bg-neutral-800","aria-label":`Remove ${n}`},[...i[1]||(i[1]=[d("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[d("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,ot)]))),128))])):f("",!0),s.value.length>0?(a(),h(l,{key:1,type:"selectSearch",modelValue:b.value,"onUpdate:modelValue":i[0]||(i[0]=n=>b.value=n),onInput:v,placeholder:e.form.selectedHooks.value.length>0?"Add another hook...":"Select a hook","search-placeholder":"Search hooks...",options:s.value,"outer-class":"$reset"},null,8,["modelValue","placeholder","options"])):f("",!0),e.form.availableHooks.value.length===0?(a(),m("div",nt,[...i[2]||(i[2]=[d("p",{class:"text-sm text-neutral-500 dark:text-neutral-400"},[V(" No hooks available. Create hooks in "),d("code",{class:"rounded bg-neutral-200 px-1.5 py-0.5 font-mono text-xs dark:bg-neutral-700"},"agents/hooks/"),V(" to enable them here. ")],-1)])])):s.value.length===0&&e.form.selectedHooks.value.length>0?(a(),m("div",st," All available hooks are selected. ")):f("",!0)])}}}),it={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function ct(e,c){return a(),m("svg",it,[...c[0]||(c[0]=[d("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2a2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1m8 0h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"},null,-1)])])}const oe=J({name:"lucide-braces",render:ct}),dt={key:0,class:"flex min-h-[500px] items-center justify-center"},ut={class:"flex min-h-0 min-w-0 flex-1 flex-col"},ft={key:0,class:"sticky top-0 z-10 flex min-w-0 shrink-0 items-center gap-2 border-b border-neutral-200 bg-neutral-50/95 px-3 backdrop-blur dark:border-neutral-800 dark:bg-neutral-950/95"},mt={class:"min-w-0 flex-1"},vt={class:"edit-sections-query"},bt=L({__name:"PromptModal",props:{modelValue:{type:Boolean},editPrompt:{},mode:{},readonly:{type:Boolean,default:!1},saving:{type:Boolean,default:!1},apiError:{default:null},inline:{type:Boolean,default:!1},inlineGlobalNotice:{type:Boolean,default:!1},inlineAccentTabs:{type:Boolean,default:!1},inlineFlatSections:{type:Boolean,default:!1},saveSuccessKey:{default:0},resetSuccessKey:{default:0},surfaceSection:{default:null},surfaceDefaultToolTab:{default:null}},emits:["update:modelValue","save"],setup(e,{expose:c,emit:b}){const s=e,v=b,u=x(()=>s.mode==="edit"),i=x(()=>!!s.surfaceSection),l=x(()=>s.inline&&s.inlineFlatSections),n=x(()=>s.inline||i.value),k=x(()=>n.value?{config:Te}:{}),y=x(()=>u.value&&(s.editPrompt?.id||s.editPrompt?.name)||""),t=He(()=>y.value,{autoload:!1}),E=$(null),I=$(null),M=["basics","schema","prompt","tools","hooks","variables","behavior"],{activeTab:G,scrollToSection:W}=Ye(E,M),ie=[{id:"basics",label:"Basics",icon:X},{id:"schema",label:"Schema",icon:oe},{id:"prompt",label:"Prompt",icon:Y},{id:"tools",label:"Tools",icon:ae},{id:"hooks",label:"Hooks",icon:le},{id:"variables",label:"Variables",icon:ee},{id:"behavior",label:"Behavior",icon:te}],S=$(!1),z=$(!1),N=$(!1),K=$(null);let A=0;const Z=x(()=>JSON.stringify({name:t.name.value,toolDescription:t.toolDescription.value,selectedModel:t.selectedModel.value,requiredSchema:t.requiredSchema.value,promptText:t.promptText.value,includeChat:t.includeChat.value,includePastTools:t.includePastTools.value,selectedTools:t.selectedTools.value,parallelToolCalls:t.parallelToolCalls.value,toolChoice:t.toolChoice.value,reasoningEffort:t.reasoningEffort.value,reasoningMaxTokens:t.reasoningMaxTokens.value,reasoningExclude:t.reasoningExclude.value,includeReasoning:t.includeReasoning.value,selectedHooks:t.selectedHooks.value,promptVariables:t.promptVariables.value,promptEnv:t.promptEnv.value}));x(()=>N.value?"success":"primary");const ce=x(()=>N.value?"Saved":u.value?"Save Prompt Changes":"Create Prompt"),de=x(()=>s.saving||z.value||s.inline&&!S.value),ue=x(()=>i.value||s.inline?{class:s.inline?"flex h-full min-w-0 flex-col":"min-w-0"}:{modelValue:s.modelValue,title:u.value?"Edit Prompt":"Add Prompt",width:"max-w-5xl",contentPadding:!1});function B(){N.value=!1,K.value=null}function D(){P().then(()=>{if(z.value){S.value=!1;return}S.value=!!t.formNode.value?.context?.state.dirty})}function fe(r){t.handleFormNode(r),r.on("commit",D),r.on("reset",D),r.on("message-added",D),r.on("message-updated",D),r.on("message-removed",D),D()}async function q(){const r=++A;z.value=!0,S.value=!1,await P();const g=t.formNode.value;if(!g||r!==A){z.value=!1,S.value=!1;return}await g.settled,g.reset(g.value),await P(),r===A&&(z.value=!1,S.value=!1)}async function Q(){await q(),N.value=!0,K.value=Z.value}async function O(){B(),t.resetForm(),await P(),u.value&&y.value?await t.load():(await t.loadPrerequisites(),await t.fetchScannedVariables()),await q()}async function me(){I.value?.removeUnavailableTools(),await P();const r=await t.prepareSubmit();v("save",r)}function ve(){t.resetForm(),B(),v("update:modelValue",!1)}async function be(){B(),await O()}function he(r){v("update:modelValue",r)}function R(r){return!s.surfaceSection||s.surfaceSection===r}return T(()=>s.modelValue,async r=>{r?await O():(A+=1,t.resetForm(),B(),S.value=!1,z.value=!1)},{immediate:!0}),T(()=>y.value,async(r,g)=>{!s.modelValue||r===g||await O()}),T(()=>s.saveSuccessKey,(r,g)=>{r===g||r<=0||Q()}),T(()=>s.resetSuccessKey,(r,g)=>{r!==g&&B()}),T(Z,r=>{N.value&&K.value!==null&&r!==K.value&&B()}),T(S,r=>{r&&B()}),c({formNode:t.formNode,markSaveSucceeded:Q,markCurrentFormCleanAfterSettle:q,resetSaveSuccess:B}),(r,g)=>{const ke=re("FormKit");return a(),h(j(i.value||e.inline?"div":Be),ye(ue.value,we(i.value||e.inline?void 0:{"update:modelValue":he})),{default:p(()=>[(a(),h(j(n.value?o(Se):"div"),$e(Ce(k.value)),{default:p(()=>[o(t).isLoading.value?(a(),m("div",dt,[...g[0]||(g[0]=[d("span",{class:"text-neutral-500"},"Loading prompt data...",-1)])])):(a(),h(ke,{key:1,type:"form",id:"prompt-form",actions:!1,disabled:e.readonly||e.saving,onSubmit:me,onNode:fe,"dirty-behavior":"compare","outer-class":"$reset flex min-h-0 min-w-0 flex-1 flex-col","form-class":i.value?"$reset min-w-0 flex flex-col":"$reset flex-1 min-h-0 min-w-0 flex flex-col"},{default:p(()=>[d("div",ut,[i.value?f("",!0):(a(),m("nav",ft,[U(r.$slots,"nav-leading",{},void 0,!0),d("div",mt,[w(o(Xe),{tabs:ie,"active-tab":o(G),"accent-active":e.inlineAccentTabs,orientation:"horizontal",onSelect:o(W)},null,8,["active-tab","accent-active","onSelect"])])])),d("div",{ref_key:"contentRef",ref:E,class:C(["min-h-0 flex-1 overflow-y-auto",i.value?"p-5":l.value?"bg-neutral-100 dark:bg-neutral-950":"bg-neutral-100 p-5 dark:bg-neutral-950"])},[d("div",vt,[e.inlineGlobalNotice?(a(),m("div",{key:0,class:C(["edit-sections-notice rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-800 dark:border-amber-700 dark:bg-amber-950/30 dark:text-amber-200",l.value?"mx-5 mb-4 mt-5":"mb-4"])}," Changes here are global and will affect all new messages across all threads. ",2)):f("",!0),d("div",{class:C([l.value?"space-y-4 pb-5":"space-y-4","edit-sections-stack"])},[e.apiError?(a(),h(o(Fe),{key:0,variant:"error"},{default:p(()=>[V(H(e.apiError),1)]),_:1})):f("",!0),R("basic")?(a(),h(o(F),{key:1,id:"section-basics",title:"Basics",icon:o(X),flat:l.value},{default:p(()=>[w(Pe,{form:o(t)},null,8,["form"])]),_:1},8,["icon","flat"])):f("",!0),R("schema")?(a(),h(o(F),{key:2,id:"section-schema",title:"Schema",icon:o(oe),flat:l.value},{default:p(()=>[w(Ve,{form:o(t)},null,8,["form"])]),_:1},8,["icon","flat"])):f("",!0),R("prompt")?(a(),h(o(F),{key:3,id:"section-prompt",title:"Prompt",icon:o(Y),flat:l.value},{default:p(()=>[w(Ee,{form:o(t)},null,8,["form"])]),_:1},8,["icon","flat"])):f("",!0),R("tools")?(a(),h(o(F),{key:4,id:"section-tools",title:"Tools",icon:o(ae),flat:l.value},{default:p(()=>[w(Me,{ref_key:"toolsFieldsRef",ref:I,form:o(t),"default-tab":e.surfaceDefaultToolTab},null,8,["form","default-tab"])]),_:1},8,["icon","flat"])):f("",!0),i.value?f("",!0):(a(),h(o(F),{key:5,id:"section-hooks",title:"Hooks",icon:o(le),flat:l.value},{default:p(()=>[w(rt,{form:o(t)},null,8,["form"])]),_:1},8,["icon","flat"])),R("variables")?(a(),h(o(F),{key:6,id:"section-variables",title:"Variables",icon:o(ee),flat:l.value},{default:p(()=>[w(ze,{form:o(t),readonly:e.readonly},null,8,["form","readonly"])]),_:1},8,["icon","flat"])):f("",!0),R("behavior")?(a(),h(o(F),{key:7,id:"section-behavior",title:"Behavior",icon:o(te),flat:l.value},{default:p(()=>[w(Ne,{form:o(t)},null,8,["form"])]),_:1},8,["icon","flat"])):f("",!0)],2)])],2)]),i.value?f("",!0):(a(),h(_e,{key:0,"form-id":"prompt-form","form-node":o(t).formNode.value,readonly:e.readonly,inline:e.inline,saving:e.saving,dirty:S.value,"save-succeeded":N.value,"save-label":ce.value,"save-disabled":de.value,"api-error":e.apiError,"cancel-label":e.readonly?"Close":"Cancel",onCancel:ve,onDiscard:be},null,8,["form-node","readonly","inline","saving","dirty","save-succeeded","save-label","save-disabled","api-error","cancel-label"]))]),_:3},8,["disabled","form-class"]))]),_:3},16))]),_:3},16)}}}),xt=De(bt,[["__scopeId","data-v-e5d80261"]]);export{ae as I,xt as P,Xe as _,le as a,F as b,_e as c,Ye as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as D,r as u,c as V,o as N,b as M,e as f,z as
|
|
1
|
+
import{d as D,r as u,c as V,o as N,b as M,e as f,z as _,q as w,j as C,J as a,k as P,s as R,u as A,X as $,Y as T,w as I}from"./vue.js";import{C as E,a as x,D as S,x as q}from"./index.js";import{_ as B}from"./DataTable.vue_vue_type_script_setup_true_lang.js";import{u as F}from"./useActionFeedback.js";import{P as U}from"./PromptModal.js";import{C as j}from"./CenteredContentView.js";import{I as L}from"./plus.js";import"./formkit.js";import"./vendor.js";import"./syntax.js";import"./monaco.js";import"./chevron-right.js";import"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";import"./Modal.vue_vue_type_script_setup_true_lang.js";import"./check.js";const z=D({__name:"PromptsDataTable",props:{title:{},description:{},primaryAction:{},readonly:{type:Boolean,default:!1}},emits:["add","edit","delete"],setup(i,{expose:b,emit:y}){const r=i,s=y,d=u([]),o=u(!1),{feedback:m,setFeedback:n,clearFeedback:l}=F(),k=[{key:"name",label:"Name",width:"w-1/4",sortable:!0},{key:"tool_description",label:"Description",width:"w-2/5"},{key:"model_name",label:"Model",width:"w-1/5",sortable:!0,filterable:!0,formatter:(e,t)=>e||t.model_id||"-",filterIcon:(e,t)=>t.model_provider?`/api/providers/${t.model_provider}/icon?model=${encodeURIComponent(t.model_id||"")}`:void 0},{key:"created_at",label:"Created",width:"w-1/6",sortable:!0,searchable:!1,formatter:e=>e?new Date(e*1e3).toLocaleDateString():"-"}],v=[{icon:"edit",label:"Edit",handler:e=>s("edit",e)},{icon:"delete",label:"Delete",handler:async e=>{await g(e)},confirm:!0,confirmMessage:"Are you sure you want to delete this prompt?",variant:"danger"}],h=V(()=>r.readonly?v.filter(e=>e.variant!=="danger"):v),c=async()=>{o.value=!0,l();try{const e=await fetch(x("/api/prompts"));if(e.ok){const t=await e.json();d.value=t.prompts||[]}}catch{n("error","Prompts could not be loaded.")}finally{o.value=!1}},g=async e=>{l();try{const t=await fetch(x(`/api/prompts/${encodeURIComponent(e.id)}`),{method:"DELETE"});if(t.ok)await c(),n("success","Prompt deleted.");else{const p=await t.json();n("error",p.error||"Failed to delete prompt")}}catch{n("error","Failed to delete prompt")}};return N(()=>{c()}),b({refresh:c}),(e,t)=>(f(),M("div",null,[a(m)?(f(),_(a(E),{key:0,variant:a(m).variant,class:"mb-4"},{default:P(()=>[R(A(a(m).message),1)]),_:1},8,["variant"])):w("",!0),C(B,{title:i.title,description:i.description,"primary-action":i.primaryAction,columns:k,data:d.value,actions:h.value,loading:o.value,sortable:"",searchable:"","search-placeholder":"Search prompts...","empty-message":"No prompts available. Create your first prompt to get started.",onRowClick:t[0]||(t[0]=p=>s("edit",p))},null,8,["title","description","primary-action","data","actions","loading"])]))}}),J={key:1,class:"mb-5 rounded-lg border border-amber-200 dark:border-amber-800 bg-amber-50 dark:bg-amber-950/30 px-4 py-3 text-sm text-amber-800 dark:text-amber-200"},ne=D({__name:"PromptsView",setup(i){const b=$(),y=T(),r=u(!1),s=u(null),d=u(null),o=S(),{saving:m,savePrompt:n}=q(),{feedback:l,setFeedback:k,clearFeedback:v}=F();I(()=>y.query.refresh,()=>{y.query.refresh&&(s.value?.refresh(),b.replace({path:"/prompts",query:{}}))});const h=()=>{r.value=!0},c=e=>{b.push(`/prompts/${e.id}`)},g=async e=>{v();const t=await n({mode:"add",data:e,formNode:d.value?.formNode});t.ok?(r.value=!1,await s.value?.refresh()):t.formErrorsApplied||k("error","Failed to create prompt")};return(e,t)=>(f(),_(j,null,{default:P(()=>[a(l)?(f(),_(a(E),{key:0,variant:a(l).variant,class:"mb-4"},{default:P(()=>[R(A(a(l).message),1)]),_:1},8,["variant"])):w("",!0),a(o)?w("",!0):(f(),M("div",J," Configuration is read-only in production. To make changes, edit your configuration files locally and deploy. ")),C(z,{ref_key:"dataTableRef",ref:s,title:"Prompts",description:"Define and manage prompt templates for your agents.","primary-action":a(o)?{label:"Create Prompt",icon:a(L),handler:h}:void 0,readonly:!a(o),onAdd:h,onEdit:c},null,8,["primary-action","readonly"]),C(U,{ref_key:"promptModalRef",ref:d,modelValue:r.value,"onUpdate:modelValue":t[0]||(t[0]=p=>r.value=p),mode:"add",saving:a(m),onSave:g},null,8,["modelValue","saving"])]),_:1}))}});export{ne as default};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as P,ai as V,a as g}from"./index.js";import{_ as K}from"./DataTable.vue_vue_type_script_setup_true_lang.js";import{C as N}from"./CenteredContentView.js";import{I as k}from"./check.js";import{u as $}from"./useActionFeedback.js";import{d as F,r as y,o as B,z as x,e as n,k as i,q as D,j as l,J as a,s as d,u as w,b as f,f as v}from"./vue.js";import"./formkit.js";import"./vendor.js";import"./monaco.js";import"./syntax.js";import"./chevron-right.js";import"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";const E={class:"flex items-center gap-2"},S=["src","alt"],T={key:0,class:"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"},j={key:1,class:"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400"},L=["title"],Z=F({__name:"ProvidersView",setup(O){const c=y([]),p=y(!1),{feedback:u,setFeedback:o,clearFeedback:b}=$(),_={cloudflare:"Cloudflare Workers AI",cerebras:"Cerebras","openai-sdk":"OpenAI SDK",openrouter:"OpenRouter",openai:"OpenAI"},m=e=>_[e]||e,C=[{key:"name",label:"Name",width:"w-1/3",sortable:!0},{key:"sdk",label:"SDK Type",width:"w-1/3",sortable:!0,formatter:e=>m(e)},{key:"hasApiKey",label:"API Key",width:"w-1/3"}],A=[{icon:"delete",label:"Delete",confirm:!0,confirmMessage:"Are you sure you want to delete this provider? This action cannot be undone.",variant:"danger",handler:async e=>{await I(e.name)}}],h=async()=>{p.value=!0,b();try{const e=await fetch(g("/api/providers"));if(!e.ok)throw new Error("Failed to fetch providers");const t=await e.json();c.value=t.providers||[]}catch{o("error","Providers could not be loaded."),c.value=[]}finally{p.value=!1}},I=async e=>{b();try{const t=await fetch(g(`/api/providers/${encodeURIComponent(e)}`),{method:"DELETE"});if(!t.ok){const r=await t.json();r.modelCount?o("error",`${r.error}
|
|
2
2
|
|
|
3
|
-
This provider has ${r.modelCount} associated model(s).`):o("error",r.error||"Failed to delete provider");return}await h(),o("success","Provider deleted.")}catch{o("error","Failed to delete provider")}};return
|
|
3
|
+
This provider has ${r.modelCount} associated model(s).`):o("error",r.error||"Failed to delete provider");return}await h(),o("success","Provider deleted.")}catch{o("error","Failed to delete provider")}};return B(()=>{h()}),(e,t)=>(n(),x(N,null,{default:i(()=>[a(u)?(n(),x(a(P),{key:0,variant:a(u).variant,class:"mb-4 whitespace-pre-line"},{default:i(()=>[d(w(a(u).message),1)]),_:1},8,["variant"])):D("",!0),l(K,{title:"Providers",description:"Installed providers and API key status. Provider availability is defined in code and environment configuration.",columns:C,data:c.value,actions:A,loading:p.value,sortable:"",searchable:"","search-placeholder":"Search providers...","empty-message":"No providers are installed in this AgentBuilder instance."},{"cell-sdk":i(({value:r,row:s})=>[v("div",E,[v("img",{src:`/api/providers/${s.name}/icon`,alt:m(r),class:"w-5 h-5"},null,8,S),v("span",null,w(m(r)),1)])]),"cell-hasApiKey":i(({value:r,row:s})=>[r&&s.configuredViaPlatform?(n(),f("span",T,[l(a(k),{class:"w-3.5 h-3.5"}),t[0]||(t[0]=d(" Via platform ",-1))])):r?(n(),f("span",j,[l(a(k),{class:"w-3.5 h-3.5"}),t[1]||(t[1]=d(" Configured ",-1))])):(n(),f("span",{key:2,class:"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full bg-neutral-100 text-neutral-500 dark:bg-neutral-800 dark:text-neutral-400",title:s.envKeys?.length?`Required: ${s.envKeys.join(", ")}`:void 0},[l(a(V),{class:"w-3.5 h-3.5"}),t[2]||(t[2]=d(" Not configured ",-1))],8,L))]),_:1},8,["data","loading"])]),_:1}))}});export{Z as default};
|