zen-gitsync 2.17.28 → 2.17.29

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 (76) hide show
  1. package/README.md +8 -6
  2. package/package.json +4 -1
  3. package/src/ui/public/assets/{AgentEngineSelector-D8iaDrev.js → AgentEngineSelector-Wl7dKYKL.js} +2 -2
  4. package/src/ui/public/assets/{AgentView-BaYMwfC4.css → AgentView-Bebv5xk6.css} +1 -1
  5. package/src/ui/public/assets/AgentView-CebQ3545.js +11 -0
  6. package/src/ui/public/assets/AppVersionBadge-jm8ejuZ-.js +2 -0
  7. package/src/ui/public/assets/{BranchSelector-CTrTouMm.js → BranchSelector-CcNILIbg.js} +1 -1
  8. package/src/ui/public/assets/CommitForm-1ocxo8Cb.js +6 -0
  9. package/src/ui/public/assets/{CommonDialog-Bwj--3EO.js → CommonDialog-DpFTO5cg.js} +1 -1
  10. package/src/ui/public/assets/EditorView-CtRHV1Sv.js +37 -0
  11. package/src/ui/public/assets/FileDiffViewer-DXJO-G55.js +15 -0
  12. package/src/ui/public/assets/{FlowExecutionViewer-awWx7pMb.js → FlowExecutionViewer-d4O5Y9Ca.js} +1 -1
  13. package/src/ui/public/assets/FlowOrchestrationWorkspace-CKLRMeaL.js +21 -0
  14. package/src/ui/public/assets/{IconButton-IoukQQts.js → IconButton-Dl1cdP_x.js} +1 -1
  15. package/src/ui/public/assets/{LogList-Ca0hE-S0.js → LogList-CdDRC_CO.js} +4 -4
  16. package/src/ui/public/assets/MindmapView-U84MWPHc.js +2 -0
  17. package/src/ui/public/assets/MonitorView-spOV0cP7.js +1 -0
  18. package/src/ui/public/assets/{ProjectStartupButton-C8OZPgjM.js → ProjectStartupButton-BbAbfFn2.js} +1 -1
  19. package/src/ui/public/assets/{RecentDirectoriesChat-DFGIm3ab.js → RecentDirectoriesChat-CxNjjgVG.js} +2 -2
  20. package/src/ui/public/assets/RemoteManagerDialog-BVm2-Hn4.js +4 -0
  21. package/src/ui/public/assets/{RemoteRepoCard-HV8oHZL_.js → RemoteRepoCard-UHK_hrDS.js} +2 -2
  22. package/src/ui/public/assets/{SourceMapView-ByGif9Z8.js → SourceMapView-PHMr0wt3.js} +2 -2
  23. package/src/ui/public/assets/{SvgIcon-Cv-Ewpj-.js → SvgIcon-Dk7WnZLB.js} +1 -1
  24. package/src/ui/public/assets/{TemplateManager-DBuPZE4y.js → TemplateManager-B3ZNTXnP.js} +1 -1
  25. package/src/ui/public/assets/UserInputNode-DeAD7H0z.js +1 -0
  26. package/src/ui/public/assets/WorkbenchView-DsZ2ONpW.js +143 -0
  27. package/src/ui/public/assets/WorkbenchView-kZ8DoH2l.css +1 -0
  28. package/src/ui/public/assets/{_plugin-vue_export-helper-BP5VbhV0.js → _plugin-vue_export-helper-BKeZSroN.js} +5 -5
  29. package/src/ui/public/assets/{agentConversations-CDIB8kgC.js → agentConversations-ChTc-LkQ.js} +5 -5
  30. package/src/ui/public/assets/{configStore-eQKYDKzd.js → configStore-fJaic3kE.js} +1 -1
  31. package/src/ui/public/assets/{css.worker-BDCmgL4U.js → css.worker-DFdt6_zu.js} +9 -9
  32. package/src/ui/public/assets/editor.worker-O-CH8JUO.js +26 -0
  33. package/src/ui/public/assets/element-plus-D0R8BMj4.js +48 -0
  34. package/src/ui/public/assets/{element-plus-C1xzgNSR.css → element-plus-Qexo5hiM.css} +1 -1
  35. package/src/ui/public/assets/{flow-mindmap-B3900Z4K.js → flow-mindmap-Doi70WWn.js} +1 -1
  36. package/src/ui/public/assets/gitStore-D9oF5nof.js +6 -0
  37. package/src/ui/public/assets/{html.worker-DG8hnSJR.js → html.worker-JUzsMP-j.js} +8 -8
  38. package/src/ui/public/assets/index-CKxygqdx.js +148 -0
  39. package/src/ui/public/assets/json.worker-B4dEhy0e.js +58 -0
  40. package/src/ui/public/assets/{monaco-BScz9v63.js → monaco-DkJuNcCr.js} +6 -6
  41. package/src/ui/public/assets/{office-docx-C8sYW8O1.js → office-docx-O0YXk5gA.js} +1 -1
  42. package/src/ui/public/assets/{office-excel-DpZn5My2.js → office-excel-CXD9VwgB.js} +1 -1
  43. package/src/ui/public/assets/{office-pptx-BnYBTwT7.js → office-pptx-CiF2OlTq.js} +3 -3
  44. package/src/ui/public/assets/previewSandbox-21uStCdd.js +9 -0
  45. package/src/ui/public/assets/{toolsStore-C4B7BL-O.js → toolsStore-C89takm3.js} +1 -1
  46. package/src/ui/public/assets/{ts.worker-DgFMIcEs.js → ts.worker-CmEKzkmF.js} +49 -49
  47. package/src/ui/public/assets/{useThemeObserver-CGbhdyNi.js → useThemeObserver-BvSA7RDh.js} +1 -1
  48. package/src/ui/public/assets/{vendor-CUTaFm6P.js → vendor-CCrjQw5C.js} +2 -2
  49. package/src/ui/public/assets/{vue-flow-CxnoC7Uq.js → vue-flow-5Aq2bwoG.js} +1 -1
  50. package/src/ui/public/index.html +18 -18
  51. package/src/ui/server/routes/fs.js +12 -2
  52. package/src/ui/server/routes/workbench/agentMarketplace.js +130 -23
  53. package/src/ui/server/routes/workbench/agentMarketplace.test.js +68 -1
  54. package/src/ui/server/routes/workbench/envContext.js +69 -29
  55. package/src/ui/server/routes/workbench/envContext.test.js +68 -0
  56. package/src/ui/server/routes/workbench/executorModels.test.js +326 -326
  57. package/src/ui/server/routes/workbench/index.js +10 -3
  58. package/src/ui/server/routes/workbench/taskRunner.js +11 -4
  59. package/src/ui/public/assets/AgentView-BQz9h_Qi.js +0 -10
  60. package/src/ui/public/assets/AppVersionBadge-Mx8QwTA1.js +0 -2
  61. package/src/ui/public/assets/CommitForm-DsfySGI2.js +0 -6
  62. package/src/ui/public/assets/EditorView-DiyJWwAk.js +0 -37
  63. package/src/ui/public/assets/FileDiffViewer-DFFyUPF2.js +0 -15
  64. package/src/ui/public/assets/FlowOrchestrationWorkspace-Brq0M2sZ.js +0 -21
  65. package/src/ui/public/assets/MindmapView-BO_PG-mg.js +0 -2
  66. package/src/ui/public/assets/MonitorView-BXlLpzYU.js +0 -1
  67. package/src/ui/public/assets/RemoteManagerDialog-DFtZmhn4.js +0 -4
  68. package/src/ui/public/assets/UserInputNode-CVKtLvHE.js +0 -1
  69. package/src/ui/public/assets/WorkbenchView-5K0toOqC.js +0 -143
  70. package/src/ui/public/assets/WorkbenchView-BA7mKIr4.css +0 -1
  71. package/src/ui/public/assets/editor.worker-GCPm6rMv.js +0 -26
  72. package/src/ui/public/assets/element-plus-D7LDHcAn.js +0 -48
  73. package/src/ui/public/assets/gitStore-8MMG-kBB.js +0 -6
  74. package/src/ui/public/assets/index-DBOS6HZF.js +0 -148
  75. package/src/ui/public/assets/json.worker-CxwlJRnL.js +0 -58
  76. package/src/ui/public/assets/previewSandbox-C-BRP5dF.js +0 -9
@@ -1,6 +1,6 @@
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{a as s,c,l,t as u}from"./vendor-CUTaFm6P.js";import{n as d}from"./_plugin-vue_export-helper-BP5VbhV0.js";import{a as f,i as p,t as m}from"./configStore-eQKYDKzd.js";import{a as h,c as g,l as _,t as v}from"./index-DBOS6HZF.js";function y(e,t=200){let n=typeof e==`string`?e:``;if(!n.trim())return``;let r=n.split(`
2
- `).map(e=>e.trim()).filter(Boolean),i=(r.length?r[r.length-1]:``).replace(/\s+/g,` `);return i.length>t?`${i.slice(0,t-1)}…`:i}function b(e){return d(e===`done`?`@AGENT:对话已完成`:`@AGENT:对话出错`)}function x(e){let t=!1,n=!1;try{let e=m();t=!!e.notifyOnTaskDone,n=!!e.notifySoundOnTaskDone}catch{t=!1,n=!1}if(!t)return!1;let r=String(e.title||``).trim()||d(`@AGENT:无标题`),a=y(e.detail),o=e.tag||`zen-gitsync-agent`,s=a?`${r}\n${a}`:r;return n&&v(e.kind),_()&&g({title:b(e.kind),body:s,tag:o})||e.alreadyToast||(e.kind===`done`?i.success(d(`@AGENT:对话完成:{name}`,{name:r})):i.error(d(`@AGENT:对话出错:{name}`,{name:r}))),!0}var S=`g ai`,C=`g-ai`,w=[{id:`gai`,name:S},...p.map(e=>({id:e.id,name:e.name}))],T=`zen-gitsync-agent-engine`;function E(e){return e===`gai`||f(e)}function D(e){return w.find(t=>t.id===e)?.name||`g ai`}function O(e){return f(e)}function k(){try{let e=localStorage.getItem(T);if(E(e))return e}catch{}return`gai`}function A(e){try{localStorage.setItem(T,e)}catch{}}t(),n();var j=[`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(`,`),M=65536,N=`local-`,P=0;function F(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:R(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=[],c=r;for(;c<n;){let t=e.messages[c];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||s(),name:e.function?.name||``,arguments:e.function?.arguments||``,argsPreview:I(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>M&&(e=`…(前文已截断)\n${e.slice(-65536)}`),n.result=e}}c++}r=c-1,a.length>M&&(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 I(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||``);case`update_plan`:{let e=l(t,`update_plan`);if(!e)return``;let{total:r,done:i}=u(e),a=String(n.explanation||``).replace(/\s+/g,` `).trim();return[`${i}/${r}`,a].filter(Boolean).join(` — `).slice(0,200)}default:return JSON.stringify(n).slice(0,200)}}catch{return t.slice(0,200)}}function L(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 R(e){let t=/^data:([^;,]+)/.exec(e);return t?t[1]:``}function z(){let t=m(),n=h(),l=++P,u=o([]),f=o(!1),p=o(k());function g(e){E(e)&&(p.value=e,A(e))}let _=r(new Map),v=o(null),y=o(!1),b=0,S=0,C=new Set;function w(e){return{key:e,sessionId:e.startsWith(N)?null:e,title:``,messages:[],isStreaming:!1,abortController:null,nonce:0,pendingQuestion:null,answeringQuestion:!1}}function T(e){let t=_.get(e);return t||=(_.set(e,w(e)),_.get(e)),t}let D=e(()=>v.value?_.get(v.value)??null:null),O=e(()=>D.value?.messages??[]),j=e(()=>D.value?.isStreaming??!1),I=e(()=>{let e=u.value.find(e=>e.sessionId===v.value);return E(e?.engine)?e.engine:p.value}),R=e(()=>u.value.some(e=>e.sessionId===v.value)),z=e(()=>D.value?.pendingQuestion??null),B=e(()=>D.value?.answeringQuestion??!1);function V(e){return!!_.get(e)?.isStreaming}function H(e){let n=[...e];for(let e of _.values()){if(!e.sessionId)continue;let r=n.findIndex(t=>t.sessionId===e.sessionId);if(r!==-1){C.delete(e.sessionId),e.isStreaming&&(n[r]={...n[r],isGenerating:!0});continue}if(!e.isStreaming&&!C.has(e.sessionId))continue;let i=new Date().toISOString();n.unshift({sessionId:e.sessionId,title:e.title||d(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:p.value,createdAt:i,updatedAt:i,messageCount:e.messages.filter(e=>e.role===`user`).length||1,size:0,isGenerating:e.isStreaming})}return n}async function U(){let e=++b,n=t.currentDirectory||``;if(!n){u.value=[],f.value=!1;return}f.value=!0;try{let t=`/api/agent/sessions?cwd=${encodeURIComponent(n)}`,r=await fetch(t).then(e=>e.json());if(e!==b)return;if(!r.success){i.error(r.error||d(`@AGENT:加载会话列表失败`));return}let a=Array.isArray(r.sessions)?r.sessions:[];u.value=H(a)}catch(t){if(e!==b)return;i.error(d(`@AGENT:加载会话列表失败`)+`: `+(t?.message||t))}finally{e===b&&(f.value=!1)}}function W(e,n){let r=new Date().toISOString(),i=u.value.find(t=>t.sessionId===e);if(i){i.isGenerating=!0,i.updatedAt=r;return}u.value=[{sessionId:e,title:n||d(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:p.value,createdAt:r,updatedAt:r,messageCount:1,size:0,isGenerating:!0},...u.value]}function G(e){let t=u.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function K(e){if(_.get(e)?.isStreaming){v.value=e;return}y.value=!0,v.value=e;try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){i.error(t.error||d(`@AGENT:加载会话失败`));return}let n=T(e);n.sessionId=e,n.messages=F(t.session),t.session?.title&&(n.title=t.session.title)}catch(e){i.error(d(`@AGENT:加载会话失败`)+`: `+(e?.message||e))}finally{y.value=!1}}async function q(e){try{await a.confirm(d(`@AGENT:确认删除该会话`),d(`@AGENT:删除后无法恢复`),{type:`warning`})}catch{return}let t=_.get(e);if(t?.abortController)try{t.abortController.abort()}catch{}_.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||d(`@AGENT:删除失败`));return}u.value=u.value.filter(t=>t.sessionId!==e),v.value===e&&(v.value=null),i.success(d(`@AGENT:已删除`))}catch(e){i.error(d(`@AGENT:删除失败`)+`: `+(e?.message||e))}}async function J(e,t){try{let n=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})}).then(e=>e.json());if(!n.success){i.error(n.error||d(`@AGENT:重命名失败`));return}let r=u.value.find(t=>t.sessionId===e);r&&(r.title=t);let a=_.get(e);a&&(a.title=t),i.success(d(`@AGENT:已重命名`))}catch(e){i.error(d(`@AGENT:重命名失败`)+`: `+(e?.message||e))}}function Y(){v.value=null}async function X(e,a=[],o={}){let u=a.filter(e=>e?.file?.type?.startsWith(`image/`)),f=a.filter(e=>!e?.file?.type?.startsWith(`image/`)),p=[],m=0;for(let e of f){let t=e.file.size||0;if(!(t>10485760)){if(p.length>=10||m+t>20971520)break;m+=t,p.push(e)}}let h=f.filter(e=>!p.includes(e));h.length>0&&i.warning(`${d(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${h.map(e=>e.file.name).join(`、`)}`);let g=v.value||`${N}${Date.now()}-${++S}`,y=T(g);if(!e.trim()&&u.length===0&&p.length===0||y.isStreaming)return;let b=(await Promise.allSettled(u.map(e=>L(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),w=(await Promise.allSettled(p.map(async e=>({name:e.file.name||`file`,dataUrl:await L(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));v.value=y.key,y.nonce+=1;let E=y.nonce;y.abortController=new AbortController;let D=y.abortController;y.pendingQuestion=null,y.answeringQuestion=!1;let O={id:s(),role:`user`,content:e,status:`done`,createdAt:Date.now()},k=[...u,...p];k.length>0&&(O.attachments=k.map(e=>({id:e.id,name:e.file.name||`image`,size:e.file.size||0,type:e.file.type||``,preview:e.preview}))),y.messages.push(O);let A=r({id:s(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});y.messages.push(A),y.isStreaming=!0;let j=`${l}:${g}:${E}`;n.begin(j);let P=[],F=y.sessionId,R=!1;try{let n=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({sessionId:y.sessionId||``,userMessage:e,cwd:t.currentDirectory||``,engine:o.engine??I.value,...b.length>0?{images:b}:{},...w.length>0?{attachments:w}:{},...o.openFilePath?{openFilePath:o.openFilePath}:{},...o.dirStatus?.length?{dirStatus:o.dirStatus}:{},...o.dirSummary?{dirSummary:o.dirSummary}:{},...o.allowDispatch?{allowDispatch:!0,dispatchExecutor:o.dispatchExecutor||``,dispatchUseDefaultPrompt:o.dispatchUseDefaultPrompt!==!1}:{}}),signal:D.signal});if(E!==y.nonce)return;if(!n.ok||!n.body){let e=await n.text().catch(()=>``);throw Error(e||`HTTP ${n.status}`)}let i=n.body.getReader(),a=new TextDecoder(`utf-8`),l=``;for(;;){let{value:t,done:n}=await i.read();if(E!==y.nonce)return;if(n)break;l+=a.decode(t,{stream:!0});let o=l.split(`
3
- `);l=o.pop()??``;for(let t of o){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(F=t,y.sessionId!==t){let e=y.key;y.sessionId=t,y.key=t,e!==t&&(_.delete(e),_.set(t,y),v.value===e&&(v.value=t))}let n=String(a.title||``).trim()||e.trim().split(`
4
- `)[0].trim().slice(0,40)||d(`@AGENT:无标题`);y.title||=n,W(t,n)}break;case`thinking`:A.reasoning||(A.reasoning=``,A.reasoningStatus=`streaming`),A.reasoning+=String(a.delta||``),A.status=`streaming`;break;case`content`:A.status===`pending`&&(A.status=`streaming`);{let e=String(a.delta||``);A.content+=e;let t=c(A.content);t.reasoning&&(A.reasoning||(A.reasoning=``,A.reasoningStatus=`streaming`),A.reasoning=t.reasoning,A.content=t.content)}break;case`tool_call_start`:{let e=r({id:a.toolCallId||s(),name:a.name||``,argsPreview:a.argsPreview||``,arguments:a.arguments||a.argsPreview||``,status:`running`,result:``});P.push(e),A.toolCalls||=[],A.toolCalls.push(e),A.status===`pending`&&(A.status=`streaming`);break}case`tool_output`:{let e=P.find(e=>e.id===a.toolCallId);if(e){let t=`${e.result||``}${String(a.chunk||``)}`;e.result=t.length>M?`…(前文已截断)\n${t.slice(-65536)}`:t}break}case`tool_result`:{let e=P.find(e=>e.id===a.toolCallId);e&&(e.result=String(a.result||``),e.status=`done`,e.name===`ask_user`&&(y.pendingQuestion=null));break}case`ask_user`:y.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||A.content,t=c(e);t.reasoning&&!A.reasoning&&(A.reasoning=t.reasoning),A.content=t.content,A.status=`done`,A.reasoningStatus===`streaming`&&(A.reasoningStatus=`done`);break}case`error`:A.status=`error`,A.error=String(a.error||d(`@AGENT:未知错误`)),A.reasoningStatus===`streaming`&&(A.reasoningStatus=`done`)}}}if(E!==y.nonce)return;A.status===`pending`&&(A.status=`done`)}catch(e){if(E!==y.nonce)return;e?.name===`AbortError`||D.signal.aborted?(R=!0,A.content=(A.content||``)+`
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{Cn as e,Rn as t,a as n,dr as r,gr as i,i as a,vr as o}from"./element-plus-D0R8BMj4.js";import{a as s,c,l,t as u}from"./vendor-CCrjQw5C.js";import{n as d}from"./_plugin-vue_export-helper-BKeZSroN.js";import{a as f,i as p,t as m}from"./configStore-fJaic3kE.js";import{a as h,c as g,l as _,t as v}from"./index-CKxygqdx.js";function y(e,t=200){let n=typeof e==`string`?e:``;if(!n.trim())return``;let r=n.split(`
2
+ `).map(e=>e.trim()).filter(Boolean),i=(r.length?r[r.length-1]:``).replace(/\s+/g,` `);return i.length>t?`${i.slice(0,t-1)}…`:i}function b(e){return d(e===`done`?`@AGENT:对话已完成`:`@AGENT:对话出错`)}function x(e){let t=!1,r=!1;try{let e=m();t=!!e.notifyOnTaskDone,r=!!e.notifySoundOnTaskDone}catch{t=!1,r=!1}if(!t)return!1;let i=String(e.title||``).trim()||d(`@AGENT:无标题`),a=y(e.detail),o=e.tag||`zen-gitsync-agent`,s=a?`${i}\n${a}`:i;return r&&v(e.kind),_()&&g({title:b(e.kind),body:s,tag:o})||e.alreadyToast||(e.kind===`done`?n.success(d(`@AGENT:对话完成:{name}`,{name:i})):n.error(d(`@AGENT:对话出错:{name}`,{name:i}))),!0}var S=`g ai`,C=`g-ai`,w=[{id:`gai`,name:S},...p.map(e=>({id:e.id,name:e.name}))],T=`zen-gitsync-agent-engine`;function E(e){return e===`gai`||f(e)}function D(e){return w.find(t=>t.id===e)?.name||`g ai`}function O(e){return f(e)}function k(){try{let e=localStorage.getItem(T);if(E(e))return e}catch{}return`gai`}function A(e){try{localStorage.setItem(T,e)}catch{}}t(),r();var j=[`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(`,`),M=65536,N=`local-`,P=0;function F(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:R(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=[],c=r;for(;c<n;){let t=e.messages[c];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||s(),name:e.function?.name||``,arguments:e.function?.arguments||``,argsPreview:I(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>M&&(e=`…(前文已截断)\n${e.slice(-65536)}`),n.result=e}}c++}r=c-1,a.length>M&&(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 I(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||``);case`update_plan`:{let e=l(t,`update_plan`);if(!e)return``;let{total:r,done:i}=u(e),a=String(n.explanation||``).replace(/\s+/g,` `).trim();return[`${i}/${r}`,a].filter(Boolean).join(` — `).slice(0,200)}default:return JSON.stringify(n).slice(0,200)}}catch{return t.slice(0,200)}}function L(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 R(e){let t=/^data:([^;,]+)/.exec(e);return t?t[1]:``}function z(){let t=m(),r=h(),l=++P,u=o([]),f=o(!1),p=o(k());function g(e){E(e)&&(p.value=e,A(e))}let _=i(new Map),v=o(null),y=o(!1),b=0,S=0,C=new Set;function w(e){return{key:e,sessionId:e.startsWith(N)?null:e,title:``,messages:[],isStreaming:!1,abortController:null,nonce:0,pendingQuestion:null,answeringQuestion:!1}}function T(e){let t=_.get(e);return t||=(_.set(e,w(e)),_.get(e)),t}let D=e(()=>v.value?_.get(v.value)??null:null),O=e(()=>D.value?.messages??[]),j=e(()=>D.value?.isStreaming??!1),I=e(()=>{let e=u.value.find(e=>e.sessionId===v.value);return E(e?.engine)?e.engine:p.value}),R=e(()=>u.value.some(e=>e.sessionId===v.value)),z=e(()=>D.value?.pendingQuestion??null),B=e(()=>D.value?.answeringQuestion??!1);function V(e){return!!_.get(e)?.isStreaming}function H(e){let n=[...e];for(let e of _.values()){if(!e.sessionId)continue;let r=n.findIndex(t=>t.sessionId===e.sessionId);if(r!==-1){C.delete(e.sessionId),e.isStreaming&&(n[r]={...n[r],isGenerating:!0});continue}if(!e.isStreaming&&!C.has(e.sessionId))continue;let i=new Date().toISOString();n.unshift({sessionId:e.sessionId,title:e.title||d(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:p.value,createdAt:i,updatedAt:i,messageCount:e.messages.filter(e=>e.role===`user`).length||1,size:0,isGenerating:e.isStreaming})}return n}async function U(){let e=++b,r=t.currentDirectory||``;if(!r){u.value=[],f.value=!1;return}f.value=!0;try{let t=`/api/agent/sessions?cwd=${encodeURIComponent(r)}`,i=await fetch(t).then(e=>e.json());if(e!==b)return;if(!i.success){n.error(i.error||d(`@AGENT:加载会话列表失败`));return}let a=Array.isArray(i.sessions)?i.sessions:[];u.value=H(a)}catch(t){if(e!==b)return;n.error(d(`@AGENT:加载会话列表失败`)+`: `+(t?.message||t))}finally{e===b&&(f.value=!1)}}function W(e,n){let r=new Date().toISOString(),i=u.value.find(t=>t.sessionId===e);if(i){i.isGenerating=!0,i.updatedAt=r;return}u.value=[{sessionId:e,title:n||d(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:p.value,createdAt:r,updatedAt:r,messageCount:1,size:0,isGenerating:!0},...u.value]}function G(e){let t=u.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function K(e){if(_.get(e)?.isStreaming){v.value=e;return}y.value=!0,v.value=e;try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){n.error(t.error||d(`@AGENT:加载会话失败`));return}let r=T(e);r.sessionId=e,r.messages=F(t.session),t.session?.title&&(r.title=t.session.title)}catch(e){n.error(d(`@AGENT:加载会话失败`)+`: `+(e?.message||e))}finally{y.value=!1}}async function q(e){try{await a.confirm(d(`@AGENT:确认删除该会话`),d(`@AGENT:删除后无法恢复`),{type:`warning`})}catch{return}let t=_.get(e);if(t?.abortController)try{t.abortController.abort()}catch{}_.delete(e);try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());if(!t.success){n.error(t.error||d(`@AGENT:删除失败`));return}u.value=u.value.filter(t=>t.sessionId!==e),v.value===e&&(v.value=null),n.success(d(`@AGENT:已删除`))}catch(e){n.error(d(`@AGENT:删除失败`)+`: `+(e?.message||e))}}async function J(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){n.error(r.error||d(`@AGENT:重命名失败`));return}let i=u.value.find(t=>t.sessionId===e);i&&(i.title=t);let a=_.get(e);a&&(a.title=t),n.success(d(`@AGENT:已重命名`))}catch(e){n.error(d(`@AGENT:重命名失败`)+`: `+(e?.message||e))}}function Y(){v.value=null}async function X(e,a=[],o={}){let u=a.filter(e=>e?.file?.type?.startsWith(`image/`)),f=a.filter(e=>!e?.file?.type?.startsWith(`image/`)),p=[],m=0;for(let e of f){let t=e.file.size||0;if(!(t>10485760)){if(p.length>=10||m+t>20971520)break;m+=t,p.push(e)}}let h=f.filter(e=>!p.includes(e));h.length>0&&n.warning(`${d(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${h.map(e=>e.file.name).join(`、`)}`);let g=v.value||`${N}${Date.now()}-${++S}`,y=T(g);if(!e.trim()&&u.length===0&&p.length===0||y.isStreaming)return;let b=(await Promise.allSettled(u.map(e=>L(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),w=(await Promise.allSettled(p.map(async e=>({name:e.file.name||`file`,dataUrl:await L(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));v.value=y.key,y.nonce+=1;let E=y.nonce;y.abortController=new AbortController;let D=y.abortController;y.pendingQuestion=null,y.answeringQuestion=!1;let O={id:s(),role:`user`,content:e,status:`done`,createdAt:Date.now()},k=[...u,...p];k.length>0&&(O.attachments=k.map(e=>({id:e.id,name:e.file.name||`image`,size:e.file.size||0,type:e.file.type||``,preview:e.preview}))),y.messages.push(O);let A=i({id:s(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});y.messages.push(A),y.isStreaming=!0;let j=`${l}:${g}:${E}`;r.begin(j);let P=[],F=y.sessionId,R=!1;try{let n=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({sessionId:y.sessionId||``,userMessage:e,cwd:t.currentDirectory||``,engine:o.engine??I.value,...b.length>0?{images:b}:{},...w.length>0?{attachments:w}:{},...o.openFilePath?{openFilePath:o.openFilePath}:{},...o.dirStatus?.length?{dirStatus:o.dirStatus}:{},...o.dirSummary?{dirSummary:o.dirSummary}:{},...o.allowDispatch?{allowDispatch:!0,dispatchExecutor:o.dispatchExecutor||``,dispatchUseDefaultPrompt:o.dispatchUseDefaultPrompt!==!1}:{}}),signal:D.signal});if(E!==y.nonce)return;if(!n.ok||!n.body){let e=await n.text().catch(()=>``);throw Error(e||`HTTP ${n.status}`)}let r=n.body.getReader(),a=new TextDecoder(`utf-8`),l=``;for(;;){let{value:t,done:n}=await r.read();if(E!==y.nonce)return;if(n)break;l+=a.decode(t,{stream:!0});let o=l.split(`
3
+ `);l=o.pop()??``;for(let t of o){let n=t.trim();if(!n.startsWith(`data:`))continue;let r=n.slice(5).trim();if(!r)continue;let a;try{a=JSON.parse(r)}catch{continue}switch(a.type){case`meta`:if(a.sessionId){let t=String(a.sessionId);if(F=t,y.sessionId!==t){let e=y.key;y.sessionId=t,y.key=t,e!==t&&(_.delete(e),_.set(t,y),v.value===e&&(v.value=t))}let n=String(a.title||``).trim()||e.trim().split(`
4
+ `)[0].trim().slice(0,40)||d(`@AGENT:无标题`);y.title||=n,W(t,n)}break;case`thinking`:A.reasoning||(A.reasoning=``,A.reasoningStatus=`streaming`),A.reasoning+=String(a.delta||``),A.status=`streaming`;break;case`content`:A.status===`pending`&&(A.status=`streaming`);{let e=String(a.delta||``);A.content+=e;let t=c(A.content);t.reasoning&&(A.reasoning||(A.reasoning=``,A.reasoningStatus=`streaming`),A.reasoning=t.reasoning,A.content=t.content)}break;case`tool_call_start`:{let e=i({id:a.toolCallId||s(),name:a.name||``,argsPreview:a.argsPreview||``,arguments:a.arguments||a.argsPreview||``,status:`running`,result:``});P.push(e),A.toolCalls||=[],A.toolCalls.push(e),A.status===`pending`&&(A.status=`streaming`);break}case`tool_output`:{let e=P.find(e=>e.id===a.toolCallId);if(e){let t=`${e.result||``}${String(a.chunk||``)}`;e.result=t.length>M?`…(前文已截断)\n${t.slice(-65536)}`:t}break}case`tool_result`:{let e=P.find(e=>e.id===a.toolCallId);e&&(e.result=String(a.result||``),e.status=`done`,e.name===`ask_user`&&(y.pendingQuestion=null));break}case`ask_user`:y.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||A.content,t=c(e);t.reasoning&&!A.reasoning&&(A.reasoning=t.reasoning),A.content=t.content,A.status=`done`,A.reasoningStatus===`streaming`&&(A.reasoningStatus=`done`);break}case`error`:A.status=`error`,A.error=String(a.error||d(`@AGENT:未知错误`)),A.reasoningStatus===`streaming`&&(A.reasoningStatus=`done`)}}}if(E!==y.nonce)return;A.status===`pending`&&(A.status=`done`)}catch(e){if(E!==y.nonce)return;e?.name===`AbortError`||D.signal.aborted?(R=!0,A.content=(A.content||``)+`
5
5
 
6
- [`+d(`@AGENT:已停止`)+`]`,A.status=`done`,A.reasoningStatus===`streaming`&&(A.reasoningStatus=`done`)):(A.status=`error`,A.error=e?.message||String(e),i.error(A.error||d(`@AGENT:对话失败`)))}finally{let e=!!y.pendingQuestion,t=A.status===`error`?`error`:`done`;n.end(j),E===y.nonce&&(y.isStreaming=!1,y.pendingQuestion=null,y.answeringQuestion=!1,y.abortController=null,!R&&!e&&x({kind:t,title:y.title,detail:t===`error`&&A.error||A.content,tag:`zen-gitsync-agent-${F||y.key}`,alreadyToast:t===`error`})),F&&(R&&C.add(F),G(F)),U().catch(()=>{})}}async function Z(e){let t=D.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||d(`@AGENT:回答提交失败`));return t.pendingQuestion=null,!0}catch(e){return i.error(e?.message||d(`@AGENT:回答提交失败`)),!1}finally{t.answeringQuestion=!1}}function Q(){let e=D.value;e?.abortController&&(e.abortController.abort(),e.abortController=null)}return{sessions:u,sessionsLoading:f,currentSessionId:v,messages:O,isStreaming:j,sessionLoading:y,pendingQuestion:z,answeringQuestion:B,isSessionGenerating:V,currentEngine:I,pendingEngine:p,isEngineLocked:R,pickEngine:g,loadSessions:U,loadSession:K,deleteSession:q,renameSession:J,newSession:Y,sendMessage:X,answerQuestion:Z,stop:Q}}var B=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%20fill='none'%3e%3crect%20x='2'%20y='6'%20width='27'%20height='23'%20rx='6'%20fill='%235364E8'/%3e%3cpath%20d='M9.419%2012.581a1.3%201.3%200%200%200-1.838%201.838L11.162%2018l-3.581%203.581a1.3%201.3%200%200%200%201.838%201.838l4.5-4.5a1.3%201.3%200%200%200%200-1.838Z'%20fill='%23FFFFFF'/%3e%3crect%20x='15.7'%20y='21.2'%20width='7.6'%20height='2.6'%20rx='1.3'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%20.4%2027.115%204.885%2031.6%207l-4.485%202.115L25%2013.6l-2.115-4.485L18.4%207l4.485-2.115Z'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%202.5%2026.22%205.78%2029.5%207l-3.28%201.22L25%2011.5l-1.22-3.28L20.5%207l3.28-1.22Z'%20fill='%2339D7B5'/%3e%3c/svg%3e`;function V(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?d(`@AGENT:今天`):`${e}${d(`@AGENT:天前`)}`}return`${t.getFullYear()}-${i(t.getMonth()+1)}-${i(t.getDate())}`}catch{return e}}function H(e,t){return e.map(e=>({id:e.sessionId,title:e.title||d(`@AGENT:无标题`),meta:`${V(e.updatedAt)} · ${e.messageCount??0} ${d(`@AGENT:条`)}`,generatingText:e.isGenerating||t(e.sessionId)?d(`@AGENT:正在生成中...`):``,badge:e.source===`cli`?`CLI`:``,searchText:e.model}))}function U(){return{newConversation:d(`@AGENT:新建会话`),searchPlaceholder:d(`@AGENT:搜索会话...`),empty:d(`@AGENT:暂无会话`),emptyHint:d(`@AGENT:点击上方按钮开始对话`),noResult:d(`@AGENT:未找到匹配的会话`),loading:d(`@AGENT:加载会话中...`),rename:d(`@AGENT:重命名`),delete:d(`@AGENT:删除`),untitled:d(`@AGENT:无标题`)}}var W=`g ai`,G=B;function K(){return{title:d(`@AGENT:等待你的回答`),placeholder:d(`@AGENT:输入回答`),submit:d(`@AGENT:提交回答`)}}export{H as a,w as c,O as d,K as i,C as l,W as n,j as o,U as r,z as s,G as t,D as u};
6
+ [`+d(`@AGENT:已停止`)+`]`,A.status=`done`,A.reasoningStatus===`streaming`&&(A.reasoningStatus=`done`)):(A.status=`error`,A.error=e?.message||String(e),n.error(A.error||d(`@AGENT:对话失败`)))}finally{let e=!!y.pendingQuestion,t=A.status===`error`?`error`:`done`;r.end(j),E===y.nonce&&(y.isStreaming=!1,y.pendingQuestion=null,y.answeringQuestion=!1,y.abortController=null,!R&&!e&&x({kind:t,title:y.title,detail:t===`error`&&A.error||A.content,tag:`zen-gitsync-agent-${F||y.key}`,alreadyToast:t===`error`})),F&&(R&&C.add(F),G(F)),U().catch(()=>{})}}async function Z(e){let t=D.value,r=t?.pendingQuestion,i=t?.sessionId,a=(Array.isArray(e)?e:[e]).map(e=>String(e??``).trim()).filter(Boolean);if(!t||!r||!i||!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:i,interactionId:r.interactionId,answer:r.multiple?a:a[0]})}).then(e=>e.json());if(!e.success)throw Error(e.error||d(`@AGENT:回答提交失败`));return t.pendingQuestion=null,!0}catch(e){return n.error(e?.message||d(`@AGENT:回答提交失败`)),!1}finally{t.answeringQuestion=!1}}function Q(){let e=D.value;e?.abortController&&(e.abortController.abort(),e.abortController=null)}return{sessions:u,sessionsLoading:f,currentSessionId:v,messages:O,isStreaming:j,sessionLoading:y,pendingQuestion:z,answeringQuestion:B,isSessionGenerating:V,currentEngine:I,pendingEngine:p,isEngineLocked:R,pickEngine:g,loadSessions:U,loadSession:K,deleteSession:q,renameSession:J,newSession:Y,sendMessage:X,answerQuestion:Z,stop:Q}}var B=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%20fill='none'%3e%3crect%20x='2'%20y='6'%20width='27'%20height='23'%20rx='6'%20fill='%235364E8'/%3e%3cpath%20d='M9.419%2012.581a1.3%201.3%200%200%200-1.838%201.838L11.162%2018l-3.581%203.581a1.3%201.3%200%200%200%201.838%201.838l4.5-4.5a1.3%201.3%200%200%200%200-1.838Z'%20fill='%23FFFFFF'/%3e%3crect%20x='15.7'%20y='21.2'%20width='7.6'%20height='2.6'%20rx='1.3'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%20.4%2027.115%204.885%2031.6%207l-4.485%202.115L25%2013.6l-2.115-4.485L18.4%207l4.485-2.115Z'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%202.5%2026.22%205.78%2029.5%207l-3.28%201.22L25%2011.5l-1.22-3.28L20.5%207l3.28-1.22Z'%20fill='%2339D7B5'/%3e%3c/svg%3e`;function V(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?d(`@AGENT:今天`):`${e}${d(`@AGENT:天前`)}`}return`${t.getFullYear()}-${i(t.getMonth()+1)}-${i(t.getDate())}`}catch{return e}}function H(e,t){return e.map(e=>({id:e.sessionId,title:e.title||d(`@AGENT:无标题`),meta:`${V(e.updatedAt)} · ${e.messageCount??0} ${d(`@AGENT:条`)}`,generatingText:e.isGenerating||t(e.sessionId)?d(`@AGENT:正在生成中...`):``,badge:e.source===`cli`?`CLI`:``,searchText:e.model}))}function U(){return{newConversation:d(`@AGENT:新建会话`),searchPlaceholder:d(`@AGENT:搜索会话...`),empty:d(`@AGENT:暂无会话`),emptyHint:d(`@AGENT:点击上方按钮开始对话`),noResult:d(`@AGENT:未找到匹配的会话`),loading:d(`@AGENT:加载会话中...`),rename:d(`@AGENT:重命名`),delete:d(`@AGENT:删除`),untitled:d(`@AGENT:无标题`)}}var W=`g ai`,G=B;function K(){return{title:d(`@AGENT:等待你的回答`),placeholder:d(`@AGENT:输入回答`),submit:d(`@AGENT:提交回答`)}}export{H as a,w as c,O as d,K as i,C as l,W as n,j as o,U as r,z as s,G as t,D as u};
@@ -1 +1 @@
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{b as c,g as l,p as u}from"./vendor-CUTaFm6P.js";import{a as d,n as f,r as p}from"./_plugin-vue_export-helper-BP5VbhV0.js";var m=[{id:`claude`,name:`Claude Code`},{id:`opencode`,name:`OpenCode`},{id:`codex`,name:`Codex`}];function h(e){return m.some(t=>t.id===e)}function g(e){return m.find(t=>t.id===e)?.name||m[0].name}var _={"zh-CN":a,"en-US":o};function v(e){return _[e]||a}n(),t();var y=c(`locale`,()=>{let t=s(p()),n=e(()=>v(t.value));async function r(e){d(e),t.value=e;let n=D();n.locale!==e&&await n.saveGeneralSettings({locale:e})}return{currentLocale:t,elementPlusLocale:n,changeLocale:r}}),b=`flowdash-md-preview-theme`,x=`data-md-theme`,S=`github`,C=Object.keys(u);function w(e,t){let n=RegExp(`(?:^|[;{\\n])\\s*${t}\\s*:\\s*([^;]+);`).exec(e);return n?n[1].trim():void 0}var T=C.map(e=>{let t=l(e)||``;return{value:e,bg:w(t,`background`),fg:w(t,`color`)}});function E(e){if(typeof document>`u`)return;let t=typeof e==`string`&&e.trim()?e.trim():S,n=l(t)??l(`github`),r=document.getElementById(b);if(!n){r?.remove();return}r||(r=document.createElement(`style`),r.id=b,document.head.appendChild(r)),r.setAttribute(x,t),r.textContent!==n&&(r.textContent=n)}n(),t();var D=c(`config`,()=>{let t=s(``),n=s([]),a=s([]),o=s([]),c=s([]),l=s([]),u=s([]),p=s([]),m=s([]),g=s(!1),_=s({enabled:!1,type:`command`,refId:``}),v=s(!1),b=s(!1),x=s(``),w=s(``),T=s(``),D=s(!0),O=s(!1),k=s(!0),A=s(!1),j=s(!1),M=s(!0),N=s(`light`),P=s(`zh-CN`),F=s([]),I=s(200),L=s(`claude`),R=s(!0),z=s(!0),B={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:!0,fileTreeAutoRefresh:!0,editorSidebarWidth:220,mindmapDirs:[],mindmapDir:``,headerToolsHidden:[],lastTaskExecutor:null,pickerGlobalSearch:!1,markdownTheme:S,editorWorkspaceByProject:{}},V=s(JSON.parse(JSON.stringify(B))),H=s(!1);function ee(e){T.value=e||``}let te=e(()=>{let e=T.value;return e?V.value.aiDiffSummaryByProject[e]!==!1:!1});function ne(){let e=T.value;if(e&&V.value.layoutsByProject?.[e]){V.value.layout={...V.value.layoutsByProject[e]};return}}function U(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 re(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return N.value=e,U(e),$({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}U(N.value);let W=e(()=>({defaultCommitMessage:t.value,descriptionTemplates:n.value,scopeTemplates:a.value,messageTemplates:o.value,commandTemplates:c.value,lockedFiles:l.value,customCommands:u.value,orchestrations:p.value,startupItems:m.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:T.value})),ie=e(()=>!!(x.value&&x.value.trim()));async function ae(){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(f(`@D50BB:已打开系统配置文件`)),!0):(r.error(`${f(`@D50BB:打开系统配置文件失败: `)}${t?.error||``}`),!1)}catch(e){return r.error(`${f(`@D50BB:打开系统配置文件失败: `)}${e.message}`),!1}}async function G(e=!1){if(!e&&b.value&&!v.value)return console.log(f(`@D50BB:使用缓存的配置信息`)),W.value;v.value=!0;try{v.value=!0,console.log(f(`@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||f(`@D50BB:加载配置失败`)),t=String(i?.configPath||``),n=t?`\n${f(`@D50BB:配置文件`)}: ${t}`:``;return r.error(`${f(`@D50BB:加载配置失败: `)}${e}${n}`),x.value=e,w.value=t,null}if(x.value=``,w.value=``,t.value=i.defaultCommitMessage||``,n.value=i.descriptionTemplates||[],a.value=i.scopeTemplates||[],o.value=i.messageTemplates||[],c.value=i.commandTemplates||[],l.value=i.lockedFiles||[],u.value=i.customCommands||[],p.value=i.orchestrations||[],m.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&&(k.value=!!i.isStandardCommit),i.skipHooks!==void 0&&(A.value=!!i.skipHooks),i.autoQuickPushOnEnter!==void 0&&(j.value=!!i.autoQuickPushOnEnter),i.autoSetDefaultMessage!==void 0&&(O.value=!!i.autoSetDefaultMessage),i.autoClosePushModal!==void 0&&(D.value=!!i.autoClosePushModal),i.pullBeforePush!==void 0&&(M.value=!!i.pullBeforePush),Array.isArray(i.models)&&(F.value=i.models),Number.isFinite(Number(i.aiMaxToolIterations))&&Number(i.aiMaxToolIterations)>0&&(I.value=Math.floor(Number(i.aiMaxToolIterations))),h(i.taskExecutor)&&(L.value=i.taskExecutor),typeof i.notifyOnTaskDone==`boolean`&&(R.value=i.notifyOnTaskDone),typeof i.notifySoundOnTaskDone==`boolean`&&(z.value=i.notifySoundOnTaskDone),i.theme&&[`light`,`dark`,`auto`].includes(i.theme)&&(N.value=i.theme,U(i.theme)),i.locale&&[`zh-CN`,`en-US`].includes(i.locale)){P.value=i.locale,d(i.locale);let e=y();e.currentLocale=i.locale}if(i.currentDirectory&&(T.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,B.layout.leftRatio),midRatio:e(r,B.layout.midRatio),rightRatio:e(i,B.layout.rightRatio),topRatio:e(a,B.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)):B.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(V.value={...V.value,...t}),Object.keys(t).length>0&&X(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):B.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):B.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):B.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):B.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=i.ui.editorWorkspaceByProject&&typeof i.ui.editorWorkspaceByProject==`object`&&!Array.isArray(i.ui.editorWorkspaceByProject)?i.ui.editorWorkspaceByProject:{},o={},s=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`&&e.length>0):[];for(let[e,t]of Object.entries(a)){if(!t||typeof t!=`object`||Array.isArray(t))continue;let n=t,r=s(n.tabs).slice(0,40);o[e]={expandedDirs:s(n.expandedDirs).slice(0,200),tabs:r,activeTab:typeof n.activeTab==`string`&&r.includes(n.activeTab)?n.activeTab:null}}let c=typeof i.ui.mindmapDir==`string`?i.ui.mindmapDir.trim():``,l=[],u=new Set,d=Array.isArray(i.ui.mindmapDirs)?i.ui.mindmapDirs:[];for(let e of d){if(typeof e!=`string`)continue;let t=e.trim();if(!t)continue;let n=t.toLowerCase();u.has(n)||(u.add(n),l.push(t))}l.length===0&&c&&l.push(c);let f={...B.layout,...i.ui.layout||{}};V.value={layout:f,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))):B.fileDiffSplitPercent,diffPreviewSplitPercent:Number.isFinite(Number(i.ui.diffPreviewSplitPercent))?Math.min(85,Math.max(25,Number(i.ui.diffPreviewSplitPercent))):B.diffPreviewSplitPercent,commandConsole:{expanded:typeof i.ui.commandConsole?.expanded==`boolean`?i.ui.commandConsole.expanded:B.commandConsole.expanded,useTerminal:typeof i.ui.commandConsole?.useTerminal==`boolean`?i.ui.commandConsole.useTerminal:B.commandConsole.useTerminal,showTerminalSessions:typeof i.ui.commandConsole?.showTerminalSessions==`boolean`?i.ui.commandConsole.showTerminalSessions:B.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(i.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(i.ui.commandConsole.splitPercent))):B.commandConsole.splitPercent},editorAutoSave:typeof i.ui.editorAutoSave==`boolean`?i.ui.editorAutoSave:B.editorAutoSave,fileTreeAutoRefresh:typeof i.ui.fileTreeAutoRefresh==`boolean`?i.ui.fileTreeAutoRefresh:B.fileTreeAutoRefresh,editorSidebarWidth:Number.isFinite(Number(i.ui.editorSidebarWidth))?Math.min(400,Math.max(140,Number(i.ui.editorSidebarWidth))):B.editorSidebarWidth,mindmapDirs:l,mindmapDir:c,headerToolsHidden:Array.isArray(i.ui.headerToolsHidden)?i.ui.headerToolsHidden.filter(e=>typeof e==`string`):[],lastTaskExecutor:h(i.ui.lastTaskExecutor)?i.ui.lastTaskExecutor:B.lastTaskExecutor,pickerGlobalSearch:typeof i.ui.pickerGlobalSearch==`boolean`?i.ui.pickerGlobalSearch:B.pickerGlobalSearch,markdownTheme:typeof i.ui.markdownTheme==`string`&&C.includes(i.ui.markdownTheme)?i.ui.markdownTheme:B.markdownTheme,editorWorkspaceByProject:o}}return ne(),E(V.value.markdownTheme),H.value=!0,b.value=!0,console.log(f(`@D50BB:配置信息加载完成`)),W.value}catch(e){return console.error(`加载配置失败:`,e),r.error(`${f(`@D50BB:加载配置失败: `)}${e.message}`),x.value=e.message,null}finally{v.value=!1}}async function K(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:k.value,skipHooks:A.value,autoQuickPushOnEnter:j.value,autoSetDefaultMessage:O.value,autoClosePushModal:D.value,pullBeforePush:M.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}i([k,A,j,O,D,M],()=>{b.value&&K()});let q=null,J={};async function Y(){if(q&&=(clearTimeout(q),null),Object.keys(J).length===0)return;let e=J;J={};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 X(e,t={}){if(H.value){if(t.immediate){Object.assign(J,e),await Y();return}Object.assign(J,e),q&&clearTimeout(q),q=setTimeout(()=>{Y()},300)}}async function oe(e){h(e)&&V.value.lastTaskExecutor!==e&&(V.value.lastTaskExecutor=e,await X({lastTaskExecutor:e},{immediate:!0}))}let se=e(()=>h(V.value.lastTaskExecutor)?V.value.lastTaskExecutor:L.value);async function ce(){V.value.layout={...B.layout};let e=T.value;return e&&(V.value.layoutsByProject={...V.value.layoutsByProject,[e]:{...V.value.layout}}),await X({layoutsByProject:V.value.layoutsByProject},{immediate:!0}),V.value.layout}async function le(e){let t=T.value;t&&(V.value.aiDiffSummaryByProject={...V.value.aiDiffSummaryByProject,[t]:e},await X({aiDiffSummaryByProject:{[t]:e}},{immediate:!0}))}async function ue(e){if(!Number.isFinite(e))return;let t=Math.min(400,Math.max(140,e));V.value.editorSidebarWidth=t,await X({editorSidebarWidth:t})}function de(e){let t=T.value;if(!t)return;let n=e.tabs.slice(0,40);V.value.editorWorkspaceByProject={...V.value.editorWorkspaceByProject,[t]:{expandedDirs:e.expandedDirs.slice(0,200),tabs:n,activeTab:e.activeTab&&n.includes(e.activeTab)?e.activeTab:null}},X({editorWorkspaceByProject:V.value.editorWorkspaceByProject})}function fe(e){let t=e??T.value;return t?V.value.editorWorkspaceByProject[t]??null:null}i(()=>V.value.fileListViewMode,e=>{H.value&&X({fileListViewMode:e})}),i(()=>V.value.fileDiffSplitPercent,e=>{H.value&&X({fileDiffSplitPercent:e})}),i(()=>V.value.diffPreviewSplitPercent,e=>{H.value&&e!=null&&X({diffPreviewSplitPercent:e})}),i(()=>V.value.editorAutoSave,e=>{H.value&&X({editorAutoSave:e})}),i(()=>V.value.fileTreeAutoRefresh,e=>{H.value&&X({fileTreeAutoRefresh:e})}),i(()=>V.value.headerToolsHidden,e=>{H.value&&Array.isArray(e)&&X({headerToolsHidden:e})}),i(()=>V.value.mindmapDirs,e=>{H.value&&Array.isArray(e)&&X({mindmapDirs:e})}),i(()=>V.value.pickerGlobalSearch,e=>{H.value&&X({pickerGlobalSearch:e})});let pe=e(()=>V.value.markdownTheme);async function me(e){let t=C.includes(e)?e:B.markdownTheme;return V.value.markdownTheme=t,E(t),await X({markdownTheme:t},{immediate:!0}),t}i(()=>V.value.markdownTheme,e=>{H.value&&typeof e==`string`&&e&&(E(e),X({markdownTheme:e}))}),i(()=>V.value.layout,e=>{if(!H.value)return;let t=T.value;t&&(V.value.layoutsByProject={...V.value.layoutsByProject,[t]:e},X({layoutsByProject:V.value.layoutsByProject}))},{deep:!0}),i(()=>V.value.commandConsole,e=>{H.value&&X({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{Y()});async function he(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(f(`@D50BB:默认提交信息已保存`)),!0):(r.error(`${f(`@D50BB:保存失败: `)}${n.error}`),!1)}catch(e){return r.error(`${f(`@D50BB:保存失败: `)}${e.message}`),!1}}async function ge(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 _e(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(f(`@D50BB:模板已保存`)),!0):(r.error(`${f(`@D50BB:保存模板失败: `)}${i.error}`),!1)}catch(e){return r.error(`${f(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function ve(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(f(`@D50BB:模板已删除`)),!0):(r.error(`${f(`@D50BB:删除模板失败: `)}${i.error}`),!1)}catch(e){return r.error(`${f(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function ye(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(f(`@D50BB:模板已更新`)),!0}return r.error(`${f(`@D50BB:更新模板失败: `)}${s.error}`),!1}catch(e){return r.error(`${f(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function be(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(f(`@D50BB:模板已置顶`)),!0):(r.error(`${f(`@D50BB:置顶模板失败: `)}${i.error}`),!1)}catch(e){return r.error(`${f(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function Z(){try{let e=await(await fetch(`/api/locked-files`)).json();return e.success?(l.value=e.lockedFiles||[],e.lockedFiles):(r.error(`${f(`@D50BB:加载锁定文件列表失败: `)}${e.error}`),[])}catch(e){return console.error(`加载锁定文件列表失败:`,e),r.error(`${f(`@D50BB:加载锁定文件列表失败: `)}${e.message}`),[]}}async function xe(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(`${f(`@D50BB:文件已锁定: `)}${e}`),!0):(r.error(`${f(`@D50BB:锁定文件失败: `)}${t.error}`),!1)}catch(e){return console.error(`锁定文件失败:`,e),r.error(`${f(`@D50BB:锁定文件失败: `)}${e.message}`),!1}}async function Q(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(`${f(`@D50BB:文件已解锁: `)}${e}`),!0):(r.error(`${f(`@D50BB:解锁文件失败: `)}${t.error}`),!1)}catch(e){return console.error(`解锁文件失败:`,e),r.error(`${f(`@D50BB:解锁文件失败: `)}${e.message}`),!1}}async function Se(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 Ce(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 G(!0),r.success(f(`@CMD01:命令已保存`)),!0):(r.error(`${f(`@CMD01:保存命令失败: `)}${t.error}`),!1)}catch(e){return r.error(`${f(`@CMD01:保存命令失败: `)}${e.message}`),!1}}async function we(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 G(!0),r.success(f(`@CMD01:命令已删除`)),!0):(r.error(`${f(`@CMD01:删除命令失败: `)}${t.error}`),!1)}catch(e){return r.error(`${f(`@CMD01:删除命令失败: `)}${e.message}`),!1}}async function Te(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 G(!0),r.success(f(`@CMD01:命令已更新`)),!0):(r.error(`${f(`@CMD01:更新命令失败: `)}${n.error}`),!1)}catch(e){return r.error(`${f(`@CMD01:更新命令失败: `)}${e.message}`),!1}}async function Ee(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 G(!0),!0):(r.error(t.error),!1)}catch(e){return r.error(e.message),!1}}async function De(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 G(!0),r.success(f(`@ORCH:编排已保存`)),t.orchestration||null):(r.error(`${f(`@ORCH:保存编排失败: `)}${t.error}`),null)}catch(e){return r.error(`${f(`@ORCH:保存编排失败: `)}${e.message}`),null}}async function Oe(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 G(!0),r.success(f(`@ORCH:编排已删除`)),!0):(r.error(`${f(`@ORCH:删除编排失败: `)}${t.error}`),!1)}catch(e){return r.error(`${f(`@ORCH:删除编排失败: `)}${e.message}`),!1}}async function ke(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 G(!0),r.success(f(`@ORCH:编排已更新`)),!0):(r.error(`${f(`@ORCH:更新编排失败: `)}${n.error}`),!1)}catch(e){return r.error(`${f(`@ORCH:更新编排失败: `)}${e.message}`),!1}}async function Ae(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?(m.value=e,t!==void 0&&(g.value=t),!0):(r.error(`保存启动项失败: ${n.error}`),!1)}catch(e){return r.error(`保存启动项失败: ${e.message}`),!1}}async function je(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?(I.value=Number(t.aiMaxToolIterations)||e.aiMaxToolIterations,!0):(r.error(`${f(`@D50BB:保存 AI 设置失败: `)}${t.error}`),!1)}catch(e){return r.error(`${f(`@D50BB:保存 AI 设置失败: `)}${e.message}`),!1}}async function Me(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?(F.value=e,!0):(r.error(`${f(`@D50BB:保存模型失败: `)}${t.error}`),!1)}catch(e){return r.error(`${f(`@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&&(N.value=e.theme,U(e.theme)),e.locale){P.value=e.locale,d(e.locale);let t=y();t.currentLocale=e.locale}return h(e.taskExecutor)&&(L.value=e.taskExecutor),typeof e.notifyOnTaskDone==`boolean`&&(R.value=e.notifyOnTaskDone),typeof e.notifySoundOnTaskDone==`boolean`&&(z.value=e.notifySoundOnTaskDone),!0}return r.error(`保存通用设置失败: ${t.error}`),!1}catch(e){return r.error(`保存通用设置失败: ${e.message}`),!1}}return{models:F,aiMaxToolIterations:I,taskExecutor:L,resolvedTaskExecutor:se,setLastTaskExecutor:oe,notifyOnTaskDone:R,notifySoundOnTaskDone:z,defaultCommitMessage:t,descriptionTemplates:n,scopeTemplates:a,messageTemplates:o,commandTemplates:c,lockedFiles:l,customCommands:u,orchestrations:p,startupItems:m,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:b,configLoadError:x,configFilePath:w,hasConfigLoadError:ie,currentDirectory:T,config:W,autoClosePushModal:D,autoSetDefaultMessage:O,isStandardCommit:k,skipHooks:A,autoQuickPushOnEnter:j,pullBeforePush:M,theme:N,locale:P,ui:V,isUiLoaded:H,aiDiffSummaryEnabled:te,markdownTheme:pe,loadConfig:G,setCurrentDirectory:ee,openSystemConfigFile:ae,saveTemplate:_e,saveModels:Me,saveAiSettings:je,saveGeneralSettings:$,saveUiSettings:X,setAiDiffSummaryEnabled:le,setEditorSidebarWidth:ue,saveEditorWorkspace:de,getEditorWorkspace:fe,setMarkdownTheme:me,resetUiLayout:ce,applyTheme:U,toggleTheme:re,saveDefaultMessage:he,deleteTemplate:ve,updateTemplate:ye,pinTemplate:be,loadLockedFiles:Z,lockFile:xe,unlockFile:Q,isFileLocked:Se,saveCustomCommand:Ce,deleteCustomCommand:we,updateCustomCommand:Te,pinCustomCommand:Ee,saveOrchestration:De,deleteOrchestration:Oe,updateOrchestration:ke,saveStartupItems:Ae,saveAfterQuickPushAction:ge,saveCommitSettings:K}});export{h as a,m as i,T as n,g as o,y as r,D as t};
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{Cn as e,Rn as t,a as n,dr as r,ir as i,n as a,t as o,vr as s}from"./element-plus-D0R8BMj4.js";import{b as c,g as l,p as u}from"./vendor-CCrjQw5C.js";import{a as d,n as f,r as p}from"./_plugin-vue_export-helper-BKeZSroN.js";var m=[{id:`claude`,name:`Claude Code`},{id:`opencode`,name:`OpenCode`},{id:`codex`,name:`Codex`}];function h(e){return m.some(t=>t.id===e)}function g(e){return m.find(t=>t.id===e)?.name||m[0].name}var _={"zh-CN":a,"en-US":o};function v(e){return _[e]||a}r(),t();var y=c(`locale`,()=>{let t=s(p()),n=e(()=>v(t.value));async function r(e){d(e),t.value=e;let n=D();n.locale!==e&&await n.saveGeneralSettings({locale:e})}return{currentLocale:t,elementPlusLocale:n,changeLocale:r}}),b=`flowdash-md-preview-theme`,x=`data-md-theme`,S=`github`,C=Object.keys(u);function w(e,t){let n=RegExp(`(?:^|[;{\\n])\\s*${t}\\s*:\\s*([^;]+);`).exec(e);return n?n[1].trim():void 0}var T=C.map(e=>{let t=l(e)||``;return{value:e,bg:w(t,`background`),fg:w(t,`color`)}});function E(e){if(typeof document>`u`)return;let t=typeof e==`string`&&e.trim()?e.trim():S,n=l(t)??l(`github`),r=document.getElementById(b);if(!n){r?.remove();return}r||(r=document.createElement(`style`),r.id=b,document.head.appendChild(r)),r.setAttribute(x,t),r.textContent!==n&&(r.textContent=n)}r(),t();var D=c(`config`,()=>{let t=s(``),r=s([]),a=s([]),o=s([]),c=s([]),l=s([]),u=s([]),p=s([]),m=s([]),g=s(!1),_=s({enabled:!1,type:`command`,refId:``}),v=s(!1),b=s(!1),x=s(``),w=s(``),T=s(``),D=s(!0),O=s(!1),k=s(!0),A=s(!1),j=s(!1),M=s(!0),N=s(`light`),P=s(`zh-CN`),F=s([]),I=s(200),L=s(`claude`),R=s(!0),z=s(!0),B={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:!0,fileTreeAutoRefresh:!0,editorSidebarWidth:220,mindmapDirs:[],mindmapDir:``,headerToolsHidden:[],lastTaskExecutor:null,pickerGlobalSearch:!1,markdownTheme:S,editorWorkspaceByProject:{}},V=s(JSON.parse(JSON.stringify(B))),H=s(!1);function ee(e){T.value=e||``}let te=e(()=>{let e=T.value;return e?V.value.aiDiffSummaryByProject[e]!==!1:!1});function ne(){let e=T.value;if(e&&V.value.layoutsByProject?.[e]){V.value.layout={...V.value.layoutsByProject[e]};return}}function U(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 re(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return N.value=e,U(e),$({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}U(N.value);let W=e(()=>({defaultCommitMessage:t.value,descriptionTemplates:r.value,scopeTemplates:a.value,messageTemplates:o.value,commandTemplates:c.value,lockedFiles:l.value,customCommands:u.value,orchestrations:p.value,startupItems:m.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:T.value})),ie=e(()=>!!(x.value&&x.value.trim()));async function ae(){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(f(`@D50BB:已打开系统配置文件`)),!0):(n.error(`${f(`@D50BB:打开系统配置文件失败: `)}${t?.error||``}`),!1)}catch(e){return n.error(`${f(`@D50BB:打开系统配置文件失败: `)}${e.message}`),!1}}async function G(e=!1){if(!e&&b.value&&!v.value)return console.log(f(`@D50BB:使用缓存的配置信息`)),W.value;v.value=!0;try{v.value=!0,console.log(f(`@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||f(`@D50BB:加载配置失败`)),t=String(i?.configPath||``),r=t?`\n${f(`@D50BB:配置文件`)}: ${t}`:``;return n.error(`${f(`@D50BB:加载配置失败: `)}${e}${r}`),x.value=e,w.value=t,null}if(x.value=``,w.value=``,t.value=i.defaultCommitMessage||``,r.value=i.descriptionTemplates||[],a.value=i.scopeTemplates||[],o.value=i.messageTemplates||[],c.value=i.commandTemplates||[],l.value=i.lockedFiles||[],u.value=i.customCommands||[],p.value=i.orchestrations||[],m.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&&(k.value=!!i.isStandardCommit),i.skipHooks!==void 0&&(A.value=!!i.skipHooks),i.autoQuickPushOnEnter!==void 0&&(j.value=!!i.autoQuickPushOnEnter),i.autoSetDefaultMessage!==void 0&&(O.value=!!i.autoSetDefaultMessage),i.autoClosePushModal!==void 0&&(D.value=!!i.autoClosePushModal),i.pullBeforePush!==void 0&&(M.value=!!i.pullBeforePush),Array.isArray(i.models)&&(F.value=i.models),Number.isFinite(Number(i.aiMaxToolIterations))&&Number(i.aiMaxToolIterations)>0&&(I.value=Math.floor(Number(i.aiMaxToolIterations))),h(i.taskExecutor)&&(L.value=i.taskExecutor),typeof i.notifyOnTaskDone==`boolean`&&(R.value=i.notifyOnTaskDone),typeof i.notifySoundOnTaskDone==`boolean`&&(z.value=i.notifySoundOnTaskDone),i.theme&&[`light`,`dark`,`auto`].includes(i.theme)&&(N.value=i.theme,U(i.theme)),i.locale&&[`zh-CN`,`en-US`].includes(i.locale)){P.value=i.locale,d(i.locale);let e=y();e.currentLocale=i.locale}if(i.currentDirectory&&(T.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,B.layout.leftRatio),midRatio:e(r,B.layout.midRatio),rightRatio:e(i,B.layout.rightRatio),topRatio:e(a,B.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)):B.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(V.value={...V.value,...t}),Object.keys(t).length>0&&X(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):B.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):B.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):B.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):B.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=i.ui.editorWorkspaceByProject&&typeof i.ui.editorWorkspaceByProject==`object`&&!Array.isArray(i.ui.editorWorkspaceByProject)?i.ui.editorWorkspaceByProject:{},o={},s=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`&&e.length>0):[];for(let[e,t]of Object.entries(a)){if(!t||typeof t!=`object`||Array.isArray(t))continue;let n=t,r=s(n.tabs).slice(0,40);o[e]={expandedDirs:s(n.expandedDirs).slice(0,200),tabs:r,activeTab:typeof n.activeTab==`string`&&r.includes(n.activeTab)?n.activeTab:null}}let c=typeof i.ui.mindmapDir==`string`?i.ui.mindmapDir.trim():``,l=[],u=new Set,d=Array.isArray(i.ui.mindmapDirs)?i.ui.mindmapDirs:[];for(let e of d){if(typeof e!=`string`)continue;let t=e.trim();if(!t)continue;let n=t.toLowerCase();u.has(n)||(u.add(n),l.push(t))}l.length===0&&c&&l.push(c);let f={...B.layout,...i.ui.layout||{}};V.value={layout:f,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))):B.fileDiffSplitPercent,diffPreviewSplitPercent:Number.isFinite(Number(i.ui.diffPreviewSplitPercent))?Math.min(85,Math.max(25,Number(i.ui.diffPreviewSplitPercent))):B.diffPreviewSplitPercent,commandConsole:{expanded:typeof i.ui.commandConsole?.expanded==`boolean`?i.ui.commandConsole.expanded:B.commandConsole.expanded,useTerminal:typeof i.ui.commandConsole?.useTerminal==`boolean`?i.ui.commandConsole.useTerminal:B.commandConsole.useTerminal,showTerminalSessions:typeof i.ui.commandConsole?.showTerminalSessions==`boolean`?i.ui.commandConsole.showTerminalSessions:B.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(i.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(i.ui.commandConsole.splitPercent))):B.commandConsole.splitPercent},editorAutoSave:typeof i.ui.editorAutoSave==`boolean`?i.ui.editorAutoSave:B.editorAutoSave,fileTreeAutoRefresh:typeof i.ui.fileTreeAutoRefresh==`boolean`?i.ui.fileTreeAutoRefresh:B.fileTreeAutoRefresh,editorSidebarWidth:Number.isFinite(Number(i.ui.editorSidebarWidth))?Math.min(400,Math.max(140,Number(i.ui.editorSidebarWidth))):B.editorSidebarWidth,mindmapDirs:l,mindmapDir:c,headerToolsHidden:Array.isArray(i.ui.headerToolsHidden)?i.ui.headerToolsHidden.filter(e=>typeof e==`string`):[],lastTaskExecutor:h(i.ui.lastTaskExecutor)?i.ui.lastTaskExecutor:B.lastTaskExecutor,pickerGlobalSearch:typeof i.ui.pickerGlobalSearch==`boolean`?i.ui.pickerGlobalSearch:B.pickerGlobalSearch,markdownTheme:typeof i.ui.markdownTheme==`string`&&C.includes(i.ui.markdownTheme)?i.ui.markdownTheme:B.markdownTheme,editorWorkspaceByProject:o}}return ne(),E(V.value.markdownTheme),H.value=!0,b.value=!0,console.log(f(`@D50BB:配置信息加载完成`)),W.value}catch(e){return console.error(`加载配置失败:`,e),n.error(`${f(`@D50BB:加载配置失败: `)}${e.message}`),x.value=e.message,null}finally{v.value=!1}}async function K(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:k.value,skipHooks:A.value,autoQuickPushOnEnter:j.value,autoSetDefaultMessage:O.value,autoClosePushModal:D.value,pullBeforePush:M.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}i([k,A,j,O,D,M],()=>{b.value&&K()});let q=null,J={};async function Y(){if(q&&=(clearTimeout(q),null),Object.keys(J).length===0)return;let e=J;J={};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 X(e,t={}){if(H.value){if(t.immediate){Object.assign(J,e),await Y();return}Object.assign(J,e),q&&clearTimeout(q),q=setTimeout(()=>{Y()},300)}}async function oe(e){h(e)&&V.value.lastTaskExecutor!==e&&(V.value.lastTaskExecutor=e,await X({lastTaskExecutor:e},{immediate:!0}))}let se=e(()=>h(V.value.lastTaskExecutor)?V.value.lastTaskExecutor:L.value);async function ce(){V.value.layout={...B.layout};let e=T.value;return e&&(V.value.layoutsByProject={...V.value.layoutsByProject,[e]:{...V.value.layout}}),await X({layoutsByProject:V.value.layoutsByProject},{immediate:!0}),V.value.layout}async function le(e){let t=T.value;t&&(V.value.aiDiffSummaryByProject={...V.value.aiDiffSummaryByProject,[t]:e},await X({aiDiffSummaryByProject:{[t]:e}},{immediate:!0}))}async function ue(e){if(!Number.isFinite(e))return;let t=Math.min(400,Math.max(140,e));V.value.editorSidebarWidth=t,await X({editorSidebarWidth:t})}function de(e){let t=T.value;if(!t)return;let n=e.tabs.slice(0,40);V.value.editorWorkspaceByProject={...V.value.editorWorkspaceByProject,[t]:{expandedDirs:e.expandedDirs.slice(0,200),tabs:n,activeTab:e.activeTab&&n.includes(e.activeTab)?e.activeTab:null}},X({editorWorkspaceByProject:V.value.editorWorkspaceByProject})}function fe(e){let t=e??T.value;return t?V.value.editorWorkspaceByProject[t]??null:null}i(()=>V.value.fileListViewMode,e=>{H.value&&X({fileListViewMode:e})}),i(()=>V.value.fileDiffSplitPercent,e=>{H.value&&X({fileDiffSplitPercent:e})}),i(()=>V.value.diffPreviewSplitPercent,e=>{H.value&&e!=null&&X({diffPreviewSplitPercent:e})}),i(()=>V.value.editorAutoSave,e=>{H.value&&X({editorAutoSave:e})}),i(()=>V.value.fileTreeAutoRefresh,e=>{H.value&&X({fileTreeAutoRefresh:e})}),i(()=>V.value.headerToolsHidden,e=>{H.value&&Array.isArray(e)&&X({headerToolsHidden:e})}),i(()=>V.value.mindmapDirs,e=>{H.value&&Array.isArray(e)&&X({mindmapDirs:e})}),i(()=>V.value.pickerGlobalSearch,e=>{H.value&&X({pickerGlobalSearch:e})});let pe=e(()=>V.value.markdownTheme);async function me(e){let t=C.includes(e)?e:B.markdownTheme;return V.value.markdownTheme=t,E(t),await X({markdownTheme:t},{immediate:!0}),t}i(()=>V.value.markdownTheme,e=>{H.value&&typeof e==`string`&&e&&(E(e),X({markdownTheme:e}))}),i(()=>V.value.layout,e=>{if(!H.value)return;let t=T.value;t&&(V.value.layoutsByProject={...V.value.layoutsByProject,[t]:e},X({layoutsByProject:V.value.layoutsByProject}))},{deep:!0}),i(()=>V.value.commandConsole,e=>{H.value&&X({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{Y()});async function he(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(f(`@D50BB:默认提交信息已保存`)),!0):(n.error(`${f(`@D50BB:保存失败: `)}${r.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存失败: `)}${e.message}`),!1}}async function ge(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 _e(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`?r.value.includes(e)||r.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)),n.success(f(`@D50BB:模板已保存`)),!0):(n.error(`${f(`@D50BB:保存模板失败: `)}${i.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function ve(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`?r.value=r.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)),n.success(f(`@D50BB:模板已删除`)),!0):(n.error(`${f(`@D50BB:删除模板失败: `)}${i.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function ye(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 n=r.value.indexOf(e);n!==-1&&(r.value[n]=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 n.success(f(`@D50BB:模板已更新`)),!0}return n.error(`${f(`@D50BB:更新模板失败: `)}${s.error}`),!1}catch(e){return n.error(`${f(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function be(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`?(r.value=r.value.filter(t=>t!==e),r.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)),n.success(f(`@D50BB:模板已置顶`)),!0):(n.error(`${f(`@D50BB:置顶模板失败: `)}${i.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function Z(){try{let e=await(await fetch(`/api/locked-files`)).json();return e.success?(l.value=e.lockedFiles||[],e.lockedFiles):(n.error(`${f(`@D50BB:加载锁定文件列表失败: `)}${e.error}`),[])}catch(e){return console.error(`加载锁定文件列表失败:`,e),n.error(`${f(`@D50BB:加载锁定文件列表失败: `)}${e.message}`),[]}}async function xe(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(`${f(`@D50BB:文件已锁定: `)}${e}`),!0):(n.error(`${f(`@D50BB:锁定文件失败: `)}${t.error}`),!1)}catch(e){return console.error(`锁定文件失败:`,e),n.error(`${f(`@D50BB:锁定文件失败: `)}${e.message}`),!1}}async function Q(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(`${f(`@D50BB:文件已解锁: `)}${e}`),!0):(n.error(`${f(`@D50BB:解锁文件失败: `)}${t.error}`),!1)}catch(e){return console.error(`解锁文件失败:`,e),n.error(`${f(`@D50BB:解锁文件失败: `)}${e.message}`),!1}}async function Se(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 Ce(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 G(!0),n.success(f(`@CMD01:命令已保存`)),!0):(n.error(`${f(`@CMD01:保存命令失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@CMD01:保存命令失败: `)}${e.message}`),!1}}async function we(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 G(!0),n.success(f(`@CMD01:命令已删除`)),!0):(n.error(`${f(`@CMD01:删除命令失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@CMD01:删除命令失败: `)}${e.message}`),!1}}async function Te(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 G(!0),n.success(f(`@CMD01:命令已更新`)),!0):(n.error(`${f(`@CMD01:更新命令失败: `)}${r.error}`),!1)}catch(e){return n.error(`${f(`@CMD01:更新命令失败: `)}${e.message}`),!1}}async function Ee(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 G(!0),!0):(n.error(t.error),!1)}catch(e){return n.error(e.message),!1}}async function De(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 G(!0),n.success(f(`@ORCH:编排已保存`)),t.orchestration||null):(n.error(`${f(`@ORCH:保存编排失败: `)}${t.error}`),null)}catch(e){return n.error(`${f(`@ORCH:保存编排失败: `)}${e.message}`),null}}async function Oe(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 G(!0),n.success(f(`@ORCH:编排已删除`)),!0):(n.error(`${f(`@ORCH:删除编排失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@ORCH:删除编排失败: `)}${e.message}`),!1}}async function ke(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 G(!0),n.success(f(`@ORCH:编排已更新`)),!0):(n.error(`${f(`@ORCH:更新编排失败: `)}${r.error}`),!1)}catch(e){return n.error(`${f(`@ORCH:更新编排失败: `)}${e.message}`),!1}}async function Ae(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?(m.value=e,t!==void 0&&(g.value=t),!0):(n.error(`保存启动项失败: ${r.error}`),!1)}catch(e){return n.error(`保存启动项失败: ${e.message}`),!1}}async function je(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?(I.value=Number(t.aiMaxToolIterations)||e.aiMaxToolIterations,!0):(n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${e.message}`),!1}}async function Me(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?(F.value=e,!0):(n.error(`${f(`@D50BB:保存模型失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@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&&(N.value=e.theme,U(e.theme)),e.locale){P.value=e.locale,d(e.locale);let t=y();t.currentLocale=e.locale}return h(e.taskExecutor)&&(L.value=e.taskExecutor),typeof e.notifyOnTaskDone==`boolean`&&(R.value=e.notifyOnTaskDone),typeof e.notifySoundOnTaskDone==`boolean`&&(z.value=e.notifySoundOnTaskDone),!0}return n.error(`保存通用设置失败: ${t.error}`),!1}catch(e){return n.error(`保存通用设置失败: ${e.message}`),!1}}return{models:F,aiMaxToolIterations:I,taskExecutor:L,resolvedTaskExecutor:se,setLastTaskExecutor:oe,notifyOnTaskDone:R,notifySoundOnTaskDone:z,defaultCommitMessage:t,descriptionTemplates:r,scopeTemplates:a,messageTemplates:o,commandTemplates:c,lockedFiles:l,customCommands:u,orchestrations:p,startupItems:m,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:b,configLoadError:x,configFilePath:w,hasConfigLoadError:ie,currentDirectory:T,config:W,autoClosePushModal:D,autoSetDefaultMessage:O,isStandardCommit:k,skipHooks:A,autoQuickPushOnEnter:j,pullBeforePush:M,theme:N,locale:P,ui:V,isUiLoaded:H,aiDiffSummaryEnabled:te,markdownTheme:pe,loadConfig:G,setCurrentDirectory:ee,openSystemConfigFile:ae,saveTemplate:_e,saveModels:Me,saveAiSettings:je,saveGeneralSettings:$,saveUiSettings:X,setAiDiffSummaryEnabled:le,setEditorSidebarWidth:ue,saveEditorWorkspace:de,getEditorWorkspace:fe,setMarkdownTheme:me,resetUiLayout:ce,applyTheme:U,toggleTheme:re,saveDefaultMessage:he,deleteTemplate:ve,updateTemplate:ye,pinTemplate:be,loadLockedFiles:Z,lockFile:xe,unlockFile:Q,isFileLocked:Se,saveCustomCommand:Ce,deleteCustomCommand:we,updateCustomCommand:Te,pinCustomCommand:Ee,saveOrchestration:De,deleteOrchestration:Oe,updateOrchestration:ke,saveStartupItems:Ae,saveAfterQuickPushAction:ge,saveCommitSettings:K}});export{h as a,m as i,T as n,g as o,y as r,D as t};