zen-gitsync 2.17.16 → 2.17.18

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 (144) hide show
  1. package/README.md +2 -0
  2. package/package.json +1 -1
  3. package/src/paths.js +13 -0
  4. package/src/ui/public/assets/AgentView-AMFKSDeH.css +1 -0
  5. package/src/ui/public/assets/AgentView-DQAB0ypS.js +13 -0
  6. package/src/ui/public/assets/AppVersionBadge-B5VG1_Lu.js +2 -0
  7. package/src/ui/public/assets/AppVersionBadge-DDYQqoy7.css +1 -0
  8. package/src/ui/public/assets/BranchSelector-Cj6athRO.js +1 -0
  9. package/src/ui/public/assets/BranchSelector-F4ibldMN.css +1 -0
  10. package/src/ui/public/assets/CommitForm-4kI2csgs.css +1 -0
  11. package/src/ui/public/assets/CommitForm-a2tMsfF9.js +6 -0
  12. package/src/ui/public/assets/CommonDialog-I-GCqRMC.js +1 -0
  13. package/src/ui/public/assets/CommonDialog-w6EmBEXv.css +1 -0
  14. package/src/ui/public/assets/EditorView-DBqhjm84.css +1 -0
  15. package/src/ui/public/assets/EditorView-wTi53Nxc.js +16 -0
  16. package/src/ui/public/assets/FileDiffViewer-B7i4BmbH.js +15 -0
  17. package/src/ui/public/assets/FileDiffViewer-n5ea9qMe.css +1 -0
  18. package/src/ui/public/assets/{FlowExecutionViewer-Drw4hlJG.js → FlowExecutionViewer-xZjrf8e1.js} +1 -1
  19. package/src/ui/public/assets/FlowOrchestrationWorkspace-DwuSSxJ1.css +1 -0
  20. package/src/ui/public/assets/FlowOrchestrationWorkspace-R0QKmUpG.js +21 -0
  21. package/src/ui/public/assets/IconButton-B6eqvssJ.js +1 -0
  22. package/src/ui/public/assets/IconButton-RlXqKOeu.css +1 -0
  23. package/src/ui/public/assets/LogList-BPqurE9g.js +7 -0
  24. package/src/ui/public/assets/LogList-XspUhx-C.css +1 -0
  25. package/src/ui/public/assets/MindmapView-Diq2Cu4O.css +1 -0
  26. package/src/ui/public/assets/MindmapView-NdFNlkTF.js +2 -0
  27. package/src/ui/public/assets/MonitorView-DuSZa8a3.js +1 -0
  28. package/src/ui/public/assets/MonitorView-DwUwJXnY.css +1 -0
  29. package/src/ui/public/assets/ProjectStartupButton-BrfKVP-w.js +1 -0
  30. package/src/ui/public/assets/ProjectStartupButton-CB8IOg1E.css +1 -0
  31. package/src/ui/public/assets/RemoteManagerDialog-BI7fRsOQ.js +4 -0
  32. package/src/ui/public/assets/RemoteManagerDialog-D4WphMtO.css +1 -0
  33. package/src/ui/public/assets/RemoteRepoCard-B4E8Ud3F.js +7 -0
  34. package/src/ui/public/assets/RemoteRepoCard-o01IrbVz.css +1 -0
  35. package/src/ui/public/assets/SourceMapView-B0OzHjxP.js +3 -0
  36. package/src/ui/public/assets/SourceMapView-CfDydtsu.css +1 -0
  37. package/src/ui/public/assets/SvgIcon-B2h7B2yF.js +1 -0
  38. package/src/ui/public/assets/TemplateManager-DO7EPfj8.css +1 -0
  39. package/src/ui/public/assets/TemplateManager-mIWE3Qf8.js +1 -0
  40. package/src/ui/public/assets/UserInputNode-BafC-B2U.js +1 -0
  41. package/src/ui/public/assets/UserInputNode-DDNSarag.css +1 -0
  42. package/src/ui/public/assets/WorkbenchView-BU2kJCAA.css +1 -0
  43. package/src/ui/public/assets/WorkbenchView-BseGz8hJ.js +56 -0
  44. package/src/ui/public/assets/{_plugin-vue_export-helper-dg2VUnSQ.js → _plugin-vue_export-helper-Dvuzpv2Y.js} +7 -7
  45. package/src/ui/public/assets/agentConversations-BEKqkGcm.js +5 -0
  46. package/src/ui/public/assets/{configStore-DtjAc3w9.js → configStore-CX0FkQ94.js} +1 -1
  47. package/src/ui/public/assets/element-plus-C1xzgNSR.css +1 -0
  48. package/src/ui/public/assets/{element-plus-DxBPQwL7.js → element-plus-D7LDHcAn.js} +3 -3
  49. package/src/ui/public/assets/flow-mindmap-zXXF3qDh.js +139 -0
  50. package/src/ui/public/assets/gitStore-CMuWWr2d.js +6 -0
  51. package/src/ui/public/assets/index-CB2cIiHl.js +115 -0
  52. package/src/ui/public/assets/index-DIU5200G.css +1 -0
  53. package/src/ui/public/assets/{office-docx-CZXLkCf5.js → office-docx-C8sYW8O1.js} +5 -5
  54. package/src/ui/public/assets/{office-excel-CBKszjVA.js → office-excel-DpZn5My2.js} +1 -1
  55. package/src/ui/public/assets/{office-pptx-NeUSnN3k.js → office-pptx-BnYBTwT7.js} +1 -1
  56. package/src/ui/public/assets/previewSandbox-CxLaNg4X.css +1 -0
  57. package/src/ui/public/assets/previewSandbox-DxR4iN9P.js +0 -0
  58. package/src/ui/public/assets/toolsStore-DMCSd287.js +1 -0
  59. package/src/ui/public/assets/{useThemeObserver-E7Hk50l3.js → useThemeObserver-QpveGpnn.js} +1 -1
  60. package/src/ui/public/assets/{vendor-DnB9EJa3.css → vendor-C-GCxMMu.css} +1 -1
  61. package/src/ui/public/assets/{vendor-bdHhLiED.js → vendor-CLmPUj3K.js} +8 -8
  62. package/src/ui/public/assets/vue-flow-CxnoC7Uq.js +39 -0
  63. package/src/ui/public/fonts/jetbrains-mono-latin.woff2 +0 -0
  64. package/src/ui/public/fonts/plus-jakarta-sans-latin-ext.woff2 +0 -0
  65. package/src/ui/public/fonts/plus-jakarta-sans-latin-italic.woff2 +0 -0
  66. package/src/ui/public/fonts/plus-jakarta-sans-latin.woff2 +0 -0
  67. package/src/ui/public/index.html +28 -27
  68. package/src/ui/server/index.js +28 -2
  69. package/src/ui/server/routes/aiContext/collectors.js +360 -0
  70. package/src/ui/server/routes/aiContext/collectors.test.js +297 -0
  71. package/src/ui/server/routes/aiContext/index.js +444 -0
  72. package/src/ui/server/routes/aiContext/index.test.js +433 -0
  73. package/src/ui/server/routes/aiContext/jobRefresh.js +110 -0
  74. package/src/ui/server/routes/aiContext/jobRefresh.test.js +191 -0
  75. package/src/ui/server/routes/aiContext/render.js +366 -0
  76. package/src/ui/server/routes/aiContext/render.test.js +255 -0
  77. package/src/ui/server/routes/aiContext/wiring.js +80 -0
  78. package/src/ui/server/routes/fs.js +43 -0
  79. package/src/ui/server/routes/mindmap.js +36 -24
  80. package/src/ui/server/routes/monitor.js +44 -35
  81. package/src/ui/server/routes/remoteRepos.js +57 -48
  82. package/src/ui/server/routes/workbench/agentChat.js +94 -10
  83. package/src/ui/server/routes/workbench/agentChatContext.test.js +171 -0
  84. package/src/ui/server/routes/workbench/agentChatShared.test.js +33 -3
  85. package/src/ui/server/routes/workbench/agentEngines.js +77 -0
  86. package/src/ui/server/routes/workbench/agentEngines.test.js +65 -0
  87. package/src/ui/server/routes/workbench/agentRoutes.js +208 -48
  88. package/src/ui/server/routes/workbench/agentRoutes.test.js +160 -4
  89. package/src/ui/server/routes/workbench/agentSessionStore.js +3 -0
  90. package/src/ui/server/routes/workbench/envContext.js +61 -64
  91. package/src/ui/server/routes/workbench/envContext.test.js +133 -63
  92. package/src/ui/server/routes/workbench/index.js +78 -32
  93. package/src/ui/server/routes/workbench/runExternalTurn.js +279 -0
  94. package/src/ui/server/routes/workbench/runExternalTurn.test.js +275 -0
  95. package/src/ui/server/routes/workbench/shared.js +17 -0
  96. package/src/ui/server/utils/agentAttachments.js +169 -0
  97. package/src/ui/server/utils/agentAttachments.test.js +140 -0
  98. package/src/ui/public/assets/AgentView-DOyN97Ve.js +0 -5
  99. package/src/ui/public/assets/AgentView-DkM2KXuc.css +0 -1
  100. package/src/ui/public/assets/AppVersionBadge-CJrDr7GV.css +0 -1
  101. package/src/ui/public/assets/AppVersionBadge-oON3sAj4.js +0 -2
  102. package/src/ui/public/assets/BranchSelector-B0eLkAdv.css +0 -1
  103. package/src/ui/public/assets/BranchSelector-Cpj7eGqY.js +0 -1
  104. package/src/ui/public/assets/CommitForm-CQ0K8Yy2.css +0 -1
  105. package/src/ui/public/assets/CommitForm-D_ovYhVw.js +0 -6
  106. package/src/ui/public/assets/CommonDialog-ChZbqfRF.js +0 -1
  107. package/src/ui/public/assets/CommonDialog-jP0E9mco.css +0 -1
  108. package/src/ui/public/assets/EditorView-BPzpI0GV.js +0 -1
  109. package/src/ui/public/assets/EditorView-DZMLvQds.css +0 -1
  110. package/src/ui/public/assets/FileDiffViewer-B9EkuKdF.css +0 -1
  111. package/src/ui/public/assets/FileDiffViewer-B_qEKA9L.js +0 -15
  112. package/src/ui/public/assets/FlowOrchestrationWorkspace-C7yTD1gj.js +0 -21
  113. package/src/ui/public/assets/FlowOrchestrationWorkspace-CYGp-PqS.css +0 -1
  114. package/src/ui/public/assets/IconButton-DEARmMkZ.js +0 -1
  115. package/src/ui/public/assets/IconButton-tjkOjzkC.css +0 -1
  116. package/src/ui/public/assets/LogList-BA_gowxE.js +0 -7
  117. package/src/ui/public/assets/LogList-BlJplIi1.css +0 -1
  118. package/src/ui/public/assets/MindmapView-8X6z245q.css +0 -1
  119. package/src/ui/public/assets/MindmapView-K-XcLLXr.js +0 -2
  120. package/src/ui/public/assets/MonitorView-C0RL5K9W.js +0 -1
  121. package/src/ui/public/assets/MonitorView-DetlFFXq.css +0 -1
  122. package/src/ui/public/assets/ProjectStartupButton-DC36_vvU.js +0 -1
  123. package/src/ui/public/assets/ProjectStartupButton-QLPltCK5.css +0 -1
  124. package/src/ui/public/assets/RemoteManagerDialog-BauAeH2w.css +0 -1
  125. package/src/ui/public/assets/RemoteManagerDialog-Bkqja660.js +0 -4
  126. package/src/ui/public/assets/RemoteRepoCard-Bsm7cj_H.js +0 -7
  127. package/src/ui/public/assets/RemoteRepoCard-CG-jARTe.css +0 -1
  128. package/src/ui/public/assets/SourceMapView-CN4Hkyp4.css +0 -1
  129. package/src/ui/public/assets/SourceMapView-Y5NKdIk6.js +0 -3
  130. package/src/ui/public/assets/SvgIcon-D_mFHXP4.js +0 -1
  131. package/src/ui/public/assets/TemplateManager-BzKVXZhy.js +0 -1
  132. package/src/ui/public/assets/TemplateManager-DMuG4i3G.css +0 -1
  133. package/src/ui/public/assets/UserInputNode-BPLK4aYx.js +0 -1
  134. package/src/ui/public/assets/UserInputNode-BVgQkB2l.css +0 -1
  135. package/src/ui/public/assets/WorkbenchView-B1BJhWHi.css +0 -1
  136. package/src/ui/public/assets/WorkbenchView-xbGdiVMQ.js +0 -56
  137. package/src/ui/public/assets/element-plus-Cwwq-Gje.css +0 -1
  138. package/src/ui/public/assets/flow-mindmap-BqFb1WO5.js +0 -139
  139. package/src/ui/public/assets/gitStore-BZo9_zyy.js +0 -6
  140. package/src/ui/public/assets/index-CHuCYLWm.js +0 -111
  141. package/src/ui/public/assets/index-CmbatbSR.css +0 -1
  142. package/src/ui/public/assets/previewSandbox-BTTTXooN.js +0 -0
  143. package/src/ui/public/assets/previewSandbox-CgdwPcuW.css +0 -1
  144. package/src/ui/public/assets/vue-flow-fLUQ0_kE.js +0 -39
@@ -0,0 +1,5 @@
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{Cn as e,Rn as t,dr as n,gr as r,i,r as a,vr as o}from"./element-plus-D7LDHcAn.js";import{i as s,o as c}from"./vendor-CLmPUj3K.js";import{n as l}from"./_plugin-vue_export-helper-Dvuzpv2Y.js";import{a as u,r as d,t as f}from"./configStore-CX0FkQ94.js";var p=`g ai`,m=`g-ai`,h=[{id:`gai`,name:p},...d.map(e=>({id:e.id,name:e.name}))],g=`zen-gitsync-agent-engine`;function _(e){return e===`gai`||u(e)}function v(e){return h.find(t=>t.id===e)?.name||`g ai`}function y(e){return u(e)}function b(){try{let e=localStorage.getItem(g);if(_(e))return e}catch{}return`gai`}function x(e){try{localStorage.setItem(g,e)}catch{}}t(),n();var S=[`image/*`,`.pdf`,`.txt`,`.md`,`.json`,`.csv`,`.log`,`.yml`,`.yaml`,`.xml`,`.toml`,`.ini`,`.html`,`.css`,`.js`,`.ts`,`.tsx`,`.vue`,`.py`,`.java`,`.go`,`.rs`,`.sql`,`.sh`].join(`,`),C=65536,w=`local-`;function T(e){if(!e||!Array.isArray(e.messages))return[];let t=[],n=e.messages.length;for(let r=0;r<n;r++){let i=e.messages[r];if(i.role!==`system`){if(i.role===`user`){let e=``,n;if(typeof i.content==`string`)e=i.content;else if(Array.isArray(i.content)){e=i.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(` `);let t=i.content.filter(e=>e?.type===`image_url`&&typeof e.image_url?.url==`string`).map((e,t)=>({id:`att-${r}-${t}`,name:`image`,size:0,type:O(e.image_url?.url||``)||`image/*`,preview:e.image_url?.url}));t.length>0&&(n=t)}(e||n)&&t.push({id:`msg-${r}`,role:`user`,content:e,attachments:n,status:`done`,createdAt:Date.now()})}else if(i.role===`assistant`){let i=`msg-${r}`,a=``,o=[],s=r;for(;s<n;){let t=e.messages[s];if(t.role!==`assistant`&&t.role!==`tool`)break;if(t.role===`assistant`){if(typeof t.content==`string`&&(a+=t.content),t.tool_calls&&t.tool_calls.length>0)for(let e of t.tool_calls)o.push({id:e.id||e.function?.name||c(),name:e.function?.name||``,arguments:e.function?.arguments||``,argsPreview:E(e.function?.name||``,e.function?.arguments||``),status:`done`,result:``})}else{let e=t.tool_call_id||t.name||``,n=o.find(t=>t.id===e);if(n){let e=t.content;typeof e!=`string`&&(e=`(non-text result)`),e.length>C&&(e=`…(前文已截断)\n${e.slice(-65536)}`),n.result=e}}s++}r=s-1,a.length>C&&(a=`…(前文已截断)\n${a.slice(-65536)}`);let l=!!a,u=o.length>0;(l||u)&&t.push({id:i,role:`assistant`,content:a,toolCalls:u?o:void 0,status:`done`,createdAt:Date.now()})}}}return t}function E(e,t){try{let n=JSON.parse(t);switch(e){case`run_command`:return String(n.command||``).slice(0,200);case`read_file`:case`write_file`:case`edit_file`:return String(n.path||``);case`list_files`:return String(n.path||`.`);case`search_text`:return String(n.pattern||``);default:return JSON.stringify(n).slice(0,200)}}catch{return t.slice(0,200)}}function D(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result||``)),r.onerror=()=>n(r.error||Error(`FileReader failed`)),r.readAsDataURL(e)})}function O(e){let t=/^data:([^;,]+)/.exec(e);return t?t[1]:``}function k(){let t=f(),n=o([]),u=o(!1),d=o(b());function p(e){_(e)&&(d.value=e,x(e))}let m=r(new Map),h=o(null),g=o(!1),v=0,y=0,S=new Set;function E(e){return{key:e,sessionId:e.startsWith(w)?null:e,title:``,messages:[],isStreaming:!1,abortController:null,nonce:0,pendingQuestion:null,answeringQuestion:!1}}function O(e){let t=m.get(e);return t||=(m.set(e,E(e)),m.get(e)),t}let k=e(()=>h.value?m.get(h.value)??null:null),A=e(()=>k.value?.messages??[]),j=e(()=>k.value?.isStreaming??!1),M=e(()=>{let e=n.value.find(e=>e.sessionId===h.value);return _(e?.engine)?e.engine:d.value}),N=e(()=>n.value.some(e=>e.sessionId===h.value)),P=e(()=>k.value?.pendingQuestion??null),F=e(()=>k.value?.answeringQuestion??!1);function I(e){return!!m.get(e)?.isStreaming}function L(e){let n=[...e];for(let e of m.values()){if(!e.sessionId)continue;let r=n.findIndex(t=>t.sessionId===e.sessionId);if(r!==-1){S.delete(e.sessionId),e.isStreaming&&(n[r]={...n[r],isGenerating:!0});continue}if(!e.isStreaming&&!S.has(e.sessionId))continue;let i=new Date().toISOString();n.unshift({sessionId:e.sessionId,title:e.title||l(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:d.value,createdAt:i,updatedAt:i,messageCount:e.messages.filter(e=>e.role===`user`).length||1,size:0,isGenerating:e.isStreaming})}return n}async function R(){let e=++v,r=t.currentDirectory||``;if(!r){n.value=[],u.value=!1;return}u.value=!0;try{let t=`/api/agent/sessions?cwd=${encodeURIComponent(r)}`,a=await fetch(t).then(e=>e.json());if(e!==v)return;if(!a.success){i.error(a.error||l(`@AGENT:加载会话列表失败`));return}let o=Array.isArray(a.sessions)?a.sessions:[];n.value=L(o)}catch(t){if(e!==v)return;i.error(l(`@AGENT:加载会话列表失败`)+`: `+(t?.message||t))}finally{e===v&&(u.value=!1)}}function z(e,r){let i=new Date().toISOString(),a=n.value.find(t=>t.sessionId===e);if(a){a.isGenerating=!0,a.updatedAt=i;return}n.value=[{sessionId:e,title:r||l(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:d.value,createdAt:i,updatedAt:i,messageCount:1,size:0,isGenerating:!0},...n.value]}function B(e){let t=n.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function V(e){if(m.get(e)?.isStreaming){h.value=e;return}g.value=!0,h.value=e;try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){i.error(t.error||l(`@AGENT:加载会话失败`));return}let n=O(e);n.sessionId=e,n.messages=T(t.session),t.session?.title&&(n.title=t.session.title)}catch(e){i.error(l(`@AGENT:加载会话失败`)+`: `+(e?.message||e))}finally{g.value=!1}}async function H(e){try{await a.confirm(l(`@AGENT:确认删除该会话`),l(`@AGENT:删除后无法恢复`),{type:`warning`})}catch{return}let t=m.get(e);if(t?.abortController)try{t.abortController.abort()}catch{}m.delete(e);try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());if(!t.success){i.error(t.error||l(`@AGENT:删除失败`));return}n.value=n.value.filter(t=>t.sessionId!==e),h.value===e&&(h.value=null),i.success(l(`@AGENT:已删除`))}catch(e){i.error(l(`@AGENT:删除失败`)+`: `+(e?.message||e))}}async function U(e,t){try{let r=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})}).then(e=>e.json());if(!r.success){i.error(r.error||l(`@AGENT:重命名失败`));return}let a=n.value.find(t=>t.sessionId===e);a&&(a.title=t);let o=m.get(e);o&&(o.title=t),i.success(l(`@AGENT:已重命名`))}catch(e){i.error(l(`@AGENT:重命名失败`)+`: `+(e?.message||e))}}function W(){h.value=null}async function G(e,n=[],a={}){let o=n.filter(e=>e?.file?.type?.startsWith(`image/`)),u=n.filter(e=>!e?.file?.type?.startsWith(`image/`)),d=[],f=0;for(let e of u){let t=e.file.size||0;if(!(t>10485760)){if(d.length>=10||f+t>20971520)break;f+=t,d.push(e)}}let p=u.filter(e=>!d.includes(e));p.length>0&&i.warning(`${l(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${p.map(e=>e.file.name).join(`、`)}`);let g=O(h.value||`${w}${Date.now()}-${++y}`);if(!e.trim()&&o.length===0&&d.length===0||g.isStreaming)return;let _=(await Promise.allSettled(o.map(e=>D(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),v=(await Promise.allSettled(d.map(async e=>({name:e.file.name||`file`,dataUrl:await D(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));h.value=g.key,g.nonce+=1;let b=g.nonce;g.abortController=new AbortController;let x=g.abortController;g.pendingQuestion=null,g.answeringQuestion=!1;let T={id:c(),role:`user`,content:e,status:`done`,createdAt:Date.now()},E=[...o,...d];E.length>0&&(T.attachments=E.map(e=>({id:e.id,name:e.file.name||`image`,size:e.file.size||0,type:e.file.type||``,preview:e.preview}))),g.messages.push(T);let k=r({id:c(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});g.messages.push(k),g.isStreaming=!0;let A=[],j=g.sessionId,N=!1;try{let n=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({sessionId:g.sessionId||``,userMessage:e,cwd:t.currentDirectory||``,engine:M.value,..._.length>0?{images:_}:{},...v.length>0?{attachments:v}:{},...a.openFilePath?{openFilePath:a.openFilePath}:{}}),signal:x.signal});if(b!==g.nonce)return;if(!n.ok||!n.body){let e=await n.text().catch(()=>``);throw Error(e||`HTTP ${n.status}`)}let i=n.body.getReader(),o=new TextDecoder(`utf-8`),u=``;for(;;){let{value:t,done:n}=await i.read();if(b!==g.nonce)return;if(n)break;u+=o.decode(t,{stream:!0});let a=u.split(`
2
+ `);u=a.pop()??``;for(let t of a){let n=t.trim();if(!n.startsWith(`data:`))continue;let i=n.slice(5).trim();if(!i)continue;let a;try{a=JSON.parse(i)}catch{continue}switch(a.type){case`meta`:if(a.sessionId){let t=String(a.sessionId);if(j=t,g.sessionId!==t){let e=g.key;g.sessionId=t,g.key=t,e!==t&&(m.delete(e),m.set(t,g),h.value===e&&(h.value=t))}let n=String(a.title||``).trim()||e.trim().split(`
3
+ `)[0].trim().slice(0,40)||l(`@AGENT:无标题`);g.title||=n,z(t,n)}break;case`thinking`:k.reasoning||(k.reasoning=``,k.reasoningStatus=`streaming`),k.reasoning+=String(a.delta||``),k.status=`streaming`;break;case`content`:k.status===`pending`&&(k.status=`streaming`);{let e=String(a.delta||``);k.content+=e;let t=s(k.content);t.reasoning&&(k.reasoning||(k.reasoning=``,k.reasoningStatus=`streaming`),k.reasoning=t.reasoning,k.content=t.content)}break;case`tool_call_start`:{let e=r({id:a.toolCallId||c(),name:a.name||``,argsPreview:a.argsPreview||``,arguments:a.argsPreview||``,status:`running`,result:``});A.push(e),k.toolCalls||=[],k.toolCalls.push(e),k.status===`pending`&&(k.status=`streaming`);break}case`tool_output`:{let e=A.find(e=>e.id===a.toolCallId);if(e){let t=`${e.result||``}${String(a.chunk||``)}`;e.result=t.length>C?`…(前文已截断)\n${t.slice(-65536)}`:t}break}case`tool_result`:{let e=A.find(e=>e.id===a.toolCallId);e&&(e.result=String(a.result||``),e.status=`done`,e.name===`ask_user`&&(g.pendingQuestion=null));break}case`ask_user`:g.pendingQuestion={interactionId:String(a.interactionId||``),question:String(a.question||``),options:Array.isArray(a.options)?a.options.map(e=>String(e)):[],allowFreeText:a.allowFreeText!==!1,multiple:a.multiple===!0};break;case`done`:{let e=a.content||k.content,t=s(e);t.reasoning&&!k.reasoning&&(k.reasoning=t.reasoning),k.content=t.content,k.status=`done`,k.reasoningStatus===`streaming`&&(k.reasoningStatus=`done`);break}case`error`:k.status=`error`,k.error=String(a.error||l(`@AGENT:未知错误`)),k.reasoningStatus===`streaming`&&(k.reasoningStatus=`done`)}}}if(b!==g.nonce)return;k.status===`pending`&&(k.status=`done`)}catch(e){if(b!==g.nonce)return;e?.name===`AbortError`||x.signal.aborted?(N=!0,k.content=(k.content||``)+`
4
+
5
+ [`+l(`@AGENT:已停止`)+`]`,k.status=`done`,k.reasoningStatus===`streaming`&&(k.reasoningStatus=`done`)):(k.status=`error`,k.error=e?.message||String(e),i.error(k.error||l(`@AGENT:对话失败`)))}finally{b===g.nonce&&(g.isStreaming=!1,g.pendingQuestion=null,g.answeringQuestion=!1,g.abortController=null),j&&(N&&S.add(j),B(j)),R().catch(()=>{})}}async function K(e){let t=k.value,n=t?.pendingQuestion,r=t?.sessionId,a=(Array.isArray(e)?e:[e]).map(e=>String(e??``).trim()).filter(Boolean);if(!t||!n||!r||!a.length||t.answeringQuestion)return!1;t.answeringQuestion=!0;try{let e=await fetch(`/api/agent/respond`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:r,interactionId:n.interactionId,answer:n.multiple?a:a[0]})}).then(e=>e.json());if(!e.success)throw Error(e.error||l(`@AGENT:回答提交失败`));return t.pendingQuestion=null,!0}catch(e){return i.error(e?.message||l(`@AGENT:回答提交失败`)),!1}finally{t.answeringQuestion=!1}}function q(){let e=k.value;e?.abortController&&(e.abortController.abort(),e.abortController=null)}return{sessions:n,sessionsLoading:u,currentSessionId:h,messages:A,isStreaming:j,sessionLoading:g,pendingQuestion:P,answeringQuestion:F,isSessionGenerating:I,currentEngine:M,pendingEngine:d,isEngineLocked:N,pickEngine:p,loadSessions:R,loadSession:V,deleteSession:H,renameSession:U,newSession:W,sendMessage:G,answerQuestion:K,stop:q}}function A(e){if(!e)return``;try{let t=new Date(e);if(Number.isNaN(t.getTime()))return e;let n=new Date,r=n.getTime()-t.getTime(),i=e=>String(e).padStart(2,`0`);if(t.toDateString()===n.toDateString())return`${i(t.getHours())}:${i(t.getMinutes())}`;if(r<6048e5){let e=Math.floor(r/864e5);return e===0?l(`@AGENT:今天`):`${e}${l(`@AGENT:天前`)}`}return`${t.getFullYear()}-${i(t.getMonth()+1)}-${i(t.getDate())}`}catch{return e}}function j(e,t){return e.map(e=>({id:e.sessionId,title:e.title||l(`@AGENT:无标题`),meta:`${A(e.updatedAt)} · ${e.messageCount??0} ${l(`@AGENT:条`)}`,generatingText:e.isGenerating||t(e.sessionId)?l(`@AGENT:正在生成中...`):``,badge:e.source===`cli`?`CLI`:``,searchText:e.model}))}function M(){return{newConversation:l(`@AGENT:新建会话`),searchPlaceholder:l(`@AGENT:搜索会话...`),empty:l(`@AGENT:暂无会话`),emptyHint:l(`@AGENT:点击上方按钮开始对话`),noResult:l(`@AGENT:未找到匹配的会话`),loading:l(`@AGENT:加载会话中...`),rename:l(`@AGENT:重命名`),delete:l(`@AGENT:删除`),untitled:l(`@AGENT:无标题`)}}var N=`g ai`;function P(){return{title:l(`@AGENT:等待你的回答`),placeholder:l(`@AGENT:输入回答`),submit:l(`@AGENT:提交回答`)}}export{S as a,m as c,j as i,v as l,M as n,k as o,P as r,h as s,N as t,y as u};
@@ -1 +1 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{ar as e,fr as t,i as n,n as r,t as i,wn as a,yr as o,zn as s}from"./element-plus-DxBPQwL7.js";import{m as c}from"./vendor-bdHhLiED.js";import{a as l,n as u,r as d}from"./_plugin-vue_export-helper-dg2VUnSQ.js";var f=`zen-gitsync-task-executor`,p=[{id:`claude`,name:`Claude Code`},{id:`opencode`,name:`OpenCode`},{id:`codex`,name:`Codex`}];function m(e){return p.some(t=>t.id===e)}function h(e){return p.find(t=>t.id===e)?.name||p[0].name}function g(){try{let e=localStorage.getItem(f);if(m(e))return e}catch{}return`claude`}function _(e){try{localStorage.setItem(f,e)}catch{}}var v={"zh-CN":r,"en-US":i};function y(e){return v[e]||r}t(),s();var b=c(`locale`,()=>{let e=o(d()),t=a(()=>y(e.value));async function n(t){l(t),e.value=t;let n=x();n.locale!==t&&await n.saveGeneralSettings({locale:t})}return{currentLocale:e,elementPlusLocale:t,changeLocale:n}});t(),s();var x=c(`config`,()=>{let t=o(``),r=o([]),i=o([]),s=o([]),c=o([]),d=o([]),f=o([]),p=o([]),h=o([]),g=o(!1),_=o({enabled:!1,type:`command`,refId:``}),v=o(!1),y=o(!1),x=o(``),S=o(``),C=o(``),w=o(!0),T=o(!1),E=o(!0),D=o(!1),O=o(!1),k=o(!0),A=o(`light`),j=o(`zh-CN`),M=o([]),N=o(200),P=o(`claude`),F=o(!1),I={layout:{leftRatio:.25,midRatio:.375,rightRatio:.375,topRatio:.5},layoutsByProject:{},aiDiffSummaryByProject:{},fileListViewMode:`list`,fileDiffSplitPercent:35,diffPreviewSplitPercent:55,commandConsole:{expanded:!0,useTerminal:!0,showTerminalSessions:!0,splitPercent:25},editorAutoSave:!1,mindmapDirs:[],mindmapDir:``,headerToolsHidden:[],pickerGlobalSearch:!1},L=o(JSON.parse(JSON.stringify(I))),R=o(!1);function ee(e){C.value=e||``}let z=a(()=>{let e=C.value;return e?L.value.aiDiffSummaryByProject[e]!==!1:!1});function te(){let e=C.value;if(e&&L.value.layoutsByProject?.[e]){L.value.layout={...L.value.layoutsByProject[e]};return}}function B(e){let t=document.documentElement;e===`dark`?t.setAttribute(`data-theme`,`dark`):e===`light`?t.removeAttribute(`data-theme`):window.matchMedia(`(prefers-color-scheme: dark)`).matches?t.setAttribute(`data-theme`,`dark`):t.removeAttribute(`data-theme`)}function ne(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return A.value=e,B(e),$({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}B(A.value);let V=a(()=>({defaultCommitMessage:t.value,descriptionTemplates:r.value,scopeTemplates:i.value,messageTemplates:s.value,commandTemplates:c.value,lockedFiles:d.value,customCommands:f.value,orchestrations:p.value,startupItems:h.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:C.value})),H=a(()=>!!(x.value&&x.value.trim()));async function U(){try{let e=await fetch(`/api/config/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`}}),t=await e.json().catch(()=>({}));return e.ok&&t?.success?(n.success(u(`@D50BB:已打开系统配置文件`)),!0):(n.error(`${u(`@D50BB:打开系统配置文件失败: `)}${t?.error||``}`),!1)}catch(e){return n.error(`${u(`@D50BB:打开系统配置文件失败: `)}${e.message}`),!1}}async function W(e=!1){if(!e&&y.value&&!v.value)return console.log(u(`@D50BB:使用缓存的配置信息`)),V.value;v.value=!0;try{v.value=!0,console.log(u(`@D50BB:加载配置信息...`));let e=await fetch(`/api/config/getConfig`),a=await e.json().catch(()=>({}));if(!e.ok||a&&a.success===!1){let e=String(a?.error||u(`@D50BB:加载配置失败`)),t=String(a?.configPath||``),r=t?`\n${u(`@D50BB:配置文件`)}: ${t}`:``;return n.error(`${u(`@D50BB:加载配置失败: `)}${e}${r}`),x.value=e,S.value=t,null}if(x.value=``,S.value=``,t.value=a.defaultCommitMessage||``,r.value=a.descriptionTemplates||[],i.value=a.scopeTemplates||[],s.value=a.messageTemplates||[],c.value=a.commandTemplates||[],d.value=a.lockedFiles||[],f.value=a.customCommands||[],p.value=a.orchestrations||[],h.value=(a.startupItems||[]).map(e=>({id:String(e?.id??``),type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId??e?.commandId??``),createdAt:Number(e?.createdAt??Date.now()),enabled:typeof e?.enabled!=`boolean`||e.enabled})).filter(e=>e.id&&e.refId),g.value=a.startupAutoRun||!1,_.value={enabled:!!a?.afterQuickPushAction?.enabled,type:a?.afterQuickPushAction?.type===`workflow`?`workflow`:`command`,refId:String(a?.afterQuickPushAction?.refId||``).trim()},a.isStandardCommit!==void 0&&(E.value=!!a.isStandardCommit),a.skipHooks!==void 0&&(D.value=!!a.skipHooks),a.autoQuickPushOnEnter!==void 0&&(O.value=!!a.autoQuickPushOnEnter),a.autoSetDefaultMessage!==void 0&&(T.value=!!a.autoSetDefaultMessage),a.autoClosePushModal!==void 0&&(w.value=!!a.autoClosePushModal),a.pullBeforePush!==void 0&&(k.value=!!a.pullBeforePush),Array.isArray(a.models)&&(M.value=a.models),Number.isFinite(Number(a.aiMaxToolIterations))&&Number(a.aiMaxToolIterations)>0&&(N.value=Math.floor(Number(a.aiMaxToolIterations))),m(a.taskExecutor)&&(P.value=a.taskExecutor),typeof a.notifyOnTaskDone==`boolean`&&(F.value=a.notifyOnTaskDone),a.theme&&[`light`,`dark`,`auto`].includes(a.theme)&&(A.value=a.theme,B(a.theme)),a.locale&&[`zh-CN`,`en-US`].includes(a.locale)){j.value=a.locale,l(a.locale);let e=b();e.currentLocale=a.locale}if(a.currentDirectory&&(C.value=a.currentDirectory),a.ui==null){let e=e=>{try{return localStorage.getItem(e)}catch{return null}},t={},n=e(`zen-gitsync-layout-left-ratio`),r=e(`zen-gitsync-layout-mid-ratio`),i=e(`zen-gitsync-layout-right-ratio`),a=e(`zen-gitsync-layout-top-ratio`);if(n||r||i||a){let e=(e,t)=>{let n=e==null?NaN:parseFloat(e);return Number.isFinite(n)?n:t};t.layout={leftRatio:e(n,I.layout.leftRatio),midRatio:e(r,I.layout.midRatio),rightRatio:e(i,I.layout.rightRatio),topRatio:e(a,I.layout.topRatio)}}let o=e(`zen-gitsync-file-list-view-mode`);(o===`list`||o===`tree`)&&(t.fileListViewMode=o);let s=e(`zen-gitsync-filediff-ratio`)??e(`fileDiff.splitPercent`);if(s!=null){let e=parseFloat(s);Number.isFinite(e)&&(t.fileDiffSplitPercent=Math.min(85,Math.max(15,e)))}let c=e(`useTerminal`),l=e(`isConsoleExpanded`),u=e(`showTerminalSessions`),d=e(`zen-gitsync-commandconsole-ratio`);if(c!==null||l!==null||u!==null||d!=null){let e=d==null?NaN:parseFloat(d);t.commandConsole={useTerminal:c!==`false`,expanded:l!==`false`,showTerminalSessions:u==null||u===`true`,splitPercent:Number.isFinite(e)?Math.min(85,Math.max(15,e)):I.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(L.value={...L.value,...t}),Object.keys(t).length>0&&Y(t,{immediate:!0}).catch(e=>{console.error(`迁移 UI 设置到文件失败:`,e)});try{[`zen-gitsync-theme`,`zen-gitsync-locale`,`zen-gitsync-editor-auto-save`,`zen-gitsync-file-list-view-mode`,`zen-gitsync-filediff-ratio`,`fileDiff.splitPercent`,`isConsoleExpanded`,`useTerminal`,`showTerminalSessions`,`zen-gitsync-commandconsole-ratio`,`zen-gitsync-layout-left-ratio`,`zen-gitsync-layout-mid-ratio`,`zen-gitsync-layout-right-ratio`,`zen-gitsync-layout-top-ratio`,`locale`].forEach(e=>localStorage.removeItem(e))}catch{}}else{let e=a.ui.layoutsByProject&&typeof a.ui.layoutsByProject==`object`&&!Array.isArray(a.ui.layoutsByProject)?a.ui.layoutsByProject:{},t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`&&!Array.isArray(r)){let e=r;t[n]={leftRatio:Number.isFinite(Number(e.leftRatio))?Number(e.leftRatio):I.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):I.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):I.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):I.layout.topRatio}}let n=a.ui.aiDiffSummaryByProject&&typeof a.ui.aiDiffSummaryByProject==`object`&&!Array.isArray(a.ui.aiDiffSummaryByProject)?a.ui.aiDiffSummaryByProject:{},r={};for(let[e,t]of Object.entries(n))typeof t==`boolean`&&(r[e]=t);let i=typeof a.ui.mindmapDir==`string`?a.ui.mindmapDir.trim():``,o=[],s=new Set,c=Array.isArray(a.ui.mindmapDirs)?a.ui.mindmapDirs:[];for(let e of c){if(typeof e!=`string`)continue;let t=e.trim();if(!t)continue;let n=t.toLowerCase();s.has(n)||(s.add(n),o.push(t))}o.length===0&&i&&o.push(i);let l={...I.layout,...a.ui.layout||{}};L.value={layout:l,layoutsByProject:t,aiDiffSummaryByProject:r,fileListViewMode:a.ui.fileListViewMode===`tree`?`tree`:`list`,fileDiffSplitPercent:Number.isFinite(Number(a.ui.fileDiffSplitPercent))?Math.min(85,Math.max(15,Number(a.ui.fileDiffSplitPercent))):I.fileDiffSplitPercent,diffPreviewSplitPercent:Number.isFinite(Number(a.ui.diffPreviewSplitPercent))?Math.min(85,Math.max(25,Number(a.ui.diffPreviewSplitPercent))):I.diffPreviewSplitPercent,commandConsole:{expanded:typeof a.ui.commandConsole?.expanded==`boolean`?a.ui.commandConsole.expanded:I.commandConsole.expanded,useTerminal:typeof a.ui.commandConsole?.useTerminal==`boolean`?a.ui.commandConsole.useTerminal:I.commandConsole.useTerminal,showTerminalSessions:typeof a.ui.commandConsole?.showTerminalSessions==`boolean`?a.ui.commandConsole.showTerminalSessions:I.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(a.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(a.ui.commandConsole.splitPercent))):I.commandConsole.splitPercent},editorAutoSave:typeof a.ui.editorAutoSave==`boolean`?a.ui.editorAutoSave:I.editorAutoSave,mindmapDirs:o,mindmapDir:i,headerToolsHidden:Array.isArray(a.ui.headerToolsHidden)?a.ui.headerToolsHidden.filter(e=>typeof e==`string`):[],pickerGlobalSearch:typeof a.ui.pickerGlobalSearch==`boolean`?a.ui.pickerGlobalSearch:I.pickerGlobalSearch}}return te(),R.value=!0,y.value=!0,console.log(u(`@D50BB:配置信息加载完成`)),V.value}catch(e){return console.error(`加载配置失败:`,e),n.error(`${u(`@D50BB:加载配置失败: `)}${e.message}`),x.value=e.message,null}finally{v.value=!1}}async function G(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:E.value,skipHooks:D.value,autoQuickPushOnEnter:O.value,autoSetDefaultMessage:T.value,autoClosePushModal:w.value,pullBeforePush:k.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}e([E,D,O,T,w,k],()=>{y.value&&G()});let K=null,q={};async function J(){if(K&&=(clearTimeout(K),null),Object.keys(q).length===0)return;let e=q;q={};try{await fetch(`/api/config/save-ui-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})}catch(e){console.error(`保存 UI 设置失败:`,e)}}async function Y(e,t={}){if(R.value){if(t.immediate){Object.assign(q,e),await J();return}Object.assign(q,e),K&&clearTimeout(K),K=setTimeout(()=>{J()},300)}}async function X(){L.value.layout={...I.layout};let e=C.value;return e&&(L.value.layoutsByProject={...L.value.layoutsByProject,[e]:{...L.value.layout}}),await Y({layoutsByProject:L.value.layoutsByProject},{immediate:!0}),L.value.layout}async function re(e){let t=C.value;t&&(L.value.aiDiffSummaryByProject={...L.value.aiDiffSummaryByProject,[t]:e},await Y({aiDiffSummaryByProject:{[t]:e}},{immediate:!0}))}e(()=>L.value.fileListViewMode,e=>{R.value&&Y({fileListViewMode:e})}),e(()=>L.value.fileDiffSplitPercent,e=>{R.value&&Y({fileDiffSplitPercent:e})}),e(()=>L.value.diffPreviewSplitPercent,e=>{R.value&&e!=null&&Y({diffPreviewSplitPercent:e})}),e(()=>L.value.editorAutoSave,e=>{R.value&&Y({editorAutoSave:e})}),e(()=>L.value.headerToolsHidden,e=>{R.value&&Array.isArray(e)&&Y({headerToolsHidden:e})}),e(()=>L.value.mindmapDirs,e=>{R.value&&Array.isArray(e)&&Y({mindmapDirs:e})}),e(()=>L.value.pickerGlobalSearch,e=>{R.value&&Y({pickerGlobalSearch:e})}),e(()=>L.value.layout,e=>{if(!R.value)return;let t=C.value;t&&(L.value.layoutsByProject={...L.value.layoutsByProject,[t]:e},Y({layoutsByProject:L.value.layoutsByProject}))},{deep:!0}),e(()=>L.value.commandConsole,e=>{R.value&&Y({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{J()});async function ie(e){try{let r=await(await fetch(`/api/config/saveDefaultMessage`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({defaultCommitMessage:e})})).json();return r.success?(t.value=e,n.success(u(`@D50BB:默认提交信息已保存`)),!0):(n.error(`${u(`@D50BB:保存失败: `)}${r.error}`),!1)}catch(e){return n.error(`${u(`@D50BB:保存失败: `)}${e.message}`),!1}}async function ae(e){try{let t=await(await fetch(`/api/config/save-after-quick-push-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({afterQuickPushAction:{enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()}})})).json();return t.success?(_.value={enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()},!0):(n.error(`保存提交后启动项失败: ${t.error}`),!1)}catch(e){return n.error(`保存提交后启动项失败: ${e.message}`),!1}}async function oe(e,t){try{let a=await(await fetch(`/api/config/save-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:t})})).json();return a.success?(t===`description`?r.value.includes(e)||r.value.push(e):t===`scope`?i.value.includes(e)||i.value.push(e):t===`message`?s.value.includes(e)||s.value.push(e):t===`command`&&(c.value.includes(e)||c.value.push(e)),n.success(u(`@D50BB:模板已保存`)),!0):(n.error(`${u(`@D50BB:保存模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${u(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function se(e,t){try{let a=await(await fetch(`/api/config/delete-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:t})})).json();return a.success?(t===`description`?r.value=r.value.filter(t=>t!==e):t===`scope`?i.value=i.value.filter(t=>t!==e):t===`message`?s.value=s.value.filter(t=>t!==e):t===`command`&&(c.value=c.value.filter(t=>t!==e)),n.success(u(`@D50BB:模板已删除`)),!0):(n.error(`${u(`@D50BB:删除模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${u(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function ce(e,t,a){try{let o=await(await fetch(`/api/config/update-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({oldTemplate:e,newTemplate:t,type:a})})).json();if(o.success){if(a===`description`){let n=r.value.indexOf(e);n!==-1&&(r.value[n]=t)}else if(a===`scope`){let n=i.value.indexOf(e);n!==-1&&(i.value[n]=t)}else if(a===`message`){let n=s.value.indexOf(e);n!==-1&&(s.value[n]=t)}else if(a===`command`){let n=c.value.indexOf(e);n!==-1&&(c.value[n]=t)}return n.success(u(`@D50BB:模板已更新`)),!0}return n.error(`${u(`@D50BB:更新模板失败: `)}${o.error}`),!1}catch(e){return n.error(`${u(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function le(e,t){try{let a=await(await fetch(`/api/config/pin-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:t})})).json();return a.success?(t===`description`?(r.value=r.value.filter(t=>t!==e),r.value.unshift(e)):t===`scope`?(i.value=i.value.filter(t=>t!==e),i.value.unshift(e)):t===`message`?(s.value=s.value.filter(t=>t!==e),s.value.unshift(e)):t===`command`&&(c.value=c.value.filter(t=>t!==e),c.value.unshift(e)),n.success(u(`@D50BB:模板已置顶`)),!0):(n.error(`${u(`@D50BB:置顶模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${u(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function Z(){try{let e=await(await fetch(`/api/locked-files`)).json();return e.success?(d.value=e.lockedFiles||[],e.lockedFiles):(n.error(`${u(`@D50BB:加载锁定文件列表失败: `)}${e.error}`),[])}catch(e){return console.error(`加载锁定文件列表失败:`,e),n.error(`${u(`@D50BB:加载锁定文件列表失败: `)}${e.message}`),[]}}async function ue(e){try{let t=await(await fetch(`/api/lock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?(await Z(),n.success(`${u(`@D50BB:文件已锁定: `)}${e}`),!0):(n.error(`${u(`@D50BB:锁定文件失败: `)}${t.error}`),!1)}catch(e){return console.error(`锁定文件失败:`,e),n.error(`${u(`@D50BB:锁定文件失败: `)}${e.message}`),!1}}async function de(e){try{let t=await(await fetch(`/api/unlock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?(await Z(),n.success(`${u(`@D50BB:文件已解锁: `)}${e}`),!0):(n.error(`${u(`@D50BB:解锁文件失败: `)}${t.error}`),!1)}catch(e){return console.error(`解锁文件失败:`,e),n.error(`${u(`@D50BB:解锁文件失败: `)}${e.message}`),!1}}async function fe(e){try{let t=await(await fetch(`/api/check-file-lock`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?t.isLocked:(console.error(`检查文件锁定状态失败:`,t.error),!1)}catch(e){return console.error(`检查文件锁定状态失败:`,e),!1}}async function pe(e){try{let t=await(await fetch(`/api/config/save-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e})})).json();return t.success?(await W(!0),n.success(u(`@CMD01:命令已保存`)),!0):(n.error(`${u(`@CMD01:保存命令失败: `)}${t.error}`),!1)}catch(e){return n.error(`${u(`@CMD01:保存命令失败: `)}${e.message}`),!1}}async function me(e){try{let t=await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return t.success?(await W(!0),n.success(u(`@CMD01:命令已删除`)),!0):(n.error(`${u(`@CMD01:删除命令失败: `)}${t.error}`),!1)}catch(e){return n.error(`${u(`@CMD01:删除命令失败: `)}${e.message}`),!1}}async function Q(e,t){try{let r=await(await fetch(`/api/config/update-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,command:t})})).json();return r.success?(await W(!0),n.success(u(`@CMD01:命令已更新`)),!0):(n.error(`${u(`@CMD01:更新命令失败: `)}${r.error}`),!1)}catch(e){return n.error(`${u(`@CMD01:更新命令失败: `)}${e.message}`),!1}}async function he(e){try{let t=await(await fetch(`/api/config/pin-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return t.success?(await W(!0),!0):(n.error(t.error),!1)}catch(e){return n.error(e.message),!1}}async function ge(e){try{let t=await(await fetch(`/api/config/save-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({orchestration:e})})).json();return t.success?(await W(!0),n.success(u(`@ORCH:编排已保存`)),t.orchestration||null):(n.error(`${u(`@ORCH:保存编排失败: `)}${t.error}`),null)}catch(e){return n.error(`${u(`@ORCH:保存编排失败: `)}${e.message}`),null}}async function _e(e){try{let t=await(await fetch(`/api/config/delete-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return t.success?(await W(!0),n.success(u(`@ORCH:编排已删除`)),!0):(n.error(`${u(`@ORCH:删除编排失败: `)}${t.error}`),!1)}catch(e){return n.error(`${u(`@ORCH:删除编排失败: `)}${e.message}`),!1}}async function ve(e,t){try{let r=await(await fetch(`/api/config/update-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,orchestration:t})})).json();return r.success?(await W(!0),n.success(u(`@ORCH:编排已更新`)),!0):(n.error(`${u(`@ORCH:更新编排失败: `)}${r.error}`),!1)}catch(e){return n.error(`${u(`@ORCH:更新编排失败: `)}${e.message}`),!1}}async function ye(e,t){try{let r=await(await fetch(`/api/config/save-startup-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({startupItems:e,startupAutoRun:t===void 0?g.value:t})})).json();return r.success?(h.value=e,t!==void 0&&(g.value=t),!0):(n.error(`保存启动项失败: ${r.error}`),!1)}catch(e){return n.error(`保存启动项失败: ${e.message}`),!1}}async function be(e){try{let t=await(await fetch(`/api/config/save-ai-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({aiMaxToolIterations:e.aiMaxToolIterations})})).json();return t.success?(N.value=Number(t.aiMaxToolIterations)||e.aiMaxToolIterations,!0):(n.error(`${u(`@D50BB:保存 AI 设置失败: `)}${t.error}`),!1)}catch(e){return n.error(`${u(`@D50BB:保存 AI 设置失败: `)}${e.message}`),!1}}async function xe(e){try{let t=await(await fetch(`/api/config/save-models`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({models:e})})).json();return t.success?(M.value=e,!0):(n.error(`${u(`@D50BB:保存模型失败: `)}${t.error}`),!1)}catch(e){return n.error(`${u(`@D50BB:保存模型失败: `)}${e.message}`),!1}}async function $(e){try{let t=await(await fetch(`/api/config/save-general-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})).json();if(t.success){if(e.theme&&(A.value=e.theme,B(e.theme)),e.locale){j.value=e.locale,l(e.locale);let t=b();t.currentLocale=e.locale}return m(e.taskExecutor)&&(P.value=e.taskExecutor),typeof e.notifyOnTaskDone==`boolean`&&(F.value=e.notifyOnTaskDone),!0}return n.error(`保存通用设置失败: ${t.error}`),!1}catch(e){return n.error(`保存通用设置失败: ${e.message}`),!1}}return{models:M,aiMaxToolIterations:N,taskExecutor:P,notifyOnTaskDone:F,defaultCommitMessage:t,descriptionTemplates:r,scopeTemplates:i,messageTemplates:s,commandTemplates:c,lockedFiles:d,customCommands:f,orchestrations:p,startupItems:h,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:y,configLoadError:x,configFilePath:S,hasConfigLoadError:H,currentDirectory:C,config:V,autoClosePushModal:w,autoSetDefaultMessage:T,isStandardCommit:E,skipHooks:D,autoQuickPushOnEnter:O,pullBeforePush:k,theme:A,locale:j,ui:L,isUiLoaded:R,aiDiffSummaryEnabled:z,loadConfig:W,setCurrentDirectory:ee,openSystemConfigFile:U,saveTemplate:oe,saveModels:xe,saveAiSettings:be,saveGeneralSettings:$,saveUiSettings:Y,setAiDiffSummaryEnabled:re,resetUiLayout:X,applyTheme:B,toggleTheme:ne,saveDefaultMessage:ie,deleteTemplate:se,updateTemplate:ce,pinTemplate:le,loadLockedFiles:Z,lockFile:ue,unlockFile:de,isFileLocked:fe,saveCustomCommand:pe,deleteCustomCommand:me,updateCustomCommand:Q,pinCustomCommand:he,saveOrchestration:ge,deleteOrchestration:_e,updateOrchestration:ve,saveStartupItems:ye,saveAfterQuickPushAction:ae,saveCommitSettings:G}});export{_ as a,g as i,b as n,h as o,p as r,x as t};
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{Cn as e,Rn as t,dr as n,i as r,ir as i,n as a,t as o,vr as s}from"./element-plus-D7LDHcAn.js";import{h as c}from"./vendor-CLmPUj3K.js";import{a as l,n as u,r as d}from"./_plugin-vue_export-helper-Dvuzpv2Y.js";var f=`zen-gitsync-task-executor`,p=[{id:`claude`,name:`Claude Code`},{id:`opencode`,name:`OpenCode`},{id:`codex`,name:`Codex`}];function m(e){return p.some(t=>t.id===e)}function h(e){return p.find(t=>t.id===e)?.name||p[0].name}function g(){try{let e=localStorage.getItem(f);if(m(e))return e}catch{}return`claude`}function _(e){try{localStorage.setItem(f,e)}catch{}}var v={"zh-CN":a,"en-US":o};function y(e){return v[e]||a}n(),t();var b=c(`locale`,()=>{let t=s(d()),n=e(()=>y(t.value));async function r(e){l(e),t.value=e;let n=x();n.locale!==e&&await n.saveGeneralSettings({locale:e})}return{currentLocale:t,elementPlusLocale:n,changeLocale:r}});n(),t();var x=c(`config`,()=>{let t=s(``),n=s([]),a=s([]),o=s([]),c=s([]),d=s([]),f=s([]),p=s([]),h=s([]),g=s(!1),_=s({enabled:!1,type:`command`,refId:``}),v=s(!1),y=s(!1),x=s(``),S=s(``),C=s(``),w=s(!0),T=s(!1),E=s(!0),D=s(!1),O=s(!1),k=s(!0),A=s(`light`),j=s(`zh-CN`),M=s([]),N=s(200),P=s(`claude`),F=s(!1),I={layout:{leftRatio:.25,midRatio:.375,rightRatio:.375,topRatio:.5},layoutsByProject:{},aiDiffSummaryByProject:{},fileListViewMode:`list`,fileDiffSplitPercent:35,diffPreviewSplitPercent:55,commandConsole:{expanded:!0,useTerminal:!0,showTerminalSessions:!0,splitPercent:25},editorAutoSave:!1,mindmapDirs:[],mindmapDir:``,headerToolsHidden:[],pickerGlobalSearch:!1},L=s(JSON.parse(JSON.stringify(I))),R=s(!1);function ee(e){C.value=e||``}let z=e(()=>{let e=C.value;return e?L.value.aiDiffSummaryByProject[e]!==!1:!1});function te(){let e=C.value;if(e&&L.value.layoutsByProject?.[e]){L.value.layout={...L.value.layoutsByProject[e]};return}}function B(e){let t=document.documentElement;e===`dark`?t.setAttribute(`data-theme`,`dark`):e===`light`?t.removeAttribute(`data-theme`):window.matchMedia(`(prefers-color-scheme: dark)`).matches?t.setAttribute(`data-theme`,`dark`):t.removeAttribute(`data-theme`)}function ne(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return A.value=e,B(e),$({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}B(A.value);let V=e(()=>({defaultCommitMessage:t.value,descriptionTemplates:n.value,scopeTemplates:a.value,messageTemplates:o.value,commandTemplates:c.value,lockedFiles:d.value,customCommands:f.value,orchestrations:p.value,startupItems:h.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:C.value})),H=e(()=>!!(x.value&&x.value.trim()));async function U(){try{let e=await fetch(`/api/config/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`}}),t=await e.json().catch(()=>({}));return e.ok&&t?.success?(r.success(u(`@D50BB:已打开系统配置文件`)),!0):(r.error(`${u(`@D50BB:打开系统配置文件失败: `)}${t?.error||``}`),!1)}catch(e){return r.error(`${u(`@D50BB:打开系统配置文件失败: `)}${e.message}`),!1}}async function W(e=!1){if(!e&&y.value&&!v.value)return console.log(u(`@D50BB:使用缓存的配置信息`)),V.value;v.value=!0;try{v.value=!0,console.log(u(`@D50BB:加载配置信息...`));let e=await fetch(`/api/config/getConfig`),i=await e.json().catch(()=>({}));if(!e.ok||i&&i.success===!1){let e=String(i?.error||u(`@D50BB:加载配置失败`)),t=String(i?.configPath||``),n=t?`\n${u(`@D50BB:配置文件`)}: ${t}`:``;return r.error(`${u(`@D50BB:加载配置失败: `)}${e}${n}`),x.value=e,S.value=t,null}if(x.value=``,S.value=``,t.value=i.defaultCommitMessage||``,n.value=i.descriptionTemplates||[],a.value=i.scopeTemplates||[],o.value=i.messageTemplates||[],c.value=i.commandTemplates||[],d.value=i.lockedFiles||[],f.value=i.customCommands||[],p.value=i.orchestrations||[],h.value=(i.startupItems||[]).map(e=>({id:String(e?.id??``),type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId??e?.commandId??``),createdAt:Number(e?.createdAt??Date.now()),enabled:typeof e?.enabled!=`boolean`||e.enabled})).filter(e=>e.id&&e.refId),g.value=i.startupAutoRun||!1,_.value={enabled:!!i?.afterQuickPushAction?.enabled,type:i?.afterQuickPushAction?.type===`workflow`?`workflow`:`command`,refId:String(i?.afterQuickPushAction?.refId||``).trim()},i.isStandardCommit!==void 0&&(E.value=!!i.isStandardCommit),i.skipHooks!==void 0&&(D.value=!!i.skipHooks),i.autoQuickPushOnEnter!==void 0&&(O.value=!!i.autoQuickPushOnEnter),i.autoSetDefaultMessage!==void 0&&(T.value=!!i.autoSetDefaultMessage),i.autoClosePushModal!==void 0&&(w.value=!!i.autoClosePushModal),i.pullBeforePush!==void 0&&(k.value=!!i.pullBeforePush),Array.isArray(i.models)&&(M.value=i.models),Number.isFinite(Number(i.aiMaxToolIterations))&&Number(i.aiMaxToolIterations)>0&&(N.value=Math.floor(Number(i.aiMaxToolIterations))),m(i.taskExecutor)&&(P.value=i.taskExecutor),typeof i.notifyOnTaskDone==`boolean`&&(F.value=i.notifyOnTaskDone),i.theme&&[`light`,`dark`,`auto`].includes(i.theme)&&(A.value=i.theme,B(i.theme)),i.locale&&[`zh-CN`,`en-US`].includes(i.locale)){j.value=i.locale,l(i.locale);let e=b();e.currentLocale=i.locale}if(i.currentDirectory&&(C.value=i.currentDirectory),i.ui==null){let e=e=>{try{return localStorage.getItem(e)}catch{return null}},t={},n=e(`zen-gitsync-layout-left-ratio`),r=e(`zen-gitsync-layout-mid-ratio`),i=e(`zen-gitsync-layout-right-ratio`),a=e(`zen-gitsync-layout-top-ratio`);if(n||r||i||a){let e=(e,t)=>{let n=e==null?NaN:parseFloat(e);return Number.isFinite(n)?n:t};t.layout={leftRatio:e(n,I.layout.leftRatio),midRatio:e(r,I.layout.midRatio),rightRatio:e(i,I.layout.rightRatio),topRatio:e(a,I.layout.topRatio)}}let o=e(`zen-gitsync-file-list-view-mode`);(o===`list`||o===`tree`)&&(t.fileListViewMode=o);let s=e(`zen-gitsync-filediff-ratio`)??e(`fileDiff.splitPercent`);if(s!=null){let e=parseFloat(s);Number.isFinite(e)&&(t.fileDiffSplitPercent=Math.min(85,Math.max(15,e)))}let c=e(`useTerminal`),l=e(`isConsoleExpanded`),u=e(`showTerminalSessions`),d=e(`zen-gitsync-commandconsole-ratio`);if(c!==null||l!==null||u!==null||d!=null){let e=d==null?NaN:parseFloat(d);t.commandConsole={useTerminal:c!==`false`,expanded:l!==`false`,showTerminalSessions:u==null||u===`true`,splitPercent:Number.isFinite(e)?Math.min(85,Math.max(15,e)):I.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(L.value={...L.value,...t}),Object.keys(t).length>0&&Y(t,{immediate:!0}).catch(e=>{console.error(`迁移 UI 设置到文件失败:`,e)});try{[`zen-gitsync-theme`,`zen-gitsync-locale`,`zen-gitsync-editor-auto-save`,`zen-gitsync-file-list-view-mode`,`zen-gitsync-filediff-ratio`,`fileDiff.splitPercent`,`isConsoleExpanded`,`useTerminal`,`showTerminalSessions`,`zen-gitsync-commandconsole-ratio`,`zen-gitsync-layout-left-ratio`,`zen-gitsync-layout-mid-ratio`,`zen-gitsync-layout-right-ratio`,`zen-gitsync-layout-top-ratio`,`locale`].forEach(e=>localStorage.removeItem(e))}catch{}}else{let e=i.ui.layoutsByProject&&typeof i.ui.layoutsByProject==`object`&&!Array.isArray(i.ui.layoutsByProject)?i.ui.layoutsByProject:{},t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`&&!Array.isArray(r)){let e=r;t[n]={leftRatio:Number.isFinite(Number(e.leftRatio))?Number(e.leftRatio):I.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):I.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):I.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):I.layout.topRatio}}let n=i.ui.aiDiffSummaryByProject&&typeof i.ui.aiDiffSummaryByProject==`object`&&!Array.isArray(i.ui.aiDiffSummaryByProject)?i.ui.aiDiffSummaryByProject:{},r={};for(let[e,t]of Object.entries(n))typeof t==`boolean`&&(r[e]=t);let a=typeof i.ui.mindmapDir==`string`?i.ui.mindmapDir.trim():``,o=[],s=new Set,c=Array.isArray(i.ui.mindmapDirs)?i.ui.mindmapDirs:[];for(let e of c){if(typeof e!=`string`)continue;let t=e.trim();if(!t)continue;let n=t.toLowerCase();s.has(n)||(s.add(n),o.push(t))}o.length===0&&a&&o.push(a);let l={...I.layout,...i.ui.layout||{}};L.value={layout:l,layoutsByProject:t,aiDiffSummaryByProject:r,fileListViewMode:i.ui.fileListViewMode===`tree`?`tree`:`list`,fileDiffSplitPercent:Number.isFinite(Number(i.ui.fileDiffSplitPercent))?Math.min(85,Math.max(15,Number(i.ui.fileDiffSplitPercent))):I.fileDiffSplitPercent,diffPreviewSplitPercent:Number.isFinite(Number(i.ui.diffPreviewSplitPercent))?Math.min(85,Math.max(25,Number(i.ui.diffPreviewSplitPercent))):I.diffPreviewSplitPercent,commandConsole:{expanded:typeof i.ui.commandConsole?.expanded==`boolean`?i.ui.commandConsole.expanded:I.commandConsole.expanded,useTerminal:typeof i.ui.commandConsole?.useTerminal==`boolean`?i.ui.commandConsole.useTerminal:I.commandConsole.useTerminal,showTerminalSessions:typeof i.ui.commandConsole?.showTerminalSessions==`boolean`?i.ui.commandConsole.showTerminalSessions:I.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(i.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(i.ui.commandConsole.splitPercent))):I.commandConsole.splitPercent},editorAutoSave:typeof i.ui.editorAutoSave==`boolean`?i.ui.editorAutoSave:I.editorAutoSave,mindmapDirs:o,mindmapDir:a,headerToolsHidden:Array.isArray(i.ui.headerToolsHidden)?i.ui.headerToolsHidden.filter(e=>typeof e==`string`):[],pickerGlobalSearch:typeof i.ui.pickerGlobalSearch==`boolean`?i.ui.pickerGlobalSearch:I.pickerGlobalSearch}}return te(),R.value=!0,y.value=!0,console.log(u(`@D50BB:配置信息加载完成`)),V.value}catch(e){return console.error(`加载配置失败:`,e),r.error(`${u(`@D50BB:加载配置失败: `)}${e.message}`),x.value=e.message,null}finally{v.value=!1}}async function G(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:E.value,skipHooks:D.value,autoQuickPushOnEnter:O.value,autoSetDefaultMessage:T.value,autoClosePushModal:w.value,pullBeforePush:k.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}i([E,D,O,T,w,k],()=>{y.value&&G()});let K=null,q={};async function J(){if(K&&=(clearTimeout(K),null),Object.keys(q).length===0)return;let e=q;q={};try{await fetch(`/api/config/save-ui-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})}catch(e){console.error(`保存 UI 设置失败:`,e)}}async function Y(e,t={}){if(R.value){if(t.immediate){Object.assign(q,e),await J();return}Object.assign(q,e),K&&clearTimeout(K),K=setTimeout(()=>{J()},300)}}async function X(){L.value.layout={...I.layout};let e=C.value;return e&&(L.value.layoutsByProject={...L.value.layoutsByProject,[e]:{...L.value.layout}}),await Y({layoutsByProject:L.value.layoutsByProject},{immediate:!0}),L.value.layout}async function re(e){let t=C.value;t&&(L.value.aiDiffSummaryByProject={...L.value.aiDiffSummaryByProject,[t]:e},await Y({aiDiffSummaryByProject:{[t]:e}},{immediate:!0}))}i(()=>L.value.fileListViewMode,e=>{R.value&&Y({fileListViewMode:e})}),i(()=>L.value.fileDiffSplitPercent,e=>{R.value&&Y({fileDiffSplitPercent:e})}),i(()=>L.value.diffPreviewSplitPercent,e=>{R.value&&e!=null&&Y({diffPreviewSplitPercent:e})}),i(()=>L.value.editorAutoSave,e=>{R.value&&Y({editorAutoSave:e})}),i(()=>L.value.headerToolsHidden,e=>{R.value&&Array.isArray(e)&&Y({headerToolsHidden:e})}),i(()=>L.value.mindmapDirs,e=>{R.value&&Array.isArray(e)&&Y({mindmapDirs:e})}),i(()=>L.value.pickerGlobalSearch,e=>{R.value&&Y({pickerGlobalSearch:e})}),i(()=>L.value.layout,e=>{if(!R.value)return;let t=C.value;t&&(L.value.layoutsByProject={...L.value.layoutsByProject,[t]:e},Y({layoutsByProject:L.value.layoutsByProject}))},{deep:!0}),i(()=>L.value.commandConsole,e=>{R.value&&Y({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{J()});async function ie(e){try{let n=await(await fetch(`/api/config/saveDefaultMessage`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({defaultCommitMessage:e})})).json();return n.success?(t.value=e,r.success(u(`@D50BB:默认提交信息已保存`)),!0):(r.error(`${u(`@D50BB:保存失败: `)}${n.error}`),!1)}catch(e){return r.error(`${u(`@D50BB:保存失败: `)}${e.message}`),!1}}async function ae(e){try{let t=await(await fetch(`/api/config/save-after-quick-push-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({afterQuickPushAction:{enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()}})})).json();return t.success?(_.value={enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()},!0):(r.error(`保存提交后启动项失败: ${t.error}`),!1)}catch(e){return r.error(`保存提交后启动项失败: ${e.message}`),!1}}async function oe(e,t){try{let i=await(await fetch(`/api/config/save-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:t})})).json();return i.success?(t===`description`?n.value.includes(e)||n.value.push(e):t===`scope`?a.value.includes(e)||a.value.push(e):t===`message`?o.value.includes(e)||o.value.push(e):t===`command`&&(c.value.includes(e)||c.value.push(e)),r.success(u(`@D50BB:模板已保存`)),!0):(r.error(`${u(`@D50BB:保存模板失败: `)}${i.error}`),!1)}catch(e){return r.error(`${u(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function se(e,t){try{let i=await(await fetch(`/api/config/delete-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:t})})).json();return i.success?(t===`description`?n.value=n.value.filter(t=>t!==e):t===`scope`?a.value=a.value.filter(t=>t!==e):t===`message`?o.value=o.value.filter(t=>t!==e):t===`command`&&(c.value=c.value.filter(t=>t!==e)),r.success(u(`@D50BB:模板已删除`)),!0):(r.error(`${u(`@D50BB:删除模板失败: `)}${i.error}`),!1)}catch(e){return r.error(`${u(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function ce(e,t,i){try{let s=await(await fetch(`/api/config/update-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({oldTemplate:e,newTemplate:t,type:i})})).json();if(s.success){if(i===`description`){let r=n.value.indexOf(e);r!==-1&&(n.value[r]=t)}else if(i===`scope`){let n=a.value.indexOf(e);n!==-1&&(a.value[n]=t)}else if(i===`message`){let n=o.value.indexOf(e);n!==-1&&(o.value[n]=t)}else if(i===`command`){let n=c.value.indexOf(e);n!==-1&&(c.value[n]=t)}return r.success(u(`@D50BB:模板已更新`)),!0}return r.error(`${u(`@D50BB:更新模板失败: `)}${s.error}`),!1}catch(e){return r.error(`${u(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function le(e,t){try{let i=await(await fetch(`/api/config/pin-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:t})})).json();return i.success?(t===`description`?(n.value=n.value.filter(t=>t!==e),n.value.unshift(e)):t===`scope`?(a.value=a.value.filter(t=>t!==e),a.value.unshift(e)):t===`message`?(o.value=o.value.filter(t=>t!==e),o.value.unshift(e)):t===`command`&&(c.value=c.value.filter(t=>t!==e),c.value.unshift(e)),r.success(u(`@D50BB:模板已置顶`)),!0):(r.error(`${u(`@D50BB:置顶模板失败: `)}${i.error}`),!1)}catch(e){return r.error(`${u(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function Z(){try{let e=await(await fetch(`/api/locked-files`)).json();return e.success?(d.value=e.lockedFiles||[],e.lockedFiles):(r.error(`${u(`@D50BB:加载锁定文件列表失败: `)}${e.error}`),[])}catch(e){return console.error(`加载锁定文件列表失败:`,e),r.error(`${u(`@D50BB:加载锁定文件列表失败: `)}${e.message}`),[]}}async function ue(e){try{let t=await(await fetch(`/api/lock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?(await Z(),r.success(`${u(`@D50BB:文件已锁定: `)}${e}`),!0):(r.error(`${u(`@D50BB:锁定文件失败: `)}${t.error}`),!1)}catch(e){return console.error(`锁定文件失败:`,e),r.error(`${u(`@D50BB:锁定文件失败: `)}${e.message}`),!1}}async function de(e){try{let t=await(await fetch(`/api/unlock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?(await Z(),r.success(`${u(`@D50BB:文件已解锁: `)}${e}`),!0):(r.error(`${u(`@D50BB:解锁文件失败: `)}${t.error}`),!1)}catch(e){return console.error(`解锁文件失败:`,e),r.error(`${u(`@D50BB:解锁文件失败: `)}${e.message}`),!1}}async function fe(e){try{let t=await(await fetch(`/api/check-file-lock`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?t.isLocked:(console.error(`检查文件锁定状态失败:`,t.error),!1)}catch(e){return console.error(`检查文件锁定状态失败:`,e),!1}}async function pe(e){try{let t=await(await fetch(`/api/config/save-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e})})).json();return t.success?(await W(!0),r.success(u(`@CMD01:命令已保存`)),!0):(r.error(`${u(`@CMD01:保存命令失败: `)}${t.error}`),!1)}catch(e){return r.error(`${u(`@CMD01:保存命令失败: `)}${e.message}`),!1}}async function me(e){try{let t=await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return t.success?(await W(!0),r.success(u(`@CMD01:命令已删除`)),!0):(r.error(`${u(`@CMD01:删除命令失败: `)}${t.error}`),!1)}catch(e){return r.error(`${u(`@CMD01:删除命令失败: `)}${e.message}`),!1}}async function Q(e,t){try{let n=await(await fetch(`/api/config/update-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,command:t})})).json();return n.success?(await W(!0),r.success(u(`@CMD01:命令已更新`)),!0):(r.error(`${u(`@CMD01:更新命令失败: `)}${n.error}`),!1)}catch(e){return r.error(`${u(`@CMD01:更新命令失败: `)}${e.message}`),!1}}async function he(e){try{let t=await(await fetch(`/api/config/pin-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return t.success?(await W(!0),!0):(r.error(t.error),!1)}catch(e){return r.error(e.message),!1}}async function ge(e){try{let t=await(await fetch(`/api/config/save-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({orchestration:e})})).json();return t.success?(await W(!0),r.success(u(`@ORCH:编排已保存`)),t.orchestration||null):(r.error(`${u(`@ORCH:保存编排失败: `)}${t.error}`),null)}catch(e){return r.error(`${u(`@ORCH:保存编排失败: `)}${e.message}`),null}}async function _e(e){try{let t=await(await fetch(`/api/config/delete-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return t.success?(await W(!0),r.success(u(`@ORCH:编排已删除`)),!0):(r.error(`${u(`@ORCH:删除编排失败: `)}${t.error}`),!1)}catch(e){return r.error(`${u(`@ORCH:删除编排失败: `)}${e.message}`),!1}}async function ve(e,t){try{let n=await(await fetch(`/api/config/update-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,orchestration:t})})).json();return n.success?(await W(!0),r.success(u(`@ORCH:编排已更新`)),!0):(r.error(`${u(`@ORCH:更新编排失败: `)}${n.error}`),!1)}catch(e){return r.error(`${u(`@ORCH:更新编排失败: `)}${e.message}`),!1}}async function ye(e,t){try{let n=await(await fetch(`/api/config/save-startup-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({startupItems:e,startupAutoRun:t===void 0?g.value:t})})).json();return n.success?(h.value=e,t!==void 0&&(g.value=t),!0):(r.error(`保存启动项失败: ${n.error}`),!1)}catch(e){return r.error(`保存启动项失败: ${e.message}`),!1}}async function be(e){try{let t=await(await fetch(`/api/config/save-ai-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({aiMaxToolIterations:e.aiMaxToolIterations})})).json();return t.success?(N.value=Number(t.aiMaxToolIterations)||e.aiMaxToolIterations,!0):(r.error(`${u(`@D50BB:保存 AI 设置失败: `)}${t.error}`),!1)}catch(e){return r.error(`${u(`@D50BB:保存 AI 设置失败: `)}${e.message}`),!1}}async function xe(e){try{let t=await(await fetch(`/api/config/save-models`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({models:e})})).json();return t.success?(M.value=e,!0):(r.error(`${u(`@D50BB:保存模型失败: `)}${t.error}`),!1)}catch(e){return r.error(`${u(`@D50BB:保存模型失败: `)}${e.message}`),!1}}async function $(e){try{let t=await(await fetch(`/api/config/save-general-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})).json();if(t.success){if(e.theme&&(A.value=e.theme,B(e.theme)),e.locale){j.value=e.locale,l(e.locale);let t=b();t.currentLocale=e.locale}return m(e.taskExecutor)&&(P.value=e.taskExecutor),typeof e.notifyOnTaskDone==`boolean`&&(F.value=e.notifyOnTaskDone),!0}return r.error(`保存通用设置失败: ${t.error}`),!1}catch(e){return r.error(`保存通用设置失败: ${e.message}`),!1}}return{models:M,aiMaxToolIterations:N,taskExecutor:P,notifyOnTaskDone:F,defaultCommitMessage:t,descriptionTemplates:n,scopeTemplates:a,messageTemplates:o,commandTemplates:c,lockedFiles:d,customCommands:f,orchestrations:p,startupItems:h,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:y,configLoadError:x,configFilePath:S,hasConfigLoadError:H,currentDirectory:C,config:V,autoClosePushModal:w,autoSetDefaultMessage:T,isStandardCommit:E,skipHooks:D,autoQuickPushOnEnter:O,pullBeforePush:k,theme:A,locale:j,ui:L,isUiLoaded:R,aiDiffSummaryEnabled:z,loadConfig:W,setCurrentDirectory:ee,openSystemConfigFile:U,saveTemplate:oe,saveModels:xe,saveAiSettings:be,saveGeneralSettings:$,saveUiSettings:Y,setAiDiffSummaryEnabled:re,resetUiLayout:X,applyTheme:B,toggleTheme:ne,saveDefaultMessage:ie,deleteTemplate:se,updateTemplate:ce,pinTemplate:le,loadLockedFiles:Z,lockFile:ue,unlockFile:de,isFileLocked:fe,saveCustomCommand:pe,deleteCustomCommand:me,updateCustomCommand:Q,pinCustomCommand:he,saveOrchestration:ge,deleteOrchestration:_e,updateOrchestration:ve,saveStartupItems:ye,saveAfterQuickPushAction:ae,saveCommitSettings:G}});export{m as a,g as i,b as n,_ as o,p as r,h as s,x as t};