@standardagents/builder 0.19.0 → 0.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/built-in-routes.js +10 -2
  2. package/dist/built-in-routes.js.map +1 -1
  3. package/dist/client/ApiKeysView-Do-1UE9g.js +1 -0
  4. package/dist/client/CenteredContentView-jbhr1bjU.js +1 -0
  5. package/dist/client/CompositionView-IaJk9O8E.js +32 -0
  6. package/dist/client/ConfirmDialog.vue_vue_type_script_setup_true_lang-qy-xFdId.js +1 -0
  7. package/dist/client/CopyButton.vue_vue_type_script_setup_true_lang-CBllbG82.js +1 -0
  8. package/dist/client/DataTable.vue_vue_type_script_setup_true_lang-JokGQoze.js +1 -0
  9. package/dist/client/JsonViewer-DlkFhEMS.js +7 -0
  10. package/dist/client/LoginView-BDpEA1ia.js +1 -0
  11. package/dist/client/MarketplaceView-DRnUbaWM.js +1 -0
  12. package/dist/client/Modal.vue_vue_type_script_setup_true_lang-BC0ceJWj.js +1 -0
  13. package/dist/client/ModelModal.vue_vue_type_script_setup_true_lang-CIs1Lwjp.js +1 -0
  14. package/dist/client/ModelsView-BKcPCTxf.js +1 -0
  15. package/dist/client/PromptEditView-CAhF5-n3.js +1 -0
  16. package/dist/client/PromptModal-kPH1G9G3.js +1 -0
  17. package/dist/client/PromptsView-B8UPzw78.js +1 -0
  18. package/dist/client/ProvidersView-C4oc5xSk.js +3 -0
  19. package/dist/client/{ThreadInspectorPane.vue_vue_type_script_setup_true_lang.js → ThreadInspectorPane.vue_vue_type_script_setup_true_lang-DQZxl-R3.js} +2 -2
  20. package/dist/client/ThreadsView-Jg5Eu2ZF.js +1 -0
  21. package/dist/client/ToolsView-DYJkLRhl.js +1 -0
  22. package/dist/client/UiCodeBlock.vue_vue_type_script_setup_true_lang-fAJpxxDx.js +1 -0
  23. package/dist/client/UsersView-C-4OraZ9.js +1 -0
  24. package/dist/client/VariablesView-C904vTKK.js +1 -0
  25. package/dist/client/assets/{monaco.css → monaco-DbLkoLD4.css} +1 -1
  26. package/dist/client/check-CXHJBWFq.js +1 -0
  27. package/dist/client/chevron-right-DsRzlF4N.js +1 -0
  28. package/dist/client/copy-BoFxpgim.js +1 -0
  29. package/dist/client/{formkit.js → formkit-CLaxdhg8.js} +1 -1
  30. package/dist/client/index-Dlk9K3Tb.js +6 -0
  31. package/dist/client/index.html +9 -9
  32. package/dist/client/package-pM1VpaSU.js +1 -0
  33. package/dist/client/plus-CklTWLDT.js +1 -0
  34. package/dist/client/{syntax.js → syntax-D-ZcovVx.js} +1 -1
  35. package/dist/client/timeAgo-BByZFcs9.js +1 -0
  36. package/dist/client/useActionFeedback-BZCNQs6e.js +1 -0
  37. package/dist/client/vue-CSFkhEaa.js +1 -0
  38. package/dist/index.js +10 -2
  39. package/dist/index.js.map +1 -1
  40. package/dist/plugin.js +10 -2
  41. package/dist/plugin.js.map +1 -1
  42. package/package.json +4 -4
  43. package/dist/client/ApiKeysView.js +0 -1
  44. package/dist/client/CenteredContentView.js +0 -1
  45. package/dist/client/CompositionView.js +0 -32
  46. package/dist/client/ConfirmDialog.vue_vue_type_script_setup_true_lang.js +0 -1
  47. package/dist/client/CopyButton.vue_vue_type_script_setup_true_lang.js +0 -1
  48. package/dist/client/DataTable.vue_vue_type_script_setup_true_lang.js +0 -1
  49. package/dist/client/JsonViewer.js +0 -7
  50. package/dist/client/LoginView.js +0 -1
  51. package/dist/client/MarketplaceView.js +0 -1
  52. package/dist/client/Modal.vue_vue_type_script_setup_true_lang.js +0 -1
  53. package/dist/client/ModelModal.vue_vue_type_script_setup_true_lang.js +0 -1
  54. package/dist/client/ModelsView.js +0 -1
  55. package/dist/client/PromptEditView.js +0 -1
  56. package/dist/client/PromptModal.js +0 -1
  57. package/dist/client/PromptsView.js +0 -1
  58. package/dist/client/ProvidersView.js +0 -3
  59. package/dist/client/ThreadsView.js +0 -1
  60. package/dist/client/ToolsView.js +0 -1
  61. package/dist/client/UiCodeBlock.vue_vue_type_script_setup_true_lang.js +0 -1
  62. package/dist/client/UsersView.js +0 -1
  63. package/dist/client/VariablesView.js +0 -1
  64. package/dist/client/check.js +0 -1
  65. package/dist/client/chevron-right.js +0 -1
  66. package/dist/client/copy.js +0 -1
  67. package/dist/client/index.js +0 -6
  68. package/dist/client/package.js +0 -1
  69. package/dist/client/plus.js +0 -1
  70. package/dist/client/timeAgo.js +0 -1
  71. package/dist/client/useActionFeedback.js +0 -1
  72. package/dist/client/vue.js +0 -1
  73. /package/dist/client/assets/{CompositionView.css → CompositionView-CWFus-Gl.css} +0 -0
  74. /package/dist/client/assets/{JsonViewer.css → JsonViewer-WC25f38D.css} +0 -0
  75. /package/dist/client/assets/{MarketplaceView.css → MarketplaceView-DeO2OwqR.css} +0 -0
  76. /package/dist/client/assets/{PromptModal.css → PromptModal-CM8SuxZ1.css} +0 -0
  77. /package/dist/client/assets/{ThreadInspectorPane.css → ThreadInspectorPane-C89GS61J.css} +0 -0
  78. /package/dist/client/assets/{VariablesView.css → VariablesView-B4JT54Ah.css} +0 -0
  79. /package/dist/client/assets/{codicon.ttf → codicon-DCmgc-ay.ttf} +0 -0
  80. /package/dist/client/assets/img/{agent-builder-logo-dark.svg → agent-builder-logo-dark-CLLc9sWx.svg} +0 -0
  81. /package/dist/client/assets/img/{agent-builder-logo-light.svg → agent-builder-logo-light-Cv4bkd6o.svg} +0 -0
  82. /package/dist/client/assets/img/{favicon.svg → favicon-9uH1rb2F.svg} +0 -0
  83. /package/dist/client/assets/{index.css → index-SiBiAgM-.css} +0 -0
  84. /package/dist/client/{monaco.js → monaco-DI2r3M8m.js} +0 -0
  85. /package/dist/client/{settingsData.js → settingsData-qr4IgJ5u.js} +0 -0
  86. /package/dist/client/{vendor.js → vendor-TPZjEwCU.js} +0 -0
@@ -1 +0,0 @@
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,c 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 +0,0 @@
1
- import{B as m}from"./index.js";import{r as p,ad as f,d as C,b,e as n,J as e,m as k,z as y,u as h}from"./vue.js";import{I as v}from"./check.js";import{I as g}from"./copy.js";function x(a={}){const i=a.resetDelayMs??2e3,l=p(!1),t=p(!1),o=p(null);let s=null;const r=()=>{s&&(clearTimeout(s),s=null)},c=async d=>{l.value=!0,o.value=null,r();try{await navigator.clipboard.writeText(d),t.value=!0,s=setTimeout(()=>{t.value=!1,s=null},i)}catch(u){t.value=!1,o.value=u instanceof Error?u.message:"Failed to copy"}finally{l.value=!1}};return f(r,!0),{copying:l,copied:t,error:o,copy:c,clearResetTimer:r}}const w=["disabled","title","aria-label"],z={key:3},E=C({__name:"CopyButton",props:{content:{},variant:{},size:{},disabled:{type:Boolean}},setup(a){const i=a,{copying:l,copied:t,error:o,copy:s}=x(),r=async()=>{await s(i.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,B)=>(n(),b("button",{onClick:r,disabled:e(l)||a.disabled,class:k([c[a.size||"sm"],d[a.variant||"solid"],"font-medium rounded hover:opacity-80 disabled:opacity-50 disabled:cursor-not-allowed transition-all"]),title:a.disabled?"No content to copy":e(o)?`Copy failed: ${e(o)}`:e(t)?"Copied!":"Copy to clipboard","aria-label":a.disabled?"No content to copy":e(o)?`Copy failed: ${e(o)}`:e(t)?"Copied to clipboard":"Copy to clipboard"},[e(l)?(n(),y(m,{key:0,size:"xs"})):a.variant==="ghost"&&!e(t)?(n(),y(e(g),{key:1,class:"h-3.5 w-3.5"})):a.variant==="ghost"&&e(t)?(n(),y(e(v),{key:2,class:"h-3.5 w-3.5"})):(n(),b("span",z,h(e(t)?"Copied!":"Copy"),1))],10,w))}});export{E as _,x as u};
@@ -1 +0,0 @@
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{an 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,7 +0,0 @@
1
- import{b 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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),$=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
- ${o.join(`
3
- `)}
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("{")}
5
- ${i.join(`
6
- `)}
7
- ${n}${s("}")}`}return String(t)},J=j(()=>{if(!r.json)return'<span class="json-null">null</span>';let t;if(typeof r.json=="string")try{t=JSON.parse(r.json)}catch{return a(r.json)}else t=r.json;return f(t)}),L=t=>{const e=t.target;if(e.classList.contains("json-image-path")){const n=e.dataset.path;if(n&&r.threadId){l.value=n;const s=e.getBoundingClientRect();p.value={x:s.left,y:s.top}}}},T=t=>{t.target.classList.contains("json-image-path")&&(l.value=null,p.value=null)},A=t=>{const e=t.target;if(!e.classList.contains("json-inline-action"))return;const n=e.dataset.action;if(!n)return;const s=e.dataset.index,o=s?Number.parseInt(s,10):void 0;k("action",{action:n,index:Number.isFinite(o)?o:void 0})};return(t,e)=>(d(),m("div",U,[u.showCopyButton?(d(),m("div",W,[P(M,{content:S.value,variant:"ghost",size:"xs"},null,8,["content"])])):y("",!0),_("pre",{class:"text-xs font-mono p-3 overflow-x-auto",onClick:A,onMouseover:L,onMouseout:T,innerHTML:J.value},null,40,q),(d(),R(F,{to:"body"},[l.value&&p.value&&u.threadId?(d(),m("div",{key:0,class:"fixed z-50 bg-white dark:bg-neutral-800 border border-neutral-300 dark:border-neutral-600 rounded-lg shadow-lg p-1 pointer-events-none",style:K({left:`${p.value.x}px`,top:`${p.value.y-160}px`})},[_("img",{src:N(l.value),alt:l.value,class:"max-w-[200px] max-h-[150px] rounded object-contain",onError:e[0]||(e[0]=n=>n.target.style.display="none")},null,40,D)],4)):y("",!0)]))]))}}),tt=H(Q,[["__scopeId","data-v-fbeb61b4"]]);export{tt as J};
@@ -1 +0,0 @@
1
- import{d as Y,X as J,Y as X,r as s,c as O,o as $,O as z,b as l,e as o,f as t,j as d,k as h,q as c,u as I,F as Q,z as Z,J as S,s as L,m as ee}from"./vue.js";import{r as te,s as P,a as j,b as p,_ as q,c as ae,l as re,d as se,e as F,f as G}from"./index.js";import"./formkit.js";import"./vendor.js";import"./syntax.js";import"./monaco.js";const ne={class:"login-container flex-1 flex items-center justify-center px-4"},oe={class:"max-w-md w-full space-y-8"},le={class:"flex justify-center"},ie=["src"],ue={class:"bg-white dark:bg-neutral-900 border border-neutral-300 dark:border-neutral-700 py-8 px-6 rounded-lg"},de={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"},ce={key:1,class:"py-6 text-center text-sm text-neutral-600 dark:text-neutral-300"},fe={key:0,class:"space-y-3"},ve={key:1,class:"space-y-3"},ge={key:2,class:"relative my-6"},pe={class:"mt-6"},me={key:3,class:"mt-6"},Ce=Y({__name:"LoginView",setup(he){function B(a){return a.startsWith("/src/")||a.startsWith("data:")?a:a.replace("/agents/","/")}const V=B(re),T=B(se),w=J(),k=X(),r=s(""),y=s(!1),x=s(!1),_=s(!0),m=s(!1),C=s(!1),b=s(!1),A=s(!1),f=s(!1),v=s(!1),E=s(te()==="dark"),g=s(null),H=O(()=>E.value?T:V),M=O(()=>!b.value&&(!m.value||C.value));async function N(a=!1){try{const e=await fetch(p("/api/auth/bootstrap"),{method:"POST",headers:{Accept:"application/json"}});if(e.status===204)return a&&(r.value="Standard Agents sign-in is not available for this instance."),!1;if(!e.ok){if(a){const i=await e.json().catch(()=>({}));r.value=i.error||"Standard Agents sign-in failed."}return!1}const n=await e.json();return n.token?(P(n.token),j(),await w.push("/"),!0):(a&&(r.value="Standard Agents sign-in is not available for this instance."),!1)}catch(e){return a&&(r.value=e instanceof Error?e.message:"Standard Agents sign-in failed."),!1}}async function K(){r.value="",F(g),x.value=!0;try{await N(!0)}finally{x.value=!1}}function R(){window.location.href=p("/api/auth/sa/start")}$(async()=>{const a=k.query.token,e=k.query.error,n=k.query.sa_error;if(a){P(a),j(),w.push("/");return}e==="oauth_failed"?r.value="OAuth authentication failed. Please try again.":e==="oauth_not_configured"&&(r.value="OAuth provider is not configured."),n&&(r.value=n==="forbidden"?"Your Standard Agents account doesn't have access to this instance.":"Standard Agents sign-in didn't complete. Please try again.");try{const i=await fetch(p("/api/auth/config"));if(i.ok){const u=await i.json();f.value=u.github||!1,v.value=u.google||!1,m.value=u.platformConnected||!1,C.value=u.localPassword||!1,b.value=u.hosted||!1,A.value=u.standardAgentsLogin||!1,b.value&&(f.value=!1,v.value=!1)}}catch{f.value=!1,v.value=!1,m.value=!1,C.value=!1}!b.value&&await N()||(_.value=!1)});async function D(a){r.value="",F(g),y.value=!0;try{const e=await fetch(p("/api/auth/login"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:a.username,password:a.password})}),n=await e.json();e.ok?(P(n.token),j(),w.push("/")):G(n,g)||(r.value=n.error||"Login failed")}catch{G({error:"Network error. Please try again."},g)}finally{y.value=!1}}function U(){window.location.href=p("/api/auth/oauth/github")}function W(){window.location.href=p("/api/auth/oauth/google")}return(a,e)=>{const n=z("FormKitMessages"),i=z("FormKit");return o(),l("div",ne,[t("div",oe,[t("div",le,[t("img",{src:H.value,alt:"AgentBuilder",class:"h-16 pointer-events-none select-none"},null,8,ie)]),d(ae,{offsetX:8,offsetY:8,intensity:.2,pattern:"crosshatch"},{default:h(()=>[t("div",ue,[r.value?(o(),l("div",de,I(r.value),1)):c("",!0),_.value?(o(),l("div",ce," Connecting to your Standard Agents account... ")):(o(),l(Q,{key:2},[A.value?(o(),l("div",fe,[d(S(q),{type:"button",variant:"primary","full-width":"",onClick:R},{default:h(()=>[...e[1]||(e[1]=[L(" Login with Standard Agents ",-1)])]),_:1})])):m.value?(o(),l("div",ve,[d(S(q),{type:"button",variant:"primary","full-width":"",loading:x.value,onClick:K},{default:h(()=>[...e[2]||(e[2]=[L(" Continue with Standard Agents ",-1)])]),_:1},8,["loading"])])):c("",!0),(A.value||m.value)&&M.value?(o(),l("div",ge,[...e[3]||(e[3]=[t("div",{class:"absolute inset-0 flex items-center"},[t("div",{class:"w-full border-t border-neutral-300 dark:border-neutral-600"})],-1),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 sign in locally")],-1)])])):c("",!0),M.value?(o(),Z(i,{key:3,type:"form",actions:!1,onSubmit:D,onNode:e[0]||(e[0]=u=>g.value=u),disabled:y.value},{default:h(()=>[d(n,{node:g.value||void 0},null,8,["node"]),d(i,{type:"text",name:"username",label:"Username",placeholder:"Enter your username",validation:"required","validation-messages":{required:"Username is required"}}),d(i,{type:"password",name:"password",label:"Password",placeholder:"Enter your password",validation:"required","validation-messages":{required:"Password is required"}}),t("div",pe,[d(S(q),{type:"submit",variant:"primary","full-width":"",loading:y.value},{default:h(()=>[...e[4]||(e[4]=[L(" Sign in ",-1)])]),_:1},8,["loading"])])]),_:1},8,["disabled"])):c("",!0)],64)),!_.value&&(f.value||v.value)?(o(),l("div",me,[e[7]||(e[7]=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:ee(["mt-6 grid gap-3",f.value&&v.value?"grid-cols-2":"grid-cols-1"])},[f.value?(o(),l("button",{key:0,onClick:U,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[5]||(e[5]=[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)])])):c("",!0),v.value?(o(),l("button",{key:1,onClick:W,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[6]||(e[6]=[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)])])):c("",!0)],2)])):c("",!0)])]),_:1})])])}}});export{Ce as default};
@@ -1 +0,0 @@
1
- import{d as V,b as i,e as s,z as k,q as g,f as t,g as Z,B as ee,J as a,bb as te,u,A as O,c as j,k as $,s as f,j as M,r as b,w as L,F as S,l as D,Y as ae,X as se,o as ne,a3 as re,x as P,ay as le,bc as oe}from"./vue.js";import{ak as ie,B as q,C as G,_ as U,al as N,m as ue,g as de,am as ce}from"./index.js";import{I as J,_ as R}from"./package.js";import{t as me}from"./timeAgo.js";import{I as fe}from"./copy.js";import{I as pe}from"./check.js";import{e as K,p as Q}from"./vendor.js";import"./formkit.js";import"./syntax.js";import"./monaco.js";const xe={class:"px-4 py-6 text-center text-sm text-neutral-500 dark:text-neutral-400"},ke=V({__name:"UiEmptyState",props:{message:{},icon:{},showIcon:{type:Boolean,default:!1}},setup(e){return(r,c)=>(s(),i("div",xe,[e.icon||e.showIcon?(s(),k(ee(e.icon||a(te)),{key:0,class:"w-8 h-8 mx-auto mb-2 opacity-50"})):g("",!0),t("p",null,u(e.message),1),Z(r.$slots,"default")]))}}),ve={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function ge(e,r){return s(),i("svg",ve,[...r[0]||(r[0]=[t("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[t("path",{d:"M12 15V3m9 12v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),t("path",{d:"m7 10l5 5l5-5"})],-1)])])}const W=O({name:"lucide-download",render:ge});function X(e){const r=e.indexOf("/");return r===-1?e:e.slice(r+1)}function Y(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function he(e){return me(e*1e3)}function be(e){return e==null?"—":e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:e>=1024?`${(e/1024).toFixed(1)} kB`:`${e} B`}function F(e){return new Date(e).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}const ye={class:"flex items-start gap-3"},_e={class:"flex h-10 w-10 flex-shrink-0 items-center justify-center overflow-hidden rounded-lg border border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-neutral-800"},we=["src"],$e={class:"min-w-0 flex-1"},Me={class:"truncate font-semibold text-neutral-900 group-hover:text-accent-600 dark:text-neutral-100 dark:group-hover:text-accent-400"},Se={class:"truncate text-xs text-neutral-400 dark:text-neutral-500"},je={class:"line-clamp-2 min-h-[2.5rem] text-sm text-neutral-600 dark:text-neutral-400"},Ie={class:"mt-auto flex items-center gap-3 text-xs text-neutral-500 dark:text-neutral-400"},Ce={class:"inline-flex items-center gap-1"},Ae={key:0,class:"ml-auto font-mono text-[11px] text-neutral-400"},Te=V({__name:"MarketplaceCard",props:{pkg:{}},emits:["select"],setup(e){const r=e,c=j(()=>X(r.pkg.name)),p=j(()=>Y(r.pkg.downloads)),l=j(()=>he(r.pkg.updatedAt));return(h,x)=>(s(),i("button",{type:"button",class:"group flex flex-col gap-3 rounded-lg border border-neutral-200 bg-white p-4 text-left transition-all hover:border-accent-400 hover:shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-accent-500 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:border-accent-500",onClick:x[0]||(x[0]=m=>h.$emit("select",e.pkg.name))},[t("div",ye,[t("span",_e,[e.pkg.iconUrl?(s(),i("img",{key:0,src:e.pkg.iconUrl,alt:"",class:"h-full w-full object-cover",loading:"lazy"},null,8,we)):(s(),k(a(J),{key:1,class:"h-5 w-5 text-neutral-400"}))]),t("div",$e,[t("p",Me,u(c.value),1),t("p",Se,u(e.pkg.name),1)]),e.pkg.latestVersion?(s(),k(a(R),{key:0,variant:"secondary"},{default:$(()=>[f("v"+u(e.pkg.latestVersion),1)]),_:1})):g("",!0)]),t("p",je,u(e.pkg.description||"No description provided."),1),t("div",Ie,[t("span",Ce,[M(a(W),{class:"h-3.5 w-3.5"}),f(" "+u(p.value),1)]),t("span",null,u(l.value),1),e.pkg.license?(s(),i("span",Ae,u(e.pkg.license),1)):g("",!0)])]))}}),Be={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Re(e,r){return s(),i("svg",Be,[...r[0]||(r[0]=[t("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m12 19l-7-7l7-7m7 7H5"},null,-1)])])}const De=O({name:"lucide-arrow-left",render:Re});async function z(e){const r=await fetch(`${ie()}${e}`);if(!r.ok)throw new Error(`Registry request failed (${r.status})`);return await r.json()}function H(e){const r=new URLSearchParams;e.q?.trim()&&r.set("q",e.q.trim()),e.sort&&r.set("sort",e.sort),e.limit!==void 0&&r.set("limit",String(e.limit)),e.offset&&r.set("offset",String(e.offset));const c=r.toString();return`/api/v1/packages${c?`?${c}`:""}`}const Ve=24;function Ee(){const e=b([]),r=b(0),c=b(!1),p=b(!1),l=b(null),h=b(!1);let x={},m=0;async function I(_){const v=++m;x={..._,offset:0,limit:Ve},c.value=!0,l.value=null;try{const d=await z(H(x));if(v!==m)return;e.value=d.objects,r.value=d.total,h.value=d.objects.length+(x.offset??0)<d.total}catch(d){if(v!==m)return;l.value=d instanceof Error?d.message:"The marketplace could not be loaded.",e.value=[],r.value=0,h.value=!1}finally{v===m&&(c.value=!1)}}async function C(){if(p.value||c.value||!h.value)return;const _=++m,v=e.value.length;p.value=!0;try{const d=await z(H({...x,offset:v}));if(_!==m)return;e.value=[...e.value,...d.objects],r.value=d.total,h.value=e.value.length<d.total}catch(d){if(_!==m)return;l.value=d instanceof Error?d.message:"More packages could not be loaded."}finally{_===m&&(p.value=!1)}}return{packages:e,total:r,loading:c,loadingMore:p,error:l,search:I,loadMore:C,hasMore:h}}function Le(){const e=b(null),r=b(!1),c=b(null);let p=0;async function l(h){const x=++p;r.value=!0,c.value=null,e.value=null;try{const m=h.split("/").map(C=>encodeURIComponent(C)).join("/"),I=await z(`/api/v1/packages/${m}`);if(x!==p)return;e.value=I}catch(m){if(x!==p)return;c.value=m instanceof Error?m.message:"Package could not be loaded."}finally{x===p&&(r.value=!1)}}return{detail:e,loading:r,error:c,load:l}}K.setOptions({gfm:!0,breaks:!0});Q.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&(e.setAttribute("target","_blank"),e.setAttribute("rel","noopener noreferrer"))});function Ue(e){const r=K.parse(e,{async:!1});return Q.sanitize(r,{USE_PROFILES:{html:!0},FORBID_TAGS:["style","form","input","button"]})}const ze={key:0,class:"flex items-center gap-2 py-12 text-neutral-500"},Pe={class:"flex items-start gap-4"},Ne={class:"flex h-16 w-16 flex-shrink-0 items-center justify-center overflow-hidden rounded-xl border border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-neutral-800"},Fe=["src"],He={class:"min-w-0 flex-1"},Oe={class:"flex flex-wrap items-center gap-2"},qe={class:"text-xl font-semibold text-neutral-900 dark:text-neutral-100"},Ge={class:"mt-0.5 font-mono text-xs text-neutral-400 dark:text-neutral-500"},Je={key:0,class:"mt-2 max-w-2xl text-sm text-neutral-600 dark:text-neutral-400"},Ke={class:"mt-6 grid gap-8 lg:grid-cols-[1fr_280px]"},Qe={class:"min-w-0"},We=["innerHTML"],Xe={key:1,class:"py-8 text-sm text-neutral-400"},Ye={class:"space-y-6"},Ze={class:"flex items-center gap-2 rounded-lg border border-neutral-200 bg-neutral-50 px-3 py-2 dark:border-neutral-700 dark:bg-neutral-900"},et={class:"min-w-0 flex-1 truncate font-mono text-xs text-neutral-800 dark:text-neutral-200"},tt={class:"space-y-3 text-sm"},at={class:"flex items-center justify-between gap-2"},st={class:"inline-flex items-center gap-1 font-medium text-neutral-800 dark:text-neutral-200"},nt={key:0,class:"flex items-center justify-between gap-2"},rt={class:"font-medium text-neutral-800 dark:text-neutral-200"},lt={class:"flex items-center justify-between gap-2"},ot={class:"text-neutral-800 dark:text-neutral-200"},it={key:1,class:"flex items-center justify-between gap-2"},ut=["href"],dt={key:2,class:"flex items-center justify-between gap-2"},ct=["href"],mt={key:0},ft={class:"flex flex-wrap gap-1.5"},pt={class:"mb-2 text-xs font-semibold uppercase tracking-wide text-neutral-400"},xt={class:"space-y-1.5"},kt={class:"font-mono text-neutral-800 dark:text-neutral-200"},vt=["title"],gt=V({__name:"MarketplaceDetail",props:{name:{}},emits:["back"],setup(e,{emit:r}){const c=e,p=r,{detail:l,loading:h,error:x,load:m}=Le();L(()=>c.name,y=>{y&&m(y)},{immediate:!0});const I=j(()=>l.value?.distTags.latest??l.value?.versions[0]?.version??null),C=j(()=>`npm install ${c.name}`),_=j(()=>l.value?.readme?Ue(l.value.readme):null),v=j(()=>{const y=l.value?.repository,n=typeof y=="string"?y:y?.url;if(!n)return null;const o=n.replace(/^git\+/,"").replace(/\.git$/,"");return o.startsWith("http")?o:null}),d=b(!1);let B=null;async function T(){try{await navigator.clipboard.writeText(C.value),d.value=!0,B&&clearTimeout(B),B=setTimeout(()=>d.value=!1,1500)}catch{}}const A=b(!1),E=j(()=>{const y=l.value?.versions??[];return A.value?y:y.slice(0,8)});return(y,n)=>(s(),i("div",null,[t("button",{type:"button",class:"mb-4 inline-flex items-center gap-1.5 text-sm text-neutral-500 transition-colors hover:text-neutral-900 dark:text-neutral-400 dark:hover:text-neutral-100",onClick:n[0]||(n[0]=o=>p("back"))},[M(a(De),{class:"h-4 w-4"}),n[2]||(n[2]=f(" Marketplace ",-1))]),a(h)?(s(),i("div",ze,[M(q,{size:"sm"}),n[3]||(n[3]=t("span",{class:"text-sm"},"Loading package…",-1))])):a(x)?(s(),k(a(G),{key:1,variant:"error"},{default:$(()=>[f(u(a(x)),1)]),_:1})):a(l)?(s(),i(S,{key:2},[t("div",Pe,[t("span",Ne,[a(l).iconUrl?(s(),i("img",{key:0,src:a(l).iconUrl,alt:"",class:"h-full w-full object-cover"},null,8,Fe)):(s(),k(a(J),{key:1,class:"h-7 w-7 text-neutral-400"}))]),t("div",He,[t("div",Oe,[t("h1",qe,u(a(X)(a(l).name)),1),I.value?(s(),k(a(R),{key:0,variant:"secondary"},{default:$(()=>[f("v"+u(I.value),1)]),_:1})):g("",!0),a(l).license?(s(),k(a(R),{key:1,variant:"default"},{default:$(()=>[f(u(a(l).license),1)]),_:1})):g("",!0)]),t("p",Ge,u(a(l).name),1),a(l).description?(s(),i("p",Je,u(a(l).description),1)):g("",!0)])]),t("div",Ke,[t("div",Qe,[_.value?(s(),i("div",{key:0,class:"marketplace-readme text-sm text-neutral-700 dark:text-neutral-300",innerHTML:_.value},null,8,We)):(s(),i("p",Xe,"This package has no README."))]),t("aside",Ye,[t("div",null,[n[4]||(n[4]=t("h2",{class:"mb-2 text-xs font-semibold uppercase tracking-wide text-neutral-400"},"Install",-1)),t("div",Ze,[t("code",et,u(C.value),1),M(a(U),{variant:"ghost",size:"sm","aria-label":d.value?"Copied":"Copy install command",onClick:T},{default:$(()=>[d.value?(s(),k(a(pe),{key:0,class:"h-4 w-4 text-green-600 dark:text-green-400"})):(s(),k(a(fe),{key:1,class:"h-4 w-4"}))]),_:1},8,["aria-label"])]),n[5]||(n[5]=t("p",{class:"mt-2 text-xs leading-relaxed text-neutral-400 dark:text-neutral-500"},[f(" Projects scaffolded by Standard Agents resolve the "),t("code",{class:"font-mono"},"@agents"),f(" scope automatically via their "),t("code",{class:"font-mono"},".npmrc"),f(". ")],-1))]),t("dl",tt,[t("div",at,[n[6]||(n[6]=t("dt",{class:"text-neutral-500 dark:text-neutral-400"},"Downloads",-1)),t("dd",st,[M(a(W),{class:"h-3.5 w-3.5"}),f(" "+u(a(Y)(a(l).downloads)),1)])]),a(l).publisher?(s(),i("div",nt,[n[7]||(n[7]=t("dt",{class:"text-neutral-500 dark:text-neutral-400"},"Publisher",-1)),t("dd",rt,u(a(l).publisher),1)])):g("",!0),t("div",lt,[n[8]||(n[8]=t("dt",{class:"text-neutral-500 dark:text-neutral-400"},"Published",-1)),t("dd",ot,u(a(F)(a(l).createdAt)),1)]),v.value?(s(),i("div",it,[n[10]||(n[10]=t("dt",{class:"text-neutral-500 dark:text-neutral-400"},"Repository",-1)),t("dd",null,[t("a",{href:v.value,target:"_blank",rel:"noopener noreferrer",class:"inline-flex items-center gap-1 text-accent-600 hover:underline dark:text-accent-400"},[n[9]||(n[9]=f(" Source ",-1)),M(a(N),{class:"h-3 w-3"})],8,ut)])])):g("",!0),a(l).homepage?(s(),i("div",dt,[n[12]||(n[12]=t("dt",{class:"text-neutral-500 dark:text-neutral-400"},"Homepage",-1)),t("dd",null,[t("a",{href:a(l).homepage,target:"_blank",rel:"noopener noreferrer",class:"inline-flex items-center gap-1 text-accent-600 hover:underline dark:text-accent-400"},[n[11]||(n[11]=f(" Visit ",-1)),M(a(N),{class:"h-3 w-3"})],8,ct)])])):g("",!0)]),a(l).keywords.length?(s(),i("div",mt,[n[13]||(n[13]=t("h2",{class:"mb-2 text-xs font-semibold uppercase tracking-wide text-neutral-400"},"Keywords",-1)),t("div",ft,[(s(!0),i(S,null,D(a(l).keywords,o=>(s(),k(a(R),{key:o,variant:"default",size:"sm"},{default:$(()=>[f(u(o),1)]),_:2},1024))),128))])])):g("",!0),t("div",null,[t("h2",pt," Versions ("+u(a(l).versions.length)+") ",1),t("ul",xt,[(s(!0),i(S,null,D(E.value,o=>(s(),i("li",{key:o.version,class:"flex items-center justify-between gap-2 text-sm"},[t("span",kt,[f(u(o.version)+" ",1),o.deprecated?(s(),k(a(R),{key:0,variant:"warning",size:"sm",class:"ml-1"},{default:$(()=>[...n[14]||(n[14]=[f("deprecated",-1)])]),_:1})):g("",!0)]),t("span",{class:"text-xs text-neutral-400",title:a(be)(o.unpackedSize)},u(a(F)(o.publishedAt)),9,vt)]))),128))]),a(l).versions.length>8&&!A.value?(s(),i("button",{key:0,type:"button",class:"mt-2 text-xs text-accent-600 hover:underline dark:text-accent-400",onClick:n[1]||(n[1]=o=>A.value=!0)}," Show all "+u(a(l).versions.length)+" versions ",1)):g("",!0)])])])],64)):g("",!0)]))}}),ht=ue(gt,[["__scopeId","data-v-e50ecf95"]]),bt={class:"h-full overflow-y-auto"},yt={class:"mx-auto max-w-6xl px-6 py-6"},_t={class:"mb-6 flex flex-wrap items-end justify-between gap-4"},wt={class:"flex items-center gap-2"},$t={class:"relative"},Mt={key:1,class:"grid gap-4",style:{"grid-template-columns":"repeat(auto-fill, minmax(260px, 1fr))"}},St={class:"grid gap-4",style:{"grid-template-columns":"repeat(auto-fill, minmax(260px, 1fr))"}},jt={class:"mt-6 flex items-center justify-center"},Ut=V({__name:"MarketplaceView",setup(e){const r=ae(),c=se(),{packages:p,total:l,loading:h,loadingMore:x,error:m,search:I,loadMore:C,hasMore:_}=Ee(),v=b(""),d=b("recent"),B=j(()=>{const n=r.params.name;return(Array.isArray(n)?n.join("/"):n)||null});let T=null;L(v,()=>{T&&clearTimeout(T),T=setTimeout(()=>void A(),250)}),L(d,()=>void A());function A(){return I({q:v.value,sort:d.value})}function E(n){c.push(`/marketplace/${n}`)}function y(){c.push("/marketplace")}return ne(()=>{A()}),re(()=>{T&&clearTimeout(T)}),(n,o)=>(s(),i("div",bt,[t("div",yt,[B.value?(s(),k(ht,{key:0,name:B.value,onBack:y},null,8,["name"])):(s(),i(S,{key:1},[t("div",_t,[o[5]||(o[5]=t("div",null,[t("h1",{class:"text-xl font-semibold text-neutral-900 dark:text-neutral-100"},"Marketplace"),t("p",{class:"mt-1 text-sm text-neutral-500 dark:text-neutral-400"}," Public packages for Standard Agents — install agents, tools, and prompts into this instance. ")],-1)),t("div",wt,[t("label",$t,[M(a(de),{class:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-neutral-400"}),P(t("input",{"onUpdate:modelValue":o[0]||(o[0]=w=>v.value=w),type:"search",placeholder:"Search packages…",class:"w-64 rounded-lg border border-neutral-200 bg-white py-2 pl-9 pr-3 text-sm text-neutral-900 placeholder:text-neutral-400 focus:border-accent-400 focus:outline-none dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100"},null,512),[[le,v.value]])]),P(t("select",{"onUpdate:modelValue":o[1]||(o[1]=w=>d.value=w),"aria-label":"Sort packages",class:"rounded-lg border border-neutral-200 bg-white py-2 pl-3 pr-8 text-sm text-neutral-700 focus:border-accent-400 focus:outline-none dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-300"},[...o[4]||(o[4]=[t("option",{value:"recent"},"Recently updated",-1),t("option",{value:"downloads"},"Most installed",-1)])],512),[[oe,d.value]])])]),a(m)?(s(),k(a(G),{key:0,variant:"error",class:"mb-4"},{default:$(()=>[f(u(a(m))+" ",1),M(a(U),{variant:"ghost",size:"sm",class:"ml-2",onClick:o[2]||(o[2]=w=>A())},{default:$(()=>[...o[6]||(o[6]=[f("Retry",-1)])]),_:1})]),_:1})):g("",!0),a(h)?(s(),i("div",Mt,[(s(),i(S,null,D(8,w=>t("div",{key:w,class:"h-36 animate-pulse rounded-lg border border-neutral-200 bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900"})),64))])):!a(p).length&&!a(m)?(s(),k(a(ke),{key:2,icon:a(ce),message:v.value?`No packages match “${v.value}”.`:"No packages have been published yet."},null,8,["icon","message"])):(s(),i(S,{key:3},[t("div",St,[(s(!0),i(S,null,D(a(p),w=>(s(),k(Te,{key:w.name,pkg:w,onSelect:E},null,8,["pkg"]))),128))]),t("div",jt,[a(_)?(s(),k(a(U),{key:0,variant:"secondary",disabled:a(x),onClick:o[3]||(o[3]=w=>a(C)())},{default:$(()=>[a(x)?(s(),i(S,{key:0},[M(q,{size:"sm",class:"mr-2"}),o[7]||(o[7]=f("Loading…",-1))],64)):(s(),i(S,{key:1},[f("Load more ("+u(a(p).length)+" of "+u(a(l))+")",1)],64))]),_:1},8,["disabled"])):g("",!0)])],64))],64))])]))}});export{Ut as default};
@@ -1 +0,0 @@
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{c 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 +0,0 @@
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,b 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 +0,0 @@
1
- import{y as D,D as T,C as j,b 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"./monaco.js";import"./vendor.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:b}=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")),k=async()=>{g.value=!0,b();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=>{b();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 k(),i.value=!1,d.value=null,p.value="add"},S=async a=>{b();const o=await N({id:String(a)});if(!o.ok){const e=C(o.error,"Failed to delete model");h("error",e);return}await k(),h("success","Model deleted.")},U=()=>{p.value="add",d.value=null,i.value=!0};return O(()=>{k()}),(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 +0,0 @@
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 +0,0 @@
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 +0,0 @@
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,b 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 +0,0 @@
1
- import{C as P,ai as V,b 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"./monaco.js";import"./vendor.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
-
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};
@@ -1 +0,0 @@
1
- import{d as Me,Y as Re,X as Se,r as l,c as q,a3 as Ee,w as W,b as D,e as f,f as L,j as C,z as B,J as V,al as qe,m as A,q as ne,n as oe,am as De,k as Fe}from"./vue.js";import{T as $e}from"./index.js";import{u as ze,_ as Ne,h as re,i as He,C as Ue,j as ie}from"./ThreadInspectorPane.vue_vue_type_script_setup_true_lang.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"./timeAgo.js";import"./CopyButton.vue_vue_type_script_setup_true_lang.js";import"./check.js";import"./copy.js";import"./JsonViewer.js";import"./PromptModal.js";const We={class:"flex h-full overflow-hidden"},Be={key:0,class:"flex flex-col items-center p-4"},Ve={key:0,class:"flex flex-col items-center p-4"},F="__draft_new_thread__",de="agentbuilder.threads.messagesLogsSplitPercent",I=480,Ae=720,ue=360,ot=Me({__name:"ThreadsView",setup(Ie){const n=Re(),w=Se(),G=e=>e==="agent"||e==="side-a"||e==="side-b"?"config":e==="files"||e==="kv"||e==="effects"||e==="config"||e==="info"||e==="logs"?e:"logs",O=e=>typeof e=="string"&&e?e:"/",y=l(G(n.query.inspector)),k=l(O(n.query.filePath)),X=l(0),$=e=>{w.replace({path:n.path,query:{...n.query,...e.inspector?{inspector:e.inspector}:{},...e.filePath?{filePath:e.filePath}:{}},hash:n.hash})},o=l(typeof n.params.id=="string"?n.params.id:null),j=q(()=>o.value===F?null:o.value),i=l({threadList:!1,messages:!1}),ce=(e,t)=>{if(typeof window>"u")return t;const a=window.localStorage.getItem(e),s=a?Number.parseFloat(a):Number.NaN;return Number.isFinite(s)?s:t},K=(e,t,a)=>Math.min(a,Math.max(t,e)),Y=l(null),z=l(K(ce(de,40),25,70)),x=l(!1),fe=q(()=>{if(!i.value.messages)return{flex:`0 0 ${z.value}%`,minWidth:`${I}px`}}),ve=q(()=>({minWidth:`${ue}px`})),he=()=>{typeof window>"u"||window.localStorage.setItem(de,z.value.toFixed(2))},N=e=>{const t=Y.value;if(!t)return;const a=t.getBoundingClientRect();if(a.width<=0)return;const s=Math.min(Ae,Math.max(ue,a.width-I)),c=I/a.width*100,p=100-s/a.width*100;z.value=K((e.clientX-a.left)/a.width*100,Math.min(c,p),Math.max(c,p))},T=()=>{x.value&&(x.value=!1,document.body.style.cursor="",document.body.style.userSelect="",window.removeEventListener("pointermove",N),window.removeEventListener("pointerup",T),window.removeEventListener("pointercancel",T),he())},ge=e=>{i.value.messages||(e.preventDefault(),e.currentTarget instanceof HTMLElement&&e.currentTarget.setPointerCapture(e.pointerId),x.value=!0,document.body.style.cursor="col-resize",document.body.style.userSelect="none",N(e),window.addEventListener("pointermove",N),window.addEventListener("pointerup",T),window.addEventListener("pointercancel",T))};Ee(T);const M=l(!1),H=l(null),v=l(!1),me=q(()=>v.value?{id:F,agent_id:"",user_id:null,tags:[],parent:null,terminated:null,created_at:Math.floor(Date.now()/1e3)+1,agent:{name:"new_thread",title:"New thread",type:"ai_human"}}:null),R=l(null),{thread:J}=ze(j),h=l(null),d=l(null),u=l(null),g=l(null),r=l(null),S=l(null),m=l(null),Q=e=>{S.value=e,m.value=e},Z=e=>{const t=b.value,a=_.value;if(!t||!a)return null;if(t.hasWorkblockForLogId(e))return e;let s=e;const c=10;for(let p=0;p<c&&s;p++){const U=a.getLog(s);if(!U)break;const E=U.parent_log_id;if(!E)break;if(t.hasWorkblockForLogId(E))return E;s=E}return null},pe=e=>{if(S.value=e,!e){m.value=null;return}m.value=Z(e)??e},b=l(null),_=l(null);W(()=>n.params.id,e=>{o.value=typeof e=="string"?e:null,h.value=null,d.value=null,u.value=null,g.value=null,r.value=null}),W(()=>n.query.inspector,e=>{const t=G(e);t!==y.value&&(y.value=t)},{immediate:!0}),W(()=>n.query.filePath,e=>{const t=O(e);t!==k.value&&(k.value=t)},{immediate:!0});const Le=e=>{y.value=e,$({inspector:e})},we=e=>{k.value=e,$({filePath:e})},ee=()=>{X.value+=1},ye=e=>{k.value="/",w.push({path:`/threads/${e}`,query:{...n.query,filePath:"/"}})},ke=e=>{o.value===e&&(o.value=null,h.value=null,d.value=null,u.value=null,g.value=null,r.value=null,S.value=null,m.value=null),R.value?.refetch(),w.push({path:"/threads",query:n.query})},Te=()=>{J.value&&(H.value=J.value,M.value=!0)},be=()=>{H.value=null,M.value=!1,v.value=!0,o.value=F},te=async e=>{v.value=!1,o.value=e,R.value?.refetch(),await w.push({path:`/threads/${e}`,query:n.query}),await nextTick(),b.value?.focusComposer()},_e=()=>{v.value=!1,o.value===F&&(o.value=null)},ae=()=>{R.value?.refetch()},P=e=>{i.value[e]=!i.value[e]},le=async(e,t,a)=>{if(h.value=e,a){u.value=a.id??null,g.value=a,d.value=null,r.value=null,y.value="effects",$({inspector:"effects"}),await nextTick(),_.value?.selectEffectByReference(a);return}if(u.value=null,g.value=null,!t){d.value=null,r.value=null;return}const s=_.value;if(!s){d.value=t,r.value=t;return}const c=!s.hasLog(t);if(c&&s.setLoadingForLog(!0),d.value=t,r.value=t,c&&!await s.loadUntilLogId(t)){ie("ThreadsView","Could not find log after loading all available logs",{logId:t}),s.setLoadingForLog(!1);return}if(!await s.waitForLogRow(t)){ie("ThreadsView","Log row not rendered in time",{logId:t});return}s.scrollToLog(t),s.selectLogById(t)},Pe=e=>{d.value=e,u.value=null,g.value=null,h.value=null;const t=b.value;if(!t){r.value=e;return}if(t.scrollToLogId(e)){r.value=e;return}const a=Z(e);a&&a!==e&&t.scrollToLogId(a),r.value=a??e},Ce=e=>{e&&(d.value=e)},se=e=>{_.value?.removeLogsByIds(e)},xe=e=>{e&&!o.value&&w.push({path:`/threads/${e}`,query:n.query})};return(e,t)=>(f(),D("div",We,[L("div",{class:A([i.value.threadList?"w-[60px]":"w-[320px]","border-r border-neutral-300 dark:border-neutral-700 flex-shrink-0 transition-all duration-200 flex flex-col min-h-0"])},[i.value.threadList?(f(),D("div",Be,[L("button",{onClick:t[0]||(t[0]=a=>P("threadList")),class:"p-2 hover:bg-neutral-100 dark:hover:bg-neutral-900 rounded transition-colors",title:"Expand Threads pane"},[C(V(qe),{size:20})])])):(f(),B(Ne,{key:1,ref_key:"threadListPaneRef",ref:R,"selected-thread-id":o.value,"optimistic-thread":me.value,onSelectThread:ye,onCollapse:t[1]||(t[1]=a=>P("threadList")),onCreateThread:be,onThreadsLoaded:xe},null,8,["selected-thread-id","optimistic-thread"]))],2),L("div",{ref_key:"messagesLogsContainerRef",ref:Y,class:"flex min-w-0 flex-1 overflow-hidden"},[L("div",{style:oe(fe.value),class:A([i.value.messages?"w-[60px]":"","flex min-h-0 min-w-0 flex-col overflow-hidden transition-[width] duration-200"])},[i.value.messages?(f(),D("div",Ve,[L("button",{onClick:t[2]||(t[2]=a=>P("messages")),class:"p-2 hover:bg-neutral-100 dark:hover:bg-neutral-900 rounded transition-colors",title:"Expand Messages pane"},[C(V(De),{size:20})])])):o.value&&!v.value?(f(),B(V($e),{key:1,"thread-id":o.value,preload:!0,live:!0,"include-silent":!0,"use-workblocks":!0,"use-subagent-blocks":!0},{default:Fe(()=>[C(re,{ref_key:"messagesPaneRef",ref:b,"thread-id":o.value,"selected-message-id":h.value,"selected-log-id":r.value,"selected-effect-id":u.value,"hovered-log-id":m.value,onCollapse:t[3]||(t[3]=a=>P("messages")),onMessageClick:le,onMessageHover:Q,onLogsDeleted:se,onFilesChanged:ee},null,8,["thread-id","selected-message-id","selected-log-id","selected-effect-id","hovered-log-id"])]),_:1},8,["thread-id"])):i.value.messages?ne("",!0):(f(),B(re,{key:2,ref_key:"messagesPaneRef",ref:b,"thread-id":null,"create-thread-draft":v.value,"selected-message-id":h.value,"selected-log-id":r.value,"selected-effect-id":u.value,"hovered-log-id":m.value,onCollapse:t[4]||(t[4]=a=>P("messages")),onMessageClick:le,onMessageHover:Q,onLogsDeleted:se,onFilesChanged:ee,onCancelCreateThread:_e,onThreadCreated:te},null,8,["create-thread-draft","selected-message-id","selected-log-id","selected-effect-id","hovered-log-id"]))],6),i.value.messages?ne("",!0):(f(),D("div",{key:0,class:A(["group relative z-10 w-2 shrink-0 touch-none cursor-col-resize border-x border-neutral-300 bg-white transition-colors before:absolute before:inset-y-0 before:-left-2 before:-right-2 hover:bg-neutral-100 dark:border-neutral-700 dark:bg-black dark:hover:bg-neutral-900",x.value?"bg-neutral-100 dark:bg-neutral-900":""]),role:"separator","aria-orientation":"vertical",title:"Resize messages and logs",onPointerdown:ge},null,34)),L("div",{class:"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden",style:oe(ve.value)},[C(He,{ref_key:"logsPaneRef",ref:_,"thread-id":j.value,"selected-log-id":d.value,"selected-effect-id":u.value,"selected-effect-ref":g.value,"hovered-log-id":S.value,"active-tab":y.value,"file-path":k.value,"files-refresh-key":X.value,"onUpdate:activeTab":Le,"onUpdate:filePath":we,onLogClick:Pe,onLogHover:pe,onLogsLoaded:Ce,onThreadDeleted:ke,onEditThread:Te,onThreadUpdated:ae},null,8,["thread-id","selected-log-id","selected-effect-id","selected-effect-ref","hovered-log-id","active-tab","file-path","files-refresh-key"])],4)],512),C(Ue,{modelValue:M.value,"onUpdate:modelValue":t[5]||(t[5]=a=>M.value=a),"edit-thread":H.value,onThreadCreated:te,onThreadUpdated:ae},null,8,["modelValue","edit-thread"])]))}});export{ot as default};
@@ -1 +0,0 @@
1
- import{d as re,r as b,an as f,Y as ne,w as le,o as ie,z as k,e as l,k as c,f as t,j as p,J as i,s as v,u as d,b as m,q as x,m as g,F as y,l as w,h as ce}from"./vue.js";import{b as h,C as de,A as M,aj as O,_ as me}from"./index.js";import{_ as C,I as q}from"./DataTable.vue_vue_type_script_setup_true_lang.js";import{_ as ue}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{J as pe}from"./JsonViewer.js";import{C as he}from"./CenteredContentView.js";import{_ as be}from"./UiCodeBlock.vue_vue_type_script_setup_true_lang.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"./CopyButton.vue_vue_type_script_setup_true_lang.js";import"./check.js";import"./copy.js";const _="No description available";function $(o){return o.variables||o.tenvs||[]}function fe(o){return Object.entries(o).map(([n,a])=>({name:n,description:a.description||_,schema:null,hasError:a.hasError||!1,error:a.error,type:a.type||"tool",variables:$(a)}))}function xe(o){return Object.entries(o).map(([n,a])=>({name:n,description:a.description||_,schema:a.schema||null,hasError:!1,type:"prompt",model:a.model,variables:$(a)}))}function ge(o){return Object.entries(o).map(([n,a])=>({name:n,description:a.description||_,schema:a.schema||null,hasError:!1,type:"agent",prompt:a.prompt||a.model,variables:$(a)}))}function ke(o){return/^[a-z][a-z0-9_]*[a-z0-9]$/.test(o)||/^[a-z]$/.test(o)}function ve(o){return o.hasError&&o.error?o.error:o.description||_}function T(o){return o.required?`${o.name}*`:o.name}const _e={class:"font-medium mb-1"},ye={id:"functions"},we=["onClick"],Ce={key:1,class:"text-left font-medium text-red-600 dark:text-red-400"},Te={key:0,class:"mt-2 flex flex-wrap gap-1"},$e=["title"],Se={class:"flex justify-end"},Ee=["onClick"],De={key:1,class:"text-neutral-400 text-sm"},Ne={id:"prompts",class:"mt-12"},Ae=["onClick"],Fe={class:"text-neutral-600 dark:text-neutral-400"},je={key:0,class:"mt-2 flex flex-wrap gap-1"},Ve=["title"],Pe={class:"text-sm text-neutral-500 dark:text-neutral-400"},ze={id:"agents",class:"mt-12"},Be=["onClick"],Ie={class:"text-neutral-600 dark:text-neutral-400"},Je={key:0,class:"mt-2 flex flex-wrap gap-1"},Me=["title"],Oe={class:"text-sm text-neutral-500 dark:text-neutral-400"},qe={class:"flex items-center gap-2"},Re={key:0,class:"space-y-4"},Ue={class:"text-lg font-medium mb-2"},Le={class:"text-sm text-neutral-600 dark:text-neutral-400 mb-4"},Ye={key:0,class:"h-96 flex items-center justify-center border border-black/20 dark:border-white/20 rounded bg-black/5 dark:bg-white/5"},ht=re({__name:"ToolsView",setup(o){const n=b(null),a=b(!1),{data:S}=f(h("/api/config")).json(),{data:E,error:He,isFetching:R,execute:U}=f(h("/api/tools?type=tools"),{immediate:!1}).json(),{data:D,error:We,isFetching:L,execute:Y}=f(h("/api/tools?type=prompts&schema=true"),{immediate:!1}).json(),{data:N,error:Ge,isFetching:H,execute:W}=f(h("/api/tools?type=agents&schema=true"),{immediate:!1}).json(),{data:A,error:Ke,isFetching:Qe,execute:G}=f(()=>n.value?h(`/api/tools/${encodeURIComponent(n.value.name)}`):null,{immediate:!1}).json(),F=b([]),j=b([]),V=b([]),P=ne(),z=async()=>{const u=P.hash;if(u){await ce();const s=document.getElementById(u.slice(1));s&&s.scrollIntoView({behavior:"smooth"})}};le(()=>P.hash,z);const B=async u=>{n.value=u,await G(),A.value&&(n.value={...u,schema:A.value.schema||null}),a.value=!0},I=async u=>{if(n.value=u,a.value=!0,!u.schema&&u.type==="prompt"){const s=await fetch(h("/api/tools?type=prompts&schema=true"));if(s.ok){const e=await s.json();e[u.name]&&(n.value={...u,schema:e[u.name].schema||null})}}},K=[{key:"name",label:"Prompt Name",width:"w-1/3",sortable:!0},{key:"description",label:"Description",width:"w-1/2"},{key:"model",label:"Model",width:"w-1/6",sortable:!0,filterable:!0}],Q=[{key:"name",label:"Agent Name",width:"w-1/3",sortable:!0},{key:"description",label:"Description",width:"w-1/2"},{key:"prompt",label:"Prompt",width:"w-1/6",sortable:!0,filterable:!0}],X=[{key:"name",label:"Tool Name",width:"w-1/3",sortable:!0},{key:"description",label:"Description",width:"w-1/2"},{key:"actions",label:"Actions",width:"w-1/6"}],Z=()=>{E.value&&(F.value=fe(E.value))},ee=()=>{D.value&&(j.value=xe(D.value))},te=()=>{N.value&&(V.value=ge(N.value))},ae=async()=>{await U(),Z()},se=async()=>{await Y(),ee()},oe=async()=>{await W(),te()},J=()=>{a.value=!1,n.value=null};return ie(()=>{ae(),se(),oe(),z()}),(u,s)=>(l(),k(he,null,{default:c(()=>[s[6]||(s[6]=t("div",{class:"flex justify-between items-center mb-6"},[t("h1",{class:"text-3xl font-bold"},"Tools")],-1)),s[7]||(s[7]=t("p",{class:"text-neutral-600 dark:text-neutral-400 mb-6"}," Tools are the fundamental building blocks of how your business logic is exposed to your agents. Your prompts can expose tools for the agents to call. There are 3 types of tools: functions, prompts, and agents. Functions are actual code in your AgentBuilder codebase. Prompts are any prompts created in the prompts table (which can themselves expose tools). Agents are multi-turn conversations that can be invoked as tools. ",-1)),p(i(de),{variant:"info",class:"mb-6"},{default:c(()=>[t("p",_e,[s[1]||(s[1]=v(" To create or modify tools, edit the ",-1)),p(i(be),null,{default:c(()=>[v(d(i(S)?.toolsDir||"agentbuilder/tools")+"/",1)]),_:1}),s[2]||(s[2]=v(" directory of your codebase. ",-1))]),s[3]||(s[3]=t("p",{class:"opacity-70"}," Changes will be automatically detected. ",-1))]),_:1}),t("div",ye,[p(C,{title:"Functions",description:"Function tools defined in your codebase.",columns:X,data:F.value,loading:i(R),sortable:"",searchable:"","search-placeholder":"Search functions...","empty-message":`No tools found. Add tool files to the ${i(S)?.toolsDir||"agentbuilder/tools"}/ directory.`},{"cell-name":c(({row:e})=>[t("div",{class:g(["flex items-center gap-2",{"text-red-600 dark:text-red-400":e.hasError}])},[e.hasError?(l(),m("span",Ce,d(e.name),1)):(l(),m("button",{key:0,onClick:r=>B(e),class:"text-left font-medium hover:text-black/70 dark:hover:text-white/70 transition-colors underline decoration-transparent hover:decoration-current"},d(e.name),9,we)),e.hasError?(l(),k(i(M),{key:2,content:"This tool has validation errors"},{default:c(()=>[p(i(O),{class:"w-4 h-4 text-red-500"})]),_:1})):i(ke)(e.name)?x("",!0):(l(),k(i(M),{key:3,content:"Tool name should be in snake_case format (e.g., 'log_name', 'send_email')"},{default:c(()=>[p(i(O),{class:"w-4 h-4 text-amber-500"})]),_:1}))],2)]),"cell-description":c(({row:e})=>[t("div",null,[t("span",{class:g({"text-red-600 dark:text-red-400":e.hasError,"text-neutral-600 dark:text-neutral-400":!e.hasError})},d(i(ve)(e)),3),e.variables&&e.variables.length>0?(l(),m("div",Te,[(l(!0),m(y,null,w(e.variables,r=>(l(),m("span",{key:`${e.name}-${r.name}`,class:g(["text-[10px] px-1.5 py-0.5 rounded uppercase tracking-wide",r.type==="secret"?"bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300":"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300"]),title:r.description||r.name},d(i(T)(r)),11,$e))),128))])):x("",!0)])]),"cell-actions":c(({row:e})=>[t("div",Se,[e.hasError?(l(),m("span",De,"—")):(l(),m("button",{key:0,onClick:r=>B(e),class:"p-1.5 rounded hover:bg-black/10 dark:hover:bg-white/10 transition-colors",title:"View Schema"},[p(i(q),{class:"w-4 h-4"})],8,Ee))])]),_:1},8,["data","loading","empty-message"])]),t("div",Ne,[p(C,{title:"Prompts",description:"Prompts that are exposed as tools can be called by other prompts and agents. These allow you to create reusable, composable prompt chains.",columns:K,data:j.value,loading:i(L),sortable:"",searchable:"","search-placeholder":"Search prompts...","empty-message":"No prompts are currently exposed as tools. Mark a prompt as 'Expose as tool' to see it here."},{"cell-name":c(({row:e})=>[t("button",{onClick:r=>I(e),class:"text-left font-medium hover:text-black/70 dark:hover:text-white/70 transition-colors underline decoration-transparent hover:decoration-current"},d(e.name),9,Ae)]),"cell-description":c(({row:e})=>[t("div",null,[t("span",Fe,d(e.description),1),e.variables&&e.variables.length>0?(l(),m("div",je,[(l(!0),m(y,null,w(e.variables,r=>(l(),m("span",{key:`${e.name}-${r.name}`,class:g(["text-[10px] px-1.5 py-0.5 rounded uppercase tracking-wide",r.type==="secret"?"bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300":"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300"]),title:r.description||r.name},d(i(T)(r)),11,Ve))),128))])):x("",!0)])]),"cell-model":c(({row:e})=>[t("span",Pe,d(e.model||"-"),1)]),_:1},8,["data","loading"])]),t("div",ze,[p(C,{title:"Agents",description:"Agents that are exposed as tools can be called by other prompts and agents. When an agent is called as a tool, it uses the Side A system prompt's requirements as the tool's input schema.",columns:Q,data:V.value,loading:i(H),sortable:"",searchable:"","search-placeholder":"Search agents...","empty-message":"No agents are currently exposed as tools. Mark an agent as 'Expose as tool' to see it here."},{"cell-name":c(({row:e})=>[t("button",{onClick:r=>I(e),class:"text-left font-medium hover:text-black/70 dark:hover:text-white/70 transition-colors underline decoration-transparent hover:decoration-current"},d(e.name),9,Be)]),"cell-description":c(({row:e})=>[t("div",null,[t("span",Ie,d(e.description),1),e.variables&&e.variables.length>0?(l(),m("div",Je,[(l(!0),m(y,null,w(e.variables,r=>(l(),m("span",{key:`${e.name}-${r.name}`,class:g(["text-[10px] px-1.5 py-0.5 rounded uppercase tracking-wide",r.type==="secret"?"bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300":"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300"]),title:r.description||r.name},d(i(T)(r)),11,Me))),128))])):x("",!0)])]),"cell-prompt":c(({row:e})=>[t("span",Oe,d(e.prompt||"-"),1)]),_:1},8,["data","loading"])]),p(ue,{modelValue:a.value,"onUpdate:modelValue":s[0]||(s[0]=e=>a.value=e),onClose:J,width:"max-w-4xl"},{header:c(()=>[t("div",qe,[p(i(q),{class:"w-5 h-5"}),t("span",null,d(n.value?.name)+" Schema",1)])]),footer:c(()=>[p(i(me),{onClick:J},{default:c(()=>[...s[5]||(s[5]=[v(" Close ",-1)])]),_:1})]),default:c(()=>[n.value?(l(),m("div",Re,[t("div",null,[t("h3",Ue,d(n.value.type==="prompt"?"Required Schema":"JSON Schema"),1),t("p",Le,d(n.value.type==="prompt"?"This is the JSON schema that defines the input parameters for this prompt.":"This is the automatically generated JSON schema for the tool's arguments."),1)]),n.value.schema===null?(l(),m("div",Ye,[...s[4]||(s[4]=[t("p",{class:"text-neutral-500 dark:text-neutral-400"}," No parameters required ",-1)])])):(l(),k(pe,{key:1,value:n.value.schema,class:"h-96 border border-black/20 dark:border-white/20 rounded"},null,8,["value"]))])):x("",!0)]),_:1},8,["modelValue"])]),_:1}))}});export{ht as default};
@@ -1 +0,0 @@
1
- import{d as n,z as a,e as t,B as s,m as l,k as r,g as i}from"./vue.js";const d=n({__name:"UiCodeBlock",props:{inline:{type:Boolean,default:!0}},setup(e){return(o,c)=>(t(),a(s(e.inline?"code":"pre"),{class:l(["font-mono text-xs bg-neutral-100 dark:bg-neutral-800 rounded",e.inline?"px-1.5 py-0.5":"px-3 py-2 overflow-x-auto"])},{default:r(()=>[i(o.$slots,"default")]),_:3},8,["class"]))}});export{d as _};
@@ -1 +0,0 @@
1
- import{r as P}from"./formkit.js";import{C as Y,_ as h,H as y,e as x,f as V}from"./index.js";import{_ as G}from"./DataTable.vue_vue_type_script_setup_true_lang.js";import{_ as $}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{C as Q}from"./CenteredContentView.js";import{u as W}from"./useActionFeedback.js";import{g as M,b as X}from"./settingsData.js";import{d as Z,r as l,o as ee,O,z as T,e as C,k as r,q as j,j as s,J as i,s as b,u as B,f as m,b as K}from"./vue.js";import"./monaco.js";import"./vendor.js";import"./syntax.js";import"./chevron-right.js";import"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";const ae={class:"inline-flex items-center gap-2"},se={key:0,class:"rounded-full bg-accent-100 px-2 py-0.5 text-xs font-medium text-accent-800 dark:bg-accent-900 dark:text-accent-200"},te={key:1,class:"rounded-full bg-neutral-100 px-2 py-0.5 text-xs font-medium text-neutral-600 dark:bg-neutral-800 dark:text-neutral-300",title:"Signs in through the Standard Agents platform connection"},re={class:"space-y-4"},oe={class:"flex justify-end gap-2"},le={class:"space-y-4"},ne={class:"flex justify-end gap-2"},ke=Z({__name:"UsersView",setup(de){const g=l(!1),U=l(!1),F=l([]),S=l(null),E=l(!1),w=l(null),p=l(!1),f=l(!1),u=l(null),c=l(null),{feedback:A,setFeedback:d,clearFeedback:_}=W(),v=l({username:"",role:"admin"}),D=[{value:"admin",label:"Admin"}],R=[{key:"username",label:"Username",width:"w-1/3"},{key:"role",label:"Role",width:"w-1/4"},{key:"created_at",label:"Created",width:"w-1/3",formatter:a=>new Date(a*1e3).toLocaleString()}],J=[{icon:"edit",label:"Edit",handler:async a=>{w.value=a,v.value={username:a.username,role:a.role},U.value=!0}},{icon:"delete",label:"Delete",confirm:!0,confirmMessage:"Are you sure you want to delete this user? This action cannot be undone.",handler:async a=>{await I(a.id)}}],k=async()=>{E.value=!0,_();try{const a=await y("/users");if(!a.ok)throw new Error("Failed to fetch users");const e=await a.json();F.value=e.users||[]}catch{d("error","Users could not be loaded."),F.value=[]}finally{E.value=!1}},L=async()=>{try{const a=await y("/auth/me");if(!a.ok)return;const e=await a.json();S.value=e.user?.id??null}catch{S.value=null}},z=async a=>{p.value=!0,_(),x(u);try{const e=await y("/users",{method:"POST",body:JSON.stringify(a)});if(!e.ok){const n=await e.json();V(n,u)||d("error",M(n,"Failed to add user"));return}await k(),q(),d("success","User added.")}catch{V({error:"Failed to add user"},u)}finally{p.value=!1}},H=async a=>{if(w.value){f.value=!0,_(),x(c);try{const e=X(a),n=await y(`/users/${w.value.id}`,{method:"PUT",body:JSON.stringify(e)});if(!n.ok){const o=await n.json();V(o,c)||d("error",M(o,"Failed to update user"));return}await k(),N(),d("success","User updated.")}catch{V({error:"Failed to update user"},c)}finally{f.value=!1}}},I=async a=>{_();try{const e=await y(`/users/${a}`,{method:"DELETE"});if(!e.ok){const n=await e.json();d("error",M(n,"Failed to delete user"));return}await k(),d("success","User deleted.")}catch{d("error","Failed to delete user")}},q=()=>{x(u),P("add-user-form"),g.value=!1},N=()=>{x(c),P("edit-user-form"),U.value=!1,w.value=null};return ee(()=>{k(),L()}),(a,e)=>{const n=O("FormKitMessages"),o=O("FormKit");return C(),T(Q,null,{default:r(()=>[i(A)?(C(),T(i(Y),{key:0,variant:i(A).variant,class:"mb-4"},{default:r(()=>[b(B(i(A).message),1)]),_:1},8,["variant"])):j("",!0),s(G,{title:"Users",description:"Manage user accounts and permissions","primary-action":{label:"Add User",handler:()=>g.value=!0},columns:R,data:F.value,actions:J,loading:E.value,"empty-message":"No users found"},{"cell-username":r(({row:t})=>[m("span",ae,[m("span",null,B(t.username),1),t.id===S.value?(C(),K("span",se," You ")):j("",!0),t.source==="standard_agents"?(C(),K("span",te," Standard Agents login ")):j("",!0)])]),_:1},8,["primary-action","data","loading"]),s($,{modelValue:g.value,"onUpdate:modelValue":e[1]||(e[1]=t=>g.value=t),title:"Add User",onClose:q},{footer:r(()=>[m("div",oe,[s(i(h),{variant:"secondary",disabled:p.value,onClick:q},{default:r(()=>[...e[6]||(e[6]=[b(" Cancel ",-1)])]),_:1},8,["disabled"]),s(i(h),{type:"submit",form:"add-user-form",loading:p.value},{default:r(()=>[...e[7]||(e[7]=[b(" Add User ",-1)])]),_:1},8,["loading"])])]),default:r(()=>[s(o,{id:"add-user-form",type:"form",actions:!1,disabled:p.value,onSubmit:z,onNode:e[0]||(e[0]=t=>u.value=t)},{default:r(()=>[m("div",re,[s(n,{node:u.value||void 0},null,8,["node"]),s(o,{type:"text",name:"username",label:"Username",validation:"required","validation-messages":{required:"Username is required"}}),s(o,{type:"password",name:"password",label:"Password",validation:"required","validation-messages":{required:"Password is required"}}),s(o,{type:"selectSearch",name:"role",label:"Role",options:D,value:"admin",placeholder:"Select role"})])]),_:1},8,["disabled"])]),_:1},8,["modelValue"]),s($,{modelValue:U.value,"onUpdate:modelValue":e[5]||(e[5]=t=>U.value=t),title:"Edit User",onClose:N},{footer:r(()=>[m("div",ne,[s(i(h),{variant:"secondary",disabled:f.value,onClick:N},{default:r(()=>[...e[8]||(e[8]=[b(" Cancel ",-1)])]),_:1},8,["disabled"]),s(i(h),{type:"submit",form:"edit-user-form",loading:f.value},{default:r(()=>[...e[9]||(e[9]=[b(" Update User ",-1)])]),_:1},8,["loading"])])]),default:r(()=>[s(o,{id:"edit-user-form",type:"form",actions:!1,disabled:f.value,onSubmit:H,onNode:e[4]||(e[4]=t=>c.value=t)},{default:r(()=>[m("div",le,[s(n,{node:c.value||void 0},null,8,["node"]),s(o,{type:"text",name:"username",label:"Username",validation:"required",modelValue:v.value.username,"onUpdate:modelValue":e[2]||(e[2]=t=>v.value.username=t),"validation-messages":{required:"Username is required"}},null,8,["modelValue"]),s(o,{type:"password",name:"password",label:"Password",help:"Leave blank to keep current password"}),s(o,{type:"selectSearch",name:"role",label:"Role",options:D,modelValue:v.value.role,"onUpdate:modelValue":e[3]||(e[3]=t=>v.value.role=t),placeholder:"Select role"},null,8,["modelValue"])])]),_:1},8,["disabled"])]),_:1},8,["modelValue"])]),_:1})}}});export{ke as default};
@@ -1 +0,0 @@
1
- import{d as de,Y as ie,c as z,r as c,w as ue,o as ce,O as ve,z as y,e as o,k as R,q as I,f as n,J as i,s as B,u as S,j as m,b,_ as me,F as D,l as O,m as P,b5 as H,b6 as Y,b3 as W,P as q,K as J}from"./vue.js";import{C as pe}from"./CenteredContentView.js";import{C as be,B as he,_ as fe,e as U,H as Z,f as G,m as ke}from"./index.js";import{u as xe}from"./useActionFeedback.js";import{g as Q}from"./settingsData.js";import"./formkit.js";import"./vendor.js";import"./syntax.js";import"./monaco.js";const ye={class:"overflow-hidden rounded-xl border border-neutral-200 bg-white dark:border-neutral-800 dark:bg-neutral-900"},_e={class:"border-b border-neutral-200 px-5 py-4 dark:border-neutral-800"},ge={class:"text-lg font-semibold text-neutral-900 dark:text-neutral-50"},we={class:"mt-1 text-sm text-neutral-500 dark:text-neutral-400"},Ve={key:0,class:"flex justify-center py-8"},$e={key:1,class:"space-y-5"},Ce={key:0,class:"rounded-lg border border-dashed border-neutral-200 px-4 py-5 text-sm text-neutral-500 dark:border-neutral-800 dark:text-neutral-400"},Ee={key:1,class:"space-y-2"},Ne={class:"min-w-0"},Re=["title"],Se=["disabled","title","onClick"],Ae=["disabled","onClick"],Te={class:"space-y-2 border-t border-neutral-200 pt-5 dark:border-neutral-800"},je=["disabled","title","onClick"],Fe=["disabled","onClick"],Ke=["disabled"],Me={class:"flex flex-col gap-3 border-t border-neutral-200 pt-5 dark:border-neutral-800 sm:flex-row sm:items-center sm:justify-between"},X="**********",ze=de({__name:"VariablesView",setup(Ie){const ee=ie(),V=z(()=>ee.name==="instance-variables"),u=z(()=>({title:V.value?"Instance Variables":"My Variables",description:V.value?"Defaults for the full AgentBuilder instance. These apply when a thread or user does not provide a more local value.":"Defaults for your user account. These override instance values and are overridden by thread-specific values.",endpoint:V.value?"/envs/instance":"/users/me/env",successMessage:V.value?"Instance variables saved.":"User variables saved."}));let te=0;const _=()=>({id:`scoped-env-${te++}`,name:"",value:"",secret:!0}),$=c(!1),l=c(!1),f=c([]),C=c({}),v=c({}),g=c({}),w=c({}),k=c({}),p=c([_()]),h=c(null),{feedback:A,setFeedback:x,clearFeedback:T}=xe(),E=z(()=>f.value.filter(a=>!k.value[a.name])),j=(a={})=>({outer:"$remove:mb-4 !mb-0 min-w-0",wrapper:"$remove:flex-1 flex min-w-0",inner:"$reset min-w-0",input:["$reset block h-9 w-full min-w-0 rounded border border-neutral-200 bg-white px-3 py-2 text-sm text-neutral-700 placeholder:text-neutral-400 disabled:opacity-60 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-200",a.mono?"font-mono":""].filter(Boolean).join(" "),help:"$remove:hidden hidden",messages:"$remove:formkit-messages hidden"}),N=a=>{const r={},d={};for(const e of a)r[e.name]=e.type==="secret"?X:e.value??"",d[e.name]=e.type==="secret";C.value=r,v.value=d,g.value={},w.value={},k.value={}},F=(a,r)=>{G(r?{error:a,fieldErrors:r}:{error:a},h)||x("error",a)},ae=a=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(a.trim()),re=a=>{g.value={...g.value,[a]:!0}},se=a=>{v.value={...v.value,[a]:!v.value[a]},w.value={...w.value,[a]:!0}},ne=a=>{k.value={...k.value,[a]:!0},T(),U(h)},le=()=>{p.value=[...p.value,_()]},oe=a=>{const r=p.value.filter(d=>d.id!==a);p.value=r.length>0?r:[_()]},K=async()=>{$.value=!0,U(h);try{const a=await Z(u.value.endpoint),r=await a.json().catch(()=>({}));if(!a.ok){x("error",Q(r,`Failed to load ${u.value.title.toLowerCase()}`)),f.value=[],N([]);return}T(),f.value=r.variables||[],N(f.value)}catch(a){const r=a instanceof Error?a.message:`Failed to load ${u.value.title.toLowerCase()}`;x("error",r),f.value=[],N([])}finally{$.value=!1}},M=async()=>{if(l.value)return;T(),U(h);const a={},r={},d=Object.keys(k.value).filter(t=>k.value[t]);for(const t of E.value){if(!g.value[t.name]&&!w.value[t.name])continue;const s=C.value[t.name]??"";s!==X&&(a[t.name]=s),(g.value[t.name]||w.value[t.name])&&(r[t.name]=v.value[t.name]?"secret":"text")}const e=new Set;for(const t of p.value){const s=t.name.trim(),L=t.value.length>0;if(!(!s&&!L)){if(!s||!ae(s)){F("Use a valid env name like WEATHER_API_KEY",{[`${t.id}_name`]:"Use a valid env name like WEATHER_API_KEY"});return}if(e.has(s)){F(`Duplicate env name: ${s}`,{[`${t.id}_name`]:`Duplicate env name: ${s}`});return}e.add(s),a[s]=t.value,r[s]=t.secret?"secret":"text"}}if(Object.keys(a).length===0&&Object.keys(r).length===0&&d.length===0){F("No env changes to save");return}l.value=!0;try{const t=await Z(u.value.endpoint,{method:"PATCH",body:JSON.stringify({env_patch:a,env_type_patch:r,env_delete:d})}),s=await t.json().catch(()=>({}));if(!t.ok){G(s,h)||x("error",Q(s,`Failed to save ${u.value.title.toLowerCase()}`));return}await K(),p.value=[_()],x("success",u.value.successMessage)}catch(t){x("error",t instanceof Error?t.message:`Failed to save ${u.value.title.toLowerCase()}`)}finally{l.value=!1}};return ue(()=>u.value.endpoint,()=>{f.value=[],N([]),p.value=[_()],K()}),ce(()=>{K()}),(a,r)=>{const d=ve("FormKit");return o(),y(pe,null,{default:R(()=>[i(A)?(o(),y(i(be),{key:0,variant:i(A).variant,class:"mb-4"},{default:R(()=>[B(S(i(A).message),1)]),_:1},8,["variant"])):I("",!0),n("div",ye,[n("div",_e,[n("h1",ge,S(u.value.title),1),n("p",we,S(u.value.description),1),r[1]||(r[1]=n("p",{class:"mt-2 text-xs text-neutral-500 dark:text-neutral-400"}," Resolution order: thread, user, instance, agent, then prompt. ",-1))]),m(d,{type:"form",id:"scoped-env-form",actions:!1,disabled:l.value,onSubmit:M,onNode:r[0]||(r[0]=e=>h.value=e),"form-class":"$reset p-5"},{default:R(()=>[m(i(me),{node:h.value||void 0},null,8,["node"]),$.value?(o(),b("div",Ve,[m(he)])):(o(),b("div",$e,[E.value.length===0?(o(),b("div",Ce," No stored variables yet. ")):I("",!0),E.value.length>0?(o(),b("div",Ee,[(o(!0),b(D,null,O(E.value,e=>(o(),b("div",{key:e.name,class:"scoped-env-row grid items-center gap-2"},[n("div",Ne,[n("div",{class:"truncate text-xs font-mono text-neutral-700 dark:text-neutral-200",title:e.name},S(e.name),9,Re)]),m(d,{type:v.value[e.name]?"password":"text",name:`env_${e.name}`,modelValue:C.value[e.name],"onUpdate:modelValue":t=>C.value[e.name]=t,placeholder:"Value",disabled:l.value,"outer-class":"$reset",classes:j(),onInput:t=>re(e.name)},null,8,["type","name","modelValue","onUpdate:modelValue","disabled","classes","onInput"]),n("button",{type:"button",class:P(["inline-flex h-9 w-9 shrink-0 items-center justify-center rounded border border-neutral-200 text-neutral-500 hover:bg-neutral-50 hover:text-neutral-900 disabled:opacity-50 dark:border-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-800 dark:hover:text-white",v.value[e.name]?"":"text-neutral-300 dark:text-neutral-600"]),disabled:l.value,title:v.value[e.name]?"Treat as secret":"Treat as text",onClick:t=>se(e.name)},[v.value[e.name]?(o(),y(i(H),{key:0,size:14})):(o(),y(i(Y),{key:1,size:14}))],10,Se),n("button",{type:"button",class:"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded border border-neutral-200 text-neutral-400 hover:border-red-200 hover:bg-red-50 hover:text-red-600 disabled:opacity-50 dark:border-neutral-800 dark:text-neutral-500 dark:hover:border-red-900 dark:hover:bg-red-950 dark:hover:text-red-400",disabled:l.value,title:"Remove variable",onClick:t=>ne(e.name)},[m(i(W),{size:14})],8,Ae)]))),128))])):I("",!0),n("div",Te,[(o(!0),b(D,null,O(p.value,e=>(o(),b("div",{key:e.id,class:"scoped-env-row grid items-center gap-2"},[m(d,{type:"text",name:`${e.id}_name`,modelValue:e.name,"onUpdate:modelValue":t=>e.name=t,placeholder:"WEATHER_API_KEY",disabled:l.value,validation:"envName","validation-visibility":"submit","outer-class":"$reset",classes:j({mono:!0}),onKeydown:q(J(M,["prevent"]),["enter"])},null,8,["name","modelValue","onUpdate:modelValue","disabled","classes","onKeydown"]),m(d,{type:e.secret?"password":"text",name:`${e.id}_value`,modelValue:e.value,"onUpdate:modelValue":t=>e.value=t,placeholder:"Value",disabled:l.value,"outer-class":"$reset",classes:j(),onKeydown:q(J(M,["prevent"]),["enter"])},null,8,["type","name","modelValue","onUpdate:modelValue","disabled","classes","onKeydown"]),n("button",{type:"button",class:P(["inline-flex h-9 w-9 shrink-0 items-center justify-center rounded border border-neutral-200 text-neutral-500 hover:bg-neutral-50 hover:text-neutral-900 disabled:opacity-50 dark:border-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-800 dark:hover:text-white",e.secret?"":"text-neutral-300 dark:text-neutral-600"]),disabled:l.value,title:e.secret?"Treat as secret":"Treat as text",onClick:t=>e.secret=!e.secret},[e.secret?(o(),y(i(H),{key:0,size:14})):(o(),y(i(Y),{key:1,size:14}))],10,je),n("button",{type:"button",class:"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded border border-neutral-200 text-neutral-400 hover:border-red-200 hover:bg-red-50 hover:text-red-600 disabled:opacity-50 dark:border-neutral-800 dark:text-neutral-500 dark:hover:border-red-900 dark:hover:bg-red-950 dark:hover:text-red-400",disabled:l.value,title:"Remove new row",onClick:t=>oe(e.id)},[m(i(W),{size:14})],8,Fe)]))),128)),n("button",{type:"button",class:"text-sm font-medium text-neutral-500 hover:text-neutral-900 disabled:opacity-50 dark:text-neutral-400 dark:hover:text-neutral-100",disabled:l.value,onClick:le}," Add another variable ",8,Ke)]),n("div",Me,[r[3]||(r[3]=n("p",{class:"text-xs text-neutral-500 dark:text-neutral-400"}," Secret values stay encrypted at rest and remain write-only until you switch them to text. ",-1)),m(i(fe),{type:"submit",form:"scoped-env-form",loading:l.value,disabled:l.value||$.value},{default:R(()=>[...r[2]||(r[2]=[B(" Save Variables ",-1)])]),_:1},8,["loading","disabled"])])]))]),_:1},8,["disabled"])])]),_:1})}}}),qe=ke(ze,[["__scopeId","data-v-c62ae15d"]]);export{qe as default};
@@ -1 +0,0 @@
1
- import{A as o,b as t,e as n,f as r}from"./vue.js";const s={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function c(a,e){return n(),t("svg",s,[...e[0]||(e[0]=[r("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M20 6L9 17l-5-5"},null,-1)])])}const l=o({name:"lucide-check",render:c});export{l as I};
@@ -1 +0,0 @@
1
- import{A as n,b as o,e as r,f as t}from"./vue.js";const s={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function l(i,e){return r(),o("svg",s,[...e[0]||(e[0]=[t("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M10 11v6m4-6v6m5-11v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"},null,-1)])])}const p=n({name:"lucide-trash-2",render:l}),d={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function c(i,e){return r(),o("svg",d,[...e[0]||(e[0]=[t("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m18 15l-6-6l-6 6"},null,-1)])])}const f=n({name:"lucide-chevron-up",render:c}),h={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function u(i,e){return r(),o("svg",h,[...e[0]||(e[0]=[t("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m6 9l6 6l6-6"},null,-1)])])}const g=n({name:"lucide-chevron-down",render:u}),a={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function m(i,e){return r(),o("svg",a,[...e[0]||(e[0]=[t("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m7 15l5 5l5-5M7 9l5-5l5 5"},null,-1)])])}const x=n({name:"lucide-chevrons-up-down",render:m}),k={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function v(i,e){return r(),o("svg",k,[...e[0]||(e[0]=[t("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m9 18l6-6l-6-6"},null,-1)])])}const _=n({name:"lucide-chevron-right",render:v});export{f as I,g as a,x as b,p as c,_ as d};
@@ -1 +0,0 @@
1
- import{A as t,b as r,e as n,f as e}from"./vue.js";const c={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function i(s,o){return n(),r("svg",c,[...o[0]||(o[0]=[e("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[e("rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}),e("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 d=t({name:"lucide-copy",render:i});export{d as I};