@zhanguym/chatroom 1.0.0 → 1.1.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 (165) hide show
  1. package/dist/app/application.d.ts +0 -1
  2. package/dist/app/application.js +8 -7
  3. package/dist/app/event-bus.d.ts +13 -10
  4. package/dist/app/external-access-registry.d.ts +1 -0
  5. package/dist/app/external-access-registry.js +3 -0
  6. package/dist/app/git-access.d.ts +50 -0
  7. package/dist/app/git-access.js +2 -0
  8. package/dist/app/service-registry.d.ts +11 -0
  9. package/dist/app/service-registry.js +17 -0
  10. package/dist/app/workspace-access.d.ts +24 -0
  11. package/dist/app/workspace-access.js +2 -0
  12. package/dist/auth/ingress-policy.d.ts +2 -0
  13. package/dist/auth/ingress-policy.js +14 -2
  14. package/dist/auth/passkey-service.js +1 -1
  15. package/dist/cli/run-cli.js +1 -1
  16. package/dist/core/fs/safe-directory.d.ts +9 -0
  17. package/dist/core/fs/safe-directory.js +129 -0
  18. package/dist/core/operations/repository.d.ts +2 -0
  19. package/dist/core/runtime/line-process.d.ts +19 -0
  20. package/dist/core/runtime/line-process.js +51 -0
  21. package/dist/infrastructure/database/operation-repository.js +8 -2
  22. package/dist/infrastructure/database/schema.d.ts +1 -1
  23. package/dist/infrastructure/database/schema.js +62 -0
  24. package/dist/infrastructure/http/http-server.js +1 -1
  25. package/dist/infrastructure/logging/system-log.js +2 -1
  26. package/dist/native/linux/chatroom-computer-helper +0 -0
  27. package/dist/native/macos/ChatRoomComputerHelper.app/Contents/MacOS/chatroom-computer-helper +0 -0
  28. package/dist/native/windows/chatroom-computer-helper.exe +0 -0
  29. package/dist/operations/operation-log.js +16 -4
  30. package/dist/plugins/agent/async-queue.d.ts +10 -0
  31. package/dist/plugins/agent/async-queue.js +49 -0
  32. package/dist/plugins/agent/mcp.d.ts +3 -0
  33. package/dist/plugins/agent/mcp.js +502 -0
  34. package/dist/plugins/agent/plugin.d.ts +4 -0
  35. package/dist/plugins/agent/plugin.js +35 -0
  36. package/dist/plugins/agent/provider.d.ts +132 -0
  37. package/dist/plugins/agent/providers/codex/mapping.d.ts +56 -0
  38. package/dist/plugins/agent/providers/codex/mapping.js +427 -0
  39. package/dist/plugins/agent/providers/codex/provider.d.ts +84 -0
  40. package/dist/plugins/agent/providers/codex/provider.js +828 -0
  41. package/dist/plugins/agent/providers/codex/rpc.d.ts +40 -0
  42. package/dist/plugins/agent/providers/codex/rpc.js +227 -0
  43. package/dist/plugins/agent/providers/common.d.ts +11 -0
  44. package/dist/plugins/agent/providers/common.js +75 -0
  45. package/dist/plugins/agent/providers/index.d.ts +3 -0
  46. package/dist/plugins/agent/providers/index.js +4 -0
  47. package/dist/plugins/agent/repository.d.ts +21 -0
  48. package/dist/plugins/agent/repository.js +226 -0
  49. package/dist/plugins/agent/runtime-config.d.ts +5 -0
  50. package/dist/plugins/agent/runtime-config.js +60 -0
  51. package/dist/plugins/agent/runtime-files.d.ts +8 -0
  52. package/dist/plugins/agent/runtime-files.js +170 -0
  53. package/dist/plugins/agent/runtime-state.d.ts +17 -0
  54. package/dist/plugins/agent/runtime-state.js +133 -0
  55. package/dist/plugins/agent/runtime.d.ts +60 -0
  56. package/dist/plugins/agent/runtime.js +928 -0
  57. package/dist/plugins/agent/store.d.ts +17 -0
  58. package/dist/plugins/agent/store.js +1 -0
  59. package/dist/plugins/agent/types.d.ts +320 -0
  60. package/dist/plugins/agent/types.js +13 -0
  61. package/dist/plugins/cloud/plugin.d.ts +1 -1
  62. package/dist/plugins/cloud/plugin.js +3 -3
  63. package/dist/plugins/cloud/tunnel-client.js +6 -7
  64. package/dist/plugins/computer/computer-native-backend.js +9 -1
  65. package/dist/plugins/computer/computer-native-host.js +21 -5
  66. package/dist/plugins/computer/computer-schemas.d.ts +7 -7
  67. package/dist/plugins/computer/computer-service.d.ts +3 -0
  68. package/dist/plugins/computer/computer-service.js +33 -1
  69. package/dist/plugins/computer/plugin.d.ts +1 -1
  70. package/dist/plugins/computer/plugin.js +1 -1
  71. package/dist/plugins/computer/types.d.ts +1 -0
  72. package/dist/plugins/git/git-service.d.ts +3 -2
  73. package/dist/plugins/git/git-service.js +37 -1
  74. package/dist/plugins/git/plugin.d.ts +0 -2
  75. package/dist/plugins/git/plugin.js +3 -3
  76. package/dist/plugins/process/plugin.d.ts +1 -1
  77. package/dist/plugins/process/plugin.js +3 -3
  78. package/dist/plugins/process/process-supervisor.d.ts +1 -0
  79. package/dist/plugins/process/process-supervisor.js +15 -4
  80. package/dist/plugins/types.d.ts +1 -11
  81. package/dist/plugins/types.js +1 -17
  82. package/dist/plugins/web/api-types.d.ts +20 -5
  83. package/dist/plugins/web/http/agent-api-router.d.ts +3 -0
  84. package/dist/plugins/web/http/agent-api-router.js +254 -0
  85. package/dist/plugins/web/http/api-router.js +9 -0
  86. package/dist/plugins/web/http/computer-api-router.js +21 -6
  87. package/dist/plugins/web/http/process-api-router.js +3 -0
  88. package/dist/plugins/web/http/workspace-api-router.js +198 -8
  89. package/dist/plugins/web/plugin.d.ts +1 -1
  90. package/dist/plugins/web/plugin.js +5 -4
  91. package/dist/plugins/web/runtime.d.ts +6 -3
  92. package/dist/plugins/web/runtime.js +6 -1
  93. package/dist/plugins/workspace/mcp.d.ts +1 -1
  94. package/dist/plugins/workspace/mcp.js +125 -1
  95. package/dist/plugins/workspace/metadata.d.ts +1 -1
  96. package/dist/plugins/workspace/plugin.d.ts +1 -1
  97. package/dist/plugins/workspace/plugin.js +9 -3
  98. package/dist/plugins/workspace/types.d.ts +1 -18
  99. package/dist/plugins/workspace/workspace-fs.d.ts +19 -3
  100. package/dist/plugins/workspace/workspace-fs.js +112 -120
  101. package/dist/plugins/workspace/workspace-root-policy.d.ts +9 -0
  102. package/dist/plugins/workspace/workspace-root-policy.js +56 -0
  103. package/dist/plugins/workspace/workspace-service.d.ts +13 -6
  104. package/dist/plugins/workspace/workspace-service.js +57 -49
  105. package/dist/web/assets/AgentView-BGLIBoxF.css +1 -0
  106. package/dist/web/assets/AgentView-BwL3S7sb.js +4 -0
  107. package/dist/web/assets/CloudView-DH4sOXJr.js +1 -0
  108. package/dist/web/assets/{CloudView-CHjVbp-5.css → CloudView-DVVvwuWW.css} +1 -1
  109. package/dist/web/assets/CodeViewer.vue_vue_type_script_setup_true_lang-BaC1eGzG.js +3 -0
  110. package/dist/web/assets/ComputerView-BJSjCxFr.js +1 -0
  111. package/dist/web/assets/ComputerView-DWzfSYJ7.css +1 -0
  112. package/dist/web/assets/MarkdownContent-AdAmmDn5.js +16 -0
  113. package/dist/web/assets/MarkdownContent-B_5zTG8c.css +1 -0
  114. package/dist/web/assets/McpToolsView-CPaWUG9h.js +1 -0
  115. package/dist/web/assets/McpToolsView-DjxPbTHj.css +1 -0
  116. package/dist/web/assets/OperationsView-BjTY2lIh.css +1 -0
  117. package/dist/web/assets/OperationsView-D2FtLkHn.js +4 -0
  118. package/dist/web/assets/ProcessesView-BHOsaM2H.js +4 -0
  119. package/dist/web/assets/ProcessesView-Ce6iVwjA.css +1 -0
  120. package/dist/web/assets/StateChip.vue_vue_type_script_setup_true_lang-iW1SYlX_.js +1 -0
  121. package/dist/web/assets/SystemLogsView-By5ijObd.js +1 -0
  122. package/dist/web/assets/SystemLogsView-CofP4Jvi.css +1 -0
  123. package/dist/web/assets/VSelect-CLnwhyWJ.js +1 -0
  124. package/dist/web/assets/VSpacer-dDRRKhUn.js +1 -0
  125. package/dist/web/assets/VSwitch-CGzxwZuj.js +1 -0
  126. package/dist/web/assets/VTabs-7aSwjrKs.js +1 -0
  127. package/dist/web/assets/VTextarea-D1_2FwMe.js +1 -0
  128. package/dist/web/assets/VTextarea-xiMOHEu-.css +1 -0
  129. package/dist/web/assets/WorkspaceDownloadPreview-BjuqUdB9.js +1 -0
  130. package/dist/web/assets/WorkspaceDownloadPreview-DnxhH5Q7.css +1 -0
  131. package/dist/web/assets/WorkspaceMediaPreview-D-igEnka.css +1 -0
  132. package/dist/web/assets/WorkspaceMediaPreview-LwXeVOY2.js +3 -0
  133. package/dist/web/assets/WorkspacesView-ClA6xcjn.css +1 -0
  134. package/dist/web/assets/WorkspacesView-DHl28eWf.js +2 -0
  135. package/dist/web/assets/entity-refresh-queue-wQii8Dl5.js +1 -0
  136. package/dist/web/assets/index-BzRlodie.js +19 -0
  137. package/dist/web/assets/index-CZ-4tJlF.css +1 -0
  138. package/dist/web/assets/{syntax-highlight-B5ArnyrC.js → syntax-highlight-C_fuMcwC.js} +1 -1
  139. package/dist/web/assets/useMasterDetailFocus-BQAutDO9.js +1 -0
  140. package/dist/web/assets/useOperationLabels-C-zgM_ET.js +1 -0
  141. package/dist/web/index.html +2 -2
  142. package/package.json +4 -2
  143. package/dist/plugins/git/types.d.ts +0 -32
  144. package/dist/web/assets/CloudView-CvX0dkgu.js +0 -1
  145. package/dist/web/assets/CodeViewer.vue_vue_type_script_setup_true_lang-B5TxGkUW.js +0 -3
  146. package/dist/web/assets/ComputerView-91Z9Cefw.css +0 -1
  147. package/dist/web/assets/ComputerView-OOyEqWml.js +0 -1
  148. package/dist/web/assets/McpToolsView-BTnolyS6.css +0 -1
  149. package/dist/web/assets/McpToolsView-DjXWTKrZ.js +0 -1
  150. package/dist/web/assets/OperationsView-DqTY51Cr.js +0 -4
  151. package/dist/web/assets/ProcessesView-C13BykIa.js +0 -4
  152. package/dist/web/assets/StateChip.vue_vue_type_script_setup_true_lang-DyOhJmR6.js +0 -1
  153. package/dist/web/assets/SystemLogsView-Ci0u4BTb.js +0 -1
  154. package/dist/web/assets/VSelect-DrRpKyYI.js +0 -1
  155. package/dist/web/assets/VSpacer-C3wAY3F0.js +0 -1
  156. package/dist/web/assets/VSwitch-CxusR4iO.js +0 -1
  157. package/dist/web/assets/VTabs-qBcuuXh3.js +0 -1
  158. package/dist/web/assets/WorkspacesView-BzQ0aH74.css +0 -1
  159. package/dist/web/assets/WorkspacesView-CijIvfsp.js +0 -2
  160. package/dist/web/assets/index-BegKQ3Yd.js +0 -19
  161. package/dist/web/assets/index-CkjqXRSj.css +0 -1
  162. package/dist/web/assets/useOperationLabels-BDjzGDkT.js +0 -1
  163. /package/dist/{plugins/process → core/runtime}/head-tail-buffer.d.ts +0 -0
  164. /package/dist/{plugins/process → core/runtime}/head-tail-buffer.js +0 -0
  165. /package/dist/plugins/{git/types.js → agent/provider.js} +0 -0
@@ -0,0 +1 @@
1
+ import{aa as ue,a$ as U,ae as oe,aS as ie,aZ as re,b0 as se,a7 as g,b1 as ce,_ as de,w as c,a4 as fe,ak as ve,as as me,a8 as F,aL as R,aB as xe,aw as ge,b2 as he,ax as we,aT as be,b3 as Ve,E as ye,aW as Fe,aV as $,b4 as W,g as A,p as o,F as B,b5 as Ce,a1 as M,aM as O,b6 as Pe,Q as ke,B as C,b7 as Ie,b8 as Se,b9 as Ne}from"./index-BzRlodie.js";const He=ge({autoGrow:Boolean,autofocus:Boolean,counter:[Boolean,Number,String],counterValue:Function,prefix:String,placeholder:String,persistentPlaceholder:Boolean,persistentCounter:Boolean,noResize:Boolean,rows:{type:[Number,String],default:5,validator:e=>!isNaN(parseFloat(e))},maxHeight:{type:[Number,String],validator:e=>!isNaN(parseFloat(e))},maxRows:{type:[Number,String],validator:e=>!isNaN(parseFloat(e))},suffix:String,modelModifiers:Object,...Ve(),...we(be(),["direction"]),...he()},"VTextarea"),Ae=ue()({name:"VTextarea",directives:{vIntersect:U},inheritAttrs:!1,props:He(),emits:{"click:control":e=>!0,"mousedown:control":e=>!0,"update:focused":e=>!0,"update:modelValue":e=>!0,"update:rows":e=>!0},setup(e,{attrs:P,emit:k,slots:d}){const l=oe(e,"modelValue"),{isFocused:f,focus:j,blur:L}=ie(e),{onIntersect:Q}=Se(e),Z=C(()=>typeof e.counterValue=="function"?e.counterValue(l.value):(l.value||"").toString().length),q=C(()=>{if(P.maxlength)return P.maxlength;if(!(!e.counter||typeof e.counter!="number"&&typeof e.counter!="string"))return e.counter}),z=g(),w=g(),T=ye(""),v=g(),I=g(0),{platform:J}=re(),b=se(e),K=C(()=>e.persistentPlaceholder||f.value||e.active);function S(){b.isSuppressing.value&&b.update(),v.value!==Ne()&&v.value?.focus(),f.value||j()}function X(t){S(),k("click:control",t)}function Y(t){k("mousedown:control",t)}function p(t){t.stopPropagation(),S(),F(()=>{l.value="",Ie(e["onClick:clear"],t)})}function ee(t){const a=t.target;if(!e.modelModifiers?.trim){l.value=a.value;return}const u=a.value,x=a.selectionStart,r=a.selectionEnd;l.value=u,F(()=>{let s=0;u.trimStart().length===a.value.length&&(s=u.length-a.value.length),x!=null&&(a.selectionStart=x-s),r!=null&&(a.selectionEnd=r-s)})}const m=g(),h=g(Number(e.rows)),V=C(()=>["plain","underlined"].includes(e.variant));ce(()=>{e.autoGrow||(h.value=Number(e.rows))});function i(){F(()=>{if(!v.value)return;if(J.value.firefox){I.value=12;return}const{offsetWidth:t,clientWidth:a}=v.value;I.value=Math.max(0,t-a)}),e.autoGrow&&F(()=>{if(!m.value||!w.value)return;const t=getComputedStyle(m.value),a=getComputedStyle(w.value.$el),u=parseFloat(t.getPropertyValue("--v-field-padding-top"))+parseFloat(t.getPropertyValue("--v-input-padding-top"))+parseFloat(t.getPropertyValue("--v-field-padding-bottom")),x=m.value.scrollHeight,r=parseFloat(t.lineHeight),s=Math.max(parseFloat(e.rows)*r+u,parseFloat(a.getPropertyValue("--v-input-control-height"))),N=e.maxHeight?parseFloat(e.maxHeight):parseFloat(e.maxRows)*r+u||1/0,n=xe(x??0,s,N);h.value=Math.floor((n-u)/r),T.value=R(n)})}de(i),c(l,i),c(()=>e.rows,i),c(()=>e.maxHeight,i),c(()=>e.maxRows,i),c(()=>e.density,i),c(h,t=>{k("update:rows",t)});let y;return c(m,t=>{t?(y=new ResizeObserver(i),y.observe(m.value)):y?.disconnect()}),fe(()=>{y?.disconnect()}),ve(()=>{const t=!!(d.counter||e.counter||e.counterValue),a=e.hideDetails!==!0&&!!(d.details||t&&(e.persistentCounter||e.hideDetails===!1||f.value)),[u,x]=Fe(P),{modelValue:r,...s}=$.filterProps(e),N={...W.filterProps(e),"onClick:clear":p};return A($,M({ref:z,modelValue:l.value,"onUpdate:modelValue":n=>l.value=n,class:["v-textarea v-text-field",{"v-textarea--prefixed":e.prefix,"v-textarea--suffixed":e.suffix,"v-text-field--prefixed":e.prefix,"v-text-field--suffixed":e.suffix,"v-textarea--auto-grow":e.autoGrow,"v-textarea--no-resize":e.noResize||e.autoGrow,"v-input--plain-underlined":V.value},e.class],style:[{"--v-textarea-max-height":e.maxHeight?R(e.maxHeight):void 0,"--v-textarea-scroll-bar-width":R(I.value)},e.style]},u,s,{centerAffix:h.value===1&&!V.value,focused:f.value,indentDetails:e.indentDetails??!V.value}),{...d,default:({id:n,isDisabled:_,isDirty:E,isReadonly:te,isValid:ae,hasDetails:le})=>A(W,M({ref:w,style:{"--v-textarea-control-height":T.value},onClick:X,onMousedown:Y,"onClick:prependInner":e["onClick:prependInner"],"onClick:appendInner":e["onClick:appendInner"]},N,{id:n.value,active:K.value||E.value,labelId:`${n.value}-label`,centerAffix:h.value===1&&!V.value,dirty:E.value||e.dirty,disabled:_.value,focused:f.value,details:le.value,error:ae.value===!1}),{...d,default:({props:{class:G,...D},controlRef:ne})=>o(B,null,[e.prefix&&o("span",{class:"v-text-field__prefix"},[e.prefix]),O(o("textarea",M({ref:H=>v.value=ne.value=H,class:G,value:l.value,onInput:ee,autofocus:e.autofocus,readonly:te.value,disabled:_.value,placeholder:e.placeholder,rows:e.rows,name:b.fieldName.value,autocomplete:b.fieldAutocomplete.value,onFocus:S,onBlur:L,"aria-labelledby":`${n.value}-label`},D,x),null),[[U,{handler:Q},null,{once:!0}]]),e.autoGrow&&O(o("textarea",{class:ke([G,"v-textarea__sizer"]),id:`${D.id}-sizer`,"onUpdate:modelValue":H=>l.value=H,ref:m,readonly:!0,"aria-hidden":"true"},null),[[Pe,l.value]]),e.suffix&&o("span",{class:"v-text-field__suffix"},[e.suffix])])}),details:a?n=>o(B,null,[d.details?.(n),t&&o(B,null,[o("span",null,null),A(Ce,{active:e.persistentCounter||f.value,value:Z.value,max:q.value,disabled:e.disabled},d.counter)])]):void 0})}),me({},z,w,v)}});export{Ae as V};
@@ -0,0 +1 @@
1
+ @layer vuetify-components{.v-textarea{--v-textarea-max-height: initial}.v-textarea .v-field{--v-textarea-control-height: var(--v-input-control-height)}.v-textarea .v-field:not(.v-field--no-label,.v-field--active) textarea::placeholder{opacity:0}.v-textarea .v-field__field{--v-input-control-height: var(--v-textarea-control-height)}.v-textarea .v-field__input{max-height:var(--v-textarea-max-height);flex:1 1 auto;outline:none;-webkit-mask-image:linear-gradient(to bottom,transparent,transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px),black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px)),linear-gradient(to right,transparent,transparent calc(100% - var(--v-textarea-scroll-bar-width, 16px)),black calc(100% - var(--v-textarea-scroll-bar-width, 16px)));mask-image:linear-gradient(to bottom,transparent,transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px),black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px)),linear-gradient(to right,transparent,transparent calc(100% - var(--v-textarea-scroll-bar-width, 16px)),black calc(100% - var(--v-textarea-scroll-bar-width, 16px)))}.v-textarea .v-field__input.v-textarea__sizer{visibility:hidden;position:absolute;top:0;left:0;pointer-events:none}}@layer vuetify-overrides{.v-textarea .v-field__input.v-textarea__sizer{height:0;min-height:0}}@layer vuetify-components{.v-textarea--no-resize .v-field__input{resize:none}.v-textarea textarea{flex:1;min-width:0;height:100%;transition:.15s opacity cubic-bezier(.4,0,.2,1)}.v-textarea textarea:focus,.v-textarea textarea:active{outline:none}.v-textarea textarea:invalid{box-shadow:none}}
@@ -0,0 +1 @@
1
+ import{d as P,u as B,a as U,w as N,b as T,e as W,o as e,c as l,f as r,g as s,V as F,h as L,i as S,j as w,t as k,k as C,l as i,m as _,n as A,p as E,q as O,r as g,s as D,v as M,F as R,x as q,y as j,z,A as I,B as x,C as K,D as Q,E as b}from"./index-BzRlodie.js";import{_ as G}from"./CodeViewer.vue_vue_type_script_setup_true_lang-BaC1eGzG.js";import{M as H}from"./MarkdownContent-AdAmmDn5.js";import{W as J,a as X}from"./WorkspaceMediaPreview-LwXeVOY2.js";import{_ as Y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./VSpacer-dDRRKhUn.js";import"./syntax-highlight-C_fuMcwC.js";const Z={class:"workspace-download-preview-body"},ee=["src","alt"],ae=P({__name:"WorkspaceDownloadPreview",props:I({workspace:{},path:{}},{modelValue:{type:Boolean,required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(a){const o=a,d=B(a,"modelValue"),v=U(),t=x(()=>K(o.path)),h=x(()=>Q(o.path)),$=x(()=>`/api/workspace/file/${t.value==="image"?"image":"preview"}?${new URLSearchParams({workspace:o.workspace,path:o.path})}`),n=b(null),p=b(!1),m=b("");return N([d,()=>o.workspace,()=>o.path],([y],u,f)=>{if(n.value=null,m.value="",p.value=!1,!y||t.value!=="text")return;const c=new AbortController;f(()=>c.abort()),p.value=!0,T(`/workspace/file?${new URLSearchParams({workspace:o.workspace,path:o.path})}`,{signal:c.signal}).then(V=>{c.signal.aborted||(n.value=V)}).catch(V=>{c.signal.aborted||(m.value=W(V))}).finally(()=>{c.signal.aborted||(p.value=!1)})},{immediate:!0}),(y,u)=>(e(),l(z,{modelValue:d.value,"onUpdate:modelValue":u[1]||(u[1]=f=>d.value=f),fullscreen:""},{default:r(()=>[s(F,{class:"workspace-download-preview"},{default:r(()=>[s(L,{density:"comfortable",color:"surface"},{default:r(()=>[s(S,{class:"text-body-1 text-truncate",title:a.path},{default:r(()=>[w(k(h.value),1)]),_:1},8,["title"]),s(C,{variant:"text","prepend-icon":"$mdiDownloadOutline",href:i(_)(a.workspace,a.path),download:h.value},{default:r(()=>[w(k(i(v).t("$vuetify.chatroom.files.download")),1)]),_:1},8,["href","download"]),s(C,{icon:"$mdiClose",variant:"text","aria-label":i(v).t("$vuetify.chatroom.common.close"),onClick:u[0]||(u[0]=f=>d.value=!1)},null,8,["aria-label"])]),_:1}),s(A),E("div",Z,[p.value?(e(),l(O,{key:0,indeterminate:""})):g("",!0),m.value?(e(),l(D,{key:1,type:"error",variant:"tonal",density:"compact"},{default:r(()=>[w(k(m.value),1)]),_:1})):t.value==="pdf"||t.value==="video"||t.value==="audio"?(e(),l(J,{key:2,kind:t.value,path:a.path,url:$.value},null,8,["kind","path","url"])):t.value==="image"?(e(),M("img",{key:3,class:"workspace-download-preview-image",src:$.value,alt:h.value},null,8,ee)):t.value==="text"&&n.value?(e(),M(R,{key:4},[n.value.truncated?(e(),l(D,{key:0,type:"warning",variant:"tonal",density:"compact"},{default:r(()=>[w(k(i(v).t("$vuetify.chatroom.files.previewTruncated")),1)]),_:1})):g("",!0),/\.(csv|tsv)$/i.test(a.path)?(e(),l(X,{key:1,content:n.value.content,path:a.path,truncated:n.value.truncated},null,8,["content","path","truncated"])):i(q)(a.path)?(e(),l(H,{key:2,text:n.value.content},null,8,["text"])):(e(),l(G,{key:3,text:n.value.content,filename:a.path,"show-download":!1},null,8,["text","filename"]))],64)):t.value==="unsupported"?(e(),l(j,{key:5,icon:"$mdiFileQuestionOutline",title:i(v).t("$vuetify.chatroom.files.previewUnavailable")},null,8,["title"])):g("",!0)])]),_:1})]),_:1},8,["modelValue"]))}}),ue=Y(ae,[["__scopeId","data-v-017e407c"]]);export{ue as default};
@@ -0,0 +1 @@
1
+ .workspace-download-preview[data-v-017e407c]{display:flex;flex-direction:column}.workspace-download-preview-body[data-v-017e407c]{flex:1;min-height:0;min-width:0;overflow:auto;padding:12px}.workspace-download-preview-image[data-v-017e407c]{display:block;max-width:100%;max-height:100%;margin:auto;object-fit:contain}
@@ -0,0 +1 @@
1
+ .workspace-csv-preview[data-v-88d1ee33]{display:flex;min-width:0;min-height:0;flex-direction:column;height:100%;border:1px solid rgb(var(--v-theme-outline),.12);border-radius:10px;overflow:hidden}.workspace-csv-toolbar[data-v-88d1ee33]{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 12px;font-size:12px;color:rgb(var(--v-theme-on-surface),.6)}.workspace-csv-pages[data-v-88d1ee33]{display:flex;align-items:center;gap:5px;white-space:nowrap}.workspace-csv-scroll[data-v-88d1ee33]{flex:1 1 auto;min-height:0;overflow:auto}.workspace-csv-table[data-v-88d1ee33]{min-width:100%;border-collapse:separate;border-spacing:0;font-size:12px;text-align:left}.workspace-csv-table th[data-v-88d1ee33],.workspace-csv-table td[data-v-88d1ee33]{padding:8px 12px;max-width:350px;border-right:1px solid rgb(var(--v-theme-outline),.07);border-bottom:1px solid rgb(var(--v-theme-outline),.1);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.workspace-csv-table thead th[data-v-88d1ee33]{position:sticky;top:0;z-index:1;background:rgb(var(--v-theme-surface));font-weight:600}.workspace-csv-table tbody th[data-v-88d1ee33]{color:rgb(var(--v-theme-on-surface),.5);font-variant-numeric:tabular-nums}@media(max-width:820px){.workspace-csv-preview[data-v-88d1ee33]{height:auto}.workspace-csv-scroll[data-v-88d1ee33]{max-height:75dvh}}.workspace-media-preview[data-v-8549eb31]{display:flex;height:100%;min-height:0;flex-direction:column;align-items:center;gap:12px}.workspace-pdf-frame[data-v-8549eb31]{width:100%;min-height:0;flex:1 1 auto;border:0;border-radius:8px;background:rgb(var(--v-theme-surface))}.workspace-video-player[data-v-8549eb31]{width:100%;max-height:100%}.workspace-audio-player[data-v-8549eb31]{width:100%}.workspace-media-preview a[data-v-8549eb31]{align-self:flex-end;font-size:12px}@media(max-width:820px){.workspace-pdf-frame[data-v-8549eb31]{min-height:70dvh}}
@@ -0,0 +1,3 @@
1
+ import{d as P,a as V,w as R,o as t,v as s,p as i,t as f,l as k,g as x,k as B,r as b,c as W,s as E,f as L,j as M,F as $,N as C,E as A,B as w}from"./index-BzRlodie.js";import{_ as N}from"./_plugin-vue_export-helper-DlAUqK2U.js";function F(e,p,c=2001,a=100){const d=[];let u=[],o="",n=!1,g=!1,y=!1;const l=e.charCodeAt(0)===65279?e.slice(1):e,v=()=>{u.length<a?u.push(o):g=!0,o=""},m=()=>{v(),d.length<c?d.push(u):y=!0,u=[]};for(let h=0;h<l.length;h+=1){const r=l[h];if(r==='"')n&&l[h+1]==='"'?(o+='"',h+=1):n?n=!1:o?o+=r:n=!0;else if(!n&&r===p)v();else if(!n&&(r===`
2
+ `||r==="\r")){if(m(),r==="\r"&&l[h+1]===`
3
+ `&&(h+=1),d.length===c&&h<l.length-1){y=!0;break}}else o+=r}return!y&&(o||u.length||n)&&m(),{rows:d,truncatedRows:y,truncatedColumns:g}}const I={class:"workspace-csv-preview"},S={class:"workspace-csv-toolbar"},T={key:0,class:"workspace-csv-pages"},z={class:"workspace-csv-scroll"},D={class:"workspace-csv-table"},j={scope:"row"},q=["title"],G={key:0,class:"empty-inline"},_=100,O=P({__name:"WorkspaceCsvPreview",props:{content:{},path:{},truncated:{type:Boolean}},setup(e){const p=e,c=V(),a=A(1),d=w(()=>F(p.content,/\.tsv$/i.test(p.path)?" ":",")),u=w(()=>d.value.rows[0]??[]),o=w(()=>d.value.rows.slice(1)),n=w(()=>Math.max(1,Math.ceil(o.value.length/_))),g=w(()=>o.value.slice((a.value-1)*_,a.value*_));return R(()=>[p.content,p.path],()=>a.value=1),(y,l)=>(t(),s("div",I,[i("div",S,[i("span",null,f(k(c).t("$vuetify.chatroom.files.tableSummary",o.value.length,u.value.length)),1),n.value>1?(t(),s("div",T,[x(B,{icon:"$mdiChevronLeft",size:"x-small",variant:"text",disabled:a.value===1,"aria-label":k(c).t("$vuetify.chatroom.files.previousPage"),onClick:l[0]||(l[0]=v=>a.value--)},null,8,["disabled","aria-label"]),i("span",null,f(a.value)+" / "+f(n.value),1),x(B,{icon:"$mdiChevronRight",size:"x-small",variant:"text",disabled:a.value===n.value,"aria-label":k(c).t("$vuetify.chatroom.files.nextPage"),onClick:l[1]||(l[1]=v=>a.value++)},null,8,["disabled","aria-label"])])):b("",!0)]),e.truncated||d.value.truncatedRows||d.value.truncatedColumns?(t(),W(E,{key:0,type:"info",density:"compact",variant:"tonal"},{default:L(()=>[M(f(k(c).t("$vuetify.chatroom.files.tableLimited")),1)]),_:1})):b("",!0),i("div",z,[i("table",D,[i("thead",null,[i("tr",null,[l[2]||(l[2]=i("th",{scope:"col"},"#",-1)),(t(!0),s($,null,C(u.value,(v,m)=>(t(),s("th",{key:m,scope:"col"},f(v||k(c).t("$vuetify.chatroom.files.column",m+1)),1))),128))])]),i("tbody",null,[(t(!0),s($,null,C(g.value,(v,m)=>(t(),s("tr",{key:(a.value-1)*_+m},[i("th",j,f((a.value-1)*_+m+1),1),(t(!0),s($,null,C(u.value,(h,r)=>(t(),s("td",{key:r,title:v[r]??""},f(v[r]??""),9,q))),128))]))),128))])]),u.value.length?b("",!0):(t(),s("div",G,f(k(c).t("$vuetify.chatroom.files.emptyTable")),1))])]))}}),ee=N(O,[["__scopeId","data-v-88d1ee33"]]),Z={class:"workspace-media-preview"},H=["src","title"],J=["src"],K=["src"],Q=["href"],U=P({__name:"WorkspaceMediaPreview",props:{kind:{},path:{},url:{}},setup(e){const p=V();return(c,a)=>(t(),s("div",Z,[e.kind==="pdf"?(t(),s("iframe",{key:0,class:"workspace-pdf-frame",src:e.url,title:e.path},null,8,H)):e.kind==="video"?(t(),s("video",{key:e.url,class:"workspace-video-player",src:e.url,preload:"metadata",playsinline:"",controls:""},null,8,J)):(t(),s("audio",{key:e.url,class:"workspace-audio-player",src:e.url,preload:"metadata",controls:""},null,8,K)),i("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},f(k(p).t("$vuetify.chatroom.files.openOriginal")),9,Q)]))}}),te=N(U,[["__scopeId","data-v-8549eb31"]]);export{te as W,ee as a};
@@ -0,0 +1 @@
1
+ .workspace-create-form[data-v-f24d3eec]{display:grid;gap:18px}.workspace-create-location[data-v-f24d3eec]{display:grid;gap:4px}.workspace-create-location span[data-v-f24d3eec]{color:rgb(var(--v-theme-on-surface),.55);font-size:12px}.workspace-create-location code[data-v-f24d3eec]{overflow-wrap:anywhere;font-size:12px}.workspace-prompt-pane[data-v-0b6d6c75]{min-width:0}.workspace-prompt-form[data-v-0b6d6c75]{display:grid;gap:18px;padding:18px}.workspace-prompt-actions[data-v-0b6d6c75]{display:flex;justify-content:flex-end}
@@ -0,0 +1,2 @@
1
+ import{d as ne,u as Ne,a as re,w as X,o as i,c as y,f as t,g as a,V as ve,G as pe,H as he,j as c,t as o,l as e,k as L,I as ge,J as Pe,K as Se,v as R,p as n,r as S,s as Z,L as ye,z as ke,A as Te,E as _,B as K,M as Ee,F as j,N as ie,O as _e,D as Le,m as Ge,x as He,P as je,n as De,q as ce,y as ae,Q as Ie,R as $e,S as se,T as Ke,b as J,e as le,U as Ce,W as xe,X as Je,Y as Ae,Z as Qe,_ as Xe}from"./index-BzRlodie.js";import{V as Fe}from"./VSelect-CLnwhyWJ.js";import{_ as qe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{b as Ye}from"./utils-rtPwWNel.js";import{_ as Oe,V as ze}from"./CodeViewer.vue_vue_type_script_setup_true_lang-BaC1eGzG.js";import{W as Ze,a as et}from"./WorkspaceMediaPreview-LwXeVOY2.js";import{M as tt}from"./MarkdownContent-AdAmmDn5.js";import{V as Ve}from"./VSpacer-dDRRKhUn.js";import{V as We}from"./VTextarea-D1_2FwMe.js";import{V as at,a as fe,b as lt,c as me}from"./VTabs-7aSwjrKs.js";import"./syntax-highlight-C_fuMcwC.js";const ot={key:1,class:"workspace-create-location"},it={key:2,class:"workspace-create-location"},st=ne({__name:"WorkspaceCreateDialog",props:Te({roots:{},busy:{type:Boolean},error:{}},{modelValue:{type:Boolean,required:!0},modelModifiers:{}}),emits:Te(["create"],["update:modelValue"]),setup(T,{emit:C}){const l=T,m=C,u=Ne(T,"modelValue"),p=_(""),k=_(""),P=re();X(()=>[u.value,l.roots],()=>{u.value&&(l.roots.includes(k.value)||(k.value=l.roots[0]??""))},{immediate:!0,deep:!0}),X(u,v=>{v&&(p.value="")});const r=K(()=>{const v=k.value.replace(/[\\/]+$/,""),f=v.includes("\\")&&!v.includes("/")?"\\":"/";return p.value.trim()?`${v}${f}${p.value.trim()}`:v});function $(){!k.value||!p.value.trim()||m("create",k.value,p.value.trim())}return(v,f)=>(i(),y(ke,{modelValue:u.value,"onUpdate:modelValue":f[4]||(f[4]=h=>u.value=h),width:"auto"},{default:t(()=>[a(ve,null,{default:t(()=>[a(pe,{"prepend-icon":"$mdiFolderOutline"},{append:t(()=>[a(L,{icon:"$mdiClose",variant:"text",size:"small","aria-label":e(P).t("$vuetify.chatroom.common.close"),onClick:f[0]||(f[0]=h=>u.value=!1)},null,8,["aria-label"])]),default:t(()=>[a(he,null,{default:t(()=>[c(o(e(P).t("$vuetify.chatroom.workspaces.createTitle")),1)]),_:1})]),_:1}),a(ge,{class:"workspace-create-form"},{default:t(()=>[a(Pe,{modelValue:p.value,"onUpdate:modelValue":f[1]||(f[1]=h=>p.value=h),label:e(P).t("$vuetify.chatroom.workspaces.projectName"),autofocus:"","hide-details":"auto",onKeyup:Se($,["enter"])},null,8,["modelValue","label"]),T.roots.length>1?(i(),y(Fe,{key:0,modelValue:k.value,"onUpdate:modelValue":f[2]||(f[2]=h=>k.value=h),items:T.roots,label:e(P).t("$vuetify.chatroom.workspaces.createLocation"),"hide-details":"auto"},null,8,["modelValue","items","label"])):k.value?(i(),R("div",ot,[n("span",null,o(e(P).t("$vuetify.chatroom.workspaces.createLocation")),1),n("code",null,o(k.value),1)])):S("",!0),k.value?(i(),R("div",it,[n("span",null,o(e(P).t("$vuetify.chatroom.workspaces.projectPath")),1),n("code",null,o(r.value),1)])):S("",!0),T.error?(i(),y(Z,{key:3,type:"error",variant:"tonal",density:"compact"},{default:t(()=>[c(o(T.error),1)]),_:1})):S("",!0)]),_:1}),a(ye,{class:"justify-end"},{default:t(()=>[a(L,{variant:"text",onClick:f[3]||(f[3]=h=>u.value=!1)},{default:t(()=>[c(o(e(P).t("$vuetify.chatroom.workspaces.cancel")),1)]),_:1}),a(L,{color:"primary",variant:"flat",loading:T.busy,disabled:!k.value||!p.value.trim(),onClick:$},{default:t(()=>[c(o(e(P).t("$vuetify.chatroom.workspaces.create")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),_:1},8,["modelValue"]))}}),nt=qe(st,[["__scopeId","data-v-f24d3eec"]]),rt={class:"workspace-files-pane"},ut={class:"workspace-files-layout"},ct={class:"workspace-file-browser"},dt={class:"workspace-file-breadcrumbs"},vt={class:"workspace-breadcrumb-items"},ft={key:0,class:"workspace-breadcrumb-separator"},mt=["onClick"],pt={key:0,class:"workspace-file-load-more"},ht=["aria-busy"],gt={key:0,class:"workspace-preview-toolbar"},yt=["title"],kt={class:"workspace-preview-content"},_t={class:"workspace-markdown-header"},$t={key:0,class:"workspace-markdown-body"},wt={key:1,class:"workspace-markdown-source"},bt={class:"workspace-image-stage"},Ct=["src","alt"],xt=ne({__name:"WorkspaceFilesPane",props:{root:{}},setup(T){const C=T,l=re(),m=_("preview"),u=_(!1),p=_(!1),k=Ee(()=>C.root),{entries:P,file:r,selectedPath:$,previewLoading:v,breadcrumbs:f,parentPath:h,nextOffset:O,loading:w,loadingMore:s,error:b,loadDirectory:N,loadMore:M,navigate:W,openEntry:B}=k;X(()=>r.value?.path??null,()=>{m.value="preview"}),X(()=>r.value?.kind==="image"?r.value.url:null,D=>{u.value=!!D,p.value=!1});const A=K(()=>P.value.find(D=>D.path===$.value&&D.type==="file"));function V(D){return D==="file"?l.t("$vuetify.chatroom.files.file"):D==="directory"?l.t("$vuetify.chatroom.files.directory"):D==="symlink"?l.t("$vuetify.chatroom.files.symlink"):D}return(D,U)=>(i(),R("div",rt,[e(b)?(i(),y(Z,{key:0,type:"error",variant:"tonal",density:"compact"},{default:t(()=>[c(o(e(b)),1)]),_:1})):S("",!0),n("div",ut,[n("div",ct,[n("div",dt,[a(L,{icon:"$mdiArrowUp",size:"x-small",variant:"text",disabled:e(h)===null,"aria-label":e(l).t("$vuetify.chatroom.files.parentDirectory"),onClick:U[0]||(U[0]=z=>e(h)&&e(W)(e(h)))},null,8,["disabled","aria-label"]),n("div",vt,[(i(!0),R(j,null,ie(e(f),(z,G)=>(i(),R(j,{key:z.path},[G?(i(),R("span",ft,"/")):S("",!0),n("button",{type:"button",class:Ie(["workspace-breadcrumb",{active:G===e(f).length-1}]),onClick:oe=>e(W)(z.path)},o(z.title),11,mt)],64))),128))]),a(L,{icon:"$mdiRefresh",size:"x-small",variant:"text",loading:e(w),"aria-label":e(l).t("$vuetify.chatroom.files.refresh"),onClick:U[1]||(U[1]=z=>e(N)())},null,8,["loading","aria-label"])]),a(_e,{density:"compact",border:"",rounded:"lg",class:"workspace-file-list"},{default:t(()=>[(i(!0),R(j,null,ie(e(P),z=>(i(),y($e,{key:z.path,active:e($)===z.path,title:e(Le)(z.path),subtitle:z.type==="file"?`${V(z.type)} · ${e(Ye)(z.size)}`:V(z.type),"prepend-icon":z.type==="directory"?"$mdiFolderOutline":z.type==="symlink"?"$mdiLinkVariant":"$mdiFileOutline","append-icon":z.type==="directory"?"$mdiChevronRight":void 0,onClick:G=>e(B)(z)},null,8,["active","title","subtitle","prepend-icon","append-icon","onClick"]))),128))]),_:1}),e(O)!==null?(i(),R("div",pt,[a(L,{size:"small",variant:"text",loading:e(s),disabled:e(w),onClick:e(M)},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.files.loadMore")),1)]),_:1},8,["loading","disabled","onClick"])])):S("",!0)]),n("div",{class:"workspace-file-preview","aria-busy":e(v)||u.value},[A.value?(i(),R("div",gt,[n("span",{class:"workspace-preview-filename mono",title:A.value.path},o(A.value.path),9,yt),a(L,{size:"small",variant:"tonal","prepend-icon":"$mdiDownloadOutline",href:e(Ge)(C.root,A.value.path),download:e(Le)(A.value.path)},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.files.download")),1)]),_:1},8,["href","download"])])):S("",!0),n("div",kt,[e(v)?(i(),y(ce,{key:0,indeterminate:""})):S("",!0),e(r)?.kind==="text"&&e(r).truncated?(i(),y(Z,{key:1,type:"warning",variant:"tonal",density:"compact",class:"workspace-preview-truncated"},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.files.previewTruncated")),1)]),_:1})):S("",!0),e(r)&&(e(r).kind==="pdf"||e(r).kind==="video"||e(r).kind==="audio")?(i(),y(Ze,{key:e(r).url,kind:e(r).kind,path:e(r).path,url:e(r).url},null,8,["kind","path","url"])):e(r)?.kind==="text"&&/\.(csv|tsv)$/i.test(e(r).path)?(i(),y(et,{key:3,content:e(r).content,path:e(r).path,truncated:e(r).truncated},null,8,["content","path","truncated"])):e(r)?.kind==="text"&&e(He)(e(r).path)?(i(),y(ze,{key:4,border:"",rounded:"lg",class:"workspace-markdown-preview"},{default:t(()=>[n("div",_t,[a(je,{modelValue:m.value,"onUpdate:modelValue":U[2]||(U[2]=z=>m.value=z),mandatory:"",density:"compact",variant:"text",divided:"",class:"workspace-markdown-mode"},{default:t(()=>[a(L,{value:"preview",size:"small"},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.files.preview")),1)]),_:1}),a(L,{value:"source",size:"small"},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.files.source")),1)]),_:1})]),_:1},8,["modelValue"])]),a(De),m.value==="preview"?(i(),R("div",$t,[a(tt,{text:e(r).content},null,8,["text"])])):(i(),R("div",wt,[a(Oe,{text:e(r).content,filename:e(r).path,toolbar:!1},null,8,["text","filename"])]))]),_:1})):e(r)?.kind==="text"?(i(),y(Oe,{key:5,text:e(r).content,filename:e(r).path,"show-download":!1},null,8,["text","filename"])):e(r)?.kind==="image"?(i(),y(ze,{key:6,border:"",rounded:"lg",class:"workspace-image-preview"},{default:t(()=>[n("div",bt,[u.value?(i(),y(ce,{key:0,indeterminate:""})):S("",!0),p.value?(i(),y(ae,{key:1,icon:"$mdiAlertCircleOutline",title:e(l).t("$vuetify.chatroom.common.imageLoadFailed")},null,8,["title"])):(i(),R("img",{key:e(r).url,src:e(r).url,alt:e(r).path,decoding:"async",onLoad:U[3]||(U[3]=z=>u.value=!1),onError:U[4]||(U[4]=z=>{u.value=!1,p.value=!0})},null,40,Ct))])]),_:1})):e(r)?.kind==="unsupported"?(i(),y(ae,{key:7,icon:"$mdiFileQuestionOutline",title:e(l).t("$vuetify.chatroom.files.previewUnavailable"),text:e(r).path},null,8,["title","text"])):e(v)?S("",!0):(i(),y(ae,{key:8,icon:"$mdiFileEyeOutline",title:e(l).t("$vuetify.chatroom.files.select"),text:e(l).t("$vuetify.chatroom.files.readOnly")},null,8,["title","text"]))])],8,ht)])]))}});function Vt(T){const C=_(null),l=_([]),m=_([]),u=_(null),p=_(null),k=_(!1),P=_(!1),r=_(null),$=_("");let v=0;const f=se(),h=se(),O=se();let w=!1;Ke(()=>{w=!0,v+=1,f.invalidate(),h.invalidate(),O.invalidate()});const s=()=>typeof T=="function"?T():String(T.value??""),b=K(()=>C.value?.changes??[]),N=K(()=>b.value.find(d=>d.path===u.value)??null),M=K(()=>b.value.filter(Be).map(d=>d.path)),W=K(()=>b.value.filter(Me).map(d=>d.path));X(T,()=>{v+=1,f.invalidate(),h.invalidate(),O.invalidate(),r.value=null,C.value=null,l.value=[],m.value=[],u.value=null,p.value=null,B()},{immediate:!0});async function B(){if(w||r.value)return;const d=++v,q=f.begin(),F=s();k.value=!0,$.value="";try{const E=await J(`/git/status?root=${encodeURIComponent(F)}`,{signal:q.signal});if(d!==v||!f.isCurrent(q)||s()!==F)return;if(C.value=E,!E){l.value=[],m.value=[],u.value=null,p.value=null;return}if(await A(d,F,q.signal),d!==v||!f.isCurrent(q)||s()!==F)return;H(),await D()}catch(E){d===v&&f.isCurrent(q)&&s()===F&&($.value=le(E))}finally{d===v&&f.isCurrent(q)&&s()===F&&(k.value=!1)}}async function A(d,q,F){const E=encodeURIComponent(q),ue=F?{signal:F}:{},[Q,I]=await Promise.all([J(`/git/branches?root=${E}`,ue),J(`/git/log?root=${E}&limit=20`,ue)]);d!==v||s()!==q||(l.value=Q,m.value=I)}function V(d){u.value!==d&&(u.value=d,p.value=null,D())}async function D(){const d=u.value,q=s();if(!d||!C.value?.head){h.invalidate(),P.value=!1,p.value=null;return}const F=h.begin();P.value=!0;try{const E=await J(`/git/diff?root=${encodeURIComponent(q)}&path=${encodeURIComponent(d)}`,{signal:F.signal});h.isCurrent(F)&&s()===q&&u.value===d&&(p.value=E)}catch(E){h.isCurrent(F)&&s()===q&&(p.value=null,$.value=le(E))}finally{h.isCurrent(F)&&s()===q&&(P.value=!1)}}async function U(d,q,F,E,ue=6e4){if(w||r.value)return!1;const Q=s(),I=++v,x=O.begin();f.invalidate(),h.invalidate(),k.value=!1,P.value=!1,r.value=d,$.value="";try{const g=await J(q,{method:F,body:JSON.stringify({root:Q,...E}),timeoutMs:ue,signal:x.signal});return w||I!==v||!O.isCurrent(x)||s()!==Q||(C.value=g,H(),await A(I,Q,x.signal),w||I!==v||!O.isCurrent(x)||s()!==Q)?!1:(await D(),!0)}catch(g){return!w&&I===v&&O.isCurrent(x)&&s()===Q&&($.value=le(g)),!1}finally{!w&&I===v&&O.isCurrent(x)&&s()===Q&&(r.value=null)}}async function z(d){return d.length?U("stage","/git/stage","POST",{paths:d}):!1}async function G(d){return d.length?U("unstage","/git/unstage","POST",{paths:d}):!1}function oe(d){return U("restore","/git/restore","POST",{path:d})}function we(d){return U("commit","/git/commit","POST",{message:d})}function be(d){return U("branch","/git/branches","POST",{name:d})}function ee(d){return U("branch","/git/switch","POST",{name:d})}function Y(d){return U("branch","/git/branches","DELETE",{name:d})}function te(d){return U(d,`/git/${d}`,"POST",{},5*6e4)}function H(){b.value.some(d=>d.path===u.value)||(u.value=b.value[0]?.path??null)}return{status:C,branches:l,commits:m,selectedPath:u,selectPath:V,diff:p,loading:k,diffLoading:P,busy:r,error:$,changes:b,selectedChange:N,stagedPaths:M,unstagedPaths:W,load:B,stage:z,unstage:G,restore:oe,commit:we,createBranch:be,switchBranch:ee,deleteBranch:Y,remote:te,isStaged:Be,isUnstaged:Me,statusCode:Pt}}function Be(T){return T.indexStatus!==" "&&T.indexStatus!=="?"}function Me(T){return T.indexStatus==="?"||T.workingTreeStatus!==" "&&T.workingTreeStatus!=="?"}function Pt(T){return`${T.indexStatus}${T.workingTreeStatus}`.replaceAll(" ","·")}const St={class:"git-diff-viewer"},Rt={class:"git-diff-content"},Tt={class:"git-diff-line-number"},Lt={class:"git-diff-line-number"},Ot={class:"git-diff-line"},zt={key:0,class:"git-diff-expand"},Wt={key:1},Ue=500,Bt=500,de=2500,Mt=ne({__name:"GitDiffViewer",props:{text:{}},setup(T){const C=T,l=re(),m=_(Ue);X(()=>C.text,()=>{m.value=Ue});const u=K(()=>f(C.text)),p=K(()=>v(C.text,Math.min(m.value,de))),k=K(()=>Math.max(0,u.value-p.value.length)),P=K(()=>p.value.length<Math.min(u.value,de)),r=K(()=>u.value>de&&p.value.length>=de);function $(){m.value=Math.min(de,m.value+Bt)}function v(O,w){const s=[],b=new Map;let N=0,M=0,W=!1,B="header";const A=(V,D,U,z)=>{const G=B+":"+D+":"+(U??"-")+":"+(z??"-")+":"+h(V),oe=b.get(G)??0;b.set(G,oe+1),s.push({key:G+":"+oe,text:V,kind:D,oldLine:U,newLine:z})};for(const V of O.split(`
2
+ `,w)){const D=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(V);if(D){N=Number(D[1]),M=Number(D[2]),W=!0,B=V,A(V,"hunk",null,null);continue}if(!W||V.startsWith("diff --git ")||V.startsWith("index ")||V.startsWith("--- ")||V.startsWith("+++ ")||V.startsWith("new file mode ")||V.startsWith("deleted file mode ")||V.startsWith("Binary files ")||V.startsWith("GIT binary patch")||V.startsWith("\\ No newline")){V.startsWith("diff --git ")&&(B=V),A(V,"meta",null,null);continue}V.startsWith("+")?(A(V,"add",null,M),M+=1):V.startsWith("-")?(A(V,"delete",N,null),N+=1):(A(V,"context",N,M),N+=1,M+=1)}return s}function f(O){if(!O)return 1;let w=1;for(let s=0;s<O.length;s+=1)O.charCodeAt(s)===10&&(w+=1);return w}function h(O){let w=2166136261;for(let s=0;s<O.length;s+=1)w^=O.charCodeAt(s),w=Math.imul(w,16777619);return(w>>>0).toString(36)}return(O,w)=>(i(),R("div",St,[n("div",Rt,[(i(!0),R(j,null,ie(p.value,s=>(i(),R("div",{key:s.key,class:Ie(["git-diff-row",`git-diff-row-${s.kind}`])},[n("span",Tt,o(s.oldLine??""),1),n("span",Lt,o(s.newLine??""),1),n("code",Ot,o(s.text),1)],2))),128))]),k.value?(i(),R("div",zt,[n("span",null,o(e(l).t("$vuetify.chatroom.git.diffRowsHidden",String(k.value))),1),P.value?(i(),y(L,{key:0,size:"small",variant:"text",onClick:$},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.showMoreDiff")),1)]),_:1})):r.value?(i(),R("span",Wt,o(e(l).t("$vuetify.chatroom.git.diffRenderLimit")),1)):S("",!0)])):S("",!0)]))}}),Ut={class:"workspace-git-pane"},Dt={class:"git-toolbar"},It={class:"git-facts"},At={class:"mono"},Ft={class:"mono"},qt={class:"mono"},Nt={key:0},Et={class:"git-toolbar-actions"},Gt={class:"git-section-header"},Ht={class:"git-section-actions"},jt={key:0,class:"git-workbench"},Kt={class:"git-change-code mono"},Jt={class:"git-diff-pane"},Qt={class:"git-file-toolbar"},Xt={class:"mono git-selected-path"},Yt={class:"git-file-actions"},Zt={class:"git-commit-bar"},ea={class:"git-history"},ta={class:"git-section-header"},aa={class:"git-commit-hash mono"},la={class:"git-new-branch"},oa={class:"mono mt-2 text-break"},ia={class:"mono mt-2 text-break"},sa=ne({__name:"WorkspaceGitPane",props:{root:{}},setup(T){const C=T,l=re(),m=Vt(()=>C.root),{status:u,branches:p,commits:k,selectedPath:P,selectPath:r,diff:$,loading:v,diffLoading:f,busy:h,error:O,changes:w,selectedChange:s,stagedPaths:b,unstagedPaths:N,load:M,stage:W,unstage:B,restore:A,commit:V,createBranch:D,switchBranch:U,deleteBranch:z,remote:G,isStaged:oe,isUnstaged:we,statusCode:be}=m,ee=_(""),Y=_(!1),te=_(""),H=_(null),d=_(null);X(()=>C.root,()=>{ee.value="",Y.value=!1,te.value="",H.value=null,d.value=null});async function q(){const I=H.value;I&&await A(I.path)&&(H.value=null)}async function F(){const I=ee.value.trim();I&&await V(I)&&(ee.value="")}async function E(){const I=te.value.trim();I&&await D(I)&&(te.value="",Y.value=!1)}async function ue(I){I.current||await U(I.name)&&(Y.value=!1)}async function Q(){const I=d.value;I&&await z(I.name)&&(d.value=null)}return(I,x)=>(i(),R("div",Ut,[e(v)?(i(),y(ce,{key:0,indeterminate:""})):S("",!0),e(O)?(i(),y(Z,{key:1,type:"error",variant:"tonal",density:"compact"},{default:t(()=>[c(o(e(O)),1)]),_:1})):S("",!0),!e(v)&&!e(u)?(i(),y(ae,{key:2,icon:"$mdiSourceBranch",title:e(l).t("$vuetify.chatroom.git.notRepository")},null,8,["title"])):e(u)?(i(),R(j,{key:3},[n("div",Dt,[n("div",It,[n("div",null,[n("span",null,o(e(l).t("$vuetify.chatroom.git.branch")),1),n("strong",At,o(e(u).branch??"—"),1)]),n("div",null,[n("span",null,o(e(l).t("$vuetify.chatroom.git.head")),1),n("strong",Ft,o(e(u).head?.slice(0,12)??"—"),1)]),n("div",null,[n("span",null,o(e(l).t("$vuetify.chatroom.git.upstream")),1),n("strong",qt,o(e(u).upstream??"—"),1)]),e(u).upstream?(i(),R("div",Nt,[n("span",null,o(e(l).t("$vuetify.chatroom.git.sync")),1),n("strong",null,"↑ "+o(e(u).ahead)+" · ↓ "+o(e(u).behind),1)])):S("",!0)]),n("div",Et,[a(L,{icon:"$mdiRefresh",size:"small",variant:"text",loading:e(v),disabled:e(h)!==null,"aria-label":e(l).t("$vuetify.chatroom.git.refresh"),onClick:e(M)},null,8,["loading","disabled","aria-label","onClick"]),a(L,{"prepend-icon":"$mdiSourceBranch",size:"small",variant:"tonal",onClick:x[0]||(x[0]=g=>Y.value=!0)},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.branches")),1)]),_:1}),a(L,{size:"small",variant:"text",loading:e(h)==="fetch",onClick:x[1]||(x[1]=g=>e(G)("fetch"))},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.fetch")),1)]),_:1},8,["loading"]),a(L,{size:"small",variant:"text",disabled:!e(u).upstream,loading:e(h)==="pull",onClick:x[2]||(x[2]=g=>e(G)("pull"))},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.pull")),1)]),_:1},8,["disabled","loading"]),a(L,{size:"small",variant:"text",loading:e(h)==="push",onClick:x[3]||(x[3]=g=>e(G)("push"))},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.push")),1)]),_:1},8,["loading"])])]),n("div",Gt,[n("div",null,[n("strong",null,o(e(l).t("$vuetify.chatroom.git.changes")),1),n("span",null,o(e(w).length),1)]),n("div",Ht,[a(L,{size:"small",variant:"text",disabled:!e(N).length,loading:e(h)==="stage",onClick:x[4]||(x[4]=g=>e(W)(e(N)))},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.stageAll")),1)]),_:1},8,["disabled","loading"]),a(L,{size:"small",variant:"text",disabled:!e(b).length,loading:e(h)==="unstage",onClick:x[5]||(x[5]=g=>e(B)(e(b)))},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.unstageAll")),1)]),_:1},8,["disabled","loading"])])]),e(w).length?(i(),R("div",jt,[a(_e,{density:"compact",class:"git-change-list"},{default:t(()=>[(i(!0),R(j,null,ie(e(w),g=>(i(),y($e,{key:g.path,active:e(P)===g.path,onClick:Re=>e(r)(g.path)},{prepend:t(()=>[n("span",Kt,o(e(be)(g)),1)]),default:t(()=>[a(Ce,{class:"mono"},{default:t(()=>[c(o(g.path),1)]),_:2},1024),g.originalPath?(i(),y(xe,{key:0,class:"mono"},{default:t(()=>[c(o(g.originalPath)+" → "+o(g.path),1)]),_:2},1024)):S("",!0)]),_:2},1032,["active","onClick"]))),128))]),_:1}),n("div",Jt,[e(s)?(i(),R(j,{key:0},[n("div",Qt,[n("div",Xt,o(e(s).path),1),n("div",Yt,[e(we)(e(s))?(i(),y(L,{key:0,size:"small",variant:"text",loading:e(h)==="stage",onClick:x[6]||(x[6]=g=>e(W)([e(s).path]))},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.stage")),1)]),_:1},8,["loading"])):S("",!0),e(oe)(e(s))?(i(),y(L,{key:1,size:"small",variant:"text",loading:e(h)==="unstage",onClick:x[7]||(x[7]=g=>e(B)([e(s).path]))},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.unstage")),1)]),_:1},8,["loading"])):S("",!0),a(L,{color:"error",size:"small",variant:"text",disabled:!e(u).head&&e(s).kind!=="untracked",onClick:x[8]||(x[8]=g=>H.value=e(s))},{default:t(()=>[c(o(e(s).kind==="untracked"?e(l).t("$vuetify.chatroom.git.deleteFile"):e(l).t("$vuetify.chatroom.git.restore")),1)]),_:1},8,["disabled"])])]),e(f)?(i(),y(ce,{key:0,indeterminate:""})):S("",!0),e($)?.truncated?(i(),y(Z,{key:1,type:"info",variant:"tonal",density:"compact"},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.diffTruncated")),1)]),_:1})):S("",!0),e($)?.diff?(i(),y(Mt,{key:2,text:e($).diff},null,8,["text"])):e(f)?S("",!0):(i(),y(ae,{key:3,icon:"$mdiFileCompare",title:e(u).head?e(l).t("$vuetify.chatroom.git.noDiff"):e(l).t("$vuetify.chatroom.git.noHead")},null,8,["title"]))],64)):S("",!0)])])):(i(),y(ae,{key:1,icon:"$mdiCheckCircleOutline",title:e(l).t("$vuetify.chatroom.git.clean")},null,8,["title"])),n("div",Zt,[a(Pe,{modelValue:ee.value,"onUpdate:modelValue":x[9]||(x[9]=g=>ee.value=g),label:e(l).t("$vuetify.chatroom.git.commitMessage"),density:"compact",variant:"outlined","hide-details":"",disabled:!e(b).length,onKeyup:Se(F,["enter"])},null,8,["modelValue","label","disabled"]),a(L,{color:"primary",variant:"flat",disabled:!e(b).length||!ee.value.trim(),loading:e(h)==="commit",onClick:F},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.commit")),1)]),_:1},8,["disabled","loading"])]),n("div",ea,[n("div",ta,[n("strong",null,o(e(l).t("$vuetify.chatroom.git.recentCommits")),1)]),e(k).length?(i(),y(_e,{key:0,density:"compact"},{default:t(()=>[(i(!0),R(j,null,ie(e(k),g=>(i(),y($e,{key:g.hash},{prepend:t(()=>[n("span",aa,o(g.shortHash),1)]),default:t(()=>[a(Ce,null,{default:t(()=>[c(o(g.subject),1)]),_:2},1024),a(xe,null,{default:t(()=>[c(o(g.author)+" · "+o(new Date(g.date).toLocaleString(e(Je)(e(l).current.value))),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})):S("",!0)])],64)):S("",!0),a(ke,{modelValue:Y.value,"onUpdate:modelValue":x[12]||(x[12]=g=>Y.value=g),width:"auto","max-width":"42rem"},{default:t(()=>[a(ve,null,{default:t(()=>[a(pe,{"prepend-icon":"$mdiSourceBranch"},{default:t(()=>[a(he,null,{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.branches")),1)]),_:1})]),_:1}),a(ge,null,{default:t(()=>[n("div",la,[a(Pe,{modelValue:te.value,"onUpdate:modelValue":x[10]||(x[10]=g=>te.value=g),label:e(l).t("$vuetify.chatroom.git.newBranch"),density:"compact",variant:"outlined","hide-details":"",onKeyup:Se(E,["enter"])},null,8,["modelValue","label"]),a(L,{color:"primary",variant:"flat",disabled:!te.value.trim(),loading:e(h)==="branch",onClick:E},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.create")),1)]),_:1},8,["disabled","loading"])]),a(_e,{class:"mt-3",density:"compact",border:"",rounded:"lg"},{default:t(()=>[(i(!0),R(j,null,ie(e(p),g=>(i(),y($e,{key:g.name},{append:t(()=>[g.current?(i(),y(Ae,{key:0,size:"x-small",variant:"tonal"},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.current")),1)]),_:1})):(i(),R(j,{key:1},[a(L,{size:"x-small",variant:"text",onClick:Re=>ue(g)},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.switch")),1)]),_:1},8,["onClick"]),a(L,{icon:"$mdiDeleteOutline",size:"x-small",color:"error",variant:"text","aria-label":e(l).t("$vuetify.chatroom.git.deleteBranch"),onClick:Re=>d.value=g},null,8,["aria-label","onClick"])],64))]),default:t(()=>[a(Ce,{class:"mono"},{default:t(()=>[c(o(g.name),1)]),_:2},1024),g.upstream?(i(),y(xe,{key:0,class:"mono"},{default:t(()=>[c(o(g.upstream),1)]),_:2},1024)):S("",!0)]),_:2},1024))),128))]),_:1})]),_:1}),a(ye,null,{default:t(()=>[a(Ve),a(L,{variant:"text",onClick:x[11]||(x[11]=g=>Y.value=!1)},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.common.close")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),a(ke,{"model-value":H.value!==null,width:"auto","max-width":"32rem"},{default:t(()=>[a(ve,null,{default:t(()=>[a(pe,{"prepend-icon":"$mdiAlertCircleOutline",class:"text-error"},{default:t(()=>[a(he,null,{default:t(()=>[c(o(H.value?.kind==="untracked"?e(l).t("$vuetify.chatroom.git.deleteTitle"):e(l).t("$vuetify.chatroom.git.restoreTitle")),1)]),_:1})]),_:1}),a(ge,null,{default:t(()=>[c(o(H.value?.kind==="untracked"?e(l).t("$vuetify.chatroom.git.deleteDescription"):e(l).t("$vuetify.chatroom.git.restoreDescription"))+" ",1),n("div",oa,o(H.value?.path),1)]),_:1}),a(ye,null,{default:t(()=>[a(Ve),a(L,{variant:"text",onClick:x[13]||(x[13]=g=>H.value=null)},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.common.cancel")),1)]),_:1}),a(L,{color:"error",variant:"flat",loading:e(h)==="restore",onClick:q},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.confirm")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model-value"]),a(ke,{"model-value":d.value!==null,width:"auto","max-width":"32rem"},{default:t(()=>[a(ve,null,{default:t(()=>[a(pe,{"prepend-icon":"$mdiAlertCircleOutline",class:"text-error"},{default:t(()=>[a(he,null,{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.deleteBranchTitle")),1)]),_:1})]),_:1}),a(ge,null,{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.deleteBranchDescription"))+" ",1),n("div",ia,o(d.value?.name),1)]),_:1}),a(ye,null,{default:t(()=>[a(Ve),a(L,{variant:"text",onClick:x[14]||(x[14]=g=>d.value=null)},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.common.cancel")),1)]),_:1}),a(L,{color:"error",variant:"flat",loading:e(h)==="branch",onClick:Q},{default:t(()=>[c(o(e(l).t("$vuetify.chatroom.git.confirm")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model-value"])]))}}),na={class:"workspace-prompt-pane"},ra={class:"workspace-prompt-form"},ua={class:"workspace-prompt-actions"},ca=".chatroom/summary.md",da=".chatroom/prompt.md",va=ne({__name:"WorkspacePromptPane",props:{root:{}},setup(T){const C=T,l=_(""),m=_(""),u=_(""),p=_(""),k=_(!1),P=_(!1),r=_(!1),$=_(""),v=_(null),f=re(),h=se(),O=se(),w=K(()=>v.value===C.root&&(l.value!==u.value||m.value!==p.value));X(()=>C.root,()=>{h.invalidate(),O.invalidate(),l.value="",m.value="",u.value="",p.value="",v.value=null,P.value=!1,r.value=!1,$.value="",s()},{immediate:!0});async function s(){const M=h.begin(),W=C.root;k.value=!0,$.value="",r.value=!1;try{const B=await J(`/workspace?root=${encodeURIComponent(W)}`,{signal:M.signal});if(!h.isCurrent(M)||C.root!==W)return;l.value=B.summary??"",m.value=B.presetPrompt??"",u.value=l.value,p.value=m.value,v.value=W}catch(B){h.isCurrent(M)&&($.value=le(B))}finally{h.isCurrent(M)&&(k.value=!1)}}async function b(M,W,B,A){await J("/workspace/file",{method:"PUT",body:JSON.stringify({root:M,path:W,content:B}),signal:A})}async function N(){if(!w.value||P.value||v.value!==C.root)return;const M=O.begin(),W=C.root,B=l.value,A=m.value;P.value=!0,$.value="",r.value=!1;try{const V=[];if(B!==u.value&&V.push(b(W,ca,B,M.signal)),A!==p.value&&V.push(b(W,da,A,M.signal)),await Promise.all(V),!O.isCurrent(M)||C.root!==W)return;u.value=B,p.value=A,r.value=!0}catch(V){O.isCurrent(M)&&C.root===W&&($.value=le(V))}finally{O.isCurrent(M)&&C.root===W&&(P.value=!1)}}return(M,W)=>(i(),R("div",na,[k.value?(i(),y(ce,{key:0,indeterminate:""})):S("",!0),n("div",ra,[a(We,{modelValue:l.value,"onUpdate:modelValue":W[0]||(W[0]=B=>l.value=B),label:e(f).t("$vuetify.chatroom.workspaces.summary"),rows:"3","auto-grow":"",maxlength:"2048",counter:"",disabled:k.value},null,8,["modelValue","label","disabled"]),a(We,{modelValue:m.value,"onUpdate:modelValue":W[1]||(W[1]=B=>m.value=B),label:e(f).t("$vuetify.chatroom.workspaces.presetPrompt"),rows:"10","auto-grow":"",maxlength:"16384",counter:"",disabled:k.value},null,8,["modelValue","label","disabled"]),$.value?(i(),y(Z,{key:0,type:"error",variant:"tonal",density:"compact"},{default:t(()=>[c(o($.value),1)]),_:1})):r.value?(i(),y(Z,{key:1,type:"success",variant:"tonal",density:"compact"},{default:t(()=>[c(o(e(f).t("$vuetify.chatroom.workspaces.saved")),1)]),_:1})):S("",!0),n("div",ua,[a(L,{color:"primary",variant:"flat",loading:P.value,disabled:k.value||!w.value,onClick:N},{default:t(()=>[c(o(e(f).t("$vuetify.chatroom.workspaces.save")),1)]),_:1},8,["loading","disabled"])])])]))}}),fa=qe(va,[["__scopeId","data-v-0b6d6c75"]]),ma={class:"workspace-skills-pane"},pa={key:2,class:"workspace-skill-grid"},ha={class:"workspace-skill-header"},ga={class:"workspace-skill-title"},ya={class:"workspace-skill-description"},ka={class:"workspace-skill-path"},_a=ne({__name:"WorkspaceSkillsPane",props:{root:{}},setup(T){const C=T,l=_(null),m=_(!1),u=_(""),p=re(),k=se();X(()=>C.root,()=>{l.value=null,P()},{immediate:!0});async function P(){const $=k.begin(),v=C.root;m.value=!0,u.value="";try{const f=await J(`/workspace?root=${encodeURIComponent(v)}`,{signal:$.signal});if(!k.isCurrent($)||C.root!==v)return;l.value=f}catch(f){k.isCurrent($)&&(u.value=le(f))}finally{k.isCurrent($)&&(m.value=!1)}}function r($){return $.path.startsWith(".claude/skills/")?p.t("$vuetify.chatroom.skills.sources.claude"):$.path.startsWith(".chatroom/skills/")?p.t("$vuetify.chatroom.skills.sources.chatRoom"):p.t("$vuetify.chatroom.skills.sources.agent")}return($,v)=>(i(),R("div",ma,[m.value?(i(),y(ce,{key:0,indeterminate:""})):S("",!0),u.value?(i(),y(Z,{key:1,type:"error",variant:"tonal",density:"compact"},{default:t(()=>[c(o(u.value),1)]),_:1})):S("",!0),l.value?.skills.length?(i(),R("div",pa,[(i(!0),R(j,null,ie(l.value.skills,f=>(i(),R("div",{key:f.path,class:"workspace-skill-card"},[n("div",ha,[n("div",ga,[a(Qe,{icon:"$mdiPuzzleOutline",size:"18"}),n("strong",null,o(f.name),1)]),a(Ae,{size:"x-small",variant:"tonal"},{default:t(()=>[c(o(r(f)),1)]),_:2},1024)]),n("div",ya,o(f.description||e(p).t("$vuetify.chatroom.skills.noDescription")),1),n("div",ka,o(f.path),1)]))),128))])):!m.value&&!u.value?(i(),y(ae,{key:3,icon:"$mdiPuzzleOutline",title:e(p).t("$vuetify.chatroom.skills.empty")},null,8,["title"])):S("",!0)]))}}),$a={class:"workspace-layout"},wa={class:"workspace-header"},ba={class:"workspace-identity min-w-0"},Ca={class:"workspace-meta-row"},xa=["title"],Va={class:"workspace-actions"},Da=ne({__name:"WorkspacesView",setup(T){const C=_([]),l=_([]),m=_(window.localStorage.getItem("chatroom.workspace.root")),u=_("git"),p=_(!1),k=_(""),P=_(!1),r=_(!1),$=_(""),v=re(),f=se();Xe(()=>{h()}),X(m,w=>{w?window.localStorage.setItem("chatroom.workspace.root",w):window.localStorage.removeItem("chatroom.workspace.root")});async function h(){const w=f.begin();p.value=!0,k.value="";try{const[s,b]=await Promise.all([J("/workspaces",{signal:w.signal}),J("/workspace/roots",{signal:w.signal})]);if(!f.isCurrent(w))return;C.value=s,l.value=b,C.value.some(N=>N.root===m.value)||(m.value=C.value[0]?.root??null)}catch(s){f.isCurrent(w)&&(k.value=le(s))}finally{f.isCurrent(w)&&(p.value=!1)}}async function O(w,s){if(!r.value){r.value=!0,$.value="";try{const b=await J("/workspaces",{method:"POST",body:JSON.stringify({parent:w,name:s})});await h(),m.value=b.root,P.value=!1}catch(b){$.value=le(b)}finally{r.value=!1}}}return(w,s)=>(i(),R("div",$a,[a(ve,{class:"workspace-detail panel-card"},{default:t(()=>[n("div",wa,[n("div",ba,[a(Fe,{modelValue:m.value,"onUpdate:modelValue":s[0]||(s[0]=b=>m.value=b),items:C.value.map(b=>({title:b.name,value:b.root})),loading:p.value,"aria-label":e(v).t("$vuetify.chatroom.workspaces.workspace"),density:"compact",variant:"outlined","hide-details":"","prepend-inner-icon":"$mdiFolderOutline",class:"workspace-switcher"},null,8,["modelValue","items","loading","aria-label"]),n("div",Ca,[m.value?(i(),R("div",{key:0,class:"workspace-path",title:m.value},o(m.value),9,xa)):S("",!0),n("div",Va,[a(L,{icon:"$mdiPlus",size:"small",variant:"text","aria-label":e(v).t("$vuetify.chatroom.workspaces.createTitle"),onClick:s[1]||(s[1]=b=>{$.value="",P.value=!0})},null,8,["aria-label"]),a(L,{icon:"$mdiRefresh",size:"small",variant:"text",loading:p.value,"aria-label":e(v).t("$vuetify.chatroom.workspaces.refresh"),onClick:h},null,8,["loading","aria-label"])])])])]),k.value?(i(),y(Z,{key:0,type:"error",variant:"tonal",density:"compact"},{default:t(()=>[c(o(k.value),1)]),_:1})):S("",!0),m.value?(i(),R(j,{key:1},[a(at,{modelValue:u.value,"onUpdate:modelValue":s[2]||(s[2]=b=>u.value=b),density:"compact",class:"workspace-tabs"},{default:t(()=>[a(fe,{value:"git"},{default:t(()=>[c(o(e(v).t("$vuetify.chatroom.workspaces.git")),1)]),_:1}),a(fe,{value:"prompt"},{default:t(()=>[c(o(e(v).t("$vuetify.chatroom.workspaces.prompt")),1)]),_:1}),a(fe,{value:"files"},{default:t(()=>[c(o(e(v).t("$vuetify.chatroom.workspaces.files")),1)]),_:1}),a(fe,{value:"skills"},{default:t(()=>[c(o(e(v).t("$vuetify.chatroom.workspaces.skills")),1)]),_:1})]),_:1},8,["modelValue"]),a(De),a(lt,{modelValue:u.value,"onUpdate:modelValue":s[3]||(s[3]=b=>u.value=b),touch:!1},{default:t(()=>[a(me,{value:"git"},{default:t(()=>[a(sa,{root:m.value},null,8,["root"])]),_:1}),a(me,{value:"prompt"},{default:t(()=>[a(fa,{root:m.value},null,8,["root"])]),_:1}),a(me,{value:"files"},{default:t(()=>[a(xt,{root:m.value},null,8,["root"])]),_:1}),a(me,{value:"skills"},{default:t(()=>[a(_a,{root:m.value},null,8,["root"])]),_:1})]),_:1},8,["modelValue"])],64)):p.value?S("",!0):(i(),y(ae,{key:2,icon:"$mdiFolderOutline",title:e(v).t("$vuetify.chatroom.workspaces.empty")},null,8,["title"]))]),_:1}),a(nt,{modelValue:P.value,"onUpdate:modelValue":s[4]||(s[4]=b=>P.value=b),roots:l.value,busy:r.value,error:$.value,onCreate:O},null,8,["modelValue","roots","busy","error"])]))}});export{Da as default};
@@ -0,0 +1 @@
1
+ function t(e){const l=new Map;let r=!1,a=null;function c(i){if(!e.isDisposed()){if(i===null)r=!0,l.clear();else if(!r)for(const s of i){const n=e.keyOf(s);l.set(n,e.merge(l.get(n),s))}e.isReady()?f():e.isLoading()||e.refreshAll()}}function f(){return a||(a=Promise.resolve().then(async()=>{for(;!e.isDisposed()&&e.isReady()&&(r||l.size);){if(r){r=!1,l.clear(),await e.refreshAll();continue}const i=[...l.values()];l.clear(),await e.applyBatch(i)}}).finally(()=>{a=null,!e.isDisposed()&&e.isReady()&&(r||l.size)&&f()}),a)}function u(){l.clear(),r=!1}return{enqueue:c,drain:f,reset:u}}export{t as c};