@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.
- package/bin/hermes-web-ui.mjs +7 -0
- package/dist/client/assets/js/{ChannelsView-BAbGxkKW.js → ChannelsView-BduiL1-M.js} +1 -1
- package/dist/client/assets/js/{ChatView-hdWG7dhS.js → ChatView-C-84i0a3.js} +1 -1
- package/dist/client/assets/js/{CodingAgentsView-BB79rLb_.js → CodingAgentsView-Cu5bfdCo.js} +1 -1
- package/dist/client/assets/js/{DevicesView-DEdHwkrV.js → DevicesView-BwVqTyuH.js} +1 -1
- package/dist/client/assets/js/{FileRenameModal-CdKXqr0a.js → FileRenameModal-DMqVjoLN.js} +1 -1
- package/dist/client/assets/js/{FilesView-C49jsfxy.js → FilesView-Ce30F1_8.js} +1 -1
- package/dist/client/assets/js/{GroupChatView-DwL-zIjT.js → GroupChatView-BQqM5noE.js} +1 -1
- package/dist/client/assets/js/{HistoryMessageList-B1ORl6-d.js → HistoryMessageList-B3TsU-9g.js} +1 -1
- package/dist/client/assets/js/{HistoryView-CdlRAUh5.js → HistoryView-qhTXEU5G.js} +1 -1
- package/dist/client/assets/js/{JobsView-BPZ4Wv0y.js → JobsView-BszCmau_.js} +1 -1
- package/dist/client/assets/js/{KanbanView-UHzayv3c.js → KanbanView-BMa_FMqS.js} +1 -1
- package/dist/client/assets/js/{LoginView-BYrZGFRC.js → LoginView-v4Lvgu2R.js} +1 -1
- package/dist/client/assets/js/{LogsView-CyfCeIeY.js → LogsView-CuwioOCX.js} +1 -1
- package/dist/client/assets/js/{MarkdownRenderer-D-IgakCO.js → MarkdownRenderer-2bwbBjlK.js} +1 -1
- package/dist/client/assets/js/{McpManagerView-DMbmKtiH.js → McpManagerView-BDJSjkHx.js} +1 -1
- package/dist/client/assets/js/{MemoryView-iYE-K13x.js → MemoryView-rYoZbfMb.js} +1 -1
- package/dist/client/assets/js/{MessageItem-Be7fqF3P.js → MessageItem-OSBjfS2l.js} +1 -1
- package/dist/client/assets/js/{ModelsView-XRIIk2f7.js → ModelsView-DGPA2heM.js} +1 -1
- package/dist/client/assets/js/{OutlinePanel-BSPx9YaI.js → OutlinePanel-CN0TVZ0B.js} +1 -1
- package/dist/client/assets/js/{PerformanceView-m3deuRba.js → PerformanceView-0GmZ2GXR.js} +1 -1
- package/dist/client/assets/js/{PluginsView-BBrFPfSn.js → PluginsView-D6XEulKx.js} +1 -1
- package/dist/client/assets/js/{ProfilesView-G_eYB34O.js → ProfilesView-CCPI-DaB.js} +1 -1
- package/dist/client/assets/js/{SettingRow-wqcLQ0FL.js → SettingRow-B0WJ-Iqa.js} +1 -1
- package/dist/client/assets/js/{SettingsView-DMOWr41T.js → SettingsView-BaZ_P8Wu.js} +1 -1
- package/dist/client/assets/js/{SkillsUsageView-fn3jivrH.js → SkillsUsageView-BJVHpo4D.js} +1 -1
- package/dist/client/assets/js/{SkillsView-CXDdZj7R.js → SkillsView-vhxQVIz8.js} +1 -1
- package/dist/client/assets/js/{TerminalPanel-CqIASgSb.js → TerminalPanel-C50X3--t.js} +1 -1
- package/dist/client/assets/js/{TerminalView-ycEOrgth.js → TerminalView-1qIvfZKj.js} +1 -1
- package/dist/client/assets/js/{UsageView-BhNclgOH.js → UsageView-CLUP9AqF.js} +1 -1
- package/dist/client/assets/js/{VersionPreviewView-DoG0hdD2.js → VersionPreviewView-C9I3ZH13.js} +1 -1
- package/dist/client/assets/js/{VirtualMessageList-B_teFrlt.js → VirtualMessageList-D6BvQLbe.js} +1 -1
- package/dist/client/assets/js/{_plugin-vue_export-helper-D4mtpdbl.js → _plugin-vue_export-helper-CtZk2OSc.js} +2 -2
- package/dist/client/assets/js/{index-BHU-82RO.js → index-DyLZQAQu.js} +1 -1
- package/dist/client/assets/js/{models-BX7pr_Gd.js → models-CjHxxDse.js} +1 -1
- package/dist/client/assets/js/{session-browser-prefs-OR-qaA1z.js → session-browser-prefs-kGpZZDQo.js} +1 -1
- package/dist/client/assets/js/{skills-fBzB8FGc.js → skills-CDjYTDMo.js} +1 -1
- package/dist/client/assets/js/{system-vQTkarwT.js → system-Pg8JEuA6.js} +1 -1
- package/dist/client/index.html +3 -3
- package/dist/server/index.js +3 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as F}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as w,$t as f,A as Y,An as k,At as $t,Bn as $,Bt as P,Cn as re,Et as de,Jn as e,Jt as W,On as Et,Ot as St,Qt as A,Rt as Tt,W as at,Xn as Dt,Yt as ue,_n as Mt,an as S,c as Bt,en as R,et as Pt,g as zt,hn as Lt,nn as T,nt as jt,on as x,q as it,qt as It,sn as j,t as I,tn as L,un as pe,wt as M,xn as b,yn as st,z as q}from"./ui-vendor-DNWaqYj5.js";import{_ as Ut,c as U,g as Nt,l as N}from"./vue-vendor-VX6KvV1_.js";import{a as nt,d as K,l as Ot,n as H,o as lt,s as ot,t as X}from"./_plugin-vue_export-helper-D4mtpdbl.js";import{P as rt,j as ut}from"./index-BHU-82RO.js";import{i as Rt,n as At,r as qt,t as Kt}from"./monaco-editor-YM0cdSGX.js";import{n as Ht,t as Xt}from"./clipboard-1NPxC3YL.js";import{a as Gt,c as Vt,n as Jt,s as Wt,t as Yt}from"./MarkdownRenderer-D-IgakCO.js";async function ct(i=""){const n=new URLSearchParams;i&&n.set("path",i);const t=n.toString();return K(`/api/hermes/files/list${t?`?${t}`:""}`)}async function ne(i){return K(`/api/hermes/files/read?path=${encodeURIComponent(i)}`)}async function _e(i,n){await K("/api/hermes/files/write",{method:"PUT",body:JSON.stringify({path:i,content:n})})}async function Qt(i,n=!1){await K("/api/hermes/files/delete",{method:"DELETE",body:JSON.stringify({path:i,recursive:n})})}async function Zt(i,n){await K("/api/hermes/files/rename",{method:"POST",body:JSON.stringify({oldPath:i,newPath:n})})}async function ea(i){await K("/api/hermes/files/mkdir",{method:"POST",body:JSON.stringify({path:i})})}async function ta(i,n){await K("/api/hermes/files/copy",{method:"POST",body:JSON.stringify({srcPath:i,destPath:n})})}async function aa(i,n){const t=ot(),s=new FormData;for(const g of n)s.append("file",g);const a=new URLSearchParams;i&&a.set("path",i);const l=a.toString(),c=`${t}/api/hermes/files/upload${l?`?${l}`:""}`,_={},p=lt();p&&(_.Authorization=`Bearer ${p}`);const u=nt();u&&(_["X-Hermes-Profile"]=u);const m=await fetch(c,{method:"POST",headers:_,body:s});if(!m.ok){const g=await m.json().catch(()=>({error:`HTTP ${m.status}`}));throw new Error(g.error||`Upload failed: ${m.status}`)}return(await m.json()).files}function ia(i,n){const t=ot(),s=new URLSearchParams({path:i});n&&s.set("name",n);const a=nt();a&&s.set("profile",a);const l=lt();return l&&s.set("token",l),`${t}/api/hermes/download?${s.toString()}`}var ce=F((()=>{Ot()}));function fe(i){const n=i.split("/").pop()||"",t=oe[n];return t||_t[Q(n)]||"plaintext"}function Q(i){const n=i.lastIndexOf(".");return n>=0?i.slice(n).toLowerCase():""}function dt(i){return mt.has(Q(i))}function pt(i){const n=Q(i);return n===".md"||n===".markdown"}function V(i){const n=i.split("/").pop()||"";return ft.has(n)||n.startsWith(".env.")?!0:vt.has(Q(n))}function le(i){return dt(i)||pt(i)||V(i)}function J(i,n,t){return!!(i===n||t&&i.startsWith(n+"/"))}var _t,oe,ft,vt,mt,z,O=F((()=>{Ut(),P(),ce(),_t={".js":"javascript",".jsx":"javascript",".ts":"typescript",".tsx":"typescript",".json":"json",".jsonc":"json",".html":"html",".htm":"html",".css":"css",".scss":"scss",".less":"less",".md":"markdown",".markdown":"markdown",".py":"python",".yaml":"yaml",".yml":"yaml",".xml":"xml",".sh":"shell",".bash":"shell",".zsh":"shell",".sql":"sql",".go":"go",".rs":"rust",".java":"java",".c":"c",".h":"c",".cpp":"cpp",".hpp":"cpp",".toml":"ini",".ini":"ini",".env":"ini",".vue":"html",".dockerfile":"dockerfile",".graphql":"graphql",".lua":"lua",".r":"r",".rb":"ruby",".php":"php",".swift":"swift",".kt":"kotlin"},oe={Dockerfile:"dockerfile",Makefile:"makefile","CMakeLists.txt":"cmake",".gitignore":"gitignore",".dockerignore":"gitignore"},ft=new Set([...Object.keys(oe),"README","LICENSE","NOTICE","CHANGELOG","CONTRIBUTING"]),vt=new Set([".txt",".text",".log",".csv",".tsv",".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts",".json",".jsonc",".html",".htm",".css",".scss",".less",".md",".markdown",".py",".pyw",".yaml",".yml",".xml",".sh",".bash",".zsh",".fish",".sql",".go",".rs",".java",".c",".h",".cpp",".hpp",".cc",".cxx",".hh",".hxx",".toml",".ini",".env",".conf",".cfg",".properties",".vue",".svelte",".astro",".dockerfile",".graphql",".gql",".lua",".r",".rb",".php",".swift",".kt",".kts",".diff",".patch",".lock"]),mt=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".bmp",".ico"]),z=Nt("files",()=>{const i=$(""),n=$([]),t=$(!1),s=$("name"),a=$("asc"),l=$(null),c=$(null),_=A(()=>i.value?i.value.split("/").filter(Boolean):[]),p=A(()=>{const o=[...n.value];return o.sort((r,E)=>{if(r.isDir!==E.isDir)return r.isDir?-1:1;let D=0;switch(s.value){case"name":D=r.name.localeCompare(E.name);break;case"size":D=r.size-E.size;break;case"modTime":D=r.modTime.localeCompare(E.modTime);break}return a.value==="asc"?D:-D}),o});async function u(o){o!==void 0&&o!==i.value&&(c.value=null),o!==void 0&&(i.value=o),t.value=!0;try{n.value=(await ct(i.value)).entries}catch(r){throw console.error("Failed to fetch files:",r),r}finally{t.value=!1}}function m(o){return u(o)}function g(){const o=i.value.split("/").filter(Boolean);return o.pop(),u(o.join("/"))}async function B(o){const r=await ne(o);l.value={path:o,content:r.content,originalContent:r.content,language:fe(o)}}async function d(){l.value&&(await _e(l.value.path,l.value.content),l.value.originalContent=l.value.content)}function v(){l.value=null}async function h(o){if(dt(o.name))c.value={path:o.path,type:"image"};else if(pt(o.name)){const r=await ne(o.path);c.value={path:o.path,type:"markdown",content:r.content}}else if(V(o.name)){const r=await ne(o.path);c.value={path:o.path,type:"text",content:r.content,language:fe(o.path)}}}function C(){c.value=null}async function y(o){const r=i.value?`${i.value}/${o}`:o;await ea(r),await u()}async function G(o){const r=i.value?`${i.value}/${o}`:o;await _e(r,""),await u()}async function Z(o){await Qt(o.path,o.isDir),c.value&&J(c.value.path,o.path,o.isDir)&&(c.value=null),l.value&&J(l.value.path,o.path,o.isDir)&&(l.value=null),await u()}async function ee(o,r){const E=o.path.includes("/")?o.path.slice(0,o.path.lastIndexOf("/")):"",D=E?`${E}/${r}`:r;await Zt(o.path,D),c.value&&J(c.value.path,o.path,o.isDir)&&(c.value=null),l.value&&J(l.value.path,o.path,o.isDir)&&(l.value=null),await u()}async function te(o,r){await ta(o.path,r),await u()}async function ae(o){await aa(i.value,o),await u()}function ie(o){s.value===o?a.value=a.value==="asc"?"desc":"asc":(s.value=o,a.value="asc")}return{currentPath:i,entries:n,loading:t,sortBy:s,sortOrder:a,editingFile:l,previewFile:c,pathSegments:_,sortedEntries:p,hasUnsavedChanges:A(()=>l.value?l.value.content!==l.value.originalContent:!1),fetchEntries:u,navigateTo:m,navigateUp:g,openEditor:B,saveEditor:d,closeEditor:v,openPreview:h,closePreview:C,createDir:y,createFile:G,deleteEntry:Z,renameEntry:ee,copyEntry:te,uploadFiles:ae,setSort:ie}})})),ve,ht,me=F((()=>{P(),I(),U(),O(),ce(),ve={class:"file-tree"},ht=j({__name:"FileTree",setup(i){const{t:n}=N(),t=z(),s=$([]),a=$([]);async function l(u){try{return(await ct(u)).entries.filter(m=>m.isDir).sort((m,g)=>m.name.localeCompare(g.name)).map(m=>({key:m.path,label:m.name,isLeaf:!1}))}catch{return[]}}async function c(u){u.children=await l(u.key)}function _(u){u.length>0&&(a.value=u,t.navigateTo(u[0]))}function p(){a.value=[],t.navigateTo("")}return st(async()=>{s.value=await l("")}),(u,m)=>(b(),T("div",ve,[f("div",{class:"tree-header",onClick:p},[m[0]||(m[0]=f("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"},[f("path",{d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),f("polyline",{points:"9 22 9 12 15 12 15 22"})],-1)),f("span",null,w(e(n)("files.breadcrumbRoot")),1)]),x(e(Bt),{data:s.value,"selected-keys":a.value,"on-load":c,"expand-on-click":"","block-line":"","onUpdate:selectedKeys":_},null,8,["data","selected-keys"])]))}})})),sa=F((()=>{})),na,Ja=F((()=>{me(),me(),sa(),H(),na=X(ht,[["__scopeId","data-v-7f00b3bc"]])})),he,wt,we=F((()=>{P(),U(),I(),O(),he={class:"file-breadcrumb"},wt=j({__name:"FileBreadcrumb",setup(i){const{t:n}=N(),t=z();function s(a){if(a<0)t.navigateTo("");else{const l=t.pathSegments.slice(0,a+1).join("/");t.navigateTo(l)}}return(a,l)=>(b(),T("div",he,[x(e(St),null,{default:k(()=>[x(e(de),{onClick:l[0]||(l[0]=c=>s(-1))},{default:k(()=>[S(w(e(n)("files.breadcrumbRoot")),1)]),_:1}),(b(!0),T(ue,null,re(e(t).pathSegments,(c,_)=>(b(),R(e(de),{key:_,onClick:p=>s(_)},{default:k(()=>[S(w(c),1)]),_:2},1032,["onClick"]))),128))]),_:1})]))}})})),la=F((()=>{})),oa,Wa=F((()=>{we(),we(),la(),H(),oa=X(wt,[["__scopeId","data-v-061302de"]])})),ge,gt,ye=F((()=>{P(),I(),U(),O(),ge={class:"file-toolbar"},gt=j({__name:"FileToolbar",emits:["showNewFile","showNewFolder","showUpload"],setup(i,{emit:n}){const{t}=N(),s=q(),a=z(),l=n;async function c(){try{await a.fetchEntries()}catch{s.error(t("files.backendError"))}}return(_,p)=>(b(),T("div",ge,[x(e(Y),{size:8,wrap:!0,class:"toolbar-space"},{default:k(()=>[x(e(M),{size:"small",onClick:p[0]||(p[0]=u=>l("showNewFile")),class:"toolbar-btn"},{default:k(()=>[S(w(e(t)("files.newFile")),1)]),_:1}),x(e(M),{size:"small",onClick:p[1]||(p[1]=u=>l("showNewFolder")),class:"toolbar-btn"},{default:k(()=>[S(w(e(t)("files.newFolder")),1)]),_:1}),x(e(M),{size:"small",onClick:p[2]||(p[2]=u=>l("showUpload")),class:"toolbar-btn"},{default:k(()=>[S(w(e(t)("files.upload")),1)]),_:1}),x(e(M),{size:"small",onClick:c,class:"toolbar-btn"},{default:k(()=>[S(w(e(t)("files.refresh")),1)]),_:1})]),_:1})]))}})})),ra=F((()=>{})),ua,Ya=F((()=>{ye(),ye(),ra(),H(),ua=X(gt,[["__scopeId","data-v-64269d74"]])})),ke,Fe,be,Ce,xe,$e,Ee,Se,Te,De,Me,Be,yt,Pe=F((()=>{P(),I(),U(),O(),rt(),ke={class:"file-list"},Fe={key:1,class:"file-list-items"},be={class:"file-list-header"},Ce={key:0,class:"sort-indicator"},xe={key:0,class:"sort-indicator"},$e={key:0,class:"sort-indicator"},Ee=["onDblclick","onContextmenu"],Se={class:"file-name"},Te={class:"file-icon"},De={class:"file-size"},Me={class:"file-date"},Be={class:"file-actions"},yt=j({__name:"FileList",emits:["contextmenu-entry"],setup(i,{emit:n}){const{t}=N(),s=q(),a=z(),l=n;function c(d){if(d===0)return"—";const v=["B","KB","MB","GB"];let h=0,C=d;for(;C>=1024&&h<v.length-1;)C/=1024,h++;return`${C.toFixed(h===0?0:1)} ${v[h]}`}function _(d){return d?new Date(d).toLocaleString():"—"}function p(d){return d.isDir?"📁":{yaml:"⚙️",yml:"⚙️",json:"📋",toml:"⚙️",md:"📝",txt:"📄",log:"📄",py:"🐍",js:"📜",ts:"📜",vue:"💚",png:"🖼️",jpg:"🖼️",jpeg:"🖼️",gif:"🖼️",svg:"🖼️",webp:"🖼️",zip:"📦",gz:"📦",tar:"📦",sh:"⚡",bash:"⚡"}[d.name.split(".").pop()?.toLowerCase()||""]||"📄"}async function u(d){try{await a.openPreview(d)}catch{s.error(t("files.backendError"))}}async function m(d){d.isDir?a.navigateTo(d.path):V(d.name)?await a.openEditor(d.path):le(d.name)&&await u(d)}function g(d,v){d.preventDefault(),l("contextmenu-entry",d,v)}async function B(d){try{await ut(d.path,d.name)}catch(v){s.error(v.message||t("files.backendError"))}}return(d,v)=>(b(),T("div",ke,[x(e(zt),{show:e(a).loading},{default:k(()=>[!e(a).loading&&e(a).sortedEntries.length===0?(b(),R(e(Tt),{key:0,description:e(t)("files.emptyDir")},null,8,["description"])):(b(),T("div",Fe,[f("div",be,[f("div",{class:"file-name sort-header",onClick:v[0]||(v[0]=h=>e(a).setSort("name"))},[S(w(e(t)("files.name"))+" ",1),e(a).sortBy==="name"?(b(),T("span",Ce,w(e(a).sortOrder==="asc"?"↑":"↓"),1)):L("",!0)]),f("div",{class:"file-size sort-header",onClick:v[1]||(v[1]=h=>e(a).setSort("size"))},[S(w(e(t)("files.size"))+" ",1),e(a).sortBy==="size"?(b(),T("span",xe,w(e(a).sortOrder==="asc"?"↑":"↓"),1)):L("",!0)]),f("div",{class:"file-date sort-header",onClick:v[2]||(v[2]=h=>e(a).setSort("modTime"))},[S(w(e(t)("files.modified"))+" ",1),e(a).sortBy==="modTime"?(b(),T("span",$e,w(e(a).sortOrder==="asc"?"↑":"↓"),1)):L("",!0)]),v[3]||(v[3]=f("div",{class:"file-actions-placeholder"},null,-1))]),(b(!0),T(ue,null,re(e(a).sortedEntries,h=>(b(),T("div",{key:h.path,class:"file-list-row",onDblclick:C=>m(h),onContextmenu:C=>g(C,h)},[f("div",Se,[f("span",Te,w(p(h)),1),f("span",null,w(h.name),1)]),f("div",De,w(h.isDir?"—":c(h.size)),1),f("div",Me,w(_(h.modTime)),1),f("div",Be,[e(le)(h.name)&&!h.isDir?(b(),R(e(M),{key:0,size:"tiny",quaternary:"",onClick:W(C=>u(h),["stop"]),title:e(t)("files.preview")},{default:k(()=>[...v[4]||(v[4]=[S("👁️",-1)])]),_:1},8,["onClick","title"])):L("",!0),e(V)(h.name)&&!h.isDir?(b(),R(e(M),{key:1,size:"tiny",quaternary:"",onClick:W(C=>e(a).openEditor(h.path),["stop"]),title:e(t)("files.edit")},{default:k(()=>[...v[5]||(v[5]=[S("✏️",-1)])]),_:1},8,["onClick","title"])):L("",!0),h.isDir?L("",!0):(b(),R(e(M),{key:2,size:"tiny",quaternary:"",onClick:W(C=>B(h),["stop"]),title:e(t)("files.download")},{default:k(()=>[...v[6]||(v[6]=[S("⬇️",-1)])]),_:1},8,["onClick","title"]))])],40,Ee))),128))]))]),_:1},8,["show"])]))}})})),ca=F((()=>{})),da,Qa=F((()=>{Pe(),Pe(),ca(),H(),da=X(yt,[["__scopeId","data-v-6e230379"]])}));function pa(i){return i.absolutePath||i.path}var _a=F((()=>{})),kt,ze=F((()=>{P(),I(),U(),O(),rt(),Ht(),_a(),kt=j({__name:"FileContextMenu",emits:["rename"],setup(i,{expose:n,emit:t}){const{t:s}=N(),a=q(),l=it(),c=z(),_=$(!1),p=$(0),u=$(0),m=$(null),g=t;function B(C,y){m.value=y,p.value=C.clientX,u.value=C.clientY,_.value=!1,Lt(()=>{_.value=!0})}function d(){const C=m.value;if(!C)return[];const y=[];return C.isDir?y.push({label:s("files.open"),key:"open"}):(V(C.name)&&y.push({label:s("files.edit"),key:"edit"}),le(C.name)&&y.push({label:s("files.preview"),key:"preview"}),y.push({label:s("files.download"),key:"download"})),y.push({type:"divider",key:"d1"}),y.push({label:s("files.copyPath"),key:"copyPath"}),y.push({label:s("files.rename"),key:"rename"}),y.push({type:"divider",key:"d2"}),y.push({label:s("files.delete"),key:"delete"}),y}async function v(C){_.value=!1;const y=m.value;if(y)switch(C){case"open":c.navigateTo(y.path);break;case"edit":try{await c.openEditor(y.path)}catch{a.error(s("files.backendError"))}break;case"preview":try{await c.openPreview(y)}catch{a.error(s("files.backendError"))}break;case"download":try{await ut(y.path,y.name)}catch(G){a.error(G.message)}break;case"copyPath":await Xt(pa(y))?a.success(s("files.pathCopied")):a.error(s("files.pathCopied")+" ✗");break;case"rename":g("rename",y);break;case"delete":l.warning({title:s("files.delete"),content:y.isDir?s("files.confirmDeleteDir",{name:y.name}):s("files.confirmDelete",{name:y.name}),positiveText:s("common.delete"),negativeText:s("common.cancel"),onPositiveClick:async()=>{try{await c.deleteEntry(y),a.success(s("files.deleted"))}catch{a.error(s("files.deleteFailed"))}}});break}}function h(){_.value=!1}return n({show:B}),(C,y)=>(b(),R(e(Pt),{show:_.value,x:p.value,y:u.value,options:d(),placement:"bottom-start",trigger:"manual",onSelect:v,onClickoutside:h},null,8,["show","x","y","options"]))}})})),fa,Za=F((()=>{ze(),ze(),fa=kt})),Le,je,Ie,Ft,Ue=F((()=>{P(),I(),U(),O(),Kt(),Le={class:"file-editor"},je={class:"editor-header"},Ie={class:"editor-filename"},Ft=j({__name:"FileEditor",setup(i){self.MonacoEnvironment={getWorker(m,g){return new Worker(new URL("/assets/editor.worker-D9luhcDD.js",""+import.meta.url),{type:"module"})}};const{t:n}=N(),t=q(),s=it(),a=z(),l=$(null);let c=null;const _=$(!1);st(()=>{!l.value||!a.editingFile||(c=Rt.create(l.value,{value:a.editingFile.content,language:a.editingFile.language,theme:document.documentElement.classList.contains("dark")?"vs-dark":"vs",minimap:{enabled:!1},fontSize:13,lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,tabSize:2,wordWrap:"on"}),c.onDidChangeModelContent(()=>{a.editingFile&&(a.editingFile.content=c.getValue())}),c.addCommand(qt.CtrlCmd|At.KeyS,()=>{p()}))}),Mt(()=>{c?.dispose(),c=null});async function p(){_.value=!0;try{await a.saveEditor(),t.success(n("files.saved"))}catch{t.error(n("files.saveFailed"))}finally{_.value=!1}}function u(){a.hasUnsavedChanges?s.warning({title:n("files.unsavedChanges"),positiveText:n("common.ok"),negativeText:n("common.cancel"),onPositiveClick:()=>{a.closeEditor()}}):a.closeEditor()}return(m,g)=>(b(),T("div",Le,[f("div",je,[f("span",Ie,w(e(a).editingFile?.path),1),x(e(Y),null,{default:k(()=>[x(e(M),{size:"small",type:"primary",loading:_.value,onClick:p},{default:k(()=>[S(w(e(n)("files.saveFile")),1)]),_:1},8,["loading"]),x(e(M),{size:"small",onClick:u},{default:k(()=>[S(w(e(n)("files.closeEditor")),1)]),_:1})]),_:1})]),f("div",{ref_key:"editorContainer",ref:l,class:"editor-container"},null,512)]))}})})),va=F((()=>{})),ma,ei=F((()=>{Ue(),Ue(),va(),H(),ma=X(Ft,[["__scopeId","data-v-1ae26b53"]])})),Ne,Oe,Re,Ae,qe,Ke,He,bt,Xe=F((()=>{P(),I(),U(),O(),ce(),Jt(),Wt(),Ne={key:0,class:"file-preview"},Oe={class:"preview-header"},Re={class:"preview-filename"},Ae={class:"preview-content"},qe=["src","alt"],Ke={key:1,class:"preview-markdown"},He=["innerHTML"],bt=j({__name:"FilePreview",setup(i){const{t:n}=N(),t=q(),s=z();function a(){return s.previewFile?ia(s.previewFile.path):""}const l=A(()=>{const p=s.previewFile;return!p||p.type!=="text"?"":Vt(p.content||"",p.language,n("common.copy"),{maxHighlightLength:2e5})});async function c(p){const u=await Gt(p);u?t.success(n("common.copied")):u===!1&&t.error(n("chat.copyFailed"))}const _=()=>pe("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"currentColor"},[pe("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})]);return(p,u)=>e(s).previewFile?(b(),T("div",Ne,[f("div",Oe,[f("span",Re,w(e(s).previewFile.path),1),x(e(M),{size:"small",quaternary:"",onClick:u[0]||(u[0]=m=>e(s).closePreview())},{icon:k(()=>[x(e(jt),null,{default:k(()=>[x(_)]),_:1})]),default:k(()=>[S(" "+w(e(n)("files.closePreview")),1)]),_:1})]),f("div",Ae,[e(s).previewFile.type==="image"?(b(),T("img",{key:0,src:a(),class:"preview-image",alt:e(s).previewFile.path},null,8,qe)):e(s).previewFile.type==="markdown"?(b(),T("div",Ke,[x(Yt,{content:e(s).previewFile.content||""},null,8,["content"])])):e(s).previewFile.type==="text"?(b(),T("div",{key:2,class:"preview-code",innerHTML:l.value,onClick:c},null,8,He)):L("",!0)])])):L("",!0)}})})),ha=F((()=>{})),wa,ti=F((()=>{Xe(),Xe(),ha(),H(),wa=X(bt,[["__scopeId","data-v-91416733"]])})),Ge,Ve,Je,We,Ye,Qe,Ze,Ct,et=F((()=>{P(),I(),U(),O(),Ge={class:"upload-panel"},Ve={class:"upload-title"},Je={key:0,class:"selected-files"},We={class:"selected-file__meta"},Ye={class:"selected-file__name"},Qe={class:"selected-file__size"},Ze=["onClick"],Ct=j({__name:"FileUploadModal",props:{show:{type:Boolean}},emits:["update:show"],setup(i,{emit:n}){const{t}=N(),s=q(),a=z(),l=i,c=n,_=$(!1),p=$(!1),u=$(0),m=$(null),g=$([]),B=A(()=>g.value.length>0);function d(r){return`${r.name}:${r.size}:${r.lastModified}`}function v(r){const E=new Set(g.value.map(d)),D=r.filter(se=>!E.has(d(se)));D.length!==0&&(g.value=[...g.value,...D])}function h(){m.value?.click()}function C(r){const E=r.target;E.files&&(v(Array.from(E.files)),E.value="")}function y(r){r.preventDefault(),r.dataTransfer&&(r.dataTransfer.dropEffect="copy")}function G(r){r.preventDefault(),r.dataTransfer?.types.includes("Files")&&(u.value+=1,p.value=!0)}function Z(r){r.preventDefault(),u.value=Math.max(0,u.value-1),u.value===0&&(p.value=!1)}function ee(r){r.preventDefault(),u.value=0,p.value=!1;const E=Array.from(r.dataTransfer?.files||[]);E.length!==0&&v(E)}function te(r){g.value=g.value.filter((E,D)=>D!==r)}function ae(r){return r<1024?`${r} B`:r<1024*1024?`${(r/1024).toFixed(1)} KB`:`${(r/(1024*1024)).toFixed(1)} MB`}async function ie(){if(g.value.length!==0){_.value=!0;try{await a.uploadFiles(g.value),s.success(t("files.uploadSuccess",{count:g.value.length})),g.value=[],c("update:show",!1)}catch(r){s.error(r.message||t("files.uploadFailed"))}finally{_.value=!1}}}function o(){u.value=0,p.value=!1,g.value=[],c("update:show",!1)}return(r,E)=>(b(),R(e(at),{show:l.show,preset:"dialog",title:e(t)("files.upload"),"onUpdate:show":o,style:{width:"560px"}},{action:k(()=>[x(e(Y),null,{default:k(()=>[x(e(M),{onClick:o},{default:k(()=>[S(w(e(t)("common.cancel")),1)]),_:1}),x(e(M),{type:"primary",loading:_.value,disabled:!B.value,onClick:ie},{default:k(()=>[S(w(e(t)("files.upload"))+" ("+w(g.value.length)+") ",1)]),_:1},8,["loading","disabled"])]),_:1})]),default:k(()=>[f("div",Ge,[f("input",{ref_key:"fileInputRef",ref:m,type:"file",multiple:"",class:"file-input-hidden",onChange:C},null,544),f("div",{class:Dt(["upload-dropzone",{"drag-over":p.value}]),onClick:h,onDragover:y,onDragenter:G,onDragleave:Z,onDrop:ee},[E[0]||(E[0]=f("div",{class:"upload-icon","aria-hidden":"true"},[f("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8"},[f("path",{d:"M12 16V5"}),f("path",{d:"M8 9l4-4 4 4"}),f("path",{d:"M20 16.5v1.5A2 2 0 0 1 18 20H6a2 2 0 0 1-2-2v-1.5"})])],-1)),f("p",Ve,w(e(t)("files.dragDropHint")),1),x(e(M),{type:"primary",secondary:"",onClick:W(h,["stop"])},{default:k(()=>[S(w(e(t)("files.upload")),1)]),_:1})],34),B.value?(b(),T("div",Je,[(b(!0),T(ue,null,re(g.value,(D,se)=>(b(),T("div",{key:d(D),class:"selected-file"},[f("div",We,[f("span",Ye,w(D.name),1),f("span",Qe,w(ae(D.size)),1)]),f("button",{type:"button",class:"selected-file__remove",onClick:Fa=>te(se)}," × ",8,Ze)]))),128))])):L("",!0)])]),_:1},8,["show","title"]))}})})),ga=F((()=>{})),ya,ai=F((()=>{et(),et(),ga(),H(),ya=X(Ct,[["__scopeId","data-v-4de50ce7"]])})),xt,tt=F((()=>{P(),I(),U(),O(),xt=j({__name:"FileRenameModal",props:{show:{type:Boolean},mode:{},entry:{}},emits:["update:show"],setup(i,{emit:n}){const{t}=N(),s=q(),a=z(),l=i,c=n,_=$(""),p=$(!1);Et(()=>l.show,B=>{B&&(l.mode==="rename"&&l.entry?_.value=l.entry.name:_.value="")});const u=A(()=>{switch(l.mode){case"newFile":return t("files.newFile");case"newFolder":return t("files.newFolder");case"rename":return t("files.rename")}}),m=A(()=>{switch(l.mode){case"newFile":return t("files.newFileName");case"newFolder":return t("files.newFolderName");case"rename":return t("files.renameTo")}});async function g(){if(_.value.trim()){p.value=!0;try{switch(l.mode){case"newFile":await a.createFile(_.value.trim()),s.success(t("files.created"));break;case"newFolder":await a.createDir(_.value.trim()),s.success(t("files.created"));break;case"rename":l.entry&&(await a.renameEntry(l.entry,_.value.trim()),s.success(t("files.renamed")));break}c("update:show",!1)}catch(B){const d=l.mode==="rename"?t("files.renameFailed"):t("files.createFailed");s.error(B.message||d)}finally{p.value=!1}}}return(B,d)=>(b(),R(e(at),{show:l.show,preset:"dialog",title:u.value,"onUpdate:show":d[2]||(d[2]=v=>c("update:show",!1)),style:{width:"400px"}},{action:k(()=>[x(e(Y),null,{default:k(()=>[x(e(M),{onClick:d[1]||(d[1]=v=>c("update:show",!1))},{default:k(()=>[S(w(e(t)("common.cancel")),1)]),_:1}),x(e(M),{type:"primary",loading:p.value,disabled:!_.value.trim(),onClick:g},{default:k(()=>[S(w(e(t)("common.ok")),1)]),_:1},8,["loading","disabled"])]),_:1})]),default:k(()=>[x(e($t),{value:_.value,"onUpdate:value":d[0]||(d[0]=v=>_.value=v),placeholder:m.value,onKeydown:It(g,["enter"]),autofocus:""},null,8,["value","placeholder"])]),_:1},8,["show","title"]))}})})),ka,ii=F((()=>{tt(),tt(),ka=xt}));export{na as _,wa as a,z as b,ei as c,da as d,Qa as f,Wa as g,oa as h,ai as i,fa as l,Ya as m,ii as n,ti as o,ua as p,ya as r,ma as s,ka as t,Za as u,Ja as v,O as y};
|
|
1
|
+
import{n as F}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as w,$t as f,A as Y,An as k,At as $t,Bn as $,Bt as P,Cn as re,Et as de,Jn as e,Jt as W,On as Et,Ot as St,Qt as A,Rt as Tt,W as at,Xn as Dt,Yt as ue,_n as Mt,an as S,c as Bt,en as R,et as Pt,g as zt,hn as Lt,nn as T,nt as jt,on as x,q as it,qt as It,sn as j,t as I,tn as L,un as pe,wt as M,xn as b,yn as st,z as q}from"./ui-vendor-DNWaqYj5.js";import{_ as Ut,c as U,g as Nt,l as N}from"./vue-vendor-VX6KvV1_.js";import{a as nt,d as K,l as Ot,n as H,o as lt,s as ot,t as X}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{P as rt,j as ut}from"./index-DyLZQAQu.js";import{i as Rt,n as At,r as qt,t as Kt}from"./monaco-editor-YM0cdSGX.js";import{n as Ht,t as Xt}from"./clipboard-1NPxC3YL.js";import{a as Gt,c as Vt,n as Jt,s as Wt,t as Yt}from"./MarkdownRenderer-2bwbBjlK.js";async function ct(i=""){const n=new URLSearchParams;i&&n.set("path",i);const t=n.toString();return K(`/api/hermes/files/list${t?`?${t}`:""}`)}async function ne(i){return K(`/api/hermes/files/read?path=${encodeURIComponent(i)}`)}async function _e(i,n){await K("/api/hermes/files/write",{method:"PUT",body:JSON.stringify({path:i,content:n})})}async function Qt(i,n=!1){await K("/api/hermes/files/delete",{method:"DELETE",body:JSON.stringify({path:i,recursive:n})})}async function Zt(i,n){await K("/api/hermes/files/rename",{method:"POST",body:JSON.stringify({oldPath:i,newPath:n})})}async function ea(i){await K("/api/hermes/files/mkdir",{method:"POST",body:JSON.stringify({path:i})})}async function ta(i,n){await K("/api/hermes/files/copy",{method:"POST",body:JSON.stringify({srcPath:i,destPath:n})})}async function aa(i,n){const t=ot(),s=new FormData;for(const g of n)s.append("file",g);const a=new URLSearchParams;i&&a.set("path",i);const l=a.toString(),c=`${t}/api/hermes/files/upload${l?`?${l}`:""}`,_={},p=lt();p&&(_.Authorization=`Bearer ${p}`);const u=nt();u&&(_["X-Hermes-Profile"]=u);const m=await fetch(c,{method:"POST",headers:_,body:s});if(!m.ok){const g=await m.json().catch(()=>({error:`HTTP ${m.status}`}));throw new Error(g.error||`Upload failed: ${m.status}`)}return(await m.json()).files}function ia(i,n){const t=ot(),s=new URLSearchParams({path:i});n&&s.set("name",n);const a=nt();a&&s.set("profile",a);const l=lt();return l&&s.set("token",l),`${t}/api/hermes/download?${s.toString()}`}var ce=F((()=>{Ot()}));function fe(i){const n=i.split("/").pop()||"",t=oe[n];return t||_t[Q(n)]||"plaintext"}function Q(i){const n=i.lastIndexOf(".");return n>=0?i.slice(n).toLowerCase():""}function dt(i){return mt.has(Q(i))}function pt(i){const n=Q(i);return n===".md"||n===".markdown"}function V(i){const n=i.split("/").pop()||"";return ft.has(n)||n.startsWith(".env.")?!0:vt.has(Q(n))}function le(i){return dt(i)||pt(i)||V(i)}function J(i,n,t){return!!(i===n||t&&i.startsWith(n+"/"))}var _t,oe,ft,vt,mt,z,O=F((()=>{Ut(),P(),ce(),_t={".js":"javascript",".jsx":"javascript",".ts":"typescript",".tsx":"typescript",".json":"json",".jsonc":"json",".html":"html",".htm":"html",".css":"css",".scss":"scss",".less":"less",".md":"markdown",".markdown":"markdown",".py":"python",".yaml":"yaml",".yml":"yaml",".xml":"xml",".sh":"shell",".bash":"shell",".zsh":"shell",".sql":"sql",".go":"go",".rs":"rust",".java":"java",".c":"c",".h":"c",".cpp":"cpp",".hpp":"cpp",".toml":"ini",".ini":"ini",".env":"ini",".vue":"html",".dockerfile":"dockerfile",".graphql":"graphql",".lua":"lua",".r":"r",".rb":"ruby",".php":"php",".swift":"swift",".kt":"kotlin"},oe={Dockerfile:"dockerfile",Makefile:"makefile","CMakeLists.txt":"cmake",".gitignore":"gitignore",".dockerignore":"gitignore"},ft=new Set([...Object.keys(oe),"README","LICENSE","NOTICE","CHANGELOG","CONTRIBUTING"]),vt=new Set([".txt",".text",".log",".csv",".tsv",".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts",".json",".jsonc",".html",".htm",".css",".scss",".less",".md",".markdown",".py",".pyw",".yaml",".yml",".xml",".sh",".bash",".zsh",".fish",".sql",".go",".rs",".java",".c",".h",".cpp",".hpp",".cc",".cxx",".hh",".hxx",".toml",".ini",".env",".conf",".cfg",".properties",".vue",".svelte",".astro",".dockerfile",".graphql",".gql",".lua",".r",".rb",".php",".swift",".kt",".kts",".diff",".patch",".lock"]),mt=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".bmp",".ico"]),z=Nt("files",()=>{const i=$(""),n=$([]),t=$(!1),s=$("name"),a=$("asc"),l=$(null),c=$(null),_=A(()=>i.value?i.value.split("/").filter(Boolean):[]),p=A(()=>{const o=[...n.value];return o.sort((r,E)=>{if(r.isDir!==E.isDir)return r.isDir?-1:1;let D=0;switch(s.value){case"name":D=r.name.localeCompare(E.name);break;case"size":D=r.size-E.size;break;case"modTime":D=r.modTime.localeCompare(E.modTime);break}return a.value==="asc"?D:-D}),o});async function u(o){o!==void 0&&o!==i.value&&(c.value=null),o!==void 0&&(i.value=o),t.value=!0;try{n.value=(await ct(i.value)).entries}catch(r){throw console.error("Failed to fetch files:",r),r}finally{t.value=!1}}function m(o){return u(o)}function g(){const o=i.value.split("/").filter(Boolean);return o.pop(),u(o.join("/"))}async function B(o){const r=await ne(o);l.value={path:o,content:r.content,originalContent:r.content,language:fe(o)}}async function d(){l.value&&(await _e(l.value.path,l.value.content),l.value.originalContent=l.value.content)}function v(){l.value=null}async function h(o){if(dt(o.name))c.value={path:o.path,type:"image"};else if(pt(o.name)){const r=await ne(o.path);c.value={path:o.path,type:"markdown",content:r.content}}else if(V(o.name)){const r=await ne(o.path);c.value={path:o.path,type:"text",content:r.content,language:fe(o.path)}}}function C(){c.value=null}async function y(o){const r=i.value?`${i.value}/${o}`:o;await ea(r),await u()}async function G(o){const r=i.value?`${i.value}/${o}`:o;await _e(r,""),await u()}async function Z(o){await Qt(o.path,o.isDir),c.value&&J(c.value.path,o.path,o.isDir)&&(c.value=null),l.value&&J(l.value.path,o.path,o.isDir)&&(l.value=null),await u()}async function ee(o,r){const E=o.path.includes("/")?o.path.slice(0,o.path.lastIndexOf("/")):"",D=E?`${E}/${r}`:r;await Zt(o.path,D),c.value&&J(c.value.path,o.path,o.isDir)&&(c.value=null),l.value&&J(l.value.path,o.path,o.isDir)&&(l.value=null),await u()}async function te(o,r){await ta(o.path,r),await u()}async function ae(o){await aa(i.value,o),await u()}function ie(o){s.value===o?a.value=a.value==="asc"?"desc":"asc":(s.value=o,a.value="asc")}return{currentPath:i,entries:n,loading:t,sortBy:s,sortOrder:a,editingFile:l,previewFile:c,pathSegments:_,sortedEntries:p,hasUnsavedChanges:A(()=>l.value?l.value.content!==l.value.originalContent:!1),fetchEntries:u,navigateTo:m,navigateUp:g,openEditor:B,saveEditor:d,closeEditor:v,openPreview:h,closePreview:C,createDir:y,createFile:G,deleteEntry:Z,renameEntry:ee,copyEntry:te,uploadFiles:ae,setSort:ie}})})),ve,ht,me=F((()=>{P(),I(),U(),O(),ce(),ve={class:"file-tree"},ht=j({__name:"FileTree",setup(i){const{t:n}=N(),t=z(),s=$([]),a=$([]);async function l(u){try{return(await ct(u)).entries.filter(m=>m.isDir).sort((m,g)=>m.name.localeCompare(g.name)).map(m=>({key:m.path,label:m.name,isLeaf:!1}))}catch{return[]}}async function c(u){u.children=await l(u.key)}function _(u){u.length>0&&(a.value=u,t.navigateTo(u[0]))}function p(){a.value=[],t.navigateTo("")}return st(async()=>{s.value=await l("")}),(u,m)=>(b(),T("div",ve,[f("div",{class:"tree-header",onClick:p},[m[0]||(m[0]=f("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"},[f("path",{d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),f("polyline",{points:"9 22 9 12 15 12 15 22"})],-1)),f("span",null,w(e(n)("files.breadcrumbRoot")),1)]),x(e(Bt),{data:s.value,"selected-keys":a.value,"on-load":c,"expand-on-click":"","block-line":"","onUpdate:selectedKeys":_},null,8,["data","selected-keys"])]))}})})),sa=F((()=>{})),na,Ja=F((()=>{me(),me(),sa(),H(),na=X(ht,[["__scopeId","data-v-7f00b3bc"]])})),he,wt,we=F((()=>{P(),U(),I(),O(),he={class:"file-breadcrumb"},wt=j({__name:"FileBreadcrumb",setup(i){const{t:n}=N(),t=z();function s(a){if(a<0)t.navigateTo("");else{const l=t.pathSegments.slice(0,a+1).join("/");t.navigateTo(l)}}return(a,l)=>(b(),T("div",he,[x(e(St),null,{default:k(()=>[x(e(de),{onClick:l[0]||(l[0]=c=>s(-1))},{default:k(()=>[S(w(e(n)("files.breadcrumbRoot")),1)]),_:1}),(b(!0),T(ue,null,re(e(t).pathSegments,(c,_)=>(b(),R(e(de),{key:_,onClick:p=>s(_)},{default:k(()=>[S(w(c),1)]),_:2},1032,["onClick"]))),128))]),_:1})]))}})})),la=F((()=>{})),oa,Wa=F((()=>{we(),we(),la(),H(),oa=X(wt,[["__scopeId","data-v-061302de"]])})),ge,gt,ye=F((()=>{P(),I(),U(),O(),ge={class:"file-toolbar"},gt=j({__name:"FileToolbar",emits:["showNewFile","showNewFolder","showUpload"],setup(i,{emit:n}){const{t}=N(),s=q(),a=z(),l=n;async function c(){try{await a.fetchEntries()}catch{s.error(t("files.backendError"))}}return(_,p)=>(b(),T("div",ge,[x(e(Y),{size:8,wrap:!0,class:"toolbar-space"},{default:k(()=>[x(e(M),{size:"small",onClick:p[0]||(p[0]=u=>l("showNewFile")),class:"toolbar-btn"},{default:k(()=>[S(w(e(t)("files.newFile")),1)]),_:1}),x(e(M),{size:"small",onClick:p[1]||(p[1]=u=>l("showNewFolder")),class:"toolbar-btn"},{default:k(()=>[S(w(e(t)("files.newFolder")),1)]),_:1}),x(e(M),{size:"small",onClick:p[2]||(p[2]=u=>l("showUpload")),class:"toolbar-btn"},{default:k(()=>[S(w(e(t)("files.upload")),1)]),_:1}),x(e(M),{size:"small",onClick:c,class:"toolbar-btn"},{default:k(()=>[S(w(e(t)("files.refresh")),1)]),_:1})]),_:1})]))}})})),ra=F((()=>{})),ua,Ya=F((()=>{ye(),ye(),ra(),H(),ua=X(gt,[["__scopeId","data-v-64269d74"]])})),ke,Fe,be,Ce,xe,$e,Ee,Se,Te,De,Me,Be,yt,Pe=F((()=>{P(),I(),U(),O(),rt(),ke={class:"file-list"},Fe={key:1,class:"file-list-items"},be={class:"file-list-header"},Ce={key:0,class:"sort-indicator"},xe={key:0,class:"sort-indicator"},$e={key:0,class:"sort-indicator"},Ee=["onDblclick","onContextmenu"],Se={class:"file-name"},Te={class:"file-icon"},De={class:"file-size"},Me={class:"file-date"},Be={class:"file-actions"},yt=j({__name:"FileList",emits:["contextmenu-entry"],setup(i,{emit:n}){const{t}=N(),s=q(),a=z(),l=n;function c(d){if(d===0)return"—";const v=["B","KB","MB","GB"];let h=0,C=d;for(;C>=1024&&h<v.length-1;)C/=1024,h++;return`${C.toFixed(h===0?0:1)} ${v[h]}`}function _(d){return d?new Date(d).toLocaleString():"—"}function p(d){return d.isDir?"📁":{yaml:"⚙️",yml:"⚙️",json:"📋",toml:"⚙️",md:"📝",txt:"📄",log:"📄",py:"🐍",js:"📜",ts:"📜",vue:"💚",png:"🖼️",jpg:"🖼️",jpeg:"🖼️",gif:"🖼️",svg:"🖼️",webp:"🖼️",zip:"📦",gz:"📦",tar:"📦",sh:"⚡",bash:"⚡"}[d.name.split(".").pop()?.toLowerCase()||""]||"📄"}async function u(d){try{await a.openPreview(d)}catch{s.error(t("files.backendError"))}}async function m(d){d.isDir?a.navigateTo(d.path):V(d.name)?await a.openEditor(d.path):le(d.name)&&await u(d)}function g(d,v){d.preventDefault(),l("contextmenu-entry",d,v)}async function B(d){try{await ut(d.path,d.name)}catch(v){s.error(v.message||t("files.backendError"))}}return(d,v)=>(b(),T("div",ke,[x(e(zt),{show:e(a).loading},{default:k(()=>[!e(a).loading&&e(a).sortedEntries.length===0?(b(),R(e(Tt),{key:0,description:e(t)("files.emptyDir")},null,8,["description"])):(b(),T("div",Fe,[f("div",be,[f("div",{class:"file-name sort-header",onClick:v[0]||(v[0]=h=>e(a).setSort("name"))},[S(w(e(t)("files.name"))+" ",1),e(a).sortBy==="name"?(b(),T("span",Ce,w(e(a).sortOrder==="asc"?"↑":"↓"),1)):L("",!0)]),f("div",{class:"file-size sort-header",onClick:v[1]||(v[1]=h=>e(a).setSort("size"))},[S(w(e(t)("files.size"))+" ",1),e(a).sortBy==="size"?(b(),T("span",xe,w(e(a).sortOrder==="asc"?"↑":"↓"),1)):L("",!0)]),f("div",{class:"file-date sort-header",onClick:v[2]||(v[2]=h=>e(a).setSort("modTime"))},[S(w(e(t)("files.modified"))+" ",1),e(a).sortBy==="modTime"?(b(),T("span",$e,w(e(a).sortOrder==="asc"?"↑":"↓"),1)):L("",!0)]),v[3]||(v[3]=f("div",{class:"file-actions-placeholder"},null,-1))]),(b(!0),T(ue,null,re(e(a).sortedEntries,h=>(b(),T("div",{key:h.path,class:"file-list-row",onDblclick:C=>m(h),onContextmenu:C=>g(C,h)},[f("div",Se,[f("span",Te,w(p(h)),1),f("span",null,w(h.name),1)]),f("div",De,w(h.isDir?"—":c(h.size)),1),f("div",Me,w(_(h.modTime)),1),f("div",Be,[e(le)(h.name)&&!h.isDir?(b(),R(e(M),{key:0,size:"tiny",quaternary:"",onClick:W(C=>u(h),["stop"]),title:e(t)("files.preview")},{default:k(()=>[...v[4]||(v[4]=[S("👁️",-1)])]),_:1},8,["onClick","title"])):L("",!0),e(V)(h.name)&&!h.isDir?(b(),R(e(M),{key:1,size:"tiny",quaternary:"",onClick:W(C=>e(a).openEditor(h.path),["stop"]),title:e(t)("files.edit")},{default:k(()=>[...v[5]||(v[5]=[S("✏️",-1)])]),_:1},8,["onClick","title"])):L("",!0),h.isDir?L("",!0):(b(),R(e(M),{key:2,size:"tiny",quaternary:"",onClick:W(C=>B(h),["stop"]),title:e(t)("files.download")},{default:k(()=>[...v[6]||(v[6]=[S("⬇️",-1)])]),_:1},8,["onClick","title"]))])],40,Ee))),128))]))]),_:1},8,["show"])]))}})})),ca=F((()=>{})),da,Qa=F((()=>{Pe(),Pe(),ca(),H(),da=X(yt,[["__scopeId","data-v-6e230379"]])}));function pa(i){return i.absolutePath||i.path}var _a=F((()=>{})),kt,ze=F((()=>{P(),I(),U(),O(),rt(),Ht(),_a(),kt=j({__name:"FileContextMenu",emits:["rename"],setup(i,{expose:n,emit:t}){const{t:s}=N(),a=q(),l=it(),c=z(),_=$(!1),p=$(0),u=$(0),m=$(null),g=t;function B(C,y){m.value=y,p.value=C.clientX,u.value=C.clientY,_.value=!1,Lt(()=>{_.value=!0})}function d(){const C=m.value;if(!C)return[];const y=[];return C.isDir?y.push({label:s("files.open"),key:"open"}):(V(C.name)&&y.push({label:s("files.edit"),key:"edit"}),le(C.name)&&y.push({label:s("files.preview"),key:"preview"}),y.push({label:s("files.download"),key:"download"})),y.push({type:"divider",key:"d1"}),y.push({label:s("files.copyPath"),key:"copyPath"}),y.push({label:s("files.rename"),key:"rename"}),y.push({type:"divider",key:"d2"}),y.push({label:s("files.delete"),key:"delete"}),y}async function v(C){_.value=!1;const y=m.value;if(y)switch(C){case"open":c.navigateTo(y.path);break;case"edit":try{await c.openEditor(y.path)}catch{a.error(s("files.backendError"))}break;case"preview":try{await c.openPreview(y)}catch{a.error(s("files.backendError"))}break;case"download":try{await ut(y.path,y.name)}catch(G){a.error(G.message)}break;case"copyPath":await Xt(pa(y))?a.success(s("files.pathCopied")):a.error(s("files.pathCopied")+" ✗");break;case"rename":g("rename",y);break;case"delete":l.warning({title:s("files.delete"),content:y.isDir?s("files.confirmDeleteDir",{name:y.name}):s("files.confirmDelete",{name:y.name}),positiveText:s("common.delete"),negativeText:s("common.cancel"),onPositiveClick:async()=>{try{await c.deleteEntry(y),a.success(s("files.deleted"))}catch{a.error(s("files.deleteFailed"))}}});break}}function h(){_.value=!1}return n({show:B}),(C,y)=>(b(),R(e(Pt),{show:_.value,x:p.value,y:u.value,options:d(),placement:"bottom-start",trigger:"manual",onSelect:v,onClickoutside:h},null,8,["show","x","y","options"]))}})})),fa,Za=F((()=>{ze(),ze(),fa=kt})),Le,je,Ie,Ft,Ue=F((()=>{P(),I(),U(),O(),Kt(),Le={class:"file-editor"},je={class:"editor-header"},Ie={class:"editor-filename"},Ft=j({__name:"FileEditor",setup(i){self.MonacoEnvironment={getWorker(m,g){return new Worker(new URL("/assets/editor.worker-D9luhcDD.js",""+import.meta.url),{type:"module"})}};const{t:n}=N(),t=q(),s=it(),a=z(),l=$(null);let c=null;const _=$(!1);st(()=>{!l.value||!a.editingFile||(c=Rt.create(l.value,{value:a.editingFile.content,language:a.editingFile.language,theme:document.documentElement.classList.contains("dark")?"vs-dark":"vs",minimap:{enabled:!1},fontSize:13,lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,tabSize:2,wordWrap:"on"}),c.onDidChangeModelContent(()=>{a.editingFile&&(a.editingFile.content=c.getValue())}),c.addCommand(qt.CtrlCmd|At.KeyS,()=>{p()}))}),Mt(()=>{c?.dispose(),c=null});async function p(){_.value=!0;try{await a.saveEditor(),t.success(n("files.saved"))}catch{t.error(n("files.saveFailed"))}finally{_.value=!1}}function u(){a.hasUnsavedChanges?s.warning({title:n("files.unsavedChanges"),positiveText:n("common.ok"),negativeText:n("common.cancel"),onPositiveClick:()=>{a.closeEditor()}}):a.closeEditor()}return(m,g)=>(b(),T("div",Le,[f("div",je,[f("span",Ie,w(e(a).editingFile?.path),1),x(e(Y),null,{default:k(()=>[x(e(M),{size:"small",type:"primary",loading:_.value,onClick:p},{default:k(()=>[S(w(e(n)("files.saveFile")),1)]),_:1},8,["loading"]),x(e(M),{size:"small",onClick:u},{default:k(()=>[S(w(e(n)("files.closeEditor")),1)]),_:1})]),_:1})]),f("div",{ref_key:"editorContainer",ref:l,class:"editor-container"},null,512)]))}})})),va=F((()=>{})),ma,ei=F((()=>{Ue(),Ue(),va(),H(),ma=X(Ft,[["__scopeId","data-v-1ae26b53"]])})),Ne,Oe,Re,Ae,qe,Ke,He,bt,Xe=F((()=>{P(),I(),U(),O(),ce(),Jt(),Wt(),Ne={key:0,class:"file-preview"},Oe={class:"preview-header"},Re={class:"preview-filename"},Ae={class:"preview-content"},qe=["src","alt"],Ke={key:1,class:"preview-markdown"},He=["innerHTML"],bt=j({__name:"FilePreview",setup(i){const{t:n}=N(),t=q(),s=z();function a(){return s.previewFile?ia(s.previewFile.path):""}const l=A(()=>{const p=s.previewFile;return!p||p.type!=="text"?"":Vt(p.content||"",p.language,n("common.copy"),{maxHighlightLength:2e5})});async function c(p){const u=await Gt(p);u?t.success(n("common.copied")):u===!1&&t.error(n("chat.copyFailed"))}const _=()=>pe("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"currentColor"},[pe("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})]);return(p,u)=>e(s).previewFile?(b(),T("div",Ne,[f("div",Oe,[f("span",Re,w(e(s).previewFile.path),1),x(e(M),{size:"small",quaternary:"",onClick:u[0]||(u[0]=m=>e(s).closePreview())},{icon:k(()=>[x(e(jt),null,{default:k(()=>[x(_)]),_:1})]),default:k(()=>[S(" "+w(e(n)("files.closePreview")),1)]),_:1})]),f("div",Ae,[e(s).previewFile.type==="image"?(b(),T("img",{key:0,src:a(),class:"preview-image",alt:e(s).previewFile.path},null,8,qe)):e(s).previewFile.type==="markdown"?(b(),T("div",Ke,[x(Yt,{content:e(s).previewFile.content||""},null,8,["content"])])):e(s).previewFile.type==="text"?(b(),T("div",{key:2,class:"preview-code",innerHTML:l.value,onClick:c},null,8,He)):L("",!0)])])):L("",!0)}})})),ha=F((()=>{})),wa,ti=F((()=>{Xe(),Xe(),ha(),H(),wa=X(bt,[["__scopeId","data-v-91416733"]])})),Ge,Ve,Je,We,Ye,Qe,Ze,Ct,et=F((()=>{P(),I(),U(),O(),Ge={class:"upload-panel"},Ve={class:"upload-title"},Je={key:0,class:"selected-files"},We={class:"selected-file__meta"},Ye={class:"selected-file__name"},Qe={class:"selected-file__size"},Ze=["onClick"],Ct=j({__name:"FileUploadModal",props:{show:{type:Boolean}},emits:["update:show"],setup(i,{emit:n}){const{t}=N(),s=q(),a=z(),l=i,c=n,_=$(!1),p=$(!1),u=$(0),m=$(null),g=$([]),B=A(()=>g.value.length>0);function d(r){return`${r.name}:${r.size}:${r.lastModified}`}function v(r){const E=new Set(g.value.map(d)),D=r.filter(se=>!E.has(d(se)));D.length!==0&&(g.value=[...g.value,...D])}function h(){m.value?.click()}function C(r){const E=r.target;E.files&&(v(Array.from(E.files)),E.value="")}function y(r){r.preventDefault(),r.dataTransfer&&(r.dataTransfer.dropEffect="copy")}function G(r){r.preventDefault(),r.dataTransfer?.types.includes("Files")&&(u.value+=1,p.value=!0)}function Z(r){r.preventDefault(),u.value=Math.max(0,u.value-1),u.value===0&&(p.value=!1)}function ee(r){r.preventDefault(),u.value=0,p.value=!1;const E=Array.from(r.dataTransfer?.files||[]);E.length!==0&&v(E)}function te(r){g.value=g.value.filter((E,D)=>D!==r)}function ae(r){return r<1024?`${r} B`:r<1024*1024?`${(r/1024).toFixed(1)} KB`:`${(r/(1024*1024)).toFixed(1)} MB`}async function ie(){if(g.value.length!==0){_.value=!0;try{await a.uploadFiles(g.value),s.success(t("files.uploadSuccess",{count:g.value.length})),g.value=[],c("update:show",!1)}catch(r){s.error(r.message||t("files.uploadFailed"))}finally{_.value=!1}}}function o(){u.value=0,p.value=!1,g.value=[],c("update:show",!1)}return(r,E)=>(b(),R(e(at),{show:l.show,preset:"dialog",title:e(t)("files.upload"),"onUpdate:show":o,style:{width:"560px"}},{action:k(()=>[x(e(Y),null,{default:k(()=>[x(e(M),{onClick:o},{default:k(()=>[S(w(e(t)("common.cancel")),1)]),_:1}),x(e(M),{type:"primary",loading:_.value,disabled:!B.value,onClick:ie},{default:k(()=>[S(w(e(t)("files.upload"))+" ("+w(g.value.length)+") ",1)]),_:1},8,["loading","disabled"])]),_:1})]),default:k(()=>[f("div",Ge,[f("input",{ref_key:"fileInputRef",ref:m,type:"file",multiple:"",class:"file-input-hidden",onChange:C},null,544),f("div",{class:Dt(["upload-dropzone",{"drag-over":p.value}]),onClick:h,onDragover:y,onDragenter:G,onDragleave:Z,onDrop:ee},[E[0]||(E[0]=f("div",{class:"upload-icon","aria-hidden":"true"},[f("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8"},[f("path",{d:"M12 16V5"}),f("path",{d:"M8 9l4-4 4 4"}),f("path",{d:"M20 16.5v1.5A2 2 0 0 1 18 20H6a2 2 0 0 1-2-2v-1.5"})])],-1)),f("p",Ve,w(e(t)("files.dragDropHint")),1),x(e(M),{type:"primary",secondary:"",onClick:W(h,["stop"])},{default:k(()=>[S(w(e(t)("files.upload")),1)]),_:1})],34),B.value?(b(),T("div",Je,[(b(!0),T(ue,null,re(g.value,(D,se)=>(b(),T("div",{key:d(D),class:"selected-file"},[f("div",We,[f("span",Ye,w(D.name),1),f("span",Qe,w(ae(D.size)),1)]),f("button",{type:"button",class:"selected-file__remove",onClick:Fa=>te(se)}," × ",8,Ze)]))),128))])):L("",!0)])]),_:1},8,["show","title"]))}})})),ga=F((()=>{})),ya,ai=F((()=>{et(),et(),ga(),H(),ya=X(Ct,[["__scopeId","data-v-4de50ce7"]])})),xt,tt=F((()=>{P(),I(),U(),O(),xt=j({__name:"FileRenameModal",props:{show:{type:Boolean},mode:{},entry:{}},emits:["update:show"],setup(i,{emit:n}){const{t}=N(),s=q(),a=z(),l=i,c=n,_=$(""),p=$(!1);Et(()=>l.show,B=>{B&&(l.mode==="rename"&&l.entry?_.value=l.entry.name:_.value="")});const u=A(()=>{switch(l.mode){case"newFile":return t("files.newFile");case"newFolder":return t("files.newFolder");case"rename":return t("files.rename")}}),m=A(()=>{switch(l.mode){case"newFile":return t("files.newFileName");case"newFolder":return t("files.newFolderName");case"rename":return t("files.renameTo")}});async function g(){if(_.value.trim()){p.value=!0;try{switch(l.mode){case"newFile":await a.createFile(_.value.trim()),s.success(t("files.created"));break;case"newFolder":await a.createDir(_.value.trim()),s.success(t("files.created"));break;case"rename":l.entry&&(await a.renameEntry(l.entry,_.value.trim()),s.success(t("files.renamed")));break}c("update:show",!1)}catch(B){const d=l.mode==="rename"?t("files.renameFailed"):t("files.createFailed");s.error(B.message||d)}finally{p.value=!1}}}return(B,d)=>(b(),R(e(at),{show:l.show,preset:"dialog",title:u.value,"onUpdate:show":d[2]||(d[2]=v=>c("update:show",!1)),style:{width:"400px"}},{action:k(()=>[x(e(Y),null,{default:k(()=>[x(e(M),{onClick:d[1]||(d[1]=v=>c("update:show",!1))},{default:k(()=>[S(w(e(t)("common.cancel")),1)]),_:1}),x(e(M),{type:"primary",loading:p.value,disabled:!_.value.trim(),onClick:g},{default:k(()=>[S(w(e(t)("common.ok")),1)]),_:1},8,["loading","disabled"])]),_:1})]),default:k(()=>[x(e($t),{value:_.value,"onUpdate:value":d[0]||(d[0]=v=>_.value=v),placeholder:m.value,onKeydown:It(g,["enter"]),autofocus:""},null,8,["value","placeholder"])]),_:1},8,["show","title"]))}})})),ka,ii=F((()=>{tt(),tt(),ka=xt}));export{na as _,wa as a,z as b,ei as c,da as d,Qa as f,Wa as g,oa as h,ai as i,fa as l,Ya as m,ii as n,ti as o,ua as p,ya as r,ma as s,ka as t,Za as u,Ja as v,O as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as p}from"./rolldown-runtime-M0oDzQ_3.js";import{$t as f,Bn as t,Bt as V,Jn as F,en as v,nn as k,on as i,sn as N,xn as r,yn as E}from"./ui-vendor-DNWaqYj5.js";import{n as P,t as U}from"./_plugin-vue_export-helper-
|
|
1
|
+
import{n as p}from"./rolldown-runtime-M0oDzQ_3.js";import{$t as f,Bn as t,Bt as V,Jn as F,en as v,nn as k,on as i,sn as N,xn as r,yn as E}from"./ui-vendor-DNWaqYj5.js";import{n as P,t as U}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{X as C,Y as T}from"./index-DyLZQAQu.js";import{_ as L,a as $,b as I,c as J,d as X,f as Y,g as j,h as q,i as z,l as A,m as D,n as G,o as H,p as K,r as O,s as Q,t as W,u as Z,v as ee,y as ie}from"./FileRenameModal-DMqVjoLN.js";var w,c,h,y,x,M=p((()=>{V(),ie(),T(),ee(),j(),D(),Y(),Z(),J(),H(),z(),G(),w={class:"files-view"},c={class:"files-tree-panel"},h={class:"files-main-panel"},y={class:"files-content"},x=N({__name:"FilesView",setup(ae){const _=I(),u=C(),m=t(null),d=t(!1),l=t(!1),n=t("newFile"),a=t(null);function S(s,e){m.value?.show(s,e)}function b(){n.value="newFile",a.value=null,l.value=!0}function g(){n.value="newFolder",a.value=null,l.value=!0}function B(s){n.value="rename",a.value=s,l.value=!0}async function R(){(!u.activeProfileName||u.profiles.length===0)&&await u.fetchProfiles(),await _.fetchEntries("")}return E(()=>{R()}),(s,e)=>(r(),k("div",w,[f("div",c,[i(L)]),f("div",h,[i(K,{onShowNewFile:b,onShowNewFolder:g,onShowUpload:e[0]||(e[0]=o=>d.value=!0)}),i(q),f("div",y,[F(_).editingFile?(r(),v(Q,{key:0})):F(_).previewFile?(r(),v($,{key:1})):(r(),v(X,{key:2,onContextmenuEntry:S}))])]),i(A,{ref_key:"contextMenuRef",ref:m,onRename:B},null,512),i(O,{show:d.value,"onUpdate:show":e[1]||(e[1]=o=>d.value=o)},null,8,["show"]),i(W,{show:l.value,"onUpdate:show":e[2]||(e[2]=o=>l.value=o),mode:n.value,entry:a.value},null,8,["show","mode","entry"])]))}})})),le=p((()=>{})),te,ne=p((()=>{M(),M(),le(),P(),te=U(x,[["__scopeId","data-v-89d440cf"]])}));ne();export{te as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as G}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as m,$t as o,A as at,An as A,At as De,Bn as C,Bt as Ge,Cn as ze,Gt as ns,Ht as ss,It as ls,Jn as n,Jt as Fe,On as nt,Qn as st,Qt as b,S as Ct,Xn as Z,Xt as kt,Yt as be,_n as rs,an as E,bn as Pn,en as Ie,et as is,ft as us,gt as cs,hn as Je,it as vt,jn as ds,m as vs,nn as y,on as x,qt as lt,sn as Ee,t as rt,tn as B,vt as ms,w as Ke,wt as W,xn as _,yn as Ye,z as Dn}from"./ui-vendor-DNWaqYj5.js";import{_ as ps,c as Ze,f as Bn,g as gs,l as et,m as Ln,p as fs}from"./vue-vendor-VX6KvV1_.js";import{d as le,l as Un,n as We,o as Fn,t as qe}from"./_plugin-vue_export-helper-D4mtpdbl.js";import{M as hs,j as _s}from"./vendor-B1Lfatlz.js";import{J as On,N as zn,P as En,X as Gn,Y as Hn,b as ys,o as Cs,q as Oe,tt as ks,u as ws,x as xs,y as Is}from"./index-BHU-82RO.js";import{n as bs,t as Ss}from"./clipboard-1NPxC3YL.js";import{i as jn,n as Ms,r as Vn,t as $s}from"./VirtualMessageList-B_teFrlt.js";import{a as Ts,c as Rs,i as As,n as Ns,o as Ps,r as mt,s as Ds,t as wt}from"./MarkdownRenderer-D-IgakCO.js";import{a as Bs,i as Ls,n as Us,o as Fs,r as Os,s as zs,t as Es}from"./ttsHelpers-CVcFKmJR.js";function Gs(d){if(_e?.connected)return _e;const t=Fn(),u=d?.userId||localStorage.getItem("gc_user_id")||Jn();return localStorage.setItem("gc_user_id",u),_e=hs("/group-chat",{auth:{token:t||void 0,userId:u,name:d?.userName||localStorage.getItem("gc_user_name")||void 0,description:d?.description||localStorage.getItem("gc_user_description")||void 0,authUserId:d?.authUserId},transports:["websocket","polling"],reconnection:!0,reconnectionAttempts:1/0,reconnectionDelay:1e3,reconnectionDelayMax:3e4,randomizationFactor:.5,timeout:3e4}),_e}function Hs(){let d=localStorage.getItem("gc_user_id");return d||(d=Jn(),localStorage.setItem("gc_user_id",d)),d}function js(){return localStorage.getItem("gc_user_name")}function Jn(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,d=>{const t=Math.random()*16|0;return(d==="x"?t:t&3|8).toString(16)})}function Ve(){return _e?.connected?_e:null}function Vs(){_e&&(_e.disconnect(),_e=null)}async function Js(d){return le("/api/hermes/group-chat/rooms",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})}async function Ks(d,t){return le(`/api/hermes/group-chat/rooms/${d}/clone`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})})}async function Ys(){return le("/api/hermes/group-chat/rooms")}async function pt(d,t={}){const u=new URLSearchParams;t.offset!=null&&u.set("offset",String(t.offset)),t.limit!=null&&u.set("limit",String(t.limit));const l=u.toString();return le(`/api/hermes/group-chat/rooms/${d}${l?`?${l}`:""}`)}async function Ws(d){return le(`/api/hermes/group-chat/rooms/join/${d}`)}async function qs(d,t){return le(`/api/hermes/group-chat/rooms/${d}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async function Xs(d){return le(`/api/hermes/group-chat/rooms/${d}/agents`)}async function Qs(d,t){return le(`/api/hermes/group-chat/rooms/${d}/agents/${t}`,{method:"DELETE"})}async function Zs(d){return le(`/api/hermes/group-chat/rooms/${d}`,{method:"DELETE"})}async function el(d){return le(`/api/hermes/group-chat/rooms/${d}/clear-context`,{method:"POST"})}async function tl(d,t){return le(`/api/hermes/group-chat/rooms/${d}/config`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async function ol(d){return le(`/api/hermes/group-chat/rooms/${d}/compress`,{method:"POST"})}var _e,Kn=G((()=>{_s(),Un(),_e=null}));async function al(d){const t=new FormData;for(const r of d)r.file&&t.append("file",r.file,r.name);const u=Fn(),l=await fetch("/upload",{method:"POST",body:t,headers:u?{Authorization:`Bearer ${u}`}:{}});if(!l.ok)throw new Error(`Upload failed: ${l.status}`);return(await l.json()).files}function nl(d,t,u){const l=[];d.trim()&&l.push({type:"text",text:d.trim()});for(let r=0;r<u.length;r+=1){const g=u[r],f=t[r];f?.type.startsWith("image/")?l.push({type:"image",name:g.name,path:g.path,media_type:f.type}):l.push({type:"file",name:g.name,path:g.path,media_type:f?.type})}return l}function sl(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function ll(d){return/^[a-zA-Z]:\\/.test(d)?d.replace(/\\/g,"/"):d}function Se(d){return!!d?.trim()}function rl(d){return!!d.tool_calls?.length}function gt(d){return d.role==="assistant"&&!Se(d.content)&&Se(d.reasoning)&&!rl(d)}function xt(d,t){return{...t,content:Se(t.content)?t.content:d?.content||t.content||"",reasoning:Se(t.reasoning)?t.reasoning:d?.reasoning??t.reasoning??null,reasoning_content:Se(t.reasoning_content)?t.reasoning_content:d?.reasoning_content??t.reasoning_content??null,isStreaming:!1,attachments:d?.attachments||t.attachments}}function yt(d){return d!=null&&d!==""}function It(d){return yt(d)?d:void 0}function ft(d){if(!yt(d))return"";if(typeof d=="string")return d;try{const t=JSON.stringify(d);if(t!==void 0)return t}catch{}return String(d)}function il(d){const t=new Map,u=new Map;for(const r of d)if(r.role==="assistant"&&r.tool_calls?.length)for(const g of r.tool_calls)g?.id&&(g.function?.name&&t.set(g.id,g.function.name),yt(g.function?.arguments)&&u.set(g.id,g.function.arguments));const l=[];for(const r of d)if(!(r.role!=="tool"&&!r.tool_calls?.length&&!ft(r.content).trim()&&!r.reasoning?.trim()&&(!r.isStreaming||r.finish_reason==="streaming"))){if(r.role==="assistant"&&r.tool_calls?.length&&!ft(r.content).trim()){for(const g of r.tool_calls)l.push({...r,id:`${r.id}_${g.id}`,role:"tool",content:"",toolName:g.function?.name||void 0,toolCallId:g.id,toolArgs:It(g.function?.arguments),toolStatus:"running"});continue}if(r.role==="tool"){const g=r.tool_call_id||"",f=r.tool_name||t.get(g)||void 0,N=u.has(g)?u.get(g):void 0;let S="";const P=ft(r.content);if(P)try{const R=typeof r.content=="string"?JSON.parse(P):r.content;S=R?.url||R?.title||R?.preview||R?.summary||""}catch{S=P.slice(0,80)}const w=l.findIndex(R=>R.role==="tool"&&R.toolCallId===g&&!R.toolResult),T={...r,id:w!==-1?l[w].id:r.id,senderId:w!==-1?l[w].senderId:r.senderId,senderName:w!==-1?l[w].senderName:r.senderName,timestamp:w!==-1?l[w].timestamp:r.timestamp,role:"tool",content:"",toolName:f||(w!==-1?l[w].toolName:void 0),toolCallId:g||void 0,toolArgs:N!==void 0?N:w!==-1?l[w].toolArgs:void 0,toolPreview:typeof S=="string"&&S.slice(0,100)||void 0,toolResult:It(r.content),toolStatus:"done"};w!==-1?l[w]=T:l.push(T);continue}l.push(r)}return l}var bt,tt,it=G((()=>{ps(),Ge(),Un(),ws(),En(),Kn(),bt=300,tt=gs("groupChat",()=>{const d=C(!1),t=C(null),u=C([]),l=C([]),r=C([]),g=C([]),f=C(""),N=C(!1),S=C(null),P=C(new Map),w=C(new Map),T=C(!1),R=C(new Map),L=C(0),I=C(0),D=C(!1),V=C(!1),ee=C("");function U(){L.value=0,I.value=0,D.value=!1,V.value=!1}function de(i){I.value=i.messages.length,L.value=i.total??i.messages.length,D.value=i.hasMore??I.value<L.value}function J(i){T.value=i}function ve(i,s){window.dispatchEvent(new CustomEvent("auto-play-speech",{detail:{messageId:i,content:s}}))}async function re(i,s){if(t.value!==i)return;const e=l.value.findIndex(a=>a.id===s);if(!(e<0||!gt(l.value[e])))try{const a=(await pt(i)).messages.find(O=>O.id===s);if(!a||!Se(a.content))return;const c=l.value.findIndex(O=>O.id===s);if(c<0||!gt(l.value[c]))return;l.value[c]=xt(l.value[c],a),l.value=[...l.value]}catch{}}function Me(i,s){setTimeout(()=>{re(i,s)},bt)}const ne=b(()=>{for(const[,i]of w.value)return i;return null}),q=b(()=>{if(!t.value)return null;for(const i of R.value.values())if(i.roomId===t.value)return i;return null}),H=C(Hs()),X=C(js()||"");function j(i,s={}){if(r.value=i.members||[],i.agents&&(g.value=i.agents),i.roomName&&(f.value=i.roomName),s.syncMessages&&Array.isArray(i.messages)){const e=new Map(l.value.map(a=>[a.id,a]));for(const a of i.messages){const c=e.get(a.id);e.set(a.id,c?{...c,...a}:a)}l.value=Array.from(e.values()).sort((a,c)=>a.timestamp-c.timestamp),typeof i.total=="number"||typeof i.hasMore=="boolean"?de(i):(I.value=Math.max(I.value,l.value.length),L.value=Math.max(L.value,I.value))}for(const e of P.value.values())clearTimeout(e.timer);if(P.value.clear(),i.typingUsers)for(const e of i.typingUsers){const a=setTimeout(()=>P.value.delete(e.userId),5e3);P.value.set(e.userId,{name:e.userName,timer:a})}i.contextStatuses?w.value=new Map(i.contextStatuses.map(e=>[e.agentName,e])):w.value.clear()}async function me(i,s={}){const e=Ve();e&&await new Promise(a=>{e.emit("join",{roomId:i,name:X.value||void 0,description:localStorage.getItem("gc_user_description")||void 0},c=>{if(t.value!==i){a();return}c?.error?S.value=c.error:j(c,s),a()})})}const ye=b(()=>il([...l.value].sort((i,s)=>i.timestamp-s.timestamp))),$e=b(()=>r.value.map(i=>i.name)),te=b(()=>Array.from(P.value.values()).map(i=>i.name)),Te=b(()=>{const i=te.value;return i.length===0?"":i.length===1?`${i[0]} is typing...`:i.length===2?`${i[0]} and ${i[1]} are typing...`:`${i[0]} and ${i.length-1} others are typing...`});async function ie(){let i;try{const e=await Cs();i=e.id,ee.value=e.avatar||""}catch{}const s=Gs({userId:H.value,userName:X.value||void 0,authUserId:i});console.log("[GroupChat] connecting...",{userId:H.value,userName:X.value}),s.on("connect",()=>{console.log("[GroupChat] connected, socket id:",s.id),d.value=!0,S.value=null;const e=t.value;e&&me(e,{syncMessages:!0}).catch(a=>{S.value=a.message})}),s.on("disconnect",e=>{console.log("[GroupChat] disconnected:",e),d.value=!1}),s.on("connect_error",e=>{console.error("[GroupChat] connect_error:",e.message),S.value=e.message,d.value=!1}),s.on("message",e=>{if(e.roomId===t.value){const a=l.value.findIndex(O=>O.id===e.id),c=xt(a>=0?l.value[a]:null,e);a>=0?(l.value[a]=c,l.value=[...l.value]):(l.value.push(c),I.value+=1,L.value=Math.max(L.value+1,I.value)),T.value&&c.role==="assistant"&&c.content?.trim()&&setTimeout(()=>ve(c.id,c.content),300)}}),s.on("message_stream_start",e=>{if(e.roomId!==t.value)return;l.value=l.value.filter(c=>!(c.roomId===e.roomId&&c.senderId===e.senderId&&c.id!==e.id&&c.isStreaming&&!c.content?.trim()&&!c.reasoning?.trim()&&!c.tool_calls?.length)),e.isStreaming=!0;const a=l.value.findIndex(c=>c.id===e.id);if(a>=0){const c=l.value[a];if(!c.isStreaming)return;l.value[a]={...c,...e,content:Se(e.content)?e.content:c.content||"",reasoning:Se(e.reasoning)?e.reasoning:c.reasoning,reasoning_content:Se(e.reasoning_content)?e.reasoning_content:c.reasoning_content,isStreaming:!0},l.value=[...l.value]}else l.value.push(e),I.value+=1,L.value=Math.max(L.value+1,I.value)}),s.on("message_stream_delta",e=>{if(e.roomId!==t.value)return;const a=l.value.findIndex(c=>c.id===e.id);a<0||!l.value[a].isStreaming||(l.value[a]={...l.value[a],content:l.value[a].content+e.delta},l.value=[...l.value])}),s.on("message_reasoning_delta",e=>{if(e.roomId!==t.value)return;const a=l.value.findIndex(c=>c.id===e.id);a<0||!l.value[a].isStreaming||(l.value[a]={...l.value[a],reasoning:(l.value[a].reasoning||"")+e.delta,reasoning_content:(l.value[a].reasoning_content||"")+e.delta,isStreaming:!0},l.value=[...l.value])}),s.on("message_stream_end",e=>{if(e.roomId!==t.value)return;const a=l.value.findIndex(c=>c.id===e.id);a>=0&&!l.value[a].content?.trim()&&!l.value[a].reasoning?.trim()&&!l.value[a].tool_calls?.length?l.value.splice(a,1):a>=0&&(l.value[a]={...l.value[a],isStreaming:!1},l.value=[...l.value],gt(l.value[a])&&Me(e.roomId,e.id))}),s.on("member_joined",e=>{e.roomId===t.value&&(r.value=e.members)}),s.on("member_left",e=>{e.roomId===t.value&&(r.value=e.members)}),s.on("typing",e=>{if(e.roomId===t.value&&!P.value.has(e.userId)){const a=setTimeout(()=>P.value.delete(e.userId),5e3);P.value.set(e.userId,{name:e.userName,timer:a})}}),s.on("stop_typing",e=>{if(e.roomId===t.value&&P.value.has(e.userId)){const a=P.value.get(e.userId);clearTimeout(a.timer),P.value.delete(e.userId)}}),s.on("context_status",e=>{e.roomId===t.value&&(e.status==="ready"?(w.value.delete(e.agentName),l.value=l.value.map(a=>a.senderName===e.agentName&&a.isStreaming?{...a,isStreaming:!1}:a).filter(a=>!(a.senderName===e.agentName&&!a.content?.trim()&&!a.reasoning?.trim()&&!a.tool_calls?.length))):w.value.set(e.agentName,{agentName:e.agentName,status:e.status}),w.value=new Map(w.value))}),s.on("approval.requested",e=>{if(!e.approval_id)return;const a=(Array.isArray(e.choices)?e.choices:["once","session","deny"]).filter(c=>c==="once"||c==="session"||c==="always"||c==="deny");R.value.set(e.approval_id,{roomId:e.roomId,agentName:e.agentName||"",approvalId:e.approval_id,command:e.command||"",description:e.description||"",choices:a.length?a:["once","session","deny"],allowPermanent:!!e.allow_permanent,requestedAt:Date.now()}),R.value=new Map(R.value)}),s.on("approval.resolved",e=>{e.approval_id&&(R.value.delete(e.approval_id),R.value=new Map(R.value))}),s.on("room_updated",e=>{const a=u.value.find(c=>c.id===e.roomId);a&&(a.totalTokens=e.totalTokens)}),s.on("room_cleared",e=>{const a=u.value.find(c=>c.id===e.roomId);a&&(a.totalTokens=e.totalTokens),e.roomId===t.value&&(l.value=[],U(),P.value.clear(),w.value.clear(),R.value.clear())})}function Re(){Vs(),d.value=!1,t.value=null,l.value=[],U(),r.value=[],g.value=[],f.value="",P.value.clear(),w.value.clear(),R.value.clear()}function ue(i,s){X.value=i,localStorage.setItem("gc_user_name",i),localStorage.setItem("gc_user_description",s)}async function ce(i){N.value=!0,S.value=null;try{const s=await pt(i);t.value=s.room.id,f.value=s.room.name,l.value=s.messages,de(s),g.value=s.agents,r.value=s.members||[]}catch(s){throw S.value=s.message,s}finally{N.value=!1}await me(i)}async function pe(){const i=t.value;if(!i||V.value||!D.value)return!1;const s=I.value;V.value=!0;try{const e=await pt(i,{offset:s,limit:300}),a=new Set(l.value.map(O=>O.id)),c=e.messages.filter(O=>!a.has(O.id));return l.value=[...c,...l.value],I.value=s+e.messages.length,L.value=e.total??L.value,D.value=e.hasMore??I.value<L.value,c.length>0}catch(e){return S.value=e.message,!1}finally{V.value=!1}}async function ge(i,s){const e=Ve();if(!e||!t.value)return;k();const a=sl();let c=i.trim();if(s?.length){const O=await al(s);c=nl(i,s,O);const K=new Map(O.map(Y=>[Y.name,zn(ll(Y.path),Y.name)]));l.value.push({id:a,roomId:t.value,senderId:H.value,senderName:X.value||"You",content:JSON.stringify(c),timestamp:Date.now(),role:"user",attachments:s.map(Y=>({...Y,url:K.get(Y.name)||Y.url,file:void 0}))}),I.value+=1,L.value=Math.max(L.value+1,I.value)}return new Promise((O,K)=>{e.emit("message",{roomId:t.value,id:a,content:c},Y=>{if(Y.error){l.value=l.value.filter(v=>v.id!==a),K(new Error(Y.error));return}O()})})}async function Ce(){try{u.value=(await Ys()).rooms}catch(i){S.value=i.message}}async function Ae(i,s,e,a){try{const c=await Js({name:i,inviteCode:s,agents:e,compression:a||{triggerTokens:1e5,maxHistoryTokens:32e3,tailMessageCount:10}});return u.value.push(c.room),c}catch(c){throw S.value=c.message,c}}async function ke(i){try{const s=await Ws(i);return await ce(s.room.id),s.room}catch(s){throw S.value=s.message,s}}async function we(i){try{await Zs(i),u.value=u.value.filter(s=>s.id!==i),t.value===i&&(t.value=null,l.value=[],U(),r.value=[],g.value=[],f.value="")}catch(s){throw S.value=s.message,s}}async function Be(i,s){try{const e=await Ks(i,s);return u.value.push(e.room),e}catch(e){throw S.value=e.message,e}}async function xe(){if(t.value)try{const i=await el(t.value);l.value=[],U(),P.value.clear(),w.value.clear();const s=u.value.findIndex(e=>e.id===t.value);return s>=0&&i.room&&(u.value[s]=i.room),i}catch(i){throw S.value=i.message,i}}async function fe(i){try{g.value=(await Xs(i)).agents}catch{}}async function he(i,s){try{const e=await qs(i,s);return g.value.push(e.agent),e.agent}catch(e){throw S.value=e.message,e}}async function Le(i,s){try{const e=await Qs(i,s);g.value=e.agents??g.value.filter(a=>a.id!==s&&a.agentId!==s),e.members&&(r.value=e.members)}catch(e){throw S.value=e.message,e}}let oe=null;function p(){const i=Ve();!i||!t.value||(i.emit("typing",{roomId:t.value}),oe&&clearTimeout(oe),oe=setTimeout(()=>k(),4e3))}function k(){const i=Ve();!i||!t.value||(i.emit("stop_typing",{roomId:t.value}),oe&&(clearTimeout(oe),oe=null))}async function M(i){const s=Ve();!s||!t.value||await new Promise((e,a)=>{s.emit("interrupt_agent",{roomId:t.value,agentName:i},c=>{c?.error?a(new Error(c.error)):e()})})}async function F(i){const s=Ve(),e=q.value;!s||!e||(await new Promise((a,c)=>{s.emit("approval.respond",{roomId:e.roomId,approval_id:e.approvalId,choice:i},O=>{O?.error?c(new Error(O.error)):a()})}),R.value.delete(e.approvalId),R.value=new Map(R.value))}return{connected:d,currentRoomId:t,rooms:u,messages:l,members:r,agents:g,roomName:f,isJoining:N,error:S,contextStatus:ne,contextStatuses:w,pendingApprovals:R,activePendingApproval:q,autoPlaySpeechEnabled:T,totalMessages:L,loadedMessageCount:I,hasMoreBefore:D,isLoadingOlderMessages:V,userId:H,userName:X,currentUserAvatar:ee,sortedMessages:ye,memberNames:$e,typingNames:te,typingText:Te,connect:ie,disconnect:Re,setUserInfo:ue,setAutoPlaySpeech:J,joinRoom:ce,loadOlderMessages:pe,sendMessage:ge,loadRooms:Ce,emitTyping:p,emitStopTyping:k,interruptAgent:M,respondApproval:F,createNewRoom:Ae,joinByCode:ke,deleteRoom:we,cloneRoom:Be,clearCurrentRoomContext:xe,loadAgents:fe,addAgentToRoom:he,removeAgentFromRoom:Le}})})),St,Mt,$t,Tt,Rt,At,Nt,Pt,Dt,Bt,Lt,Ut,Ft,Ot,zt,Et,Gt,Ht,jt,Vt,Jt,Kt,Yt,Wt,qt,Xt,Qt,Zt,eo,to,oo,ao,no,so,lo,ro,io,uo,co,Pe,ht,vo,mo,po,go,ot,Yn,fo=G((()=>{Ge(),Ze(),rt(),Ns(),On(),Hn(),Ds(),ys(),Fs(),Ls(),Us(),En(),St={key:0,class:"group-message tool-message"},Mt={class:"avatar"},$t={class:"msg-body"},Tt={class:"msg-header"},Rt={class:"sender-name"},At={key:0,class:"agent-desc"},Nt={key:1,width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5",class:"tool-icon"},Pt={class:"tool-name"},Dt={key:2,class:"tool-preview"},Bt={key:3,class:"tool-spinner"},Lt={key:4,class:"tool-error-badge"},Ut={key:0,class:"tool-detail-section","data-copy-source":"tool-args"},Ft={class:"tool-detail-label"},Ot=["innerHTML"],zt={key:1,class:"tool-detail-section","data-copy-source":"tool-result"},Et={class:"tool-detail-label"},Gt=["innerHTML"],Ht={class:"msg-time"},jt={class:"avatar"},Vt={class:"msg-body"},Jt={class:"msg-header"},Kt={class:"sender-name"},Yt={key:0,class:"agent-desc"},Wt={key:0,class:"msg-attachments"},qt=["src","alt","onClick"],Xt=["href","title"],Qt={class:"att-name"},Zt={class:"att-size"},eo={class:"thinking-label"},to={class:"thinking-meta"},oo={key:0,class:"thinking-body"},ao={key:3,class:"streaming-dots"},no={class:"message-meta"},so=["title"],lo={key:0,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},ro={key:1,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},io=["title"],uo={class:"message-time"},co=["src"],Pe=1e3,ht=200,vo=6,mo=1e3,po=50,go=50,ot="__truncated__",Yn=Ee({__name:"GroupMessageItem",props:{message:{},agents:{},members:{},currentUserId:{}},setup(d){const t=d,{t:u}=et(),l=Dn(),r=Gn(),g=zs(),f=Bs(),N=C(null),S=b(()=>t.agents.some(v=>v.agentId===t.message.senderId||v.name===t.message.senderName)),P=b(()=>t.message.role!=="assistant"?!1:t.message.finish_reason==="error"?!0:/^Error:\s*/i.test(t.message.content||"")),w=b(()=>!!t.currentUserId&&t.message.senderId===t.currentUserId),T=b(()=>t.agents.find(v=>v.agentId===t.message.senderId||v.name===t.message.senderName)),R=b(()=>new Date(t.message.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})),L=b(()=>T.value?.profile||t.message.senderName||t.message.senderId),I=b(()=>r.profiles.find(v=>v.name===T.value?.profile)),D=b(()=>S.value?null:t.members?.find(v=>v.userId===t.message.senderId||v.name===t.message.senderName)||null),V=b(()=>{const v=D.value?.avatar;if(!v)return null;try{const h=typeof v=="string"?JSON.parse(v):v;if(h&&h.type==="image"&&h.dataUrl)return h}catch{}return null}),ee=b(()=>S.value?I.value?.avatar??null:V.value),U=b(()=>S.value?L.value:t.message.senderName||t.message.senderId||"user"),de=b(()=>["all",...t.agents.map(v=>v.name).filter(Boolean)]),J=b(()=>xs(t.message.content||"",{streaming:!!t.message.isStreaming})),ve=b(()=>!!(t.message.reasoning&&t.message.reasoning.length>0)),re=b(()=>ve.value||J.value.hasThinking),Me=b(()=>{const v=[];return t.message.reasoning&&v.push(t.message.reasoning),v.push(...J.value.segments),J.value.pending&&v.push(J.value.pending),v.join(`
|
|
1
|
+
import{n as G}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as m,$t as o,A as at,An as A,At as De,Bn as C,Bt as Ge,Cn as ze,Gt as ns,Ht as ss,It as ls,Jn as n,Jt as Fe,On as nt,Qn as st,Qt as b,S as Ct,Xn as Z,Xt as kt,Yt as be,_n as rs,an as E,bn as Pn,en as Ie,et as is,ft as us,gt as cs,hn as Je,it as vt,jn as ds,m as vs,nn as y,on as x,qt as lt,sn as Ee,t as rt,tn as B,vt as ms,w as Ke,wt as W,xn as _,yn as Ye,z as Dn}from"./ui-vendor-DNWaqYj5.js";import{_ as ps,c as Ze,f as Bn,g as gs,l as et,m as Ln,p as fs}from"./vue-vendor-VX6KvV1_.js";import{d as le,l as Un,n as We,o as Fn,t as qe}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{M as hs,j as _s}from"./vendor-B1Lfatlz.js";import{J as On,N as zn,P as En,X as Gn,Y as Hn,b as ys,o as Cs,q as Oe,tt as ks,u as ws,x as xs,y as Is}from"./index-DyLZQAQu.js";import{n as bs,t as Ss}from"./clipboard-1NPxC3YL.js";import{i as jn,n as Ms,r as Vn,t as $s}from"./VirtualMessageList-D6BvQLbe.js";import{a as Ts,c as Rs,i as As,n as Ns,o as Ps,r as mt,s as Ds,t as wt}from"./MarkdownRenderer-2bwbBjlK.js";import{a as Bs,i as Ls,n as Us,o as Fs,r as Os,s as zs,t as Es}from"./ttsHelpers-CVcFKmJR.js";function Gs(d){if(_e?.connected)return _e;const t=Fn(),u=d?.userId||localStorage.getItem("gc_user_id")||Jn();return localStorage.setItem("gc_user_id",u),_e=hs("/group-chat",{auth:{token:t||void 0,userId:u,name:d?.userName||localStorage.getItem("gc_user_name")||void 0,description:d?.description||localStorage.getItem("gc_user_description")||void 0,authUserId:d?.authUserId},transports:["websocket","polling"],reconnection:!0,reconnectionAttempts:1/0,reconnectionDelay:1e3,reconnectionDelayMax:3e4,randomizationFactor:.5,timeout:3e4}),_e}function Hs(){let d=localStorage.getItem("gc_user_id");return d||(d=Jn(),localStorage.setItem("gc_user_id",d)),d}function js(){return localStorage.getItem("gc_user_name")}function Jn(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,d=>{const t=Math.random()*16|0;return(d==="x"?t:t&3|8).toString(16)})}function Ve(){return _e?.connected?_e:null}function Vs(){_e&&(_e.disconnect(),_e=null)}async function Js(d){return le("/api/hermes/group-chat/rooms",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})}async function Ks(d,t){return le(`/api/hermes/group-chat/rooms/${d}/clone`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})})}async function Ys(){return le("/api/hermes/group-chat/rooms")}async function pt(d,t={}){const u=new URLSearchParams;t.offset!=null&&u.set("offset",String(t.offset)),t.limit!=null&&u.set("limit",String(t.limit));const l=u.toString();return le(`/api/hermes/group-chat/rooms/${d}${l?`?${l}`:""}`)}async function Ws(d){return le(`/api/hermes/group-chat/rooms/join/${d}`)}async function qs(d,t){return le(`/api/hermes/group-chat/rooms/${d}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async function Xs(d){return le(`/api/hermes/group-chat/rooms/${d}/agents`)}async function Qs(d,t){return le(`/api/hermes/group-chat/rooms/${d}/agents/${t}`,{method:"DELETE"})}async function Zs(d){return le(`/api/hermes/group-chat/rooms/${d}`,{method:"DELETE"})}async function el(d){return le(`/api/hermes/group-chat/rooms/${d}/clear-context`,{method:"POST"})}async function tl(d,t){return le(`/api/hermes/group-chat/rooms/${d}/config`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async function ol(d){return le(`/api/hermes/group-chat/rooms/${d}/compress`,{method:"POST"})}var _e,Kn=G((()=>{_s(),Un(),_e=null}));async function al(d){const t=new FormData;for(const r of d)r.file&&t.append("file",r.file,r.name);const u=Fn(),l=await fetch("/upload",{method:"POST",body:t,headers:u?{Authorization:`Bearer ${u}`}:{}});if(!l.ok)throw new Error(`Upload failed: ${l.status}`);return(await l.json()).files}function nl(d,t,u){const l=[];d.trim()&&l.push({type:"text",text:d.trim()});for(let r=0;r<u.length;r+=1){const g=u[r],f=t[r];f?.type.startsWith("image/")?l.push({type:"image",name:g.name,path:g.path,media_type:f.type}):l.push({type:"file",name:g.name,path:g.path,media_type:f?.type})}return l}function sl(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function ll(d){return/^[a-zA-Z]:\\/.test(d)?d.replace(/\\/g,"/"):d}function Se(d){return!!d?.trim()}function rl(d){return!!d.tool_calls?.length}function gt(d){return d.role==="assistant"&&!Se(d.content)&&Se(d.reasoning)&&!rl(d)}function xt(d,t){return{...t,content:Se(t.content)?t.content:d?.content||t.content||"",reasoning:Se(t.reasoning)?t.reasoning:d?.reasoning??t.reasoning??null,reasoning_content:Se(t.reasoning_content)?t.reasoning_content:d?.reasoning_content??t.reasoning_content??null,isStreaming:!1,attachments:d?.attachments||t.attachments}}function yt(d){return d!=null&&d!==""}function It(d){return yt(d)?d:void 0}function ft(d){if(!yt(d))return"";if(typeof d=="string")return d;try{const t=JSON.stringify(d);if(t!==void 0)return t}catch{}return String(d)}function il(d){const t=new Map,u=new Map;for(const r of d)if(r.role==="assistant"&&r.tool_calls?.length)for(const g of r.tool_calls)g?.id&&(g.function?.name&&t.set(g.id,g.function.name),yt(g.function?.arguments)&&u.set(g.id,g.function.arguments));const l=[];for(const r of d)if(!(r.role!=="tool"&&!r.tool_calls?.length&&!ft(r.content).trim()&&!r.reasoning?.trim()&&(!r.isStreaming||r.finish_reason==="streaming"))){if(r.role==="assistant"&&r.tool_calls?.length&&!ft(r.content).trim()){for(const g of r.tool_calls)l.push({...r,id:`${r.id}_${g.id}`,role:"tool",content:"",toolName:g.function?.name||void 0,toolCallId:g.id,toolArgs:It(g.function?.arguments),toolStatus:"running"});continue}if(r.role==="tool"){const g=r.tool_call_id||"",f=r.tool_name||t.get(g)||void 0,N=u.has(g)?u.get(g):void 0;let S="";const P=ft(r.content);if(P)try{const R=typeof r.content=="string"?JSON.parse(P):r.content;S=R?.url||R?.title||R?.preview||R?.summary||""}catch{S=P.slice(0,80)}const w=l.findIndex(R=>R.role==="tool"&&R.toolCallId===g&&!R.toolResult),T={...r,id:w!==-1?l[w].id:r.id,senderId:w!==-1?l[w].senderId:r.senderId,senderName:w!==-1?l[w].senderName:r.senderName,timestamp:w!==-1?l[w].timestamp:r.timestamp,role:"tool",content:"",toolName:f||(w!==-1?l[w].toolName:void 0),toolCallId:g||void 0,toolArgs:N!==void 0?N:w!==-1?l[w].toolArgs:void 0,toolPreview:typeof S=="string"&&S.slice(0,100)||void 0,toolResult:It(r.content),toolStatus:"done"};w!==-1?l[w]=T:l.push(T);continue}l.push(r)}return l}var bt,tt,it=G((()=>{ps(),Ge(),Un(),ws(),En(),Kn(),bt=300,tt=gs("groupChat",()=>{const d=C(!1),t=C(null),u=C([]),l=C([]),r=C([]),g=C([]),f=C(""),N=C(!1),S=C(null),P=C(new Map),w=C(new Map),T=C(!1),R=C(new Map),L=C(0),I=C(0),D=C(!1),V=C(!1),ee=C("");function U(){L.value=0,I.value=0,D.value=!1,V.value=!1}function de(i){I.value=i.messages.length,L.value=i.total??i.messages.length,D.value=i.hasMore??I.value<L.value}function J(i){T.value=i}function ve(i,s){window.dispatchEvent(new CustomEvent("auto-play-speech",{detail:{messageId:i,content:s}}))}async function re(i,s){if(t.value!==i)return;const e=l.value.findIndex(a=>a.id===s);if(!(e<0||!gt(l.value[e])))try{const a=(await pt(i)).messages.find(O=>O.id===s);if(!a||!Se(a.content))return;const c=l.value.findIndex(O=>O.id===s);if(c<0||!gt(l.value[c]))return;l.value[c]=xt(l.value[c],a),l.value=[...l.value]}catch{}}function Me(i,s){setTimeout(()=>{re(i,s)},bt)}const ne=b(()=>{for(const[,i]of w.value)return i;return null}),q=b(()=>{if(!t.value)return null;for(const i of R.value.values())if(i.roomId===t.value)return i;return null}),H=C(Hs()),X=C(js()||"");function j(i,s={}){if(r.value=i.members||[],i.agents&&(g.value=i.agents),i.roomName&&(f.value=i.roomName),s.syncMessages&&Array.isArray(i.messages)){const e=new Map(l.value.map(a=>[a.id,a]));for(const a of i.messages){const c=e.get(a.id);e.set(a.id,c?{...c,...a}:a)}l.value=Array.from(e.values()).sort((a,c)=>a.timestamp-c.timestamp),typeof i.total=="number"||typeof i.hasMore=="boolean"?de(i):(I.value=Math.max(I.value,l.value.length),L.value=Math.max(L.value,I.value))}for(const e of P.value.values())clearTimeout(e.timer);if(P.value.clear(),i.typingUsers)for(const e of i.typingUsers){const a=setTimeout(()=>P.value.delete(e.userId),5e3);P.value.set(e.userId,{name:e.userName,timer:a})}i.contextStatuses?w.value=new Map(i.contextStatuses.map(e=>[e.agentName,e])):w.value.clear()}async function me(i,s={}){const e=Ve();e&&await new Promise(a=>{e.emit("join",{roomId:i,name:X.value||void 0,description:localStorage.getItem("gc_user_description")||void 0},c=>{if(t.value!==i){a();return}c?.error?S.value=c.error:j(c,s),a()})})}const ye=b(()=>il([...l.value].sort((i,s)=>i.timestamp-s.timestamp))),$e=b(()=>r.value.map(i=>i.name)),te=b(()=>Array.from(P.value.values()).map(i=>i.name)),Te=b(()=>{const i=te.value;return i.length===0?"":i.length===1?`${i[0]} is typing...`:i.length===2?`${i[0]} and ${i[1]} are typing...`:`${i[0]} and ${i.length-1} others are typing...`});async function ie(){let i;try{const e=await Cs();i=e.id,ee.value=e.avatar||""}catch{}const s=Gs({userId:H.value,userName:X.value||void 0,authUserId:i});console.log("[GroupChat] connecting...",{userId:H.value,userName:X.value}),s.on("connect",()=>{console.log("[GroupChat] connected, socket id:",s.id),d.value=!0,S.value=null;const e=t.value;e&&me(e,{syncMessages:!0}).catch(a=>{S.value=a.message})}),s.on("disconnect",e=>{console.log("[GroupChat] disconnected:",e),d.value=!1}),s.on("connect_error",e=>{console.error("[GroupChat] connect_error:",e.message),S.value=e.message,d.value=!1}),s.on("message",e=>{if(e.roomId===t.value){const a=l.value.findIndex(O=>O.id===e.id),c=xt(a>=0?l.value[a]:null,e);a>=0?(l.value[a]=c,l.value=[...l.value]):(l.value.push(c),I.value+=1,L.value=Math.max(L.value+1,I.value)),T.value&&c.role==="assistant"&&c.content?.trim()&&setTimeout(()=>ve(c.id,c.content),300)}}),s.on("message_stream_start",e=>{if(e.roomId!==t.value)return;l.value=l.value.filter(c=>!(c.roomId===e.roomId&&c.senderId===e.senderId&&c.id!==e.id&&c.isStreaming&&!c.content?.trim()&&!c.reasoning?.trim()&&!c.tool_calls?.length)),e.isStreaming=!0;const a=l.value.findIndex(c=>c.id===e.id);if(a>=0){const c=l.value[a];if(!c.isStreaming)return;l.value[a]={...c,...e,content:Se(e.content)?e.content:c.content||"",reasoning:Se(e.reasoning)?e.reasoning:c.reasoning,reasoning_content:Se(e.reasoning_content)?e.reasoning_content:c.reasoning_content,isStreaming:!0},l.value=[...l.value]}else l.value.push(e),I.value+=1,L.value=Math.max(L.value+1,I.value)}),s.on("message_stream_delta",e=>{if(e.roomId!==t.value)return;const a=l.value.findIndex(c=>c.id===e.id);a<0||!l.value[a].isStreaming||(l.value[a]={...l.value[a],content:l.value[a].content+e.delta},l.value=[...l.value])}),s.on("message_reasoning_delta",e=>{if(e.roomId!==t.value)return;const a=l.value.findIndex(c=>c.id===e.id);a<0||!l.value[a].isStreaming||(l.value[a]={...l.value[a],reasoning:(l.value[a].reasoning||"")+e.delta,reasoning_content:(l.value[a].reasoning_content||"")+e.delta,isStreaming:!0},l.value=[...l.value])}),s.on("message_stream_end",e=>{if(e.roomId!==t.value)return;const a=l.value.findIndex(c=>c.id===e.id);a>=0&&!l.value[a].content?.trim()&&!l.value[a].reasoning?.trim()&&!l.value[a].tool_calls?.length?l.value.splice(a,1):a>=0&&(l.value[a]={...l.value[a],isStreaming:!1},l.value=[...l.value],gt(l.value[a])&&Me(e.roomId,e.id))}),s.on("member_joined",e=>{e.roomId===t.value&&(r.value=e.members)}),s.on("member_left",e=>{e.roomId===t.value&&(r.value=e.members)}),s.on("typing",e=>{if(e.roomId===t.value&&!P.value.has(e.userId)){const a=setTimeout(()=>P.value.delete(e.userId),5e3);P.value.set(e.userId,{name:e.userName,timer:a})}}),s.on("stop_typing",e=>{if(e.roomId===t.value&&P.value.has(e.userId)){const a=P.value.get(e.userId);clearTimeout(a.timer),P.value.delete(e.userId)}}),s.on("context_status",e=>{e.roomId===t.value&&(e.status==="ready"?(w.value.delete(e.agentName),l.value=l.value.map(a=>a.senderName===e.agentName&&a.isStreaming?{...a,isStreaming:!1}:a).filter(a=>!(a.senderName===e.agentName&&!a.content?.trim()&&!a.reasoning?.trim()&&!a.tool_calls?.length))):w.value.set(e.agentName,{agentName:e.agentName,status:e.status}),w.value=new Map(w.value))}),s.on("approval.requested",e=>{if(!e.approval_id)return;const a=(Array.isArray(e.choices)?e.choices:["once","session","deny"]).filter(c=>c==="once"||c==="session"||c==="always"||c==="deny");R.value.set(e.approval_id,{roomId:e.roomId,agentName:e.agentName||"",approvalId:e.approval_id,command:e.command||"",description:e.description||"",choices:a.length?a:["once","session","deny"],allowPermanent:!!e.allow_permanent,requestedAt:Date.now()}),R.value=new Map(R.value)}),s.on("approval.resolved",e=>{e.approval_id&&(R.value.delete(e.approval_id),R.value=new Map(R.value))}),s.on("room_updated",e=>{const a=u.value.find(c=>c.id===e.roomId);a&&(a.totalTokens=e.totalTokens)}),s.on("room_cleared",e=>{const a=u.value.find(c=>c.id===e.roomId);a&&(a.totalTokens=e.totalTokens),e.roomId===t.value&&(l.value=[],U(),P.value.clear(),w.value.clear(),R.value.clear())})}function Re(){Vs(),d.value=!1,t.value=null,l.value=[],U(),r.value=[],g.value=[],f.value="",P.value.clear(),w.value.clear(),R.value.clear()}function ue(i,s){X.value=i,localStorage.setItem("gc_user_name",i),localStorage.setItem("gc_user_description",s)}async function ce(i){N.value=!0,S.value=null;try{const s=await pt(i);t.value=s.room.id,f.value=s.room.name,l.value=s.messages,de(s),g.value=s.agents,r.value=s.members||[]}catch(s){throw S.value=s.message,s}finally{N.value=!1}await me(i)}async function pe(){const i=t.value;if(!i||V.value||!D.value)return!1;const s=I.value;V.value=!0;try{const e=await pt(i,{offset:s,limit:300}),a=new Set(l.value.map(O=>O.id)),c=e.messages.filter(O=>!a.has(O.id));return l.value=[...c,...l.value],I.value=s+e.messages.length,L.value=e.total??L.value,D.value=e.hasMore??I.value<L.value,c.length>0}catch(e){return S.value=e.message,!1}finally{V.value=!1}}async function ge(i,s){const e=Ve();if(!e||!t.value)return;k();const a=sl();let c=i.trim();if(s?.length){const O=await al(s);c=nl(i,s,O);const K=new Map(O.map(Y=>[Y.name,zn(ll(Y.path),Y.name)]));l.value.push({id:a,roomId:t.value,senderId:H.value,senderName:X.value||"You",content:JSON.stringify(c),timestamp:Date.now(),role:"user",attachments:s.map(Y=>({...Y,url:K.get(Y.name)||Y.url,file:void 0}))}),I.value+=1,L.value=Math.max(L.value+1,I.value)}return new Promise((O,K)=>{e.emit("message",{roomId:t.value,id:a,content:c},Y=>{if(Y.error){l.value=l.value.filter(v=>v.id!==a),K(new Error(Y.error));return}O()})})}async function Ce(){try{u.value=(await Ys()).rooms}catch(i){S.value=i.message}}async function Ae(i,s,e,a){try{const c=await Js({name:i,inviteCode:s,agents:e,compression:a||{triggerTokens:1e5,maxHistoryTokens:32e3,tailMessageCount:10}});return u.value.push(c.room),c}catch(c){throw S.value=c.message,c}}async function ke(i){try{const s=await Ws(i);return await ce(s.room.id),s.room}catch(s){throw S.value=s.message,s}}async function we(i){try{await Zs(i),u.value=u.value.filter(s=>s.id!==i),t.value===i&&(t.value=null,l.value=[],U(),r.value=[],g.value=[],f.value="")}catch(s){throw S.value=s.message,s}}async function Be(i,s){try{const e=await Ks(i,s);return u.value.push(e.room),e}catch(e){throw S.value=e.message,e}}async function xe(){if(t.value)try{const i=await el(t.value);l.value=[],U(),P.value.clear(),w.value.clear();const s=u.value.findIndex(e=>e.id===t.value);return s>=0&&i.room&&(u.value[s]=i.room),i}catch(i){throw S.value=i.message,i}}async function fe(i){try{g.value=(await Xs(i)).agents}catch{}}async function he(i,s){try{const e=await qs(i,s);return g.value.push(e.agent),e.agent}catch(e){throw S.value=e.message,e}}async function Le(i,s){try{const e=await Qs(i,s);g.value=e.agents??g.value.filter(a=>a.id!==s&&a.agentId!==s),e.members&&(r.value=e.members)}catch(e){throw S.value=e.message,e}}let oe=null;function p(){const i=Ve();!i||!t.value||(i.emit("typing",{roomId:t.value}),oe&&clearTimeout(oe),oe=setTimeout(()=>k(),4e3))}function k(){const i=Ve();!i||!t.value||(i.emit("stop_typing",{roomId:t.value}),oe&&(clearTimeout(oe),oe=null))}async function M(i){const s=Ve();!s||!t.value||await new Promise((e,a)=>{s.emit("interrupt_agent",{roomId:t.value,agentName:i},c=>{c?.error?a(new Error(c.error)):e()})})}async function F(i){const s=Ve(),e=q.value;!s||!e||(await new Promise((a,c)=>{s.emit("approval.respond",{roomId:e.roomId,approval_id:e.approvalId,choice:i},O=>{O?.error?c(new Error(O.error)):a()})}),R.value.delete(e.approvalId),R.value=new Map(R.value))}return{connected:d,currentRoomId:t,rooms:u,messages:l,members:r,agents:g,roomName:f,isJoining:N,error:S,contextStatus:ne,contextStatuses:w,pendingApprovals:R,activePendingApproval:q,autoPlaySpeechEnabled:T,totalMessages:L,loadedMessageCount:I,hasMoreBefore:D,isLoadingOlderMessages:V,userId:H,userName:X,currentUserAvatar:ee,sortedMessages:ye,memberNames:$e,typingNames:te,typingText:Te,connect:ie,disconnect:Re,setUserInfo:ue,setAutoPlaySpeech:J,joinRoom:ce,loadOlderMessages:pe,sendMessage:ge,loadRooms:Ce,emitTyping:p,emitStopTyping:k,interruptAgent:M,respondApproval:F,createNewRoom:Ae,joinByCode:ke,deleteRoom:we,cloneRoom:Be,clearCurrentRoomContext:xe,loadAgents:fe,addAgentToRoom:he,removeAgentFromRoom:Le}})})),St,Mt,$t,Tt,Rt,At,Nt,Pt,Dt,Bt,Lt,Ut,Ft,Ot,zt,Et,Gt,Ht,jt,Vt,Jt,Kt,Yt,Wt,qt,Xt,Qt,Zt,eo,to,oo,ao,no,so,lo,ro,io,uo,co,Pe,ht,vo,mo,po,go,ot,Yn,fo=G((()=>{Ge(),Ze(),rt(),Ns(),On(),Hn(),Ds(),ys(),Fs(),Ls(),Us(),En(),St={key:0,class:"group-message tool-message"},Mt={class:"avatar"},$t={class:"msg-body"},Tt={class:"msg-header"},Rt={class:"sender-name"},At={key:0,class:"agent-desc"},Nt={key:1,width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5",class:"tool-icon"},Pt={class:"tool-name"},Dt={key:2,class:"tool-preview"},Bt={key:3,class:"tool-spinner"},Lt={key:4,class:"tool-error-badge"},Ut={key:0,class:"tool-detail-section","data-copy-source":"tool-args"},Ft={class:"tool-detail-label"},Ot=["innerHTML"],zt={key:1,class:"tool-detail-section","data-copy-source":"tool-result"},Et={class:"tool-detail-label"},Gt=["innerHTML"],Ht={class:"msg-time"},jt={class:"avatar"},Vt={class:"msg-body"},Jt={class:"msg-header"},Kt={class:"sender-name"},Yt={key:0,class:"agent-desc"},Wt={key:0,class:"msg-attachments"},qt=["src","alt","onClick"],Xt=["href","title"],Qt={class:"att-name"},Zt={class:"att-size"},eo={class:"thinking-label"},to={class:"thinking-meta"},oo={key:0,class:"thinking-body"},ao={key:3,class:"streaming-dots"},no={class:"message-meta"},so=["title"],lo={key:0,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},ro={key:1,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},io=["title"],uo={class:"message-time"},co=["src"],Pe=1e3,ht=200,vo=6,mo=1e3,po=50,go=50,ot="__truncated__",Yn=Ee({__name:"GroupMessageItem",props:{message:{},agents:{},members:{},currentUserId:{}},setup(d){const t=d,{t:u}=et(),l=Dn(),r=Gn(),g=zs(),f=Bs(),N=C(null),S=b(()=>t.agents.some(v=>v.agentId===t.message.senderId||v.name===t.message.senderName)),P=b(()=>t.message.role!=="assistant"?!1:t.message.finish_reason==="error"?!0:/^Error:\s*/i.test(t.message.content||"")),w=b(()=>!!t.currentUserId&&t.message.senderId===t.currentUserId),T=b(()=>t.agents.find(v=>v.agentId===t.message.senderId||v.name===t.message.senderName)),R=b(()=>new Date(t.message.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})),L=b(()=>T.value?.profile||t.message.senderName||t.message.senderId),I=b(()=>r.profiles.find(v=>v.name===T.value?.profile)),D=b(()=>S.value?null:t.members?.find(v=>v.userId===t.message.senderId||v.name===t.message.senderName)||null),V=b(()=>{const v=D.value?.avatar;if(!v)return null;try{const h=typeof v=="string"?JSON.parse(v):v;if(h&&h.type==="image"&&h.dataUrl)return h}catch{}return null}),ee=b(()=>S.value?I.value?.avatar??null:V.value),U=b(()=>S.value?L.value:t.message.senderName||t.message.senderId||"user"),de=b(()=>["all",...t.agents.map(v=>v.name).filter(Boolean)]),J=b(()=>xs(t.message.content||"",{streaming:!!t.message.isStreaming})),ve=b(()=>!!(t.message.reasoning&&t.message.reasoning.length>0)),re=b(()=>ve.value||J.value.hasThinking),Me=b(()=>{const v=[];return t.message.reasoning&&v.push(t.message.reasoning),v.push(...J.value.segments),J.value.pending&&v.push(J.value.pending),v.join(`
|
|
2
2
|
|
|
3
3
|
`)}),ne=b(()=>{let v=Is(J.value);return t.message.reasoning&&(v+=t.message.reasoning.length),v}),q=b(()=>t.message.isStreaming?!!(J.value.pending!==null||ve.value&&!t.message.content):!1),H=C(null),X=b(()=>q.value?!0:H.value!==null?H.value:!1),j=b(()=>J.value.body||t.message.content||""),me=b(()=>{const v=(t.message.content||"").trim();if(!v.startsWith("[")||!v.endsWith("]"))return null;try{const h=JSON.parse(v);return Array.isArray(h)?h:null}catch{return null}}),ye=b(()=>{if(t.message.attachments?.length)return t.message.attachments;const v=me.value;return v?v.flatMap((h,$)=>{if(h?.type!=="image"&&h?.type!=="file")return[];const Q=String(h.path||"");if(!Q)return[];const ae=String(h.name||`${h.type}-${$+1}`);return[{id:`${t.message.id}_attachment_${$}`,name:ae,type:h.type==="image"?String(h.media_type||"image/*"):String(h.media_type||"application/octet-stream"),size:0,url:zn(O(Q),ae)}]}):[]}),$e=b(()=>ye.value.length>0),te=b(()=>{if(t.message.role!=="user")return j.value;const v=me.value;return v?v.filter(h=>h?.type==="text"&&typeof h.text=="string").map(h=>h.text).join(`
|
|
4
4
|
`):j.value}),Te=b(()=>{if(Re.value)return null;const v=te.value||"";return v.trim()?v:null}),ie=C(!1),Re=b(()=>t.message.role==="tool"),ue=b(()=>k(t.message.toolArgs)),ce=b(()=>k(t.message.toolResult,!0)),pe=b(()=>!!(ue.value.full||ce.value.full)),ge=b(()=>ue.value.full),Ce=b(()=>ue.value.display),Ae=b(()=>ce.value.full),ke=b(()=>ce.value.display),we=b(()=>Ce.value?M(Ce.value,ue.value.language):""),Be=b(()=>ke.value?M(ke.value,ce.value.language):""),xe=b(()=>t.message.role!=="assistant"||!j.value.trim()?!1:f.provider.value==="openai"||f.provider.value==="custom"||f.provider.value==="edge"||f.provider.value==="mimo"?!0:g.isSupported),fe=b(()=>f.provider.value==="openai"||f.provider.value==="custom"||f.provider.value==="edge"||f.provider.value==="mimo"?g.currentCustomMessageId.value===t.message.id&&g.isCustomPlaying.value:g.currentMessageId.value===t.message.id&&g.isPlaying.value),he=b(()=>f.provider.value==="openai"||f.provider.value==="custom"||f.provider.value==="edge"||f.provider.value==="mimo"?g.currentCustomMessageId.value===t.message.id&&g.isCustomPaused.value:g.currentMessageId.value===t.message.id&&g.isPaused.value);function Le(v,h){return v.length>ht?v.slice(0,ht)+`
|
package/dist/client/assets/js/{HistoryMessageList-B1ORl6-d.js → HistoryMessageList-B3TsU-9g.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as d}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as $,$t as c,An as _,Bn as M,Bt as Q,Jn as S,On as r,Qt as f,_n as D,en as E,hn as B,nn as T,on as F,sn as J,tn as L,xn as p}from"./ui-vendor-DNWaqYj5.js";import{c as K,l as U}from"./vue-vendor-VX6KvV1_.js";import{n as Y,t as j}from"./_plugin-vue_export-helper-
|
|
1
|
+
import{n as d}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as $,$t as c,An as _,Bn as M,Bt as Q,Jn as S,On as r,Qt as f,_n as D,en as E,hn as B,nn as T,on as F,sn as J,tn as L,xn as p}from"./ui-vendor-DNWaqYj5.js";import{c as K,l as U}from"./vue-vendor-VX6KvV1_.js";import{n as Y,t as j}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{_ as q,tt as z,v as G}from"./index-DyLZQAQu.js";import{i as W,n as X,r as Z,t as ee}from"./VirtualMessageList-D6BvQLbe.js";import{n as se,t as te}from"./MessageItem-OSBjfS2l.js";var b,V,w,v,I,x=d((()=>{Q(),z(),K(),X(),se(),q(),Z(),b={class:"empty-state"},V={key:0,class:"history-loader"},w={key:0,class:"history-loader-spinner"},v=new Map,I=J({__name:"HistoryMessageList",props:{session:{},loadOlder:{type:Function}},setup(k,{expose:H}){const l=k,n=G(),{toolTraceVisible:N}=W(),{t:O}=U(),a=M(null),i=M(null),t=f(()=>l.session||null),P=f(()=>t.value?.id?`history-${t.value.id}`:"history-empty"),C=f(()=>(t.value?.messages||[]).filter(e=>e.role==="tool"?N.value&&!!e.toolName:!!e.content?.trim()));function m(e=200){return a.value?.isNearBottom(e)??!0}function o(){a.value?.scrollToBottom()}function u(e){a.value?.scrollToMessage(e)}function R(e,s){a.value?.scrollToAnchor(e,s)}function g(e){if(!e)return;const s=a.value?.captureViewportPosition()??null;s&&v.set(e,s)}function h(e){if(t.value?.id!==e)return;if(n.focusMessageId){i.value=null,u(n.focusMessageId);return}const s=v.get(e);if(s){i.value=null,s.wasNearBottom?o():a.value?.restoreViewportPosition(s);return}o(),(t.value?.messages.length||0)>0&&(i.value=null)}async function A(){const e=t.value;if(!e?.hasMoreBefore||e.isLoadingOlderMessages||!l.loadOlder)return;const s=a.value?.captureScrollPosition()??null;await l.loadOlder(e.id)&&(await B(),a.value?.restoreScrollPosition(s))}return r(()=>t.value?.id,async(e,s)=>{g(s),e&&(i.value=e,await B(),h(e))},{immediate:!0}),r(()=>n.focusMessageId,e=>{e&&u(e)}),r(()=>(t.value?.messages||[])[(t.value?.messages||[]).length-1]?.content,e=>{i.value!==t.value?.id&&e&&m()&&o()}),r(()=>(t.value?.messages||[]).length,e=>{if(e===0)return;const s=t.value?.id;if(s&&i.value===s){h(s);return}m()&&o()},{flush:"post"}),D(()=>{g(t.value?.id)}),H({scrollToBottom:o,scrollToMessage:u,scrollToAnchor:R}),(e,s)=>(p(),E(ee,{key:P.value,ref_key:"listRef",ref:a,messages:C.value,onTopReach:A},{empty:_(()=>[c("div",b,[s[0]||(s[0]=c("img",{src:"/logo.png",alt:"QuantHermes",class:"empty-logo"},null,-1)),c("p",null,$(S(O)("chat.emptyState")),1)])]),before:_(()=>[t.value?.hasMoreBefore||t.value?.isLoadingOlderMessages?(p(),T("div",V,[t.value?.isLoadingOlderMessages?(p(),T("span",w)):L("",!0)])):L("",!0)]),item:_(({message:y})=>[F(te,{message:y,highlight:S(n).focusMessageId===y.id},null,8,["message","highlight"])]),_:1},8,["messages"]))}})})),ae=d((()=>{})),ie,me=d((()=>{x(),x(),ae(),Y(),ie=j(I,[["__scopeId","data-v-6ff6e9bf"]])}));export{me as n,ie as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as ie}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as h,$t as a,An as S,Bn as v,Bt as yt,Cn as te,Jn as r,On as W,Qt as g,S as St,Xn as se,Yt as z,an as oe,bn as kt,en as T,et as bt,it as Se,nn as _,on as A,sn as Ct,t as xt,tn as k,wt as I,xn as c,yn as Mt,z as Bt}from"./ui-vendor-DNWaqYj5.js";import{c as At,f as Pt,l as Ht,m as Tt,p as It}from"./vue-vendor-VX6KvV1_.js";import{n as Dt,t as $t}from"./_plugin-vue_export-helper-D4mtpdbl.js";import{B as Lt,F as Ot,I as Vt,Q as Nt,U as zt,V as ke,W as qt,X as Ft,Y as Rt,Z as Et,_ as Jt,z as Ut}from"./index-BHU-82RO.js";import{n as Yt,t as Wt}from"./session-browser-prefs-OR-qaA1z.js";import{n as Kt,t as be}from"./clipboard-1NPxC3YL.js";import{i as Xt,n as Gt,o as Ce,r as xe,s as Qt,t as Zt}from"./OutlinePanel-BSPx9YaI.js";import{n as jt,t as es}from"./HistoryMessageList-B1ORl6-d.js";var Me,Be,Ae,Pe,He,Te,Ie,De,$e,Le,Oe,Ve,Ne,ze,qe,Fe,Re,Ee,Je,Ue,Ye,We,Ke,ae,Ge,Xe=ie((()=>{yt(),Pt(),Jt(),Et(),Rt(),Wt(),xt(),At(),Qt(),Kt(),jt(),Xt(),Gt(),qt(),Me={class:"history-panel"},Be={class:"session-list-header"},Ae={key:0,class:"session-list-title"},Pe={class:"session-list-actions"},He={key:0,class:"session-scope-note"},Te={key:1,class:"session-items"},Ie={key:0,class:"session-loading"},De={key:1,class:"session-empty"},$e={class:"session-group-header session-group-header--static"},Le={class:"session-group-label"},Oe={class:"session-group-count"},Ve=["onClick"],Ne={class:"session-group-label"},ze={class:"session-group-count"},qe={class:"chat-main"},Fe={class:"chat-header"},Re={class:"header-left"},Ee={class:"header-session-title"},Je={key:0,class:"source-badge"},Ue=["title"],Ye={class:"header-actions"},We={class:"history-content-wrapper"},Ke={class:"history-main-content"},ae=300,Ge=Ct({__name:"HistoryView",setup(as){const Qe=Nt(),q=Ft(),D=Yt(),m=Bt(),{t:i}=Ht(),ne=It(),P=Tt(),F=g(()=>{const e=ne.params.sessionId;return typeof e=="string"&&e.trim()?e:null}),L=g(()=>{const e=ne.query.profile;return typeof e=="string"&&e.trim()?e:null}),Ze=g(()=>q.activeProfileName||L.value||null),w=v([]),K=v(!1),R=v(!1),f=v(null),l=v(null),X=v(!1),le=v(null),b=v(!1),y=v(!1),$=v(!1),u=v(new Set),M=v(null),E=v(!1),re=v(0),ue=v(0);let G=0;function je(e){le.value?.scrollToAnchor(e.messageId,e.anchorId)}async function O(){const e=++G;K.value=!0;try{const t=await Lt(void 0,void 0,Ze.value);if(e!==G)return;w.value=t,R.value=!0}catch(t){console.error("Failed to load Hermes sessions:",t)}finally{e===G&&(K.value=!1)}}const C=v(typeof window>"u"||!window.matchMedia("(max-width: 768px)").matches);let V=null;const et=v(!1);function H(e){return w.value.find(t=>t.id===e)}const tt=g(()=>M.value&&H(M.value)||null),st=g(()=>M.value?D.isPinned(M.value):!1),ot=g(()=>[{label:i("chat.importToWebUi"),key:"import-webui",disabled:!!tt.value?.webui_imported},{label:i(st.value?"chat.unpin":"chat.pin"),key:"pin"},{label:i("chat.copySessionLink"),key:"copy-link"},{label:i("chat.copySessionId"),key:"copy-id"}]);function Q(e){return e.map(t=>{const s={id:String(t.id),role:t.role,content:t.content||"",timestamp:t.timestamp*1e3,reasoning:t.reasoning||void 0,systemType:t.role==="command"?"command":void 0};return t.role==="tool"&&(s.toolName=t.tool_name||void 0,s.toolCallId=t.tool_call_id||void 0,s.toolArgs=t.tool_calls?.[0]?.function?.arguments?JSON.stringify(t.tool_calls[0].function.arguments):void 0,s.toolStatus="done",s.toolResult=t.content||void 0,s.content=""),s})}function at(e,t=[]){return{id:e.id,profile:e.profile||void 0,title:e.title||"",source:e.source,createdAt:e.started_at*1e3,updatedAt:(e.last_active||e.ended_at||e.started_at)*1e3,model:e.model,provider:e.provider,messageCount:e.message_count,messageTotal:e.message_count,loadedMessageCount:t.length,hasMoreBefore:!1,inputTokens:e.input_tokens,outputTokens:e.output_tokens,endedAt:e.ended_at?e.ended_at*1e3:void 0,lastActiveAt:e.last_active?e.last_active*1e3:void 0,workspace:e.workspace||void 0,messages:t}}async function it(e,t){const s=H(e),o=t||s?.profile||null,d=await ke(e,0,ae,o);let x=null;if(d)x=at(s||d.session,Q(d.messages)),x.profile=s?.profile||o||void 0,x.messageCount=d.total,x.messageTotal=d.total,x.loadedMessageCount=d.messages.length,x.hasMoreBefore=d.hasMore;else{const n=await Ut(e,o);if(!n){m.error(i("chat.sessionNotFound"));return}x={id:n.id,profile:n.profile||o||void 0,title:n.title||"",source:n.source,createdAt:n.started_at*1e3,updatedAt:(n.last_active||n.started_at)*1e3,model:n.model,provider:n.provider,messageCount:n.message_count,messageTotal:n.message_count,loadedMessageCount:n.messages.length,hasMoreBefore:!1,inputTokens:n.input_tokens,outputTokens:n.output_tokens,endedAt:n.ended_at?n.ended_at*1e3:void 0,lastActiveAt:n.last_active?n.last_active*1e3:void 0,workspace:n.workspace||void 0,messages:Q(n.messages)}}f.value=x.id,l.value=x,V?.matches&&(C.value=!1)}async function nt(e){const t=l.value;if(!t||t.id!==e||t.isLoadingOlderMessages||!t.hasMoreBefore)return!1;const s=t.loadedMessageCount||0;t.isLoadingOlderMessages=!0;try{const o=await ke(e,s,ae,t.profile);if(!o||o.messages.length===0)return t.hasMoreBefore=!1,!1;const d=new Set(t.messages.map(n=>n.id)),x=Q(o.messages).filter(n=>!d.has(n.id));return t.messages=[...x,...t.messages],t.loadedMessageCount=s+o.messages.length,t.messageTotal=o.total,t.messageCount=o.total,t.hasMoreBefore=o.hasMore,x.length>0}catch(o){return console.error("Failed to load older history messages:",o),!1}finally{t.isLoadingOlderMessages=!1}}async function J(e,t){await P.push({name:"hermes.historySession",params:{sessionId:e},query:t?{profile:t}:void 0})}async function Z(e=!1){const t=w.value.find(o=>o.source==="cli")||w.value[0];if(!t){f.value=null,l.value=null,F.value&&await P.replace({name:"hermes.history"});return}p.value.has(t.source)&&(p.value=new Set([...p.value].filter(o=>o!==t.source)));const s={name:"hermes.historySession",params:{sessionId:t.id},query:t.profile?{profile:t.profile}:void 0};e?await P.replace(s):await P.push(s)}async function ce(){const e=F.value;if(!e)return;if(!w.value.some(o=>o.id===e)){f.value=null,l.value=null,await P.replace({name:"hermes.history"});return}const t=L.value||H(e)?.profile||null,s=l.value?.profile||null;(f.value!==e||s!==t)&&(f.value=e,l.value=null,await it(e,t))}function j(e){et.value=e.matches,e.matches&&C.value&&(C.value=!1)}Mt(async()=>{Qe.loadModels(),await q.fetchProfiles(),await O(),await ce(),V=window.matchMedia("(max-width: 768px)"),j(V),V.addEventListener("change",j)}),kt(()=>{V?.removeEventListener("change",j)}),W([F,L],async([e])=>{if(!e){f.value=null,l.value=null;return}R.value&&(L.value&&!w.value.some(t=>t.profile===L.value)&&await O(),await ce())}),W(()=>q.activeProfileName,async()=>{R.value&&(q.switching||(f.value=null,l.value=null,await O(),await Z(!0)))});const p=v(new Set(JSON.parse(localStorage.getItem("hermes_collapsed_groups")||"[]")));function lt(e){return{id:e.id,profile:e.profile||void 0,title:e.title||"",source:e.source,createdAt:e.started_at*1e3,updatedAt:(e.last_active||e.started_at)*1e3,model:e.model,provider:e.provider,messageCount:e.message_count,inputTokens:e.input_tokens,outputTokens:e.output_tokens,endedAt:e.ended_at?e.ended_at*1e3:void 0,lastActiveAt:e.last_active?e.last_active*1e3:void 0,workspace:e.workspace||void 0,messages:[]}}const B=g(()=>w.value.map(lt));function N(e){return`${e.profile||"default"}\0${e.id}`}function de(){y.value||(b.value=!b.value,b.value||(u.value.clear(),$.value=!1))}function U(e){if(y.value)return;const t=N(e);u.value.has(t)?u.value.delete(t):u.value.add(t),u.value=new Set(u.value),u.value.size===0&&($.value=!1)}function ve(e){return u.value.has(N(e))}function rt(){if(!y.value){if(pe.value){u.value.clear(),u.value=new Set(u.value),$.value=!1;return}u.value.clear();for(const e of B.value)u.value.add(N(e));u.value=new Set(u.value)}}const fe=g(()=>u.value.size),ut=g(()=>B.value.length>0),pe=g(()=>B.value.length>0&&u.value.size===B.value.length);function he(e){return e==="api_server"?-1:e==="cron"?999:0}function ge(e){return[...e].sort((t,s)=>(s.updatedAt||0)-(t.updatedAt||0))}const ee=g(()=>ge(B.value.filter(e=>D.isPinned(e.id)))),Y=g(()=>{const e=new Map;for(const t of B.value){if(D.isPinned(t.id))continue;const s=t.source||"";e.has(s)||e.set(s,[]),e.get(s).push(t)}return[...e.keys()].sort((t,s)=>{const o=he(t),d=he(s);return o!==d?o-d:t.localeCompare(s)}).map(t=>({source:t,label:t?Ce(t):i("chat.other"),sessions:ge(e.get(t))}))});function ct(e){if(!p.value.has(e))p.value=new Set([...p.value,e]);else{p.value=new Set(Y.value.map(s=>s.source).filter(s=>s!==e));const t=Y.value.find(s=>s.source===e);t?.sessions.length&&J(t.sessions[0].id,t.sessions[0].profile)}localStorage.setItem("hermes_collapsed_groups",JSON.stringify([...p.value]))}W(Y,e=>{if(localStorage.getItem("hermes_collapsed_groups")!==null){const t=l.value?.source;t&&p.value.has(t)&&(p.value=new Set([...p.value].filter(s=>s!==t)),localStorage.setItem("hermes_collapsed_groups",JSON.stringify([...p.value])));return}e.length>0&&(p.value=new Set(e.slice(1).map(t=>t.source)),localStorage.setItem("hermes_collapsed_groups",JSON.stringify([...p.value])))},{once:!0}),W(R,e=>{e&&w.value.length>0&&!F.value&&Z(!1)},{once:!0});const dt=g(()=>l.value?.title||i("chat.newChat")),_e=g(()=>l.value?.source||"");async function me(e){const t=e||f.value;t&&(await be(t)?m.success(i("common.copied")):m.error(i("common.copied")+" ✗"))}function vt(e){return l.value?.id===e?l.value.profile||null:H(e)?.profile||null}function ft(e,t){const s=P.resolve({name:"hermes.historySession",params:{sessionId:e},query:t?{profile:t}:void 0}).href;return`${window.location.origin}${window.location.pathname}${s}`}async function pt(e){const t=e||f.value;t&&(await be(ft(t,vt(t)))?m.success(i("common.copied")):m.error(i("common.copied")+" ✗"))}function we(e,t){e.preventDefault(),M.value=t,E.value=!0,re.value=e.clientX,ue.value=e.clientY}function ht(){E.value=!1}async function gt(e){const t=H(e);try{const s=await zt(e,t?.profile||null);if(s.ok){m.success(i(s.imported?"chat.importSessionSuccess":"chat.importSessionAlreadyExists")),await O();return}}catch{}m.error(i("chat.importSessionFailed"))}async function _t(e){E.value=!1,M.value&&(e==="pin"?D.togglePinned(M.value):e==="copy-link"?await pt(M.value):e==="copy-id"?await me(M.value):e==="import-webui"&&await gt(M.value))}async function ye(e,t){const s=H(e);if(!await Vt(e,t||s?.profile||null)){m.error(i("common.deleteFailed"));return}if(D.removePinned(e),w.value=w.value.filter(o=>o.id!==e),f.value===e){f.value=null,l.value=null;const o=B.value[0];o?await J(o.id,o.profile):await P.replace({name:"hermes.history"})}m.success(i("chat.sessionDeleted"))}async function mt(){if(u.value.size===0||y.value)return;const e=new Map(B.value.map(o=>[N(o),o])),t=Array.from(u.value).map(o=>e.get(o)).filter(o=>!!o).map(o=>({id:o.id,profile:o.profile||null}));if(t.length===0)return;const s=l.value?u.value.has(N(l.value)):!1;y.value=!0;try{const o=await Ot(t);if(o.deleted>0){for(const d of t)D.removePinned(d.id);await O(),(s||f.value&&!H(f.value))&&(f.value=null,l.value=null,await Z(!0)),m.success(i("chat.batchDeleteSuccess",{count:o.deleted})),o.failed>0&&m.warning(i("chat.batchDeletePartial",{failed:o.failed}))}else m.error(i("chat.batchDeleteFailed"))}catch{m.error(i("chat.batchDeleteFailed"))}finally{y.value=!1,$.value=!1,b.value=!1,u.value.clear()}}function wt(){return mt(),!1}return(e,t)=>(c(),_("div",Me,[a("div",{class:se(["session-backdrop",{active:C.value}]),onClick:t[0]||(t[0]=s=>C.value=!1)},null,2),a("aside",{class:se(["session-list",{collapsed:!C.value}])},[a("div",Be,[C.value?(c(),_("span",Ae,h(r(i)("chat.hermesHistory")),1)):k("",!0),a("div",Pe,[a("button",{class:"session-close-btn",onClick:t[1]||(t[1]=s=>C.value=!1)},[...t[6]||(t[6]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),a("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])]),b.value?k("",!0):(c(),T(r(I),{key:0,quaternary:"",size:"tiny",disabled:w.value.length===0,title:r(i)("chat.toggleBatchMode"),onClick:de},{icon:S(()=>[...t[7]||(t[7]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M9 11l3 3L22 4"}),a("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})],-1)])]),_:1},8,["disabled","title"])),b.value?(c(),T(r(I),{key:1,quaternary:"",size:"tiny",disabled:!ut.value||y.value,title:pe.value?r(i)("common.cancel"):r(i)("chat.selectAll"),onClick:rt},{icon:S(()=>[...t[8]||(t[8]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M9 11l3 3L22 4"}),a("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})],-1)])]),_:1},8,["disabled","title"])):k("",!0),b.value&&fe.value>0?(c(),T(r(St),{key:2,show:$.value,"onUpdate:show":t[2]||(t[2]=s=>$.value=s),"positive-button-props":{loading:y.value,disabled:y.value},"negative-button-props":{disabled:y.value},onPositiveClick:wt},{trigger:S(()=>[A(r(I),{quaternary:"",size:"tiny",type:"error",loading:y.value,disabled:y.value},{icon:S(()=>[...t[9]||(t[9]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("polyline",{points:"3 6 5 6 21 6"}),a("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})],-1)])]),_:1},8,["loading","disabled"])]),default:S(()=>[oe(" "+h(r(i)("chat.confirmBatchDelete",{count:fe.value})),1)]),_:1},8,["show","positive-button-props","negative-button-props"])):k("",!0),b.value?(c(),T(r(I),{key:3,quaternary:"",size:"tiny",disabled:y.value,onClick:de},{icon:S(()=>[...t[10]||(t[10]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),a("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])]),_:1},8,["disabled"])):k("",!0)])]),C.value?(c(),_("div",He,h(r(i)("chat.historyScopeHint")),1)):k("",!0),C.value?(c(),_("div",Te,[K.value&&w.value.length===0?(c(),_("div",Ie,h(r(i)("common.loading")),1)):w.value.length===0?(c(),_("div",De,h(r(i)("chat.noSessions")),1)):k("",!0),ee.value.length>0?(c(),_(z,{key:2},[a("div",$e,[a("span",Le,h(r(i)("chat.pinned")),1),a("span",Oe,h(ee.value.length),1)]),(c(!0),_(z,null,te(ee.value,s=>(c(),T(xe,{key:`pinned-${s.id}`,session:s,active:s.id===f.value,pinned:!0,"can-delete":!0,streaming:!1,selectable:b.value,selected:ve(s),"show-profile":!1,onSelect:o=>b.value?U(s):J(s.id,s.profile),onContextmenu:o=>we(o,s.id),onDelete:o=>ye(s.id,s.profile),onToggleSelect:o=>U(s)},null,8,["session","active","selectable","selected","onSelect","onContextmenu","onDelete","onToggleSelect"]))),128))],64)):k("",!0),(c(!0),_(z,null,te(Y.value,s=>(c(),_(z,{key:s.source},[a("div",{class:"session-group-header",onClick:o=>ct(s.source)},[(c(),_("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",class:se(["group-chevron",{collapsed:p.value.has(s.source)}])},[...t[11]||(t[11]=[a("polyline",{points:"9 18 15 12 9 6"},null,-1)])],2)),a("span",Ne,h(s.label),1),a("span",ze,h(s.sessions.length),1)],8,Ve),p.value.has(s.source)?k("",!0):(c(!0),_(z,{key:0},te(s.sessions,o=>(c(),T(xe,{key:o.id,session:o,active:o.id===f.value,pinned:!1,"can-delete":!0,streaming:!1,selectable:b.value,selected:ve(o),"show-profile":!1,onSelect:d=>b.value?U(o):J(o.id,o.profile),onContextmenu:d=>we(d,o.id),onDelete:d=>ye(o.id,o.profile),onToggleSelect:d=>U(o)},null,8,["session","active","selectable","selected","onSelect","onContextmenu","onDelete","onToggleSelect"]))),128))],64))),128))])):k("",!0)],2),A(r(bt),{placement:"bottom-start",trigger:"manual",x:re.value,y:ue.value,options:ot.value,show:E.value,onSelect:_t,onClickoutside:ht},null,8,["x","y","options","show"]),a("div",qe,[a("header",Fe,[a("div",Re,[A(r(I),{quaternary:"",size:"small",onClick:t[3]||(t[3]=s=>C.value=!C.value),circle:""},{icon:S(()=>[...t[12]||(t[12]=[a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[a("rect",{x:"3",y:"3",width:"7",height:"7"}),a("rect",{x:"14",y:"3",width:"7",height:"7"}),a("rect",{x:"3",y:"14",width:"7",height:"7"}),a("rect",{x:"14",y:"14",width:"7",height:"7"})],-1)])]),_:1}),a("span",Ee,h(dt.value),1),_e.value?(c(),_("span",Je,h(r(Ce)(_e.value)),1)):k("",!0),l.value?.workspace?(c(),_("span",{key:1,class:"workspace-badge",title:l.value.workspace},"📁 "+h(l.value.workspace.split("/").pop()||l.value.workspace),9,Ue)):k("",!0)]),a("div",Ye,[A(r(Se),{trigger:"hover"},{trigger:S(()=>[A(r(I),{quaternary:"",size:"small",onClick:t[4]||(t[4]=s=>X.value=!X.value),circle:""},{icon:S(()=>[...t[13]||(t[13]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[a("path",{d:"M3 12h18M3 6h18M3 18h18"})],-1)])]),_:1})]),default:S(()=>[oe(" "+h(r(i)("chat.outlineTitle")),1)]),_:1}),A(r(Se),{trigger:"hover"},{trigger:S(()=>[A(r(I),{quaternary:"",size:"small",onClick:t[5]||(t[5]=s=>me()),circle:""},{icon:S(()=>[...t[14]||(t[14]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[a("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),a("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})],-1)])]),_:1})]),default:S(()=>[oe(" "+h(r(i)("chat.copySessionId")),1)]),_:1})])]),a("div",We,[a("div",Ke,[A(es,{ref_key:"historyMessageListRef",ref:le,session:l.value,"load-older":nt},null,8,["session"])]),X.value&&l.value?(c(),T(Zt,{key:0,messages:l.value.messages||[],onNavigate:je},null,8,["messages"])):k("",!0)])])]))}})})),ts=ie((()=>{})),ss,os=ie((()=>{Xe(),Xe(),ts(),Dt(),ss=$t(Ge,[["__scopeId","data-v-eecab1cf"]])}));os();export{ss as default};
|
|
1
|
+
import{n as ie}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as h,$t as a,An as S,Bn as v,Bt as yt,Cn as te,Jn as r,On as W,Qt as g,S as St,Xn as se,Yt as z,an as oe,bn as kt,en as T,et as bt,it as Se,nn as _,on as A,sn as Ct,t as xt,tn as k,wt as I,xn as c,yn as Mt,z as Bt}from"./ui-vendor-DNWaqYj5.js";import{c as At,f as Pt,l as Ht,m as Tt,p as It}from"./vue-vendor-VX6KvV1_.js";import{n as Dt,t as $t}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{B as Lt,F as Ot,I as Vt,Q as Nt,U as zt,V as ke,W as qt,X as Ft,Y as Rt,Z as Et,_ as Jt,z as Ut}from"./index-DyLZQAQu.js";import{n as Yt,t as Wt}from"./session-browser-prefs-kGpZZDQo.js";import{n as Kt,t as be}from"./clipboard-1NPxC3YL.js";import{i as Xt,n as Gt,o as Ce,r as xe,s as Qt,t as Zt}from"./OutlinePanel-CN0TVZ0B.js";import{n as jt,t as es}from"./HistoryMessageList-B3TsU-9g.js";var Me,Be,Ae,Pe,He,Te,Ie,De,$e,Le,Oe,Ve,Ne,ze,qe,Fe,Re,Ee,Je,Ue,Ye,We,Ke,ae,Ge,Xe=ie((()=>{yt(),Pt(),Jt(),Et(),Rt(),Wt(),xt(),At(),Qt(),Kt(),jt(),Xt(),Gt(),qt(),Me={class:"history-panel"},Be={class:"session-list-header"},Ae={key:0,class:"session-list-title"},Pe={class:"session-list-actions"},He={key:0,class:"session-scope-note"},Te={key:1,class:"session-items"},Ie={key:0,class:"session-loading"},De={key:1,class:"session-empty"},$e={class:"session-group-header session-group-header--static"},Le={class:"session-group-label"},Oe={class:"session-group-count"},Ve=["onClick"],Ne={class:"session-group-label"},ze={class:"session-group-count"},qe={class:"chat-main"},Fe={class:"chat-header"},Re={class:"header-left"},Ee={class:"header-session-title"},Je={key:0,class:"source-badge"},Ue=["title"],Ye={class:"header-actions"},We={class:"history-content-wrapper"},Ke={class:"history-main-content"},ae=300,Ge=Ct({__name:"HistoryView",setup(as){const Qe=Nt(),q=Ft(),D=Yt(),m=Bt(),{t:i}=Ht(),ne=It(),P=Tt(),F=g(()=>{const e=ne.params.sessionId;return typeof e=="string"&&e.trim()?e:null}),L=g(()=>{const e=ne.query.profile;return typeof e=="string"&&e.trim()?e:null}),Ze=g(()=>q.activeProfileName||L.value||null),w=v([]),K=v(!1),R=v(!1),f=v(null),l=v(null),X=v(!1),le=v(null),b=v(!1),y=v(!1),$=v(!1),u=v(new Set),M=v(null),E=v(!1),re=v(0),ue=v(0);let G=0;function je(e){le.value?.scrollToAnchor(e.messageId,e.anchorId)}async function O(){const e=++G;K.value=!0;try{const t=await Lt(void 0,void 0,Ze.value);if(e!==G)return;w.value=t,R.value=!0}catch(t){console.error("Failed to load Hermes sessions:",t)}finally{e===G&&(K.value=!1)}}const C=v(typeof window>"u"||!window.matchMedia("(max-width: 768px)").matches);let V=null;const et=v(!1);function H(e){return w.value.find(t=>t.id===e)}const tt=g(()=>M.value&&H(M.value)||null),st=g(()=>M.value?D.isPinned(M.value):!1),ot=g(()=>[{label:i("chat.importToWebUi"),key:"import-webui",disabled:!!tt.value?.webui_imported},{label:i(st.value?"chat.unpin":"chat.pin"),key:"pin"},{label:i("chat.copySessionLink"),key:"copy-link"},{label:i("chat.copySessionId"),key:"copy-id"}]);function Q(e){return e.map(t=>{const s={id:String(t.id),role:t.role,content:t.content||"",timestamp:t.timestamp*1e3,reasoning:t.reasoning||void 0,systemType:t.role==="command"?"command":void 0};return t.role==="tool"&&(s.toolName=t.tool_name||void 0,s.toolCallId=t.tool_call_id||void 0,s.toolArgs=t.tool_calls?.[0]?.function?.arguments?JSON.stringify(t.tool_calls[0].function.arguments):void 0,s.toolStatus="done",s.toolResult=t.content||void 0,s.content=""),s})}function at(e,t=[]){return{id:e.id,profile:e.profile||void 0,title:e.title||"",source:e.source,createdAt:e.started_at*1e3,updatedAt:(e.last_active||e.ended_at||e.started_at)*1e3,model:e.model,provider:e.provider,messageCount:e.message_count,messageTotal:e.message_count,loadedMessageCount:t.length,hasMoreBefore:!1,inputTokens:e.input_tokens,outputTokens:e.output_tokens,endedAt:e.ended_at?e.ended_at*1e3:void 0,lastActiveAt:e.last_active?e.last_active*1e3:void 0,workspace:e.workspace||void 0,messages:t}}async function it(e,t){const s=H(e),o=t||s?.profile||null,d=await ke(e,0,ae,o);let x=null;if(d)x=at(s||d.session,Q(d.messages)),x.profile=s?.profile||o||void 0,x.messageCount=d.total,x.messageTotal=d.total,x.loadedMessageCount=d.messages.length,x.hasMoreBefore=d.hasMore;else{const n=await Ut(e,o);if(!n){m.error(i("chat.sessionNotFound"));return}x={id:n.id,profile:n.profile||o||void 0,title:n.title||"",source:n.source,createdAt:n.started_at*1e3,updatedAt:(n.last_active||n.started_at)*1e3,model:n.model,provider:n.provider,messageCount:n.message_count,messageTotal:n.message_count,loadedMessageCount:n.messages.length,hasMoreBefore:!1,inputTokens:n.input_tokens,outputTokens:n.output_tokens,endedAt:n.ended_at?n.ended_at*1e3:void 0,lastActiveAt:n.last_active?n.last_active*1e3:void 0,workspace:n.workspace||void 0,messages:Q(n.messages)}}f.value=x.id,l.value=x,V?.matches&&(C.value=!1)}async function nt(e){const t=l.value;if(!t||t.id!==e||t.isLoadingOlderMessages||!t.hasMoreBefore)return!1;const s=t.loadedMessageCount||0;t.isLoadingOlderMessages=!0;try{const o=await ke(e,s,ae,t.profile);if(!o||o.messages.length===0)return t.hasMoreBefore=!1,!1;const d=new Set(t.messages.map(n=>n.id)),x=Q(o.messages).filter(n=>!d.has(n.id));return t.messages=[...x,...t.messages],t.loadedMessageCount=s+o.messages.length,t.messageTotal=o.total,t.messageCount=o.total,t.hasMoreBefore=o.hasMore,x.length>0}catch(o){return console.error("Failed to load older history messages:",o),!1}finally{t.isLoadingOlderMessages=!1}}async function J(e,t){await P.push({name:"hermes.historySession",params:{sessionId:e},query:t?{profile:t}:void 0})}async function Z(e=!1){const t=w.value.find(o=>o.source==="cli")||w.value[0];if(!t){f.value=null,l.value=null,F.value&&await P.replace({name:"hermes.history"});return}p.value.has(t.source)&&(p.value=new Set([...p.value].filter(o=>o!==t.source)));const s={name:"hermes.historySession",params:{sessionId:t.id},query:t.profile?{profile:t.profile}:void 0};e?await P.replace(s):await P.push(s)}async function ce(){const e=F.value;if(!e)return;if(!w.value.some(o=>o.id===e)){f.value=null,l.value=null,await P.replace({name:"hermes.history"});return}const t=L.value||H(e)?.profile||null,s=l.value?.profile||null;(f.value!==e||s!==t)&&(f.value=e,l.value=null,await it(e,t))}function j(e){et.value=e.matches,e.matches&&C.value&&(C.value=!1)}Mt(async()=>{Qe.loadModels(),await q.fetchProfiles(),await O(),await ce(),V=window.matchMedia("(max-width: 768px)"),j(V),V.addEventListener("change",j)}),kt(()=>{V?.removeEventListener("change",j)}),W([F,L],async([e])=>{if(!e){f.value=null,l.value=null;return}R.value&&(L.value&&!w.value.some(t=>t.profile===L.value)&&await O(),await ce())}),W(()=>q.activeProfileName,async()=>{R.value&&(q.switching||(f.value=null,l.value=null,await O(),await Z(!0)))});const p=v(new Set(JSON.parse(localStorage.getItem("hermes_collapsed_groups")||"[]")));function lt(e){return{id:e.id,profile:e.profile||void 0,title:e.title||"",source:e.source,createdAt:e.started_at*1e3,updatedAt:(e.last_active||e.started_at)*1e3,model:e.model,provider:e.provider,messageCount:e.message_count,inputTokens:e.input_tokens,outputTokens:e.output_tokens,endedAt:e.ended_at?e.ended_at*1e3:void 0,lastActiveAt:e.last_active?e.last_active*1e3:void 0,workspace:e.workspace||void 0,messages:[]}}const B=g(()=>w.value.map(lt));function N(e){return`${e.profile||"default"}\0${e.id}`}function de(){y.value||(b.value=!b.value,b.value||(u.value.clear(),$.value=!1))}function U(e){if(y.value)return;const t=N(e);u.value.has(t)?u.value.delete(t):u.value.add(t),u.value=new Set(u.value),u.value.size===0&&($.value=!1)}function ve(e){return u.value.has(N(e))}function rt(){if(!y.value){if(pe.value){u.value.clear(),u.value=new Set(u.value),$.value=!1;return}u.value.clear();for(const e of B.value)u.value.add(N(e));u.value=new Set(u.value)}}const fe=g(()=>u.value.size),ut=g(()=>B.value.length>0),pe=g(()=>B.value.length>0&&u.value.size===B.value.length);function he(e){return e==="api_server"?-1:e==="cron"?999:0}function ge(e){return[...e].sort((t,s)=>(s.updatedAt||0)-(t.updatedAt||0))}const ee=g(()=>ge(B.value.filter(e=>D.isPinned(e.id)))),Y=g(()=>{const e=new Map;for(const t of B.value){if(D.isPinned(t.id))continue;const s=t.source||"";e.has(s)||e.set(s,[]),e.get(s).push(t)}return[...e.keys()].sort((t,s)=>{const o=he(t),d=he(s);return o!==d?o-d:t.localeCompare(s)}).map(t=>({source:t,label:t?Ce(t):i("chat.other"),sessions:ge(e.get(t))}))});function ct(e){if(!p.value.has(e))p.value=new Set([...p.value,e]);else{p.value=new Set(Y.value.map(s=>s.source).filter(s=>s!==e));const t=Y.value.find(s=>s.source===e);t?.sessions.length&&J(t.sessions[0].id,t.sessions[0].profile)}localStorage.setItem("hermes_collapsed_groups",JSON.stringify([...p.value]))}W(Y,e=>{if(localStorage.getItem("hermes_collapsed_groups")!==null){const t=l.value?.source;t&&p.value.has(t)&&(p.value=new Set([...p.value].filter(s=>s!==t)),localStorage.setItem("hermes_collapsed_groups",JSON.stringify([...p.value])));return}e.length>0&&(p.value=new Set(e.slice(1).map(t=>t.source)),localStorage.setItem("hermes_collapsed_groups",JSON.stringify([...p.value])))},{once:!0}),W(R,e=>{e&&w.value.length>0&&!F.value&&Z(!1)},{once:!0});const dt=g(()=>l.value?.title||i("chat.newChat")),_e=g(()=>l.value?.source||"");async function me(e){const t=e||f.value;t&&(await be(t)?m.success(i("common.copied")):m.error(i("common.copied")+" ✗"))}function vt(e){return l.value?.id===e?l.value.profile||null:H(e)?.profile||null}function ft(e,t){const s=P.resolve({name:"hermes.historySession",params:{sessionId:e},query:t?{profile:t}:void 0}).href;return`${window.location.origin}${window.location.pathname}${s}`}async function pt(e){const t=e||f.value;t&&(await be(ft(t,vt(t)))?m.success(i("common.copied")):m.error(i("common.copied")+" ✗"))}function we(e,t){e.preventDefault(),M.value=t,E.value=!0,re.value=e.clientX,ue.value=e.clientY}function ht(){E.value=!1}async function gt(e){const t=H(e);try{const s=await zt(e,t?.profile||null);if(s.ok){m.success(i(s.imported?"chat.importSessionSuccess":"chat.importSessionAlreadyExists")),await O();return}}catch{}m.error(i("chat.importSessionFailed"))}async function _t(e){E.value=!1,M.value&&(e==="pin"?D.togglePinned(M.value):e==="copy-link"?await pt(M.value):e==="copy-id"?await me(M.value):e==="import-webui"&&await gt(M.value))}async function ye(e,t){const s=H(e);if(!await Vt(e,t||s?.profile||null)){m.error(i("common.deleteFailed"));return}if(D.removePinned(e),w.value=w.value.filter(o=>o.id!==e),f.value===e){f.value=null,l.value=null;const o=B.value[0];o?await J(o.id,o.profile):await P.replace({name:"hermes.history"})}m.success(i("chat.sessionDeleted"))}async function mt(){if(u.value.size===0||y.value)return;const e=new Map(B.value.map(o=>[N(o),o])),t=Array.from(u.value).map(o=>e.get(o)).filter(o=>!!o).map(o=>({id:o.id,profile:o.profile||null}));if(t.length===0)return;const s=l.value?u.value.has(N(l.value)):!1;y.value=!0;try{const o=await Ot(t);if(o.deleted>0){for(const d of t)D.removePinned(d.id);await O(),(s||f.value&&!H(f.value))&&(f.value=null,l.value=null,await Z(!0)),m.success(i("chat.batchDeleteSuccess",{count:o.deleted})),o.failed>0&&m.warning(i("chat.batchDeletePartial",{failed:o.failed}))}else m.error(i("chat.batchDeleteFailed"))}catch{m.error(i("chat.batchDeleteFailed"))}finally{y.value=!1,$.value=!1,b.value=!1,u.value.clear()}}function wt(){return mt(),!1}return(e,t)=>(c(),_("div",Me,[a("div",{class:se(["session-backdrop",{active:C.value}]),onClick:t[0]||(t[0]=s=>C.value=!1)},null,2),a("aside",{class:se(["session-list",{collapsed:!C.value}])},[a("div",Be,[C.value?(c(),_("span",Ae,h(r(i)("chat.hermesHistory")),1)):k("",!0),a("div",Pe,[a("button",{class:"session-close-btn",onClick:t[1]||(t[1]=s=>C.value=!1)},[...t[6]||(t[6]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),a("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])]),b.value?k("",!0):(c(),T(r(I),{key:0,quaternary:"",size:"tiny",disabled:w.value.length===0,title:r(i)("chat.toggleBatchMode"),onClick:de},{icon:S(()=>[...t[7]||(t[7]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M9 11l3 3L22 4"}),a("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})],-1)])]),_:1},8,["disabled","title"])),b.value?(c(),T(r(I),{key:1,quaternary:"",size:"tiny",disabled:!ut.value||y.value,title:pe.value?r(i)("common.cancel"):r(i)("chat.selectAll"),onClick:rt},{icon:S(()=>[...t[8]||(t[8]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("path",{d:"M9 11l3 3L22 4"}),a("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})],-1)])]),_:1},8,["disabled","title"])):k("",!0),b.value&&fe.value>0?(c(),T(r(St),{key:2,show:$.value,"onUpdate:show":t[2]||(t[2]=s=>$.value=s),"positive-button-props":{loading:y.value,disabled:y.value},"negative-button-props":{disabled:y.value},onPositiveClick:wt},{trigger:S(()=>[A(r(I),{quaternary:"",size:"tiny",type:"error",loading:y.value,disabled:y.value},{icon:S(()=>[...t[9]||(t[9]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("polyline",{points:"3 6 5 6 21 6"}),a("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})],-1)])]),_:1},8,["loading","disabled"])]),default:S(()=>[oe(" "+h(r(i)("chat.confirmBatchDelete",{count:fe.value})),1)]),_:1},8,["show","positive-button-props","negative-button-props"])):k("",!0),b.value?(c(),T(r(I),{key:3,quaternary:"",size:"tiny",disabled:y.value,onClick:de},{icon:S(()=>[...t[10]||(t[10]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[a("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),a("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])]),_:1},8,["disabled"])):k("",!0)])]),C.value?(c(),_("div",He,h(r(i)("chat.historyScopeHint")),1)):k("",!0),C.value?(c(),_("div",Te,[K.value&&w.value.length===0?(c(),_("div",Ie,h(r(i)("common.loading")),1)):w.value.length===0?(c(),_("div",De,h(r(i)("chat.noSessions")),1)):k("",!0),ee.value.length>0?(c(),_(z,{key:2},[a("div",$e,[a("span",Le,h(r(i)("chat.pinned")),1),a("span",Oe,h(ee.value.length),1)]),(c(!0),_(z,null,te(ee.value,s=>(c(),T(xe,{key:`pinned-${s.id}`,session:s,active:s.id===f.value,pinned:!0,"can-delete":!0,streaming:!1,selectable:b.value,selected:ve(s),"show-profile":!1,onSelect:o=>b.value?U(s):J(s.id,s.profile),onContextmenu:o=>we(o,s.id),onDelete:o=>ye(s.id,s.profile),onToggleSelect:o=>U(s)},null,8,["session","active","selectable","selected","onSelect","onContextmenu","onDelete","onToggleSelect"]))),128))],64)):k("",!0),(c(!0),_(z,null,te(Y.value,s=>(c(),_(z,{key:s.source},[a("div",{class:"session-group-header",onClick:o=>ct(s.source)},[(c(),_("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",class:se(["group-chevron",{collapsed:p.value.has(s.source)}])},[...t[11]||(t[11]=[a("polyline",{points:"9 18 15 12 9 6"},null,-1)])],2)),a("span",Ne,h(s.label),1),a("span",ze,h(s.sessions.length),1)],8,Ve),p.value.has(s.source)?k("",!0):(c(!0),_(z,{key:0},te(s.sessions,o=>(c(),T(xe,{key:o.id,session:o,active:o.id===f.value,pinned:!1,"can-delete":!0,streaming:!1,selectable:b.value,selected:ve(o),"show-profile":!1,onSelect:d=>b.value?U(o):J(o.id,o.profile),onContextmenu:d=>we(d,o.id),onDelete:d=>ye(o.id,o.profile),onToggleSelect:d=>U(o)},null,8,["session","active","selectable","selected","onSelect","onContextmenu","onDelete","onToggleSelect"]))),128))],64))),128))])):k("",!0)],2),A(r(bt),{placement:"bottom-start",trigger:"manual",x:re.value,y:ue.value,options:ot.value,show:E.value,onSelect:_t,onClickoutside:ht},null,8,["x","y","options","show"]),a("div",qe,[a("header",Fe,[a("div",Re,[A(r(I),{quaternary:"",size:"small",onClick:t[3]||(t[3]=s=>C.value=!C.value),circle:""},{icon:S(()=>[...t[12]||(t[12]=[a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[a("rect",{x:"3",y:"3",width:"7",height:"7"}),a("rect",{x:"14",y:"3",width:"7",height:"7"}),a("rect",{x:"3",y:"14",width:"7",height:"7"}),a("rect",{x:"14",y:"14",width:"7",height:"7"})],-1)])]),_:1}),a("span",Ee,h(dt.value),1),_e.value?(c(),_("span",Je,h(r(Ce)(_e.value)),1)):k("",!0),l.value?.workspace?(c(),_("span",{key:1,class:"workspace-badge",title:l.value.workspace},"📁 "+h(l.value.workspace.split("/").pop()||l.value.workspace),9,Ue)):k("",!0)]),a("div",Ye,[A(r(Se),{trigger:"hover"},{trigger:S(()=>[A(r(I),{quaternary:"",size:"small",onClick:t[4]||(t[4]=s=>X.value=!X.value),circle:""},{icon:S(()=>[...t[13]||(t[13]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[a("path",{d:"M3 12h18M3 6h18M3 18h18"})],-1)])]),_:1})]),default:S(()=>[oe(" "+h(r(i)("chat.outlineTitle")),1)]),_:1}),A(r(Se),{trigger:"hover"},{trigger:S(()=>[A(r(I),{quaternary:"",size:"small",onClick:t[5]||(t[5]=s=>me()),circle:""},{icon:S(()=>[...t[14]||(t[14]=[a("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[a("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),a("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})],-1)])]),_:1})]),default:S(()=>[oe(" "+h(r(i)("chat.copySessionId")),1)]),_:1})])]),a("div",We,[a("div",Ke,[A(es,{ref_key:"historyMessageListRef",ref:le,session:l.value,"load-older":nt},null,8,["session"])]),X.value&&l.value?(c(),T(Zt,{key:0,messages:l.value.messages||[],onNavigate:je},null,8,["messages"])):k("",!0)])])]))}})})),ts=ie((()=>{})),ss,os=ie((()=>{Xe(),Xe(),ts(),Dt(),ss=$t(Ge,[["__scopeId","data-v-eecab1cf"]])}));os();export{ss as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as w}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as d,$t as i,An as _,At as G,Bn as S,Bt as D,Cn as We,E as q,Jn as a,Jt as V,O as rt,On as ut,Qt as R,Rt as dt,W as ct,Xn as Z,Yt as B,an as k,en as M,ft as se,g as te,gt as bt,in as _t,it as ee,nn as C,on as y,sn as O,t as Y,tn as E,vt,w as pt,wt as T,xn as h,yn as Ke,z as Qe}from"./ui-vendor-DNWaqYj5.js";import{_ as ft,c as H,g as mt,l as A}from"./vue-vendor-VX6KvV1_.js";import{d as N,l as Ye,n as L,t as W}from"./_plugin-vue_export-helper-D4mtpdbl.js";import{C as yt,S as jt,X as ht,Y as gt}from"./index-BHU-82RO.js";import{n as wt,t as Jt}from"./MarkdownRenderer-D-IgakCO.js";function U(e){return e.job}function Xe(e){return typeof e=="object"&&e!==null}function Q(e,o=""){if(typeof e=="string")return e;if(!Xe(e))return o;if(e.kind==="cron")return e.expr||e.display||o;if(e.kind==="once")return e.run_at||e.display||o;if(e.kind==="interval")return e.display||(typeof e.minutes=="number"?`every ${e.minutes}m`:o);const t=e;return t.expr||t.run_at||t.display||o}function xt(e,o="—"){if(typeof e=="string")return e;if(!Xe(e))return o;if(e.kind==="cron")return e.expr||e.display||o;if(e.kind==="interval"||e.kind==="once")return e.display||Q(e,o);const t=e;return t.display||t.expr||t.run_at||o}function Ge(e){return e&&typeof e=="object"?e.times??null:null}function kt(e,o){const t={},j=Q(e.schedule,e.schedule_display||""),n=Ge(e.repeat),p=e.deliver||"origin";return o.name!==e.name&&(t.name=o.name),o.schedule!==j&&(t.schedule=o.schedule),o.prompt!==(e.prompt||"")&&(t.prompt=o.prompt),o.deliver!==p&&(t.deliver=o.deliver),o.repeat_times!==n&&(t.repeat=o.repeat_times),t}async function $t(){return(await N("/api/hermes/jobs?include_disabled=true")).jobs}async function Ct(e){return U(await N(`/api/hermes/jobs/${e}`))}async function St(e){return U(await N("/api/hermes/jobs",{method:"POST",body:JSON.stringify(e)}))}async function It(e,o){return U(await N(`/api/hermes/jobs/${e}`,{method:"PATCH",body:JSON.stringify(o)}))}async function Pt(e){return N(`/api/hermes/jobs/${e}`,{method:"DELETE"})}async function Mt(e){return U(await N(`/api/hermes/jobs/${e}/pause`,{method:"POST"}))}async function Rt(e){return U(await N(`/api/hermes/jobs/${e}/resume`,{method:"POST"}))}async function Nt(e){return U(await N(`/api/hermes/jobs/${e}/run`,{method:"POST"}))}var ae=w((()=>{Ye()}));function z(e,o){return e.job_id===o||e.id===o}var K,X=w((()=>{ft(),D(),ae(),K=mt("jobs",()=>{const e=S([]),o=S(!1);async function t(){o.value=!0;try{e.value=await $t()}catch(c){console.error("Failed to fetch jobs:",c)}finally{o.value=!1}}async function j(c){const s=await St(c);return e.value.unshift(s),s}async function n(c,s){const g=await It(c,s),r=e.value.findIndex(P=>z(P,c));return r!==-1&&(e.value[r]=g),g}async function p(c){await Pt(c),e.value=e.value.filter(s=>!z(s,c))}async function v(c){const s=await Mt(c),g=e.value.findIndex(r=>z(r,c));g!==-1&&(e.value[g]=s)}async function f(c){const s=await Rt(c),g=e.value.findIndex(r=>z(r,c));g!==-1&&(e.value[g]=s)}async function $(c){const s=await Nt(c),g=e.value.findIndex(r=>z(r,c));g!==-1&&(e.value[g]=s)}return{jobs:e,loading:o,fetchJobs:t,createJob:j,updateJob:n,deleteJob:p,pauseJob:v,resumeJob:f,runJob:$}})})),ne,le,ie,re,ue,de,ce,be,_e,ve,pe,fe,me,ye,je,he,ge,we,Je,xe,ke,$e,Ze,Ce=w((()=>{D(),Y(),ae(),X(),H(),ne={class:"card-header"},le={class:"job-name"},ie={class:"card-body"},re={class:"info-row"},ue={class:"info-label"},de={class:"info-value mono"},ce={class:"info-row"},be={class:"info-label"},_e={class:"info-value mono"},ve={class:"info-row"},pe={class:"info-label"},fe={class:"info-value"},me={class:"info-row"},ye={class:"info-label"},je={class:"info-value"},he={class:"info-row"},ge={class:"info-label"},we={class:"info-value"},Je={key:0,class:"info-row"},xe={class:"info-label"},ke={class:"info-value"},$e={class:"card-actions"},Ze=O({__name:"JobCard",props:{job:{},selected:{type:Boolean}},emits:["edit","select"],setup(e,{emit:o}){const t=e,j=o,{t:n}=A(),p=K(),v=Qe(),f=R(()=>t.job.job_id||t.job.id),$=R(()=>t.job.state==="running"?n("jobs.status.running"):t.job.state==="paused"?n("jobs.status.paused"):t.job.enabled?n("jobs.status.scheduled"):n("jobs.status.disabled")),c=R(()=>t.job.state==="running"?"info":t.job.state==="paused"?"warning":t.job.enabled?"success":"error"),s=R(()=>xt(t.job.schedule,t.job.schedule_display||"—")),g=b=>b?new Date(b).toLocaleString():"—";async function r(){try{await p.pauseJob(f.value),v.success(n("jobs.jobPaused"))}catch(b){v.error(b.message)}}async function P(){try{await p.resumeJob(f.value),v.success(n("jobs.jobResumed"))}catch(b){v.error(b.message)}}async function u(){try{await p.runJob(f.value),v.info(n("jobs.jobTriggered"))}catch(b){v.error(b.message)}}async function I(){try{await p.deleteJob(f.value),v.success(n("jobs.jobDeleted"))}catch(b){v.error(b.message)}}function J(b){b.target.closest(".card-actions")||j("select",f.value)}return(b,F)=>(h(),C("div",{class:Z(["job-card",{selected:e.selected}]),onClick:J},[i("div",ne,[i("h3",le,d(e.job.name),1),i("span",{class:Z(["status-badge",c.value])},d($.value),3)]),i("div",ie,[i("div",re,[i("span",ue,d(a(n)("jobs.info.schedule")),1),i("code",de,d(s.value),1)]),i("div",ce,[i("span",be,d(a(n)("jobs.info.model")),1),i("span",_e,d(e.job.model||"—"),1)]),i("div",ve,[i("span",pe,d(a(n)("jobs.info.lastRun")),1),i("span",fe,[k(d(g(e.job.last_run_at))+" ",1),e.job.last_status?(h(),C("span",{key:0,class:Z(["run-status",{ok:e.job.last_status==="ok",err:e.job.last_status!=="ok"}])},d(e.job.last_status==="ok"?a(n)("common.ok"):e.job.last_status),3)):E("",!0)])]),i("div",me,[i("span",ye,d(a(n)("jobs.info.nextRun")),1),i("span",je,d(g(e.job.next_run_at)),1)]),i("div",he,[i("span",ge,d(a(n)("jobs.info.deliver")),1),i("span",we,[k(d(e.job.deliver),1),e.job.origin?(h(),C(B,{key:0},[k(" ("+d(e.job.origin.platform)+")",1)],64)):E("",!0)])]),e.job.repeat?(h(),C("div",Je,[i("span",xe,d(a(n)("jobs.info.repeat")),1),i("span",ke,[typeof e.job.repeat=="string"?(h(),C(B,{key:0},[k(d(e.job.repeat),1)],64)):(h(),C(B,{key:1},[k(d(e.job.repeat.completed)+" / "+d(e.job.repeat.times??"∞"),1)],64))])])):E("",!0)]),i("div",$e,[e.job.state!=="paused"&&e.job.enabled?(h(),M(a(ee),{key:0},{trigger:_(()=>[y(a(T),{size:"tiny",quaternary:"",onClick:V(r,["stop"])},{default:_(()=>[k(d(a(n)("jobs.action.pause")),1)]),_:1})]),default:_(()=>[k(" "+d(a(n)("jobs.action.pauseJob")),1)]),_:1})):e.job.state==="paused"?(h(),M(a(ee),{key:1},{trigger:_(()=>[y(a(T),{size:"tiny",quaternary:"",onClick:V(P,["stop"])},{default:_(()=>[k(d(a(n)("jobs.action.resume")),1)]),_:1})]),default:_(()=>[k(" "+d(a(n)("jobs.action.resumeJob")),1)]),_:1})):E("",!0),y(a(ee),null,{trigger:_(()=>[y(a(T),{size:"tiny",quaternary:"",onClick:V(u,["stop"])},{default:_(()=>[k(d(a(n)("jobs.action.runNow")),1)]),_:1})]),default:_(()=>[k(" "+d(a(n)("jobs.action.triggerImmediately")),1)]),_:1}),y(a(T),{size:"tiny",quaternary:"",onClick:F[0]||(F[0]=V(oe=>j("edit",f.value),["stop"]))},{default:_(()=>[k(d(a(n)("common.edit")),1)]),_:1}),y(a(T),{size:"tiny",quaternary:"",type:"error",onClick:V(I,["stop"])},{default:_(()=>[k(d(a(n)("common.delete")),1)]),_:1})])],2))}})})),Tt=w((()=>{})),et,Et=w((()=>{Ce(),Ce(),Tt(),L(),et=W(Ze,[["__scopeId","data-v-54aca7fb"]])})),Se,Ie,tt,Pe=w((()=>{D(),Et(),X(),H(),Se={key:0,class:"empty-state"},Ie={key:1,class:"jobs-grid"},tt=O({__name:"JobsPanel",props:{selectedJobId:{}},emits:["edit","select"],setup(e,{emit:o}){const t=e,j=o,{t:n}=A(),p=K();function v($){j("select",t.selectedJobId===$?null:$)}function f(){t.selectedJobId&&j("select",null)}return($,c)=>(h(),C(B,null,[a(p).jobs.length===0?(h(),C("div",Se,[c[0]||(c[0]=_t('<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" class="empty-icon" data-v-bfc747c9><rect x="3" y="4" width="18" height="18" rx="2" ry="2" data-v-bfc747c9></rect><line x1="16" y1="2" x2="16" y2="6" data-v-bfc747c9></line><line x1="8" y1="2" x2="8" y2="6" data-v-bfc747c9></line><line x1="3" y1="10" x2="21" y2="10" data-v-bfc747c9></line></svg>',1)),i("p",null,d(a(n)("jobs.noJobs")),1)])):(h(),C("div",Ie,[(h(!0),C(B,null,We(a(p).jobs,s=>(h(),M(et,{key:s.id,job:s,selected:e.selectedJobId===(s.job_id||s.id),onEdit:g=>j("edit",s.id),onSelect:v},null,8,["job","selected","onEdit"]))),128))])),e.selectedJobId?(h(),C("div",{key:2,class:"deselect-overlay",onClick:f})):E("",!0)],64))}})})),Ft=w((()=>{})),at,qt=w((()=>{Pe(),Pe(),Ft(),L(),at=W(tt,[["__scopeId","data-v-bfc747c9"]])}));async function Bt(e){const o=new URLSearchParams;e&&o.set("jobId",e);const t=o.toString();return(await N(`/api/cron-history${t?`?${t}`:""}`)).runs}async function Dt(e,o){return N(`/api/cron-history/${encodeURIComponent(e)}/${encodeURIComponent(o)}`)}var Ut=w((()=>{Ye()})),Me,Re,Ne,Te,Ee,Fe,ot,qe=w((()=>{D(),Y(),H(),Ut(),wt(),Me={class:"run-history"},Re={class:"history-header"},Ne={class:"history-title"},Te={class:"history-count"},Ee={class:"history-body"},Fe={class:"run-meta"},ot=O({__name:"JobRunHistory",props:{selectedJobId:{},jobNameMap:{},profileKey:{}},setup(e){const o=e,{t}=A(),j=S(!1),n=S([]),p=S({}),v=S({}),f=R(()=>o.selectedJobId?n.value.filter(r=>r.jobId===o.selectedJobId):n.value);async function $(){j.value=!0;try{n.value=await Bt(o.selectedJobId??void 0)}catch(r){console.error("Failed to fetch cron runs:",r),n.value=[]}finally{j.value=!1}}async function c(r){const P=Array.isArray(r)?r:r!=null?[r]:[];for(const u of P){const I=String(u);if(p.value[I]||v.value[I])continue;const J=f.value.find(b=>`${b.jobId}/${b.fileName}`===I);if(J){v.value[I]=!0;try{const b=await Dt(J.jobId,J.fileName);p.value[I]=b.content}catch{p.value[I]="[Error loading content]"}finally{v.value[I]=!1}}}}function s(r){return r<1024?`${r}B`:r<1024*1024?`${(r/1024).toFixed(1)}KB`:`${(r/1024/1024).toFixed(1)}MB`}function g(r){return o.jobNameMap[r]||r}return ut(()=>[o.selectedJobId,o.profileKey],()=>{p.value={},$()},{immediate:!0}),(r,P)=>(h(),C("div",Me,[i("div",Re,[i("span",Ne,d(a(t)("jobs.runHistory.title")),1),i("span",Te,d(f.value.length)+" "+d(a(t)("jobs.runHistory.runs")),1)]),i("div",Ee,[y(a(te),{show:j.value},{default:_(()=>[!j.value&&f.value.length===0?(h(),M(a(dt),{key:0,description:a(t)("jobs.runHistory.noRuns")},null,8,["description"])):(h(),M(a(vt),{key:1,accordion:"","onUpdate:expandedNames":c},{default:_(()=>[(h(!0),C(B,null,We(f.value,u=>(h(),M(a(bt),{key:`${u.jobId}/${u.fileName}`,title:`${g(u.jobId)} — ${u.runTime}`,name:`${u.jobId}/${u.fileName}`},{"header-extra":_(()=>[i("span",Fe,d(s(u.size)),1)]),default:_(()=>[v.value[`${u.jobId}/${u.fileName}`]?(h(),M(a(te),{key:0,size:"small"})):p.value[`${u.jobId}/${u.fileName}`]?(h(),M(Jt,{key:1,content:p.value[`${u.jobId}/${u.fileName}`]},null,8,["content"])):E("",!0)]),_:2},1032,["title","name"]))),128))]),_:1}))]),_:1},8,["show"])])]))}})})),Vt=w((()=>{})),st,zt=w((()=>{qe(),qe(),Vt(),L(),st=W(ot,[["__scopeId","data-v-bed5e9a2"]])})),Be,nt,De=w((()=>{D(),Y(),X(),jt(),ae(),H(),Be={class:"modal-footer"},nt=O({__name:"JobFormModal",props:{jobId:{}},emits:["close","saved"],setup(e,{emit:o}){const{t}=A(),j=e,n=o,p=K(),v=yt(),f=Qe(),$=S(!0),c=S(!1),s=S({name:"",schedule:"",prompt:"",deliver:"origin",repeat_times:null}),g=S(null),r=R(()=>!!j.jobId),P=R(()=>[{label:t("jobs.presetEveryMinute"),value:"* * * * *"},{label:t("jobs.presetEvery5Min"),value:"*/5 * * * *"},{label:t("jobs.presetEveryHour"),value:"0 * * * *"},{label:t("jobs.presetEveryDay"),value:"0 0 * * *"},{label:t("jobs.presetEveryDay9"),value:"0 9 * * *"},{label:t("jobs.presetEveryMonday"),value:"0 9 * * 1"},{label:t("jobs.presetEveryMonth"),value:"0 9 1 * *"}]);function u(m){return typeof m=="string"&&m.trim().length>0}function I(m){const l=v.platforms[m]||{};switch(m){case"telegram":case"discord":case"slack":return u(l.token);case"whatsapp":return l.enabled===!0||l.enabled==="true";case"matrix":return u(l.token)&&u(l.extra?.homeserver);case"weixin":return u(l.token)&&u(l.extra?.account_id);case"wecom":return u(l.extra?.bot_id)&&u(l.extra?.secret);case"feishu":return u(l.extra?.app_id)&&u(l.extra?.app_secret);case"dingtalk":return u(l.extra?.client_id)&&u(l.extra?.client_secret)||u(l.extra?.app_key)&&u(l.extra?.client_secret);case"qqbot":return u(l.extra?.app_id)&&u(l.extra?.client_secret);default:return!1}}const J=R(()=>{const m=[{label:t("jobs.origin"),value:"origin"},{label:t("jobs.local"),value:"local"}];for(const l of[{key:"telegram",label:"Telegram"},{key:"discord",label:"Discord"},{key:"slack",label:"Slack"},{key:"whatsapp",label:"WhatsApp"},{key:"matrix",label:"Matrix"},{key:"weixin",label:"WeChat"},{key:"wecom",label:"WeCom"},{key:"feishu",label:"Feishu"},{key:"dingtalk",label:"DingTalk"},{key:"qqbot",label:"QQBot"}])m.push({label:l.label,value:l.key,disabled:!I(l.key)});return m}),b=S(null);Ke(async()=>{if(Object.keys(v.platforms||{}).length===0&&await v.fetchSettings(),j.jobId)try{const m=await Ct(j.jobId);b.value=m,s.value={name:m.name,schedule:Q(m.schedule,m.schedule_display||""),prompt:m.prompt,deliver:m.deliver||"origin",repeat_times:Ge(m.repeat)}}catch(m){f.error(t("jobs.loadFailed")+": "+m.message)}});async function F(){if(!s.value.name.trim()){f.warning(t("jobs.nameRequired"));return}if(!s.value.schedule.trim()){f.warning(t("jobs.scheduleRequired"));return}c.value=!0;try{if(r.value){if(!b.value){f.error(t("jobs.loadFailed"));return}const m=kt(b.value,s.value);if(Object.keys(m).length===0){f.success(t("jobs.jobUpdated")),n("saved");return}await p.updateJob(j.jobId,m),f.success(t("jobs.jobUpdated"))}else{const m={name:s.value.name,schedule:s.value.schedule,prompt:s.value.prompt,deliver:s.value.deliver,repeat:s.value.repeat_times??void 0};await p.createJob(m),f.success(t("jobs.jobCreated"))}n("saved")}catch(m){f.error(m.message)}finally{c.value=!1}}function oe(){$.value=!1,setTimeout(()=>n("close"),200)}return(m,l)=>(h(),M(a(ct),{show:$.value,"onUpdate:show":l[7]||(l[7]=x=>$.value=x),preset:"card",title:r.value?a(t)("jobs.editJob"):a(t)("jobs.createJob"),style:{width:"min(520px, calc(100vw - 32px))"},"mask-closable":!c.value,onAfterLeave:l[8]||(l[8]=x=>n("close"))},{footer:_(()=>[i("div",Be,[y(a(T),{onClick:oe},{default:_(()=>[k(d(a(t)("common.cancel")),1)]),_:1}),y(a(T),{type:"primary",loading:c.value,onClick:F},{default:_(()=>[k(d(r.value?a(t)("common.update"):a(t)("common.create")),1)]),_:1},8,["loading"])])]),default:_(()=>[y(a(rt),{"label-placement":"top"},{default:_(()=>[y(a(q),{label:a(t)("jobs.name"),required:""},{default:_(()=>[y(a(G),{value:s.value.name,"onUpdate:value":l[0]||(l[0]=x=>s.value.name=x),placeholder:a(t)("jobs.namePlaceholder"),maxlength:"200","show-count":""},null,8,["value","placeholder"])]),_:1},8,["label"]),y(a(q),{label:a(t)("jobs.schedule"),required:""},{default:_(()=>[y(a(G),{value:s.value.schedule,"onUpdate:value":l[1]||(l[1]=x=>s.value.schedule=x),placeholder:a(t)("jobs.schedulePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),y(a(q),{label:a(t)("jobs.quickPresets")},{default:_(()=>[y(a(se),{value:g.value,"onUpdate:value":[l[2]||(l[2]=x=>g.value=x),l[3]||(l[3]=x=>s.value.schedule=x)],options:P.value,placeholder:a(t)("jobs.selectPreset")},null,8,["value","options","placeholder"])]),_:1},8,["label"]),y(a(q),{label:a(t)("jobs.prompt"),required:""},{default:_(()=>[y(a(G),{value:s.value.prompt,"onUpdate:value":l[4]||(l[4]=x=>s.value.prompt=x),type:"textarea",placeholder:a(t)("jobs.promptPlaceholder"),rows:4,maxlength:"5000","show-count":""},null,8,["value","placeholder"])]),_:1},8,["label"]),y(a(q),{label:a(t)("jobs.deliverTarget")},{default:_(()=>[y(a(se),{value:s.value.deliver,"onUpdate:value":l[5]||(l[5]=x=>s.value.deliver=x),options:J.value},null,8,["value","options"])]),_:1},8,["label"]),y(a(q),{label:a(t)("jobs.repeatCount")},{default:_(()=>[y(a(pt),{value:s.value.repeat_times,"onUpdate:value":l[6]||(l[6]=x=>s.value.repeat_times=x),min:1,placeholder:a(t)("jobs.repeatPlaceholder"),clearable:"",style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title","mask-closable"]))}})})),Ot=w((()=>{})),lt,Ht=w((()=>{De(),De(),Ot(),L(),lt=W(nt,[["__scopeId","data-v-5c6a9f43"]])})),Ue,Ve,ze,Oe,He,Ae,it,Le=w((()=>{D(),Y(),H(),qt(),zt(),Ht(),X(),gt(),Ue={class:"jobs-view"},Ve={class:"page-header"},ze={class:"header-title"},Oe={class:"jobs-split"},He={class:"jobs-top"},Ae={class:"jobs-bottom"},it=O({__name:"JobsView",setup(e){const{t:o}=A(),t=K(),j=ht(),n=S(!1),p=S(null),v=S(null),f=R(()=>j.activeProfileName||"default"),$=R(()=>{const J={};for(const b of t.jobs){const F=b.job_id||b.id;J[F]=b.name}return J});async function c(){(!j.activeProfileName||j.profiles.length===0)&&await j.fetchProfiles()}async function s(){v.value=null,t.jobs=[],await c(),await t.fetchJobs()}Ke(()=>{s()});function g(){p.value=null,n.value=!0}function r(J){p.value=J,n.value=!0}function P(){n.value=!1,p.value=null}async function u(){await t.fetchJobs(),P()}function I(J){v.value=v.value===J?null:J}return(J,b)=>(h(),C("div",Ue,[i("header",Ve,[i("h2",ze,d(a(o)("jobs.title")),1),y(a(T),{type:"primary",size:"small",onClick:g},{icon:_(()=>[...b[0]||(b[0]=[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:_(()=>[k(" "+d(a(o)("jobs.createJob")),1)]),_:1})]),i("div",Oe,[i("div",He,[y(a(te),{show:a(t).loading&&a(t).jobs.length===0},{default:_(()=>[y(at,{"selected-job-id":v.value,onEdit:r,onSelect:I},null,8,["selected-job-id"])]),_:1},8,["show"])]),b[1]||(b[1]=i("div",{class:"splitter"},null,-1)),i("div",Ae,[y(st,{"selected-job-id":v.value,"job-name-map":$.value,"profile-key":f.value},null,8,["selected-job-id","job-name-map","profile-key"])])]),n.value?(h(),M(lt,{key:0,"job-id":p.value,onClose:P,onSaved:u},null,8,["job-id"])):E("",!0)]))}})})),At=w((()=>{})),Lt,Wt=w((()=>{Le(),Le(),At(),L(),Lt=W(it,[["__scopeId","data-v-409c1932"]])}));Wt();export{Lt as default};
|
|
1
|
+
import{n as w}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as d,$t as i,An as _,At as G,Bn as S,Bt as D,Cn as We,E as q,Jn as a,Jt as V,O as rt,On as ut,Qt as R,Rt as dt,W as ct,Xn as Z,Yt as B,an as k,en as M,ft as se,g as te,gt as bt,in as _t,it as ee,nn as C,on as y,sn as O,t as Y,tn as E,vt,w as pt,wt as T,xn as h,yn as Ke,z as Qe}from"./ui-vendor-DNWaqYj5.js";import{_ as ft,c as H,g as mt,l as A}from"./vue-vendor-VX6KvV1_.js";import{d as N,l as Ye,n as L,t as W}from"./_plugin-vue_export-helper-CtZk2OSc.js";import{C as yt,S as jt,X as ht,Y as gt}from"./index-DyLZQAQu.js";import{n as wt,t as Jt}from"./MarkdownRenderer-2bwbBjlK.js";function U(e){return e.job}function Xe(e){return typeof e=="object"&&e!==null}function Q(e,o=""){if(typeof e=="string")return e;if(!Xe(e))return o;if(e.kind==="cron")return e.expr||e.display||o;if(e.kind==="once")return e.run_at||e.display||o;if(e.kind==="interval")return e.display||(typeof e.minutes=="number"?`every ${e.minutes}m`:o);const t=e;return t.expr||t.run_at||t.display||o}function xt(e,o="—"){if(typeof e=="string")return e;if(!Xe(e))return o;if(e.kind==="cron")return e.expr||e.display||o;if(e.kind==="interval"||e.kind==="once")return e.display||Q(e,o);const t=e;return t.display||t.expr||t.run_at||o}function Ge(e){return e&&typeof e=="object"?e.times??null:null}function kt(e,o){const t={},j=Q(e.schedule,e.schedule_display||""),n=Ge(e.repeat),p=e.deliver||"origin";return o.name!==e.name&&(t.name=o.name),o.schedule!==j&&(t.schedule=o.schedule),o.prompt!==(e.prompt||"")&&(t.prompt=o.prompt),o.deliver!==p&&(t.deliver=o.deliver),o.repeat_times!==n&&(t.repeat=o.repeat_times),t}async function $t(){return(await N("/api/hermes/jobs?include_disabled=true")).jobs}async function Ct(e){return U(await N(`/api/hermes/jobs/${e}`))}async function St(e){return U(await N("/api/hermes/jobs",{method:"POST",body:JSON.stringify(e)}))}async function It(e,o){return U(await N(`/api/hermes/jobs/${e}`,{method:"PATCH",body:JSON.stringify(o)}))}async function Pt(e){return N(`/api/hermes/jobs/${e}`,{method:"DELETE"})}async function Mt(e){return U(await N(`/api/hermes/jobs/${e}/pause`,{method:"POST"}))}async function Rt(e){return U(await N(`/api/hermes/jobs/${e}/resume`,{method:"POST"}))}async function Nt(e){return U(await N(`/api/hermes/jobs/${e}/run`,{method:"POST"}))}var ae=w((()=>{Ye()}));function z(e,o){return e.job_id===o||e.id===o}var K,X=w((()=>{ft(),D(),ae(),K=mt("jobs",()=>{const e=S([]),o=S(!1);async function t(){o.value=!0;try{e.value=await $t()}catch(c){console.error("Failed to fetch jobs:",c)}finally{o.value=!1}}async function j(c){const s=await St(c);return e.value.unshift(s),s}async function n(c,s){const g=await It(c,s),r=e.value.findIndex(P=>z(P,c));return r!==-1&&(e.value[r]=g),g}async function p(c){await Pt(c),e.value=e.value.filter(s=>!z(s,c))}async function v(c){const s=await Mt(c),g=e.value.findIndex(r=>z(r,c));g!==-1&&(e.value[g]=s)}async function f(c){const s=await Rt(c),g=e.value.findIndex(r=>z(r,c));g!==-1&&(e.value[g]=s)}async function $(c){const s=await Nt(c),g=e.value.findIndex(r=>z(r,c));g!==-1&&(e.value[g]=s)}return{jobs:e,loading:o,fetchJobs:t,createJob:j,updateJob:n,deleteJob:p,pauseJob:v,resumeJob:f,runJob:$}})})),ne,le,ie,re,ue,de,ce,be,_e,ve,pe,fe,me,ye,je,he,ge,we,Je,xe,ke,$e,Ze,Ce=w((()=>{D(),Y(),ae(),X(),H(),ne={class:"card-header"},le={class:"job-name"},ie={class:"card-body"},re={class:"info-row"},ue={class:"info-label"},de={class:"info-value mono"},ce={class:"info-row"},be={class:"info-label"},_e={class:"info-value mono"},ve={class:"info-row"},pe={class:"info-label"},fe={class:"info-value"},me={class:"info-row"},ye={class:"info-label"},je={class:"info-value"},he={class:"info-row"},ge={class:"info-label"},we={class:"info-value"},Je={key:0,class:"info-row"},xe={class:"info-label"},ke={class:"info-value"},$e={class:"card-actions"},Ze=O({__name:"JobCard",props:{job:{},selected:{type:Boolean}},emits:["edit","select"],setup(e,{emit:o}){const t=e,j=o,{t:n}=A(),p=K(),v=Qe(),f=R(()=>t.job.job_id||t.job.id),$=R(()=>t.job.state==="running"?n("jobs.status.running"):t.job.state==="paused"?n("jobs.status.paused"):t.job.enabled?n("jobs.status.scheduled"):n("jobs.status.disabled")),c=R(()=>t.job.state==="running"?"info":t.job.state==="paused"?"warning":t.job.enabled?"success":"error"),s=R(()=>xt(t.job.schedule,t.job.schedule_display||"—")),g=b=>b?new Date(b).toLocaleString():"—";async function r(){try{await p.pauseJob(f.value),v.success(n("jobs.jobPaused"))}catch(b){v.error(b.message)}}async function P(){try{await p.resumeJob(f.value),v.success(n("jobs.jobResumed"))}catch(b){v.error(b.message)}}async function u(){try{await p.runJob(f.value),v.info(n("jobs.jobTriggered"))}catch(b){v.error(b.message)}}async function I(){try{await p.deleteJob(f.value),v.success(n("jobs.jobDeleted"))}catch(b){v.error(b.message)}}function J(b){b.target.closest(".card-actions")||j("select",f.value)}return(b,F)=>(h(),C("div",{class:Z(["job-card",{selected:e.selected}]),onClick:J},[i("div",ne,[i("h3",le,d(e.job.name),1),i("span",{class:Z(["status-badge",c.value])},d($.value),3)]),i("div",ie,[i("div",re,[i("span",ue,d(a(n)("jobs.info.schedule")),1),i("code",de,d(s.value),1)]),i("div",ce,[i("span",be,d(a(n)("jobs.info.model")),1),i("span",_e,d(e.job.model||"—"),1)]),i("div",ve,[i("span",pe,d(a(n)("jobs.info.lastRun")),1),i("span",fe,[k(d(g(e.job.last_run_at))+" ",1),e.job.last_status?(h(),C("span",{key:0,class:Z(["run-status",{ok:e.job.last_status==="ok",err:e.job.last_status!=="ok"}])},d(e.job.last_status==="ok"?a(n)("common.ok"):e.job.last_status),3)):E("",!0)])]),i("div",me,[i("span",ye,d(a(n)("jobs.info.nextRun")),1),i("span",je,d(g(e.job.next_run_at)),1)]),i("div",he,[i("span",ge,d(a(n)("jobs.info.deliver")),1),i("span",we,[k(d(e.job.deliver),1),e.job.origin?(h(),C(B,{key:0},[k(" ("+d(e.job.origin.platform)+")",1)],64)):E("",!0)])]),e.job.repeat?(h(),C("div",Je,[i("span",xe,d(a(n)("jobs.info.repeat")),1),i("span",ke,[typeof e.job.repeat=="string"?(h(),C(B,{key:0},[k(d(e.job.repeat),1)],64)):(h(),C(B,{key:1},[k(d(e.job.repeat.completed)+" / "+d(e.job.repeat.times??"∞"),1)],64))])])):E("",!0)]),i("div",$e,[e.job.state!=="paused"&&e.job.enabled?(h(),M(a(ee),{key:0},{trigger:_(()=>[y(a(T),{size:"tiny",quaternary:"",onClick:V(r,["stop"])},{default:_(()=>[k(d(a(n)("jobs.action.pause")),1)]),_:1})]),default:_(()=>[k(" "+d(a(n)("jobs.action.pauseJob")),1)]),_:1})):e.job.state==="paused"?(h(),M(a(ee),{key:1},{trigger:_(()=>[y(a(T),{size:"tiny",quaternary:"",onClick:V(P,["stop"])},{default:_(()=>[k(d(a(n)("jobs.action.resume")),1)]),_:1})]),default:_(()=>[k(" "+d(a(n)("jobs.action.resumeJob")),1)]),_:1})):E("",!0),y(a(ee),null,{trigger:_(()=>[y(a(T),{size:"tiny",quaternary:"",onClick:V(u,["stop"])},{default:_(()=>[k(d(a(n)("jobs.action.runNow")),1)]),_:1})]),default:_(()=>[k(" "+d(a(n)("jobs.action.triggerImmediately")),1)]),_:1}),y(a(T),{size:"tiny",quaternary:"",onClick:F[0]||(F[0]=V(oe=>j("edit",f.value),["stop"]))},{default:_(()=>[k(d(a(n)("common.edit")),1)]),_:1}),y(a(T),{size:"tiny",quaternary:"",type:"error",onClick:V(I,["stop"])},{default:_(()=>[k(d(a(n)("common.delete")),1)]),_:1})])],2))}})})),Tt=w((()=>{})),et,Et=w((()=>{Ce(),Ce(),Tt(),L(),et=W(Ze,[["__scopeId","data-v-54aca7fb"]])})),Se,Ie,tt,Pe=w((()=>{D(),Et(),X(),H(),Se={key:0,class:"empty-state"},Ie={key:1,class:"jobs-grid"},tt=O({__name:"JobsPanel",props:{selectedJobId:{}},emits:["edit","select"],setup(e,{emit:o}){const t=e,j=o,{t:n}=A(),p=K();function v($){j("select",t.selectedJobId===$?null:$)}function f(){t.selectedJobId&&j("select",null)}return($,c)=>(h(),C(B,null,[a(p).jobs.length===0?(h(),C("div",Se,[c[0]||(c[0]=_t('<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" class="empty-icon" data-v-bfc747c9><rect x="3" y="4" width="18" height="18" rx="2" ry="2" data-v-bfc747c9></rect><line x1="16" y1="2" x2="16" y2="6" data-v-bfc747c9></line><line x1="8" y1="2" x2="8" y2="6" data-v-bfc747c9></line><line x1="3" y1="10" x2="21" y2="10" data-v-bfc747c9></line></svg>',1)),i("p",null,d(a(n)("jobs.noJobs")),1)])):(h(),C("div",Ie,[(h(!0),C(B,null,We(a(p).jobs,s=>(h(),M(et,{key:s.id,job:s,selected:e.selectedJobId===(s.job_id||s.id),onEdit:g=>j("edit",s.id),onSelect:v},null,8,["job","selected","onEdit"]))),128))])),e.selectedJobId?(h(),C("div",{key:2,class:"deselect-overlay",onClick:f})):E("",!0)],64))}})})),Ft=w((()=>{})),at,qt=w((()=>{Pe(),Pe(),Ft(),L(),at=W(tt,[["__scopeId","data-v-bfc747c9"]])}));async function Bt(e){const o=new URLSearchParams;e&&o.set("jobId",e);const t=o.toString();return(await N(`/api/cron-history${t?`?${t}`:""}`)).runs}async function Dt(e,o){return N(`/api/cron-history/${encodeURIComponent(e)}/${encodeURIComponent(o)}`)}var Ut=w((()=>{Ye()})),Me,Re,Ne,Te,Ee,Fe,ot,qe=w((()=>{D(),Y(),H(),Ut(),wt(),Me={class:"run-history"},Re={class:"history-header"},Ne={class:"history-title"},Te={class:"history-count"},Ee={class:"history-body"},Fe={class:"run-meta"},ot=O({__name:"JobRunHistory",props:{selectedJobId:{},jobNameMap:{},profileKey:{}},setup(e){const o=e,{t}=A(),j=S(!1),n=S([]),p=S({}),v=S({}),f=R(()=>o.selectedJobId?n.value.filter(r=>r.jobId===o.selectedJobId):n.value);async function $(){j.value=!0;try{n.value=await Bt(o.selectedJobId??void 0)}catch(r){console.error("Failed to fetch cron runs:",r),n.value=[]}finally{j.value=!1}}async function c(r){const P=Array.isArray(r)?r:r!=null?[r]:[];for(const u of P){const I=String(u);if(p.value[I]||v.value[I])continue;const J=f.value.find(b=>`${b.jobId}/${b.fileName}`===I);if(J){v.value[I]=!0;try{const b=await Dt(J.jobId,J.fileName);p.value[I]=b.content}catch{p.value[I]="[Error loading content]"}finally{v.value[I]=!1}}}}function s(r){return r<1024?`${r}B`:r<1024*1024?`${(r/1024).toFixed(1)}KB`:`${(r/1024/1024).toFixed(1)}MB`}function g(r){return o.jobNameMap[r]||r}return ut(()=>[o.selectedJobId,o.profileKey],()=>{p.value={},$()},{immediate:!0}),(r,P)=>(h(),C("div",Me,[i("div",Re,[i("span",Ne,d(a(t)("jobs.runHistory.title")),1),i("span",Te,d(f.value.length)+" "+d(a(t)("jobs.runHistory.runs")),1)]),i("div",Ee,[y(a(te),{show:j.value},{default:_(()=>[!j.value&&f.value.length===0?(h(),M(a(dt),{key:0,description:a(t)("jobs.runHistory.noRuns")},null,8,["description"])):(h(),M(a(vt),{key:1,accordion:"","onUpdate:expandedNames":c},{default:_(()=>[(h(!0),C(B,null,We(f.value,u=>(h(),M(a(bt),{key:`${u.jobId}/${u.fileName}`,title:`${g(u.jobId)} — ${u.runTime}`,name:`${u.jobId}/${u.fileName}`},{"header-extra":_(()=>[i("span",Fe,d(s(u.size)),1)]),default:_(()=>[v.value[`${u.jobId}/${u.fileName}`]?(h(),M(a(te),{key:0,size:"small"})):p.value[`${u.jobId}/${u.fileName}`]?(h(),M(Jt,{key:1,content:p.value[`${u.jobId}/${u.fileName}`]},null,8,["content"])):E("",!0)]),_:2},1032,["title","name"]))),128))]),_:1}))]),_:1},8,["show"])])]))}})})),Vt=w((()=>{})),st,zt=w((()=>{qe(),qe(),Vt(),L(),st=W(ot,[["__scopeId","data-v-bed5e9a2"]])})),Be,nt,De=w((()=>{D(),Y(),X(),jt(),ae(),H(),Be={class:"modal-footer"},nt=O({__name:"JobFormModal",props:{jobId:{}},emits:["close","saved"],setup(e,{emit:o}){const{t}=A(),j=e,n=o,p=K(),v=yt(),f=Qe(),$=S(!0),c=S(!1),s=S({name:"",schedule:"",prompt:"",deliver:"origin",repeat_times:null}),g=S(null),r=R(()=>!!j.jobId),P=R(()=>[{label:t("jobs.presetEveryMinute"),value:"* * * * *"},{label:t("jobs.presetEvery5Min"),value:"*/5 * * * *"},{label:t("jobs.presetEveryHour"),value:"0 * * * *"},{label:t("jobs.presetEveryDay"),value:"0 0 * * *"},{label:t("jobs.presetEveryDay9"),value:"0 9 * * *"},{label:t("jobs.presetEveryMonday"),value:"0 9 * * 1"},{label:t("jobs.presetEveryMonth"),value:"0 9 1 * *"}]);function u(m){return typeof m=="string"&&m.trim().length>0}function I(m){const l=v.platforms[m]||{};switch(m){case"telegram":case"discord":case"slack":return u(l.token);case"whatsapp":return l.enabled===!0||l.enabled==="true";case"matrix":return u(l.token)&&u(l.extra?.homeserver);case"weixin":return u(l.token)&&u(l.extra?.account_id);case"wecom":return u(l.extra?.bot_id)&&u(l.extra?.secret);case"feishu":return u(l.extra?.app_id)&&u(l.extra?.app_secret);case"dingtalk":return u(l.extra?.client_id)&&u(l.extra?.client_secret)||u(l.extra?.app_key)&&u(l.extra?.client_secret);case"qqbot":return u(l.extra?.app_id)&&u(l.extra?.client_secret);default:return!1}}const J=R(()=>{const m=[{label:t("jobs.origin"),value:"origin"},{label:t("jobs.local"),value:"local"}];for(const l of[{key:"telegram",label:"Telegram"},{key:"discord",label:"Discord"},{key:"slack",label:"Slack"},{key:"whatsapp",label:"WhatsApp"},{key:"matrix",label:"Matrix"},{key:"weixin",label:"WeChat"},{key:"wecom",label:"WeCom"},{key:"feishu",label:"Feishu"},{key:"dingtalk",label:"DingTalk"},{key:"qqbot",label:"QQBot"}])m.push({label:l.label,value:l.key,disabled:!I(l.key)});return m}),b=S(null);Ke(async()=>{if(Object.keys(v.platforms||{}).length===0&&await v.fetchSettings(),j.jobId)try{const m=await Ct(j.jobId);b.value=m,s.value={name:m.name,schedule:Q(m.schedule,m.schedule_display||""),prompt:m.prompt,deliver:m.deliver||"origin",repeat_times:Ge(m.repeat)}}catch(m){f.error(t("jobs.loadFailed")+": "+m.message)}});async function F(){if(!s.value.name.trim()){f.warning(t("jobs.nameRequired"));return}if(!s.value.schedule.trim()){f.warning(t("jobs.scheduleRequired"));return}c.value=!0;try{if(r.value){if(!b.value){f.error(t("jobs.loadFailed"));return}const m=kt(b.value,s.value);if(Object.keys(m).length===0){f.success(t("jobs.jobUpdated")),n("saved");return}await p.updateJob(j.jobId,m),f.success(t("jobs.jobUpdated"))}else{const m={name:s.value.name,schedule:s.value.schedule,prompt:s.value.prompt,deliver:s.value.deliver,repeat:s.value.repeat_times??void 0};await p.createJob(m),f.success(t("jobs.jobCreated"))}n("saved")}catch(m){f.error(m.message)}finally{c.value=!1}}function oe(){$.value=!1,setTimeout(()=>n("close"),200)}return(m,l)=>(h(),M(a(ct),{show:$.value,"onUpdate:show":l[7]||(l[7]=x=>$.value=x),preset:"card",title:r.value?a(t)("jobs.editJob"):a(t)("jobs.createJob"),style:{width:"min(520px, calc(100vw - 32px))"},"mask-closable":!c.value,onAfterLeave:l[8]||(l[8]=x=>n("close"))},{footer:_(()=>[i("div",Be,[y(a(T),{onClick:oe},{default:_(()=>[k(d(a(t)("common.cancel")),1)]),_:1}),y(a(T),{type:"primary",loading:c.value,onClick:F},{default:_(()=>[k(d(r.value?a(t)("common.update"):a(t)("common.create")),1)]),_:1},8,["loading"])])]),default:_(()=>[y(a(rt),{"label-placement":"top"},{default:_(()=>[y(a(q),{label:a(t)("jobs.name"),required:""},{default:_(()=>[y(a(G),{value:s.value.name,"onUpdate:value":l[0]||(l[0]=x=>s.value.name=x),placeholder:a(t)("jobs.namePlaceholder"),maxlength:"200","show-count":""},null,8,["value","placeholder"])]),_:1},8,["label"]),y(a(q),{label:a(t)("jobs.schedule"),required:""},{default:_(()=>[y(a(G),{value:s.value.schedule,"onUpdate:value":l[1]||(l[1]=x=>s.value.schedule=x),placeholder:a(t)("jobs.schedulePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),y(a(q),{label:a(t)("jobs.quickPresets")},{default:_(()=>[y(a(se),{value:g.value,"onUpdate:value":[l[2]||(l[2]=x=>g.value=x),l[3]||(l[3]=x=>s.value.schedule=x)],options:P.value,placeholder:a(t)("jobs.selectPreset")},null,8,["value","options","placeholder"])]),_:1},8,["label"]),y(a(q),{label:a(t)("jobs.prompt"),required:""},{default:_(()=>[y(a(G),{value:s.value.prompt,"onUpdate:value":l[4]||(l[4]=x=>s.value.prompt=x),type:"textarea",placeholder:a(t)("jobs.promptPlaceholder"),rows:4,maxlength:"5000","show-count":""},null,8,["value","placeholder"])]),_:1},8,["label"]),y(a(q),{label:a(t)("jobs.deliverTarget")},{default:_(()=>[y(a(se),{value:s.value.deliver,"onUpdate:value":l[5]||(l[5]=x=>s.value.deliver=x),options:J.value},null,8,["value","options"])]),_:1},8,["label"]),y(a(q),{label:a(t)("jobs.repeatCount")},{default:_(()=>[y(a(pt),{value:s.value.repeat_times,"onUpdate:value":l[6]||(l[6]=x=>s.value.repeat_times=x),min:1,placeholder:a(t)("jobs.repeatPlaceholder"),clearable:"",style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title","mask-closable"]))}})})),Ot=w((()=>{})),lt,Ht=w((()=>{De(),De(),Ot(),L(),lt=W(nt,[["__scopeId","data-v-5c6a9f43"]])})),Ue,Ve,ze,Oe,He,Ae,it,Le=w((()=>{D(),Y(),H(),qt(),zt(),Ht(),X(),gt(),Ue={class:"jobs-view"},Ve={class:"page-header"},ze={class:"header-title"},Oe={class:"jobs-split"},He={class:"jobs-top"},Ae={class:"jobs-bottom"},it=O({__name:"JobsView",setup(e){const{t:o}=A(),t=K(),j=ht(),n=S(!1),p=S(null),v=S(null),f=R(()=>j.activeProfileName||"default"),$=R(()=>{const J={};for(const b of t.jobs){const F=b.job_id||b.id;J[F]=b.name}return J});async function c(){(!j.activeProfileName||j.profiles.length===0)&&await j.fetchProfiles()}async function s(){v.value=null,t.jobs=[],await c(),await t.fetchJobs()}Ke(()=>{s()});function g(){p.value=null,n.value=!0}function r(J){p.value=J,n.value=!0}function P(){n.value=!1,p.value=null}async function u(){await t.fetchJobs(),P()}function I(J){v.value=v.value===J?null:J}return(J,b)=>(h(),C("div",Ue,[i("header",Ve,[i("h2",ze,d(a(o)("jobs.title")),1),y(a(T),{type:"primary",size:"small",onClick:g},{icon:_(()=>[...b[0]||(b[0]=[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:_(()=>[k(" "+d(a(o)("jobs.createJob")),1)]),_:1})]),i("div",Oe,[i("div",He,[y(a(te),{show:a(t).loading&&a(t).jobs.length===0},{default:_(()=>[y(at,{"selected-job-id":v.value,onEdit:r,onSelect:I},null,8,["selected-job-id"])]),_:1},8,["show"])]),b[1]||(b[1]=i("div",{class:"splitter"},null,-1)),i("div",Ae,[y(st,{"selected-job-id":v.value,"job-name-map":$.value,"profile-key":f.value},null,8,["selected-job-id","job-name-map","profile-key"])])]),n.value?(h(),M(lt,{key:0,"job-id":p.value,onClose:P,onSaved:u},null,8,["job-id"])):E("",!0)]))}})})),At=w((()=>{})),Lt,Wt=w((()=>{Le(),Le(),At(),L(),Lt=W(it,[["__scopeId","data-v-409c1932"]])}));Wt();export{Lt as default};
|