heyio 1.4.0 → 1.4.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 (37) hide show
  1. package/README.md +2 -2
  2. package/dist/api/server.js +37 -9
  3. package/dist/copilot/agents.js +47 -3
  4. package/dist/copilot/squad-tools.js +55 -1
  5. package/dist/store/instances.js +4 -0
  6. package/package.json +1 -1
  7. package/web-dist/assets/{AuditLogView-DqxVzjd_.js → AuditLogView-eyz02XQx.js} +2 -2
  8. package/web-dist/assets/{ChatView-BBopM_A3.js → ChatView-DXpE1NMj.js} +1 -1
  9. package/web-dist/assets/{FeedView-Bo4p1stx.js → FeedView-Clis71Lg.js} +2 -2
  10. package/web-dist/assets/HistoryView-B1EJ2Q9S.js +1 -0
  11. package/web-dist/assets/LoginView-bg8Sl_Gw.js +1 -0
  12. package/web-dist/assets/McpView-CBepc2JJ.js +1 -0
  13. package/web-dist/assets/{SchedulesView-B2o3vMm-.js → SchedulesView-DDFUUMPG.js} +2 -2
  14. package/web-dist/assets/SettingsView-BFfDRToB.js +1 -0
  15. package/web-dist/assets/{SkillsView-D_NHLk7C.js → SkillsView-Dv-337Yq.js} +4 -4
  16. package/web-dist/assets/{SquadDetailView-BKXLWvwn.js → SquadDetailView-p4c6XQ5a.js} +2 -2
  17. package/web-dist/assets/SquadHealthView-IjOdIla7.js +11 -0
  18. package/web-dist/assets/SquadsView-C5wQPkBA.js +6 -0
  19. package/web-dist/assets/{UsageView-Cy5Mbprb.js → UsageView-BcHfPX-N.js} +2 -2
  20. package/web-dist/assets/{WikiView-B5TOMnOg.js → WikiView-CKBw5FOf.js} +2 -2
  21. package/web-dist/assets/api-DPUP4xY9.js +1 -0
  22. package/web-dist/assets/{arrow-left-CGMB1w_A.js → arrow-left-BMJZvMdZ.js} +1 -1
  23. package/web-dist/assets/{git-branch-C_Hu39uh.js → git-branch-BF40208L.js} +1 -1
  24. package/web-dist/assets/{index-CiZnRvN4.js → index-DSAUDIwK.js} +63 -62
  25. package/web-dist/assets/{plus-DIBAaEMT.js → plus-aHVgAXQB.js} +1 -1
  26. package/web-dist/assets/{save-Chqlu7QA.js → save-jn5LGsCv.js} +1 -1
  27. package/web-dist/assets/{search-Cl8HcIsG.js → search-DUqJxRNn.js} +1 -1
  28. package/web-dist/assets/{trash-2-CQSzbVIr.js → trash-2-B9ibnt3n.js} +1 -1
  29. package/web-dist/assets/{triangle-alert-C1OjMvP5.js → triangle-alert-Cindqw1C.js} +1 -1
  30. package/web-dist/assets/{x-DThJHYFm.js → x-BDIsved4.js} +1 -1
  31. package/web-dist/index.html +1 -1
  32. package/web-dist/assets/HistoryView-ChTuQvXr.js +0 -1
  33. package/web-dist/assets/LoginView-AnOP3Mau.js +0 -1
  34. package/web-dist/assets/McpView-DPcihjuB.js +0 -1
  35. package/web-dist/assets/SettingsView-rtMUmH43.js +0 -1
  36. package/web-dist/assets/SquadHealthView-CVJiAgVW.js +0 -11
  37. package/web-dist/assets/SquadsView-fammrB7r.js +0 -6
@@ -1,4 +1,4 @@
1
- import{q as e}from"./index-CiZnRvN4.js";/**
1
+ import{l as e}from"./index-DSAUDIwK.js";/**
2
2
  * @license lucide-vue-next v0.474.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{q as a}from"./index-CiZnRvN4.js";/**
1
+ import{l as a}from"./index-DSAUDIwK.js";/**
2
2
  * @license lucide-vue-next v0.474.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{q as c}from"./index-CiZnRvN4.js";/**
1
+ import{l as c}from"./index-DSAUDIwK.js";/**
2
2
  * @license lucide-vue-next v0.474.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{q as e}from"./index-CiZnRvN4.js";/**
1
+ import{l as e}from"./index-DSAUDIwK.js";/**
2
2
  * @license lucide-vue-next v0.474.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{q as e}from"./index-CiZnRvN4.js";/**
1
+ import{l as e}from"./index-DSAUDIwK.js";/**
2
2
  * @license lucide-vue-next v0.474.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{q as e}from"./index-CiZnRvN4.js";/**
1
+ import{l as e}from"./index-DSAUDIwK.js";/**
2
2
  * @license lucide-vue-next v0.474.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>IO — Dashboard</title>
7
7
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
8
- <script type="module" crossorigin src="/assets/index-CiZnRvN4.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-DSAUDIwK.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-CQ_szaoT.css">
10
10
  </head>
11
11
  <body class="bg-background text-foreground">
@@ -1 +0,0 @@
1
- import{t as U,W as q,x as z,z as r,o as n,l as t,s as d,K as c,H as M,Y as T,V as D,M as E,n as m,F as $,E as A,v as p,J as g,D as a,h as B,k as P,m as G,f as J,g as K}from"./index-CiZnRvN4.js";import{S as Q}from"./search-Cl8HcIsG.js";import{A as R}from"./arrow-left-CGMB1w_A.js";import{T as W}from"./trash-2-CQSzbVIr.js";const Y={class:"flex h-full"},I={class:"p-3 border-b border-border space-y-2"},O={class:"flex items-center gap-2"},X={class:"relative"},Z={class:"flex gap-2"},ee={class:"flex-1"},te={class:"flex-1"},se={class:"flex-1 overflow-y-auto"},oe={key:0,class:"p-4 text-xs text-muted-foreground"},re={key:1,class:"flex flex-col items-center justify-center h-full p-6 text-center text-muted-foreground"},ne=["onClick"],le={class:"flex-1 min-w-0"},ae={class:"text-xs text-foreground line-clamp-2"},ie={class:"flex items-center gap-2 mt-1"},ue={class:"text-xs text-muted-foreground"},de={class:"text-xs text-muted-foreground"},ce=["onClick"],fe={key:2,class:"p-3 text-center"},ve={key:0,class:"flex-1 flex flex-col"},xe={class:"flex items-center gap-2 px-4 py-2 border-b border-border"},me={class:"text-sm font-medium text-muted-foreground"},pe={class:"flex-1 overflow-y-auto p-4 space-y-4"},ge={key:0,class:"text-center text-xs text-muted-foreground py-8"},he={class:"text-xs mt-1 opacity-60"},ye={key:1,class:"hidden md:flex flex-1 items-center justify-center text-muted-foreground"},be={class:"text-center"},_e=50,De=U({__name:"HistoryView",setup(ke){const l=a([]),h=a(0),y=a(!0),f=a(""),v=a(""),x=a(""),u=a(null),b=a([]),_=a(!1),k=a(0);async function w(o=!0){y.value=!0;try{o&&(k.value=0,l.value=[]);const e=new URLSearchParams;f.value&&e.set("q",f.value),v.value&&e.set("from",v.value),x.value&&e.set("to",x.value+"T23:59:59"),e.set("limit",String(_e)),e.set("offset",String(k.value));const i=await B(`/history?${e.toString()}`);l.value=o?i.items:[...l.value,...i.items],h.value=i.total,k.value+=i.items.length}finally{y.value=!1}}async function j(o){u.value=o,_.value=!0;try{b.value=await B(`/history/${o}`)}finally{_.value=!1}}function L(){u.value=null,b.value=[]}async function F(o,e){e.stopPropagation(),confirm("Delete this conversation?")&&(await K(`/history/${o}`),l.value=l.value.filter(i=>i.id!==o),h.value=Math.max(0,h.value-1),u.value===o&&L())}function C(o){return new Date(o).toLocaleString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function H(o,e=100){return o.length>e?o.slice(0,e)+"…":o}const N=P(()=>l.value.length<h.value);let S=null;return q([f,v,x],()=>{S&&clearTimeout(S),S=setTimeout(()=>w(!0),300)}),z(()=>w(!0)),(o,e)=>{var i;return r(),n("div",Y,[t("div",{class:p(["flex flex-col border-r border-border",u.value?"hidden md:flex w-80 shrink-0":"flex-1"])},[t("div",I,[t("div",O,[d(c(M),{class:"w-4 h-4 text-muted-foreground"}),e[4]||(e[4]=t("span",{class:"text-sm font-medium"},"Conversation History",-1))]),t("div",X,[d(c(Q),{class:"absolute left-2.5 top-2.5 w-3.5 h-3.5 text-muted-foreground"}),T(t("input",{"onUpdate:modelValue":e[0]||(e[0]=s=>f.value=s),placeholder:"Search conversations...",class:"w-full rounded-md border border-input bg-background pl-8 pr-3 py-2 text-xs focus:outline-none focus:ring-1 focus:ring-ring"},null,512),[[D,f.value]])]),t("div",Z,[t("div",ee,[e[5]||(e[5]=t("label",{class:"text-xs text-muted-foreground block mb-1"},"From",-1)),T(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>v.value=s),type:"date",class:"w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-1 focus:ring-ring"},null,512),[[D,v.value]])]),t("div",te,[e[6]||(e[6]=t("label",{class:"text-xs text-muted-foreground block mb-1"},"To",-1)),T(t("input",{"onUpdate:modelValue":e[2]||(e[2]=s=>x.value=s),type:"date",class:"w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-1 focus:ring-ring"},null,512),[[D,x.value]])])])]),t("div",se,[y.value&&l.value.length===0?(r(),n("div",oe," Loading... ")):l.value.length===0?(r(),n("div",re,[d(c(E),{class:"w-10 h-10 mb-3 opacity-40"}),e[7]||(e[7]=t("p",{class:"text-sm"},"No conversations found.",-1)),e[8]||(e[8]=t("p",{class:"text-xs mt-1"},"Start chatting to build up your history.",-1))])):m("",!0),(r(!0),n($,null,A(l.value,s=>(r(),n("div",{key:s.id,class:p(["group flex items-start gap-2 px-3 py-3 border-b border-border cursor-pointer hover:bg-accent/50 transition-colors",u.value===s.id?"bg-accent":""]),onClick:V=>j(s.id)},[t("div",le,[t("p",ae,g(H(s.preview)),1),t("div",ie,[t("span",ue,g(C(s.updatedAt)),1),t("span",de,"· "+g(s.messageCount)+" msgs",1)])]),t("button",{class:"opacity-0 group-hover:opacity-100 p-1 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive transition-all",title:"Delete",onClick:V=>F(s.id,V)},[d(c(W),{class:"w-3.5 h-3.5"})],8,ce)],10,ne))),128)),N.value?(r(),n("div",fe,[t("button",{class:"text-xs text-muted-foreground hover:text-foreground underline",onClick:e[3]||(e[3]=s=>w(!1))}," Load more ")])):m("",!0)])],2),u.value?(r(),n("div",ve,[t("div",xe,[t("button",{class:"p-1.5 rounded hover:bg-accent text-muted-foreground",title:"Back",onClick:L},[d(c(R),{class:"w-4 h-4"})]),t("span",me,g(C(((i=l.value.find(s=>s.id===u.value))==null?void 0:i.startedAt)??"")),1)]),t("div",pe,[_.value?(r(),n("div",ge," Loading... ")):m("",!0),(r(!0),n($,null,A(b.value,s=>(r(),n("div",{key:s.id,class:p(["flex",s.role==="user"?"justify-end":"justify-start"])},[t("div",{class:p(["max-w-[75%] rounded-lg px-4 py-2 text-sm",s.role==="user"?"bg-blue-600 text-white":"bg-muted text-foreground"])},[s.content?(r(),G(J,{key:0,content:s.content,class:p(s.role==="user"?"prose-invert":"")},null,8,["content","class"])):m("",!0),t("p",he,g(C(s.createdAt)),1)],2)],2))),128))])])):u.value?m("",!0):(r(),n("div",ye,[t("div",be,[d(c(M),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),e[9]||(e[9]=t("p",null,"Select a conversation to view",-1))])]))])}}});export{De as default};
@@ -1 +0,0 @@
1
- import{t as b,L as v,z as u,o as i,l as t,s as y,$ as w,Y as m,V as p,J as f,n as V,K as g,D as d,_,Q as h}from"./index-CiZnRvN4.js";const S={class:"min-h-screen flex items-center justify-center bg-background p-4"},k={class:"w-full max-w-sm space-y-8"},D={class:"text-center"},L={key:0,class:"text-sm text-destructive"},A=["disabled"],N=b({__name:"LoginView",setup(B){const o=v(),c=h(),r=d(""),n=d(""),s=d("");async function x(){s.value="";try{await o.login(r.value,n.value),c.push("/")}catch(l){s.value=l.message??"Login failed"}}return(l,e)=>(u(),i("div",S,[t("div",k,[t("div",D,[y(_,{size:56,class:"mx-auto mb-4"}),e[2]||(e[2]=t("h1",{class:"text-2xl font-bold bg-gradient-brand bg-clip-text text-transparent"}," IO ",-1)),e[3]||(e[3]=t("p",{class:"text-sm text-muted-foreground mt-1"},"Sign in to your dashboard",-1))]),t("form",{onSubmit:w(x,["prevent"]),class:"space-y-4 bg-card border border-border rounded-lg p-6"},[t("div",null,[e[4]||(e[4]=t("label",{class:"text-sm font-medium text-muted-foreground",for:"email"},"Email",-1)),m(t("input",{id:"email","onUpdate:modelValue":e[0]||(e[0]=a=>r.value=a),type:"email",required:"",class:"mt-1 w-full rounded-md border border-border bg-input px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring",placeholder:"you@example.com"},null,512),[[p,r.value]])]),t("div",null,[e[5]||(e[5]=t("label",{class:"text-sm font-medium text-muted-foreground",for:"password"},"Password",-1)),m(t("input",{id:"password","onUpdate:modelValue":e[1]||(e[1]=a=>n.value=a),type:"password",required:"",class:"mt-1 w-full rounded-md border border-border bg-input px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring",placeholder:"••••••••"},null,512),[[p,n.value]])]),s.value?(u(),i("div",L,f(s.value),1)):V("",!0),t("button",{type:"submit",disabled:g(o).loading,class:"btn-gradient w-full py-2.5"},f(g(o).loading?"Signing in...":"Sign In"),9,A)],32),e[6]||(e[6]=t("p",{class:"text-center text-xs text-muted-foreground"}," Personal AI Assistant Daemon ",-1))])]))}});export{N as default};
@@ -1 +0,0 @@
1
- import{t as k,x as C,h,z as a,o as n,l as t,s as m,K as p,r as S,Y as u,V as v,T as V,n as _,c as M,F as N,E as P,D as i,i as T,J as b,v as y,j as U,g as $}from"./index-CiZnRvN4.js";import{P as D}from"./plus-DIBAaEMT.js";import{T as j}from"./trash-2-CQSzbVIr.js";const B={class:"p-6"},L={class:"flex items-center justify-between mb-6"},z={key:0,class:"border border-border rounded-lg p-4 mb-6 space-y-3"},A={class:"grid grid-cols-2 gap-3"},E={key:0},F={key:1},G={key:1,class:"text-muted-foreground"},J={key:2,class:"text-center py-12 text-muted-foreground"},K={key:3,class:"space-y-2"},R={class:"font-medium text-sm"},Y={class:"ml-2 text-xs text-muted-foreground bg-secondary px-1.5 py-0.5 rounded"},q={class:"flex items-center gap-3"},H=["onClick"],I=["onClick"],Z=k({__name:"McpView",setup(O){const d=i([]),c=i(!0),r=i(!1),o=i({name:"",type:"stdio",command:"",url:""});C(async()=>{try{d.value=await h("/mcp")}finally{c.value=!1}});async function x(l){await U(`/mcp/${l.id}`,{enabled:!l.enabled}),l.enabled=!l.enabled}async function f(l){await $(`/mcp/${l}`),d.value=d.value.filter(e=>e.id!==l)}async function g(){const l={name:o.value.name,type:o.value.type};o.value.type==="stdio"?l.command=o.value.command:l.url=o.value.url;const e=await T("/mcp",l);d.value.push(e),r.value=!1,o.value={name:"",type:"stdio",command:"",url:""}}return(l,e)=>(a(),n("div",B,[t("div",L,[e[6]||(e[6]=t("h1",{class:"text-2xl font-bold"},"MCP Servers",-1)),t("button",{onClick:e[0]||(e[0]=s=>r.value=!r.value),class:"inline-flex items-center gap-1 px-3 py-1.5 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors"},[m(p(D),{class:"w-4 h-4"}),e[5]||(e[5]=S(" Add Server ",-1))])]),r.value?(a(),n("div",z,[t("div",A,[t("div",null,[e[7]||(e[7]=t("label",{class:"text-sm font-medium"},"Name",-1)),u(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>o.value.name=s),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[v,o.value.name]])]),t("div",null,[e[9]||(e[9]=t("label",{class:"text-sm font-medium"},"Type",-1)),u(t("select",{"onUpdate:modelValue":e[2]||(e[2]=s=>o.value.type=s),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[8]||(e[8]=[t("option",{value:"stdio"},"stdio",-1),t("option",{value:"http"},"http",-1)])],512),[[V,o.value.type]])])]),o.value.type==="stdio"?(a(),n("div",E,[e[10]||(e[10]=t("label",{class:"text-sm font-medium"},"Command",-1)),u(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>o.value.command=s),placeholder:"npx @my/mcp-server",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[v,o.value.command]])])):(a(),n("div",F,[e[11]||(e[11]=t("label",{class:"text-sm font-medium"},"URL",-1)),u(t("input",{"onUpdate:modelValue":e[4]||(e[4]=s=>o.value.url=s),placeholder:"https://...",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[v,o.value.url]])])),t("button",{onClick:g,class:"px-4 py-2 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90"},"Save")])):_("",!0),c.value?(a(),n("div",G,"Loading...")):d.value.length===0?(a(),n("div",J,[m(p(M),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),e[12]||(e[12]=t("p",null,"No MCP servers configured.",-1))])):(a(),n("div",K,[(a(!0),n(N,null,P(d.value,s=>(a(),n("div",{key:s.id,class:"flex items-center justify-between border border-border rounded-lg px-4 py-3"},[t("div",null,[t("span",R,b(s.name),1),t("span",Y,b(s.type),1)]),t("div",q,[t("button",{onClick:w=>x(s),class:y(["relative w-10 h-5 rounded-full transition-colors",s.enabled?"bg-primary":"bg-muted"])},[t("span",{class:y(["absolute top-0.5 w-4 h-4 rounded-full bg-white transition-transform",s.enabled?"translate-x-5":"translate-x-0.5"])},null,2)],10,H),t("button",{onClick:w=>f(s.id),class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive"},[m(p(j),{class:"w-4 h-4"})],8,I)])]))),128))]))]))}});export{Z as default};
@@ -1 +0,0 @@
1
- import{t as w,x as E,z as d,o as s,l as t,J as g,F as x,E as U,Y as a,V as n,T,R as p,n as b,D as r,h as V,j as M,v as S}from"./index-CiZnRvN4.js";const z={class:"p-6"},A={class:"flex items-center justify-between mb-6"},B=["disabled"],N={key:0,class:"text-muted-foreground"},C={class:"flex gap-1 border-b border-border mb-6"},D=["onClick"],I={key:0,class:"space-y-4 max-w-lg"},K={class:"flex items-center gap-3"},j={key:1,class:"space-y-4 max-w-lg"},L={class:"flex items-center gap-3"},R={key:2,class:"space-y-4 max-w-lg"},F={key:3,class:"space-y-4 max-w-lg"},G={class:"flex items-center gap-3"},O={class:"flex items-center gap-3"},W=w({__name:"SettingsView",setup(P){const v=r(!0),i=r(!1),m=r(!1),u=r("general"),y=[{id:"general",label:"General"},{id:"telegram",label:"Telegram"},{id:"auth",label:"Auth"},{id:"advanced",label:"Advanced"}],o=r({defaultModel:"",port:3170,telegramEnabled:!1,telegramBotToken:"",authorizedUserId:null,supabaseUrl:"",supabaseAnonKey:"",authorizedEmail:"",backgroundNotifyMode:"meaningful",backgroundNotifyTelegram:!0,selfEditEnabled:!1,watchdogEnabled:!0});async function k(){v.value=!0;try{const f=await V("/settings");o.value=f}finally{v.value=!1}}async function c(){i.value=!0,m.value=!1;try{await M("/settings",o.value),m.value=!0,setTimeout(()=>m.value=!1,2e3)}finally{i.value=!1}}return E(k),(f,e)=>(d(),s("div",z,[t("div",A,[e[12]||(e[12]=t("h1",{class:"text-2xl font-bold"},"Settings",-1)),t("button",{onClick:c,disabled:i.value,class:"px-4 py-2 rounded-md bg-primary text-primary-foreground text-sm hover:bg-primary/90 disabled:opacity-50"},g(i.value?"Saving...":m.value?"Saved ✓":"Save"),9,B)]),v.value?(d(),s("div",N,"Loading...")):(d(),s(x,{key:1},[t("div",C,[(d(),s(x,null,U(y,l=>t("button",{key:l.id,onClick:q=>u.value=l.id,class:S(["px-4 py-2 text-sm font-medium border-b-2 transition-colors",u.value===l.id?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"])},g(l.label),11,D)),64))]),u.value==="general"?(d(),s("div",I,[t("div",null,[e[13]||(e[13]=t("label",{class:"text-sm font-medium"},"Default Model",-1)),a(t("input",{"onUpdate:modelValue":e[0]||(e[0]=l=>o.value.defaultModel=l),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.defaultModel]])]),t("div",null,[e[14]||(e[14]=t("label",{class:"text-sm font-medium"},"Port",-1)),a(t("input",{"onUpdate:modelValue":e[1]||(e[1]=l=>o.value.port=l),type:"number",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.port,void 0,{number:!0}]]),e[15]||(e[15]=t("p",{class:"text-xs text-muted-foreground mt-1"},"Requires restart to take effect",-1))]),t("div",null,[e[17]||(e[17]=t("label",{class:"text-sm font-medium"},"Background Notify Mode",-1)),a(t("select",{"onUpdate:modelValue":e[2]||(e[2]=l=>o.value.backgroundNotifyMode=l),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[16]||(e[16]=[t("option",{value:"all"},"All",-1),t("option",{value:"meaningful"},"Meaningful",-1),t("option",{value:"off"},"Off",-1)])],512),[[T,o.value.backgroundNotifyMode]])]),t("div",K,[a(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>o.value.backgroundNotifyTelegram=l),type:"checkbox",id:"notifyTelegram",class:"rounded"},null,512),[[p,o.value.backgroundNotifyTelegram]]),e[18]||(e[18]=t("label",{for:"notifyTelegram",class:"text-sm font-medium"},"Send notifications via Telegram",-1))])])):b("",!0),u.value==="telegram"?(d(),s("div",j,[t("div",null,[e[19]||(e[19]=t("label",{class:"text-sm font-medium"},"Bot Token",-1)),a(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>o.value.telegramBotToken=l),type:"password",placeholder:"Enter new token to update",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.telegramBotToken]])]),t("div",null,[e[20]||(e[20]=t("label",{class:"text-sm font-medium"},"Authorized User ID",-1)),a(t("input",{"onUpdate:modelValue":e[5]||(e[5]=l=>o.value.authorizedUserId=l),type:"number",placeholder:"123456789",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.authorizedUserId,void 0,{number:!0}]])]),t("div",L,[a(t("input",{"onUpdate:modelValue":e[6]||(e[6]=l=>o.value.telegramEnabled=l),type:"checkbox",id:"telegramEnabled",class:"rounded"},null,512),[[p,o.value.telegramEnabled]]),e[21]||(e[21]=t("label",{for:"telegramEnabled",class:"text-sm font-medium"},"Enable Telegram Bot",-1))])])):b("",!0),u.value==="auth"?(d(),s("div",R,[t("div",null,[e[22]||(e[22]=t("label",{class:"text-sm font-medium"},"Supabase URL",-1)),a(t("input",{"onUpdate:modelValue":e[7]||(e[7]=l=>o.value.supabaseUrl=l),placeholder:"https://your-project.supabase.co",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.supabaseUrl]])]),t("div",null,[e[23]||(e[23]=t("label",{class:"text-sm font-medium"},"Supabase Anon Key",-1)),a(t("input",{"onUpdate:modelValue":e[8]||(e[8]=l=>o.value.supabaseAnonKey=l),type:"password",placeholder:"Enter new key to update",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.supabaseAnonKey]])]),t("div",null,[e[24]||(e[24]=t("label",{class:"text-sm font-medium"},"Authorized Email",-1)),a(t("input",{"onUpdate:modelValue":e[9]||(e[9]=l=>o.value.authorizedEmail=l),type:"email",placeholder:"you@example.com",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.authorizedEmail]])])])):b("",!0),u.value==="advanced"?(d(),s("div",F,[t("div",G,[a(t("input",{"onUpdate:modelValue":e[10]||(e[10]=l=>o.value.selfEditEnabled=l),type:"checkbox",id:"selfEdit",class:"rounded"},null,512),[[p,o.value.selfEditEnabled]]),e[25]||(e[25]=t("div",null,[t("label",{for:"selfEdit",class:"text-sm font-medium"},"Self-Edit Mode"),t("p",{class:"text-xs text-muted-foreground"},"Allow IO to modify its own source code")],-1))]),t("div",O,[a(t("input",{"onUpdate:modelValue":e[11]||(e[11]=l=>o.value.watchdogEnabled=l),type:"checkbox",id:"watchdog",class:"rounded"},null,512),[[p,o.value.watchdogEnabled]]),e[26]||(e[26]=t("div",null,[t("label",{for:"watchdog",class:"text-sm font-medium"},"Watchdog"),t("p",{class:"text-xs text-muted-foreground"},"Monitor event loop and zombie instances")],-1))])])):b("",!0)],64))]))}});export{W as default};
@@ -1,11 +0,0 @@
1
- import{q as I,t as B,x as L,h as M,z as n,o,l as t,s as u,K as l,A as T,r as g,e as _,F as f,E as h,D as v,k as N,v as k,X as P,J as a,m as x,n as p,b,G as V}from"./index-CiZnRvN4.js";import{T as w}from"./triangle-alert-C1OjMvP5.js";import{G as $}from"./git-branch-C_Hu39uh.js";/**
2
- * @license lucide-vue-next v0.474.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const z=I("CircleCheckBigIcon",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/**
7
- * @license lucide-vue-next v0.474.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const C=I("LoaderCircleIcon",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]),F={class:"p-6"},G={class:"flex items-center gap-2 mb-6"},j={key:0,class:"flex items-center gap-2 text-muted-foreground"},H={key:1,class:"text-center py-12 text-muted-foreground"},D={key:2,class:"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-4"},E={class:"flex items-start justify-between"},R={class:"text-xs text-muted-foreground mt-0.5"},J={key:1},K={key:2},O={key:3},U={class:"grid grid-cols-3 gap-2 text-center"},X={class:"rounded-md bg-muted px-2 py-2"},Q={class:"text-lg font-bold"},W={class:"rounded-md bg-muted px-2 py-2"},Y={class:"text-lg font-bold"},Z={class:"rounded-md bg-muted px-2 py-2"},q={class:"text-lg font-bold flex items-center justify-center gap-1"},ee={class:"flex flex-wrap gap-1.5 text-xs"},te={key:0,class:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-blue-500/10 text-blue-500"},se={key:1,class:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-yellow-500/10 text-yellow-500"},ne={key:2,class:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-red-500/10 text-red-500"},oe={class:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-secondary text-secondary-foreground"},re={key:0},le={class:"space-y-1"},ae={class:"font-mono truncate"},de={key:1},ie={class:"space-y-1"},ce={class:"truncate text-muted-foreground"},me=B({__name:"SquadHealthView",setup(ue){const m=v([]),y=v(!0);L(async()=>{try{const r=await M("/squads/health");m.value=r.health}finally{y.value=!1}});function S(r){if(r===null)return"—";if(r<60)return`${Math.round(r)}m`;const s=Math.floor(r/60),c=Math.round(r%60);return c>0?`${s}h ${c}m`:`${s}h`}function i(r){return r.isStalled?"stalled":r.tasksInProgress>0?"active":"idle"}const A=N(()=>[...m.value].sort((r,s)=>{const c={stalled:0,active:1,idle:2};return c[i(r)]-c[i(s)]}));return(r,s)=>{const c=V("router-link");return n(),o("div",F,[t("div",G,[u(l(T),{class:"w-6 h-6"}),s[0]||(s[0]=t("h1",{class:"text-2xl font-bold"},"Squad Health",-1))]),y.value?(n(),o("div",j,[u(l(C),{class:"w-4 h-4 animate-spin"}),s[1]||(s[1]=g(" Loading... ",-1))])):m.value.length===0?(n(),o("div",H,[u(l(_),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),s[2]||(s[2]=t("p",null,"No squads yet.",-1)),s[3]||(s[3]=t("p",{class:"text-sm mt-1"},"Ask IO to create a squad for your project.",-1))])):(n(),o("div",D,[(n(!0),o(f,null,h(A.value,e=>(n(),o("div",{key:e.id,class:k(["rounded-lg border bg-card p-4 flex flex-col gap-3",{"border-red-500/50":e.isStalled,"border-green-500/30":i(e)==="active","border-border":i(e)==="idle"}])},[t("div",E,[t("div",null,[u(c,{to:`/squads/${e.id}`,class:"font-semibold hover:underline"},{default:P(()=>[g(a(e.name),1)]),_:2},1032,["to"]),t("p",R,a(e.universe),1)]),t("span",{class:k(["text-xs px-2 py-0.5 rounded-full font-medium flex items-center gap-1",{"bg-red-500/10 text-red-500":e.isStalled,"bg-green-500/10 text-green-500":i(e)==="active","bg-secondary text-secondary-foreground":i(e)==="idle"}])},[e.isStalled?(n(),x(l(w),{key:0,class:"w-3 h-3"})):p("",!0),e.isStalled?(n(),o("span",J,"Stalled")):i(e)==="active"?(n(),o("span",K,"Active")):(n(),o("span",O,"Idle"))],2)]),t("div",U,[t("div",X,[t("div",Q,a(e.tasksCompleted),1),s[4]||(s[4]=t("div",{class:"text-xs text-muted-foreground"},"Completed",-1))]),t("div",W,[t("div",Y,a(e.tasksCompletedRecent),1),s[5]||(s[5]=t("div",{class:"text-xs text-muted-foreground"},"Last 7d",-1))]),t("div",Z,[t("div",q,[u(l(b),{class:"w-3 h-3 text-muted-foreground"}),g(" "+a(S(e.avgCycleTimeMinutes)),1)]),s[6]||(s[6]=t("div",{class:"text-xs text-muted-foreground"},"Avg cycle",-1))])]),t("div",ee,[e.tasksInProgress>0?(n(),o("span",te,a(e.tasksInProgress)+" in progress ",1)):p("",!0),e.tasksPending>0?(n(),o("span",se,a(e.tasksPending)+" pending ",1)):p("",!0),e.tasksFailed>0?(n(),o("span",ne,a(e.tasksFailed)+" failed ",1)):p("",!0),t("span",oe,[u(l(_),{class:"w-3 h-3"}),g(" "+a(e.agentCount)+" agents ",1)])]),e.activeInstanceCount>0?(n(),o("div",re,[s[7]||(s[7]=t("p",{class:"text-xs font-medium text-muted-foreground mb-1"},"Active instances",-1)),t("div",le,[(n(!0),o(f,null,h(e.activeInstances,d=>(n(),o("div",{key:d.id,class:"flex items-center gap-1.5 text-xs text-muted-foreground"},[u(l($),{class:"w-3 h-3 shrink-0"}),t("span",ae,a(d.branch),1)]))),128))])])):p("",!0),e.recentTasks.length>0?(n(),o("div",de,[s[8]||(s[8]=t("p",{class:"text-xs font-medium text-muted-foreground mb-1"},"Recent activity",-1)),t("div",ie,[(n(!0),o(f,null,h(e.recentTasks,d=>(n(),o("div",{key:d.id,class:"flex items-center gap-2 text-xs"},[d.status==="done"?(n(),x(l(z),{key:0,class:"w-3 h-3 text-green-500 shrink-0"})):d.status==="in_progress"?(n(),x(l(C),{key:1,class:"w-3 h-3 text-blue-500 shrink-0 animate-spin"})):d.status==="failed"?(n(),x(l(w),{key:2,class:"w-3 h-3 text-red-500 shrink-0"})):(n(),x(l(b),{key:3,class:"w-3 h-3 text-yellow-500 shrink-0"})),t("span",ce,a(d.description),1)]))),128))])])):p("",!0)],2))),128))]))])}}});export{me as default};
@@ -1,6 +0,0 @@
1
- import{q as y,t as v,x as h,h as k,z as o,o as r,l as t,s as i,K as l,e as b,F as w,E as L,D as d,m as C,X as S,w as _,G as q,J as n,r as f,n as B}from"./index-CiZnRvN4.js";import{g as N}from"./squad-colors-B8B_Y-lz.js";import{G as V}from"./git-branch-C_Hu39uh.js";/**
2
- * @license lucide-vue-next v0.474.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const z=y("LayersIcon",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]),A={class:"p-6"},G={key:0,class:"text-muted-foreground"},M={key:1,class:"text-center py-12 text-muted-foreground"},j={key:2,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},F={class:"flex items-start justify-between"},I={class:"min-w-0"},D={class:"text-sm text-muted-foreground mt-0.5"},E={class:"text-xs bg-secondary text-secondary-foreground px-2 py-0.5 rounded-full"},J={class:"mt-3 flex items-center gap-4 text-xs text-muted-foreground"},K={key:0,class:"flex items-center gap-1"},O={class:"flex items-center gap-1"},H=v({__name:"SquadsView",setup(T){const c=d([]),u=d([]),m=d({}),p=d(!0);h(async()=>{try{const a=await k("/squads");c.value=a.squads,u.value=a.agents,m.value=a.instanceCounts??{}}finally{p.value=!1}});function g(a){return u.value.filter(s=>s.squad_id===a)}return(a,s)=>{const x=q("router-link");return o(),r("div",A,[s[2]||(s[2]=t("h1",{class:"text-2xl font-bold mb-6"},"Squads",-1)),p.value?(o(),r("div",G,"Loading...")):c.value.length===0?(o(),r("div",M,[i(l(b),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),s[0]||(s[0]=t("p",null,"No squads yet.",-1)),s[1]||(s[1]=t("p",{class:"text-sm mt-1"},"Ask IO to create a squad for your project.",-1))])):(o(),r("div",j,[(o(!0),r(w,null,L(c.value,e=>(o(),C(x,{key:e.id,to:`/squads/${e.id}`,class:"block rounded-lg border border-border bg-card p-4 hover:border-primary/50 transition-colors border-l-4",style:_({borderLeftColor:e.color})},{default:S(()=>[t("div",F,[t("div",I,[t("span",{class:"inline-flex items-center text-xs px-2 py-0.5 rounded-full font-medium",style:_(l(N)(e.color))},n(e.name),5),t("p",D,n(e.universe),1)]),t("span",E,n(g(e.id).length)+" agents ",1)]),t("div",J,[e.repo_url?(o(),r("span",K,[i(l(V),{class:"w-3 h-3"}),f(" "+n(e.repo_url),1)])):B("",!0),t("span",O,[i(l(z),{class:"w-3 h-3"}),f(" "+n(m.value[e.id]??0)+"/3 instances ",1)])])]),_:2},1032,["to","style"]))),128))]))])}}});export{H as default};