@quanthermes/hermes-web-ui 0.6.12 → 0.6.13

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 (41) hide show
  1. package/bin/hermes-web-ui.mjs +7 -0
  2. package/dist/client/assets/js/{ChannelsView-BAbGxkKW.js → ChannelsView-BduiL1-M.js} +1 -1
  3. package/dist/client/assets/js/{ChatView-hdWG7dhS.js → ChatView-C-84i0a3.js} +1 -1
  4. package/dist/client/assets/js/{CodingAgentsView-BB79rLb_.js → CodingAgentsView-Cu5bfdCo.js} +1 -1
  5. package/dist/client/assets/js/{DevicesView-DEdHwkrV.js → DevicesView-BwVqTyuH.js} +1 -1
  6. package/dist/client/assets/js/{FileRenameModal-CdKXqr0a.js → FileRenameModal-DMqVjoLN.js} +1 -1
  7. package/dist/client/assets/js/{FilesView-C49jsfxy.js → FilesView-Ce30F1_8.js} +1 -1
  8. package/dist/client/assets/js/{GroupChatView-DwL-zIjT.js → GroupChatView-BQqM5noE.js} +1 -1
  9. package/dist/client/assets/js/{HistoryMessageList-B1ORl6-d.js → HistoryMessageList-B3TsU-9g.js} +1 -1
  10. package/dist/client/assets/js/{HistoryView-CdlRAUh5.js → HistoryView-qhTXEU5G.js} +1 -1
  11. package/dist/client/assets/js/{JobsView-BPZ4Wv0y.js → JobsView-BszCmau_.js} +1 -1
  12. package/dist/client/assets/js/{KanbanView-UHzayv3c.js → KanbanView-BMa_FMqS.js} +1 -1
  13. package/dist/client/assets/js/{LoginView-BYrZGFRC.js → LoginView-v4Lvgu2R.js} +1 -1
  14. package/dist/client/assets/js/{LogsView-CyfCeIeY.js → LogsView-CuwioOCX.js} +1 -1
  15. package/dist/client/assets/js/{MarkdownRenderer-D-IgakCO.js → MarkdownRenderer-2bwbBjlK.js} +1 -1
  16. package/dist/client/assets/js/{McpManagerView-DMbmKtiH.js → McpManagerView-BDJSjkHx.js} +1 -1
  17. package/dist/client/assets/js/{MemoryView-iYE-K13x.js → MemoryView-rYoZbfMb.js} +1 -1
  18. package/dist/client/assets/js/{MessageItem-Be7fqF3P.js → MessageItem-OSBjfS2l.js} +1 -1
  19. package/dist/client/assets/js/{ModelsView-XRIIk2f7.js → ModelsView-DGPA2heM.js} +1 -1
  20. package/dist/client/assets/js/{OutlinePanel-BSPx9YaI.js → OutlinePanel-CN0TVZ0B.js} +1 -1
  21. package/dist/client/assets/js/{PerformanceView-m3deuRba.js → PerformanceView-0GmZ2GXR.js} +1 -1
  22. package/dist/client/assets/js/{PluginsView-BBrFPfSn.js → PluginsView-D6XEulKx.js} +1 -1
  23. package/dist/client/assets/js/{ProfilesView-G_eYB34O.js → ProfilesView-CCPI-DaB.js} +1 -1
  24. package/dist/client/assets/js/{SettingRow-wqcLQ0FL.js → SettingRow-B0WJ-Iqa.js} +1 -1
  25. package/dist/client/assets/js/{SettingsView-DMOWr41T.js → SettingsView-BaZ_P8Wu.js} +1 -1
  26. package/dist/client/assets/js/{SkillsUsageView-fn3jivrH.js → SkillsUsageView-BJVHpo4D.js} +1 -1
  27. package/dist/client/assets/js/{SkillsView-CXDdZj7R.js → SkillsView-vhxQVIz8.js} +1 -1
  28. package/dist/client/assets/js/{TerminalPanel-CqIASgSb.js → TerminalPanel-C50X3--t.js} +1 -1
  29. package/dist/client/assets/js/{TerminalView-ycEOrgth.js → TerminalView-1qIvfZKj.js} +1 -1
  30. package/dist/client/assets/js/{UsageView-BhNclgOH.js → UsageView-CLUP9AqF.js} +1 -1
  31. package/dist/client/assets/js/{VersionPreviewView-DoG0hdD2.js → VersionPreviewView-C9I3ZH13.js} +1 -1
  32. package/dist/client/assets/js/{VirtualMessageList-B_teFrlt.js → VirtualMessageList-D6BvQLbe.js} +1 -1
  33. package/dist/client/assets/js/{_plugin-vue_export-helper-D4mtpdbl.js → _plugin-vue_export-helper-CtZk2OSc.js} +2 -2
  34. package/dist/client/assets/js/{index-BHU-82RO.js → index-DyLZQAQu.js} +1 -1
  35. package/dist/client/assets/js/{models-BX7pr_Gd.js → models-CjHxxDse.js} +1 -1
  36. package/dist/client/assets/js/{session-browser-prefs-OR-qaA1z.js → session-browser-prefs-kGpZZDQo.js} +1 -1
  37. package/dist/client/assets/js/{skills-fBzB8FGc.js → skills-CDjYTDMo.js} +1 -1
  38. package/dist/client/assets/js/{system-vQTkarwT.js → system-Pg8JEuA6.js} +1 -1
  39. package/dist/client/index.html +3 -3
  40. package/dist/server/index.js +3 -3
  41. package/package.json +1 -1
@@ -1 +1 @@
1
- import{n as Y}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as o,$t as i,An as T,At as be,Bn as S,Bt as we,Cn as se,E as Te,Jn as t,M as es,O as as,On as Ee,P as ts,Qt as R,W as Ke,Xn as ne,Yt as Q,an as L,bn as ss,en as Z,ft as _e,g as Ne,gt as ns,it as ls,nn as h,on as w,sn as Ce,t as $e,tn as A,vt as is,wt as G,xn as k,yn as rs,z as De}from"./ui-vendor-DNWaqYj5.js";import{_ as os,c as Be,f as Ct,g as us,l as Ae,m as $t,p as ds}from"./vue-vendor-VX6KvV1_.js";import{d as P,l as Bt,n as Fe,o as cs,s as vs,t as ze}from"./_plugin-vue_export-helper-D4mtpdbl.js";import{J as fs,X as ms,Y as ks,q as ps}from"./index-BHU-82RO.js";import{n as _s,t as bs}from"./HistoryMessageList-B1ORl6-d.js";var Me,Ve,We,Ge,Ye,At,je=Y((()=>{we(),$e(),Be(),fs(),Me={class:"card-title"},Ve={class:"card-meta"},We={class:"meta-tag assignee-tag"},Ge={class:"meta-time"},Ye={key:0,class:"card-body-preview"},At=Ce({__name:"KanbanTaskCard",props:{task:{},assigneeAvatar:{}},emits:["click"],setup(e,{emit:l}){const f=e,y=l,{t:c}=Ae(),v=R(()=>{const s=Date.now()/1e3-f.task.created_at;return s<60?c("kanban.card.timeAgo.justNow"):s<3600?c("kanban.card.timeAgo.minutes",{count:Math.floor(s/60)}):s<86400?c("kanban.card.timeAgo.hours",{count:Math.floor(s/3600)}):c("kanban.card.timeAgo.days",{count:Math.floor(s/86400)})}),$=R(()=>f.task.priority>=3?"high":f.task.priority===2?"medium":"low"),B=R(()=>c(`kanban.card.priority.${$.value}`));return(s,x)=>(k(),h("div",{class:ne(["kanban-task-card",`status-${e.task.status}`]),onClick:x[0]||(x[0]=I=>y("click",e.task.id))},[i("div",Me,o(e.task.title),1),i("div",Ve,[e.task.assignee?(k(),Z(t(ls),{key:0,trigger:"hover"},{trigger:T(()=>[i("span",We,[w(ps,{class:"assignee-profile-avatar",name:e.task.assignee,avatar:e.assigneeAvatar,size:18,"aria-hidden":"true"},null,8,["name","avatar"]),i("span",null,o(e.task.assignee),1)])]),default:T(()=>[L(" "+o(t(c)("kanban.card.assigneeTooltip")),1)]),_:1})):A("",!0),e.task.priority>=2?(k(),h("span",{key:1,class:ne(["meta-tag priority-tag",$.value])},o(B.value),3)):A("",!0),i("span",Ge,o(v.value),1)]),e.task.body?(k(),h("div",Ye,o(e.task.body.slice(0,80))+o(e.task.body.length>80?"...":""),1)):A("",!0)],2))}})})),ys=Y((()=>{})),Pt,hs=Y((()=>{je(),je(),ys(),Fe(),Pt=ze(At,[["__scopeId","data-v-ec73b201"]])}));function gs(e){return e?.trim()||"default"}function ws(){try{return localStorage.getItem("hermes_active_profile_name")}catch{return null}}function E(e,l){const f=l.toString();return f?`${e}?${f}`:e}function N(e){const l=new URLSearchParams;return l.set("board",gs(e)),l}function He(e){return e?e.startsWith("https")?"wss:":"ws:":location.protocol==="https:"?"wss:":"ws:"}function Ss(e){const l=vs(),f=N(e?.board),y=cs();y&&f.set("token",y);const c=ws();c&&f.set("profile",c);const v=`/api/hermes/kanban/events?${f.toString()}`;if(l)return`${He(l)}//${new URL(l).host}${v}`;const $=location.host;return`${He()}//${$}${v}`}function Ts(e){return new WebSocket(Ss(e))}async function Cs(e){const l=new URLSearchParams;return e?.includeArchived&&l.set("includeArchived","true"),(await P(E("/api/hermes/kanban/boards",l))).boards}async function $s(e){return(await P("/api/hermes/kanban/boards",{method:"POST",body:JSON.stringify(e)})).board}async function Bs(e){return P(`/api/hermes/kanban/boards/${encodeURIComponent(e)}`,{method:"DELETE"})}async function As(){return(await P("/api/hermes/kanban/capabilities")).capabilities}async function Ps(e){const l=N(e?.board);return e?.status&&l.set("status",e.status),e?.assignee&&l.set("assignee",e.assignee),e?.tenant&&l.set("tenant",e.tenant),e?.includeArchived&&l.set("includeArchived","true"),(await P(E("/api/hermes/kanban",l))).tasks}async function Qe(e,l){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}`,N(l?.board)))}async function Rs(e,l){return(await P(E("/api/hermes/kanban",N(l?.board)),{method:"POST",body:JSON.stringify(e)})).task}async function xs(e,l,f){return P(E("/api/hermes/kanban/complete",N(f?.board)),{method:"POST",body:JSON.stringify({task_ids:e,summary:l})})}async function Is(e,l,f){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/block`,N(f?.board)),{method:"POST",body:JSON.stringify({reason:l})})}async function Us(e,l){return P(E("/api/hermes/kanban/unblock",N(l?.board)),{method:"POST",body:JSON.stringify({task_ids:e})})}async function Os(e,l,f){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/assign`,N(f?.board)),{method:"POST",body:JSON.stringify({profile:l})})}async function Es(e,l,f){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/comments`,N(f?.board)),{method:"POST",body:JSON.stringify(l)})}async function Ns(e,l){return P(E("/api/hermes/kanban/links",N(l?.board)),{method:"POST",body:JSON.stringify(e)})}async function Ks(e,l){const f=N(l?.board);return f.set("parent_id",e.parent_id),f.set("child_id",e.child_id),P(E("/api/hermes/kanban/links",f),{method:"DELETE"})}async function Ds(e,l){return P(E("/api/hermes/kanban/tasks/bulk",N(l?.board)),{method:"POST",body:JSON.stringify(e)})}async function Fs(e,l){const f=N(l?.board);return l?.tail!==void 0&&f.set("tail",String(l.tail)),P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/log`,f))}async function zs(e){const l=N(e?.board);return e?.task&&l.set("task",e.task),e?.severity&&l.set("severity",e.severity),(await P(E("/api/hermes/kanban/diagnostics",l))).diagnostics}async function qs(e,l){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/reclaim`,N(l?.board)),{method:"POST",body:JSON.stringify({reason:l?.reason})})}async function Ls(e,l,f){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/reassign`,N(f?.board)),{method:"POST",body:JSON.stringify({profile:l,reclaim:f?.reclaim,reason:f?.reason})})}async function Js(e,l){return(await P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/specify`,N(l?.board)),{method:"POST",body:JSON.stringify({author:l?.author})})).results}async function Ms(e){return(await P(E("/api/hermes/kanban/dispatch",N(e?.board)),{method:"POST",body:JSON.stringify({dryRun:e?.dryRun,max:e?.max,failureLimit:e?.failureLimit})})).result}async function Vs(e){return(await P(E("/api/hermes/kanban/stats",N(e?.board)))).stats}async function Ws(e){return(await P(E("/api/hermes/kanban/assignees",N(e?.board)))).assignees}var Rt=Y((()=>{Bt()}));function Gs(e){if(typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}function Ys(e,l){if(!(typeof window>"u"))try{window.localStorage.setItem(e,l)}catch{}}function Ue(e){const l=e?.trim().toLowerCase();return l&&xt.test(l)?l:re}var Oe,re,xt,Pe,qe=Y((()=>{os(),we(),Rt(),Oe="hermes.kanban.selectedBoard",re="default",xt=/^[a-z0-9][a-z0-9_-]{0,63}$/,Pe=us("kanban",()=>{const e=S([]),l=S(null),f=S([]),y=S([]),c=S(null),v=S(!1),$=S(!1),B=S(null),s=S(Ue(Gs(Oe))),x=S(null),I=S(null);let U=0,D=0,J=0,K=0,C=0,O=0,ee=0,j=null,F=null,M=null,W=!1;const ve=R(()=>{const a=y.value.filter(n=>!n.archived);return a.some(n=>n.slug==="default")?a:[{slug:re,name:"Default",description:"",icon:"",color:"",created_at:null,archived:!1,counts:{},total:0},...a]});function ae(a){if(!c.value)return!1;const n=c.value.capabilities?.find(r=>r.key===a);return n?n.status==="supported":c.value.missing?.includes(a)?!1:c.value.supports?.[a]===!0}function z(a){if(!ae(a))throw new Error(`Kanban capability "${a}" is not supported by the current Hermes backend`)}function oe(a,n){const r=c.value?.capabilities?.find(p=>p.key===a);return r?n.includes(r.status):n.includes("supported")?ae(a):!1}function ye(a,n){if(!oe(a,n))throw new Error(`Kanban capability "${a}" is not available with the required status`)}function X(a){return ve.value.some(n=>n.slug===a)}function le(a){const n=Ue(a);return y.value.length>0&&!X(n)?re:n}function fe(){e.value=[],l.value=null,f.value=[]}function ue(){F&&clearTimeout(F),M&&clearTimeout(M),F=null,M=null}function de(){if(!j)return;const a=j;j=null,a.onclose=null,a.onerror=null,a.onmessage=null;try{a.close()}catch{}}function me(){W=!1,ee++,ue(),de()}function _(a,n,r){M&&clearTimeout(M),M=setTimeout(()=>{!W||r!==ee||n!==U||a!==s.value||Promise.all([d(),te(!0),V(),pe()])},100)}function g(a,n,r){F&&clearTimeout(F),F=setTimeout(()=>{!W||r!==ee||n!==U||a!==s.value||m(a,n,r)},3e3)}function m(a,n,r){de();let p;try{p=Ts({board:a})}catch(q){console.error("Failed to open kanban event stream:",q),g(a,n,r);return}j=p,p.onmessage=q=>{if(!(!W||r!==ee||n!==U||a!==s.value))try{JSON.parse(String(q.data))?.type==="event"&&_(a,n,r)}catch{_(a,n,r)}},p.onerror=()=>{j===p&&console.error("Kanban event stream error")},p.onclose=()=>{j===p&&(j=null,g(a,n,r))}}function ce(){const a=c.value?.capabilities?.find(n=>n.key==="events")?.status;return a==="supported"||a==="partial"||ae("events")}function he(){if(!ce())return!1;W=!0;const a=++ee,n=U,r=s.value;return ue(),m(r,n,a),!0}function Re(){W&&he()}function ke(a){const n=le(a),r=s.value!==n;return s.value=n,Ys(Oe,n),B.value=null,r&&(fe(),U++,Re()),n}function Se(a){const n=Ue(a),r=le(n),p=r!==n;return ke(r),p&&(B.value=`Board "${n}" is unavailable; fell back to "${r}".`),{board:r,recovered:p}}function u(a){return{seq:a(),generation:U,board:s.value}}function b(a,n,r,p){return a===p&&n===U&&r===s.value}async function d(a=!1){const n=++D;$.value=!0;try{const r=await Cs({includeArchived:a});if(n!==D)return;y.value=r,le(s.value)!==s.value&&Se(s.value)}catch(r){n===D&&console.error("Failed to fetch kanban boards:",r)}finally{n===D&&($.value=!1)}}async function H(){try{c.value=await As()}catch(a){console.error("Failed to fetch kanban capabilities:",a)}}async function ge(a){const n=await $s(a);return await d(),ke(n.slug),await Ie(),n}async function xe(){const a=s.value;if(a==="default")throw new Error("Cannot archive the default kanban board");await Bs(a),await d(),ke(re),await Ie()}async function te(a=!1){const{seq:n,generation:r,board:p}=u(()=>++J),q=a?0:++O;a||(v.value=!0);try{const ie=await Ps({board:p,status:x.value||void 0,assignee:I.value||void 0,includeArchived:!0});b(n,r,p,J)&&(e.value=ie)}catch(ie){b(n,r,p,J)&&console.error("Failed to fetch kanban tasks:",ie)}finally{!a&&q===O&&(v.value=!1)}}async function V(){const{seq:a,generation:n,board:r}=u(()=>++K);try{const p=await Vs({board:r});b(a,n,r,K)&&(l.value=p)}catch(p){b(a,n,r,K)&&console.error("Failed to fetch kanban stats:",p)}}async function pe(){const{seq:a,generation:n,board:r}=u(()=>++C);try{const p=await Ws({board:r});b(a,n,r,C)&&(f.value=p)}catch(p){b(a,n,r,C)&&console.error("Failed to fetch kanban assignees:",p)}}async function Kt(a){const n=s.value,r=await Rs(a,{board:n});return n===s.value&&(e.value.unshift(r),await Promise.all([V(),d()])),r}async function Dt(a,n){const r=s.value;if(await xs(a,n,{board:r}),r===s.value){for(const p of a){const q=e.value.find(ie=>ie.id===p);q&&(q.status="done")}await Promise.all([V(),d()])}}async function Ft(a,n){const r=s.value;if(await Is(a,n,{board:r}),r===s.value){const p=e.value.find(q=>q.id===a);p&&(p.status="blocked"),await Promise.all([V(),d()])}}async function zt(a){const n=s.value;if(await Us(a,{board:n}),n===s.value){for(const r of a){const p=e.value.find(q=>q.id===r);p&&(p.status="ready")}await Promise.all([V(),d()])}}async function qt(a,n){const r=s.value;if(await Os(a,n,{board:r}),r===s.value){const p=e.value.find(q=>q.id===a);p&&(p.assignee=n),await Promise.all([V(),pe()])}}async function Lt(a,n,r){return z("commentsWrite"),Es(a,{body:n,author:r},{board:s.value})}async function Jt(a,n){z("links");const r=s.value,p=await Ns({parent_id:a,child_id:n},{board:r});return r===s.value&&await Promise.all([te(!0),V(),d()]),p}async function Mt(a,n){z("links");const r=s.value,p=await Ks({parent_id:a,child_id:n},{board:r});return r===s.value&&await Promise.all([te(!0),V(),d()]),p}async function Vt(a){ye("bulk",["supported","partial"]);const n=s.value,r=await Ds(a,{board:n});return n===s.value&&await Promise.all([te(!0),V(),d(),pe()]),r}async function Wt(a,n){return z("taskLog"),Fs(a,{board:s.value,tail:n})}async function Gt(a={}){return z("diagnostics"),zs({...a,board:s.value})}async function Yt(a,n){z("reclaim");const r=s.value,p=await qs(a,{board:r,reason:n});return r===s.value&&await Promise.all([te(!0),V(),d()]),p}async function jt(a,n,r={}){z("reassign");const p=s.value,q=await Ls(a,n,{board:p,...r});if(p===s.value){const ie=e.value.find(Zt=>Zt.id===a);ie&&(ie.assignee=n==="none"?null:n),await Promise.all([V(),pe()])}return q}async function Ht(a,n){z("specify");const r=s.value,p=await Js(a,{board:r,author:n});return r===s.value&&await Promise.all([te(!0),V(),d()]),p}async function Qt(a={}){z("dispatch");const n=s.value,r=await Ms({...a,board:n});return n===s.value&&await Promise.all([te(!0),V(),d()]),r}function Xt(a,n){a==="status"?x.value=n:I.value=n}async function Ie(){await Promise.all([d(),te(),V(),pe()])}return{tasks:e,stats:l,assignees:f,boards:y,capabilities:c,activeBoards:ve,isCapabilitySupported:ae,loading:v,boardsLoading:$,boardWarning:B,selectedBoard:s,filterStatus:x,filterAssignee:I,fetchBoards:d,fetchCapabilities:H,fetchTasks:te,fetchStats:V,fetchAssignees:pe,createTask:Kt,createBoard:ge,archiveSelectedBoard:xe,completeTasks:Dt,blockTask:Ft,unblockTasks:zt,assignTask:qt,addComment:Lt,linkTasks:Jt,unlinkTasks:Mt,bulkUpdateTasks:Vt,getTaskLog:Wt,getDiagnostics:Gt,reclaimTask:Yt,reassignTask:jt,specifyTask:Ht,dispatch:Qt,setFilter:Xt,setSelectedBoard:ke,startEventStream:he,stopEventStream:me,recoverSelectedBoard:Se,resolveAvailableBoard:le,clearBoardScopedState:fe,refreshAll:Ie}})}));function Le(e,l={}){const f=l.default||0;return e.map(y=>y.name!=="default"||y.counts?y:{...y,counts:{total:f}})}var js,Je=Y((()=>{js="default"})),Xe,Ze,ea,aa,ta,sa,na,la,ia,ra,oa,ua,da,ca,va,fa,ma,ka,pa,_a,ba,ya,ha,ga,wa,Sa,Ta,Ca,$a,Ba,Aa,Pa,Ra,xa,Ia,Ua,Oa,Ea,Na,Ka,Da,Fa,za,qa,La,Ja,Ma,Va,Wa,Ga,Ya,ja,Ha,Qa,Xa,Za,et,at,tt,st,nt,lt,it,rt,It,ot=Y((()=>{we(),$e(),Be(),Ct(),Bt(),Rt(),qe(),Je(),_s(),Xe={class:"detail-section"},Ze={class:"detail-row"},ea={class:"detail-label"},aa={class:"detail-row"},ta={class:"detail-value task-id-value"},sa={key:0,class:"detail-row"},na={class:"detail-value"},la=["onClick"],ia={key:1,class:"detail-row"},ra={class:"detail-value"},oa=["onClick"],ua={class:"detail-row"},da={class:"detail-label"},ca={class:"detail-value"},va={class:"detail-row"},fa={class:"detail-label"},ma={class:"detail-value"},ka={class:"detail-row"},pa={class:"detail-label"},_a={class:"detail-value"},ba={class:"detail-row"},ya={class:"detail-label"},ha={class:"detail-value"},ga={key:2,class:"detail-row"},wa={class:"detail-label"},Sa={class:"detail-value"},Ta={key:3,class:"detail-row"},Ca={class:"detail-label"},$a={class:"detail-value"},Ba={key:0,class:"detail-section"},Aa={class:"section-title"},Pa={class:"detail-body"},Ra={key:1,class:"detail-section"},xa={class:"section-title"},Ia={key:2,class:"detail-section"},Ua={class:"section-title"},Oa={class:"action-group"},Ea={key:1,class:"complete-input"},Na={key:1,class:"block-input"},Ka={key:0,class:"assign-group"},Da={key:3,class:"detail-section"},Fa={key:0,class:"session-list"},za=["onClick"],qa={class:"session-title"},La={class:"session-meta"},Ja={key:1,class:"column-empty"},Ma={key:4,class:"detail-section"},Va={class:"section-title"},Wa={class:"run-header"},Ga={class:"run-profile"},Ya={class:"run-time"},ja={key:0,class:"run-summary"},Ha={key:1,class:"run-error"},Qa={key:5,class:"detail-section"},Xa={class:"section-title"},Za={class:"comment-header"},et={class:"comment-author"},at={class:"comment-time"},tt={class:"comment-body"},st={key:6,class:"detail-section"},nt={class:"section-title"},lt={class:"event-kind"},it={class:"event-time"},rt={class:"messages-modal-body"},It=Ce({__name:"KanbanTaskDrawer",props:{taskId:{}},emits:["close","updated","navigate"],setup(e,{emit:l}){const f=e,y=l,{t:c}=Ae(),v=$t(),$=De(),B=Pe(),s=S(null),x=S(!1),I=S(null),U=S(""),D=S(!1),J=S(""),K=S(!1),C=S(!1),O=R(()=>s.value&&(s.value.task.result||s.value.latest_summary)||""),ee=R(()=>s.value?c(`kanban.columns.${s.value.task.status}`,s.value.task.status):""),j=R(()=>{const _=s.value?.task.status;return _!=="done"&&_!=="archived"}),F=S([]),M=S(!1),W=S(!1),ve=R(()=>s.value&&[...s.value.runs].reverse().find(_=>_.profile)?.profile||null);async function ae(){if(!s.value)return;const _=ve.value;if(_&&(W.value=!W.value,!!W.value)){M.value=!0;try{F.value=(await P(`/api/hermes/kanban/search-sessions?task_id=${encodeURIComponent(s.value.task.id)}&profile=${encodeURIComponent(_)}&board=${encodeURIComponent(B.selectedBoard)}`)).results}catch{F.value=[]}finally{M.value=!1}}}function z(){s.value?.session&&(C.value=!0)}const oe=R(()=>{const _=s.value?.session;return _?{id:_.id,title:_.title||"",source:_.source,messages:_.messages.filter(g=>g.role==="user"||g.role==="assistant").map(g=>({id:String(g.id),role:g.role,content:g.content,timestamp:g.timestamp})),createdAt:_.started_at,updatedAt:_.ended_at||_.started_at,model:_.model,messageCount:_.messages.length,endedAt:_.ended_at}:null}),ye=R(()=>Le(B.assignees,B.stats?.by_assignee||{}).map(_=>({label:_.name,value:_.name})));Ee(()=>[f.taskId,B.selectedBoard],async([_,g])=>{if(!_){s.value=null;return}x.value=!0;try{const m=await Qe(_,{board:g});f.taskId===_&&B.selectedBoard===g&&(s.value=m)}catch{f.taskId===_&&B.selectedBoard===g&&$.error(c("kanban.message.loadFailed"))}finally{f.taskId===_&&B.selectedBoard===g&&(x.value=!1)}},{immediate:!0});function X(_){return _?new Date(_*1e3).toLocaleString():"—"}async function le(){if(f.taskId){if(!K.value){K.value=!0;return}try{await B.completeTasks([f.taskId],J.value.trim()||void 0),$.success(c("kanban.message.taskCompleted")),K.value=!1,J.value="",y("updated"),y("close")}catch(_){$.error(_.message)}}}async function fe(){if(!(!f.taskId||!U.value.trim()))try{await B.blockTask(f.taskId,U.value.trim()),$.success(c("kanban.message.taskBlocked")),D.value=!1,U.value="",y("updated"),y("close")}catch(_){$.error(_.message)}}async function ue(){if(f.taskId)try{await B.unblockTasks([f.taskId]),$.success(c("kanban.message.taskUnblocked")),y("updated"),y("close")}catch(_){$.error(_.message)}}async function de(){if(!(!f.taskId||!I.value))try{await B.assignTask(f.taskId,I.value),$.success(c("kanban.message.taskAssigned")),I.value=null,s.value&&(s.value=await Qe(f.taskId,{board:B.selectedBoard})),y("updated")}catch(_){$.error(_.message)}}function me(_){y("updated"),y("navigate",_)}return(_,g)=>(k(),h(Q,null,[w(t(ts),{show:!!e.taskId,width:420,placement:"right","onUpdate:show":g[6]||(g[6]=m=>{m||y("close")})},{default:T(()=>[w(t(es),{title:s.value?.task.title||"",closable:""},{default:T(()=>[w(t(Ne),{show:x.value},{default:T(()=>[s.value?(k(),h(Q,{key:0},[i("div",Xe,[i("div",Ze,[i("span",ea,o(t(c)("kanban.detail.status")),1),i("span",{class:ne(["detail-value status-badge",s.value.task.status])},o(ee.value),3)]),i("div",aa,[g[8]||(g[8]=i("span",{class:"detail-label"},"Task ID",-1)),i("span",ta,o(s.value.task.id),1)]),s.value.parents?.length?(k(),h("div",sa,[g[9]||(g[9]=i("span",{class:"detail-label"},"Parent",-1)),i("span",na,[(k(!0),h(Q,null,se(s.value.parents,m=>(k(),h("a",{key:m,class:"task-link",onClick:ce=>me(m)},o(m),9,la))),128))])])):A("",!0),s.value.children?.length?(k(),h("div",ia,[g[10]||(g[10]=i("span",{class:"detail-label"},"Children",-1)),i("span",ra,[(k(!0),h(Q,null,se(s.value.children,m=>(k(),h("a",{key:m,class:"task-link",onClick:ce=>me(m)},o(m),9,oa))),128))])])):A("",!0),i("div",ua,[i("span",da,o(t(c)("kanban.detail.assignee")),1),i("span",ca,o(s.value.task.assignee||"—"),1)]),i("div",va,[i("span",fa,o(t(c)("kanban.detail.priority")),1),i("span",ma,o(s.value.task.priority),1)]),i("div",ka,[i("span",pa,o(t(c)("kanban.detail.tenant")),1),i("span",_a,o(s.value.task.tenant||"—"),1)]),i("div",ba,[i("span",ya,o(t(c)("kanban.detail.createdAt")),1),i("span",ha,o(X(s.value.task.created_at)),1)]),s.value.task.started_at?(k(),h("div",ga,[i("span",wa,o(t(c)("kanban.detail.startedAt")),1),i("span",Sa,o(X(s.value.task.started_at)),1)])):A("",!0),s.value.task.completed_at?(k(),h("div",Ta,[i("span",Ca,o(t(c)("kanban.detail.completedAt")),1),i("span",$a,o(X(s.value.task.completed_at)),1)])):A("",!0)]),s.value.task.body?(k(),h("div",Ba,[i("div",Aa,o(t(c)("kanban.form.body")),1),i("div",Pa,o(s.value.task.body),1)])):A("",!0),O.value?(k(),h("div",Ra,[i("div",xa,o(t(c)("kanban.detail.result")),1),i("div",{class:"result-summary",onClick:z},o(O.value),1)])):A("",!0),j.value?(k(),h("div",Ia,[i("div",Ua,o(t(c)("kanban.action.title")),1),i("div",Oa,[K.value?(k(),h("div",Ea,[w(t(be),{value:J.value,"onUpdate:value":g[1]||(g[1]=m=>J.value=m),size:"small",placeholder:t(c)("kanban.action.completeSummary")},null,8,["value","placeholder"]),w(t(G),{size:"small",type:"primary",onClick:le},{default:T(()=>[L(o(t(c)("common.ok")),1)]),_:1}),w(t(G),{size:"small",onClick:g[2]||(g[2]=m=>{K.value=!1,J.value=""})},{default:T(()=>[L(o(t(c)("common.cancel")),1)]),_:1})])):(k(),Z(t(G),{key:0,size:"small",onClick:g[0]||(g[0]=m=>K.value=!0)},{default:T(()=>[L(o(t(c)("kanban.action.complete")),1)]),_:1})),s.value.task.status==="blocked"?(k(),Z(t(G),{key:2,size:"small",onClick:ue},{default:T(()=>[L(o(t(c)("kanban.action.unblock")),1)]),_:1})):(k(),h(Q,{key:3},[D.value?(k(),h("div",Na,[w(t(be),{value:U.value,"onUpdate:value":g[4]||(g[4]=m=>U.value=m),size:"small",placeholder:t(c)("kanban.action.blockReason")},null,8,["value","placeholder"]),w(t(G),{size:"small",type:"primary",onClick:fe},{default:T(()=>[L(o(t(c)("common.ok")),1)]),_:1})])):(k(),Z(t(G),{key:0,size:"small",onClick:g[3]||(g[3]=m=>D.value=!0)},{default:T(()=>[L(o(t(c)("kanban.action.block")),1)]),_:1}))],64))]),s.value.task.status!=="running"?(k(),h("div",Ka,[w(t(_e),{value:I.value,"onUpdate:value":g[5]||(g[5]=m=>I.value=m),options:ye.value,size:"small",placeholder:t(c)("kanban.action.assignTo"),style:{flex:"1"}},null,8,["value","options","placeholder"]),w(t(G),{size:"small",disabled:!I.value,onClick:de},{default:T(()=>[L(o(t(c)("kanban.action.assign")),1)]),_:1},8,["disabled"])])):A("",!0)])):A("",!0),s.value.runs.length>0?(k(),h("div",Da,[i("div",{class:"section-title",style:{cursor:"pointer"},onClick:ae},[L(o(t(c)("kanban.detail.sessions"))+" ",1),M.value?(k(),Z(t(Ne),{key:0,size:12,style:{"margin-left":"6px"}})):A("",!0)]),W.value&&F.value.length>0?(k(),h("div",Fa,[(k(!0),h(Q,null,se(F.value,m=>(k(),h("div",{key:m.id,class:"session-item",onClick:ce=>t(v).push({name:"hermes.chat",query:{session:m.id}})},[i("div",qa,o(m.title||m.id),1),i("div",La,[i("span",null,o(m.source),1),i("span",null,o(m.model),1),i("span",null,o(X(m.started_at)),1)])],8,za))),128))])):A("",!0),W.value&&!M.value&&F.value.length===0?(k(),h("div",Ja,o(t(c)("kanban.detail.noSessions")),1)):A("",!0)])):A("",!0),s.value.runs.length>0?(k(),h("div",Ma,[i("div",Va,o(t(c)("kanban.detail.runs")),1),(k(!0),h(Q,null,se(s.value.runs,m=>(k(),h("div",{key:m.id,class:"run-item"},[i("div",Wa,[i("span",{class:ne(["run-status",m.status])},o(m.status),3),i("span",Ga,o(m.profile||"—"),1),i("span",Ya,o(X(m.started_at)),1)]),m.summary?(k(),h("div",ja,o(m.summary),1)):A("",!0),m.error?(k(),h("div",Ha,o(m.error),1)):A("",!0)]))),128))])):A("",!0),s.value.comments.length>0?(k(),h("div",Qa,[i("div",Xa,o(t(c)("kanban.detail.comments")),1),(k(!0),h(Q,null,se(s.value.comments,m=>(k(),h("div",{key:m.id,class:"comment-item"},[i("div",Za,[i("span",et,o(m.author),1),i("span",at,o(X(m.created_at)),1)]),i("div",tt,o(m.body),1)]))),128))])):A("",!0),s.value.events.length>0?(k(),h("div",st,[i("div",nt,o(t(c)("kanban.detail.events")),1),(k(!0),h(Q,null,se(s.value.events.slice(-10),m=>(k(),h("div",{key:m.id,class:"event-item"},[i("span",lt,o(m.kind),1),i("span",it,o(X(m.created_at)),1)]))),128))])):A("",!0)],64)):A("",!0)]),_:1},8,["show"])]),_:1},8,["title"])]),_:1},8,["show"]),oe.value?(k(),Z(t(Ke),{key:0,show:C.value,preset:"card",title:s.value?.task.title||"",style:{width:"900px",maxWidth:"calc(100vw - 48px)"},onClose:g[7]||(g[7]=m=>C.value=!1)},{default:T(()=>[i("div",rt,[w(bs,{session:oe.value},null,8,["session"])])]),_:1},8,["show","title"])):A("",!0)],64))}})})),Hs=Y((()=>{})),Ut,Qs=Y((()=>{ot(),ot(),Hs(),Fe(),Ut=ze(It,[["__scopeId","data-v-c8e190a1"]])})),Ot,ut=Y((()=>{we(),$e(),Be(),qe(),Je(),Ot=Ce({__name:"KanbanCreateForm",emits:["close","created"],setup(e,{emit:l}){const f=l,{t:y}=Ae(),c=De(),v=Pe(),$=S(""),B=S(""),s=S(null),x=S(null),I=S(!1),U=R(()=>[{label:y("kanban.card.priority.low"),value:1},{label:y("kanban.card.priority.medium"),value:2},{label:y("kanban.card.priority.high"),value:3}]),D=R(()=>Le(v.assignees,v.stats?.by_assignee||{}).map(K=>({label:K.name,value:K.name})));async function J(){if(!$.value.trim()){c.warning(y("kanban.form.titleRequired"));return}I.value=!0;try{await v.createTask({title:$.value.trim(),body:B.value.trim()||void 0,assignee:s.value||void 0,priority:x.value??void 0}),c.success(y("kanban.message.taskCreated")),f("created"),f("close")}catch(K){c.error(K.message)}finally{I.value=!1}}return(K,C)=>(k(),Z(t(Ke),{show:!0,preset:"dialog",title:t(y)("kanban.createTask"),style:{width:"480px"},onClose:C[5]||(C[5]=O=>f("close"))},{action:T(()=>[w(t(G),{onClick:C[4]||(C[4]=O=>f("close"))},{default:T(()=>[L(o(t(y)("common.cancel")),1)]),_:1}),w(t(G),{type:"primary",loading:I.value,onClick:J},{default:T(()=>[L(o(t(y)("common.create")),1)]),_:1},8,["loading"])]),default:T(()=>[w(t(as),{"label-placement":"top"},{default:T(()=>[w(t(Te),{label:t(y)("kanban.form.title")},{default:T(()=>[w(t(be),{value:$.value,"onUpdate:value":C[0]||(C[0]=O=>$.value=O),placeholder:t(y)("kanban.form.titlePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),w(t(Te),{label:t(y)("kanban.form.body")},{default:T(()=>[w(t(be),{value:B.value,"onUpdate:value":C[1]||(C[1]=O=>B.value=O),type:"textarea",rows:3,placeholder:t(y)("kanban.form.bodyPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),w(t(Te),{label:t(y)("kanban.form.assignee")},{default:T(()=>[w(t(_e),{value:s.value,"onUpdate:value":C[2]||(C[2]=O=>s.value=O),options:D.value,placeholder:t(y)("kanban.form.selectAssignee"),clearable:""},null,8,["value","options","placeholder"])]),_:1},8,["label"]),w(t(Te),{label:t(y)("kanban.form.priority")},{default:T(()=>[w(t(_e),{value:x.value,"onUpdate:value":C[3]||(C[3]=O=>x.value=O),options:U.value,placeholder:t(y)("kanban.form.selectPriority"),clearable:""},null,8,["value","options","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["title"]))}})})),Et,Xs=Y((()=>{ut(),ut(),Et=Ot})),dt,ct,vt,ft,mt,kt,pt,_t,bt,yt,ht,gt,wt,St,Nt,Tt=Y((()=>{we(),$e(),Be(),Ct(),hs(),Qs(),Xs(),qe(),ks(),Je(),dt={class:"kanban-view"},ct={class:"page-header"},vt={class:"header-title"},ft={class:"header-actions"},mt={key:0,class:"stats-bar"},kt=["aria-pressed","onClick"],pt={class:"stat-count"},_t={class:"stat-label"},bt=["aria-pressed"],yt={class:"stat-count"},ht={class:"stat-label"},gt={class:"kanban-board"},wt={key:0,class:"column-empty"},St={class:"board-form"},Nt=Ce({__name:"KanbanView",setup(e){const{t:l}=Ae(),f=ds(),y=$t(),c=De(),v=Pe(),$=ms(),B=S(!1),s=S(!1),x=S(null),I=S(""),U=S(""),D=S(!1),J=S(null),K=S(!1),C=["triage","todo","ready","running","blocked","done","archived"],O=S([...C]);function ee(u){return Array.isArray(u)?typeof u[0]=="string"?u[0]:null:typeof u=="string"?u:null}function j(){return ee(f.query.board)}async function F(u){j()!==u&&await y.replace({query:{...f.query,board:u}})}async function M(u,b=!0,d=!1){const H=v.selectedBoard,{board:ge,recovered:xe}=v.recoverSelectedBoard(u||v.selectedBoard||"default");x.value=null,B.value=!1,s.value=!1,b&&xe&&v.boardWarning&&c.warning(v.boardWarning),await F(ge),(d||ge!==H)&&await v.refreshAll()}function W(u){return`${l("kanban.stats.tasks")}: ${u}`}const ve=R(()=>v.activeBoards.map(u=>{const b=typeof u.total=="number"?u.total:0;return{label:`${l("kanban.title")}: ${u.icon?`${u.icon} `:""}${u.name||u.slug} · ${W(b)}`,value:u.slug}})),ae=R({get:()=>v.selectedBoard,set:u=>{M(u||"default")}}),z=R(()=>{const u={};for(const b of C)u[b]=v.tasks.filter(d=>d.status===b).sort((d,H)=>H.created_at-d.created_at);return u}),oe=R(()=>{const u=v.filterStatus;return u&&C.includes(u)?[u]:C}),ye=R(()=>Le(v.assignees,v.stats?.by_assignee||{})),X=R(()=>Object.fromEntries($.profiles.map(u=>[u.name,u.avatar||null]))),le=R(()=>[{label:l("kanban.allStatuses"),value:""},...C.map(u=>({label:l(`kanban.columns.${u}`,u),value:u}))]),fe=R(()=>[{label:l("kanban.allAssignees"),value:""},...ye.value.map(u=>({label:u.name,value:u.name}))]),ue=R({get:()=>v.filterStatus||"",set:u=>v.setFilter("status",u||null)}),de=R({get:()=>v.filterAssignee||"",set:u=>v.setFilter("assignee",u||null)});Ee(()=>f.query.board,async()=>{K.value&&await M(j(),!1)}),Ee(oe,u=>{O.value=[...u]},{immediate:!0}),rs(async()=>{await Promise.all([v.fetchBoards(),v.fetchCapabilities(),$.profiles.length===0?$.fetchProfiles():Promise.resolve()]),await M(j(),!0,!0),v.startEventStream(),K.value=!0,J.value=setInterval(()=>{document.visibilityState==="visible"&&Promise.all([v.fetchBoards(),v.fetchTasks(!0),v.fetchStats()])},15e3)}),ss(()=>{v.stopEventStream(),J.value&&clearInterval(J.value)});function me(u){x.value=u}function _(){x.value=null}async function g(){await Promise.all([v.fetchTasks(),v.fetchStats()])}function m(u){x.value=u}async function ce(){await v.fetchTasks()}async function he(u){v.setFilter("status",u),O.value=u?[u]:[...C],await v.fetchTasks()}async function Re(){await Promise.all([v.fetchTasks(),v.fetchStats(),v.fetchBoards()])}async function ke(){const u=I.value.trim();if(!u){c.warning(l("kanban.board.slugRequired"));return}D.value=!0;try{const b=await v.createBoard({slug:u,name:U.value.trim()||void 0});I.value="",U.value="",s.value=!1,await F(b.slug),c.success(l("kanban.board.created"))}catch(b){c.error(b.message)}finally{D.value=!1}}async function Se(){if(v.selectedBoard!=="default"&&window.confirm(l("kanban.board.archiveConfirm"))){D.value=!0;try{await v.archiveSelectedBoard(),await F(re),c.success(l("kanban.board.archived"))}catch(u){c.error(u.message)}finally{D.value=!1}}}return(u,b)=>(k(),h("div",dt,[i("header",ct,[i("h2",vt,o(t(l)("kanban.title")),1),i("div",ft,[w(t(_e),{value:ae.value,"onUpdate:value":b[0]||(b[0]=d=>ae.value=d),options:ve.value,loading:t(v).boardsLoading,size:"small",style:{width:"260px"}},null,8,["value","options","loading"]),w(t(G),{size:"small",loading:D.value,onClick:b[1]||(b[1]=d=>s.value=!0)},{default:T(()=>[L(o(t(l)("common.add")),1)]),_:1},8,["loading"]),w(t(G),{size:"small",secondary:"",disabled:t(v).selectedBoard===t(re),loading:D.value,onClick:Se},{default:T(()=>[L(o(t(l)("kanban.board.archive")),1)]),_:1},8,["disabled","loading"]),w(t(_e),{value:ue.value,"onUpdate:value":[b[2]||(b[2]=d=>ue.value=d),ce],options:le.value,size:"small",style:{width:"150px"}},null,8,["value","options"]),w(t(_e),{value:de.value,"onUpdate:value":[b[3]||(b[3]=d=>de.value=d),ce],options:fe.value,size:"small",style:{width:"170px"}},null,8,["value","options"]),w(t(G),{type:"primary",size:"small",onClick:b[4]||(b[4]=d=>B.value=!0)},{icon:T(()=>[...b[12]||(b[12]=[i("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[i("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),i("line",{x1:"5",y1:"12",x2:"19",y2:"12"})],-1)])]),default:T(()=>[L(" "+o(t(l)("kanban.createTask")),1)]),_:1})])]),t(v).stats?(k(),h("div",mt,[(k(),h(Q,null,se(C,d=>i("button",{key:d,type:"button",class:ne(["stat-chip",[d,{active:t(v).filterStatus===d}]]),"aria-pressed":t(v).filterStatus===d,onClick:H=>he(d)},[i("span",pt,o(t(v).stats.by_status[d]||0),1),i("span",_t,o(t(l)(`kanban.columns.${d}`,d)),1)],10,kt)),64)),i("button",{type:"button",class:ne(["stat-chip total",{active:!t(v).filterStatus}]),"aria-pressed":!t(v).filterStatus,onClick:b[5]||(b[5]=d=>he(null))},[i("span",yt,o(t(v).stats.total),1),i("span",ht,o(t(l)("kanban.stats.total")),1)],10,bt)])):A("",!0),w(t(Ne),{show:t(v).loading&&t(v).tasks.length===0},{default:T(()=>[i("div",gt,[w(t(is),{"expanded-names":O.value,"onUpdate:expandedNames":b[6]||(b[6]=d=>O.value=d)},{default:T(()=>[(k(!0),h(Q,null,se(oe.value,d=>(k(),Z(t(ns),{key:d,title:`${t(l)(`kanban.columns.${d}`,d)} (${z.value[d].length})`,name:d,class:ne(["kanban-column",`status-${d}`])},{header:T(()=>[i("span",{class:ne(["column-header",`status-${d}`])},[b[13]||(b[13]=i("span",{class:"status-dot","aria-hidden":"true"},null,-1)),i("span",null,o(t(l)(`kanban.columns.${d}`,d))+" ("+o(z.value[d].length)+")",1)],2)]),default:T(()=>[i("div",{class:ne(["task-list",`status-${d}`])},[(k(!0),h(Q,null,se(z.value[d],H=>(k(),Z(Pt,{key:H.id,task:H,"assignee-avatar":H.assignee&&X.value[H.assignee]||null,onClick:ge=>me(H.id)},null,8,["task","assignee-avatar","onClick"]))),128)),z.value[d].length===0?(k(),h("div",wt,o(t(l)("kanban.noTasks")),1)):A("",!0)],2)]),_:2},1032,["title","name","class"]))),128))]),_:1},8,["expanded-names"])])]),_:1},8,["show"]),w(Ut,{"task-id":x.value,onClose:_,onUpdated:g,onNavigate:m},null,8,["task-id"]),w(t(Ke),{show:s.value,"onUpdate:show":b[10]||(b[10]=d=>s.value=d),preset:"dialog",title:t(l)("kanban.board.create"),style:{width:"420px"}},{action:T(()=>[w(t(G),{onClick:b[9]||(b[9]=d=>s.value=!1)},{default:T(()=>[L(o(t(l)("common.cancel")),1)]),_:1}),w(t(G),{type:"primary",loading:D.value,onClick:ke},{default:T(()=>[L(o(t(l)("common.create")),1)]),_:1},8,["loading"])]),default:T(()=>[i("div",St,[w(t(be),{value:I.value,"onUpdate:value":b[7]||(b[7]=d=>I.value=d),placeholder:t(l)("kanban.board.slugPlaceholder")},null,8,["value","placeholder"]),w(t(be),{value:U.value,"onUpdate:value":b[8]||(b[8]=d=>U.value=d),placeholder:t(l)("kanban.board.namePlaceholder")},null,8,["value","placeholder"])])]),_:1},8,["show","title"]),B.value?(k(),Z(Et,{key:1,onClose:b[11]||(b[11]=d=>B.value=!1),onCreated:Re})):A("",!0)]))}})})),Zs=Y((()=>{})),en,an=Y((()=>{Tt(),Tt(),Zs(),Fe(),en=ze(Nt,[["__scopeId","data-v-ffdd8ed6"]])}));an();export{en as default};
1
+ import{n as Y}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as o,$t as i,An as T,At as be,Bn as S,Bt as we,Cn as se,E as Te,Jn as t,M as es,O as as,On as Ee,P as ts,Qt as R,W as Ke,Xn as ne,Yt as Q,an as L,bn as ss,en as Z,ft as _e,g as Ne,gt as ns,it as ls,nn as h,on as w,sn as Ce,t as $e,tn as A,vt as is,wt as G,xn as k,yn as rs,z as De}from"./ui-vendor-DNWaqYj5.js";import{_ as os,c as Be,f as Ct,g as us,l as Ae,m as $t,p as ds}from"./vue-vendor-VX6KvV1_.js";import{d as P,l as Bt,n as Fe,o as cs,s as vs,t as ze}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{J as fs,X as ms,Y as ks,q as ps}from"./index-DyLZQAQu.js";import{n as _s,t as bs}from"./HistoryMessageList-B3TsU-9g.js";var Me,Ve,We,Ge,Ye,At,je=Y((()=>{we(),$e(),Be(),fs(),Me={class:"card-title"},Ve={class:"card-meta"},We={class:"meta-tag assignee-tag"},Ge={class:"meta-time"},Ye={key:0,class:"card-body-preview"},At=Ce({__name:"KanbanTaskCard",props:{task:{},assigneeAvatar:{}},emits:["click"],setup(e,{emit:l}){const f=e,y=l,{t:c}=Ae(),v=R(()=>{const s=Date.now()/1e3-f.task.created_at;return s<60?c("kanban.card.timeAgo.justNow"):s<3600?c("kanban.card.timeAgo.minutes",{count:Math.floor(s/60)}):s<86400?c("kanban.card.timeAgo.hours",{count:Math.floor(s/3600)}):c("kanban.card.timeAgo.days",{count:Math.floor(s/86400)})}),$=R(()=>f.task.priority>=3?"high":f.task.priority===2?"medium":"low"),B=R(()=>c(`kanban.card.priority.${$.value}`));return(s,x)=>(k(),h("div",{class:ne(["kanban-task-card",`status-${e.task.status}`]),onClick:x[0]||(x[0]=I=>y("click",e.task.id))},[i("div",Me,o(e.task.title),1),i("div",Ve,[e.task.assignee?(k(),Z(t(ls),{key:0,trigger:"hover"},{trigger:T(()=>[i("span",We,[w(ps,{class:"assignee-profile-avatar",name:e.task.assignee,avatar:e.assigneeAvatar,size:18,"aria-hidden":"true"},null,8,["name","avatar"]),i("span",null,o(e.task.assignee),1)])]),default:T(()=>[L(" "+o(t(c)("kanban.card.assigneeTooltip")),1)]),_:1})):A("",!0),e.task.priority>=2?(k(),h("span",{key:1,class:ne(["meta-tag priority-tag",$.value])},o(B.value),3)):A("",!0),i("span",Ge,o(v.value),1)]),e.task.body?(k(),h("div",Ye,o(e.task.body.slice(0,80))+o(e.task.body.length>80?"...":""),1)):A("",!0)],2))}})})),ys=Y((()=>{})),Pt,hs=Y((()=>{je(),je(),ys(),Fe(),Pt=ze(At,[["__scopeId","data-v-ec73b201"]])}));function gs(e){return e?.trim()||"default"}function ws(){try{return localStorage.getItem("hermes_active_profile_name")}catch{return null}}function E(e,l){const f=l.toString();return f?`${e}?${f}`:e}function N(e){const l=new URLSearchParams;return l.set("board",gs(e)),l}function He(e){return e?e.startsWith("https")?"wss:":"ws:":location.protocol==="https:"?"wss:":"ws:"}function Ss(e){const l=vs(),f=N(e?.board),y=cs();y&&f.set("token",y);const c=ws();c&&f.set("profile",c);const v=`/api/hermes/kanban/events?${f.toString()}`;if(l)return`${He(l)}//${new URL(l).host}${v}`;const $=location.host;return`${He()}//${$}${v}`}function Ts(e){return new WebSocket(Ss(e))}async function Cs(e){const l=new URLSearchParams;return e?.includeArchived&&l.set("includeArchived","true"),(await P(E("/api/hermes/kanban/boards",l))).boards}async function $s(e){return(await P("/api/hermes/kanban/boards",{method:"POST",body:JSON.stringify(e)})).board}async function Bs(e){return P(`/api/hermes/kanban/boards/${encodeURIComponent(e)}`,{method:"DELETE"})}async function As(){return(await P("/api/hermes/kanban/capabilities")).capabilities}async function Ps(e){const l=N(e?.board);return e?.status&&l.set("status",e.status),e?.assignee&&l.set("assignee",e.assignee),e?.tenant&&l.set("tenant",e.tenant),e?.includeArchived&&l.set("includeArchived","true"),(await P(E("/api/hermes/kanban",l))).tasks}async function Qe(e,l){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}`,N(l?.board)))}async function Rs(e,l){return(await P(E("/api/hermes/kanban",N(l?.board)),{method:"POST",body:JSON.stringify(e)})).task}async function xs(e,l,f){return P(E("/api/hermes/kanban/complete",N(f?.board)),{method:"POST",body:JSON.stringify({task_ids:e,summary:l})})}async function Is(e,l,f){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/block`,N(f?.board)),{method:"POST",body:JSON.stringify({reason:l})})}async function Us(e,l){return P(E("/api/hermes/kanban/unblock",N(l?.board)),{method:"POST",body:JSON.stringify({task_ids:e})})}async function Os(e,l,f){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/assign`,N(f?.board)),{method:"POST",body:JSON.stringify({profile:l})})}async function Es(e,l,f){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/comments`,N(f?.board)),{method:"POST",body:JSON.stringify(l)})}async function Ns(e,l){return P(E("/api/hermes/kanban/links",N(l?.board)),{method:"POST",body:JSON.stringify(e)})}async function Ks(e,l){const f=N(l?.board);return f.set("parent_id",e.parent_id),f.set("child_id",e.child_id),P(E("/api/hermes/kanban/links",f),{method:"DELETE"})}async function Ds(e,l){return P(E("/api/hermes/kanban/tasks/bulk",N(l?.board)),{method:"POST",body:JSON.stringify(e)})}async function Fs(e,l){const f=N(l?.board);return l?.tail!==void 0&&f.set("tail",String(l.tail)),P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/log`,f))}async function zs(e){const l=N(e?.board);return e?.task&&l.set("task",e.task),e?.severity&&l.set("severity",e.severity),(await P(E("/api/hermes/kanban/diagnostics",l))).diagnostics}async function qs(e,l){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/reclaim`,N(l?.board)),{method:"POST",body:JSON.stringify({reason:l?.reason})})}async function Ls(e,l,f){return P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/reassign`,N(f?.board)),{method:"POST",body:JSON.stringify({profile:l,reclaim:f?.reclaim,reason:f?.reason})})}async function Js(e,l){return(await P(E(`/api/hermes/kanban/${encodeURIComponent(e)}/specify`,N(l?.board)),{method:"POST",body:JSON.stringify({author:l?.author})})).results}async function Ms(e){return(await P(E("/api/hermes/kanban/dispatch",N(e?.board)),{method:"POST",body:JSON.stringify({dryRun:e?.dryRun,max:e?.max,failureLimit:e?.failureLimit})})).result}async function Vs(e){return(await P(E("/api/hermes/kanban/stats",N(e?.board)))).stats}async function Ws(e){return(await P(E("/api/hermes/kanban/assignees",N(e?.board)))).assignees}var Rt=Y((()=>{Bt()}));function Gs(e){if(typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}function Ys(e,l){if(!(typeof window>"u"))try{window.localStorage.setItem(e,l)}catch{}}function Ue(e){const l=e?.trim().toLowerCase();return l&&xt.test(l)?l:re}var Oe,re,xt,Pe,qe=Y((()=>{os(),we(),Rt(),Oe="hermes.kanban.selectedBoard",re="default",xt=/^[a-z0-9][a-z0-9_-]{0,63}$/,Pe=us("kanban",()=>{const e=S([]),l=S(null),f=S([]),y=S([]),c=S(null),v=S(!1),$=S(!1),B=S(null),s=S(Ue(Gs(Oe))),x=S(null),I=S(null);let U=0,D=0,J=0,K=0,C=0,O=0,ee=0,j=null,F=null,M=null,W=!1;const ve=R(()=>{const a=y.value.filter(n=>!n.archived);return a.some(n=>n.slug==="default")?a:[{slug:re,name:"Default",description:"",icon:"",color:"",created_at:null,archived:!1,counts:{},total:0},...a]});function ae(a){if(!c.value)return!1;const n=c.value.capabilities?.find(r=>r.key===a);return n?n.status==="supported":c.value.missing?.includes(a)?!1:c.value.supports?.[a]===!0}function z(a){if(!ae(a))throw new Error(`Kanban capability "${a}" is not supported by the current Hermes backend`)}function oe(a,n){const r=c.value?.capabilities?.find(p=>p.key===a);return r?n.includes(r.status):n.includes("supported")?ae(a):!1}function ye(a,n){if(!oe(a,n))throw new Error(`Kanban capability "${a}" is not available with the required status`)}function X(a){return ve.value.some(n=>n.slug===a)}function le(a){const n=Ue(a);return y.value.length>0&&!X(n)?re:n}function fe(){e.value=[],l.value=null,f.value=[]}function ue(){F&&clearTimeout(F),M&&clearTimeout(M),F=null,M=null}function de(){if(!j)return;const a=j;j=null,a.onclose=null,a.onerror=null,a.onmessage=null;try{a.close()}catch{}}function me(){W=!1,ee++,ue(),de()}function _(a,n,r){M&&clearTimeout(M),M=setTimeout(()=>{!W||r!==ee||n!==U||a!==s.value||Promise.all([d(),te(!0),V(),pe()])},100)}function g(a,n,r){F&&clearTimeout(F),F=setTimeout(()=>{!W||r!==ee||n!==U||a!==s.value||m(a,n,r)},3e3)}function m(a,n,r){de();let p;try{p=Ts({board:a})}catch(q){console.error("Failed to open kanban event stream:",q),g(a,n,r);return}j=p,p.onmessage=q=>{if(!(!W||r!==ee||n!==U||a!==s.value))try{JSON.parse(String(q.data))?.type==="event"&&_(a,n,r)}catch{_(a,n,r)}},p.onerror=()=>{j===p&&console.error("Kanban event stream error")},p.onclose=()=>{j===p&&(j=null,g(a,n,r))}}function ce(){const a=c.value?.capabilities?.find(n=>n.key==="events")?.status;return a==="supported"||a==="partial"||ae("events")}function he(){if(!ce())return!1;W=!0;const a=++ee,n=U,r=s.value;return ue(),m(r,n,a),!0}function Re(){W&&he()}function ke(a){const n=le(a),r=s.value!==n;return s.value=n,Ys(Oe,n),B.value=null,r&&(fe(),U++,Re()),n}function Se(a){const n=Ue(a),r=le(n),p=r!==n;return ke(r),p&&(B.value=`Board "${n}" is unavailable; fell back to "${r}".`),{board:r,recovered:p}}function u(a){return{seq:a(),generation:U,board:s.value}}function b(a,n,r,p){return a===p&&n===U&&r===s.value}async function d(a=!1){const n=++D;$.value=!0;try{const r=await Cs({includeArchived:a});if(n!==D)return;y.value=r,le(s.value)!==s.value&&Se(s.value)}catch(r){n===D&&console.error("Failed to fetch kanban boards:",r)}finally{n===D&&($.value=!1)}}async function H(){try{c.value=await As()}catch(a){console.error("Failed to fetch kanban capabilities:",a)}}async function ge(a){const n=await $s(a);return await d(),ke(n.slug),await Ie(),n}async function xe(){const a=s.value;if(a==="default")throw new Error("Cannot archive the default kanban board");await Bs(a),await d(),ke(re),await Ie()}async function te(a=!1){const{seq:n,generation:r,board:p}=u(()=>++J),q=a?0:++O;a||(v.value=!0);try{const ie=await Ps({board:p,status:x.value||void 0,assignee:I.value||void 0,includeArchived:!0});b(n,r,p,J)&&(e.value=ie)}catch(ie){b(n,r,p,J)&&console.error("Failed to fetch kanban tasks:",ie)}finally{!a&&q===O&&(v.value=!1)}}async function V(){const{seq:a,generation:n,board:r}=u(()=>++K);try{const p=await Vs({board:r});b(a,n,r,K)&&(l.value=p)}catch(p){b(a,n,r,K)&&console.error("Failed to fetch kanban stats:",p)}}async function pe(){const{seq:a,generation:n,board:r}=u(()=>++C);try{const p=await Ws({board:r});b(a,n,r,C)&&(f.value=p)}catch(p){b(a,n,r,C)&&console.error("Failed to fetch kanban assignees:",p)}}async function Kt(a){const n=s.value,r=await Rs(a,{board:n});return n===s.value&&(e.value.unshift(r),await Promise.all([V(),d()])),r}async function Dt(a,n){const r=s.value;if(await xs(a,n,{board:r}),r===s.value){for(const p of a){const q=e.value.find(ie=>ie.id===p);q&&(q.status="done")}await Promise.all([V(),d()])}}async function Ft(a,n){const r=s.value;if(await Is(a,n,{board:r}),r===s.value){const p=e.value.find(q=>q.id===a);p&&(p.status="blocked"),await Promise.all([V(),d()])}}async function zt(a){const n=s.value;if(await Us(a,{board:n}),n===s.value){for(const r of a){const p=e.value.find(q=>q.id===r);p&&(p.status="ready")}await Promise.all([V(),d()])}}async function qt(a,n){const r=s.value;if(await Os(a,n,{board:r}),r===s.value){const p=e.value.find(q=>q.id===a);p&&(p.assignee=n),await Promise.all([V(),pe()])}}async function Lt(a,n,r){return z("commentsWrite"),Es(a,{body:n,author:r},{board:s.value})}async function Jt(a,n){z("links");const r=s.value,p=await Ns({parent_id:a,child_id:n},{board:r});return r===s.value&&await Promise.all([te(!0),V(),d()]),p}async function Mt(a,n){z("links");const r=s.value,p=await Ks({parent_id:a,child_id:n},{board:r});return r===s.value&&await Promise.all([te(!0),V(),d()]),p}async function Vt(a){ye("bulk",["supported","partial"]);const n=s.value,r=await Ds(a,{board:n});return n===s.value&&await Promise.all([te(!0),V(),d(),pe()]),r}async function Wt(a,n){return z("taskLog"),Fs(a,{board:s.value,tail:n})}async function Gt(a={}){return z("diagnostics"),zs({...a,board:s.value})}async function Yt(a,n){z("reclaim");const r=s.value,p=await qs(a,{board:r,reason:n});return r===s.value&&await Promise.all([te(!0),V(),d()]),p}async function jt(a,n,r={}){z("reassign");const p=s.value,q=await Ls(a,n,{board:p,...r});if(p===s.value){const ie=e.value.find(Zt=>Zt.id===a);ie&&(ie.assignee=n==="none"?null:n),await Promise.all([V(),pe()])}return q}async function Ht(a,n){z("specify");const r=s.value,p=await Js(a,{board:r,author:n});return r===s.value&&await Promise.all([te(!0),V(),d()]),p}async function Qt(a={}){z("dispatch");const n=s.value,r=await Ms({...a,board:n});return n===s.value&&await Promise.all([te(!0),V(),d()]),r}function Xt(a,n){a==="status"?x.value=n:I.value=n}async function Ie(){await Promise.all([d(),te(),V(),pe()])}return{tasks:e,stats:l,assignees:f,boards:y,capabilities:c,activeBoards:ve,isCapabilitySupported:ae,loading:v,boardsLoading:$,boardWarning:B,selectedBoard:s,filterStatus:x,filterAssignee:I,fetchBoards:d,fetchCapabilities:H,fetchTasks:te,fetchStats:V,fetchAssignees:pe,createTask:Kt,createBoard:ge,archiveSelectedBoard:xe,completeTasks:Dt,blockTask:Ft,unblockTasks:zt,assignTask:qt,addComment:Lt,linkTasks:Jt,unlinkTasks:Mt,bulkUpdateTasks:Vt,getTaskLog:Wt,getDiagnostics:Gt,reclaimTask:Yt,reassignTask:jt,specifyTask:Ht,dispatch:Qt,setFilter:Xt,setSelectedBoard:ke,startEventStream:he,stopEventStream:me,recoverSelectedBoard:Se,resolveAvailableBoard:le,clearBoardScopedState:fe,refreshAll:Ie}})}));function Le(e,l={}){const f=l.default||0;return e.map(y=>y.name!=="default"||y.counts?y:{...y,counts:{total:f}})}var js,Je=Y((()=>{js="default"})),Xe,Ze,ea,aa,ta,sa,na,la,ia,ra,oa,ua,da,ca,va,fa,ma,ka,pa,_a,ba,ya,ha,ga,wa,Sa,Ta,Ca,$a,Ba,Aa,Pa,Ra,xa,Ia,Ua,Oa,Ea,Na,Ka,Da,Fa,za,qa,La,Ja,Ma,Va,Wa,Ga,Ya,ja,Ha,Qa,Xa,Za,et,at,tt,st,nt,lt,it,rt,It,ot=Y((()=>{we(),$e(),Be(),Ct(),Bt(),Rt(),qe(),Je(),_s(),Xe={class:"detail-section"},Ze={class:"detail-row"},ea={class:"detail-label"},aa={class:"detail-row"},ta={class:"detail-value task-id-value"},sa={key:0,class:"detail-row"},na={class:"detail-value"},la=["onClick"],ia={key:1,class:"detail-row"},ra={class:"detail-value"},oa=["onClick"],ua={class:"detail-row"},da={class:"detail-label"},ca={class:"detail-value"},va={class:"detail-row"},fa={class:"detail-label"},ma={class:"detail-value"},ka={class:"detail-row"},pa={class:"detail-label"},_a={class:"detail-value"},ba={class:"detail-row"},ya={class:"detail-label"},ha={class:"detail-value"},ga={key:2,class:"detail-row"},wa={class:"detail-label"},Sa={class:"detail-value"},Ta={key:3,class:"detail-row"},Ca={class:"detail-label"},$a={class:"detail-value"},Ba={key:0,class:"detail-section"},Aa={class:"section-title"},Pa={class:"detail-body"},Ra={key:1,class:"detail-section"},xa={class:"section-title"},Ia={key:2,class:"detail-section"},Ua={class:"section-title"},Oa={class:"action-group"},Ea={key:1,class:"complete-input"},Na={key:1,class:"block-input"},Ka={key:0,class:"assign-group"},Da={key:3,class:"detail-section"},Fa={key:0,class:"session-list"},za=["onClick"],qa={class:"session-title"},La={class:"session-meta"},Ja={key:1,class:"column-empty"},Ma={key:4,class:"detail-section"},Va={class:"section-title"},Wa={class:"run-header"},Ga={class:"run-profile"},Ya={class:"run-time"},ja={key:0,class:"run-summary"},Ha={key:1,class:"run-error"},Qa={key:5,class:"detail-section"},Xa={class:"section-title"},Za={class:"comment-header"},et={class:"comment-author"},at={class:"comment-time"},tt={class:"comment-body"},st={key:6,class:"detail-section"},nt={class:"section-title"},lt={class:"event-kind"},it={class:"event-time"},rt={class:"messages-modal-body"},It=Ce({__name:"KanbanTaskDrawer",props:{taskId:{}},emits:["close","updated","navigate"],setup(e,{emit:l}){const f=e,y=l,{t:c}=Ae(),v=$t(),$=De(),B=Pe(),s=S(null),x=S(!1),I=S(null),U=S(""),D=S(!1),J=S(""),K=S(!1),C=S(!1),O=R(()=>s.value&&(s.value.task.result||s.value.latest_summary)||""),ee=R(()=>s.value?c(`kanban.columns.${s.value.task.status}`,s.value.task.status):""),j=R(()=>{const _=s.value?.task.status;return _!=="done"&&_!=="archived"}),F=S([]),M=S(!1),W=S(!1),ve=R(()=>s.value&&[...s.value.runs].reverse().find(_=>_.profile)?.profile||null);async function ae(){if(!s.value)return;const _=ve.value;if(_&&(W.value=!W.value,!!W.value)){M.value=!0;try{F.value=(await P(`/api/hermes/kanban/search-sessions?task_id=${encodeURIComponent(s.value.task.id)}&profile=${encodeURIComponent(_)}&board=${encodeURIComponent(B.selectedBoard)}`)).results}catch{F.value=[]}finally{M.value=!1}}}function z(){s.value?.session&&(C.value=!0)}const oe=R(()=>{const _=s.value?.session;return _?{id:_.id,title:_.title||"",source:_.source,messages:_.messages.filter(g=>g.role==="user"||g.role==="assistant").map(g=>({id:String(g.id),role:g.role,content:g.content,timestamp:g.timestamp})),createdAt:_.started_at,updatedAt:_.ended_at||_.started_at,model:_.model,messageCount:_.messages.length,endedAt:_.ended_at}:null}),ye=R(()=>Le(B.assignees,B.stats?.by_assignee||{}).map(_=>({label:_.name,value:_.name})));Ee(()=>[f.taskId,B.selectedBoard],async([_,g])=>{if(!_){s.value=null;return}x.value=!0;try{const m=await Qe(_,{board:g});f.taskId===_&&B.selectedBoard===g&&(s.value=m)}catch{f.taskId===_&&B.selectedBoard===g&&$.error(c("kanban.message.loadFailed"))}finally{f.taskId===_&&B.selectedBoard===g&&(x.value=!1)}},{immediate:!0});function X(_){return _?new Date(_*1e3).toLocaleString():"—"}async function le(){if(f.taskId){if(!K.value){K.value=!0;return}try{await B.completeTasks([f.taskId],J.value.trim()||void 0),$.success(c("kanban.message.taskCompleted")),K.value=!1,J.value="",y("updated"),y("close")}catch(_){$.error(_.message)}}}async function fe(){if(!(!f.taskId||!U.value.trim()))try{await B.blockTask(f.taskId,U.value.trim()),$.success(c("kanban.message.taskBlocked")),D.value=!1,U.value="",y("updated"),y("close")}catch(_){$.error(_.message)}}async function ue(){if(f.taskId)try{await B.unblockTasks([f.taskId]),$.success(c("kanban.message.taskUnblocked")),y("updated"),y("close")}catch(_){$.error(_.message)}}async function de(){if(!(!f.taskId||!I.value))try{await B.assignTask(f.taskId,I.value),$.success(c("kanban.message.taskAssigned")),I.value=null,s.value&&(s.value=await Qe(f.taskId,{board:B.selectedBoard})),y("updated")}catch(_){$.error(_.message)}}function me(_){y("updated"),y("navigate",_)}return(_,g)=>(k(),h(Q,null,[w(t(ts),{show:!!e.taskId,width:420,placement:"right","onUpdate:show":g[6]||(g[6]=m=>{m||y("close")})},{default:T(()=>[w(t(es),{title:s.value?.task.title||"",closable:""},{default:T(()=>[w(t(Ne),{show:x.value},{default:T(()=>[s.value?(k(),h(Q,{key:0},[i("div",Xe,[i("div",Ze,[i("span",ea,o(t(c)("kanban.detail.status")),1),i("span",{class:ne(["detail-value status-badge",s.value.task.status])},o(ee.value),3)]),i("div",aa,[g[8]||(g[8]=i("span",{class:"detail-label"},"Task ID",-1)),i("span",ta,o(s.value.task.id),1)]),s.value.parents?.length?(k(),h("div",sa,[g[9]||(g[9]=i("span",{class:"detail-label"},"Parent",-1)),i("span",na,[(k(!0),h(Q,null,se(s.value.parents,m=>(k(),h("a",{key:m,class:"task-link",onClick:ce=>me(m)},o(m),9,la))),128))])])):A("",!0),s.value.children?.length?(k(),h("div",ia,[g[10]||(g[10]=i("span",{class:"detail-label"},"Children",-1)),i("span",ra,[(k(!0),h(Q,null,se(s.value.children,m=>(k(),h("a",{key:m,class:"task-link",onClick:ce=>me(m)},o(m),9,oa))),128))])])):A("",!0),i("div",ua,[i("span",da,o(t(c)("kanban.detail.assignee")),1),i("span",ca,o(s.value.task.assignee||"—"),1)]),i("div",va,[i("span",fa,o(t(c)("kanban.detail.priority")),1),i("span",ma,o(s.value.task.priority),1)]),i("div",ka,[i("span",pa,o(t(c)("kanban.detail.tenant")),1),i("span",_a,o(s.value.task.tenant||"—"),1)]),i("div",ba,[i("span",ya,o(t(c)("kanban.detail.createdAt")),1),i("span",ha,o(X(s.value.task.created_at)),1)]),s.value.task.started_at?(k(),h("div",ga,[i("span",wa,o(t(c)("kanban.detail.startedAt")),1),i("span",Sa,o(X(s.value.task.started_at)),1)])):A("",!0),s.value.task.completed_at?(k(),h("div",Ta,[i("span",Ca,o(t(c)("kanban.detail.completedAt")),1),i("span",$a,o(X(s.value.task.completed_at)),1)])):A("",!0)]),s.value.task.body?(k(),h("div",Ba,[i("div",Aa,o(t(c)("kanban.form.body")),1),i("div",Pa,o(s.value.task.body),1)])):A("",!0),O.value?(k(),h("div",Ra,[i("div",xa,o(t(c)("kanban.detail.result")),1),i("div",{class:"result-summary",onClick:z},o(O.value),1)])):A("",!0),j.value?(k(),h("div",Ia,[i("div",Ua,o(t(c)("kanban.action.title")),1),i("div",Oa,[K.value?(k(),h("div",Ea,[w(t(be),{value:J.value,"onUpdate:value":g[1]||(g[1]=m=>J.value=m),size:"small",placeholder:t(c)("kanban.action.completeSummary")},null,8,["value","placeholder"]),w(t(G),{size:"small",type:"primary",onClick:le},{default:T(()=>[L(o(t(c)("common.ok")),1)]),_:1}),w(t(G),{size:"small",onClick:g[2]||(g[2]=m=>{K.value=!1,J.value=""})},{default:T(()=>[L(o(t(c)("common.cancel")),1)]),_:1})])):(k(),Z(t(G),{key:0,size:"small",onClick:g[0]||(g[0]=m=>K.value=!0)},{default:T(()=>[L(o(t(c)("kanban.action.complete")),1)]),_:1})),s.value.task.status==="blocked"?(k(),Z(t(G),{key:2,size:"small",onClick:ue},{default:T(()=>[L(o(t(c)("kanban.action.unblock")),1)]),_:1})):(k(),h(Q,{key:3},[D.value?(k(),h("div",Na,[w(t(be),{value:U.value,"onUpdate:value":g[4]||(g[4]=m=>U.value=m),size:"small",placeholder:t(c)("kanban.action.blockReason")},null,8,["value","placeholder"]),w(t(G),{size:"small",type:"primary",onClick:fe},{default:T(()=>[L(o(t(c)("common.ok")),1)]),_:1})])):(k(),Z(t(G),{key:0,size:"small",onClick:g[3]||(g[3]=m=>D.value=!0)},{default:T(()=>[L(o(t(c)("kanban.action.block")),1)]),_:1}))],64))]),s.value.task.status!=="running"?(k(),h("div",Ka,[w(t(_e),{value:I.value,"onUpdate:value":g[5]||(g[5]=m=>I.value=m),options:ye.value,size:"small",placeholder:t(c)("kanban.action.assignTo"),style:{flex:"1"}},null,8,["value","options","placeholder"]),w(t(G),{size:"small",disabled:!I.value,onClick:de},{default:T(()=>[L(o(t(c)("kanban.action.assign")),1)]),_:1},8,["disabled"])])):A("",!0)])):A("",!0),s.value.runs.length>0?(k(),h("div",Da,[i("div",{class:"section-title",style:{cursor:"pointer"},onClick:ae},[L(o(t(c)("kanban.detail.sessions"))+" ",1),M.value?(k(),Z(t(Ne),{key:0,size:12,style:{"margin-left":"6px"}})):A("",!0)]),W.value&&F.value.length>0?(k(),h("div",Fa,[(k(!0),h(Q,null,se(F.value,m=>(k(),h("div",{key:m.id,class:"session-item",onClick:ce=>t(v).push({name:"hermes.chat",query:{session:m.id}})},[i("div",qa,o(m.title||m.id),1),i("div",La,[i("span",null,o(m.source),1),i("span",null,o(m.model),1),i("span",null,o(X(m.started_at)),1)])],8,za))),128))])):A("",!0),W.value&&!M.value&&F.value.length===0?(k(),h("div",Ja,o(t(c)("kanban.detail.noSessions")),1)):A("",!0)])):A("",!0),s.value.runs.length>0?(k(),h("div",Ma,[i("div",Va,o(t(c)("kanban.detail.runs")),1),(k(!0),h(Q,null,se(s.value.runs,m=>(k(),h("div",{key:m.id,class:"run-item"},[i("div",Wa,[i("span",{class:ne(["run-status",m.status])},o(m.status),3),i("span",Ga,o(m.profile||"—"),1),i("span",Ya,o(X(m.started_at)),1)]),m.summary?(k(),h("div",ja,o(m.summary),1)):A("",!0),m.error?(k(),h("div",Ha,o(m.error),1)):A("",!0)]))),128))])):A("",!0),s.value.comments.length>0?(k(),h("div",Qa,[i("div",Xa,o(t(c)("kanban.detail.comments")),1),(k(!0),h(Q,null,se(s.value.comments,m=>(k(),h("div",{key:m.id,class:"comment-item"},[i("div",Za,[i("span",et,o(m.author),1),i("span",at,o(X(m.created_at)),1)]),i("div",tt,o(m.body),1)]))),128))])):A("",!0),s.value.events.length>0?(k(),h("div",st,[i("div",nt,o(t(c)("kanban.detail.events")),1),(k(!0),h(Q,null,se(s.value.events.slice(-10),m=>(k(),h("div",{key:m.id,class:"event-item"},[i("span",lt,o(m.kind),1),i("span",it,o(X(m.created_at)),1)]))),128))])):A("",!0)],64)):A("",!0)]),_:1},8,["show"])]),_:1},8,["title"])]),_:1},8,["show"]),oe.value?(k(),Z(t(Ke),{key:0,show:C.value,preset:"card",title:s.value?.task.title||"",style:{width:"900px",maxWidth:"calc(100vw - 48px)"},onClose:g[7]||(g[7]=m=>C.value=!1)},{default:T(()=>[i("div",rt,[w(bs,{session:oe.value},null,8,["session"])])]),_:1},8,["show","title"])):A("",!0)],64))}})})),Hs=Y((()=>{})),Ut,Qs=Y((()=>{ot(),ot(),Hs(),Fe(),Ut=ze(It,[["__scopeId","data-v-c8e190a1"]])})),Ot,ut=Y((()=>{we(),$e(),Be(),qe(),Je(),Ot=Ce({__name:"KanbanCreateForm",emits:["close","created"],setup(e,{emit:l}){const f=l,{t:y}=Ae(),c=De(),v=Pe(),$=S(""),B=S(""),s=S(null),x=S(null),I=S(!1),U=R(()=>[{label:y("kanban.card.priority.low"),value:1},{label:y("kanban.card.priority.medium"),value:2},{label:y("kanban.card.priority.high"),value:3}]),D=R(()=>Le(v.assignees,v.stats?.by_assignee||{}).map(K=>({label:K.name,value:K.name})));async function J(){if(!$.value.trim()){c.warning(y("kanban.form.titleRequired"));return}I.value=!0;try{await v.createTask({title:$.value.trim(),body:B.value.trim()||void 0,assignee:s.value||void 0,priority:x.value??void 0}),c.success(y("kanban.message.taskCreated")),f("created"),f("close")}catch(K){c.error(K.message)}finally{I.value=!1}}return(K,C)=>(k(),Z(t(Ke),{show:!0,preset:"dialog",title:t(y)("kanban.createTask"),style:{width:"480px"},onClose:C[5]||(C[5]=O=>f("close"))},{action:T(()=>[w(t(G),{onClick:C[4]||(C[4]=O=>f("close"))},{default:T(()=>[L(o(t(y)("common.cancel")),1)]),_:1}),w(t(G),{type:"primary",loading:I.value,onClick:J},{default:T(()=>[L(o(t(y)("common.create")),1)]),_:1},8,["loading"])]),default:T(()=>[w(t(as),{"label-placement":"top"},{default:T(()=>[w(t(Te),{label:t(y)("kanban.form.title")},{default:T(()=>[w(t(be),{value:$.value,"onUpdate:value":C[0]||(C[0]=O=>$.value=O),placeholder:t(y)("kanban.form.titlePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),w(t(Te),{label:t(y)("kanban.form.body")},{default:T(()=>[w(t(be),{value:B.value,"onUpdate:value":C[1]||(C[1]=O=>B.value=O),type:"textarea",rows:3,placeholder:t(y)("kanban.form.bodyPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),w(t(Te),{label:t(y)("kanban.form.assignee")},{default:T(()=>[w(t(_e),{value:s.value,"onUpdate:value":C[2]||(C[2]=O=>s.value=O),options:D.value,placeholder:t(y)("kanban.form.selectAssignee"),clearable:""},null,8,["value","options","placeholder"])]),_:1},8,["label"]),w(t(Te),{label:t(y)("kanban.form.priority")},{default:T(()=>[w(t(_e),{value:x.value,"onUpdate:value":C[3]||(C[3]=O=>x.value=O),options:U.value,placeholder:t(y)("kanban.form.selectPriority"),clearable:""},null,8,["value","options","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["title"]))}})})),Et,Xs=Y((()=>{ut(),ut(),Et=Ot})),dt,ct,vt,ft,mt,kt,pt,_t,bt,yt,ht,gt,wt,St,Nt,Tt=Y((()=>{we(),$e(),Be(),Ct(),hs(),Qs(),Xs(),qe(),ks(),Je(),dt={class:"kanban-view"},ct={class:"page-header"},vt={class:"header-title"},ft={class:"header-actions"},mt={key:0,class:"stats-bar"},kt=["aria-pressed","onClick"],pt={class:"stat-count"},_t={class:"stat-label"},bt=["aria-pressed"],yt={class:"stat-count"},ht={class:"stat-label"},gt={class:"kanban-board"},wt={key:0,class:"column-empty"},St={class:"board-form"},Nt=Ce({__name:"KanbanView",setup(e){const{t:l}=Ae(),f=ds(),y=$t(),c=De(),v=Pe(),$=ms(),B=S(!1),s=S(!1),x=S(null),I=S(""),U=S(""),D=S(!1),J=S(null),K=S(!1),C=["triage","todo","ready","running","blocked","done","archived"],O=S([...C]);function ee(u){return Array.isArray(u)?typeof u[0]=="string"?u[0]:null:typeof u=="string"?u:null}function j(){return ee(f.query.board)}async function F(u){j()!==u&&await y.replace({query:{...f.query,board:u}})}async function M(u,b=!0,d=!1){const H=v.selectedBoard,{board:ge,recovered:xe}=v.recoverSelectedBoard(u||v.selectedBoard||"default");x.value=null,B.value=!1,s.value=!1,b&&xe&&v.boardWarning&&c.warning(v.boardWarning),await F(ge),(d||ge!==H)&&await v.refreshAll()}function W(u){return`${l("kanban.stats.tasks")}: ${u}`}const ve=R(()=>v.activeBoards.map(u=>{const b=typeof u.total=="number"?u.total:0;return{label:`${l("kanban.title")}: ${u.icon?`${u.icon} `:""}${u.name||u.slug} · ${W(b)}`,value:u.slug}})),ae=R({get:()=>v.selectedBoard,set:u=>{M(u||"default")}}),z=R(()=>{const u={};for(const b of C)u[b]=v.tasks.filter(d=>d.status===b).sort((d,H)=>H.created_at-d.created_at);return u}),oe=R(()=>{const u=v.filterStatus;return u&&C.includes(u)?[u]:C}),ye=R(()=>Le(v.assignees,v.stats?.by_assignee||{})),X=R(()=>Object.fromEntries($.profiles.map(u=>[u.name,u.avatar||null]))),le=R(()=>[{label:l("kanban.allStatuses"),value:""},...C.map(u=>({label:l(`kanban.columns.${u}`,u),value:u}))]),fe=R(()=>[{label:l("kanban.allAssignees"),value:""},...ye.value.map(u=>({label:u.name,value:u.name}))]),ue=R({get:()=>v.filterStatus||"",set:u=>v.setFilter("status",u||null)}),de=R({get:()=>v.filterAssignee||"",set:u=>v.setFilter("assignee",u||null)});Ee(()=>f.query.board,async()=>{K.value&&await M(j(),!1)}),Ee(oe,u=>{O.value=[...u]},{immediate:!0}),rs(async()=>{await Promise.all([v.fetchBoards(),v.fetchCapabilities(),$.profiles.length===0?$.fetchProfiles():Promise.resolve()]),await M(j(),!0,!0),v.startEventStream(),K.value=!0,J.value=setInterval(()=>{document.visibilityState==="visible"&&Promise.all([v.fetchBoards(),v.fetchTasks(!0),v.fetchStats()])},15e3)}),ss(()=>{v.stopEventStream(),J.value&&clearInterval(J.value)});function me(u){x.value=u}function _(){x.value=null}async function g(){await Promise.all([v.fetchTasks(),v.fetchStats()])}function m(u){x.value=u}async function ce(){await v.fetchTasks()}async function he(u){v.setFilter("status",u),O.value=u?[u]:[...C],await v.fetchTasks()}async function Re(){await Promise.all([v.fetchTasks(),v.fetchStats(),v.fetchBoards()])}async function ke(){const u=I.value.trim();if(!u){c.warning(l("kanban.board.slugRequired"));return}D.value=!0;try{const b=await v.createBoard({slug:u,name:U.value.trim()||void 0});I.value="",U.value="",s.value=!1,await F(b.slug),c.success(l("kanban.board.created"))}catch(b){c.error(b.message)}finally{D.value=!1}}async function Se(){if(v.selectedBoard!=="default"&&window.confirm(l("kanban.board.archiveConfirm"))){D.value=!0;try{await v.archiveSelectedBoard(),await F(re),c.success(l("kanban.board.archived"))}catch(u){c.error(u.message)}finally{D.value=!1}}}return(u,b)=>(k(),h("div",dt,[i("header",ct,[i("h2",vt,o(t(l)("kanban.title")),1),i("div",ft,[w(t(_e),{value:ae.value,"onUpdate:value":b[0]||(b[0]=d=>ae.value=d),options:ve.value,loading:t(v).boardsLoading,size:"small",style:{width:"260px"}},null,8,["value","options","loading"]),w(t(G),{size:"small",loading:D.value,onClick:b[1]||(b[1]=d=>s.value=!0)},{default:T(()=>[L(o(t(l)("common.add")),1)]),_:1},8,["loading"]),w(t(G),{size:"small",secondary:"",disabled:t(v).selectedBoard===t(re),loading:D.value,onClick:Se},{default:T(()=>[L(o(t(l)("kanban.board.archive")),1)]),_:1},8,["disabled","loading"]),w(t(_e),{value:ue.value,"onUpdate:value":[b[2]||(b[2]=d=>ue.value=d),ce],options:le.value,size:"small",style:{width:"150px"}},null,8,["value","options"]),w(t(_e),{value:de.value,"onUpdate:value":[b[3]||(b[3]=d=>de.value=d),ce],options:fe.value,size:"small",style:{width:"170px"}},null,8,["value","options"]),w(t(G),{type:"primary",size:"small",onClick:b[4]||(b[4]=d=>B.value=!0)},{icon:T(()=>[...b[12]||(b[12]=[i("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[i("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),i("line",{x1:"5",y1:"12",x2:"19",y2:"12"})],-1)])]),default:T(()=>[L(" "+o(t(l)("kanban.createTask")),1)]),_:1})])]),t(v).stats?(k(),h("div",mt,[(k(),h(Q,null,se(C,d=>i("button",{key:d,type:"button",class:ne(["stat-chip",[d,{active:t(v).filterStatus===d}]]),"aria-pressed":t(v).filterStatus===d,onClick:H=>he(d)},[i("span",pt,o(t(v).stats.by_status[d]||0),1),i("span",_t,o(t(l)(`kanban.columns.${d}`,d)),1)],10,kt)),64)),i("button",{type:"button",class:ne(["stat-chip total",{active:!t(v).filterStatus}]),"aria-pressed":!t(v).filterStatus,onClick:b[5]||(b[5]=d=>he(null))},[i("span",yt,o(t(v).stats.total),1),i("span",ht,o(t(l)("kanban.stats.total")),1)],10,bt)])):A("",!0),w(t(Ne),{show:t(v).loading&&t(v).tasks.length===0},{default:T(()=>[i("div",gt,[w(t(is),{"expanded-names":O.value,"onUpdate:expandedNames":b[6]||(b[6]=d=>O.value=d)},{default:T(()=>[(k(!0),h(Q,null,se(oe.value,d=>(k(),Z(t(ns),{key:d,title:`${t(l)(`kanban.columns.${d}`,d)} (${z.value[d].length})`,name:d,class:ne(["kanban-column",`status-${d}`])},{header:T(()=>[i("span",{class:ne(["column-header",`status-${d}`])},[b[13]||(b[13]=i("span",{class:"status-dot","aria-hidden":"true"},null,-1)),i("span",null,o(t(l)(`kanban.columns.${d}`,d))+" ("+o(z.value[d].length)+")",1)],2)]),default:T(()=>[i("div",{class:ne(["task-list",`status-${d}`])},[(k(!0),h(Q,null,se(z.value[d],H=>(k(),Z(Pt,{key:H.id,task:H,"assignee-avatar":H.assignee&&X.value[H.assignee]||null,onClick:ge=>me(H.id)},null,8,["task","assignee-avatar","onClick"]))),128)),z.value[d].length===0?(k(),h("div",wt,o(t(l)("kanban.noTasks")),1)):A("",!0)],2)]),_:2},1032,["title","name","class"]))),128))]),_:1},8,["expanded-names"])])]),_:1},8,["show"]),w(Ut,{"task-id":x.value,onClose:_,onUpdated:g,onNavigate:m},null,8,["task-id"]),w(t(Ke),{show:s.value,"onUpdate:show":b[10]||(b[10]=d=>s.value=d),preset:"dialog",title:t(l)("kanban.board.create"),style:{width:"420px"}},{action:T(()=>[w(t(G),{onClick:b[9]||(b[9]=d=>s.value=!1)},{default:T(()=>[L(o(t(l)("common.cancel")),1)]),_:1}),w(t(G),{type:"primary",loading:D.value,onClick:ke},{default:T(()=>[L(o(t(l)("common.create")),1)]),_:1},8,["loading"])]),default:T(()=>[i("div",St,[w(t(be),{value:I.value,"onUpdate:value":b[7]||(b[7]=d=>I.value=d),placeholder:t(l)("kanban.board.slugPlaceholder")},null,8,["value","placeholder"]),w(t(be),{value:U.value,"onUpdate:value":b[8]||(b[8]=d=>U.value=d),placeholder:t(l)("kanban.board.namePlaceholder")},null,8,["value","placeholder"])])]),_:1},8,["show","title"]),B.value?(k(),Z(Et,{key:1,onClose:b[11]||(b[11]=d=>B.value=!1),onCreated:Re})):A("",!0)]))}})})),Zs=Y((()=>{})),en,an=Y((()=>{Tt(),Tt(),Zs(),Fe(),en=ze(Nt,[["__scopeId","data-v-ffdd8ed6"]])}));an();export{en as default};
@@ -1 +1 @@
1
- import{n as v}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as n,$t as e,Bn as l,Bt as S,Gt as h,Jn as s,Jt as q,jn as y,nn as c,qt as D,sn as I,tn as w,xn as g,yn as J}from"./ui-vendor-DNWaqYj5.js";import{c as N,f as U,l as W,m as $}from"./vue-vendor-VX6KvV1_.js";import{c as j,f as E,l as G,n as Q,t as T}from"./_plugin-vue_export-helper-D4mtpdbl.js";import{a as Y,d as z,tt as F,u as O}from"./index-BHU-82RO.js";var b,L,V,k,x,M,B,H,P,R,C,A=v((()=>{S(),F(),U(),N(),G(),O(),b={class:"login-view"},L={class:"login-card"},V={class:"login-title"},k={class:"login-desc"},x={class:"login-default-hint"},M=["placeholder"],B=["placeholder"],H={key:0,class:"login-error"},P={key:1,class:"login-lock-hint"},R=["disabled"],C=I({__name:"LoginView",setup(te){const{t}=W(),m=$(),o=l(""),r=l(""),u=l(!1),a=l(""),d=l(!1);j()&&m.replace("/hermes/chat"),J(async()=>{try{await Y()}catch{}});async function f(){await K()}async function K(){if(!o.value.trim()||!r.value){a.value=t("login.credentialsRequired");return}u.value=!0,a.value="",d.value=!1;try{E(await z(o.value.trim(),r.value)),m.replace("/hermes/chat")}catch(_){_.status===429||_.status===503?(a.value=t("login.tooManyAttempts"),d.value=!0):a.value=_.message||t("login.invalidCredentials")}finally{u.value=!1}}return(_,i)=>(g(),c("div",b,[e("div",L,[i[4]||(i[4]=e("div",{class:"login-logo"},[e("img",{src:"/logo.png",alt:"Quanta Hermes",width:"80",height:"80"})],-1)),e("h1",V,n(s(t)("login.title")),1),e("p",k,n(s(t)("login.description")),1),e("p",x,n(s(t)("login.defaultCredentialsHint")),1),e("form",{class:"login-form",onSubmit:q(f,["prevent"])},[y(e("input",{"onUpdate:modelValue":i[0]||(i[0]=p=>o.value=p),type:"text",class:"login-input",placeholder:s(t)("login.usernamePlaceholder"),autofocus:""},null,8,M),[[h,o.value]]),y(e("input",{"onUpdate:modelValue":i[1]||(i[1]=p=>r.value=p),type:"password",class:"login-input",placeholder:s(t)("login.passwordPlaceholder"),onKeyup:D(f,["enter"])},null,40,B),[[h,r.value]]),a.value?(g(),c("div",H,n(a.value),1)):w("",!0),d.value?(g(),c("div",P,[e("span",null,n(s(t)("login.lockResetHint")),1),i[2]||(i[2]=e("code",null,"hermes-web-ui clear-login-locks --restart",-1)),e("span",null,n(s(t)("login.defaultLoginResetHint")),1),i[3]||(i[3]=e("code",null,"hermes-web-ui reset-default-login",-1))])):w("",!0),e("button",{type:"submit",class:"login-btn",disabled:u.value},n(u.value?"...":s(t)("login.submit")),9,R)],32)])]))}})})),X=v((()=>{})),Z,ee=v((()=>{A(),A(),X(),Q(),Z=T(C,[["__scopeId","data-v-eb8ea6c6"]])}));ee();export{Z as default};
1
+ import{n as v}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as n,$t as e,Bn as l,Bt as S,Gt as h,Jn as s,Jt as q,jn as y,nn as c,qt as D,sn as I,tn as w,xn as g,yn as J}from"./ui-vendor-DNWaqYj5.js";import{c as N,f as U,l as W,m as $}from"./vue-vendor-VX6KvV1_.js";import{c as j,f as E,l as G,n as Q,t as T}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{a as Y,d as z,tt as F,u as O}from"./index-DyLZQAQu.js";var b,L,V,k,x,M,B,H,P,R,C,A=v((()=>{S(),F(),U(),N(),G(),O(),b={class:"login-view"},L={class:"login-card"},V={class:"login-title"},k={class:"login-desc"},x={class:"login-default-hint"},M=["placeholder"],B=["placeholder"],H={key:0,class:"login-error"},P={key:1,class:"login-lock-hint"},R=["disabled"],C=I({__name:"LoginView",setup(te){const{t}=W(),m=$(),o=l(""),r=l(""),u=l(!1),a=l(""),d=l(!1);j()&&m.replace("/hermes/chat"),J(async()=>{try{await Y()}catch{}});async function f(){await K()}async function K(){if(!o.value.trim()||!r.value){a.value=t("login.credentialsRequired");return}u.value=!0,a.value="",d.value=!1;try{E(await z(o.value.trim(),r.value)),m.replace("/hermes/chat")}catch(_){_.status===429||_.status===503?(a.value=t("login.tooManyAttempts"),d.value=!0):a.value=_.message||t("login.invalidCredentials")}finally{u.value=!1}}return(_,i)=>(g(),c("div",b,[e("div",L,[i[4]||(i[4]=e("div",{class:"login-logo"},[e("img",{src:"/logo.png",alt:"Quanta Hermes",width:"80",height:"80"})],-1)),e("h1",V,n(s(t)("login.title")),1),e("p",k,n(s(t)("login.description")),1),e("p",x,n(s(t)("login.defaultCredentialsHint")),1),e("form",{class:"login-form",onSubmit:q(f,["prevent"])},[y(e("input",{"onUpdate:modelValue":i[0]||(i[0]=p=>o.value=p),type:"text",class:"login-input",placeholder:s(t)("login.usernamePlaceholder"),autofocus:""},null,8,M),[[h,o.value]]),y(e("input",{"onUpdate:modelValue":i[1]||(i[1]=p=>r.value=p),type:"password",class:"login-input",placeholder:s(t)("login.passwordPlaceholder"),onKeyup:D(f,["enter"])},null,40,B),[[h,r.value]]),a.value?(g(),c("div",H,n(a.value),1)):w("",!0),d.value?(g(),c("div",P,[e("span",null,n(s(t)("login.lockResetHint")),1),i[2]||(i[2]=e("code",null,"hermes-web-ui clear-login-locks --restart",-1)),e("span",null,n(s(t)("login.defaultLoginResetHint")),1),i[3]||(i[3]=e("code",null,"hermes-web-ui reset-default-login",-1))])):w("",!0),e("button",{type:"submit",class:"login-btn",disabled:u.value},n(u.value?"...":s(t)("login.submit")),9,R)],32)])]))}})})),X=v((()=>{})),Z,ee=v((()=>{A(),A(),X(),Q(),Z=T(C,[["__scopeId","data-v-eb8ea6c6"]])}));ee();export{Z as default};
@@ -1 +1 @@
1
- import{n as f}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as n,$t as t,An as B,Bn as u,Bt as X,Cn as K,Gt as Z,Jn as i,Qt as R,Xn as y,Yt as E,an as ee,ft as C,g as se,jn as le,nn as r,on as m,sn as ae,t as te,tn as ne,wt as ie,xn as _,yn as oe,z as ue}from"./ui-vendor-DNWaqYj5.js";import{c as re,l as _e}from"./vue-vendor-VX6KvV1_.js";import{d as P,l as ce,n as ve,t as de}from"./_plugin-vue_export-helper-D4mtpdbl.js";async function ge(){return(await P("/api/hermes/logs")).files}async function pe(N,a){const o=new URLSearchParams;a?.lines&&o.set("lines",String(a.lines)),a?.level&&o.set("level",a.level),a?.session&&o.set("session",a.session),a?.since&&o.set("since",a.since);const c=o.toString();return(await P(`/api/hermes/logs/${N}${c?`?${c}`:""}`)).entries.filter(v=>v!==null)}var me=f((()=>{ce()})),S,O,U,k,z,G,I,$,F,T,A,D,q,W,M=f((()=>{X(),te(),re(),me(),S={class:"logs-view"},O={class:"page-header"},U={class:"header-title"},k={class:"header-actions"},z=["placeholder"],G={class:"logs-body"},I={key:0,class:"logs-empty"},$={class:"log-list"},F={class:"log-time"},T={class:"log-logger"},A={class:"access-method"},D={class:"access-path"},q={key:1,class:"log-message"},W=ae({__name:"LogsView",setup(N){const{t:a}=_e(),o=ue(),c=u([]),v=u("agent"),w=u([]),d=u(!1),b=u(100),L=u(""),h=u(""),Q=R(()=>c.value.map(s=>({label:`${s.name} (${s.size})`,value:s.name}))),Y=R(()=>[{label:a("logs.all"),value:""},{label:"ERROR",value:"ERROR"},{label:"WARNING",value:"WARNING"},{label:"INFO",value:"INFO"},{label:"DEBUG",value:"DEBUG"}]),j=[{label:"50",value:50},{label:"100",value:100},{label:"200",value:200},{label:"500",value:500}],V=R(()=>{if(!h.value)return w.value;const s=h.value.toLowerCase();return w.value.filter(e=>e.message.toLowerCase().includes(s)||e.logger.toLowerCase().includes(s)||e.raw.toLowerCase().includes(s))});function x(s){switch(s){case"ERROR":return"level-error";case"WARNING":return"level-warning";case"DEBUG":return"level-debug";default:return"level-info"}}function H(s){const e=s.match(/\d{2}:\d{2}:\d{2}/);return e?e[0]:s}function g(s){const e=s.match(/"(\w+)\s+(\S+)\s+HTTP\/[^"]+"\s+(\d+)/);return e?{method:e[1],path:e[2],status:e[3]}:null}async function p(){d.value=!0;try{w.value=(await pe(v.value,{lines:b.value,level:L.value||void 0})).filter(s=>s!==null)}catch(s){o.error(s.message)}finally{d.value=!1}}return oe(async()=>{c.value=await ge(),await p()}),(s,e)=>(_(),r("div",S,[t("header",O,[t("h2",U,n(i(a)("logs.title")),1),t("div",k,[m(i(C),{value:v.value,"onUpdate:value":[e[0]||(e[0]=l=>v.value=l),p],options:Q.value,size:"small",class:"input-md"},null,8,["value","options"]),m(i(C),{value:L.value,options:Y.value,size:"small",class:"input-sm","onUpdate:value":e[1]||(e[1]=l=>{L.value=l,p()})},null,8,["value","options"]),m(i(C),{value:b.value,options:j,size:"small",class:"input-sm","onUpdate:value":e[2]||(e[2]=l=>{b.value=l,p()})},null,8,["value"]),le(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>h.value=l),class:"search-input",placeholder:i(a)("logs.searchPlaceholder")},null,8,z),[[Z,h.value]]),m(i(ie),{size:"small",loading:d.value,onClick:p},{default:B(()=>[ee(n(i(a)("logs.refresh")),1)]),_:1},8,["loading"])])]),t("div",G,[m(i(se),{show:d.value,class:"logs-spin"},{default:B(()=>[V.value.length===0&&!d.value?(_(),r("div",I,n(i(a)("logs.noEntries")),1)):ne("",!0),t("div",$,[(_(!0),r(E,null,K(V.value,(l,J)=>(_(),r("div",{key:J,class:y(["log-entry",x(l.level)])},[t("span",F,n(H(l.timestamp)),1),t("span",{class:y(["log-level",x(l.level)])},n(l.level),3),t("span",T,n(l.logger),1),g(l.message)?(_(),r(E,{key:0},[t("span",A,n(g(l.message).method),1),t("span",D,n(g(l.message).path),1),t("span",{class:y(["access-status","status-"+(g(l.message).status?.[0]||"x")])},n(g(l.message).status),3)],64)):(_(),r("span",q,n(l.message),1))],2))),128))])]),_:1},8,["show"])])]))}})})),he=f((()=>{})),fe,we=f((()=>{M(),M(),he(),ve(),fe=de(W,[["__scopeId","data-v-a840928e"]])}));we();export{fe as default};
1
+ import{n as f}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as n,$t as t,An as B,Bn as u,Bt as X,Cn as K,Gt as Z,Jn as i,Qt as R,Xn as y,Yt as E,an as ee,ft as C,g as se,jn as le,nn as r,on as m,sn as ae,t as te,tn as ne,wt as ie,xn as _,yn as oe,z as ue}from"./ui-vendor-DNWaqYj5.js";import{c as re,l as _e}from"./vue-vendor-VX6KvV1_.js";import{d as P,l as ce,n as ve,t as de}from"./_plugin-vue_export-helper-CtZk2OSc.js";async function ge(){return(await P("/api/hermes/logs")).files}async function pe(N,a){const o=new URLSearchParams;a?.lines&&o.set("lines",String(a.lines)),a?.level&&o.set("level",a.level),a?.session&&o.set("session",a.session),a?.since&&o.set("since",a.since);const c=o.toString();return(await P(`/api/hermes/logs/${N}${c?`?${c}`:""}`)).entries.filter(v=>v!==null)}var me=f((()=>{ce()})),S,O,U,k,z,G,I,$,F,T,A,D,q,W,M=f((()=>{X(),te(),re(),me(),S={class:"logs-view"},O={class:"page-header"},U={class:"header-title"},k={class:"header-actions"},z=["placeholder"],G={class:"logs-body"},I={key:0,class:"logs-empty"},$={class:"log-list"},F={class:"log-time"},T={class:"log-logger"},A={class:"access-method"},D={class:"access-path"},q={key:1,class:"log-message"},W=ae({__name:"LogsView",setup(N){const{t:a}=_e(),o=ue(),c=u([]),v=u("agent"),w=u([]),d=u(!1),b=u(100),L=u(""),h=u(""),Q=R(()=>c.value.map(s=>({label:`${s.name} (${s.size})`,value:s.name}))),Y=R(()=>[{label:a("logs.all"),value:""},{label:"ERROR",value:"ERROR"},{label:"WARNING",value:"WARNING"},{label:"INFO",value:"INFO"},{label:"DEBUG",value:"DEBUG"}]),j=[{label:"50",value:50},{label:"100",value:100},{label:"200",value:200},{label:"500",value:500}],V=R(()=>{if(!h.value)return w.value;const s=h.value.toLowerCase();return w.value.filter(e=>e.message.toLowerCase().includes(s)||e.logger.toLowerCase().includes(s)||e.raw.toLowerCase().includes(s))});function x(s){switch(s){case"ERROR":return"level-error";case"WARNING":return"level-warning";case"DEBUG":return"level-debug";default:return"level-info"}}function H(s){const e=s.match(/\d{2}:\d{2}:\d{2}/);return e?e[0]:s}function g(s){const e=s.match(/"(\w+)\s+(\S+)\s+HTTP\/[^"]+"\s+(\d+)/);return e?{method:e[1],path:e[2],status:e[3]}:null}async function p(){d.value=!0;try{w.value=(await pe(v.value,{lines:b.value,level:L.value||void 0})).filter(s=>s!==null)}catch(s){o.error(s.message)}finally{d.value=!1}}return oe(async()=>{c.value=await ge(),await p()}),(s,e)=>(_(),r("div",S,[t("header",O,[t("h2",U,n(i(a)("logs.title")),1),t("div",k,[m(i(C),{value:v.value,"onUpdate:value":[e[0]||(e[0]=l=>v.value=l),p],options:Q.value,size:"small",class:"input-md"},null,8,["value","options"]),m(i(C),{value:L.value,options:Y.value,size:"small",class:"input-sm","onUpdate:value":e[1]||(e[1]=l=>{L.value=l,p()})},null,8,["value","options"]),m(i(C),{value:b.value,options:j,size:"small",class:"input-sm","onUpdate:value":e[2]||(e[2]=l=>{b.value=l,p()})},null,8,["value"]),le(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>h.value=l),class:"search-input",placeholder:i(a)("logs.searchPlaceholder")},null,8,z),[[Z,h.value]]),m(i(ie),{size:"small",loading:d.value,onClick:p},{default:B(()=>[ee(n(i(a)("logs.refresh")),1)]),_:1},8,["loading"])])]),t("div",G,[m(i(se),{show:d.value,class:"logs-spin"},{default:B(()=>[V.value.length===0&&!d.value?(_(),r("div",I,n(i(a)("logs.noEntries")),1)):ne("",!0),t("div",$,[(_(!0),r(E,null,K(V.value,(l,J)=>(_(),r("div",{key:J,class:y(["log-entry",x(l.level)])},[t("span",F,n(H(l.timestamp)),1),t("span",{class:y(["log-level",x(l.level)])},n(l.level),3),t("span",T,n(l.logger),1),g(l.message)?(_(),r(E,{key:0},[t("span",A,n(g(l.message).method),1),t("span",D,n(g(l.message).path),1),t("span",{class:y(["access-status","status-"+(g(l.message).status?.[0]||"x")])},n(g(l.message).status),3)],64)):(_(),r("span",q,n(l.message),1))],2))),128))])]),_:1},8,["show"])])]))}})})),he=f((()=>{})),fe,we=f((()=>{M(),M(),he(),ve(),fe=de(W,[["__scopeId","data-v-a840928e"]])}));we();export{fe as default};
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/js/mermaid-CWQI515T.js","assets/js/rolldown-runtime-M0oDzQ_3.js"])))=>i.map(i=>d[i]);
2
- import{a as je,n as F}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as Oe,$t as ne,An as Y,Bn as N,Bt as We,Jn as R,Jt as ze,M as Ge,On as Ve,P as Ye,Qt as re,Tn as qe,Xt as Xe,Yt as Je,_n as Ke,en as Ze,g as Qe,hn as ie,nn as P,on as H,sn as et,t as tt,tn as ae,xn as D,yn as nt,z as rt}from"./ui-vendor-DNWaqYj5.js";import{c as it,l as at}from"./vue-vendor-VX6KvV1_.js";import{B as ot,z as st}from"./mermaid-CWQI515T.js";import{a as lt,c as ct,i as ut,l as dt,o as ft,r as oe,s as se}from"./vendor-B1Lfatlz.js";import{M as mt,N as le,P as pt,j as B}from"./index-BHU-82RO.js";import{n as ht,t as gt}from"./clipboard-1NPxC3YL.js";function x(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}function wt(e){return e.replace(/[^a-z0-9_-]/gi,"-")||"plain"}function ke(e,t,n,i,a=[],o){const l=n?`<span class="code-lang">${x(n)}</span>`:"";return`<pre class="${["hljs-code-block",...a].join(" ")}"${o==null?"":` data-copy-text="${x(o)}"`}><div class="code-header">${l}<button type="button" class="copy-btn" data-copy-code="true">${x(i)}</button></div><code class="hljs language-${wt(t)}">${e}</code></pre>`}function _t(e){return $e.has(e?.trim().toLowerCase()||"")}function U(e){return/^(diff --git |index |---(?:\s|$)|\+\+\+(?:\s|$))/.test(e)}function E(e){return/^@@(?:\s|$)/.test(e)}function j(e){return/^\+(?!\+\+(?:\s|$))/.test(e)}function O(e){return/^-(?!---(?:\s|$))/.test(e)}function vt(e){const t=e.match(/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/);return t?{oldNumber:Number(t[1]),newNumber:Number(t[2])}:null}function kt(e,t){return U(e)||E(e)?{value:"",className:"diff-line-number-empty"}:O(e)?{value:t.oldNumber!=null?String(t.oldNumber):"",className:"diff-line-number-old"}:j(e)?{value:t.newNumber!=null?String(t.newNumber):"",className:"diff-line-number-new"}:!U(e)&&!E(e)&&t.newNumber!=null?{value:String(t.newNumber),className:"diff-line-number-context"}:{value:"",className:"diff-line-number-empty"}}function bt(e,t){if(!(U(e)||E(e))){if(O(e)){t.oldNumber!=null&&(t.oldNumber+=1);return}if(j(e)){t.newNumber!=null&&(t.newNumber+=1);return}t.oldNumber!=null&&(t.oldNumber+=1),t.newNumber!=null&&(t.newNumber+=1)}}function yt(e){return`<span class="diff-line diff-line-context-fold"><span class="diff-line-number diff-line-number-empty" aria-hidden="true"></span><span class="diff-line-content">⋮ ${x(e)}</span></span>`}function $t(e,t){const n=[];let i=0;for(;i<e.length;){if(!e[i].foldableContext){n.push(e[i]),i+=1;continue}const a=i;for(;i<e.length&&e[i].foldableContext;)i+=1;const o=e.slice(a,i);if(o.length<=xe){n.push(...o);continue}const l=Math.min(Le,Math.floor(o.length/2)),c=o.length-l*2;n.push(...o.slice(0,l)),n.push({html:yt(t(c)),foldableContext:!1}),n.push(...o.slice(o.length-l))}return n}function xt(e,t,n,i){const a={},o=e.split(/\r?\n/);return o.at(-1)===""&&o.pop(),ke($t(o.map(l=>{const c=["diff-line"];let h=!1;if(U(l))c.push("diff-line-file-header");else if(E(l)){c.push("diff-line-hunk-header");const y=vt(l);y&&(a.oldNumber=y.oldNumber,a.newNumber=y.newNumber)}else j(l)?c.push("diff-line-added"):O(l)?c.push("diff-line-removed"):h=!0;const v=kt(l,a),k=`<span class="${c.join(" ")}"><span class="diff-line-number ${v.className}" aria-hidden="true">${x(v.value)}</span><span class="diff-line-content">${x(l||" ")}</span></span>`;return bt(l,a),{html:k,foldableContext:h}}),i).map(l=>l.html).join(""),"diff",t,n,["hljs-unified-diff"],e)}function Lt(e){const t=e?.trim().toLowerCase()||"";return ye[t]||t}function Nt(e){const t=e.trimStart();return!!(/^\*\*\* Begin Patch/m.test(t)||/^\*\*\* (Update|Add|Delete) File:/m.test(t)||/^---\s+[^\n]+\n\+\+\+\s+[^\n]+\n@@/m.test(t))}function un(e){const t=e.trimStart();if(/^[\[{]/.test(t))try{return JSON.parse(e),"json"}catch{}return Nt(e)?"diff":void 0}function be(e,t){const n=e.split(/\r?\n/);if(n.length<3)return!1;let i=0,a=0,o=0,l=0,c=0;for(const h of n){if(/^(diff --git |index )/.test(h)){c+=1;continue}if(/^---(?:\s|$)|^\+\+\+(?:\s|$)/.test(h)){i+=1;continue}if(E(h)){a+=1;continue}if(j(h)){o+=1;continue}O(h)&&(l+=1)}return o>0||l>0?_t(t)?a>0||i>=2||c>0:i>=2&&a>0:!1}function ce(e,t=0){if(t>4||e===null||typeof e!="object")return null;if(Array.isArray(e)){for(const i of e){const a=ce(i,t+1);if(a)return a}return null}const n=Object.entries(e);for(const[i,a]of n)if(Ne.has(i.toLowerCase())&&typeof a=="string"&&be(a))return a;for(const[,i]of n)if(i&&typeof i=="object"){const a=ce(i,t+1);if(a)return a}return null}function ue(e,t,n,i={}){const a=t?.trim().toLowerCase()||"",o=Lt(a),l=i.maxHighlightLength??Number.POSITIVE_INFINITY;if(be(e,a||o)){const k=i.formatDiffFoldLabel??(y=>String(y));return xt(e,a||"diff",n,k)}let c="",h=o||a||"plain",v=a;try{o&&oe.getLanguage(o)&&e.length<=l?(c=oe.highlight(e,{language:o,ignoreIllegals:!0}).value,h=o):(c=x(e),v||(v="text"))}catch{c=x(e),v||(v="text")}return ke(c,h,v,n)}async function Ft(e){return gt(e)}async function Ct(e){const t=e.target;if(!(t instanceof HTMLElement))return null;const n=t.closest('[data-copy-code="true"]');if(!n)return null;e.preventDefault();const i=n.closest(".hljs-code-block"),a=i?.querySelector("code"),o=i?.getAttribute("data-copy-text")??a?.textContent??"";return o?Ft(o):!1}var ye,$e,xe,Le,Ne,Mt=F((()=>{ut(),ht(),ye={shellscript:"bash",sh:"bash",zsh:"bash",yml:"yaml",vue:"xml"},$e=new Set(["diff","patch"]),xe=8,Le=3,Ne=new Set(["difference","diff","patch","stdout","output","content"])}));function C(e){const t=e.match(/^( {0,3})(`{3,}|~{3,})(.*)$/);if(!t)return null;const[,n,i,a=""]=t,o=i[0],l=a.trim();return o==="`"&&l.includes("`")?null:{indent:n,marker:o,fence:i,length:i.length,info:l}}function de(e,t=e.length,n=e.info){return`${e.indent}${e.marker.repeat(t)}${n?` ${n}`:""}`}function Fe(e){const t=e.info.split(/\s+/)[0]?.toLowerCase();return Me.has(t)}function At(e,t){const n=C(e);return!!(n&&n.marker===t.marker&&n.length>=t.length&&n.info==="")}function Ce(e,t=e.length-1){let n=t;for(;n>=0&&e[n].trim()==="";)n-=1;return n}function Dt(e,t,n){for(let i=Ce(e);i>n;i-=1)if(At(e[i],t))return i;return-1}function Et(e,t){const n=[];let i=!1;for(const a of e){const o=C(a);if(!o||o.marker!==t)continue;i=!0;const l=n[n.length-1];if(o.info===""&&l&&o.length>=l.length){n.pop();continue}n.push({marker:o.marker,length:o.length})}return i&&n.length===0}function St(e,t,n){const i=[];for(let a=n;a<e.length;a+=1){const o=C(e[a]);o&&o.marker===t.marker&&o.info===""&&o.length>=t.length&&i.push(a)}for(let a=i.length-1;a>=0;a-=1){const o=i[a];if(Et(e.slice(n,o),t.marker))return o}return i[0]??-1}function Tt(e,t){let n=0;for(const i of e){const a=C(i);a?.marker===t&&(n=Math.max(n,a.length))}return n}function It(e){const t=[];for(let n=0;n<e.length;n+=1){const i=C(e[n]);if(!i||!Fe(i)){t.push(e[n]);continue}const a=St(e,i,n+1);if(a===-1){t.push(e[n]);continue}const o=e.slice(n+1,a),l=Tt(o,i.marker);if(l>=i.length){const c=l+1;t.push(de(i,c)),t.push(...o),t.push(de(i,c,""))}else t.push(e[n]),t.push(...o),t.push(e[a]);n=a}return t}function Rt(e){if(!e.includes("```")&&!e.includes("~~~"))return e;const t=e.split(`
2
+ import{a as je,n as F}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as Oe,$t as ne,An as Y,Bn as N,Bt as We,Jn as R,Jt as ze,M as Ge,On as Ve,P as Ye,Qt as re,Tn as qe,Xt as Xe,Yt as Je,_n as Ke,en as Ze,g as Qe,hn as ie,nn as P,on as H,sn as et,t as tt,tn as ae,xn as D,yn as nt,z as rt}from"./ui-vendor-DNWaqYj5.js";import{c as it,l as at}from"./vue-vendor-VX6KvV1_.js";import{B as ot,z as st}from"./mermaid-CWQI515T.js";import{a as lt,c as ct,i as ut,l as dt,o as ft,r as oe,s as se}from"./vendor-B1Lfatlz.js";import{M as mt,N as le,P as pt,j as B}from"./index-DyLZQAQu.js";import{n as ht,t as gt}from"./clipboard-1NPxC3YL.js";function x(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}function wt(e){return e.replace(/[^a-z0-9_-]/gi,"-")||"plain"}function ke(e,t,n,i,a=[],o){const l=n?`<span class="code-lang">${x(n)}</span>`:"";return`<pre class="${["hljs-code-block",...a].join(" ")}"${o==null?"":` data-copy-text="${x(o)}"`}><div class="code-header">${l}<button type="button" class="copy-btn" data-copy-code="true">${x(i)}</button></div><code class="hljs language-${wt(t)}">${e}</code></pre>`}function _t(e){return $e.has(e?.trim().toLowerCase()||"")}function U(e){return/^(diff --git |index |---(?:\s|$)|\+\+\+(?:\s|$))/.test(e)}function E(e){return/^@@(?:\s|$)/.test(e)}function j(e){return/^\+(?!\+\+(?:\s|$))/.test(e)}function O(e){return/^-(?!---(?:\s|$))/.test(e)}function vt(e){const t=e.match(/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/);return t?{oldNumber:Number(t[1]),newNumber:Number(t[2])}:null}function kt(e,t){return U(e)||E(e)?{value:"",className:"diff-line-number-empty"}:O(e)?{value:t.oldNumber!=null?String(t.oldNumber):"",className:"diff-line-number-old"}:j(e)?{value:t.newNumber!=null?String(t.newNumber):"",className:"diff-line-number-new"}:!U(e)&&!E(e)&&t.newNumber!=null?{value:String(t.newNumber),className:"diff-line-number-context"}:{value:"",className:"diff-line-number-empty"}}function bt(e,t){if(!(U(e)||E(e))){if(O(e)){t.oldNumber!=null&&(t.oldNumber+=1);return}if(j(e)){t.newNumber!=null&&(t.newNumber+=1);return}t.oldNumber!=null&&(t.oldNumber+=1),t.newNumber!=null&&(t.newNumber+=1)}}function yt(e){return`<span class="diff-line diff-line-context-fold"><span class="diff-line-number diff-line-number-empty" aria-hidden="true"></span><span class="diff-line-content">⋮ ${x(e)}</span></span>`}function $t(e,t){const n=[];let i=0;for(;i<e.length;){if(!e[i].foldableContext){n.push(e[i]),i+=1;continue}const a=i;for(;i<e.length&&e[i].foldableContext;)i+=1;const o=e.slice(a,i);if(o.length<=xe){n.push(...o);continue}const l=Math.min(Le,Math.floor(o.length/2)),c=o.length-l*2;n.push(...o.slice(0,l)),n.push({html:yt(t(c)),foldableContext:!1}),n.push(...o.slice(o.length-l))}return n}function xt(e,t,n,i){const a={},o=e.split(/\r?\n/);return o.at(-1)===""&&o.pop(),ke($t(o.map(l=>{const c=["diff-line"];let h=!1;if(U(l))c.push("diff-line-file-header");else if(E(l)){c.push("diff-line-hunk-header");const y=vt(l);y&&(a.oldNumber=y.oldNumber,a.newNumber=y.newNumber)}else j(l)?c.push("diff-line-added"):O(l)?c.push("diff-line-removed"):h=!0;const v=kt(l,a),k=`<span class="${c.join(" ")}"><span class="diff-line-number ${v.className}" aria-hidden="true">${x(v.value)}</span><span class="diff-line-content">${x(l||" ")}</span></span>`;return bt(l,a),{html:k,foldableContext:h}}),i).map(l=>l.html).join(""),"diff",t,n,["hljs-unified-diff"],e)}function Lt(e){const t=e?.trim().toLowerCase()||"";return ye[t]||t}function Nt(e){const t=e.trimStart();return!!(/^\*\*\* Begin Patch/m.test(t)||/^\*\*\* (Update|Add|Delete) File:/m.test(t)||/^---\s+[^\n]+\n\+\+\+\s+[^\n]+\n@@/m.test(t))}function un(e){const t=e.trimStart();if(/^[\[{]/.test(t))try{return JSON.parse(e),"json"}catch{}return Nt(e)?"diff":void 0}function be(e,t){const n=e.split(/\r?\n/);if(n.length<3)return!1;let i=0,a=0,o=0,l=0,c=0;for(const h of n){if(/^(diff --git |index )/.test(h)){c+=1;continue}if(/^---(?:\s|$)|^\+\+\+(?:\s|$)/.test(h)){i+=1;continue}if(E(h)){a+=1;continue}if(j(h)){o+=1;continue}O(h)&&(l+=1)}return o>0||l>0?_t(t)?a>0||i>=2||c>0:i>=2&&a>0:!1}function ce(e,t=0){if(t>4||e===null||typeof e!="object")return null;if(Array.isArray(e)){for(const i of e){const a=ce(i,t+1);if(a)return a}return null}const n=Object.entries(e);for(const[i,a]of n)if(Ne.has(i.toLowerCase())&&typeof a=="string"&&be(a))return a;for(const[,i]of n)if(i&&typeof i=="object"){const a=ce(i,t+1);if(a)return a}return null}function ue(e,t,n,i={}){const a=t?.trim().toLowerCase()||"",o=Lt(a),l=i.maxHighlightLength??Number.POSITIVE_INFINITY;if(be(e,a||o)){const k=i.formatDiffFoldLabel??(y=>String(y));return xt(e,a||"diff",n,k)}let c="",h=o||a||"plain",v=a;try{o&&oe.getLanguage(o)&&e.length<=l?(c=oe.highlight(e,{language:o,ignoreIllegals:!0}).value,h=o):(c=x(e),v||(v="text"))}catch{c=x(e),v||(v="text")}return ke(c,h,v,n)}async function Ft(e){return gt(e)}async function Ct(e){const t=e.target;if(!(t instanceof HTMLElement))return null;const n=t.closest('[data-copy-code="true"]');if(!n)return null;e.preventDefault();const i=n.closest(".hljs-code-block"),a=i?.querySelector("code"),o=i?.getAttribute("data-copy-text")??a?.textContent??"";return o?Ft(o):!1}var ye,$e,xe,Le,Ne,Mt=F((()=>{ut(),ht(),ye={shellscript:"bash",sh:"bash",zsh:"bash",yml:"yaml",vue:"xml"},$e=new Set(["diff","patch"]),xe=8,Le=3,Ne=new Set(["difference","diff","patch","stdout","output","content"])}));function C(e){const t=e.match(/^( {0,3})(`{3,}|~{3,})(.*)$/);if(!t)return null;const[,n,i,a=""]=t,o=i[0],l=a.trim();return o==="`"&&l.includes("`")?null:{indent:n,marker:o,fence:i,length:i.length,info:l}}function de(e,t=e.length,n=e.info){return`${e.indent}${e.marker.repeat(t)}${n?` ${n}`:""}`}function Fe(e){const t=e.info.split(/\s+/)[0]?.toLowerCase();return Me.has(t)}function At(e,t){const n=C(e);return!!(n&&n.marker===t.marker&&n.length>=t.length&&n.info==="")}function Ce(e,t=e.length-1){let n=t;for(;n>=0&&e[n].trim()==="";)n-=1;return n}function Dt(e,t,n){for(let i=Ce(e);i>n;i-=1)if(At(e[i],t))return i;return-1}function Et(e,t){const n=[];let i=!1;for(const a of e){const o=C(a);if(!o||o.marker!==t)continue;i=!0;const l=n[n.length-1];if(o.info===""&&l&&o.length>=l.length){n.pop();continue}n.push({marker:o.marker,length:o.length})}return i&&n.length===0}function St(e,t,n){const i=[];for(let a=n;a<e.length;a+=1){const o=C(e[a]);o&&o.marker===t.marker&&o.info===""&&o.length>=t.length&&i.push(a)}for(let a=i.length-1;a>=0;a-=1){const o=i[a];if(Et(e.slice(n,o),t.marker))return o}return i[0]??-1}function Tt(e,t){let n=0;for(const i of e){const a=C(i);a?.marker===t&&(n=Math.max(n,a.length))}return n}function It(e){const t=[];for(let n=0;n<e.length;n+=1){const i=C(e[n]);if(!i||!Fe(i)){t.push(e[n]);continue}const a=St(e,i,n+1);if(a===-1){t.push(e[n]);continue}const o=e.slice(n+1,a),l=Tt(o,i.marker);if(l>=i.length){const c=l+1;t.push(de(i,c)),t.push(...o),t.push(de(i,c,""))}else t.push(e[n]),t.push(...o),t.push(e[a]);n=a}return t}function Rt(e){if(!e.includes("```")&&!e.includes("~~~"))return e;const t=e.split(`
3
3
  `),n=[];let i=!1;for(let a=0;a<t.length;a+=1){const o=C(t[a]);if(!o||!Fe(o)){n.push(t[a]);continue}const l=Dt(t,o,a+1);if(l===-1){n.push(t[a]);continue}if(l!==Ce(t)){n.push(t[a]);continue}n.push(...It(t.slice(a+1,l))),n.push(...t.slice(l+1)),i=!0;break}return i?n.join(`
4
4
  `):e}var Me,Pt=F((()=>{Me=new Set(["md","markdown","mdown","mkd"])}));function Ht(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}function Bt(e){return e?.trim().split(/\s+/)[0]?.toLowerCase()||""}function Ut(e){return Bt(e)===Ae}function jt(e){return encodeURIComponent(e)}function fe(e){if(!e)return"";try{return decodeURIComponent(e)}catch{return""}}function Ot(e){return['<div class="mermaid-diagram" data-mermaid-pending="true"',` data-mermaid-source="${Ht(jt(e))}">`,'<div class="mermaid-loading">Rendering Mermaid diagram…</div>',"</div>"].join("")}var Ae,Wt,q,De,zt=F((()=>{Ae="mermaid",Wt=2e4,q=5e3,De=["txt","md","json","csv","log","py","yaml","yml","toml","sh","xml","html","css","js","ts","rs","go","java","c","cpp","h"]})),me,pe,he,ge,we,_e,Ee,ve=F((()=>{We(),it(),tt(),ct(),ft(),me=je(lt()),Mt(),Pt(),zt(),pt(),ot(),pe=["innerHTML"],he={key:0,class:"text-preview-markdown"},ge={key:1,class:"text-preview-body"},we=["src"],_e="min(800px, 100vw)",Ee=et({__name:"MarkdownRenderer",props:{content:{},mentionNames:{default:()=>[]},headingIdPrefix:{default:""}},setup(e){const t=new Set(["latex","tex","math","katex"]);function n(r){return r.trim().split(/\s+/)[0]?.toLowerCase()??""}function i(r){return t.has(n(r))}function a(r){const s=r.trim();return s.startsWith("\\[")&&s.endsWith("\\]")||s.startsWith("$$")&&s.endsWith("$$")||s.startsWith("\\(")&&s.endsWith("\\)")?s.slice(2,-2).trim():s}function o(r){const s=a(r);return`<div class="latex-block">${se.renderToString(s,{displayMode:!0,output:"htmlAndMathml",throwOnError:!1,strict:"ignore"})}</div>`}const l=e,{t:c}=at(),h=rt();function v(r){return c("chat.unchangedLines",{count:r})}const k=new dt({html:!1,breaks:!0,linkify:!0,typographer:!0,highlight(r,s){return ue(r,s,c("common.copy"),{formatDiffFoldLabel:v})}});k.use(me.default,{katex:se,throwOnError:!1,strict:"ignore"});const y=k.renderer.rules.fence?.bind(k.renderer.rules);k.renderer.rules.fence=(r,s,p,f,g)=>{const m=r[s];return i(m.info)?o(m.content):Ut(m.info)?Ot(m.content):y?y(r,s,p,f,g):g.renderToken(r,s,p)};const W=N(null),X=`hermes-mermaid-${Math.random().toString(36).slice(2)}`,M=N(null),L=N(null),J=N(""),z=N(!1),S=N(!1),Se=re(()=>/\.(md|markdown)$/i.test(J.value));let b=0,$=!1;function G(r){return r.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(r)}function V(r){return/^[a-zA-Z]:\\/.test(r)?r.replace(/\\/g,"/"):r}const K=re(()=>{let r=k.render(Rt(l.content));const s=l.headingIdPrefix?`${l.headingIdPrefix}-`:"";let p=0;if(r=r.replace(/<(h[1-6])([^>]*)>/g,(f,g,m)=>{p++;const d=`${s}heading-${p}`;return m.includes("id=")?f.replace(/id="[^"]*"/,`id="${d}"`).replace(/id='[^']*'/,`id="${d}"`):m.trim()===""?`<${g} id="${d}">`:`<${g} ${m.trim()} id="${d}">`}),r=r.replace(/\bsrc=(["'])([^"']+)\1/g,(f,g,m)=>G(m)?`src=${g}${le(V(m))}${g}`:f),r=r.replace(/<a href="([^"]+)">([^<]+)<\/a>/g,(f,g,m)=>{if(!G(g))return f;const d=V(g),w=m.trim(),u=d.split(".").pop()?.toLowerCase();return u==="mp4"||u==="webm"||u==="mov"?`<div class="markdown-video-container">
5
5
  <video class="markdown-video" controls preload="metadata" src="${le(d)}"></video>
@@ -1,4 +1,4 @@
1
- import{n as B}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as r,$t as n,An as c,At as oe,Bn as h,Bt as ya,Cn as Z,In as Ya,Jn as l,Mt as Ha,Qt as G,Rt as Wa,S as Da,W as ie,Xn as ee,Yt as ae,an as m,b as Ga,bn as Xa,bt as Qa,ct as q,en as Q,g as Ka,m as Za,nn as _,on as i,ot as ue,sn as ha,t as ga,tn as I,wt as w,xn as d,z as et}from"./ui-vendor-DNWaqYj5.js";import{c as Sa,l as ba}from"./vue-vendor-VX6KvV1_.js";import{d as V,l as at,n as wa,t as ka}from"./_plugin-vue_export-helper-D4mtpdbl.js";import{n as A,t as tt}from"./vendor-B1Lfatlz.js";var ce,de,ve,me,pe,fe,_e,ye,he,ge,Se,be,we,ke,Ce,Te,Me,D,Ca,xe=B((()=>{ya(),ga(),Sa(),ce={class:"card-header"},de={class:"server-name"},ve={class:"server-badges"},me={class:"type-badge transport"},pe={class:"card-body"},fe={key:0,class:"error-row"},_e={class:"error-text"},ye={class:"info-row"},he={class:"info-label"},ge={class:"info-value"},Se={key:1,class:"tools-list"},be=["title"],we={key:0,class:"tool-tag tool-tag-more"},ke={key:2,class:"tools-empty"},Ce={class:"muted"},Te={class:"card-footer"},Me={class:"card-actions"},D=20,Ca=ha({__name:"McpServerCard",props:{server:{},toolsByServer:{}},emits:["edit","test","reload","remove","toggleEnabled","manageTools"],setup(o,{emit:s}){const u=o,S=s,{t:f}=ba();function F(C){return C.raw_config.enabled===!1?"disabled":C.connected?"connected":"disconnected"}function L(C){return C.raw_config.enabled===!1?f("mcp.disabledStatus"):C.connected?f("mcp.connectedStatus"):f("mcp.disconnectedStatus")}const T=G(()=>u.toolsByServer[u.server.name]||[]);return(C,g)=>(d(),_("div",{class:ee(["mcp-card",{disconnected:!o.server.connected,disabled:o.server.raw_config.enabled===!1}])},[n("div",ce,[n("h3",de,r(o.server.name),1),n("div",ve,[n("span",me,r(o.server.transport),1),n("span",{class:ee(["type-badge",F(o.server)])},r(L(o.server)),3)])]),n("div",pe,[o.server.error?(d(),_("div",fe,[n("span",_e,r(o.server.error),1)])):I("",!0),n("div",ye,[n("span",he,r(l(f)("mcp.toolList")),1),n("span",ge,r(o.server.tools_registered)+"/"+r(o.server.tools)+r(l(f)("mcp.count"))+r(l(f)("mcp.tools")),1)]),o.server.tools>0?(d(),_("div",Se,[(d(!0),_(ae,null,Z(T.value.slice(0,D),v=>(d(),_("span",{key:v.name,class:"tool-tag",title:v.description},r(v.name),9,be))),128)),T.value.length>D?(d(),_("span",we," +"+r(T.value.length-D)+" "+r(l(f)("mcp.more")),1)):I("",!0)])):(d(),_("div",ke,[n("span",Ce,r(l(f)("mcp.zeroTools")),1)]))]),n("div",Te,[n("div",Me,[i(l(w),{size:"tiny",quaternary:"",onClick:g[0]||(g[0]=v=>S("edit",o.server))},{default:c(()=>[m(r(l(f)("mcp.edit")),1)]),_:1}),i(l(w),{size:"tiny",quaternary:"",disabled:!o.server.connected,onClick:g[1]||(g[1]=v=>S("manageTools",o.server))},{default:c(()=>[m(r(l(f)("mcp.manageTools")),1)]),_:1},8,["disabled"]),i(l(w),{size:"tiny",quaternary:"",onClick:g[2]||(g[2]=v=>S("test",o.server))},{default:c(()=>[m(r(l(f)("mcp.test")),1)]),_:1}),i(l(w),{size:"tiny",quaternary:"",onClick:g[3]||(g[3]=v=>S("reload",o.server.name))},{default:c(()=>[m(r(l(f)("mcp.reload")),1)]),_:1}),i(l(Da),{onPositiveClick:g[4]||(g[4]=v=>S("remove",o.server))},{trigger:c(()=>[i(l(w),{size:"tiny",quaternary:"",type:"error"},{default:c(()=>[m(r(l(f)("mcp.remove")),1)]),_:1})]),default:c(()=>[m(" "+r(l(f)("mcp.confirmRemove",{name:o.server.name})),1)]),_:1})]),i(l(Za),{value:o.server.raw_config.enabled!==!1,size:"small","onUpdate:value":g[5]||(g[5]=()=>S("toggleEnabled",o.server))},null,8,["value"])])],2))}})})),lt=B((()=>{})),Ta,st=B((()=>{xe(),xe(),lt(),wa(),Ta=ka(Ca,[["__scopeId","data-v-4a527181"]])}));async function rt(){return V("/api/hermes/mcp/servers")}async function nt(o,s){const u=new URLSearchParams;return o&&u.set("server",o),s&&u.set("raw","1"),V(`/api/hermes/mcp/tools${u.toString()?`?${u.toString()}`:""}`)}async function ot(o,s){return V("/api/hermes/mcp/servers",{method:"POST",body:JSON.stringify({name:o,config:s})})}async function it(o){return V(`/api/hermes/mcp/servers/${encodeURIComponent(o)}`,{method:"DELETE"})}async function K(o,s){return V(`/api/hermes/mcp/servers/${encodeURIComponent(o)}`,{method:"PATCH",body:JSON.stringify({config:s})})}async function $e(o){return V(`/api/hermes/mcp/reload${o?`?server=${encodeURIComponent(o)}`:""}`,{method:"POST"})}async function ut(o){return V(`/api/hermes/mcp/servers/${encodeURIComponent(o)}/test`,{method:"POST"})}var ct=B((()=>{at()})),Ee,je,Ae,Re,Oe,ze,Ue,Ne,Ie,Be,Ve,Fe,Je,Le,Pe,qe,Ye,He,We,De,Ge,Xe,Qe,Ke,Ze,ea,aa,ta,la,sa,ra,na,oa,ia,ua,ca,da,va,ma,pa,fa,Ma,_a=B((()=>{ya(),tt(),ga(),Sa(),st(),ct(),Ee={class:"mcp-view"},je={class:"page-header"},Ae={class:"header-title"},Re={class:"header-actions"},Oe={class:"mcp-content"},ze={class:"summary-grid"},Ue={class:"summary-card"},Ne={class:"summary-label"},Ie={class:"summary-card success"},Be={class:"summary-label"},Ve={class:"summary-card warning"},Fe={class:"summary-label"},Je={class:"summary-card info"},Le={class:"summary-label"},Pe={class:"toolbar-row"},qe={class:"btn-group"},Ye={key:0,class:"servers-grid"},He={class:"mode-switch-row"},We={key:0,class:"config-error"},De={class:"modal-actions"},Ge={key:0,class:"tools-modal-content"},Xe={class:"tools-modal-header"},Qe={class:"server-name-label"},Ke={class:"tools-mode-selector"},Ze={class:"mode-label"},ea={class:"tools-list-container"},aa={class:"tools-list-header"},ta={key:0,class:"tools-list-actions"},la={key:0,class:"tools-checkbox-list"},sa=["title"],ra={key:1,class:"tools-empty"},na={class:"muted"},oa={class:"tools-summary"},ia={key:0},ua={key:1},ca={key:2},da={class:"modal-actions"},va=`{
1
+ import{n as B}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as r,$t as n,An as c,At as oe,Bn as h,Bt as ya,Cn as Z,In as Ya,Jn as l,Mt as Ha,Qt as G,Rt as Wa,S as Da,W as ie,Xn as ee,Yt as ae,an as m,b as Ga,bn as Xa,bt as Qa,ct as q,en as Q,g as Ka,m as Za,nn as _,on as i,ot as ue,sn as ha,t as ga,tn as I,wt as w,xn as d,z as et}from"./ui-vendor-DNWaqYj5.js";import{c as Sa,l as ba}from"./vue-vendor-VX6KvV1_.js";import{d as V,l as at,n as wa,t as ka}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{n as A,t as tt}from"./vendor-B1Lfatlz.js";var ce,de,ve,me,pe,fe,_e,ye,he,ge,Se,be,we,ke,Ce,Te,Me,D,Ca,xe=B((()=>{ya(),ga(),Sa(),ce={class:"card-header"},de={class:"server-name"},ve={class:"server-badges"},me={class:"type-badge transport"},pe={class:"card-body"},fe={key:0,class:"error-row"},_e={class:"error-text"},ye={class:"info-row"},he={class:"info-label"},ge={class:"info-value"},Se={key:1,class:"tools-list"},be=["title"],we={key:0,class:"tool-tag tool-tag-more"},ke={key:2,class:"tools-empty"},Ce={class:"muted"},Te={class:"card-footer"},Me={class:"card-actions"},D=20,Ca=ha({__name:"McpServerCard",props:{server:{},toolsByServer:{}},emits:["edit","test","reload","remove","toggleEnabled","manageTools"],setup(o,{emit:s}){const u=o,S=s,{t:f}=ba();function F(C){return C.raw_config.enabled===!1?"disabled":C.connected?"connected":"disconnected"}function L(C){return C.raw_config.enabled===!1?f("mcp.disabledStatus"):C.connected?f("mcp.connectedStatus"):f("mcp.disconnectedStatus")}const T=G(()=>u.toolsByServer[u.server.name]||[]);return(C,g)=>(d(),_("div",{class:ee(["mcp-card",{disconnected:!o.server.connected,disabled:o.server.raw_config.enabled===!1}])},[n("div",ce,[n("h3",de,r(o.server.name),1),n("div",ve,[n("span",me,r(o.server.transport),1),n("span",{class:ee(["type-badge",F(o.server)])},r(L(o.server)),3)])]),n("div",pe,[o.server.error?(d(),_("div",fe,[n("span",_e,r(o.server.error),1)])):I("",!0),n("div",ye,[n("span",he,r(l(f)("mcp.toolList")),1),n("span",ge,r(o.server.tools_registered)+"/"+r(o.server.tools)+r(l(f)("mcp.count"))+r(l(f)("mcp.tools")),1)]),o.server.tools>0?(d(),_("div",Se,[(d(!0),_(ae,null,Z(T.value.slice(0,D),v=>(d(),_("span",{key:v.name,class:"tool-tag",title:v.description},r(v.name),9,be))),128)),T.value.length>D?(d(),_("span",we," +"+r(T.value.length-D)+" "+r(l(f)("mcp.more")),1)):I("",!0)])):(d(),_("div",ke,[n("span",Ce,r(l(f)("mcp.zeroTools")),1)]))]),n("div",Te,[n("div",Me,[i(l(w),{size:"tiny",quaternary:"",onClick:g[0]||(g[0]=v=>S("edit",o.server))},{default:c(()=>[m(r(l(f)("mcp.edit")),1)]),_:1}),i(l(w),{size:"tiny",quaternary:"",disabled:!o.server.connected,onClick:g[1]||(g[1]=v=>S("manageTools",o.server))},{default:c(()=>[m(r(l(f)("mcp.manageTools")),1)]),_:1},8,["disabled"]),i(l(w),{size:"tiny",quaternary:"",onClick:g[2]||(g[2]=v=>S("test",o.server))},{default:c(()=>[m(r(l(f)("mcp.test")),1)]),_:1}),i(l(w),{size:"tiny",quaternary:"",onClick:g[3]||(g[3]=v=>S("reload",o.server.name))},{default:c(()=>[m(r(l(f)("mcp.reload")),1)]),_:1}),i(l(Da),{onPositiveClick:g[4]||(g[4]=v=>S("remove",o.server))},{trigger:c(()=>[i(l(w),{size:"tiny",quaternary:"",type:"error"},{default:c(()=>[m(r(l(f)("mcp.remove")),1)]),_:1})]),default:c(()=>[m(" "+r(l(f)("mcp.confirmRemove",{name:o.server.name})),1)]),_:1})]),i(l(Za),{value:o.server.raw_config.enabled!==!1,size:"small","onUpdate:value":g[5]||(g[5]=()=>S("toggleEnabled",o.server))},null,8,["value"])])],2))}})})),lt=B((()=>{})),Ta,st=B((()=>{xe(),xe(),lt(),wa(),Ta=ka(Ca,[["__scopeId","data-v-4a527181"]])}));async function rt(){return V("/api/hermes/mcp/servers")}async function nt(o,s){const u=new URLSearchParams;return o&&u.set("server",o),s&&u.set("raw","1"),V(`/api/hermes/mcp/tools${u.toString()?`?${u.toString()}`:""}`)}async function ot(o,s){return V("/api/hermes/mcp/servers",{method:"POST",body:JSON.stringify({name:o,config:s})})}async function it(o){return V(`/api/hermes/mcp/servers/${encodeURIComponent(o)}`,{method:"DELETE"})}async function K(o,s){return V(`/api/hermes/mcp/servers/${encodeURIComponent(o)}`,{method:"PATCH",body:JSON.stringify({config:s})})}async function $e(o){return V(`/api/hermes/mcp/reload${o?`?server=${encodeURIComponent(o)}`:""}`,{method:"POST"})}async function ut(o){return V(`/api/hermes/mcp/servers/${encodeURIComponent(o)}/test`,{method:"POST"})}var ct=B((()=>{at()})),Ee,je,Ae,Re,Oe,ze,Ue,Ne,Ie,Be,Ve,Fe,Je,Le,Pe,qe,Ye,He,We,De,Ge,Xe,Qe,Ke,Ze,ea,aa,ta,la,sa,ra,na,oa,ia,ua,ca,da,va,ma,pa,fa,Ma,_a=B((()=>{ya(),tt(),ga(),Sa(),st(),ct(),Ee={class:"mcp-view"},je={class:"page-header"},Ae={class:"header-title"},Re={class:"header-actions"},Oe={class:"mcp-content"},ze={class:"summary-grid"},Ue={class:"summary-card"},Ne={class:"summary-label"},Ie={class:"summary-card success"},Be={class:"summary-label"},Ve={class:"summary-card warning"},Fe={class:"summary-label"},Je={class:"summary-card info"},Le={class:"summary-label"},Pe={class:"toolbar-row"},qe={class:"btn-group"},Ye={key:0,class:"servers-grid"},He={class:"mode-switch-row"},We={key:0,class:"config-error"},De={class:"modal-actions"},Ge={key:0,class:"tools-modal-content"},Xe={class:"tools-modal-header"},Qe={class:"server-name-label"},Ke={class:"tools-mode-selector"},Ze={class:"mode-label"},ea={class:"tools-list-container"},aa={class:"tools-list-header"},ta={key:0,class:"tools-list-actions"},la={key:0,class:"tools-checkbox-list"},sa=["title"],ra={key:1,class:"tools-empty"},na={class:"muted"},oa={class:"tools-summary"},ia={key:0},ua={key:1},ca={key:2},da={class:"modal-actions"},va=`{
2
2
  "my-server": {
3
3
  "command": "npx",
4
4
  "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"]
@@ -1,4 +1,4 @@
1
- import{n as $}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as o,$t as e,An as r,Bn as g,Bt as Ce,Gt as P,Jn as t,Qt as p,an as c,en as h,in as E,jn as b,nn as n,on as y,sn as ze,t as Be,tn as f,wt as v,xn as i,yn as Ve,z as Se}from"./ui-vendor-DNWaqYj5.js";import{c as Pe,l as be}from"./vue-vendor-VX6KvV1_.js";import{n as Ne,t as $e}from"./_plugin-vue_export-helper-D4mtpdbl.js";import{X as Ee,Y as He}from"./index-BHU-82RO.js";import{n as Le,t as N}from"./MarkdownRenderer-D-IgakCO.js";import{f as qe,l as Te,r as Ue}from"./skills-fBzB8FGc.js";var H,L,q,T,U,D,F,R,I,Y,j,A,G,J,Q,W,X,K,O,Z,ee,te,se,ae,oe,ie,le,ne,re,de,me,ue,ce,ve,_e,ye,he,pe=$((()=>{Ce(),Be(),Pe(),Le(),Te(),He(),H={class:"memory-view"},L={class:"page-header"},q={class:"header-title"},T={class:"memory-content"},U={key:0,class:"memory-loading"},D={key:1,class:"memory-sections"},F={class:"memory-section"},R={class:"section-header"},I={class:"section-title-row"},Y={class:"section-title"},j={key:0,class:"section-mtime"},A={key:0,class:"section-body"},G={key:1,class:"empty-text"},J={key:1,class:"section-edit"},Q=["placeholder"],W={class:"edit-actions"},X={class:"memory-section"},K={class:"section-header"},O={class:"section-title-row"},Z={class:"section-title"},ee={key:0,class:"section-mtime"},te={key:0,class:"section-body"},se={key:1,class:"empty-text"},ae={key:1,class:"section-edit"},oe=["placeholder"],ie={class:"edit-actions"},le={class:"memory-section"},ne={class:"section-header"},re={class:"section-title-row"},de={class:"section-title"},me={key:0,class:"section-mtime"},ue={key:0,class:"section-body"},ce={key:1,class:"empty-text"},ve={key:1,class:"section-edit"},_e=["placeholder"],ye={class:"edit-actions"},he=ze({__name:"MemoryView",setup(Ie){const{t:a}=be(),w=Se(),x=Ee(),M=g(!1),l=g(null),d=g(null),m=g(""),k=g(!1);Ve(C);async function C(){M.value=!0;try{(!x.activeProfileName||x.profiles.length===0)&&await x.fetchProfiles(),l.value=await Ue()}catch(u){console.error("Failed to load memory:",u),w.error(a("memory.loadFailed"))}finally{M.value=!1}}function z(u){d.value=u,m.value=l.value?.[u]||""}function B(){d.value=null,m.value=""}async function V(){if(d.value){k.value=!0;try{await qe(d.value,m.value),await C(),d.value=null,m.value="",w.success(a("common.saved"))}catch(u){w.error(`${a("common.saveFailed")}: ${u.message}`)}finally{k.value=!1}}}function S(u){return u?new Date(u).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):""}const fe=p(()=>!l.value?.memory?.trim()),ke=p(()=>!l.value?.user?.trim()),ge=p(()=>!l.value?.soul?.trim()),we=p(()=>(l.value?.memory||"").replace(/§/g,`
1
+ import{n as $}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as o,$t as e,An as r,Bn as g,Bt as Ce,Gt as P,Jn as t,Qt as p,an as c,en as h,in as E,jn as b,nn as n,on as y,sn as ze,t as Be,tn as f,wt as v,xn as i,yn as Ve,z as Se}from"./ui-vendor-DNWaqYj5.js";import{c as Pe,l as be}from"./vue-vendor-VX6KvV1_.js";import{n as Ne,t as $e}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{X as Ee,Y as He}from"./index-DyLZQAQu.js";import{n as Le,t as N}from"./MarkdownRenderer-2bwbBjlK.js";import{f as qe,l as Te,r as Ue}from"./skills-CDjYTDMo.js";var H,L,q,T,U,D,F,R,I,Y,j,A,G,J,Q,W,X,K,O,Z,ee,te,se,ae,oe,ie,le,ne,re,de,me,ue,ce,ve,_e,ye,he,pe=$((()=>{Ce(),Be(),Pe(),Le(),Te(),He(),H={class:"memory-view"},L={class:"page-header"},q={class:"header-title"},T={class:"memory-content"},U={key:0,class:"memory-loading"},D={key:1,class:"memory-sections"},F={class:"memory-section"},R={class:"section-header"},I={class:"section-title-row"},Y={class:"section-title"},j={key:0,class:"section-mtime"},A={key:0,class:"section-body"},G={key:1,class:"empty-text"},J={key:1,class:"section-edit"},Q=["placeholder"],W={class:"edit-actions"},X={class:"memory-section"},K={class:"section-header"},O={class:"section-title-row"},Z={class:"section-title"},ee={key:0,class:"section-mtime"},te={key:0,class:"section-body"},se={key:1,class:"empty-text"},ae={key:1,class:"section-edit"},oe=["placeholder"],ie={class:"edit-actions"},le={class:"memory-section"},ne={class:"section-header"},re={class:"section-title-row"},de={class:"section-title"},me={key:0,class:"section-mtime"},ue={key:0,class:"section-body"},ce={key:1,class:"empty-text"},ve={key:1,class:"section-edit"},_e=["placeholder"],ye={class:"edit-actions"},he=ze({__name:"MemoryView",setup(Ie){const{t:a}=be(),w=Se(),x=Ee(),M=g(!1),l=g(null),d=g(null),m=g(""),k=g(!1);Ve(C);async function C(){M.value=!0;try{(!x.activeProfileName||x.profiles.length===0)&&await x.fetchProfiles(),l.value=await Ue()}catch(u){console.error("Failed to load memory:",u),w.error(a("memory.loadFailed"))}finally{M.value=!1}}function z(u){d.value=u,m.value=l.value?.[u]||""}function B(){d.value=null,m.value=""}async function V(){if(d.value){k.value=!0;try{await qe(d.value,m.value),await C(),d.value=null,m.value="",w.success(a("common.saved"))}catch(u){w.error(`${a("common.saveFailed")}: ${u.message}`)}finally{k.value=!1}}}function S(u){return u?new Date(u).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):""}const fe=p(()=>!l.value?.memory?.trim()),ke=p(()=>!l.value?.user?.trim()),ge=p(()=>!l.value?.soul?.trim()),we=p(()=>(l.value?.memory||"").replace(/§/g,`
2
2
 
3
3
  `)),xe=p(()=>(l.value?.user||"").replace(/§/g,`
4
4
 
@@ -1,4 +1,4 @@
1
- import{n as le}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as y,$t as i,Bn as K,Bt as Wt,Cn as ie,Jn as p,Jt as Xt,Qt as u,Xn as w,Xt as qt,Yt as x,_n as we,en as A,kn as Gt,nn as r,on as Ce,sn as Qt,t as Zt,tn as g,xn as o,yn as ea,z as ta}from"./ui-vendor-DNWaqYj5.js";import{c as aa,l as na}from"./vue-vendor-VX6KvV1_.js";import{n as sa,t as ia}from"./_plugin-vue_export-helper-D4mtpdbl.js";import{C as oa,J as la,N as ra,P as ua,S as ca,X as da,Y as ma,_ as ga,b as va,j as Se,q as ha,v as pa,x as fa,y as ya}from"./index-BHU-82RO.js";import{n as ka,t as _a}from"./clipboard-1NPxC3YL.js";import{a as wa,c as Ca,i as Sa,n as Ta,o as ba,r as Te,s as Ma,t as P}from"./MarkdownRenderer-D-IgakCO.js";import{a as xa,i as Aa,n as Pa,o as Ba,r as be,s as Ia,t as Me}from"./ttsHelpers-CVcFKmJR.js";var xe,Ae,Pe,Be,Ie,De,Ue,$e,Fe,Ne,Ee,Oe,Ve,Le,Re,Je,He,Ke,ze,je,Ye,We,Xe,qe,Ge,Qe,Ze,et,tt,at,nt,st,it,ot,lt,rt,ut,ct,dt,T,oe,mt,gt,vt,ht,z,ft,pt=le((()=>{Wt(),aa(),Zt(),ua(),ka(),Ta(),va(),ga(),ma(),ca(),la(),Ma(),Ba(),Aa(),Pa(),xe=["id"],Ae={key:1,width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5",class:"tool-icon"},Pe={class:"tool-name"},Be={key:2,class:"tool-preview"},Ie={key:3,class:"tool-spinner"},De={key:4,class:"tool-error-badge"},Ue={key:0,class:"tool-detail-section","data-copy-source":"tool-args"},$e={class:"tool-detail-label"},Fe=["innerHTML"],Ne={key:1,class:"tool-detail-section","data-copy-source":"tool-result"},Ee={class:"tool-detail-label"},Oe=["innerHTML"],Ve={key:1,class:"msg-body"},Le={key:0,class:"msg-attachments"},Re=["src","alt","onClick"],Je=["onClick","title"],He={class:"att-name"},Ke={class:"att-size"},ze={class:"thinking-label"},je={key:0,class:"thinking-meta"},Ye={class:"thinking-meta"},We={key:0,class:"thinking-body"},Xe={key:0,class:"msg-attachments"},qe=["src","alt","onClick"],Ge=["onClick","title"],Qe={class:"att-name"},Ze={key:6,class:"command-result command-status"},et={class:"command-status-grid"},tt={class:"command-status-key"},at={class:"command-status-value"},nt={key:7,class:"command-result"},st={key:8,class:"streaming-dots"},it={class:"message-meta"},ot=["title"],lt={key:0,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},rt={key:1,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},ut=["title"],ct={class:"message-time"},dt=["src"],T=1e3,oe=200,mt=6,gt=1e3,vt=50,ht=50,z="__truncated__",ft=Qt({__name:"MessageItem",props:{message:{},highlight:{type:Boolean},headingIdPrefix:{}},setup(d){const s=d,{t:c}=na(),_=ta(),yt=u(()=>s.message.role==="system"),kt=u(()=>s.message.role==="assistant"&&s.message.systemType==="error"),re=u(()=>s.headingIdPrefix||`msg-${s.message.id}`),F=u(()=>s.message.role==="command"||s.message.systemType==="command"),_t=u(()=>s.message.role==="command"&&s.message.systemType==="error"),wt=u(()=>F.value&&s.message.commandAction==="status"&&s.message.commandData?.type!=="goal"),Ct=u(()=>{const e=s.message.commandData||{};return[{key:"status",value:e.isWorking?"running":"idle"},{key:"source",value:e.source},{key:"profile",value:e.profile},{key:"model",value:e.model||"-"},{key:"queue",value:e.queueLength??0},{key:"run",value:e.runId||"-"}]});function St(e){return!e||typeof e!="object"?"":(e.type==="text"||e.type==="input_text")&&typeof e.text=="string"?e.text:""}function Tt(e){if(!e||typeof e!="object"||e.type!=="input_image"&&e.type!=="image_url")return null;const t=e.image_url;return typeof t=="string"?t:t&&typeof t=="object"&&typeof t.url=="string"?t.url:null}function bt(e,t){const a=e.match(/^data:image\/([^;,]+)/i),l=a?.[1]==="jpeg"?"jpg":a?.[1]||"png";return`image-${t+1}.${l}`}function Mt(e){const t=e.trim();if(!t)return null;const a=l=>{const v=JSON.parse(l);return Array.isArray(v)&&v.length>0&&"type"in v[0]?v:null};try{return a(t)}catch{if(!t.startsWith("[{'")&&!t.startsWith('[{"'))return null;try{return a(t.replace(/\bNone\b/g,"null").replace(/\bTrue\b/g,"true").replace(/\bFalse\b/g,"false").replace(/'/g,'"'))}catch{return null}}}const j=u(()=>Mt(s.message.content||"")),Y=u(()=>j.value!==null),ue=u(()=>Y.value?j.value.map(e=>St(e)).filter(Boolean).join(`
1
+ import{n as le}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as y,$t as i,Bn as K,Bt as Wt,Cn as ie,Jn as p,Jt as Xt,Qt as u,Xn as w,Xt as qt,Yt as x,_n as we,en as A,kn as Gt,nn as r,on as Ce,sn as Qt,t as Zt,tn as g,xn as o,yn as ea,z as ta}from"./ui-vendor-DNWaqYj5.js";import{c as aa,l as na}from"./vue-vendor-VX6KvV1_.js";import{n as sa,t as ia}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{C as oa,J as la,N as ra,P as ua,S as ca,X as da,Y as ma,_ as ga,b as va,j as Se,q as ha,v as pa,x as fa,y as ya}from"./index-DyLZQAQu.js";import{n as ka,t as _a}from"./clipboard-1NPxC3YL.js";import{a as wa,c as Ca,i as Sa,n as Ta,o as ba,r as Te,s as Ma,t as P}from"./MarkdownRenderer-2bwbBjlK.js";import{a as xa,i as Aa,n as Pa,o as Ba,r as be,s as Ia,t as Me}from"./ttsHelpers-CVcFKmJR.js";var xe,Ae,Pe,Be,Ie,De,Ue,$e,Fe,Ne,Ee,Oe,Ve,Le,Re,Je,He,Ke,ze,je,Ye,We,Xe,qe,Ge,Qe,Ze,et,tt,at,nt,st,it,ot,lt,rt,ut,ct,dt,T,oe,mt,gt,vt,ht,z,ft,pt=le((()=>{Wt(),aa(),Zt(),ua(),ka(),Ta(),va(),ga(),ma(),ca(),la(),Ma(),Ba(),Aa(),Pa(),xe=["id"],Ae={key:1,width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5",class:"tool-icon"},Pe={class:"tool-name"},Be={key:2,class:"tool-preview"},Ie={key:3,class:"tool-spinner"},De={key:4,class:"tool-error-badge"},Ue={key:0,class:"tool-detail-section","data-copy-source":"tool-args"},$e={class:"tool-detail-label"},Fe=["innerHTML"],Ne={key:1,class:"tool-detail-section","data-copy-source":"tool-result"},Ee={class:"tool-detail-label"},Oe=["innerHTML"],Ve={key:1,class:"msg-body"},Le={key:0,class:"msg-attachments"},Re=["src","alt","onClick"],Je=["onClick","title"],He={class:"att-name"},Ke={class:"att-size"},ze={class:"thinking-label"},je={key:0,class:"thinking-meta"},Ye={class:"thinking-meta"},We={key:0,class:"thinking-body"},Xe={key:0,class:"msg-attachments"},qe=["src","alt","onClick"],Ge=["onClick","title"],Qe={class:"att-name"},Ze={key:6,class:"command-result command-status"},et={class:"command-status-grid"},tt={class:"command-status-key"},at={class:"command-status-value"},nt={key:7,class:"command-result"},st={key:8,class:"streaming-dots"},it={class:"message-meta"},ot=["title"],lt={key:0,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},rt={key:1,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},ut=["title"],ct={class:"message-time"},dt=["src"],T=1e3,oe=200,mt=6,gt=1e3,vt=50,ht=50,z="__truncated__",ft=Qt({__name:"MessageItem",props:{message:{},highlight:{type:Boolean},headingIdPrefix:{}},setup(d){const s=d,{t:c}=na(),_=ta(),yt=u(()=>s.message.role==="system"),kt=u(()=>s.message.role==="assistant"&&s.message.systemType==="error"),re=u(()=>s.headingIdPrefix||`msg-${s.message.id}`),F=u(()=>s.message.role==="command"||s.message.systemType==="command"),_t=u(()=>s.message.role==="command"&&s.message.systemType==="error"),wt=u(()=>F.value&&s.message.commandAction==="status"&&s.message.commandData?.type!=="goal"),Ct=u(()=>{const e=s.message.commandData||{};return[{key:"status",value:e.isWorking?"running":"idle"},{key:"source",value:e.source},{key:"profile",value:e.profile},{key:"model",value:e.model||"-"},{key:"queue",value:e.queueLength??0},{key:"run",value:e.runId||"-"}]});function St(e){return!e||typeof e!="object"?"":(e.type==="text"||e.type==="input_text")&&typeof e.text=="string"?e.text:""}function Tt(e){if(!e||typeof e!="object"||e.type!=="input_image"&&e.type!=="image_url")return null;const t=e.image_url;return typeof t=="string"?t:t&&typeof t=="object"&&typeof t.url=="string"?t.url:null}function bt(e,t){const a=e.match(/^data:image\/([^;,]+)/i),l=a?.[1]==="jpeg"?"jpg":a?.[1]||"png";return`image-${t+1}.${l}`}function Mt(e){const t=e.trim();if(!t)return null;const a=l=>{const v=JSON.parse(l);return Array.isArray(v)&&v.length>0&&"type"in v[0]?v:null};try{return a(t)}catch{if(!t.startsWith("[{'")&&!t.startsWith('[{"'))return null;try{return a(t.replace(/\bNone\b/g,"null").replace(/\bTrue\b/g,"true").replace(/\bFalse\b/g,"false").replace(/'/g,'"'))}catch{return null}}}const j=u(()=>Mt(s.message.content||"")),Y=u(()=>j.value!==null),ue=u(()=>Y.value?j.value.map(e=>St(e)).filter(Boolean).join(`
2
2
  `):s.message.content||""),W=u(()=>Y.value?j.value.flatMap((e,t)=>{if(e.type==="image")return[{type:"image",name:String(e.name||`image-${t+1}`),path:String(e.path||"")}].filter(l=>l.path);if(e.type==="file")return[{type:"file",name:String(e.name||`file-${t+1}`),path:String(e.path||"")}].filter(l=>l.path);const a=Tt(e);return a?.startsWith("data:image/")?[{type:"image",name:bt(a,t),url:a}]:[]}):null);function ce(e){return e.url?e.url:e.path?ra(e.path,e.name):""}const U=K(!1),B=K(null),X=pa(),de=da(),xt=oa(),m=Ia(),n=xa(),me=u(()=>X.activeSession?.profile||de.activeProfileName||"default"),At=u(()=>de.profiles.find(e=>e.name===me.value)?.avatar),q=u(()=>{if(s.message.role==="tool")return null;const e=s.message.content||"";return e.trim()?e:null});async function Pt(){const e=q.value;if(e){if(await _a(e)){_.success(c("chat.copiedBubble"));return}_.error(c("chat.copyFailed"))}}const C=u(()=>fa(s.message.content||"",{streaming:!!s.message.isStreaming})),ge=u(()=>!!(s.message.reasoning&&s.message.reasoning.length>0)),Bt=u(()=>ge.value||C.value.hasThinking),It=u(()=>{const e=[];return s.message.reasoning&&e.push(s.message.reasoning),e.push(...C.value.segments),C.value.pending&&e.push(C.value.pending),e.join(`
3
3
 
4
4
  `)}),Dt=u(()=>{let e=ya(C.value);return s.message.reasoning&&(e+=s.message.reasoning.length),e}),ve=u(()=>s.message.isStreaming?!!(C.value.pending!==null||ge.value&&!s.message.content):!1),G=K(null),N=u(()=>ve.value?!0:G.value!==null?G.value:!!xt.display.show_reasoning);function Ut(){G.value=!N.value}const he=K(Date.now());let b=null;function $t(){const e=X.getThinkingObservation(s.message.id),t=!!(s.message.isStreaming&&e?.startedAt!==void 0&&e.endedAt===void 0);t&&b===null?b=window.setInterval(()=>{he.value=Date.now()},1e3):!t&&b!==null&&(window.clearInterval(b),b=null)}Gt($t),we(()=>{b!==null&&window.clearInterval(b)});const Q=u(()=>{const e=X.getThinkingObservation(s.message.id);if(!e?.startedAt)return null;const t=e.startedAt,a=e?.endedAt??(s.message.isStreaming?he.value:t);return Math.max(0,a-t)});function Ft(e){const t=Math.floor(e/1e3);if(t<60)return`${t}s`;const a=Math.floor(t/60),l=t%60;return l===0?`${a}m`:`${a}m ${l}s`}const Nt=u(()=>new Date(s.message.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}));function pe(e){return e.startsWith("image/")}function Et(e){return e<1024?e+" B":e<1024*1024?(e/1024).toFixed(1)+" KB":(e/(1024*1024)).toFixed(1)+" MB"}function Ot(e){const t=s.message.content||"";try{const v=JSON.parse(t);if(Array.isArray(v)&&v.length>0&&"type"in v[0]){const f=v.find(S=>S.type==="file"&&S.name===e);if(f&&f.path)return f.path}}catch{}const a=/\[File:\s*([^\]]+)\]\(([^)]+)\)/g;let l;for(;(l=a.exec(t))!==null;)if(l[1].trim()===e.trim())return l[2];return null}function Vt(e){const t=Ot(e.name);if(t){_.info(c("download.downloading")),Se(t,e.name).catch(a=>{_.error(a.message||c("download.downloadFailed"))});return}if(e.url&&e.url.startsWith("blob:")){const a=document.createElement("a");a.href=e.url,a.download=e.name,document.body.appendChild(a),a.click(),document.body.removeChild(a)}}function Lt(e,t){return e.length>oe?e.slice(0,oe)+`
@@ -1,4 +1,4 @@
1
- import{n as B}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as o,$t as a,An as n,At as ce,Bn as y,Bt as j,Cn as _e,E as oe,Jn as e,O as ko,On as re,Qt as K,St as Co,Tn as Mo,W as Y,Xn as Be,Yt as pe,an as M,bn as ge,bt as Po,ct as Ee,en as R,ft as he,g as ve,hn as Fe,nn as C,on as u,ot as $o,q as Ya,qt as To,sn as J,t as te,tn as D,w as Oe,wt as T,xn as c,yn as Ue,z as se}from"./ui-vendor-DNWaqYj5.js";import{c as Q,l as Z}from"./vue-vendor-VX6KvV1_.js";import{d as H,l as xe,n as ee,t as le}from"./_plugin-vue_export-helper-D4mtpdbl.js";import{c as So,l as Lo}from"./system-vQTkarwT.js";import{E as Ao,O as Ie,Q as Oo,X as ja,Y as Ja,Z as Uo,_ as No,v as zo,w as Bo}from"./index-BHU-82RO.js";import{n as we,t as be}from"./clipboard-1NPxC3YL.js";import{n as me,t as fe}from"./models-BX7pr_Gd.js";var Ve,De,qe,Ke,Re,Xe,Ge,He,We,Ye,je,Je,Qa,Qe=B((()=>{j(),te(),Q(),Ao(),fe(),Ja(),Ve={class:"auxiliary-panel"},De={class:"auxiliary-header"},qe={class:"auxiliary-table"},Ke={class:"auxiliary-row auxiliary-row-head"},Re={class:"task-name"},Xe={class:"task-config"},Ge={class:"task-timeout"},He={class:"task-actions"},We={class:"auxiliary-form"},Ye={key:0},je={class:"extra-body-field"},Je={class:"auxiliary-modal-actions"},Qa=J({__name:"AuxiliaryModelsPanel",setup(V){const{t}=Z(),l=se(),P=me(),g=ja(),h=y(!1),s=y(!1),E=y([]),A=y({}),O=y(!1),f=y(null),U=y(!1),p=y({provider:"",model:"",timeout:null,download_timeout:null,extra_body:""}),F=K(()=>{const i=new Set,r=[{label:t("models.auxiliaryProviderAuto"),value:"auto"},{label:t("models.auxiliaryProviderMain"),value:"main"}];for(const x of P.providers)!x.provider||i.has(x.provider)||(i.add(x.provider),r.push({label:x.label||x.provider,value:x.provider}));return r}),q=K(()=>{const i=p.value.provider.trim();return!i||i==="auto"||i==="main"?[]:b(i).map(r=>({label:r,value:r}))}),$=K(()=>f.value?.key==="vision");function b(i){return P.providers.find(r=>r.provider===i)?.models||[]}function v(i){return!i||i==="auto"||i==="main"?!0:P.providers.some(r=>r.provider===i)}function w(i){switch(i.key){case"compression":return t("models.auxiliaryTaskCompression");case"vision":return t("models.auxiliaryTaskVision");case"web_extract":return t("models.auxiliaryTaskWebExtract");case"skills_hub":return t("models.auxiliaryTaskSkillsHub");case"approval":return t("models.auxiliaryTaskApproval");case"mcp":return t("models.auxiliaryTaskMcp");case"title_generation":return t("models.auxiliaryTaskTitleGeneration");case"triage_specifier":return t("models.auxiliaryTaskTriageSpecifier");case"kanban_decomposer":return t("models.auxiliaryTaskKanbanDecomposer");case"profile_describer":return t("models.auxiliaryTaskProfileDescriber");case"curator":return t("models.auxiliaryTaskCurator");case"session_search":return t("models.auxiliaryTaskSessionSearch");case"flush_memories":return t("models.auxiliaryTaskFlushMemories");default:return i.label||i.key}}function _(i){if(!i||Object.keys(i).length===0)return t("models.auxiliaryProviderAuto");const r=i.provider||(i.base_url?t("models.auxiliaryCustomEndpoint"):t("models.auxiliaryDefault"));return i.model?`${r} / ${i.model}`:r}function m(i,r){const x=r?.timeout??i.default_timeout,X=i.key==="vision"?r?.download_timeout??i.default_download_timeout:void 0;if(!x&&!X)return t("models.auxiliaryDefault");const ie=[];return x&&ie.push(`${x}s`),X&&ie.push(`${t("models.auxiliaryDownloadShort")} ${X}s`),ie.join(" / ")}async function N(){h.value=!0;try{const i=await Bo();E.value=i.tasks,A.value=i.auxiliary}catch(i){l.error(i.message||t("models.auxiliaryLoadFailed"))}finally{h.value=!1}}function G(i){const r=A.value[i.key]||{},x=v(r.provider||"")&&r.provider||"auto",X=(x==="auto"||x==="main"||b(x).includes(r.model||""))&&r.model||"";f.value=i,U.value=!0,p.value={provider:x,model:X,timeout:r.timeout??i.default_timeout??null,download_timeout:i.key==="vision"?r.download_timeout??i.default_download_timeout??null:null,extra_body:r.extra_body?JSON.stringify(r.extra_body,null,2):""},U.value=!1,O.value=!0}function ue(){const i=p.value.extra_body.trim();if(!i)return;let r;try{r=JSON.parse(i)}catch{throw new Error(t("models.auxiliaryInvalidExtraBody"))}if(!r||typeof r!="object"||Array.isArray(r))throw new Error(t("models.auxiliaryInvalidExtraBody"));return r}function de(){const i={},r=p.value.provider.trim();if(r==="auto")return i.provider="auto",p.value.timeout&&(i.timeout=p.value.timeout),$.value&&p.value.download_timeout&&(i.download_timeout=p.value.download_timeout),i;const x=ue(),X=p.value.model.trim();if(r&&(i.provider=r),r&&r!=="auto"&&r!=="main"&&!X)throw new Error(t("models.modelRequired"));return X&&(i.model=X),p.value.timeout&&(i.timeout=p.value.timeout),$.value&&p.value.download_timeout&&(i.download_timeout=p.value.download_timeout),x&&Object.keys(x).length>0&&(i.extra_body=x),Object.keys(i).length===0&&(i.provider="auto"),i}async function W(){if(!f.value)return;let i;try{i=de()}catch(r){l.error(r.message);return}s.value=!0;try{const r={...A.value};Object.keys(i).length>0?r[f.value.key]=i:delete r[f.value.key],A.value=(await Ie(r)).auxiliary,O.value=!1,l.success(t("models.auxiliarySaved"))}catch(r){l.error(r.message||t("models.auxiliarySaveFailed"))}finally{s.value=!1}}async function ae(i){s.value=!0;try{const r={...A.value};r[i.key]={provider:"auto",...i.default_timeout?{timeout:i.default_timeout}:{},...i.key==="vision"&&i.default_download_timeout?{download_timeout:i.default_download_timeout}:{}},A.value=(await Ie(r)).auxiliary,l.success(t("models.auxiliarySaved"))}catch(r){l.error(r.message||t("models.auxiliarySaveFailed"))}finally{s.value=!1}}return Ue(()=>{N()}),re(()=>g.activeProfileName,()=>{N()}),re(()=>p.value.provider,i=>{if(!U.value){if(!i||i==="auto"||i==="main"){p.value.model="",i==="auto"&&(p.value.extra_body="");return}b(i).includes(p.value.model)||(p.value.model="")}},{flush:"sync"}),(i,r)=>(c(),C("section",Ve,[a("div",De,[a("div",null,[a("h3",null,o(e(t)("models.auxiliaryTitle")),1),a("p",null,o(e(t)("models.auxiliarySubtitle")),1)]),u(e(T),{size:"small",quaternary:"",loading:h.value,onClick:N},{default:n(()=>[M(o(e(t)("models.auxiliaryRefresh")),1)]),_:1},8,["loading"])]),u(e(ve),{show:h.value},{default:n(()=>[a("div",qe,[a("div",Ke,[a("span",null,o(e(t)("models.auxiliaryTask")),1),a("span",null,o(e(t)("models.provider"))+" / "+o(e(t)("models.defaultModel")),1),a("span",null,o(e(t)("models.auxiliaryTimeout")),1),a("span",null,o(e(t)("models.auxiliaryActions")),1)]),(c(!0),C(pe,null,_e(E.value,x=>(c(),C("div",{key:x.key,class:"auxiliary-row"},[a("span",Re,o(w(x)),1),a("span",Xe,o(_(A.value[x.key])),1),a("span",Ge,o(m(x,A.value[x.key])),1),a("span",He,[u(e(T),{size:"tiny",quaternary:"",onClick:X=>G(x)},{default:n(()=>[M(o(e(t)("common.edit")),1)]),_:1},8,["onClick"]),u(e(T),{size:"tiny",quaternary:"",disabled:s.value,onClick:X=>ae(x)},{default:n(()=>[M(o(e(t)("models.auxiliaryClear")),1)]),_:1},8,["disabled","onClick"])])]))),128))])]),_:1},8,["show"]),u(e(Y),{show:O.value,"onUpdate:show":r[6]||(r[6]=x=>O.value=x),preset:"card",title:f.value?w(f.value):e(t)("models.auxiliaryTitle"),style:{width:"min(620px, calc(100vw - 32px))"},"mask-closable":!s.value},{footer:n(()=>[a("div",Je,[u(e(T),{disabled:s.value,onClick:r[5]||(r[5]=x=>O.value=!1)},{default:n(()=>[M(o(e(t)("common.cancel")),1)]),_:1},8,["disabled"]),u(e(T),{type:"primary",loading:s.value,onClick:W},{default:n(()=>[M(o(e(t)("common.save")),1)]),_:1},8,["loading"])])]),default:n(()=>[a("div",We,[a("label",null,[a("span",null,o(e(t)("models.provider")),1),u(e(he),{value:p.value.provider,"onUpdate:value":r[0]||(r[0]=x=>p.value.provider=x),options:F.value,placeholder:e(t)("models.chooseProvider"),filterable:"",clearable:""},null,8,["value","options","placeholder"])]),a("label",null,[a("span",null,o(e(t)("models.defaultModel")),1),u(e(he),{value:p.value.model,"onUpdate:value":r[1]||(r[1]=x=>p.value.model=x),options:q.value,placeholder:e(t)("models.selectModel"),disabled:!p.value.provider||p.value.provider==="auto"||p.value.provider==="main",filterable:"",clearable:""},null,8,["value","options","placeholder","disabled"])]),a("label",null,[a("span",null,o(e(t)("models.auxiliaryTimeout")),1),u(e(Oe),{value:p.value.timeout,"onUpdate:value":r[2]||(r[2]=x=>p.value.timeout=x),min:1,precision:0,clearable:""},null,8,["value"])]),$.value?(c(),C("label",Ye,[a("span",null,o(e(t)("models.auxiliaryDownloadTimeout")),1),u(e(Oe),{value:p.value.download_timeout,"onUpdate:value":r[3]||(r[3]=x=>p.value.download_timeout=x),min:1,precision:0,clearable:""},null,8,["value"])])):D("",!0),a("label",je,[a("span",null,o(e(t)("models.auxiliaryExtraBody")),1),u(e(ce),{value:p.value.extra_body,"onUpdate:value":r[4]||(r[4]=x=>p.value.extra_body=x),type:"textarea",autosize:{minRows:4,maxRows:8}},null,8,["value"])])])]),_:1},8,["show","title","mask-closable"])]))}})})),Eo=B((()=>{})),Za,Fo=B((()=>{Qe(),Qe(),Eo(),ee(),Za=le(Qa,[["__scopeId","data-v-a3a2e478"]])}));async function Io(){return H("/api/hermes/auth/copilot/start",{method:"POST"})}async function Vo(V){return H(`/api/hermes/auth/copilot/poll/${V}`)}async function Ne(){return H("/api/hermes/auth/copilot/check-token")}async function Do(){return H("/api/hermes/auth/copilot/enable",{method:"POST"})}async function qo(){return H("/api/hermes/auth/copilot/disable",{method:"POST"})}var ke=B((()=>{xe()})),Ze,el,ll,al,ol,tl,sl,il,nl,rl,ul,dl,vl,cl,_l,pl,ml,fl,yl,hl,gl,xl,wl,bl,kl,Cl,Ml,Pl,$l,Tl,Sl,Ll,Al,Ol,Ul,Nl,eo,zl=B((()=>{j(),te(),fe(),Uo(),No(),ke(),Q(),Ze={class:"provider-card"},el={class:"card-header"},ll={class:"provider-name"},al={class:"provider-badges"},ol={key:0,class:"type-badge default"},tl={class:"card-body"},sl={class:"info-row"},il={class:"info-label"},nl={class:"info-value mono"},rl={class:"info-row"},ul={class:"info-label"},dl={class:"info-value mono"},vl={class:"info-row models-row"},cl={class:"info-label"},_l={class:"info-value models-count"},pl={class:"models-list"},ml=["title","onClick"],fl={class:"model-tag-name"},yl={key:0,class:"model-tag-default"},hl={key:1,class:"model-tag-id"},gl={key:0,class:"model-tag model-tag-more"},xl={class:"card-actions"},wl={class:"alias-list-hint"},bl={class:"alias-list"},kl={class:"alias-row-text"},Cl={class:"alias-row-name"},Ml={key:0,class:"alias-row-default"},Pl={class:"alias-row-id"},$l={key:0,class:"model-alias-canonical"},Tl={class:"model-alias-hint"},Sl={class:"model-alias-actions"},Ll={class:"visibility-hint"},Al={class:"visibility-count"},Ol={class:"visibility-list"},Ul={key:0,class:"visibility-model-id"},Nl={class:"visibility-actions"},eo=J({__name:"ProviderCard",props:{provider:{}},setup(V){const t=V,{t:l}=Z(),P=me(),g=Oo(),h=zo(),s=se(),E=Ya(),A=K(()=>!t.provider.builtin&&t.provider.provider.startsWith("custom:")),O=K(()=>t.provider.provider==="copilot"),f=K(()=>t.provider.label),U=y(!1),p=y(!1),F=y(!1),q=y(""),$=y(""),b=y(""),v=y(!1),w=y(!1),_=y([]),m=K(()=>P.allProviders.find(I=>I.provider===t.provider.provider)),N=K(()=>t.provider.available_models?.length?t.provider.available_models:m.value?.models?.length?m.value.models:t.provider.models),G=K(()=>g.getProviderVisibility(t.provider.provider)),ue=K(()=>G.value.mode==="include"),de=K(()=>`${t.provider.models.length}/${N.value.length}`),W=K(()=>P.defaultProvider===t.provider.provider);function ae(I){return W.value&&P.defaultModel===I}function i(I){return g.getModelAlias(I,t.provider.provider)}function r(I){return g.displayModelName(I,t.provider.provider)}function x(I){q.value=t.provider.provider,$.value=I,b.value=g.getModelAlias(I,t.provider.provider),F.value=!0}async function X(){if(!(!$.value||!q.value))try{await g.setModelAlias($.value,q.value,b.value),F.value=!1}catch(I){s.error(I.message||l("models.aliasSaveFailed"))}}async function ie(){b.value="",await X()}function Ce(){const I=g.getProviderVisibility(t.provider.provider);_.value=I.mode==="include"?N.value.filter(L=>I.models.includes(L)):[...N.value],v.value=!0}async function Me(){if(_.value.length===0){s.error(l("models.visibilitySelectOne"));return}w.value=!0;try{const I=_.value.filter(S=>N.value.includes(S)),L=I.length===N.value.length?"all":"include";await g.setModelVisibility(t.provider.provider,{mode:L,models:I}),await P.fetchProviders(),v.value=!1,s.success(l("models.visibilitySaved"))}catch(I){s.error(I.message||l("models.visibilitySaveFailed"))}finally{w.value=!1}}function Pe(){_.value=[...N.value]}function ye(){_.value=[]}async function $e(){let I="";if(O.value)try{const L=await Ne();L.source==="env"?I=l("models.copilotDeleteHintEnv"):L.source==="gh-cli"?I=l("models.copilotDeleteHintGhCli"):L.source==="apps-json"&&(I=l("models.copilotDeleteHintAppsJson"))}catch{}E.warning({title:l("models.deleteProvider"),content:O.value&&I?`${l("models.deleteConfirm",{name:f.value})}
1
+ import{n as B}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as o,$t as a,An as n,At as ce,Bn as y,Bt as j,Cn as _e,E as oe,Jn as e,O as ko,On as re,Qt as K,St as Co,Tn as Mo,W as Y,Xn as Be,Yt as pe,an as M,bn as ge,bt as Po,ct as Ee,en as R,ft as he,g as ve,hn as Fe,nn as C,on as u,ot as $o,q as Ya,qt as To,sn as J,t as te,tn as D,w as Oe,wt as T,xn as c,yn as Ue,z as se}from"./ui-vendor-DNWaqYj5.js";import{c as Q,l as Z}from"./vue-vendor-VX6KvV1_.js";import{d as H,l as xe,n as ee,t as le}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{c as So,l as Lo}from"./system-Pg8JEuA6.js";import{E as Ao,O as Ie,Q as Oo,X as ja,Y as Ja,Z as Uo,_ as No,v as zo,w as Bo}from"./index-DyLZQAQu.js";import{n as we,t as be}from"./clipboard-1NPxC3YL.js";import{n as me,t as fe}from"./models-CjHxxDse.js";var Ve,De,qe,Ke,Re,Xe,Ge,He,We,Ye,je,Je,Qa,Qe=B((()=>{j(),te(),Q(),Ao(),fe(),Ja(),Ve={class:"auxiliary-panel"},De={class:"auxiliary-header"},qe={class:"auxiliary-table"},Ke={class:"auxiliary-row auxiliary-row-head"},Re={class:"task-name"},Xe={class:"task-config"},Ge={class:"task-timeout"},He={class:"task-actions"},We={class:"auxiliary-form"},Ye={key:0},je={class:"extra-body-field"},Je={class:"auxiliary-modal-actions"},Qa=J({__name:"AuxiliaryModelsPanel",setup(V){const{t}=Z(),l=se(),P=me(),g=ja(),h=y(!1),s=y(!1),E=y([]),A=y({}),O=y(!1),f=y(null),U=y(!1),p=y({provider:"",model:"",timeout:null,download_timeout:null,extra_body:""}),F=K(()=>{const i=new Set,r=[{label:t("models.auxiliaryProviderAuto"),value:"auto"},{label:t("models.auxiliaryProviderMain"),value:"main"}];for(const x of P.providers)!x.provider||i.has(x.provider)||(i.add(x.provider),r.push({label:x.label||x.provider,value:x.provider}));return r}),q=K(()=>{const i=p.value.provider.trim();return!i||i==="auto"||i==="main"?[]:b(i).map(r=>({label:r,value:r}))}),$=K(()=>f.value?.key==="vision");function b(i){return P.providers.find(r=>r.provider===i)?.models||[]}function v(i){return!i||i==="auto"||i==="main"?!0:P.providers.some(r=>r.provider===i)}function w(i){switch(i.key){case"compression":return t("models.auxiliaryTaskCompression");case"vision":return t("models.auxiliaryTaskVision");case"web_extract":return t("models.auxiliaryTaskWebExtract");case"skills_hub":return t("models.auxiliaryTaskSkillsHub");case"approval":return t("models.auxiliaryTaskApproval");case"mcp":return t("models.auxiliaryTaskMcp");case"title_generation":return t("models.auxiliaryTaskTitleGeneration");case"triage_specifier":return t("models.auxiliaryTaskTriageSpecifier");case"kanban_decomposer":return t("models.auxiliaryTaskKanbanDecomposer");case"profile_describer":return t("models.auxiliaryTaskProfileDescriber");case"curator":return t("models.auxiliaryTaskCurator");case"session_search":return t("models.auxiliaryTaskSessionSearch");case"flush_memories":return t("models.auxiliaryTaskFlushMemories");default:return i.label||i.key}}function _(i){if(!i||Object.keys(i).length===0)return t("models.auxiliaryProviderAuto");const r=i.provider||(i.base_url?t("models.auxiliaryCustomEndpoint"):t("models.auxiliaryDefault"));return i.model?`${r} / ${i.model}`:r}function m(i,r){const x=r?.timeout??i.default_timeout,X=i.key==="vision"?r?.download_timeout??i.default_download_timeout:void 0;if(!x&&!X)return t("models.auxiliaryDefault");const ie=[];return x&&ie.push(`${x}s`),X&&ie.push(`${t("models.auxiliaryDownloadShort")} ${X}s`),ie.join(" / ")}async function N(){h.value=!0;try{const i=await Bo();E.value=i.tasks,A.value=i.auxiliary}catch(i){l.error(i.message||t("models.auxiliaryLoadFailed"))}finally{h.value=!1}}function G(i){const r=A.value[i.key]||{},x=v(r.provider||"")&&r.provider||"auto",X=(x==="auto"||x==="main"||b(x).includes(r.model||""))&&r.model||"";f.value=i,U.value=!0,p.value={provider:x,model:X,timeout:r.timeout??i.default_timeout??null,download_timeout:i.key==="vision"?r.download_timeout??i.default_download_timeout??null:null,extra_body:r.extra_body?JSON.stringify(r.extra_body,null,2):""},U.value=!1,O.value=!0}function ue(){const i=p.value.extra_body.trim();if(!i)return;let r;try{r=JSON.parse(i)}catch{throw new Error(t("models.auxiliaryInvalidExtraBody"))}if(!r||typeof r!="object"||Array.isArray(r))throw new Error(t("models.auxiliaryInvalidExtraBody"));return r}function de(){const i={},r=p.value.provider.trim();if(r==="auto")return i.provider="auto",p.value.timeout&&(i.timeout=p.value.timeout),$.value&&p.value.download_timeout&&(i.download_timeout=p.value.download_timeout),i;const x=ue(),X=p.value.model.trim();if(r&&(i.provider=r),r&&r!=="auto"&&r!=="main"&&!X)throw new Error(t("models.modelRequired"));return X&&(i.model=X),p.value.timeout&&(i.timeout=p.value.timeout),$.value&&p.value.download_timeout&&(i.download_timeout=p.value.download_timeout),x&&Object.keys(x).length>0&&(i.extra_body=x),Object.keys(i).length===0&&(i.provider="auto"),i}async function W(){if(!f.value)return;let i;try{i=de()}catch(r){l.error(r.message);return}s.value=!0;try{const r={...A.value};Object.keys(i).length>0?r[f.value.key]=i:delete r[f.value.key],A.value=(await Ie(r)).auxiliary,O.value=!1,l.success(t("models.auxiliarySaved"))}catch(r){l.error(r.message||t("models.auxiliarySaveFailed"))}finally{s.value=!1}}async function ae(i){s.value=!0;try{const r={...A.value};r[i.key]={provider:"auto",...i.default_timeout?{timeout:i.default_timeout}:{},...i.key==="vision"&&i.default_download_timeout?{download_timeout:i.default_download_timeout}:{}},A.value=(await Ie(r)).auxiliary,l.success(t("models.auxiliarySaved"))}catch(r){l.error(r.message||t("models.auxiliarySaveFailed"))}finally{s.value=!1}}return Ue(()=>{N()}),re(()=>g.activeProfileName,()=>{N()}),re(()=>p.value.provider,i=>{if(!U.value){if(!i||i==="auto"||i==="main"){p.value.model="",i==="auto"&&(p.value.extra_body="");return}b(i).includes(p.value.model)||(p.value.model="")}},{flush:"sync"}),(i,r)=>(c(),C("section",Ve,[a("div",De,[a("div",null,[a("h3",null,o(e(t)("models.auxiliaryTitle")),1),a("p",null,o(e(t)("models.auxiliarySubtitle")),1)]),u(e(T),{size:"small",quaternary:"",loading:h.value,onClick:N},{default:n(()=>[M(o(e(t)("models.auxiliaryRefresh")),1)]),_:1},8,["loading"])]),u(e(ve),{show:h.value},{default:n(()=>[a("div",qe,[a("div",Ke,[a("span",null,o(e(t)("models.auxiliaryTask")),1),a("span",null,o(e(t)("models.provider"))+" / "+o(e(t)("models.defaultModel")),1),a("span",null,o(e(t)("models.auxiliaryTimeout")),1),a("span",null,o(e(t)("models.auxiliaryActions")),1)]),(c(!0),C(pe,null,_e(E.value,x=>(c(),C("div",{key:x.key,class:"auxiliary-row"},[a("span",Re,o(w(x)),1),a("span",Xe,o(_(A.value[x.key])),1),a("span",Ge,o(m(x,A.value[x.key])),1),a("span",He,[u(e(T),{size:"tiny",quaternary:"",onClick:X=>G(x)},{default:n(()=>[M(o(e(t)("common.edit")),1)]),_:1},8,["onClick"]),u(e(T),{size:"tiny",quaternary:"",disabled:s.value,onClick:X=>ae(x)},{default:n(()=>[M(o(e(t)("models.auxiliaryClear")),1)]),_:1},8,["disabled","onClick"])])]))),128))])]),_:1},8,["show"]),u(e(Y),{show:O.value,"onUpdate:show":r[6]||(r[6]=x=>O.value=x),preset:"card",title:f.value?w(f.value):e(t)("models.auxiliaryTitle"),style:{width:"min(620px, calc(100vw - 32px))"},"mask-closable":!s.value},{footer:n(()=>[a("div",Je,[u(e(T),{disabled:s.value,onClick:r[5]||(r[5]=x=>O.value=!1)},{default:n(()=>[M(o(e(t)("common.cancel")),1)]),_:1},8,["disabled"]),u(e(T),{type:"primary",loading:s.value,onClick:W},{default:n(()=>[M(o(e(t)("common.save")),1)]),_:1},8,["loading"])])]),default:n(()=>[a("div",We,[a("label",null,[a("span",null,o(e(t)("models.provider")),1),u(e(he),{value:p.value.provider,"onUpdate:value":r[0]||(r[0]=x=>p.value.provider=x),options:F.value,placeholder:e(t)("models.chooseProvider"),filterable:"",clearable:""},null,8,["value","options","placeholder"])]),a("label",null,[a("span",null,o(e(t)("models.defaultModel")),1),u(e(he),{value:p.value.model,"onUpdate:value":r[1]||(r[1]=x=>p.value.model=x),options:q.value,placeholder:e(t)("models.selectModel"),disabled:!p.value.provider||p.value.provider==="auto"||p.value.provider==="main",filterable:"",clearable:""},null,8,["value","options","placeholder","disabled"])]),a("label",null,[a("span",null,o(e(t)("models.auxiliaryTimeout")),1),u(e(Oe),{value:p.value.timeout,"onUpdate:value":r[2]||(r[2]=x=>p.value.timeout=x),min:1,precision:0,clearable:""},null,8,["value"])]),$.value?(c(),C("label",Ye,[a("span",null,o(e(t)("models.auxiliaryDownloadTimeout")),1),u(e(Oe),{value:p.value.download_timeout,"onUpdate:value":r[3]||(r[3]=x=>p.value.download_timeout=x),min:1,precision:0,clearable:""},null,8,["value"])])):D("",!0),a("label",je,[a("span",null,o(e(t)("models.auxiliaryExtraBody")),1),u(e(ce),{value:p.value.extra_body,"onUpdate:value":r[4]||(r[4]=x=>p.value.extra_body=x),type:"textarea",autosize:{minRows:4,maxRows:8}},null,8,["value"])])])]),_:1},8,["show","title","mask-closable"])]))}})})),Eo=B((()=>{})),Za,Fo=B((()=>{Qe(),Qe(),Eo(),ee(),Za=le(Qa,[["__scopeId","data-v-a3a2e478"]])}));async function Io(){return H("/api/hermes/auth/copilot/start",{method:"POST"})}async function Vo(V){return H(`/api/hermes/auth/copilot/poll/${V}`)}async function Ne(){return H("/api/hermes/auth/copilot/check-token")}async function Do(){return H("/api/hermes/auth/copilot/enable",{method:"POST"})}async function qo(){return H("/api/hermes/auth/copilot/disable",{method:"POST"})}var ke=B((()=>{xe()})),Ze,el,ll,al,ol,tl,sl,il,nl,rl,ul,dl,vl,cl,_l,pl,ml,fl,yl,hl,gl,xl,wl,bl,kl,Cl,Ml,Pl,$l,Tl,Sl,Ll,Al,Ol,Ul,Nl,eo,zl=B((()=>{j(),te(),fe(),Uo(),No(),ke(),Q(),Ze={class:"provider-card"},el={class:"card-header"},ll={class:"provider-name"},al={class:"provider-badges"},ol={key:0,class:"type-badge default"},tl={class:"card-body"},sl={class:"info-row"},il={class:"info-label"},nl={class:"info-value mono"},rl={class:"info-row"},ul={class:"info-label"},dl={class:"info-value mono"},vl={class:"info-row models-row"},cl={class:"info-label"},_l={class:"info-value models-count"},pl={class:"models-list"},ml=["title","onClick"],fl={class:"model-tag-name"},yl={key:0,class:"model-tag-default"},hl={key:1,class:"model-tag-id"},gl={key:0,class:"model-tag model-tag-more"},xl={class:"card-actions"},wl={class:"alias-list-hint"},bl={class:"alias-list"},kl={class:"alias-row-text"},Cl={class:"alias-row-name"},Ml={key:0,class:"alias-row-default"},Pl={class:"alias-row-id"},$l={key:0,class:"model-alias-canonical"},Tl={class:"model-alias-hint"},Sl={class:"model-alias-actions"},Ll={class:"visibility-hint"},Al={class:"visibility-count"},Ol={class:"visibility-list"},Ul={key:0,class:"visibility-model-id"},Nl={class:"visibility-actions"},eo=J({__name:"ProviderCard",props:{provider:{}},setup(V){const t=V,{t:l}=Z(),P=me(),g=Oo(),h=zo(),s=se(),E=Ya(),A=K(()=>!t.provider.builtin&&t.provider.provider.startsWith("custom:")),O=K(()=>t.provider.provider==="copilot"),f=K(()=>t.provider.label),U=y(!1),p=y(!1),F=y(!1),q=y(""),$=y(""),b=y(""),v=y(!1),w=y(!1),_=y([]),m=K(()=>P.allProviders.find(I=>I.provider===t.provider.provider)),N=K(()=>t.provider.available_models?.length?t.provider.available_models:m.value?.models?.length?m.value.models:t.provider.models),G=K(()=>g.getProviderVisibility(t.provider.provider)),ue=K(()=>G.value.mode==="include"),de=K(()=>`${t.provider.models.length}/${N.value.length}`),W=K(()=>P.defaultProvider===t.provider.provider);function ae(I){return W.value&&P.defaultModel===I}function i(I){return g.getModelAlias(I,t.provider.provider)}function r(I){return g.displayModelName(I,t.provider.provider)}function x(I){q.value=t.provider.provider,$.value=I,b.value=g.getModelAlias(I,t.provider.provider),F.value=!0}async function X(){if(!(!$.value||!q.value))try{await g.setModelAlias($.value,q.value,b.value),F.value=!1}catch(I){s.error(I.message||l("models.aliasSaveFailed"))}}async function ie(){b.value="",await X()}function Ce(){const I=g.getProviderVisibility(t.provider.provider);_.value=I.mode==="include"?N.value.filter(L=>I.models.includes(L)):[...N.value],v.value=!0}async function Me(){if(_.value.length===0){s.error(l("models.visibilitySelectOne"));return}w.value=!0;try{const I=_.value.filter(S=>N.value.includes(S)),L=I.length===N.value.length?"all":"include";await g.setModelVisibility(t.provider.provider,{mode:L,models:I}),await P.fetchProviders(),v.value=!1,s.success(l("models.visibilitySaved"))}catch(I){s.error(I.message||l("models.visibilitySaveFailed"))}finally{w.value=!1}}function Pe(){_.value=[...N.value]}function ye(){_.value=[]}async function $e(){let I="";if(O.value)try{const L=await Ne();L.source==="env"?I=l("models.copilotDeleteHintEnv"):L.source==="gh-cli"?I=l("models.copilotDeleteHintGhCli"):L.source==="apps-json"&&(I=l("models.copilotDeleteHintAppsJson"))}catch{}E.warning({title:l("models.deleteProvider"),content:O.value&&I?`${l("models.deleteConfirm",{name:f.value})}
2
2
 
3
3
  ${I}`:l("models.deleteConfirm",{name:f.value}),positiveText:l("common.delete"),negativeText:l("common.cancel"),onPositiveClick:async()=>{U.value=!0;try{if(O.value?(await qo(),h.clearProviderFromSessions("copilot"),await P.fetchProviders()):await P.removeProvider(t.provider.provider),!g.selectedModel&&g.modelGroups.length>0){const L=g.modelGroups.find(S=>S.models.length>0);L&&await g.switchModel(L.models[0],L.provider)}s.success(l("models.providerDeleted"))}catch(L){s.error(L.message)}finally{U.value=!1}}})}return(I,L)=>(c(),C("div",Ze,[a("div",el,[a("h3",ll,o(f.value),1),a("div",al,[W.value?(c(),C("span",ol,o(e(l)("models.currentDefault")),1)):D("",!0),a("span",{class:Be(["type-badge",A.value?"custom":"builtin"])},o(A.value?e(l)("models.customType"):e(l)("models.builtIn")),3)])]),a("div",tl,[a("div",sl,[a("span",il,o(e(l)("models.provider")),1),a("code",nl,o(V.provider.provider),1)]),a("div",rl,[a("span",ul,o(e(l)("models.baseUrl")),1),a("code",dl,o(V.provider.base_url),1)]),a("div",vl,[a("span",cl,o(e(l)("models.models")),1),a("span",_l,o(ue.value?de.value:V.provider.models.length)+" "+o(e(l)("models.count")),1)]),a("div",pl,[(c(!0),C(pe,null,_e(V.provider.models.slice(0,20),S=>(c(),C("button",{key:S,class:Be(["model-tag model-tag-button",{default:ae(S)}]),type:"button",title:e(l)("models.aliasTitleFor",{model:S}),onClick:Te=>x(S)},[a("span",fl,o(r(S)),1),ae(S)?(c(),C("span",yl,o(e(l)("models.defaultShort")),1)):D("",!0),i(S)?(c(),C("span",hl,o(S),1)):D("",!0)],10,ml))),128)),V.provider.models.length>20?(c(),C("span",gl," +"+o(V.provider.models.length-20)+" "+o(e(l)("models.more")),1)):D("",!0)])]),a("div",xl,[u(e(T),{size:"tiny",quaternary:"",onClick:L[0]||(L[0]=S=>p.value=!0)},{default:n(()=>[M(o(e(l)("models.aliasManage")),1)]),_:1}),u(e(T),{size:"tiny",quaternary:"",onClick:Ce},{default:n(()=>[M(o(e(l)("models.manageVisibleModels")),1)]),_:1}),u(e(T),{size:"tiny",quaternary:"",type:"error",loading:U.value,onClick:$e},{default:n(()=>[M(o(e(l)("common.delete")),1)]),_:1},8,["loading"])]),u(e(Y),{show:p.value,"onUpdate:show":L[1]||(L[1]=S=>p.value=S),preset:"card",title:e(l)("models.aliasManageFor",{provider:f.value}),style:{width:"min(560px, calc(100vw - 32px))"},"mask-closable":!0},{default:n(()=>[a("div",wl,o(e(l)("models.aliasHint")),1),a("div",bl,[(c(!0),C(pe,null,_e(V.provider.models,S=>(c(),C("div",{key:S,class:"alias-row"},[a("div",kl,[a("span",Cl,o(r(S)),1),ae(S)?(c(),C("span",Ml,o(e(l)("models.defaultShort")),1)):D("",!0),a("code",Pl,o(S),1)]),u(e(T),{size:"tiny",quaternary:"",onClick:Te=>x(S)},{default:n(()=>[M(o(e(l)("models.aliasEdit")),1)]),_:1},8,["onClick"])]))),128))])]),_:1},8,["show","title"]),u(e(Y),{show:F.value,"onUpdate:show":L[4]||(L[4]=S=>F.value=S),preset:"card",title:$.value?e(l)("models.aliasTitleFor",{model:$.value}):e(l)("models.aliasTitle"),style:{width:"min(420px, calc(100vw - 32px))"},"mask-closable":!0},{footer:n(()=>[a("div",Sl,[u(e(T),{quaternary:"",disabled:!e(g).getModelAlias($.value,q.value),onClick:ie},{default:n(()=>[M(o(e(l)("models.aliasUseOriginal")),1)]),_:1},8,["disabled"]),L[8]||(L[8]=a("div",{class:"model-alias-spacer"},null,-1)),u(e(T),{onClick:L[3]||(L[3]=S=>F.value=!1)},{default:n(()=>[M(o(e(l)("common.cancel")),1)]),_:1}),u(e(T),{type:"primary",onClick:X},{default:n(()=>[M(o(e(l)("common.save")),1)]),_:1})])]),default:n(()=>[u(e(ce),{value:b.value,"onUpdate:value":L[2]||(L[2]=S=>b.value=S),placeholder:e(l)("models.aliasPlaceholder"),clearable:"",onKeydown:To(X,["enter"])},null,8,["value","placeholder"]),$.value?(c(),C("div",$l,o(e(l)("models.aliasCanonical",{model:$.value})),1)):D("",!0),a("div",Tl,o(e(l)("models.aliasHint")),1)]),_:1},8,["show","title"]),u(e(Y),{show:v.value,"onUpdate:show":L[7]||(L[7]=S=>v.value=S),preset:"card",title:e(l)("models.manageVisibleModelsFor",{name:f.value}),style:{width:"min(560px, calc(100vw - 32px))"},"mask-closable":!w.value},{default:n(()=>[a("p",Ll,o(e(l)("models.visibilityHint")),1),a("div",Al,o(_.value.length)+"/"+o(N.value.length)+" "+o(e(l)("models.count")),1),a("div",Ol,[u(e(Co),{value:_.value,"onUpdate:value":L[5]||(L[5]=S=>_.value=S)},{default:n(()=>[(c(!0),C(pe,null,_e(N.value,S=>(c(),R(e(Po),{key:S,value:S,class:"visibility-model"},{default:n(()=>[a("code",null,o(r(S)),1),i(S)?(c(),C("code",Ul,o(S),1)):D("",!0)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a("div",Nl,[u(e(T),{size:"small",quaternary:"",disabled:w.value,onClick:Pe},{default:n(()=>[M(o(e(l)("models.showAllModels")),1)]),_:1},8,["disabled"]),u(e(T),{size:"small",quaternary:"",disabled:w.value,onClick:ye},{default:n(()=>[M(o(e(l)("models.clearVisibleModels")),1)]),_:1},8,["disabled"]),L[9]||(L[9]=a("div",{class:"visibility-action-spacer"},null,-1)),u(e(T),{size:"small",disabled:w.value,onClick:L[6]||(L[6]=S=>v.value=!1)},{default:n(()=>[M(o(e(l)("common.cancel")),1)]),_:1},8,["disabled"]),u(e(T),{size:"small",type:"primary",loading:w.value,onClick:Me},{default:n(()=>[M(o(e(l)("common.save")),1)]),_:1},8,["loading"])])]),_:1},8,["show","title","mask-closable"])]))}})})),Ko=B((()=>{})),lo,Ro=B((()=>{zl(),zl(),Ko(),ee(),lo=le(eo,[["__scopeId","data-v-4aed95c5"]])})),Bl,El,ao,Fl=B((()=>{j(),Ro(),fe(),Q(),Bl={key:0,class:"empty-state"},El={key:1,class:"providers-grid"},ao=J({__name:"ProvidersPanel",setup(V){const{t}=Z(),l=me();return(P,g)=>e(l).providers.length===0?(c(),C("div",Bl,[g[0]||(g[0]=a("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1",class:"empty-icon"},[a("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),a("path",{d:"M2 17l10 5 10-5"}),a("path",{d:"M2 12l10 5 10-5"})],-1)),a("p",null,o(e(t)("models.noProviders")),1)])):(c(),C("div",El,[(c(!0),C(pe,null,_e(e(l).providers,h=>(c(),R(lo,{key:h.provider,provider:h},null,8,["provider"]))),128))]))}})})),Xo=B((()=>{})),oo,Go=B((()=>{Fl(),Fl(),Xo(),ee(),oo=le(ao,[["__scopeId","data-v-76eec30b"]])}));async function Ho(){return H("/api/hermes/auth/codex/start",{method:"POST"})}async function Wo(V){return H(`/api/hermes/auth/codex/poll/${V}`)}var Yo=B((()=>{xe()})),Il,Vl,Dl,ql,Kl,Rl,Xl,Gl,Hl,Wl,Yl,to,jl=B((()=>{j(),te(),Q(),Yo(),we(),Il={class:"codex-login"},Vl={key:0,class:"codex-login__state"},Dl={key:1,class:"codex-login__state"},ql={class:"codex-login__hint"},Kl={class:"codex-login__code-text"},Rl={key:2,class:"codex-login__state codex-login__state--success"},Xl={key:3,class:"codex-login__state"},Gl={class:"codex-login__error"},Hl={key:4,class:"codex-login__state"},Wl={class:"codex-login__error"},Yl={class:"modal-footer"},to=J({__name:"CodexLoginModal",emits:["close","success"],setup(V,{emit:t}){const{t:l}=Z(),P=t,g=se(),h=y(!0),s=y("idle"),E=y(""),A=y(""),O=y(""),f=y("");let U=null;async function p(){s.value="loading",f.value="";try{const _=await Ho();E.value=_.user_code,A.value=_.verification_url,O.value=_.session_id,s.value="waiting",F()}catch(_){s.value="error";const m=_.message||"";try{const N=m.match(/\{[\s\S]*\}$/);N?f.value=JSON.parse(N[0]).error||m:f.value=m}catch{f.value=m}g.error(f.value)}}function F(){q(),U=setTimeout(async()=>{try{const _=await Wo(O.value);_.status==="pending"?F():_.status==="approved"?(s.value="approved",g.success(l("models.codexApproved")),setTimeout(()=>{h.value=!1,setTimeout(()=>P("success"),200)},1e3)):_.status==="expired"?s.value="expired":_.status==="error"&&(s.value="error",f.value=_.error||"Unknown error")}catch{F()}},3e3)}function q(){U&&(clearTimeout(U),U=null)}function $(){q(),h.value=!1,setTimeout(()=>P("close"),200)}async function b(){await be(E.value)?g.success(l("models.codexCopyCode")):g.error(l("models.codexCopyCode")+" ✗")}function v(){window.open(A.value,"_blank")}function w(){s.value="idle",E.value="",A.value="",O.value="",f.value="",p()}return ge(()=>{q()}),p(),(_,m)=>{const N=Mo("NSpin");return c(),R(e(Y),{show:h.value,"onUpdate:show":m[0]||(m[0]=G=>h.value=G),preset:"card",title:e(l)("models.codexLoginTitle"),style:{width:"min(440px, calc(100vw - 32px))"},"mask-closable":s.value!=="waiting",onAfterLeave:m[1]||(m[1]=G=>P("close"))},{footer:n(()=>[a("div",Yl,[u(e(T),{disabled:s.value==="waiting",onClick:$},{default:n(()=>[M(o(e(l)("common.cancel")),1)]),_:1},8,["disabled"])])]),default:n(()=>[a("div",Il,[s.value==="idle"||s.value==="loading"?(c(),C("div",Vl,[u(N,{size:"small"})])):s.value==="waiting"?(c(),C("div",Dl,[a("p",ql,o(e(l)("models.codexWaiting")),1),a("div",{class:"codex-login__code",onClick:b},[a("span",Kl,o(E.value),1),m[2]||(m[2]=a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),a("path",{d:"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"})],-1))]),u(e(T),{type:"primary",block:"",onClick:v},{icon:n(()=>[...m[3]||(m[3]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6"}),a("polyline",{points:"15 3 21 3 21 9"}),a("line",{x1:"10",y1:"14",x2:"21",y2:"3"})],-1)])]),default:n(()=>[M(" "+o(e(l)("models.codexOpenLink")),1)]),_:1})])):s.value==="approved"?(c(),C("div",Rl,[m[4]||(m[4]=a("svg",{width:"40",height:"40",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M22 11.08V12a10 10 0 11-5.93-9.14"}),a("polyline",{points:"22 4 12 14.01 9 11.01"})],-1)),a("p",null,o(e(l)("models.codexApproved")),1)])):s.value==="expired"?(c(),C("div",Xl,[a("p",Gl,o(e(l)("models.codexExpired")),1),u(e(T),{size:"small",onClick:w},{default:n(()=>[M(o(e(l)("common.retry")),1)]),_:1})])):s.value==="error"?(c(),C("div",Hl,[a("p",Wl,o(f.value),1),u(e(T),{size:"small",onClick:w},{default:n(()=>[M(o(e(l)("common.retry")),1)]),_:1})])):D("",!0)])]),_:1},8,["show","title","mask-closable"])}}})})),jo=B((()=>{})),so,Jo=B((()=>{jl(),jl(),jo(),ee(),so=le(to,[["__scopeId","data-v-b8a659c8"]])}));async function Qo(){return H("/api/hermes/auth/nous/start",{method:"POST"})}async function Zo(V){return H(`/api/hermes/auth/nous/poll/${V}`)}var et=B((()=>{xe()})),Jl,Ql,Zl,ea,la,aa,oa,ta,sa,ia,na,io,ra=B((()=>{j(),te(),Q(),et(),we(),Jl={class:"nous-login"},Ql={key:0,class:"nous-login__state"},Zl={key:1,class:"nous-login__state"},ea={class:"nous-login__hint"},la={class:"nous-login__code-text"},aa={key:2,class:"nous-login__state nous-login__state--success"},oa={key:3,class:"nous-login__state"},ta={class:"nous-login__error"},sa={key:4,class:"nous-login__state"},ia={class:"nous-login__error"},na={class:"modal-footer"},io=J({__name:"NousLoginModal",emits:["close","success"],setup(V,{emit:t}){const{t:l}=Z(),P=t,g=se(),h=y(!0),s=y("idle"),E=y(""),A=y(""),O=y(""),f=y("");let U=null;async function p(){s.value="loading",f.value="";try{const _=await Qo();E.value=_.user_code,A.value=_.verification_url,O.value=_.session_id,s.value="waiting",F()}catch(_){s.value="error";const m=_.message||"";try{const N=m.match(/\{[\s\S]*\}$/);N?f.value=JSON.parse(N[0]).error||m:f.value=m}catch{f.value=m}g.error(f.value)}}function F(){q(),U=setTimeout(async()=>{try{const _=await Zo(O.value);_.status==="pending"?F():_.status==="approved"?(s.value="approved",g.success(l("models.nousApproved")),setTimeout(()=>{h.value=!1,setTimeout(()=>P("success"),200)},1e3)):_.status==="expired"?s.value="expired":_.status==="denied"?(s.value="error",f.value=l("models.nousDenied")):_.status==="error"&&(s.value="error",f.value=_.error||"Unknown error")}catch{F()}},3e3)}function q(){U&&(clearTimeout(U),U=null)}function $(){q(),h.value=!1,setTimeout(()=>P("close"),200)}async function b(){await be(E.value)?g.success(l("models.nousCopyCode")):g.error(l("models.nousCopyCode")+" ✗")}function v(){window.open(A.value,"_blank")}function w(){s.value="idle",E.value="",A.value="",O.value="",f.value="",p()}return ge(()=>{q()}),p(),(_,m)=>(c(),R(e(Y),{show:h.value,"onUpdate:show":m[0]||(m[0]=N=>h.value=N),preset:"card",title:e(l)("models.nousLoginTitle"),style:{width:"min(440px, calc(100vw - 32px))"},"mask-closable":s.value!=="waiting",onAfterLeave:m[1]||(m[1]=N=>P("close"))},{footer:n(()=>[a("div",na,[u(e(T),{disabled:s.value==="waiting",onClick:$},{default:n(()=>[M(o(e(l)("common.cancel")),1)]),_:1},8,["disabled"])])]),default:n(()=>[a("div",Jl,[s.value==="idle"||s.value==="loading"?(c(),C("div",Ql,[u(e(ve),{size:"small"})])):s.value==="waiting"?(c(),C("div",Zl,[a("p",ea,o(e(l)("models.nousWaiting")),1),a("div",{class:"nous-login__code",onClick:b},[a("span",la,o(E.value),1),m[2]||(m[2]=a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),a("path",{d:"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"})],-1))]),u(e(T),{type:"primary",block:"",onClick:v},{icon:n(()=>[...m[3]||(m[3]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6"}),a("polyline",{points:"15 3 21 3 21 9"}),a("line",{x1:"10",y1:"14",x2:"21",y2:"3"})],-1)])]),default:n(()=>[M(" "+o(e(l)("models.nousOpenLink")),1)]),_:1})])):s.value==="approved"?(c(),C("div",aa,[m[4]||(m[4]=a("svg",{width:"40",height:"40",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M22 11.08V12a10 10 0 11-5.93-9.14"}),a("polyline",{points:"22 4 12 14.01 9 11.01"})],-1)),a("p",null,o(e(l)("models.nousApproved")),1)])):s.value==="expired"?(c(),C("div",oa,[a("p",ta,o(e(l)("models.nousExpired")),1),u(e(T),{size:"small",onClick:w},{default:n(()=>[M(o(e(l)("common.retry")),1)]),_:1})])):s.value==="error"?(c(),C("div",sa,[a("p",ia,o(f.value),1),u(e(T),{size:"small",onClick:w},{default:n(()=>[M(o(e(l)("common.retry")),1)]),_:1})])):D("",!0)])]),_:1},8,["show","title","mask-closable"]))}})})),lt=B((()=>{})),no,at=B((()=>{ra(),ra(),lt(),ee(),no=le(io,[["__scopeId","data-v-13765003"]])})),ua,da,va,ca,_a,pa,ma,fa,ya,ha,ga,ro,xa=B((()=>{j(),te(),Q(),ke(),we(),ua={class:"copilot-login"},da={key:0,class:"copilot-login__state"},va={key:1,class:"copilot-login__state"},ca={class:"copilot-login__hint"},_a={class:"copilot-login__code-text"},pa={key:2,class:"copilot-login__state copilot-login__state--success"},ma={key:3,class:"copilot-login__state"},fa={class:"copilot-login__error"},ya={key:4,class:"copilot-login__state"},ha={class:"copilot-login__error"},ga={class:"modal-footer"},ro=J({__name:"CopilotLoginModal",emits:["close","success"],setup(V,{emit:t}){const{t:l}=Z(),P=t,g=se(),h=y(!0),s=y("idle"),E=y(""),A=y(""),O=y(""),f=y("");let U=null;async function p(){s.value="loading",f.value="";try{const _=await Io();E.value=_.user_code,A.value=_.verification_url,O.value=_.session_id,s.value="waiting",F()}catch(_){s.value="error";const m=_?.message||"";try{const N=m.match(/\{[\s\S]*\}$/);N?f.value=JSON.parse(N[0]).error||m:f.value=m}catch{f.value=m}g.error(f.value)}}function F(){q(),U=setTimeout(async()=>{try{const _=await Vo(O.value);_.status==="pending"?F():_.status==="approved"?(s.value="approved",g.success(l("models.copilotApproved")),setTimeout(()=>{h.value=!1,setTimeout(()=>P("success"),200)},1e3)):_.status==="expired"?s.value="expired":_.status==="denied"?(s.value="error",f.value=l("models.copilotDenied")):_.status==="error"&&(s.value="error",f.value=_.error||"Unknown error")}catch{F()}},3e3)}function q(){U&&(clearTimeout(U),U=null)}function $(){q(),h.value=!1,setTimeout(()=>P("close"),200)}async function b(){await be(E.value)?g.success(l("models.copilotCopyCode")):g.error(l("models.copilotCopyCode")+" ✗")}function v(){window.open(A.value,"_blank")}function w(){s.value="idle",E.value="",A.value="",O.value="",f.value="",p()}return ge(()=>{q()}),p(),(_,m)=>(c(),R(e(Y),{show:h.value,"onUpdate:show":m[0]||(m[0]=N=>h.value=N),preset:"card",title:e(l)("models.copilotLoginTitle"),style:{width:"min(440px, calc(100vw - 32px))"},"mask-closable":s.value!=="waiting",onAfterLeave:m[1]||(m[1]=N=>P("close"))},{footer:n(()=>[a("div",ga,[u(e(T),{disabled:s.value==="waiting",onClick:$},{default:n(()=>[M(o(e(l)("common.cancel")),1)]),_:1},8,["disabled"])])]),default:n(()=>[a("div",ua,[s.value==="idle"||s.value==="loading"?(c(),C("div",da,[u(e(ve),{size:"small"})])):s.value==="waiting"?(c(),C("div",va,[a("p",ca,o(e(l)("models.copilotWaiting")),1),a("div",{class:"copilot-login__code",onClick:b},[a("span",_a,o(E.value),1),m[2]||(m[2]=a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),a("path",{d:"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"})],-1))]),u(e(T),{type:"primary",block:"",onClick:v},{icon:n(()=>[...m[3]||(m[3]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6"}),a("polyline",{points:"15 3 21 3 21 9"}),a("line",{x1:"10",y1:"14",x2:"21",y2:"3"})],-1)])]),default:n(()=>[M(" "+o(e(l)("models.copilotOpenLink")),1)]),_:1})])):s.value==="approved"?(c(),C("div",pa,[m[4]||(m[4]=a("svg",{width:"40",height:"40",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M22 11.08V12a10 10 0 11-5.93-9.14"}),a("polyline",{points:"22 4 12 14.01 9 11.01"})],-1)),a("p",null,o(e(l)("models.copilotApproved")),1)])):s.value==="expired"?(c(),C("div",ma,[a("p",fa,o(e(l)("models.copilotExpired")),1),u(e(T),{size:"small",onClick:w},{default:n(()=>[M(o(e(l)("common.retry")),1)]),_:1})])):s.value==="error"?(c(),C("div",ya,[a("p",ha,o(f.value),1),u(e(T),{size:"small",onClick:w},{default:n(()=>[M(o(e(l)("common.retry")),1)]),_:1})])):D("",!0)])]),_:1},8,["show","title","mask-closable"]))}})})),ot=B((()=>{})),uo,tt=B((()=>{xa(),xa(),ot(),ee(),uo=le(ro,[["__scopeId","data-v-fe3fcc7e"]])}));async function st(){return H("/api/hermes/auth/xai/start",{method:"POST"})}async function it(V){return H(`/api/hermes/auth/xai/poll/${V}`)}var nt=B((()=>{xe()})),wa,ba,ka,Ca,Ma,Pa,$a,Ta,Sa,La,vo,Aa=B((()=>{j(),te(),Q(),nt(),we(),wa={class:"xai-login"},ba={key:0,class:"xai-login__state"},ka={key:1,class:"xai-login__state"},Ca={class:"xai-login__hint"},Ma={key:2,class:"xai-login__state xai-login__state--success"},Pa={key:3,class:"xai-login__state"},$a={class:"xai-login__error"},Ta={key:4,class:"xai-login__state"},Sa={class:"xai-login__error"},La={class:"modal-footer"},vo=J({__name:"XaiOAuthLoginModal",emits:["close","success"],setup(V,{emit:t}){const{t:l}=Z(),P=t,g=se(),h=y(!0),s=y("idle"),E=y(""),A=y(""),O=y("");let f=null;async function U(){s.value="loading",O.value="";try{const w=await st();E.value=w.authorization_url,A.value=w.session_id,s.value="waiting",window.open(E.value,"_blank"),p()}catch(w){s.value="error",O.value=w?.message||String(w),g.error(O.value)}}function p(){F(),f=setTimeout(async()=>{try{const w=await it(A.value);w.status==="pending"?p():w.status==="approved"?(s.value="approved",g.success(l("models.xaiApproved")),setTimeout(()=>{h.value=!1,setTimeout(()=>P("success"),200)},1e3)):w.status==="expired"?s.value="expired":w.status==="error"&&(s.value="error",O.value=w.error||"Unknown error")}catch{p()}},2e3)}function F(){f&&clearTimeout(f),f=null}function q(){F(),h.value=!1,setTimeout(()=>P("close"),200)}function $(){window.open(E.value,"_blank")}async function b(){await be(E.value)?g.success(l("common.copied")):g.error(l("chat.copyFailed"))}function v(){s.value="idle",E.value="",A.value="",O.value="",U()}return ge(F),U(),(w,_)=>(c(),R(e(Y),{show:h.value,"onUpdate:show":_[0]||(_[0]=m=>h.value=m),preset:"card",title:e(l)("models.xaiLoginTitle"),style:{width:"min(440px, calc(100vw - 32px))"},"mask-closable":s.value!=="waiting",onAfterLeave:_[1]||(_[1]=m=>P("close"))},{footer:n(()=>[a("div",La,[u(e(T),{disabled:s.value==="waiting",onClick:q},{default:n(()=>[M(o(e(l)("common.cancel")),1)]),_:1},8,["disabled"])])]),default:n(()=>[a("div",wa,[s.value==="idle"||s.value==="loading"?(c(),C("div",ba,[u(e(ve),{size:"small"})])):s.value==="waiting"?(c(),C("div",ka,[a("p",Ca,o(e(l)("models.xaiWaiting")),1),u(e(T),{type:"primary",block:"",onClick:$},{default:n(()=>[M(o(e(l)("models.xaiOpenLink")),1)]),_:1}),u(e(T),{block:"",onClick:b},{default:n(()=>[M(o(e(l)("models.xaiCopyLink")),1)]),_:1})])):s.value==="approved"?(c(),C("div",Ma,[_[2]||(_[2]=a("svg",{width:"40",height:"40",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M22 11.08V12a10 10 0 11-5.93-9.14"}),a("polyline",{points:"22 4 12 14.01 9 11.01"})],-1)),a("p",null,o(e(l)("models.xaiApproved")),1)])):s.value==="expired"?(c(),C("div",Pa,[a("p",$a,o(e(l)("models.xaiExpired")),1),u(e(T),{size:"small",onClick:v},{default:n(()=>[M(o(e(l)("common.retry")),1)]),_:1})])):s.value==="error"?(c(),C("div",Ta,[a("p",Sa,o(O.value),1),u(e(T),{size:"small",onClick:v},{default:n(()=>[M(o(e(l)("common.retry")),1)]),_:1})])):D("",!0)])]),_:1},8,["show","title","mask-closable"]))}})})),rt=B((()=>{})),co,ut=B((()=>{Aa(),Aa(),rt(),ee(),co=le(vo,[["__scopeId","data-v-73a4b1b7"]])}));function Oa(V){const t=V.trim();if(!t)return!1;try{const l=new URL(t).hostname.toLowerCase();return l==="apikey.fun"||l.endsWith(".apikey.fun")}catch{return/^(?:https?:\/\/)?(?:[a-z0-9-]+\.)*apikey\.fun(?:\/|$)/i.test(t)}}function Ua(V){const t=V.trim().toLowerCase();return t?t.startsWith("claude")?"fun-claude":t.startsWith("gpt")||t.includes("codex")?"fun-codex":null:null}var dt=B((()=>{})),Na,za,Ba,Ea,Fa,Le,Ia,Ae,Va,_o,Da=B((()=>{j(),te(),fe(),Q(),Jo(),at(),tt(),ut(),ke(),Lo(),dt(),Na={style:{display:"flex",gap:"12px"}},za={style:{display:"flex",gap:"8px",width:"100%"}},Ba={class:"modal-footer"},Ea="openai-codex",Fa="nous",Le="copilot",Ia="cliproxyapi",Ae="xai-oauth",Va="alibaba-coding-plan",_o=J({__name:"ProviderFormModal",emits:["close","saved"],setup(V,{emit:t}){const{t:l}=Z(),P=t,g=me(),h=se(),s=Ya(),E=y(!0),A=y(!1),O=y(!1),f=y(!1),U=y(!1),p=y(!1),F=y(!1),q=y(!1),$=y("preset"),b=y(null),v=y({name:"",base_url:"",api_key:"",model:"",context_length:null}),w=y([]),_=new Set(["fun-codex","fun-claude"]),m={intl:"https://coding-intl.dashscope.aliyuncs.com/v1",cn:"https://coding.dashscope.aliyuncs.com/v1"},N=K(()=>b.value===Ea),G=K(()=>b.value===Fa),ue=K(()=>b.value===Le),de=K(()=>b.value===Ia),W=K(()=>b.value===Ae),ae=K(()=>b.value===Va),i=y("intl"),r=K(()=>g.allProviders.map(k=>({label:k.label,value:k.provider}))),x=K(()=>b.value?g.allProviders.find(k=>k.provider===b.value):null),X=K(()=>!!x.value?.base_url_env),ie=K(()=>!!v.value.base_url.trim()&&($.value==="custom"||$.value==="preset"&&!N.value&&!G.value&&!ue.value&&!W.value));async function Ce(k,d){const z=v.value.api_key,ne=v.value.context_length;$.value="preset",await Fe(),b.value=k,await Fe(),v.value.api_key=z,v.value.context_length=ne,d&&(w.value.some(Se=>Se.value===d)||(w.value=[{label:d,value:d},...w.value]),v.value.model=d)}async function Me(k){if($.value!=="custom"||!Oa(v.value.base_url))return;const d=Ua(k);d&&await Ce(d,k)}function Pe(k){const d=k.replace(/^https?:\/\//,"").replace(/\/v1\/?$/,"").split("/")[0];return d.includes("localhost")||d.includes("127.0.0.1")?l("models.local",{host:d}):d.charAt(0).toUpperCase()+d.slice(1)}function ye(k){return`custom:${k.trim().toLowerCase().replace(/ /g,"-")}`}re(b,k=>{if(v.value.model="",i.value="intl",k){const d=x.value;d&&(v.value.name=d.label,v.value.base_url=d.base_url,w.value=d.models.map(z=>({label:z,value:z})),d.models.length>0&&(v.value.model=d.models[0])),k===Le?ze():k===Ae&&(F.value=!0)}}),re(i,k=>{ae.value&&(v.value.base_url=m[k])}),re(()=>v.value.base_url,k=>{$.value==="custom"&&k.trim()&&!v.value.name&&(v.value.name=Pe(k.trim()))}),re(()=>v.value.model,k=>{Me(k)}),re($,()=>{w.value=[],v.value={name:"",base_url:"",api_key:"",model:"",context_length:null},b.value=null}),Ue(()=>{g.providers.length===0&&g.fetchProviders()});async function $e(){const{base_url:k}=v.value;if(!k.trim()){h.warning(l("models.enterBaseUrl"));return}O.value=!0;try{const d=$.value==="preset"?b.value&&_.has(b.value)?ye(b.value):b.value||void 0:v.value.name.trim()?ye(v.value.name):void 0,z=$.value==="preset"?x.value?.label||d:v.value.name.trim()||d;w.value=(await So({base_url:k.trim(),api_key:v.value.api_key.trim(),provider:d,label:z,update_cache:!!d})).models.map(ne=>({label:ne,value:ne})),w.value.length>0&&!v.value.model&&(v.value.model=w.value[0].value),h.success(l("models.foundModels",{count:w.value.length}))}catch(d){h.error(l("models.fetchFailed")+": "+d.message)}finally{O.value=!1}}async function I(){if($.value==="preset"&&!b.value){h.warning(l("models.selectProviderRequired"));return}if(N.value){f.value=!0;return}if(G.value){U.value=!0;return}if(ue.value){ze();return}if(W.value){F.value=!0;return}if(!v.value.base_url.trim()){h.warning(l("models.baseUrlRequired"));return}if(!v.value.api_key.trim()&&!de.value&&!W.value){h.warning(l("models.apiKeyRequired"));return}if(!v.value.model){h.warning(l("models.modelRequired"));return}A.value=!0;try{const k=v.value.context_length??void 0,d=$.value==="custom"&&Oa(v.value.base_url)?Ua(v.value.model):null,z=$.value==="preset"?b.value:d,ne=d?g.allProviders.find(bo=>bo.provider===d):null,Se=ne?.base_url||v.value.base_url.trim(),wo=ne?.label||v.value.name.trim();await g.addProvider({name:wo,base_url:Se,api_key:v.value.api_key.trim(),model:v.value.model,context_length:k,providerKey:z}),h.success(l("models.providerAdded")),P("saved")}catch(k){h.error(k.message)}finally{A.value=!1}}async function L(){f.value=!1,h.success(l("models.providerAdded")),P("saved")}async function S(){U.value=!1,h.success(l("models.providerAdded")),P("saved")}async function Te(){p.value=!1,h.success(l("models.providerAdded")),P("saved")}async function fo(){F.value=!1,h.success(l("models.providerAdded")),P("saved")}function yo(k){return k==="env"?l("models.copilotAddSourceEnv"):k==="gh-cli"?l("models.copilotAddSourceGhCli"):k==="apps-json"?l("models.copilotAddSourceAppsJson"):""}async function ze(){if(!q.value){q.value=!0;try{const k=await Ne();if(k.has_token){const d=yo(k.source);s.success({title:l("models.copilotAddDetectedTitle"),content:d?`${l("models.copilotAddDetected")}
4
4