heyio 0.42.0 → 1.0.0

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 (100) hide show
  1. package/README.md +40 -52
  2. package/dist/api/auth.js +35 -38
  3. package/dist/api/server.js +157 -1139
  4. package/dist/config.js +49 -32
  5. package/dist/copilot/agents.js +72 -1055
  6. package/dist/copilot/client.js +6 -17
  7. package/dist/copilot/io-scheduler.js +55 -139
  8. package/dist/copilot/model-router.js +100 -72
  9. package/dist/copilot/orchestrator.js +91 -515
  10. package/dist/copilot/scheduler.js +67 -189
  11. package/dist/copilot/skills.js +41 -366
  12. package/dist/copilot/system-message.js +40 -200
  13. package/dist/copilot/tools.js +191 -2042
  14. package/dist/daemon.js +54 -201
  15. package/dist/index.js +15 -133
  16. package/dist/mcp/config.js +23 -31
  17. package/dist/mcp/index.js +2 -3
  18. package/dist/mcp/registry.js +33 -88
  19. package/dist/notify.js +18 -100
  20. package/dist/paths.js +13 -24
  21. package/dist/setup.js +35 -0
  22. package/dist/store/db.js +111 -297
  23. package/dist/store/feed.js +29 -97
  24. package/dist/store/instances.js +56 -121
  25. package/dist/store/schedules.js +21 -73
  26. package/dist/store/squads.js +35 -186
  27. package/dist/store/tasks.js +25 -168
  28. package/dist/telegram/bot.js +20 -312
  29. package/dist/telegram/handlers.js +39 -3
  30. package/dist/watchdog.js +31 -45
  31. package/dist/wiki/fs.js +38 -155
  32. package/dist/wiki/search.js +31 -44
  33. package/package.json +5 -8
  34. package/web-dist/assets/ChatView-EFFiln1H.js +11 -0
  35. package/web-dist/assets/FeedView-bN4NMOL7.js +6 -0
  36. package/web-dist/assets/LoginView-CNtasq3n.js +1 -0
  37. package/web-dist/assets/McpView-C2CHiwsi.js +1 -0
  38. package/web-dist/assets/SchedulesView-CyilLban.js +1 -0
  39. package/web-dist/assets/SettingsView-1wLXKEF4.js +1 -0
  40. package/web-dist/assets/SkillsView-BLsD-0u0.js +1 -0
  41. package/web-dist/assets/SquadDetailView-CsCw2ZLp.js +21 -0
  42. package/web-dist/assets/SquadsView-DQ3vFlyO.js +6 -0
  43. package/web-dist/assets/WikiView-19M3oqnq.js +21 -0
  44. package/web-dist/assets/api-WGvTsXaE.js +1 -0
  45. package/web-dist/assets/index-D7M5O-_l.css +1 -0
  46. package/web-dist/assets/index-DZOS9syn.js +95 -0
  47. package/web-dist/assets/plus-BOvyX1BC.js +6 -0
  48. package/web-dist/assets/trash-2-DHoetkC4.js +6 -0
  49. package/web-dist/favicon.svg +4 -1
  50. package/web-dist/index.html +7 -10
  51. package/dist/api/logout.test.js +0 -129
  52. package/dist/api/mcp.test.js +0 -285
  53. package/dist/api/wiki.test.js +0 -283
  54. package/dist/auth/session-logic.js +0 -79
  55. package/dist/auth/session-logic.test.js +0 -201
  56. package/dist/copilot/auto-complete-instance.test.js +0 -104
  57. package/dist/copilot/cron.js +0 -136
  58. package/dist/copilot/event-summary.js +0 -286
  59. package/dist/copilot/instance-deactivate.test.js +0 -119
  60. package/dist/copilot/model-router.test.js +0 -71
  61. package/dist/copilot/review-backfill.js +0 -57
  62. package/dist/copilot/session-timeout.js +0 -112
  63. package/dist/copilot/session-timeout.test.js +0 -372
  64. package/dist/copilot/skills.test.js +0 -55
  65. package/dist/copilot/universes.js +0 -469
  66. package/dist/instance-watchdog.js +0 -104
  67. package/dist/instance-watchdog.test.js +0 -183
  68. package/dist/mcp/client.js +0 -109
  69. package/dist/mcp/client.test.js +0 -99
  70. package/dist/mcp/config.test.js +0 -49
  71. package/dist/mcp/registry.test.js +0 -79
  72. package/dist/notify.test.js +0 -232
  73. package/dist/store/feed.test.js +0 -279
  74. package/dist/store/instances.test.js +0 -310
  75. package/dist/store/io-schedules.js +0 -63
  76. package/dist/store/notifications.js +0 -79
  77. package/dist/store/notifications.test.js +0 -197
  78. package/dist/store/schedule-runs.js +0 -46
  79. package/dist/store/squads.test.js +0 -405
  80. package/dist/store/tasks.test.js +0 -150
  81. package/dist/store/worktrees.js +0 -83
  82. package/dist/tui/index.js +0 -286
  83. package/dist/update.js +0 -81
  84. package/dist/watchdog.test.js +0 -83
  85. package/dist/wiki/wiki-squad.test.js +0 -54
  86. package/web-dist/assets/AgentActivityView-CedxxE6K.js +0 -1
  87. package/web-dist/assets/ChatView-DMkYQo_V.js +0 -4
  88. package/web-dist/assets/FeedView-BH4q-31V.js +0 -1
  89. package/web-dist/assets/InboxView-BVwVP4EW.js +0 -1
  90. package/web-dist/assets/LoginView-DRPDhnwu.js +0 -1
  91. package/web-dist/assets/McpView-D8yWz-lq.js +0 -1
  92. package/web-dist/assets/SchedulesView-BzzyncGF.js +0 -1
  93. package/web-dist/assets/SettingsTabs.vue_vue_type_script_setup_true_lang-oW3ySu7Y.js +0 -1
  94. package/web-dist/assets/SkillsView-oxpYuhx7.js +0 -1
  95. package/web-dist/assets/SquadsView-CaKUIKlq.js +0 -1
  96. package/web-dist/assets/StatusIndicator.vue_vue_type_script_setup_true_lang-8U15Qp_Q.js +0 -1
  97. package/web-dist/assets/WikiView-C5jXUlfW.js +0 -1
  98. package/web-dist/assets/index-BrWzNw-N.css +0 -10
  99. package/web-dist/assets/index-f67odrrt.js +0 -81
  100. package/web-dist/icons.svg +0 -24
@@ -1 +0,0 @@
1
- import{d as V,o as $,D as j,A as w,E as m,r as x,j as n,a as t,n as v,p as U,c as d,w as f,v as h,P as E,t as a,g as b,f as P,T as A,m as k,z as B,s as _,F as C,_ as S}from"./index-f67odrrt.js";import{_ as D}from"./SettingsTabs.vue_vue_type_script_setup_true_lang-oW3ySu7Y.js";const O={class:"max-w-2xl space-y-4"},z={class:"flex items-center justify-between"},F={class:"grid grid-cols-2 gap-3"},I={class:"mb-1 block font-mono text-[10px] uppercase tracking-wider text-muted-foreground/60"},L=["placeholder"],R={key:0,class:"rounded border border-destructive/25 bg-destructive/10 px-3 py-2 text-sm text-destructive"},H={class:"flex justify-end gap-2"},J={class:"space-y-2"},q={class:"flex items-center gap-3 px-4 py-3"},G={class:"min-w-0 flex-1"},K={class:"mb-0.5 flex items-center gap-2"},Q={class:"text-sm font-medium"},W={class:"rounded bg-white/5 px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground"},X={class:"block truncate font-mono text-[11px] text-muted-foreground/50"},Y=["onClick"],Z=["onClick"],ee={key:0,class:"flex flex-wrap gap-1.5 border-t border-border/40 px-4 py-2"},se=V({__name:"McpView",setup(te){const g=x([]),l=x(!1),s=x({name:"",transport:"stdio",command:""}),i=x("");function u(r){return r.enabled===!1?"disabled":"connected"}function y(r){var e,o;return(e=r.tools)!=null&&e.length?r.tools:(o=r.args)!=null&&o.length?r.args:[]}async function c(){const r=await m("/api/mcp/servers");r.ok&&(g.value=(await r.json()).servers)}async function T(){if(i.value="",!s.value.name.trim()||!s.value.command.trim())return;const r={name:s.value.name.trim()};s.value.transport==="stdio"?r.command=s.value.command.trim():r.url=s.value.command.trim();const e=await m("/api/mcp/servers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!e.ok){i.value=await e.text()||"Unable to add server.";return}s.value={name:"",transport:"stdio",command:""},l.value=!1,await c()}async function M(r){await m(`/api/mcp/servers/${encodeURIComponent(r)}`,{method:"DELETE"}),await c()}async function N(r,e){await m(`/api/mcp/servers/${encodeURIComponent(r)}/toggle`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:!e})}),await c()}return $(c),(r,e)=>(n(),j(D,{active:"mcp"},{default:w(()=>[t("div",O,[t("div",z,[e[6]||(e[6]=t("p",{class:"text-xs text-muted-foreground"},"MCP servers extend IO agents with additional tools and data sources.",-1)),t("button",{class:"flex items-center gap-1.5 rounded border border-border px-3 py-1.5 font-mono text-xs text-muted-foreground transition-all hover:border-primary/40 hover:bg-primary/5 hover:text-primary",onClick:e[0]||(e[0]=o=>l.value=!l.value)},[v(S,{name:"plus",class:"h-3 w-3"}),e[5]||(e[5]=U(" Add server ",-1))])]),v(A,{"enter-active-class":"duration-150 ease-out","enter-from-class":"opacity-0 -translate-y-1","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"duration-100 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-1"},{default:w(()=>[l.value?(n(),d("form",{key:0,class:"space-y-3 rounded-lg border border-primary/30 bg-primary/[0.04] p-4",onSubmit:P(T,["prevent"])},[e[11]||(e[11]=t("div",{class:"mb-1 font-mono text-xs text-primary/80"},"New MCP Server",-1)),t("div",F,[t("div",null,[e[7]||(e[7]=t("label",{class:"mb-1 block font-mono text-[10px] uppercase tracking-wider text-muted-foreground/60"},"Name",-1)),f(t("input",{"onUpdate:modelValue":e[1]||(e[1]=o=>s.value.name=o),class:"w-full rounded border border-border bg-black/30 px-3 py-1.5 text-xs font-mono placeholder:text-muted-foreground/30",placeholder:"My Server"},null,512),[[h,s.value.name]])]),t("div",null,[e[9]||(e[9]=t("label",{class:"mb-1 block font-mono text-[10px] uppercase tracking-wider text-muted-foreground/60"},"Transport",-1)),f(t("select",{"onUpdate:modelValue":e[2]||(e[2]=o=>s.value.transport=o),class:"w-full rounded border border-border bg-black/30 px-3 py-1.5 text-xs font-mono"},[...e[8]||(e[8]=[t("option",{value:"stdio"},"stdio",-1),t("option",{value:"http"},"HTTP/SSE",-1)])],512),[[E,s.value.transport]])])]),t("div",null,[t("label",I,a(s.value.transport==="stdio"?"Command":"URL"),1),f(t("input",{"onUpdate:modelValue":e[3]||(e[3]=o=>s.value.command=o),class:"w-full rounded border border-border bg-black/30 px-3 py-1.5 text-xs font-mono placeholder:text-muted-foreground/30",placeholder:s.value.transport==="stdio"?"npx @modelcontextprotocol/server-...":"https://..."},null,8,L),[[h,s.value.command]])]),i.value?(n(),d("div",R,a(i.value),1)):b("",!0),t("div",H,[t("button",{type:"button",class:"px-3 py-1.5 font-mono text-xs text-muted-foreground transition-colors hover:text-foreground",onClick:e[4]||(e[4]=o=>l.value=!1)},"Cancel"),e[10]||(e[10]=t("button",{type:"submit",class:"rounded bg-primary/15 px-3 py-1.5 font-mono text-xs text-primary transition-colors hover:bg-primary/25"},"Add",-1))])],32)):b("",!0)]),_:1}),t("div",J,[(n(!0),d(C,null,k(g.value,o=>(n(),d("article",{key:o.name,class:"overflow-hidden rounded-lg border border-border bg-card"},[t("div",q,[t("div",{class:_(["h-2 w-2 shrink-0 rounded-full",u(o)==="connected"?"bg-status-success":"bg-destructive"]),style:B({boxShadow:u(o)==="connected"?"var(--glow-success)":"var(--glow-error)"})},null,6),t("div",G,[t("div",K,[t("span",Q,a(o.name),1),t("span",{class:_(["rounded px-1.5 py-0.5 font-mono text-[10px]",u(o)==="connected"?"bg-status-success/10 text-status-success":"bg-destructive/10 text-destructive"])},a(u(o)),3),t("span",W,a(o.url?"http":"stdio"),1)]),t("code",X,a(o.command??o.url??"—"),1)]),t("button",{class:"rounded border border-border px-2.5 py-1 font-mono text-[10px] text-muted-foreground transition-colors hover:border-primary/40 hover:text-primary",onClick:p=>N(o.name,!!o.enabled)},a(o.enabled===!1?"enable":"disable"),9,Y),t("button",{class:"flex h-7 w-7 shrink-0 items-center justify-center rounded text-muted-foreground/30 transition-colors hover:bg-destructive/10 hover:text-destructive",onClick:p=>M(o.name)},[v(S,{name:"trash",class:"h-3.5 w-3.5"})],8,Z)]),y(o).length?(n(),d("div",ee,[(n(!0),d(C,null,k(y(o),p=>(n(),d("code",{key:p,class:"rounded border border-white/[0.05] bg-white/[0.04] px-1.5 py-0.5 font-mono text-[10px] text-foreground/50"},a(p),1))),128))])):b("",!0)]))),128))])])]),_:1}))}});export{se as default};
@@ -1 +0,0 @@
1
- import{d as j,o as E,c as d,a as e,s as p,F as S,m as $,g as m,t as o,r as b,q as C,E as _,j as n,b as g,I as f}from"./index-f67odrrt.js";const I={class:"grid h-full min-h-0 gap-5 p-5 xl:grid-cols-[minmax(0,1fr)_360px]"},N={class:"min-h-0 overflow-hidden rounded-lg border border-border bg-card"},B={class:"border-b border-border px-5 py-4"},F={class:"flex flex-wrap items-center justify-between gap-3"},R={class:"mt-3 flex gap-2"},T={class:"min-h-0 overflow-y-auto px-4 py-4"},V={class:"space-y-3"},D=["onClick"],L={class:"font-mono text-lg text-primary"},M={class:"text-sm font-medium"},O={class:"mt-2 text-sm leading-6 text-foreground/65"},P={class:"font-mono text-xs text-muted-foreground/65"},z={class:"mt-2"},A={key:0,class:"mt-2 text-accent-foreground"},G={key:0,class:"rounded-lg border border-dashed border-border px-4 py-16 text-center font-mono text-xs uppercase tracking-[0.22em] text-muted-foreground/45"},H={class:"flex min-h-0 flex-col overflow-hidden rounded-lg border border-border bg-card"},J={class:"border-b border-border px-5 py-4"},K={class:"mt-2 text-lg font-semibold"},Q={key:0,class:"border-b border-border px-5 py-4"},U={class:"grid grid-cols-2 gap-2 font-mono text-[11px] uppercase tracking-[0.16em]"},W={class:"min-h-0 flex-1 overflow-y-auto p-4"},X={class:"space-y-3"},Y={class:"flex items-center justify-between gap-3 font-mono text-xs uppercase tracking-[0.16em]"},Z={class:"text-muted-foreground/55"},ee={class:"mt-3 text-sm text-foreground/75"},te={class:"mt-1 text-sm text-foreground/55"},re={key:0,class:"mt-3 rounded border border-destructive/25 bg-destructive/10 px-3 py-3 text-sm text-destructive"},oe={key:0,class:"rounded-lg border border-dashed border-border px-4 py-12 text-center font-mono text-xs uppercase tracking-[0.22em] text-muted-foreground/45"},ne=j({__name:"SchedulesView",setup(se){const i=b("io"),y=b({io:[],squads:[]}),l=b(""),u=b([]),c=C(()=>y.value[i.value]),a=C(()=>c.value.find(s=>String(s.id)===l.value)??null);async function v(){const s=await _("/api/schedules");s.ok&&(y.value=await s.json(),!l.value&&c.value[0]&&(l.value=String(c.value[0].id),await x()))}async function x(){if(!a.value){u.value=[];return}const s=await _(`/api/schedules/${i.value}/${a.value.id}/runs`);s.ok&&(u.value=(await s.json()).runs)}async function h(s){a.value&&(await _(`/api/schedules/${i.value}/${a.value.id}/${s}`,{method:"POST"}),await Promise.all([v(),x()]))}async function q(){a.value&&(await _(`/api/schedules/${i.value}/${a.value.id}`,{method:"DELETE"}),l.value="",u.value=[],await v())}async function k(s){var r;i.value=s,l.value=String(((r=y.value[s][0])==null?void 0:r.id)??""),await x()}return E(v),(s,r)=>{var w;return n(),d("div",I,[e("section",N,[e("div",B,[e("div",F,[e("div",null,[r[4]||(r[4]=e("div",{class:"font-mono text-[10px] uppercase tracking-[0.28em] text-primary"},"Schedule Matrix",-1)),e("div",R,[e("button",{class:p(["rounded-full border px-3 py-1.5 font-mono text-[11px] uppercase tracking-[0.16em]",i.value==="io"?"border-primary/40 bg-primary/10 text-primary":"border-border text-muted-foreground"]),onClick:r[0]||(r[0]=t=>k("io"))},"IO",2),e("button",{class:p(["rounded-full border px-3 py-1.5 font-mono text-[11px] uppercase tracking-[0.16em]",i.value==="squads"?"border-accent-foreground/40 bg-accent-foreground/10 text-accent-foreground":"border-border text-muted-foreground"]),onClick:r[1]||(r[1]=t=>k("squads"))},"Squads",2)])]),e("button",{class:"rounded border border-border px-3 py-1.5 font-mono text-xs text-muted-foreground transition-colors hover:border-primary/40 hover:text-primary",onClick:v},"refresh")])]),e("div",T,[e("div",V,[(n(!0),d(S,null,$(c.value,t=>(n(),d("button",{key:t.id,class:p(["grid w-full gap-3 rounded-lg border px-4 py-4 text-left transition-colors lg:grid-cols-[160px_minmax(0,1fr)_170px]",l.value===String(t.id)?"border-primary/40 bg-primary/8":"border-border bg-sidebar/40 hover:bg-white/[0.03]"]),onClick:ae=>{l.value=String(t.id),x()}},[e("div",null,[e("div",L,o(t.cron_expr),1),e("div",{class:p(["mt-1 font-mono text-[10px] uppercase tracking-[0.18em]",t.enabled?"text-status-success":"text-destructive"])},o(t.enabled?"enabled":"paused"),3)]),e("div",null,[e("div",M,o(t.name),1),e("div",O,o(t.prompt),1)]),e("div",P,[e("div",null,"last "+o(t.last_run_at?g(f)(t.last_run_at):"—"),1),e("div",z,"next "+o(t.next_run_at?g(f)(t.next_run_at):"—"),1),t.squad_slug?(n(),d("div",A,o(t.squad_slug),1)):m("",!0)])],10,D))),128)),c.value.length?m("",!0):(n(),d("div",G,"No schedules in this scope"))])])]),e("section",H,[e("div",J,[r[5]||(r[5]=e("div",{class:"font-mono text-[10px] uppercase tracking-[0.28em] text-accent-foreground"},"Run Inspector",-1)),e("div",K,o(((w=a.value)==null?void 0:w.name)??"Select a schedule"),1)]),a.value?(n(),d("div",Q,[e("div",U,[e("button",{class:"rounded border border-border bg-sidebar px-3 py-2 transition-colors hover:border-primary/40 hover:text-primary",onClick:r[2]||(r[2]=t=>h(a.value.enabled?"pause":"resume"))},o(a.value.enabled?"pause":"resume"),1),e("button",{class:"rounded border border-primary/40 bg-primary/10 px-3 py-2 text-primary",onClick:r[3]||(r[3]=t=>h("run-now"))},"run now"),e("button",{class:"col-span-2 rounded border border-destructive/40 px-3 py-2 text-destructive transition-colors hover:bg-destructive/10",onClick:q},"delete")])])):m("",!0),e("div",W,[e("div",X,[(n(!0),d(S,null,$(u.value,t=>(n(),d("article",{key:t.id,class:"rounded-lg border border-white/[0.06] bg-sidebar/60 px-4 py-4"},[e("div",Y,[e("span",{class:p(t.status==="success"?"text-status-success":t.status==="error"?"text-destructive":"text-primary")},o(t.status),3),e("span",Z,o(t.id),1)]),e("div",ee,"started "+o(g(f)(t.started_at)),1),e("div",te,"completed "+o(t.completed_at?g(f)(t.completed_at):"—"),1),t.error_text?(n(),d("div",re,o(t.error_text),1)):m("",!0)]))),128)),a.value&&!u.value.length?(n(),d("div",oe,"No run history yet")):m("",!0)])])])])}}});export{ne as default};
@@ -1 +0,0 @@
1
- import{d as m,c as p,a as t,n as s,b as r,R as a,s as n,A as d,S as x,j as f,p as l}from"./index-f67odrrt.js";const b={class:"flex h-full flex-col overflow-hidden"},c={class:"shrink-0 px-4 pb-0 pt-5 md:px-6"},u={class:"flex border-b border-border"},v={class:"flex-1 overflow-y-auto px-4 py-5 md:px-6"},_=m({__name:"SettingsTabs",props:{active:{}},setup(o){return(i,e)=>(f(),p("div",b,[t("div",c,[e[2]||(e[2]=t("h2",{class:"mb-4 text-base font-semibold"},"Settings",-1)),t("div",u,[s(r(a),{to:"/skills",class:n(["-mb-px border-b-2 px-4 py-2 font-mono text-xs font-medium transition-colors",o.active==="skills"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"])},{default:d(()=>[...e[0]||(e[0]=[l(" Skills ",-1)])]),_:1},8,["class"]),s(r(a),{to:"/mcp",class:n(["-mb-px border-b-2 px-4 py-2 font-mono text-xs font-medium transition-colors",o.active==="mcp"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"])},{default:d(()=>[...e[1]||(e[1]=[l(" MCP Servers ",-1)])]),_:1},8,["class"])])]),t("div",v,[x(i.$slots,"default")])]))}});export{_};
@@ -1 +0,0 @@
1
- import{d as I,o as P,D as q,n as m,T as D,A as _,M as G,r as i,j as r,c as d,g as $,a as e,_ as J,t as x,w as z,v as V,p as M,F as B,E as T,m as A,z as L,s as F,q as X,N as Y}from"./index-f67odrrt.js";import{_ as Z}from"./SettingsTabs.vue_vue_type_script_setup_true_lang-oW3ySu7Y.js";const ee={key:0,class:"fixed left-1/2 top-1/2 z-50 w-full max-w-lg -translate-x-1/2 -translate-y-1/2 overflow-y-auto rounded-lg border border-border bg-card p-6 max-h-[90vh]"},te={class:"mb-4 flex items-center justify-between"},oe={key:0,class:"mb-4 rounded border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive"},se={class:"mb-4"},le={class:"mb-4"},ne={class:"mb-4"},ae={class:"flex gap-2 justify-end"},re=["disabled"],ie=["disabled"],de={key:0},ue={key:1},ce=I({__name:"SkillEditModal",props:{open:{type:Boolean},skillName:{},skillSlug:{},skillDescription:{},skillContent:{}},emits:["close","save"],setup(g,{emit:y}){const l=g,a=y,u=i(""),o=i(""),b=i(""),p=i(!1),k=i("");async function N(){if(!u.value.trim()){k.value="Skill name cannot be empty";return}if(!o.value.trim()){k.value="Description cannot be empty";return}p.value=!0,k.value="";try{a("save",{name:u.value,description:o.value,content:b.value})}finally{p.value=!1}}return P(()=>{u.value=l.skillName,o.value=l.skillDescription,b.value=l.skillContent}),(w,n)=>(r(),q(G,{to:"body"},[m(D,{"enter-active-class":"duration-200 ease-out","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"duration-150 ease-in","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:_(()=>[g.open?(r(),d("div",{key:0,class:"fixed inset-0 z-40 bg-black/40",onClick:n[0]||(n[0]=f=>a("close"))})):$("",!0)]),_:1}),m(D,{"enter-active-class":"duration-200 ease-out","enter-from-class":"translate-y-4 opacity-0","enter-to-class":"translate-y-0 opacity-100","leave-active-class":"duration-150 ease-in","leave-from-class":"translate-y-0 opacity-100","leave-to-class":"translate-y-4 opacity-0"},{default:_(()=>[g.open?(r(),d("div",ee,[e("div",te,[n[6]||(n[6]=e("h3",{class:"text-lg font-semibold"},"Edit Skill",-1)),e("button",{class:"text-muted-foreground/40 transition-colors hover:text-foreground",onClick:n[1]||(n[1]=f=>a("close"))},[m(J,{name:"x",class:"h-5 w-5"})])]),k.value?(r(),d("div",oe,x(k.value),1)):$("",!0),e("div",se,[n[7]||(n[7]=e("label",{class:"block font-mono text-xs uppercase tracking-wider text-muted-foreground/60"},"Skill Name",-1)),z(e("input",{"onUpdate:modelValue":n[2]||(n[2]=f=>u.value=f),type:"text",class:"mt-1 w-full rounded border border-border bg-sidebar px-3 py-2 text-sm text-foreground font-mono",placeholder:"e.g., grep"},null,512),[[V,u.value]])]),e("div",le,[n[8]||(n[8]=e("label",{class:"block font-mono text-xs uppercase tracking-wider text-muted-foreground/60"},"Description",-1)),z(e("input",{"onUpdate:modelValue":n[3]||(n[3]=f=>o.value=f),type:"text",class:"mt-1 w-full rounded border border-border bg-sidebar px-3 py-2 text-sm text-foreground",placeholder:"Brief description of the skill"},null,512),[[V,o.value]])]),e("div",ne,[n[9]||(n[9]=e("label",{class:"block font-mono text-xs uppercase tracking-wider text-muted-foreground/60 mb-1"},"Content",-1)),z(e("textarea",{"onUpdate:modelValue":n[4]||(n[4]=f=>b.value=f),class:"w-full h-40 rounded border border-border bg-sidebar px-3 py-2 text-sm text-foreground font-mono",placeholder:"Skill implementation content"},null,512),[[V,b.value]])]),e("div",ae,[e("button",{class:"rounded border border-border px-4 py-2 text-sm text-muted-foreground transition-colors hover:bg-white/5 hover:text-foreground",onClick:n[5]||(n[5]=f=>a("close")),disabled:p.value}," Cancel ",8,re),e("button",{class:"rounded bg-primary/15 px-4 py-2 text-sm text-primary transition-colors hover:bg-primary/25 disabled:opacity-50",onClick:N,disabled:p.value},[p.value?(r(),d("span",de,"Saving...")):(r(),d("span",ue,"Save Changes"))],8,ie)])])):$("",!0)]),_:1})]))}}),ve={key:0,class:"fixed left-1/2 top-1/2 z-50 w-full max-w-sm -translate-x-1/2 -translate-y-1/2 rounded-lg border border-border bg-card p-6"},pe={class:"mb-4 text-sm text-muted-foreground"},fe={class:"text-foreground/80 font-mono"},me={class:"flex gap-2 justify-end"},be=I({__name:"SkillDeleteConfirmation",props:{open:{type:Boolean},skillName:{}},emits:["close","confirm"],setup(g){return(y,l)=>(r(),q(G,{to:"body"},[m(D,{"enter-active-class":"duration-200 ease-out","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"duration-150 ease-in","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:_(()=>[g.open?(r(),d("div",{key:0,class:"fixed inset-0 z-40 bg-black/40",onClick:l[0]||(l[0]=a=>y.$emit("close"))})):$("",!0)]),_:1}),m(D,{"enter-active-class":"duration-200 ease-out","enter-from-class":"translate-y-4 opacity-0","enter-to-class":"translate-y-0 opacity-100","leave-active-class":"duration-150 ease-in","leave-from-class":"translate-y-0 opacity-100","leave-to-class":"translate-y-4 opacity-0"},{default:_(()=>[g.open?(r(),d("div",ve,[l[5]||(l[5]=e("h3",{class:"mb-2 text-lg font-semibold"},"Delete Skill?",-1)),e("p",pe,[l[3]||(l[3]=M(" Are you sure you want to delete ",-1)),e("code",fe,x(g.skillName),1),l[4]||(l[4]=M("? This action cannot be undone. ",-1))]),e("div",me,[e("button",{class:"rounded border border-border px-4 py-2 text-sm text-muted-foreground transition-colors hover:bg-white/5 hover:text-foreground",onClick:l[1]||(l[1]=a=>y.$emit("close"))}," Cancel "),e("button",{class:"rounded bg-destructive/15 px-4 py-2 text-sm text-destructive transition-colors hover:bg-destructive/25",onClick:l[2]||(l[2]=a=>y.$emit("confirm"))}," Delete ")])])):$("",!0)]),_:1})]))}}),xe={class:"max-w-2xl space-y-6"},ge={key:0,class:"rounded border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive"},ye={class:"mb-2 flex items-center gap-2"},ke={class:"font-mono text-[10px] text-muted-foreground/40"},we={class:"overflow-hidden rounded-lg border border-border"},Ce={class:"w-36 shrink-0 break-all font-mono text-xs text-foreground/80"},$e={class:"flex-1 text-xs leading-relaxed text-muted-foreground"},he={class:"flex shrink-0 items-center gap-2"},_e=["onClick"],Se=["onClick"],De={key:0,class:"border-t border-border/50 bg-white/[0.03] px-4 py-3"},Ne={class:"mb-3 max-h-40 overflow-y-auto rounded border border-border/50 bg-sidebar p-2 font-mono text-[11px] text-foreground/60 whitespace-pre-wrap break-words"},Te={class:"flex gap-2 justify-end"},ze=I({__name:"SkillsView",setup(g){const y={"File System":"#00d9ff","Code Intelligence":"#5fff87","Git & CI":"#c4a7ff",Communication:"#ffd000"},l=i([]),a=i({}),u=i(null),o=i(null),b=i(!1),p=i(!1),k=i(!1),N=i(!1),w=i(""),n=X(()=>{const s=new Map;for(const t of l.value){const c=Y(t.name,t.path);s.set(c,[...s.get(c)??[],t])}return[...s.entries()]});async function f(){const s=await T("/api/skills");s.ok&&(l.value=(await s.json()).skills,a.value=Object.fromEntries(l.value.map(t=>[t.slug,a.value[t.slug]??!0])))}async function H(s){if(u.value===s)u.value=null,o.value=null;else{u.value=s;const t=await T(`/api/skills/${s}`);t.ok&&(o.value=await t.json())}}function K(s){a.value={...a.value,[s]:!a.value[s]}}async function Q(s){if(o.value){k.value=!0,w.value="";try{const t=await T(`/api/skills/${o.value.slug}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:s.name,description:s.description,content:s.content})});if(!t.ok){const h=await t.text();w.value=h||"Failed to save skill";return}const c=l.value.findIndex(h=>{var S;return h.slug===((S=o.value)==null?void 0:S.slug)});c>=0&&(l.value[c]={...l.value[c],name:s.name,description:s.description}),o.value&&(o.value.name=s.name,o.value.description=s.description,o.value.content=s.content),b.value=!1}finally{k.value=!1}}}async function R(){if(o.value){N.value=!0,w.value="";try{const s=await T(`/api/skills/${o.value.slug}`,{method:"DELETE"});if(!s.ok){const t=await s.text();w.value=t||"Failed to delete skill";return}l.value=l.value.filter(t=>{var c;return t.slug!==((c=o.value)==null?void 0:c.slug)}),u.value=null,o.value=null,p.value=!1}finally{N.value=!1}}}return P(f),(s,t)=>{var c,h,S,O,U;return r(),d(B,null,[m(Z,{active:"skills"},{default:_(()=>[e("div",xe,[t[8]||(t[8]=e("p",{class:"text-xs text-muted-foreground"},"Enable or disable capabilities available to IO agents. Click to expand and edit skills.",-1)),w.value?(r(),d("div",ge,[M(x(w.value)+" ",1),e("button",{class:"ml-2 text-destructive/50 hover:text-destructive",onClick:t[0]||(t[0]=C=>w.value="")},"✕")])):$("",!0),(r(!0),d(B,null,A(n.value,([C,E])=>(r(),d("div",{key:C},[e("div",ye,[e("div",{class:"h-1.5 w-1.5 rounded-full",style:L({backgroundColor:y[C]??"#00d9ff"})},null,4),e("span",{class:"font-mono text-[10px] font-semibold uppercase tracking-wider",style:L({color:y[C]??"#00d9ff"})},x(C),5),t[5]||(t[5]=e("div",{class:"h-px flex-1 bg-border/40"},null,-1)),e("span",ke,x(E.filter(v=>a.value[v.slug]).length)+"/"+x(E.length),1)]),e("div",we,[(r(!0),d(B,null,A(E,(v,W)=>(r(),d("div",{key:v.slug},[e("div",{class:F(["flex items-center gap-3 bg-card px-4 py-2.5 transition-colors hover:bg-card/80",W>0?"border-t border-border/50":""])},[e("code",Ce,x(v.name),1),e("span",$e,x(v.description),1),e("div",he,[e("button",{class:"rounded border border-border px-2 py-1 font-mono text-[9px] text-muted-foreground transition-colors hover:text-primary",onClick:j=>H(v.slug)},[m(J,{name:u.value===v.slug?"chevron-up":"chevron-down",class:"h-3 w-3"},null,8,["name"])],8,_e),t[6]||(t[6]=e("span",{class:"shrink-0 font-mono text-[9px] text-muted-foreground/30"},"built-in",-1)),e("button",{type:"button",class:F(["relative h-4 w-8 shrink-0 rounded-full transition-colors",a.value[v.slug]?"bg-primary":"bg-white/10"]),onClick:j=>K(v.slug)},[e("span",{class:F(["absolute left-0.5 top-0.5 h-3 w-3 rounded-full bg-white transition-transform",a.value[v.slug]?"translate-x-4":"translate-x-0"])},null,2)],10,Se)])],2),m(D,{"enter-active-class":"duration-150 ease-out","enter-from-class":"opacity-0 -translate-y-1","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"duration-100 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-1"},{default:_(()=>[u.value===v.slug&&o.value?(r(),d("div",De,[t[7]||(t[7]=e("div",{class:"mb-2 text-xs text-muted-foreground/60 font-mono uppercase tracking-wider"},"Content Preview",-1)),e("div",Ne,x(o.value.content),1),e("div",Te,[e("button",{class:"rounded border border-border px-3 py-1.5 font-mono text-xs text-muted-foreground transition-colors hover:text-primary",onClick:t[1]||(t[1]=j=>b.value=!0)}," Edit "),e("button",{class:"rounded border border-destructive/40 px-3 py-1.5 font-mono text-xs text-destructive transition-colors hover:bg-destructive/10",onClick:t[2]||(t[2]=j=>p.value=!0)}," Delete ")])])):$("",!0)]),_:2},1024)]))),128))])]))),128))])]),_:1}),m(ce,{open:b.value,"skill-name":((c=o.value)==null?void 0:c.name)??"","skill-slug":((h=o.value)==null?void 0:h.slug)??"","skill-description":((S=o.value)==null?void 0:S.description)??"","skill-content":((O=o.value)==null?void 0:O.content)??"",onClose:t[3]||(t[3]=C=>b.value=!1),onSave:Q},null,8,["open","skill-name","skill-slug","skill-description","skill-content"]),m(be,{open:p.value,"skill-name":((U=o.value)==null?void 0:U.name)??"",onClose:t[4]||(t[4]=C=>p.value=!1),onConfirm:R},null,8,["open","skill-name"])],64)}}});export{ze as default};
@@ -1 +0,0 @@
1
- import{d as y,j as s,c as a,a as t,n as p,z as h,t as l,g as x,s as G,_ as $,A as M,T as H,r as k,q as j,b as C,B as R,C as J,F as f,m as _,D as S,o as Q,E as v,G as K,H as O,I as W,J as X}from"./index-f67odrrt.js";import{_ as T}from"./StatusIndicator.vue_vue_type_script_setup_true_lang-8U15Qp_Q.js";const Y={class:"flex items-center gap-2 rounded px-2 py-1.5 transition-colors hover:bg-white/[0.03]"},Z={class:"flex shrink-0 gap-1"},ee={key:0,class:"rounded bg-primary/10 px-1 py-0.5 font-mono text-[9px] leading-none text-primary"},te={key:1,class:"rounded bg-status-success/10 px-1 py-0.5 font-mono text-[9px] leading-none text-status-success"},se={class:"min-w-0 flex-1"},ne={key:0,class:"block truncate font-mono text-[11px] text-foreground/60"},ae={key:1,class:"font-mono text-[11px] text-muted-foreground/40"},oe={key:0,class:"mx-2 mb-1.5 rounded border border-white/[0.06] bg-white/[0.03] px-3 py-2"},re={class:"text-xs leading-relaxed text-foreground/60"},de={key:0,class:"mt-2 font-mono text-[10px] text-muted-foreground/45"},le=y({__name:"AgentRow",props:{agent:{},squadColor:{}},setup(e){const u=e,r=k(!1),i=j(()=>u.agent.charter||u.agent.role_title||"No charter available.");return(d,o)=>(s(),a("div",{class:"cursor-pointer",onClick:o[0]||(o[0]=b=>r.value=!r.value)},[t("div",Y,[p(T,{status:e.agent.status},null,8,["status"]),t("span",{class:"shrink-0 font-mono text-xs font-medium",style:h({color:e.squadColor})},l(e.agent.character_name),5),t("div",Z,[e.agent.is_lead?(s(),a("span",ee,"LEAD")):x("",!0),e.agent.is_qa?(s(),a("span",te,"QA")):x("",!0)]),t("div",se,[e.agent.current_task?(s(),a("span",ne,"↳ "+l(e.agent.current_task),1)):(s(),a("span",ae,"idle"))]),p($,{name:"chevron-down",class:G(["h-3 w-3 shrink-0 text-muted-foreground/40 transition-transform",r.value?"rotate-180":""])},null,8,["class"])]),p(H,{"enter-active-class":"duration-150 ease-out","enter-from-class":"opacity-0 -translate-y-1","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"duration-100 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-1"},{default:M(()=>[r.value?(s(),a("div",oe,[o[1]||(o[1]=t("div",{class:"mb-1 font-mono text-[10px] uppercase tracking-wider text-muted-foreground/60"},"Charter",-1)),t("div",re,l(i.value),1),e.agent.role_title&&e.agent.charter?(s(),a("div",de,"Role · "+l(e.agent.role_title),1)):x("",!0)])):x("",!0)]),_:1})]))}}),ie={class:"max-w-[120px] truncate text-muted-foreground"},ce=y({__name:"InstancePill",props:{instance:{}},setup(e){const u=e,r=j(()=>J(u.instance.status));return(i,d)=>(s(),a("div",{class:"flex items-center gap-1.5 rounded border px-2 py-1 font-mono text-[10px]",style:h({borderColor:C(R)(r.value,.3),backgroundColor:C(R)(r.value,.08)})},[t("div",{class:"h-1.5 w-1.5 shrink-0 rounded-full",style:h({backgroundColor:r.value})},null,4),t("span",{style:h({color:r.value})},l(e.instance.issue_ref||e.instance.id),5),d[0]||(d[0]=t("span",{class:"text-muted-foreground/50"},"·",-1)),t("span",ie,l(e.instance.branch_name||"detached"),1)],4))}}),ue={class:"flex flex-col overflow-hidden rounded-lg border border-border bg-card"},me={class:"px-4 pb-2.5 pt-3"},xe={class:"mb-2 flex items-start justify-between gap-2"},fe={class:"flex min-w-0 items-center gap-2"},ge={class:"truncate text-sm font-semibold"},pe={key:0,class:"shrink-0 rounded-full bg-destructive px-1.5 py-0.5 font-mono text-[9px] font-bold text-white"},he={class:"truncate font-mono text-[10px] text-muted-foreground/50"},ve={class:"px-2 py-1.5"},_e={class:"px-4 py-2.5"},be={class:"mb-2 flex items-center gap-1.5 font-mono text-[10px] uppercase tracking-wider text-muted-foreground/50"},ke={class:"flex flex-wrap gap-1.5"},ye={class:"px-4 py-2.5"},qe={class:"mb-2 flex items-center gap-1.5 font-mono text-[10px] uppercase tracking-wider text-muted-foreground/50"},we={class:"space-y-1"},$e={class:"flex-1 text-foreground/60"},Ce={class:"shrink-0 font-mono text-muted-foreground/40"},Re=y({__name:"SquadCard",props:{squad:{}},setup(e){const u=e,r=j(()=>u.squad.instances.filter(i=>i.status==="running").length);return(i,d)=>(s(),a("article",ue,[t("div",{class:"h-px",style:h({backgroundColor:e.squad.color,opacity:.6})},null,4),t("div",me,[t("div",xe,[t("div",fe,[p(T,{status:e.squad.status},null,8,["status"]),t("h3",ge,l(e.squad.name),1),e.squad.unread_count>0?(s(),a("span",pe,l(e.squad.unread_count),1)):x("",!0)]),t("span",{class:"shrink-0 rounded px-1.5 py-0.5 font-mono text-[10px]",style:h({color:e.squad.color,backgroundColor:C(R)(e.squad.color,.15)})},l(e.squad.universe),5)]),t("div",he,l(e.squad.project_path),1)]),d[4]||(d[4]=t("div",{class:"mx-3 border-t border-border/50"},null,-1)),t("div",ve,[(s(!0),a(f,null,_(e.squad.agents,o=>(s(),S(le,{key:o.character_name,agent:o,"squad-color":e.squad.color},null,8,["agent","squad-color"]))),128))]),e.squad.instances.length?(s(),a(f,{key:0},[d[0]||(d[0]=t("div",{class:"mx-3 border-t border-border/50"},null,-1)),t("div",_e,[t("div",be,[p($,{name:"git-branch",class:"h-3 w-3"}),t("span",null,"Instances ("+l(r.value)+"/"+l(e.squad.instances.length)+" running)",1)]),t("div",ke,[(s(!0),a(f,null,_(e.squad.instances,o=>(s(),S(ce,{key:o.id,instance:o},null,8,["instance"]))),128))])])],64)):x("",!0),e.squad.recent_decisions.length?(s(),a(f,{key:1},[d[3]||(d[3]=t("div",{class:"mx-3 border-t border-border/50"},null,-1)),t("div",ye,[t("div",qe,[p($,{name:"sparkles",class:"h-3 w-3"}),d[1]||(d[1]=t("span",null,"Decisions",-1))]),t("div",we,[(s(!0),a(f,null,_(e.squad.recent_decisions,o=>(s(),a("div",{key:o.id,class:"flex items-baseline gap-2 text-[11px]"},[d[2]||(d[2]=t("span",{class:"shrink-0 font-mono text-muted-foreground/40"},"·",-1)),t("span",$e,l(o.title),1),t("span",Ce,l(o.timestamp),1)]))),128))])])],64)):x("",!0)]))}}),Se={class:"h-full overflow-y-auto p-5"},je={key:0,class:"mb-4 rounded-lg border border-destructive/25 bg-destructive/10 px-4 py-3 text-sm text-destructive"},Ie={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3"},Ae={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3"},Be={key:3,class:"flex h-full min-h-[320px] items-center justify-center rounded-lg border border-dashed border-border bg-card/30 font-mono text-xs uppercase tracking-[0.22em] text-muted-foreground/55"},Ee=y({__name:"SquadsView",setup(e){const u=k(!1),r=k(""),i=k([]);async function d(){u.value=!0,r.value="";try{const[o,b]=await Promise.all([v("/api/squads"),v("/api/feed?limit=200")]),g=o.ok?(await o.json()).squads:[],q=new Map;if(b.ok){const m=(await b.json()).entries;for(const c of m)!c.read_at&&c.squad_slug&&q.set(c.squad_slug,(q.get(c.squad_slug)??0)+1)}i.value=await Promise.all(g.map(async m=>{var E;const c=m.slug??m.id??m.name.toLowerCase().replace(/\s+/g,"-"),[I,A]=await Promise.all([v(`/api/squads/${encodeURIComponent(c)}/agents`),v(`/api/squads/${encodeURIComponent(c)}/instances`)]),U=I.ok?(await I.json()).agents:[],F=A.ok?(await A.json()).instances:[],B=U.map(n=>({character_name:n.character_name??"Unnamed Agent",role_title:n.role_title,charter:n.charter??n.role_title,model_tier:n.model_tier??(n.is_lead?"high":"medium"),status:K(n.status),is_lead:!!n.is_lead,is_qa:!!n.is_qa,current_task:n.currentTask??n.current_task??null})),w=F.map(n=>({id:String(n.id),issue_ref:n.issue_ref,branch_name:n.branch_name,status:O(n.status),worktree_path:n.worktree_path})),z=await Promise.all(w.slice(0,3).map(n=>v(`/api/squads/${encodeURIComponent(c)}/instances/${encodeURIComponent(n.id)}`))),D=[];for(let n=0;n<z.length;n+=1){const N=z[n];if(!N.ok)continue;const V=await N.json();for(const[L,P]of(V.decisions??[]).slice(0,3).entries())D.push({id:`${((E=w[n])==null?void 0:E.id)??n}-${L}`,title:P.decision??"Decision recorded",timestamp:W(P.created_at)})}return{id:m.id??c,slug:c,name:m.name,project_path:m.project_path??"—",universe:m.universe??"Ghostbusters",status:X(B,m),unread_count:q.get(c)??0,agents:B,instances:w,recent_decisions:D.slice(0,4)}}))}catch(o){r.value=o instanceof Error?o.message:"Failed to load squads.",i.value=[]}finally{u.value=!1}}return Q(d),(o,b)=>(s(),a("div",Se,[r.value?(s(),a("div",je,l(r.value),1)):x("",!0),u.value&&!i.value.length?(s(),a("div",Ie,[(s(),a(f,null,_(6,g=>t("div",{key:g,class:"h-64 animate-pulse rounded-lg border border-border bg-card/60"})),64))])):i.value.length?(s(),a("div",Ae,[(s(!0),a(f,null,_(i.value,g=>(s(),S(Re,{key:g.id,squad:g},null,8,["squad"]))),128))])):(s(),a("div",Be," No squads discovered. "))]))}});export{Ee as default};
@@ -1 +0,0 @@
1
- import{d as r,j as s,c as t,F as l,a}from"./index-f67odrrt.js";const u={class:"relative flex h-3 w-3 shrink-0 items-center justify-center"},d={key:1,class:"status-error-dot h-2 w-2 rounded-full bg-status-error",style:{boxShadow:"var(--glow-error)"}},n={key:2,class:"h-2 w-2 rounded-full bg-status-success",style:{boxShadow:"var(--glow-success)"}},c={key:3,class:"h-2 w-2 rounded-full bg-status-idle opacity-40"},g=r({__name:"StatusIndicator",props:{status:{default:"idle"}},setup(o){return(i,e)=>(s(),t("div",u,[o.status==="working"?(s(),t(l,{key:0},[e[0]||(e[0]=a("div",{class:"status-working-ring absolute h-3 w-3 rounded-full bg-status-working",style:{boxShadow:"var(--glow-success)"}},null,-1)),e[1]||(e[1]=a("div",{class:"h-2 w-2 rounded-full bg-status-working",style:{boxShadow:"var(--glow-success)"}},null,-1))],64)):o.status==="error"?(s(),t("div",d)):o.status==="success"?(s(),t("div",n)):(s(),t("div",c))]))}});export{g as _};
@@ -1 +0,0 @@
1
- import{d as V,j as s,c as r,z as _,n as d,_ as h,s as L,p as j,t as k,T as C,A as T,F as E,m as M,D,g as w,r as c,O as J,o as R,M as q,E as S,a as t,w as U,P as Q,v as N,l as G,b as K,x as X,q as O,Q as Z}from"./index-f67odrrt.js";const ee={key:0,class:"overflow-hidden"},I=V({__name:"WikiTreeNode",props:{node:{},selectedPath:{},depth:{default:0}},emits:["select"],setup(a,{emit:f}){const o=f,n=c(!0);return(b,u)=>{const y=J("WikiTreeNode",!0);return s(),r("div",null,[a.node.children.length?(s(),r("button",{key:0,class:"flex w-full items-center gap-1.5 rounded px-2 py-1 text-left font-mono text-xs uppercase tracking-wider text-muted-foreground/70 transition-colors hover:bg-white/[0.03]",style:_({paddingLeft:`${a.depth*12+8}px`}),onClick:u[0]||(u[0]=v=>n.value=!n.value)},[d(h,{name:"chevron-right",class:L(["h-3 w-3 shrink-0 transition-transform",n.value?"rotate-90":""])},null,8,["class"]),j(" "+k(a.node.label),1)],4)):(s(),r("button",{key:1,class:L(["flex w-full items-center gap-1.5 rounded px-2 py-1.5 text-left text-xs transition-colors",a.selectedPath===a.node.path?"bg-primary/10 text-primary":"text-foreground/60 hover:bg-white/[0.03] hover:text-foreground"]),style:_({paddingLeft:`${a.depth*12+8}px`}),onClick:u[1]||(u[1]=v=>a.node.path&&o("select",a.node.path))},k(a.node.label),7)),d(C,{"enter-active-class":"duration-150 ease-out","enter-from-class":"opacity-0 -translate-y-1","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"duration-100 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-1"},{default:T(()=>[a.node.children.length&&n.value?(s(),r("div",ee,[(s(!0),r(E,null,M(a.node.children,v=>(s(),D(y,{key:v.id,node:v,"selected-path":a.selectedPath,depth:a.depth+1,onSelect:u[2]||(u[2]=g=>o("select",g))},null,8,["node","selected-path","depth"]))),128))])):w("",!0)]),_:1})])}}}),te={key:0,class:"fixed left-1/2 top-1/2 z-50 w-full max-w-lg -translate-x-1/2 -translate-y-1/2 rounded-lg border border-border bg-card p-6"},oe={class:"mb-4 flex items-center justify-between"},se={key:0,class:"mb-4 rounded border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive"},ae={class:"mb-4"},ne=["value"],le={class:"mb-4"},re=["value"],ie={class:"mb-4"},de={class:"flex gap-2 justify-end"},ue=["disabled"],ce=["disabled"],ve={key:0},pe={key:1},fe=V({__name:"WikiEditModal",props:{open:{type:Boolean},path:{},content:{}},emits:["close","save"],setup(a,{emit:f}){const o=a,n=f,b=c(""),u=c(""),y=c([]),v=c(!1),g=c("");async function z(){const P=await S("/api/wiki-categories");P.ok&&(y.value=(await P.json()).categories)}async function m(){if(!b.value.trim()){g.value="Content cannot be empty";return}v.value=!0,g.value="";try{n("save",{content:b.value,category:u.value})}finally{v.value=!1}}return R(()=>{z(),b.value=o.content}),(P,l)=>(s(),D(q,{to:"body"},[d(C,{"enter-active-class":"duration-200 ease-out","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"duration-150 ease-in","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:T(()=>[a.open?(s(),r("div",{key:0,class:"fixed inset-0 z-40 bg-black/40",onClick:l[0]||(l[0]=x=>n("close"))})):w("",!0)]),_:1}),d(C,{"enter-active-class":"duration-200 ease-out","enter-from-class":"translate-y-4 opacity-0","enter-to-class":"translate-y-0 opacity-100","leave-active-class":"duration-150 ease-in","leave-from-class":"translate-y-0 opacity-100","leave-to-class":"translate-y-4 opacity-0"},{default:T(()=>[a.open?(s(),r("div",te,[t("div",oe,[l[5]||(l[5]=t("h3",{class:"text-lg font-semibold"},"Edit Wiki Page",-1)),t("button",{class:"text-muted-foreground/40 transition-colors hover:text-foreground",onClick:l[1]||(l[1]=x=>n("close"))},[d(h,{name:"x",class:"h-5 w-5"})])]),g.value?(s(),r("div",se,k(g.value),1)):w("",!0),t("div",ae,[l[6]||(l[6]=t("label",{class:"block font-mono text-xs uppercase tracking-wider text-muted-foreground/60"},"Page Path",-1)),t("input",{type:"text",value:a.path,disabled:"",class:"mt-1 w-full rounded border border-border bg-sidebar px-3 py-2 text-sm text-foreground/50 font-mono"},null,8,ne)]),t("div",le,[l[8]||(l[8]=t("label",{class:"block font-mono text-xs uppercase tracking-wider text-muted-foreground/60"},"Category",-1)),U(t("select",{"onUpdate:modelValue":l[2]||(l[2]=x=>u.value=x),class:"mt-1 w-full rounded border border-border bg-sidebar px-3 py-2 text-sm text-foreground font-mono"},[l[7]||(l[7]=t("option",{value:""},"Uncategorized",-1)),(s(!0),r(E,null,M(y.value,x=>(s(),r("option",{key:x,value:x},k(x),9,re))),128))],512),[[Q,u.value]])]),t("div",ie,[l[9]||(l[9]=t("label",{class:"block font-mono text-xs uppercase tracking-wider text-muted-foreground/60 mb-1"},"Content",-1)),U(t("textarea",{"onUpdate:modelValue":l[3]||(l[3]=x=>b.value=x),class:"w-full h-48 rounded border border-border bg-sidebar px-3 py-2 text-sm text-foreground font-mono",placeholder:"Enter wiki content (markdown supported)"},null,512),[[N,b.value]])]),t("div",de,[t("button",{class:"rounded border border-border px-4 py-2 text-sm text-muted-foreground transition-colors hover:bg-white/5 hover:text-foreground",onClick:l[4]||(l[4]=x=>n("close")),disabled:v.value}," Cancel ",8,ue),t("button",{class:"rounded bg-primary/15 px-4 py-2 text-sm text-primary transition-colors hover:bg-primary/25 disabled:opacity-50",onClick:m,disabled:v.value},[v.value?(s(),r("span",ve,"Saving...")):(s(),r("span",pe,"Save Changes"))],8,ce)])])):w("",!0)]),_:1})]))}}),me={key:0,class:"fixed left-1/2 top-1/2 z-50 w-full max-w-sm -translate-x-1/2 -translate-y-1/2 rounded-lg border border-border bg-card p-6"},xe={class:"mb-4 text-sm text-muted-foreground"},be={class:"text-foreground/80 font-mono"},ye={class:"flex gap-2 justify-end"},ge=V({__name:"WikiDeleteConfirmation",props:{open:{type:Boolean},path:{}},emits:["close","confirm"],setup(a){return(f,o)=>(s(),D(q,{to:"body"},[d(C,{"enter-active-class":"duration-200 ease-out","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"duration-150 ease-in","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:T(()=>[a.open?(s(),r("div",{key:0,class:"fixed inset-0 z-40 bg-black/40",onClick:o[0]||(o[0]=n=>f.$emit("close"))})):w("",!0)]),_:1}),d(C,{"enter-active-class":"duration-200 ease-out","enter-from-class":"translate-y-4 opacity-0","enter-to-class":"translate-y-0 opacity-100","leave-active-class":"duration-150 ease-in","leave-from-class":"translate-y-0 opacity-100","leave-to-class":"translate-y-4 opacity-0"},{default:T(()=>[a.open?(s(),r("div",me,[o[5]||(o[5]=t("h3",{class:"mb-2 text-lg font-semibold"},"Delete Wiki Page?",-1)),t("p",xe,[o[3]||(o[3]=j(" Are you sure you want to delete ",-1)),t("code",be,k(a.path),1),o[4]||(o[4]=j("? This action cannot be undone. ",-1))]),t("div",ye,[t("button",{class:"rounded border border-border px-4 py-2 text-sm text-muted-foreground transition-colors hover:bg-white/5 hover:text-foreground",onClick:o[1]||(o[1]=n=>f.$emit("close"))}," Cancel "),t("button",{class:"rounded bg-destructive/15 px-4 py-2 text-sm text-destructive transition-colors hover:bg-destructive/25",onClick:o[2]||(o[2]=n=>f.$emit("confirm"))}," Delete ")])])):w("",!0)]),_:1})]))}}),he={class:"relative flex h-full flex-col overflow-hidden md:flex-row"},ke={class:"flex shrink-0 items-center gap-2 border-b border-border bg-sidebar px-4 py-2 md:hidden"},we={key:0,class:"absolute left-0 right-0 top-[calc(2.75rem+2.75rem)] z-20 max-h-[60vh] overflow-y-auto border-b border-border bg-sidebar px-2 py-3 md:hidden"},$e={class:"hidden w-52 shrink-0 overflow-y-auto border-r border-border px-2 py-4 md:block"},Ce={class:"flex-1 flex flex-col overflow-hidden"},Te={key:0,class:"flex shrink-0 items-center justify-between border-b border-border bg-sidebar px-4 py-3"},Pe={class:"flex items-center gap-2"},Se={class:"font-mono text-xs text-muted-foreground/70 truncate"},je={class:"flex gap-2"},De={key:1,class:"flex shrink-0 items-center gap-2 border-b border-destructive/50 bg-destructive/10 px-4 py-2"},ze={class:"flex-1 text-xs text-destructive"},Ee={class:"flex-1 overflow-y-auto"},Me={key:0,class:"max-w-2xl px-4 py-5 md:px-8 md:py-6"},Ue={class:"mb-5 text-xl font-semibold"},Ve=["innerHTML"],We={key:1,class:"flex h-full items-center justify-center font-mono text-sm text-muted-foreground/40"},Ne=V({__name:"WikiView",setup(a){const f=c([]),o=c(""),n=c(null),b=c(""),u=c(!1),y=c(!1),v=c(!1),g=c(!1),z=c(!1),m=c(""),P=O(()=>{const i=b.value.trim().toLowerCase();return i?f.value.filter(e=>`${e.path} ${e.title}`.toLowerCase().includes(i)):f.value}),l=O(()=>Z(P.value));async function x(){const i=await S("/api/wiki");i.ok&&(f.value=(await i.json()).pages,!o.value&&f.value[0]&&(o.value=f.value[0].path))}async function F(i){if(!i)return;const e=await S(`/api/wiki/${encodeURIComponent(i)}`);if(!e.ok){n.value=null;return}n.value=await e.json()}function A(i){o.value=i,u.value=!1,m.value=""}async function H(i){g.value=!0,m.value="";try{const e=await S(`/api/wiki/${encodeURIComponent(o.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:i.content,category:i.category||null})});if(!e.ok){const $=await e.text();e.status===404?m.value="Page not found":e.status===403?m.value="You do not have permission to edit this page":m.value=$||"Failed to save page";return}await F(o.value),y.value=!1}finally{g.value=!1}}async function Y(){var i;z.value=!0,m.value="";try{const e=await S(`/api/wiki/${encodeURIComponent(o.value)}`,{method:"DELETE"});if(!e.ok){const $=await e.text();e.status===404?m.value="Page not found":e.status===403?m.value="You do not have permission to delete this page":m.value=$||"Failed to delete page";return}await x(),o.value=((i=f.value[0])==null?void 0:i.path)??"",n.value=null,v.value=!1}finally{z.value=!1}}return G(o,i=>{F(i)}),R(x),(i,e)=>{var $,B;return s(),r("div",he,[t("div",ke,[t("button",{class:"flex items-center gap-1.5 rounded border border-border px-3 py-1.5 font-mono text-xs text-muted-foreground transition-colors hover:bg-white/5 hover:text-foreground",onClick:e[0]||(e[0]=p=>u.value=!u.value)},[d(h,{name:"book",class:"h-3.5 w-3.5"}),t("span",null,k((($=n.value)==null?void 0:$.path)??"Pages"),1),d(h,{name:"chevron-down",class:L(["h-3 w-3 transition-transform",u.value?"rotate-180":""])},null,8,["class"])])]),d(C,{"enter-active-class":"duration-200 ease-out","enter-from-class":"-translate-y-2 opacity-0","enter-to-class":"translate-y-0 opacity-100","leave-active-class":"duration-150 ease-in","leave-from-class":"translate-y-0 opacity-100","leave-to-class":"-translate-y-2 opacity-0"},{default:T(()=>[u.value?(s(),r("div",we,[U(t("input",{"onUpdate:modelValue":e[1]||(e[1]=p=>b.value=p),class:"mb-3 w-full rounded border border-border bg-card px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground/35",placeholder:"Filter pages"},null,512),[[N,b.value]]),(s(!0),r(E,null,M(l.value,p=>(s(),D(I,{key:p.id,node:p,"selected-path":o.value,onSelect:e[2]||(e[2]=W=>A(W))},null,8,["node","selected-path"]))),128))])):w("",!0)]),_:1}),t("aside",$e,[U(t("input",{"onUpdate:modelValue":e[3]||(e[3]=p=>b.value=p),class:"mb-3 w-full rounded border border-border bg-sidebar px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground/35",placeholder:"Filter pages"},null,512),[[N,b.value]]),(s(!0),r(E,null,M(l.value,p=>(s(),D(I,{key:p.id,node:p,"selected-path":o.value,onSelect:e[4]||(e[4]=W=>o.value=W)},null,8,["node","selected-path"]))),128))]),t("section",Ce,[n.value?(s(),r("div",Te,[t("div",Pe,[d(h,{name:"book",class:"h-4 w-4 text-muted-foreground/50"}),t("span",Se,k(n.value.path),1)]),t("div",je,[t("button",{class:"flex items-center gap-1.5 rounded border border-border px-3 py-1.5 text-xs font-mono text-muted-foreground transition-colors hover:border-primary/40 hover:bg-primary/5 hover:text-primary",onClick:e[5]||(e[5]=p=>y.value=!0)},[d(h,{name:"pencil",class:"h-3 w-3"}),e[10]||(e[10]=j(" Edit ",-1))]),t("button",{class:"flex items-center gap-1.5 rounded border border-destructive/40 px-3 py-1.5 text-xs font-mono text-destructive transition-colors hover:bg-destructive/10",onClick:e[6]||(e[6]=p=>v.value=!0)},[d(h,{name:"trash",class:"h-3 w-3"}),e[11]||(e[11]=j(" Delete ",-1))])])])):w("",!0),m.value?(s(),r("div",De,[d(h,{name:"alert-circle",class:"h-4 w-4 text-destructive"}),t("span",ze,k(m.value),1),t("button",{class:"text-destructive/50 hover:text-destructive",onClick:e[7]||(e[7]=p=>m.value="")},[d(h,{name:"x",class:"h-3 w-3"})])])):w("",!0),t("div",Ee,[n.value?(s(),r("div",Me,[t("h2",Ue,k(n.value.path),1),t("div",{class:"wiki-content",innerHTML:K(X)(n.value.content)},null,8,Ve)])):(s(),r("div",We,"Select an article"))])]),d(fe,{open:y.value,path:o.value,content:((B=n.value)==null?void 0:B.content)??"",onClose:e[8]||(e[8]=p=>y.value=!1),onSave:H},null,8,["open","path","content"]),d(ge,{open:v.value,path:o.value,onClose:e[9]||(e[9]=p=>v.value=!1),onConfirm:Y},null,8,["open","path"])])}}});export{Ne as default};
@@ -1,10 +0,0 @@
1
- pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
2
- Theme: GitHub Dark
3
- Description: Dark theme as seen on github.com
4
- Author: github.com
5
- Maintainer: @Hirse
6
- Updated: 2021-05-15
7
-
8
- Outdated base version: https://github.com/primer/github-syntax-dark
9
- Current colors taken from GitHub's CSS
10
- */.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Space Grotesk,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}*{--tw-border-opacity: 1;border-color:rgb(var(--border-rgb) / var(--tw-border-opacity, 1));box-sizing:border-box}html{font-size:13px}html,body,#app{margin:0;height:100%;--tw-bg-opacity: 1;background-color:rgb(var(--background-rgb) / var(--tw-bg-opacity, 1));font-family:Space Grotesk,system-ui,sans-serif;--tw-text-opacity: 1;color:rgb(var(--foreground-rgb) / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background:radial-gradient(circle at top left,rgba(0,217,255,.08),transparent 24%),radial-gradient(circle at top right,rgba(196,167,255,.07),transparent 18%),linear-gradient(180deg,rgba(255,255,255,.02),transparent 35%),var(--background)}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;background-image:linear-gradient(rgba(255,255,255,.015) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.015) 1px,transparent 1px);background-size:40px 40px;-webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.35),transparent 65%);mask-image:linear-gradient(180deg,rgba(0,0,0,.35),transparent 65%)}a{color:inherit;text-decoration:none}button,input,textarea,select{font:inherit;color:inherit}button{outline:2px solid transparent;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}input,textarea,select{outline:2px solid transparent;outline-offset:2px}::-moz-selection{background:#00d9ff47;color:#fff}::selection{background:#00d9ff47;color:#fff}.wiki-content{font-size:.875rem;line-height:1.75rem;color:rgb(var(--foreground-rgb) / .72)}.wiki-content h1,.wiki-content h2,.wiki-content h3,.wiki-content h4{margin-bottom:.75rem;margin-top:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(var(--foreground-rgb) / var(--tw-text-opacity, 1))}.wiki-content h1{margin-top:0;font-size:1.75rem}.wiki-content h2{font-size:1.3rem}.wiki-content h3{font-size:1.05rem}.wiki-content p,.wiki-content ul,.wiki-content ol,.wiki-content pre,.wiki-content blockquote,.wiki-content table,.wiki-content hr,.wiki-content .md-spacer{margin-bottom:1rem}.wiki-content ul,.wiki-content ol{padding-left:1.25rem}.wiki-content li{margin-bottom:.25rem}.wiki-content a{--tw-text-opacity: 1;color:rgb(var(--primary-rgb) / var(--tw-text-opacity, 1));text-decoration-line:underline;text-underline-offset:4px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;text-decoration-color:rgb(var(--primary-rgb) / .3)}.wiki-content a:hover{text-decoration-color:rgb(var(--primary-rgb) / 1)}.wiki-content strong{font-weight:600;--tw-text-opacity: 1;color:rgb(var(--foreground-rgb) / var(--tw-text-opacity, 1))}.wiki-content code{border-radius:.25rem;padding:.125rem .25rem;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace;font-size:11px;--tw-text-opacity: 1;color:rgb(var(--primary-rgb) / var(--tw-text-opacity, 1));background:#ffffff0f}.wiki-content pre{overflow-x:auto;border-radius:.5rem;border-width:1px;padding:1rem;border-color:#ffffff0f;background:#0000004d}.wiki-content pre code{background-color:transparent;padding:0;font-size:11px;color:rgb(var(--foreground-rgb) / .8)}.wiki-content blockquote{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-left-width:2px;padding:.75rem 1rem;border-left-color:rgb(var(--accent-foreground-rgb) / .7);background:#ffffff08;color:rgb(var(--foreground-rgb) / .7)}.wiki-content table{width:100%;border-collapse:collapse;text-align:left;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace;font-size:.75rem;line-height:1rem}.wiki-content th{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--border-rgb) / var(--tw-border-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgb(var(--muted-foreground-rgb) / var(--tw-text-opacity, 1))}.wiki-content td{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--border-rgb) / var(--tw-border-opacity, 1));padding:.5rem .75rem;border-bottom-color:rgb(var(--border-rgb) / .4)}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-right-1{right:-.25rem}.-right-1\.5{right:-.375rem}.-top-0\.5{top:-.125rem}.-top-1{top:-.25rem}.-top-1\.5{top:-.375rem}.bottom-0{bottom:0}.bottom-14{bottom:3.5rem}.left-0{left:0}.left-0\.5{left:.125rem}.left-1\/2{left:50%}.left-full{left:100%}.right-0{right:0}.right-3{right:.75rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-\[calc\(2\.75rem\+2\.75rem\)\]{top:5.5rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2 / span 2}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.-mb-px{margin-bottom:-1px}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.ml-2{margin-left:.5rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-9{height:2.25rem}.h-\[380px\]{height:380px}.h-full{height:100%}.h-px{height:1px}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-\[60vh\]{max-height:60vh}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0px}.min-h-\[320px\]{min-height:320px}.w-0\.5{width:.125rem}.w-1\.5{width:.375rem}.w-12{width:3rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-3\.5{min-width:.875rem}.min-w-4{min-width:1rem}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-\[120px\]{max-width:120px}.max-w-\[82\%\]{max-width:82%}.max-w-\[85\%\]{max-width:85%}.max-w-\[980px\]{max-width:980px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-4{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[0\.97\]{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.rounded-bl-sm{border-bottom-left-radius:.125rem}.rounded-br-sm{border-bottom-right-radius:.125rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0px}.border-dashed{border-style:dashed}.border-accent-foreground\/40{border-color:rgb(var(--accent-foreground-rgb) / .4)}.border-border{--tw-border-opacity: 1;border-color:rgb(var(--border-rgb) / var(--tw-border-opacity, 1))}.border-border\/40{border-color:rgb(var(--border-rgb) / .4)}.border-border\/50{border-color:rgb(var(--border-rgb) / .5)}.border-destructive\/25{border-color:rgb(var(--destructive-rgb) / .25)}.border-destructive\/40{border-color:rgb(var(--destructive-rgb) / .4)}.border-destructive\/50{border-color:rgb(var(--destructive-rgb) / .5)}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-primary{--tw-border-opacity: 1;border-color:rgb(var(--primary-rgb) / var(--tw-border-opacity, 1))}.border-primary\/20{border-color:rgb(var(--primary-rgb) / .2)}.border-primary\/30{border-color:rgb(var(--primary-rgb) / .3)}.border-primary\/40{border-color:rgb(var(--primary-rgb) / .4)}.border-transparent{border-color:transparent}.border-white\/\[0\.05\]{border-color:#ffffff0d}.border-white\/\[0\.06\]{border-color:#ffffff0f}.bg-accent-foreground\/10{background-color:rgb(var(--accent-foreground-rgb) / .1)}.bg-background{--tw-bg-opacity: 1;background-color:rgb(var(--background-rgb) / var(--tw-bg-opacity, 1))}.bg-black\/30{background-color:#0000004d}.bg-black\/40{background-color:#0006}.bg-border{--tw-bg-opacity: 1;background-color:rgb(var(--border-rgb) / var(--tw-bg-opacity, 1))}.bg-border\/40{background-color:rgb(var(--border-rgb) / .4)}.bg-border\/80{background-color:rgb(var(--border-rgb) / .8)}.bg-card{--tw-bg-opacity: 1;background-color:rgb(var(--card-rgb) / var(--tw-bg-opacity, 1))}.bg-card\/30{background-color:rgb(var(--card-rgb) / .3)}.bg-card\/60{background-color:rgb(var(--card-rgb) / .6)}.bg-destructive{--tw-bg-opacity: 1;background-color:rgb(var(--destructive-rgb) / var(--tw-bg-opacity, 1))}.bg-destructive\/10{background-color:rgb(var(--destructive-rgb) / .1)}.bg-destructive\/15{background-color:rgb(var(--destructive-rgb) / .15)}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-popover{--tw-bg-opacity: 1;background-color:rgb(var(--popover-rgb) / var(--tw-bg-opacity, 1))}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(var(--primary-rgb) / var(--tw-bg-opacity, 1))}.bg-primary\/10{background-color:rgb(var(--primary-rgb) / .1)}.bg-primary\/15{background-color:rgb(var(--primary-rgb) / .15)}.bg-primary\/5{background-color:rgb(var(--primary-rgb) / .05)}.bg-primary\/\[0\.04\]{background-color:rgb(var(--primary-rgb) / .04)}.bg-sidebar{--tw-bg-opacity: 1;background-color:rgb(var(--sidebar-rgb) / var(--tw-bg-opacity, 1))}.bg-sidebar\/40{background-color:rgb(var(--sidebar-rgb) / .4)}.bg-sidebar\/60{background-color:rgb(var(--sidebar-rgb) / .6)}.bg-sidebar\/95{background-color:rgb(var(--sidebar-rgb) / .95)}.bg-status-error{--tw-bg-opacity: 1;background-color:rgb(var(--status-error-rgb) / var(--tw-bg-opacity, 1))}.bg-status-idle{--tw-bg-opacity: 1;background-color:rgb(var(--status-idle-rgb) / var(--tw-bg-opacity, 1))}.bg-status-success{--tw-bg-opacity: 1;background-color:rgb(var(--status-success-rgb) / var(--tw-bg-opacity, 1))}.bg-status-success\/10{background-color:rgb(var(--status-success-rgb) / .1)}.bg-status-working{--tw-bg-opacity: 1;background-color:rgb(var(--status-working-rgb) / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/5{background-color:#ffffff0d}.bg-white\/\[0\.015\]{background-color:#ffffff04}.bg-white\/\[0\.03\]{background-color:#ffffff08}.bg-white\/\[0\.04\]{background-color:#ffffff0a}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-2\.5{padding-bottom:.625rem}.pb-\[calc\(env\(safe-area-inset-bottom\)\+3\.5rem\)\]{padding-bottom:calc(env(safe-area-inset-bottom) + 3.5rem)}.pb-\[env\(safe-area-inset-bottom\)\]{padding-bottom:env(safe-area-inset-bottom)}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pt-1{padding-top:.25rem}.pt-3{padding-top:.75rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.22em\]{letter-spacing:.22em}.tracking-\[0\.28em\]{letter-spacing:.28em}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-\[0\.3em\]{letter-spacing:.3em}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.text-accent-foreground{--tw-text-opacity: 1;color:rgb(var(--accent-foreground-rgb) / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-destructive{--tw-text-opacity: 1;color:rgb(var(--destructive-rgb) / var(--tw-text-opacity, 1))}.text-destructive\/50{color:rgb(var(--destructive-rgb) / .5)}.text-foreground{--tw-text-opacity: 1;color:rgb(var(--foreground-rgb) / var(--tw-text-opacity, 1))}.text-foreground\/50{color:rgb(var(--foreground-rgb) / .5)}.text-foreground\/55{color:rgb(var(--foreground-rgb) / .55)}.text-foreground\/60{color:rgb(var(--foreground-rgb) / .6)}.text-foreground\/65{color:rgb(var(--foreground-rgb) / .65)}.text-foreground\/70{color:rgb(var(--foreground-rgb) / .7)}.text-foreground\/75{color:rgb(var(--foreground-rgb) / .75)}.text-foreground\/80{color:rgb(var(--foreground-rgb) / .8)}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-green-300{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.text-muted-foreground{--tw-text-opacity: 1;color:rgb(var(--muted-foreground-rgb) / var(--tw-text-opacity, 1))}.text-muted-foreground\/30{color:rgb(var(--muted-foreground-rgb) / .3)}.text-muted-foreground\/40{color:rgb(var(--muted-foreground-rgb) / .4)}.text-muted-foreground\/45{color:rgb(var(--muted-foreground-rgb) / .45)}.text-muted-foreground\/50{color:rgb(var(--muted-foreground-rgb) / .5)}.text-muted-foreground\/55{color:rgb(var(--muted-foreground-rgb) / .55)}.text-muted-foreground\/60{color:rgb(var(--muted-foreground-rgb) / .6)}.text-muted-foreground\/65{color:rgb(var(--muted-foreground-rgb) / .65)}.text-muted-foreground\/70{color:rgb(var(--muted-foreground-rgb) / .7)}.text-primary{--tw-text-opacity: 1;color:rgb(var(--primary-rgb) / var(--tw-text-opacity, 1))}.text-primary\/60{color:rgb(var(--primary-rgb) / .6)}.text-primary\/70{color:rgb(var(--primary-rgb) / .7)}.text-primary\/80{color:rgb(var(--primary-rgb) / .8)}.text-status-success{--tw-text-opacity: 1;color:rgb(var(--status-success-rgb) / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.shadow-\[0_20px_60px_rgba\(0\,0\,0\,0\.45\)\]{--tw-shadow: 0 20px 60px rgba(0,0,0,.45);--tw-shadow-colored: 0 20px 60px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-\[cubic-bezier\(0\.22\,1\,0\.36\,1\)\]{transition-timing-function:cubic-bezier(.22,1,.36,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{color-scheme:dark;font-family:Space Grotesk,system-ui,sans-serif}.dark{--background: #0a0a0f;--foreground: #e8e8ed;--card: #121218;--popover: #1a1a24;--primary: #00d9ff;--secondary: #1e1e2a;--muted: #252530;--muted-foreground: #8a8a99;--accent: #2d2d3f;--accent-foreground: #c4a7ff;--destructive: #ff3864;--border: #252530;--sidebar: #0f0f16;--status-idle: #8a8a99;--status-working: #5fff87;--status-error: #ff3864;--status-success: #5fff87;--universe-ateam: #ff6b35;--universe-thundercats: #ffd000;--universe-gijoe: #5fff87;--universe-ghostbusters: #c4a7ff;--glow-cyan: 0 0 20px rgba(0, 217, 255, .4);--glow-error: 0 0 20px rgba(255, 56, 100, .4);--glow-success: 0 0 20px rgba(95, 255, 135, .28);--font-sans: "Space Grotesk";--font-mono: "JetBrains Mono";--font-size: 13px;--radius: .375rem;--background-rgb: 10 10 15;--foreground-rgb: 232 232 237;--card-rgb: 18 18 24;--popover-rgb: 26 26 36;--primary-rgb: 0 217 255;--secondary-rgb: 30 30 42;--muted-rgb: 37 37 48;--muted-foreground-rgb: 138 138 153;--accent-rgb: 45 45 63;--accent-foreground-rgb: 196 167 255;--destructive-rgb: 255 56 100;--border-rgb: 37 37 48;--sidebar-rgb: 15 15 22;--status-idle-rgb: 138 138 153;--status-working-rgb: 95 255 135;--status-error-rgb: 255 56 100;--status-success-rgb: 95 255 135;--universe-ateam-rgb: 255 107 53;--universe-thundercats-rgb: 255 208 0;--universe-gijoe-rgb: 95 255 135;--universe-ghostbusters-rgb: 196 167 255}.status-working-ring{animation:status-pulse 2s ease-in-out infinite}.status-error-dot{animation:status-blink 1s linear infinite}.text-glow-cyan{text-shadow:var(--glow-cyan)}@keyframes status-pulse{0%,to{transform:scale(1);opacity:.4}50%{transform:scale(1.65);opacity:0}}@keyframes status-blink{0%,49%,to{opacity:1}50%,75%{opacity:.35}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:#0f0f16bf}::-webkit-scrollbar-thumb{border:2px solid rgba(15,15,22,.9);border-radius:9999px;background:#8a8a9952}::-webkit-scrollbar-thumb:hover{background:#8a8a997a}.placeholder\:text-muted-foreground\/30::-moz-placeholder{color:rgb(var(--muted-foreground-rgb) / .3)}.placeholder\:text-muted-foreground\/30::placeholder{color:rgb(var(--muted-foreground-rgb) / .3)}.placeholder\:text-muted-foreground\/35::-moz-placeholder{color:rgb(var(--muted-foreground-rgb) / .35)}.placeholder\:text-muted-foreground\/35::placeholder{color:rgb(var(--muted-foreground-rgb) / .35)}.placeholder\:text-muted-foreground\/40::-moz-placeholder{color:rgb(var(--muted-foreground-rgb) / .4)}.placeholder\:text-muted-foreground\/40::placeholder{color:rgb(var(--muted-foreground-rgb) / .4)}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-accent-foreground\/40:hover{border-color:rgb(var(--accent-foreground-rgb) / .4)}.hover\:border-destructive\/40:hover{border-color:rgb(var(--destructive-rgb) / .4)}.hover\:border-primary\/40:hover{border-color:rgb(var(--primary-rgb) / .4)}.hover\:border-primary\/50:hover{border-color:rgb(var(--primary-rgb) / .5)}.hover\:bg-card\/80:hover{background-color:rgb(var(--card-rgb) / .8)}.hover\:bg-destructive\/10:hover{background-color:rgb(var(--destructive-rgb) / .1)}.hover\:bg-destructive\/25:hover{background-color:rgb(var(--destructive-rgb) / .25)}.hover\:bg-destructive\/5:hover{background-color:rgb(var(--destructive-rgb) / .05)}.hover\:bg-destructive\/80:hover{background-color:rgb(var(--destructive-rgb) / .8)}.hover\:bg-primary\/25:hover{background-color:rgb(var(--primary-rgb) / .25)}.hover\:bg-primary\/5:hover{background-color:rgb(var(--primary-rgb) / .05)}.hover\:bg-white\/5:hover{background-color:#ffffff0d}.hover\:bg-white\/\[0\.02\]:hover{background-color:#ffffff05}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:bg-white\/\[0\.04\]:hover{background-color:#ffffff0a}.hover\:text-accent-foreground:hover{--tw-text-opacity: 1;color:rgb(var(--accent-foreground-rgb) / var(--tw-text-opacity, 1))}.hover\:text-destructive:hover{--tw-text-opacity: 1;color:rgb(var(--destructive-rgb) / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{--tw-text-opacity: 1;color:rgb(var(--foreground-rgb) / var(--tw-text-opacity, 1))}.hover\:text-muted-foreground:hover{--tw-text-opacity: 1;color:rgb(var(--muted-foreground-rgb) / var(--tw-text-opacity, 1))}.hover\:text-primary:hover{--tw-text-opacity: 1;color:rgb(var(--primary-rgb) / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width: 768px){.md\:bottom-10{bottom:2.5rem}.md\:right-4{right:1rem}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-\[360px\]{width:360px}.md\:w-\[420px\]{width:420px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:gap-4{gap:1rem}.md\:p-5{padding:1.25rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.md\:pb-0{padding-bottom:0}}@media (min-width: 1024px){.lg\:grid-cols-\[160px_minmax\(0\,1fr\)_170px\]{grid-template-columns:160px minmax(0,1fr) 170px}.lg\:grid-cols-\[1fr_220px\]{grid-template-columns:1fr 220px}.lg\:grid-rows-\[auto_minmax\(180px\,0\.7fr\)_minmax\(0\,1fr\)\]{grid-template-rows:auto minmax(180px,.7fr) minmax(0,1fr)}}@media (min-width: 1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-\[340px_minmax\(0\,1fr\)\]{grid-template-columns:340px minmax(0,1fr)}.xl\:grid-cols-\[360px_minmax\(0\,1fr\)\]{grid-template-columns:360px minmax(0,1fr)}.xl\:grid-cols-\[minmax\(0\,1fr\)_360px\]{grid-template-columns:minmax(0,1fr) 360px}}