@zhanguym/chatroom 1.1.0 → 1.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/app/application.d.ts +2 -0
  2. package/dist/app/application.js +7 -1
  3. package/dist/app/lifecycle.js +6 -0
  4. package/dist/auth/auth-service.js +5 -1
  5. package/dist/core/runtime/child-environment.js +3 -2
  6. package/dist/infrastructure/database/custom-mcp-repository.d.ts +9 -0
  7. package/dist/infrastructure/database/custom-mcp-repository.js +37 -0
  8. package/dist/infrastructure/database/mcp-tool-settings-repository.d.ts +1 -0
  9. package/dist/infrastructure/database/mcp-tool-settings-repository.js +6 -0
  10. package/dist/infrastructure/database/schema.d.ts +1 -1
  11. package/dist/infrastructure/database/schema.js +9 -0
  12. package/dist/infrastructure/http/http-server.js +7 -1
  13. package/dist/mcp/custom/manager.d.ts +54 -0
  14. package/dist/mcp/custom/manager.js +494 -0
  15. package/dist/mcp/custom/oauth.d.ts +38 -0
  16. package/dist/mcp/custom/oauth.js +116 -0
  17. package/dist/mcp/custom/types.d.ts +42 -0
  18. package/dist/mcp/custom/types.js +1 -0
  19. package/dist/mcp/server/create-mcp-server.d.ts +2 -1
  20. package/dist/mcp/server/create-mcp-server.js +4 -3
  21. package/dist/mcp/server/tool-control.d.ts +5 -0
  22. package/dist/mcp/server/tool-control.js +17 -0
  23. package/dist/native/linux/chatroom-computer-helper +0 -0
  24. package/dist/native/macos/ChatRoomComputerHelper.app/Contents/MacOS/chatroom-computer-helper +0 -0
  25. package/dist/native/windows/chatroom-computer-helper.exe +0 -0
  26. package/dist/plugins/cloud/tunnel-client.d.ts +2 -84
  27. package/dist/plugins/cloud/tunnel-client.js +2 -426
  28. package/dist/plugins/cloud/v2/stream.d.ts +48 -0
  29. package/dist/plugins/cloud/v2/stream.js +156 -0
  30. package/dist/plugins/cloud/v2/tunnel-client.d.ts +45 -0
  31. package/dist/plugins/cloud/v2/tunnel-client.js +426 -0
  32. package/dist/plugins/computer/computer-schemas.d.ts +8 -8
  33. package/dist/plugins/process/backend.d.ts +3 -0
  34. package/dist/plugins/process/infrastructure/pty-process-backend.d.ts +2 -0
  35. package/dist/plugins/process/infrastructure/pty-process-backend.js +5 -2
  36. package/dist/plugins/process/infrastructure/terminal-shell.d.ts +4 -0
  37. package/dist/plugins/process/infrastructure/terminal-shell.js +10 -0
  38. package/dist/plugins/process/process-supervisor.d.ts +6 -0
  39. package/dist/plugins/process/process-supervisor.js +26 -0
  40. package/dist/plugins/process/types.d.ts +2 -0
  41. package/dist/plugins/types.d.ts +2 -0
  42. package/dist/plugins/web/api-types.d.ts +2 -0
  43. package/dist/plugins/web/http/api-router.d.ts +2 -1
  44. package/dist/plugins/web/http/api-router.js +8 -1
  45. package/dist/plugins/web/http/custom-mcp-api-router.d.ts +6 -0
  46. package/dist/plugins/web/http/custom-mcp-api-router.js +114 -0
  47. package/dist/plugins/web/http/logs-api-router.js +2 -2
  48. package/dist/plugins/web/http/process-api-router.js +48 -0
  49. package/dist/plugins/web/http/rtc-api-router.d.ts +4 -0
  50. package/dist/plugins/web/http/rtc-api-router.js +316 -0
  51. package/dist/plugins/web/http/runtime-api-router.js +2 -2
  52. package/dist/plugins/web/http/terminal-api-router.d.ts +4 -0
  53. package/dist/plugins/web/http/terminal-api-router.js +132 -0
  54. package/dist/plugins/web/plugin.js +1 -1
  55. package/dist/plugins/web/runtime.d.ts +3 -1
  56. package/dist/plugins/web/runtime.js +3 -1
  57. package/dist/web/assets/AgentView-BEA5mQVv.js +4 -0
  58. package/dist/web/assets/{AgentView-BGLIBoxF.css → AgentView-CMxIn3KB.css} +1 -1
  59. package/dist/web/assets/CloudView-BGcVSE22.js +1 -0
  60. package/dist/web/assets/CloudView-Bgp5G965.css +1 -0
  61. package/dist/web/assets/CodeViewer.vue_vue_type_script_setup_true_lang-DfPmlGC0.js +3 -0
  62. package/dist/web/assets/ComputerView-Bz2Wsz2X.css +1 -0
  63. package/dist/web/assets/ComputerView-D6_NSXKb.js +1 -0
  64. package/dist/web/assets/{MarkdownContent-CkjR5fs7.js → MarkdownContent-DCkAALOF.js} +2 -2
  65. package/dist/web/assets/McpToolsView--8UloObb.js +2 -0
  66. package/dist/web/assets/McpToolsView-DdYOoY9_.css +1 -0
  67. package/dist/web/assets/OperationsView-CqgAPnSL.js +4 -0
  68. package/dist/web/assets/ProcessesView-BmNdR3C0.css +1 -0
  69. package/dist/web/assets/ProcessesView-DC0tjiYU.js +5 -0
  70. package/dist/web/assets/StateChip.vue_vue_type_script_setup_true_lang-D_LKEtqT.js +1 -0
  71. package/dist/web/assets/SystemLogsView-COvwamo5.css +1 -0
  72. package/dist/web/assets/SystemLogsView-DkTeUr2k.js +1 -0
  73. package/dist/web/assets/TerminalView-Coze7IMj.css +1 -0
  74. package/dist/web/assets/TerminalView-DEP1U0aW.js +16 -0
  75. package/dist/web/assets/VSelect-B5-t612C.js +1 -0
  76. package/dist/web/assets/VSheet-CNayLacf.js +1 -0
  77. package/dist/web/assets/VSpacer-BYe3Z99W.js +1 -0
  78. package/dist/web/assets/VSwitch-cVRCnipJ.js +1 -0
  79. package/dist/web/assets/VTabs-HKX286IT.js +1 -0
  80. package/dist/web/assets/VTextarea-ypCBuKI-.js +1 -0
  81. package/dist/web/assets/WorkspaceDownloadPreview-DJKSNaZ_.css +1 -0
  82. package/dist/web/assets/WorkspaceDownloadPreview-qwbTkU59.js +1 -0
  83. package/dist/web/assets/WorkspaceMediaPreview-D28Yf2yb.js +4 -0
  84. package/dist/web/assets/{WorkspacePdfPreview-CO-ZtDHG.js → WorkspacePdfPreview-BfZSPcR-.js} +2 -2
  85. package/dist/web/assets/WorkspacesView-CsCGtk5H.js +2 -0
  86. package/dist/web/assets/index-BCUxnASh.css +1 -0
  87. package/dist/web/assets/index-CFhV1jOj.js +19 -0
  88. package/dist/web/assets/{useMasterDetailFocus-D1mQ8Qjk.js → useMasterDetailFocus-CMJXBPPp.js} +1 -1
  89. package/dist/web/assets/useOperationLabels-DSbMa9Eb.js +1 -0
  90. package/dist/web/index.html +2 -2
  91. package/dist/web/transport-sw.js +417 -0
  92. package/package.json +10 -4
  93. package/scripts/ensure-pty-helper.mjs +28 -0
  94. package/dist/web/assets/AgentView-Dd6zCbr-.js +0 -4
  95. package/dist/web/assets/CloudView-DVVvwuWW.css +0 -1
  96. package/dist/web/assets/CloudView-DquY1HDZ.js +0 -1
  97. package/dist/web/assets/CodeViewer.vue_vue_type_script_setup_true_lang-ekOImmBP.js +0 -3
  98. package/dist/web/assets/ComputerView-DWzfSYJ7.css +0 -1
  99. package/dist/web/assets/ComputerView-RD2gMxJZ.js +0 -1
  100. package/dist/web/assets/McpToolsView-Dg2-iaDP.js +0 -1
  101. package/dist/web/assets/McpToolsView-DjxPbTHj.css +0 -1
  102. package/dist/web/assets/OperationsView-C8yCX7WZ.js +0 -4
  103. package/dist/web/assets/ProcessesView-C834LC-f.js +0 -4
  104. package/dist/web/assets/ProcessesView-Ce6iVwjA.css +0 -1
  105. package/dist/web/assets/StateChip.vue_vue_type_script_setup_true_lang-By2gilBw.js +0 -1
  106. package/dist/web/assets/SystemLogsView-B6KcZv1J.js +0 -1
  107. package/dist/web/assets/SystemLogsView-CofP4Jvi.css +0 -1
  108. package/dist/web/assets/VSelect-BtAJX-XJ.js +0 -1
  109. package/dist/web/assets/VSpacer-M8bpkhTH.js +0 -1
  110. package/dist/web/assets/VSwitch-C0VTnwLJ.js +0 -1
  111. package/dist/web/assets/VTabs-g61mykvY.js +0 -1
  112. package/dist/web/assets/VTextarea-CRYQYRqg.js +0 -1
  113. package/dist/web/assets/WorkspaceDownloadPreview-BrESF-82.js +0 -1
  114. package/dist/web/assets/WorkspaceDownloadPreview-DnxhH5Q7.css +0 -1
  115. package/dist/web/assets/WorkspaceMediaPreview-HYajqgZ3.js +0 -4
  116. package/dist/web/assets/WorkspacesView-BJCnzBLj.js +0 -2
  117. package/dist/web/assets/_plugin-vue_export-helper-DlAUqK2U.js +0 -1
  118. package/dist/web/assets/index-CZ-4tJlF.css +0 -1
  119. package/dist/web/assets/index-u-aADQP-.js +0 -19
  120. package/dist/web/assets/useOperationLabels-BjPIVnJW.js +0 -1
  121. package/dist/web/assets/utils-rtPwWNel.js +0 -1
  122. /package/dist/web/assets/{CodeViewer-CH1DEJge.css → VSheet-CH1DEJge.css} +0 -0
@@ -0,0 +1,5 @@
1
+ import{$ as se,a0 as we,w as oe,i as F,y as G,s as E,a7 as ce,v as ie,d as ee,u as de,c as $,l as T,p as x,f as a,m as j,g as t,h as L,t as u,q as ue,a8 as pe,k as y,W as fe,Y as me,a9 as ve,C as H,z as Y,o as xe,b5 as Se,e as P,V as ae,F as Oe,j as Ae,S as re,ac as Q,n as ne,b6 as De,a3 as Te,b7 as Pe,af as Ve,b3 as Be,E as Le}from"./index-CFhV1jOj.js";import{c as Re}from"./entity-refresh-queue-wQii8Dl5.js";import{u as qe}from"./useMasterDetailFocus-CMJXBPPp.js";import{_ as le}from"./CodeViewer.vue_vue_type_script_setup_true_lang-DfPmlGC0.js";import{_ as ye}from"./StateChip.vue_vue_type_script_setup_true_lang-D_LKEtqT.js";import"./VSheet-CNayLacf.js";import"./VSpacer-BYe3Z99W.js";const Z=512*1024;function ze(e,c){const r=e+c;return r.length<=Z?r:`[earlier output truncated]
2
+ `+r.slice(-Z)}function Me(e,c){const r=E([]),f=E(null),d=E(null),n=E(""),g=E(!1),s=se(),h=se();let q=!1,V=!1;const R=new Map,z=new Set;let O=0,v=null,_=!1,A=!1;const M=Re({keyOf:o=>o.processId,merge:Ne,isReady:()=>V,isLoading:()=>g.value,isDisposed:()=>A,refreshAll:J,applyBatch:$e});we(()=>{A=!0,v?.close(),v=null,_=!1,V=!1,M.reset(),R.clear(),s.invalidate(),h.invalidate();for(const o of z)o.abort();z.clear()});const he=ie(()=>{if(!d.value)return"";const o=d.value.stderr?`
3
+
4
+ [stderr]
5
+ ${d.value.stderr}`:"";return`${d.value.stdout}${o}`});oe(e,()=>{if(!q){q=!0,J();return}M.enqueue(c())},{immediate:!0}),oe(f,()=>{O+=1,h.invalidate(),v?.close(),v=null,_=!1;const o=f.value;o&&(typeof EventSource>"u"?U(O):ge(o,O))});async function J(){if(A)return;V=!1;const o=s.begin();g.value=!0,n.value="";try{const p=await F("/processes",{signal:o.signal});if(A||!s.isCurrent(o))return;r.value=p,V=!0,f.value&&!p.some(l=>l.processId===f.value)?K():f.value&&!v&&U()}catch(p){s.isCurrent(o)&&(n.value=G(p))}finally{s.isCurrent(o)&&(g.value=!1,V&&M.drain())}}async function $e(o){if(A||!o.length)return;const p=s.begin();n.value="";const l=f.value,b=O,k=await Promise.allSettled(o.map(async i=>{if(i.deleted)return{processId:i.processId,deleted:!0};try{if(i.processId===l&&_)return{processId:i.processId,deleted:!1,summary:null,snapshot:null};if(i.processId===l){const D=await F(`/processes/${encodeURIComponent(i.processId)}`,{signal:p.signal});return{processId:i.processId,deleted:!1,summary:W(D),snapshot:D}}if(i.output&&!i.summary)return{processId:i.processId,deleted:!1,summary:null,snapshot:null};const I=await F(`/processes/${encodeURIComponent(i.processId)}/summary`,{signal:p.signal});return{processId:i.processId,deleted:!1,summary:I,snapshot:null}}catch(I){if(X(I))return{processId:i.processId,deleted:!0};throw I}}));if(A||!s.isCurrent(p))return;let S=[...r.value];for(let i=0;i<k.length;i+=1){const I=k[i],D=o[i];if(I.status==="rejected"){Ie(D,I.reason);continue}R.delete(D.processId);const w=I.value;if(w.deleted){S=S.filter(C=>C.processId!==w.processId),f.value===w.processId&&K();continue}if(w.summary){const C=S.findIndex(m=>m.processId===w.processId);C>=0?S[C]=w.summary:S.push(w.summary)}w.snapshot&&f.value===w.processId&&l===w.processId&&O===b&&!_&&(h.invalidate(),d.value=w.snapshot)}r.value=S.sort((i,I)=>I.startedAt.localeCompare(i.startedAt))}function Ie(o,p){const l=(R.get(o.processId)??0)+1;if(l<=1&&!A){R.set(o.processId,l),M.enqueue([o]);return}R.delete(o.processId),n.value=G(p)}function ge(o,p){const l=new EventSource(`/api/processes/${encodeURIComponent(o)}/stream`);v=l;const b={stdout:new TextDecoder,stderr:new TextDecoder},k={stdout:"",stderr:""};let S=null;const i=()=>!A&&v===l&&f.value===o&&O===p,I=()=>{S!==null&&clearTimeout(S),S=null,k.stdout="",k.stderr=""},D=()=>{if(!i()||!_||!d.value){I();return}if(!k.stdout&&!k.stderr)return;const C={...d.value};for(const m of["stdout","stderr"]){const B=k[m];B&&(C.outputTruncated||=C[m].length+B.length>Z,C[m]=ze(C[m],B))}d.value=C,I()},w=()=>{I(),_=!1,l.close(),v=null,U(p)};l.addEventListener("snapshot",C=>{if(i())try{const m=JSON.parse(C.data);I(),b.stdout=new TextDecoder,b.stderr=new TextDecoder,h.invalidate(),d.value=m,_=m.state==="running",_e(m),_||(l.close(),v=null)}catch{w()}}),l.addEventListener("output",C=>{if(!(!i()||!_||!d.value))try{const m=JSON.parse(C.data);if(m.stream!=="stdout"&&m.stream!=="stderr")return;const B=atob(m.bytes),N=Uint8Array.from(B,ke=>ke.charCodeAt(0)),te=b[m.stream].decode(N,{stream:!0});if(!te)return;k[m.stream]+=te,k[m.stream].length>=64*1024?D():S===null&&(S=setTimeout(D,50))}catch{w()}}),l.addEventListener("exit",C=>{if(i())try{D();const m=JSON.parse(C.data);h.invalidate(),d.value?d.value={...d.value,...m,outputTruncated:d.value.outputTruncated||m.outputTruncated}:U(p);const B=r.value.findIndex(N=>N.processId===o);if(B>=0){const N=[...r.value];N[B]=W(m),r.value=N}}catch{U(p)}finally{I(),_=!1,l.close(),v=null}}),l.onerror=()=>{i()&&(I(),_=!1)}}function _e(o){const p=r.value.findIndex(b=>b.processId===o.processId);if(p<0)return;const l=[...r.value];l[p]=W(o),r.value=l}async function U(o=O){const p=h.begin(),l=f.value;if(!l){d.value=null;return}try{const b=await F(`/processes/${encodeURIComponent(l)}`,{signal:p.signal});h.isCurrent(p)&&f.value===l&&O===o&&!_&&(d.value=b)}catch(b){if(!h.isCurrent(p))return;if(X(b)){K(),J();return}n.value=G(b)}}async function Ce(o,p){if(A)return;n.value="";const l=new AbortController;z.add(l);let b=!1;try{await F(`/processes/${encodeURIComponent(o)}/${p?"kill":"terminate"}`,{method:"POST",signal:l.signal})}catch(k){if(A||l.signal.aborted)return;if(!X(k)){n.value=G(k);return}b=k instanceof ce&&k.code==="NOT_FOUND"}finally{z.delete(l)}A||l.signal.aborted||(M.enqueue([{processId:o,summary:!0,output:!0,deleted:b}]),V&&await M.drain())}function be(o){f.value!==o&&(d.value=null,f.value=o)}function K(){v?.close(),v=null,_=!1,f.value=null,d.value=null,h.invalidate()}return{items:r,selected:f,detail:d,error:n,loading:g,processOutput:he,loadInitial:J,select:be,clearSelection:K,stop:Ce}}function Ne(e,c){return{processId:c.processId,output:!!(e?.output||c.output),summary:!!(e?.summary||c.summary),deleted:!!(e?.deleted||c.deleted)}}function W(e){return{processId:e.processId,command:e.command,args:e.args,state:e.state,startedAt:e.startedAt,durationMs:e.durationMs}}function X(e){return e instanceof ce&&(e.code==="NOT_FOUND"||e.code==="CONFLICT")}const Ee={class:"panel-header process-detail-header"},Ue={class:"min-w-0 detail-header-title"},Fe={class:"panel-title text-truncate"},je={class:"panel-subtitle mono text-truncate"},Je={class:"process-detail-actions"},Ke={class:"process-output"},Ge={class:"process-full-command"},He={class:"detail-section-label"},Qe={class:"detail-facts"},We={class:"empty-panel"},Xe=ee({__name:"ProcessDetail",props:{detail:{},output:{},compact:{type:Boolean}},emits:["back","stop"],setup(e){const c=e,r=de(),f=ie(()=>c.detail?[c.detail.command,...c.detail.args].map(d).join(" "):"");function d(n){return n?/^[A-Za-z0-9_@%+=:,./-]+$/.test(n)?n:`'${n.replaceAll("'","'\\''")}'`:"''"}return(n,g)=>e.detail?($(),T(Y,{key:0,class:"panel-card process-detail-card"},{default:x(()=>[a("div",Ee,[e.compact?($(),T(j,{key:0,icon:"$mdiArrowLeft",size:"small",variant:"text","aria-label":t(r).t("$vuetify.chatroom.processes.back"),onClick:g[0]||(g[0]=s=>n.$emit("back"))},null,8,["aria-label"])):L("",!0),a("div",Ue,[a("div",Fe,u(e.detail.command),1),a("div",je,u(e.detail.processId),1)]),a("div",Je,[e.detail.state!=="running"?($(),T(ye,{key:0,value:e.detail.state},null,8,["value"])):L("",!0),e.detail.state==="running"?($(),T(j,{key:1,"prepend-icon":"$mdiStopCircleOutline",size:"x-small",variant:"tonal",color:"warning",class:"detail-action-btn",onClick:g[1]||(g[1]=s=>n.$emit("stop",e.detail.processId,!1))},{default:x(()=>[ue(u(t(r).t("$vuetify.chatroom.processes.terminate")),1)]),_:1})):L("",!0),e.detail.state==="running"?($(),T(pe,{key:2},{activator:x(({props:s})=>[y(j,ve(s,{icon:"$mdiDotsHorizontal",size:"x-small",variant:"text",class:"detail-icon-btn","aria-label":t(r).t("$vuetify.chatroom.processes.moreActions")}),null,16,["aria-label"])]),default:x(()=>[y(fe,{density:"compact"},{default:x(()=>[y(me,{title:t(r).t("$vuetify.chatroom.processes.kill"),"prepend-icon":"$mdiCloseOctagonOutline",onClick:g[2]||(g[2]=s=>n.$emit("stop",e.detail.processId,!0))},null,8,["title"])]),_:1})]),_:1})):L("",!0)])]),y(H),a("div",Ke,[y(le,{text:e.output,filename:"output.txt",highlight:e.detail.state!=="running"},null,8,["text","highlight"])]),y(H),a("div",Ge,[a("div",He,u(t(r).t("$vuetify.chatroom.processes.fullCommand")),1),y(le,{text:f.value,filename:"command.sh",language:"bash",toolbar:!1},null,8,["text"])]),y(H),a("div",Qe,[a("div",null,[a("span",null,u(t(r).t("$vuetify.chatroom.processes.pid")),1),a("strong",null,u(e.detail.pid??"—"),1)]),a("div",null,[a("span",null,u(t(r).t("$vuetify.chatroom.processes.exit")),1),a("strong",null,u(e.detail.exitCode??"—"),1)]),a("div",null,[a("span",null,u(t(r).t("$vuetify.chatroom.processes.timeout")),1),a("strong",null,u(e.detail.timedOut?t(r).t("$vuetify.chatroom.processes.yes"):t(r).t("$vuetify.chatroom.processes.no")),1)])])]),_:1})):($(),T(Y,{key:1,class:"panel-card"},{default:x(()=>[a("div",We,u(t(r).t("$vuetify.chatroom.processes.select")),1)]),_:1}))}}),Ye={class:"panel-header"},Ze={class:"panel-title"},et={class:"panel-subtitle"},tt={key:0,class:"panel-error",role:"alert"},st={key:1,class:"process-record-list",role:"grid"},ot={class:"process-record-header",role:"row"},at={role:"columnheader"},rt={role:"columnheader"},nt={role:"columnheader"},lt={class:"process-record-duration",role:"columnheader"},ct={role:"columnheader"},it=["aria-selected","data-process-id","onClick","onKeydown"],dt={class:"process-record-main"},ut=["title"],pt=["title"],ft={class:"process-record-meta"},mt={class:"process-record-started",role:"gridcell"},vt={class:"process-record-duration",role:"gridcell"},yt={class:"process-record-side",role:"gridcell"},ht={key:2,class:"empty-inline"},$t=ee({__name:"ProcessList",props:{items:{},selected:{},error:{}},emits:["select","stop"],setup(e){const c=de(),r=E(Date.now());let f=null;xe(()=>{f=setInterval(()=>r.value=Date.now(),1e3)}),Se(()=>{f&&clearInterval(f)});function d(n){return n.state==="running"?Math.max(0,r.value-Date.parse(n.startedAt)):n.durationMs}return(n,g)=>($(),T(Y,{class:"panel-card"},{default:x(()=>[a("div",Ye,[a("div",null,[a("div",Ze,u(t(c).t("$vuetify.chatroom.processes.title")),1),a("div",et,u(t(c).t("$vuetify.chatroom.processes.subtitle")),1)])]),y(H),e.error?($(),P("div",tt,[y(ae,{icon:"$mdiAlertCircleOutline",size:"18"}),a("span",null,u(e.error),1)])):L("",!0),e.items.length?($(),P("div",st,[a("div",ot,[a("span",at,u(t(c).t("$vuetify.chatroom.processes.command")),1),a("span",rt,u(t(c).t("$vuetify.chatroom.processes.arguments")),1),a("span",nt,u(t(c).t("$vuetify.chatroom.processes.started")),1),a("span",lt,u(t(c).t("$vuetify.chatroom.processes.duration")),1),a("span",ct,u(t(c).t("$vuetify.chatroom.processes.state")),1)]),($(!0),P(Oe,null,Ae(e.items,s=>($(),P("div",{key:s.processId,role:"row",tabindex:"0",class:ne(["process-record-row",{"selected-row":e.selected===s.processId}]),"aria-selected":e.selected===s.processId,"data-process-id":s.processId,onClick:h=>n.$emit("select",s.processId),onKeydown:[re(Q(h=>n.$emit("select",s.processId),["self"]),["enter"]),re(Q(h=>n.$emit("select",s.processId),["self","prevent"]),["space"])]},[a("div",dt,[a("div",{class:"process-record-command mono",role:"gridcell",title:s.command},u(s.command),9,ut),a("div",{class:ne(["process-record-args mono",{muted:!s.args.length}]),role:"gridcell",title:s.args.join(" ")},u(s.args.length?s.args.join(" "):"—"),11,pt)]),a("div",ft,[a("div",mt,u(t(De)(s.startedAt,t(Te)(t(c).current.value))),1),a("div",vt,u(t(Pe)(d(s))),1)]),a("div",yt,[s.state!=="running"?($(),T(ye,{key:0,value:s.state},null,8,["value"])):($(),P("div",{key:1,class:"process-actions",onClick:g[0]||(g[0]=Q(()=>{},["stop"]))},[y(j,{size:"x-small",variant:"text",class:"table-action-btn","aria-label":t(c).t("$vuetify.chatroom.processes.terminate"),onClick:h=>n.$emit("stop",s.processId,!1)},{default:x(()=>[y(Ve,{indeterminate:"",color:"warning",size:22,width:2},{default:x(()=>[y(ae,{icon:"$mdiStop",size:"12"})]),_:1})]),_:1},8,["aria-label","onClick"]),y(pe,null,{activator:x(({props:h})=>[y(j,ve({ref_for:!0},h,{icon:"$mdiDotsHorizontal",size:"x-small",variant:"text",class:"table-action-btn","aria-label":t(c).t("$vuetify.chatroom.processes.moreActions")}),null,16,["aria-label"])]),default:x(()=>[y(fe,{density:"compact"},{default:x(()=>[y(me,{title:t(c).t("$vuetify.chatroom.processes.kill"),"prepend-icon":"$mdiCloseOctagonOutline",onClick:h=>n.$emit("stop",s.processId,!0)},null,8,["title","onClick"])]),_:2},1024)]),_:2},1024)]))])],42,it))),128))])):($(),P("div",ht,u(t(c).t("$vuetify.chatroom.processes.empty")),1))]),_:1}))}}),It={ref:"layout",class:"master-detail-layout processes-layout"},gt={key:0,class:"master-pane"},_t={key:1,ref:"detailPane",class:"detail-pane",tabindex:"-1"},At=ee({__name:"ProcessesView",props:{revision:{},changes:{}},setup(e){const c=e,{mdAndDown:r}=Be(),{focusDetail:f,focusMaster:d}=qe(r),n=Me(()=>c.revision,()=>c.changes),{items:g,selected:s,detail:h,error:q,processOutput:V}=n;function R(v){n.select(v),f()}function z(){const v=s.value;n.clearSelection(),v&&d(`[data-process-id="${CSS.escape(v)}"]`)}function O(v,_){n.stop(v,_)}return(v,_)=>($(),P("div",It,[!t(r)||!t(s)?($(),P("div",gt,[y($t,{items:t(g),selected:t(s),error:t(q),onSelect:R,onStop:O},null,8,["items","selected","error"])])):L("",!0),!t(r)||t(s)?($(),P("div",_t,[t(r)&&t(s)&&t(q)?($(),T(Le,{key:0,type:"error",variant:"tonal",density:"compact"},{default:x(()=>[ue(u(t(q)),1)]),_:1})):L("",!0),y(Xe,{detail:t(h),output:t(V),compact:t(r),onBack:z,onStop:O},null,8,["detail","output","compact"])],512)):L("",!0)],512))}});export{At as default};
@@ -0,0 +1 @@
1
+ import{d as n,u,c as i,l as d,a4 as p,p as v,q as m,t as f,v as s,bw as C}from"./index-CFhV1jOj.js";const h=n({__name:"StateChip",props:{value:{}},setup(l){const e=l,t=u(),c=s(()=>({running:"warning",success:"success",exited:"success",error:"error",failed:"error",cancelled:"default",killed:"default"})[e.value]??"default"),r=s(()=>e.value==="running"?"$mdiProgressClock":e.value==="success"||e.value==="exited"?"$mdiCheckCircleOutline":e.value==="error"||e.value==="failed"?"$mdiAlertCircleOutline":"$mdiCircleOutline"),o=s(()=>{const a=C(e.value);return a?t.t(a):e.value});return(a,_)=>(i(),d(p,{class:"state-chip",color:c.value,"prepend-icon":r.value,size:"small",variant:"tonal"},{default:v(()=>[m(f(o.value),1)]),_:1},8,["color","prepend-icon"]))}});export{h as _};
@@ -0,0 +1 @@
1
+ .system-logs-layout{grid-template-columns:minmax(0,1.65fr) minmax(0,.85fr)}.system-log-controls{display:flex;min-width:0;align-items:center;justify-content:space-between;gap:10px;padding:8px 12px}.system-log-controls .record-filters{min-width:0;overflow-x:auto;scrollbar-width:none}.system-log-controls .record-filters::-webkit-scrollbar{display:none}.system-log-module-filter{min-width:0;max-width:45%;flex:1 1 auto}.system-log-list{container-type:inline-size}.system-log-header,.system-log-row{display:grid;grid-template-columns:minmax(0,.7fr) minmax(0,.5fr) minmax(0,.65fr) minmax(0,3.15fr);column-gap:12px;align-items:center}.system-log-header{padding:6px 12px;border-bottom:1px solid rgb(var(--v-theme-outline),.08);background:rgb(var(--v-theme-surface));color:rgb(var(--v-theme-on-surface),.46);font-size:11px;font-weight:600}.system-log-header>span:nth-child(2),.system-log-header>span:nth-child(3){justify-self:center;text-align:center}.system-log-row{width:100%;content-visibility:auto;contain-intrinsic-size:40px;min-width:0;padding:5px 12px;border:0;border-bottom:1px solid rgb(var(--v-theme-outline),.08);background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.system-log-row:hover,.system-log-row.selected-row{background:rgb(var(--v-theme-primary),.045)}.system-log-time,.system-log-module{color:rgb(var(--v-theme-on-surface),.56);font-size:11px;white-space:nowrap}.system-log-module{min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.system-log-level,.system-log-module{width:100%;justify-self:stretch;text-align:center}.system-log-message{display:flex;min-width:0;flex-direction:column;gap:2px;overflow:hidden}.system-log-message strong,.system-log-message small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.system-log-message strong{font-size:12px;font-weight:600}.system-log-message small{color:rgb(var(--v-theme-on-surface),.48);font-size:10.5px}.system-log-load-more{display:flex;justify-content:center;padding:8px 12px}.system-log-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.system-log-facts strong{overflow-wrap:anywhere}.system-log-detail-data{padding:12px 18px 18px}@container (max-width: 620px){.system-log-header{display:none}.system-log-row{grid-template-columns:max-content max-content minmax(0,1fr);grid-template-areas:"time level module" "message message message";gap:4px 8px}.system-log-time{grid-area:time}.system-log-level{grid-area:level}.system-log-module{grid-area:module;min-width:0;overflow:hidden;text-align:left;text-overflow:ellipsis}.system-log-message{grid-area:message}}@media(max-width:1100px){.system-logs-layout{grid-template-columns:minmax(0,1fr)}.system-logs-layout .detail-pane{position:static}}
@@ -0,0 +1 @@
1
+ import{$ as P,w as J,bV as Q,o as Y,b as ee,i as W,y as X,s as k,d as te,u as le,b3 as se,c as d,e as p,g as e,k as h,p as w,f as t,t as s,m as N,X as ae,b4 as K,F as q,j as Z,l as I,q as B,C as F,V as oe,h as V,n as ne,bs as ie,a4 as ue,E as re,z as T,b6 as ce,a3 as de,v as j}from"./index-CFhV1jOj.js";import{u as me}from"./useMasterDetailFocus-CMJXBPPp.js";import{_ as ve}from"./CodeViewer.vue_vue_type_script_setup_true_lang-DfPmlGC0.js";import{V as fe}from"./VSelect-B5-t612C.js";import"./VSheet-CNayLacf.js";import"./VSpacer-BYe3Z99W.js";const ge=100,x=1e3;function ye(){const u=k([]),r=k(null),l=k("all"),a=k("all"),v=k(null),S=k(!1),_=k(!1),L=k(""),n=k(!1),b=P(),f=P(),M=new Map;let C=null,E=!1;J(Q,o=>{o&&E&&D()}),J([l,a],()=>{E&&R()}),Y(()=>{E=!0,D(),R()}),ee(()=>{E=!1,C?.close(),C=null});async function R(){f.invalidate(),_.value=!1,M.clear();const o=b.begin();S.value=!0,L.value="",n.value=!1;try{const g=await W(H(l.value,a.value),{signal:o.signal});if(!b.isCurrent(o))return;const c=G(g.items,[...M.values()]);u.value=c.slice(0,x),n.value=c.length>x||u.value.length>=x&&g.nextCursor!==null,v.value=n.value?null:g.nextCursor,r.value&&(r.value=u.value.find($=>$.id===r.value?.id)??null),M.clear()}catch(g){b.isCurrent(o)&&(L.value=X(g))}finally{b.isCurrent(o)&&(S.value=!1)}}async function U(){if(S.value||!v.value||_.value)return;const o=f.begin(),g=v.value;_.value=!0,L.value="";try{const c=await W(H(l.value,a.value,g),{signal:o.signal});if(!f.isCurrent(o))return;const $=G(u.value,c.items);u.value=$.slice(0,x),n.value=$.length>x||u.value.length>=x&&c.nextCursor!==null,v.value=n.value?null:c.nextCursor}catch(c){f.isCurrent(o)&&(L.value=X(c))}finally{f.isCurrent(o)&&(_.value=!1)}}function D(){C?.close();const o=new EventSource("/api/logs/stream");C=o,o.addEventListener("open",()=>{C===o&&R()}),o.addEventListener("log",g=>{if(C!==o)return;const c=pe(g);if(!c||!z(c))return;S.value&&M.set(c.id,c);const $=G([c],u.value);$.length>x&&(n.value=!0),u.value=$.slice(0,x),n.value&&(v.value=null),r.value?.id===c.id&&(r.value=c)})}function z(o){return(l.value==="all"||o.level===l.value)&&(a.value==="all"||o.module===a.value)}function O(o){r.value=o}function A(){r.value=null}return{records:u,selected:r,level:l,module:a,nextCursor:v,loading:S,loadingMore:_,error:L,limitReached:n,loadInitial:R,loadMore:U,select:O,clearSelection:A}}function G(u,r){const l=new Map;for(const a of r)l.set(a.id,a);for(const a of u)l.set(a.id,a);return[...l.values()].sort((a,v)=>v.timestamp.localeCompare(a.timestamp)||v.id.localeCompare(a.id))}function pe(u){if(!(u instanceof MessageEvent)||typeof u.data!="string")return null;try{const r=JSON.parse(u.data);return typeof r?.id=="string"&&typeof r?.message=="string"?r:null}catch{return null}}function H(u,r,l){const a=new URLSearchParams({limit:String(ge)});return u!=="all"&&a.set("level",u),r!=="all"&&a.set("module",r),l&&a.set("cursor",l),`/logs?${a}`}const he={ref:"layout",class:"master-detail-layout system-logs-layout"},_e={key:0,class:"master-pane"},Le={class:"panel-header system-logs-header"},Ce={class:"panel-title"},$e={class:"panel-subtitle"},ke={class:"system-log-controls"},be={key:0,class:"panel-error",role:"alert"},we={key:1,class:"system-log-list"},Ve={class:"system-log-header","aria-hidden":"true"},xe=["aria-current","data-log-id","onClick"],Se=["title"],Re={class:"system-log-level"},Me={class:"system-log-module mono"},Ee={class:"system-log-message"},Ie={class:"mono"},De={key:2,class:"empty-inline"},Ne={key:4,class:"system-log-load-more"},Be={key:1,ref:"detailPane",class:"detail-pane",tabindex:"-1"},Ue={class:"panel-header compact-header"},ze={class:"min-w-0 detail-header-title"},Oe={class:"panel-title text-truncate"},Ae={class:"panel-subtitle mono text-truncate"},qe={class:"detail-facts system-log-facts"},Fe={class:"system-log-detail-data"},Te={class:"detail-section-label"},je={class:"empty-panel"},He=te({__name:"SystemLogsView",setup(u){const r=["app","http","auth","cloud","plugin","mcp"],l=le(),{mdAndDown:a}=se(),{focusDetail:v,focusMaster:S}=me(a),_=ye(),{records:L,selected:n,level:b,module:f,nextCursor:M,loading:C,loadingMore:E,error:R,limitReached:U,loadInitial:D,loadMore:z}=_,O=j(()=>[{title:l.t("$vuetify.chatroom.systemLogs.allLevels"),value:"all"},{title:"INFO",value:"info"},{title:"WARN",value:"warn"},{title:"ERROR",value:"error"},{title:"DEBUG",value:"debug"}]),A=j(()=>{const m=new Set(r);for(const y of L.value)m.add(y.module);return f.value!=="all"&&m.add(f.value),[{title:l.t("$vuetify.chatroom.systemLogs.allModules"),value:"all"},...[...m].sort((y,i)=>y.localeCompare(i)).map(y=>({title:y,value:y}))]}),o=j(()=>n.value?.data?JSON.stringify(n.value.data,null,2):"");function g(m){if(m==="error")return"error";if(m==="warn")return"warning";if(m==="info")return"primary"}function c(m){_.select(m),v()}function $(){const m=n.value?.id??null;_.clearSelection(),m&&S(`[data-log-id="${CSS.escape(m)}"]`)}return(m,y)=>(d(),p("div",he,[!e(a)||!e(n)?(d(),p("div",_e,[h(T,{class:"panel-card"},{default:w(()=>[t("div",Le,[t("div",null,[t("div",Ce,s(e(l).t("$vuetify.chatroom.systemLogs.title")),1),t("div",$e,s(e(l).t("$vuetify.chatroom.systemLogs.subtitle")),1)]),h(N,{icon:"$mdiRefresh",size:"small",variant:"text",loading:e(C),"aria-label":e(l).t("$vuetify.chatroom.systemLogs.refresh"),onClick:e(D)},null,8,["loading","aria-label","onClick"])]),t("div",ke,[h(ae,{modelValue:e(b),"onUpdate:modelValue":y[0]||(y[0]=i=>K(b)?b.value=i:null),mandatory:"",variant:"text",class:"record-filters"},{default:w(()=>[(d(!0),p(q,null,Z(O.value,i=>(d(),I(N,{key:i.value,value:i.value,size:"small"},{default:w(()=>[B(s(i.title),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"]),h(fe,{modelValue:e(f),"onUpdate:modelValue":y[1]||(y[1]=i=>K(f)?f.value=i:null),items:A.value,"item-title":"title","item-value":"value","aria-label":e(l).t("$vuetify.chatroom.systemLogs.module"),density:"compact",variant:"outlined","hide-details":"",class:"system-log-module-filter"},null,8,["modelValue","items","aria-label"])]),h(F),e(R)?(d(),p("div",be,[h(oe,{icon:"$mdiAlertCircleOutline",size:"18"}),t("span",null,s(e(R)),1)])):V("",!0),e(L).length?(d(),p("div",we,[t("div",Ve,[t("span",null,s(e(l).t("$vuetify.chatroom.systemLogs.time")),1),t("span",null,s(e(l).t("$vuetify.chatroom.systemLogs.level")),1),t("span",null,s(e(l).t("$vuetify.chatroom.systemLogs.module")),1),t("span",null,s(e(l).t("$vuetify.chatroom.systemLogs.message")),1)]),(d(!0),p(q,null,Z(e(L),i=>(d(),p("button",{key:i.id,type:"button",class:ne(["system-log-row",{"selected-row":e(n)?.id===i.id}]),"aria-current":e(n)?.id===i.id?"true":void 0,"data-log-id":i.id,onClick:Ge=>c(i)},[t("span",{class:"system-log-time mono",title:i.timestamp},s(e(ie)(i.timestamp)),9,Se),t("span",Re,[h(ue,{size:"x-small",variant:"tonal",color:g(i.level)},{default:w(()=>[B(s(i.level.toUpperCase()),1)]),_:2},1032,["color"])]),t("span",Me,s(i.module),1),t("span",Ee,[t("strong",null,s(i.message),1),t("small",Ie,s(i.event),1)])],10,xe))),128))])):e(C)?V("",!0):(d(),p("div",De,s(e(l).t("$vuetify.chatroom.systemLogs.empty")),1)),e(U)?(d(),I(re,{key:3,type:"info",variant:"tonal",density:"compact",class:"system-log-window-limit"},{default:w(()=>[B(s(e(l).t("$vuetify.chatroom.systemLogs.windowLimit")),1)]),_:1})):V("",!0),e(M)?(d(),p("div",Ne,[h(N,{variant:"text",size:"small",loading:e(E),onClick:e(z)},{default:w(()=>[B(s(e(l).t("$vuetify.chatroom.systemLogs.loadMore")),1)]),_:1},8,["loading","onClick"])])):V("",!0)]),_:1})])):V("",!0),!e(a)||e(n)?(d(),p("div",Be,[e(n)?(d(),I(T,{key:0,class:"panel-card"},{default:w(()=>[t("div",Ue,[e(a)?(d(),I(N,{key:0,icon:"$mdiArrowLeft",size:"small",variant:"text","aria-label":e(l).t("$vuetify.chatroom.systemLogs.back"),onClick:$},null,8,["aria-label"])):V("",!0),t("div",ze,[t("div",Oe,s(e(n).message),1),t("div",Ae,s(e(n).event),1)])]),h(F),t("div",qe,[t("div",null,[t("span",null,s(e(l).t("$vuetify.chatroom.systemLogs.time")),1),t("strong",null,s(e(ce)(e(n).timestamp,e(de)(e(l).current.value))),1)]),t("div",null,[t("span",null,s(e(l).t("$vuetify.chatroom.systemLogs.level")),1),t("strong",null,s(e(n).level.toUpperCase()),1)]),t("div",null,[t("span",null,s(e(l).t("$vuetify.chatroom.systemLogs.module")),1),t("strong",null,s(e(n).module),1)]),t("div",null,[t("span",null,s(e(l).t("$vuetify.chatroom.systemLogs.event")),1),t("strong",null,s(e(n).event),1)])]),o.value?(d(),p(q,{key:0},[h(F),t("div",Fe,[t("div",Te,s(e(l).t("$vuetify.chatroom.systemLogs.data")),1),h(ve,{text:o.value,filename:"log.json",language:"json",toolbar:!1},null,8,["text"])])],64)):V("",!0)]),_:1})):(d(),I(T,{key:1,class:"panel-card"},{default:w(()=>[t("div",je,s(e(l).t("$vuetify.chatroom.systemLogs.select")),1)]),_:1}))],512)):V("",!0)],512))}});export{He as default};
@@ -0,0 +1 @@
1
+ .xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;inset:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.terminal-canvas-shell[data-v-1a588bbe]{display:flex;position:relative;flex:1;min-width:0;min-height:0;background:rgb(var(--v-theme-surface));color:rgb(var(--v-theme-on-surface))}.terminal-canvas[data-v-1a588bbe]{background:rgb(var(--v-theme-surface));color:rgb(var(--v-theme-on-surface));flex:1;min-width:0;min-height:0;font-family:monospace;font-size:inherit}.terminal-connection[data-v-1a588bbe]{position:absolute;inset-block-start:8px;inset-inline-end:12px;pointer-events:none}.terminal-panel-view[data-v-043877e2]{display:flex;flex-direction:column;flex:1;min-width:0;min-height:0;background:rgb(var(--v-theme-surface))}.terminal-panel-toolbar[data-v-043877e2]{display:flex;flex:0 0 auto;align-items:center;gap:10px;min-width:0;padding:4px 10px;border-bottom:1px solid rgb(var(--v-theme-outline),.1)}.terminal-panel-title[data-v-043877e2]{flex:0 0 auto}.terminal-tabs[data-v-043877e2]{display:flex;flex:1;min-width:0;overflow-x:auto;gap:8px;scrollbar-width:thin}.terminal-tab[data-v-043877e2]{display:flex;flex:0 0 auto;align-items:center;max-width:min(220px,55vw);border-radius:6px 6px 0 0}.terminal-tab--selected[data-v-043877e2]{background:rgb(var(--v-theme-primary),.07);box-shadow:inset 0 -2px rgb(var(--v-theme-primary))}.terminal-tab-label[data-v-043877e2]{border:0;border-radius:0;background:transparent;appearance:none;font:inherit;white-space:nowrap;display:flex;align-items:center;gap:6px;min-width:0;padding:5px 8px;color:inherit;cursor:pointer}.terminal-panel-actions[data-v-043877e2]{display:flex;flex:0 0 auto}.terminal-panel-error[data-v-043877e2]{display:flex;align-items:center;gap:8px;flex:0 0 auto;min-width:0;padding:3px 10px;color:rgb(var(--v-theme-error));background:rgb(var(--v-theme-error),.08)}.terminal-panel-error>span[data-v-043877e2]{flex:1;min-width:0}.terminal-placeholder[data-v-043877e2]{display:flex;flex-direction:column;flex:1;gap:12px;min-height:0;align-items:center;justify-content:center;padding:16px}