zen-gitsync 2.18.3 → 2.18.4

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 (45) hide show
  1. package/README.md +6 -6
  2. package/package.json +3 -2
  3. package/src/cli/ai/modelSetup.js +120 -7
  4. package/src/cli/ai/modelSetup.test.js +157 -0
  5. package/src/ui/public/assets/{AgentView-juB5wmpE.js → AgentView-0eP_Qb7Z.js} +1 -1
  6. package/src/ui/public/assets/{AppVersionBadge-BDi3TXTG.js → AppVersionBadge-sYoxE7hr.js} +2 -2
  7. package/src/ui/public/assets/{BranchSelector-B8hW4D64.js → BranchSelector-BJyAmmrt.js} +1 -1
  8. package/src/ui/public/assets/{CommitForm-epNRsZc3.js → CommitForm-DY6P1_B2.js} +1 -1
  9. package/src/ui/public/assets/{CommonDialog-CTbNV8Wg.js → CommonDialog-9td95UkD.js} +1 -1
  10. package/src/ui/public/assets/{CopySessionButton-DEFGS3YY.js → CopySessionButton-De46dtzF.js} +1 -1
  11. package/src/ui/public/assets/EditorView-B2uGxtRE.js +1 -0
  12. package/src/ui/public/assets/{EditorView-Cf9u2vkM.css → EditorView-C4eN80vi.css} +1 -1
  13. package/src/ui/public/assets/{FlowExecutionViewer-BEip7kmz.js → FlowExecutionViewer-BhgFKaIR.js} +1 -1
  14. package/src/ui/public/assets/{FlowOrchestrationWorkspace-Bsszwf6-.js → FlowOrchestrationWorkspace-DQpWyRai.js} +1 -1
  15. package/src/ui/public/assets/{LogList-EfGFN896.js → LogList-uk1cDDEM.js} +1 -1
  16. package/src/ui/public/assets/{MindmapView-BM81SZBC.js → MindmapView-Cjk4g62c.js} +1 -1
  17. package/src/ui/public/assets/{MonitorView-D6yTQA3g.js → MonitorView-BzjrUh7I.js} +1 -1
  18. package/src/ui/public/assets/{ProjectStartupButton-DFgM7Pgz.js → ProjectStartupButton-C0nPW6ku.js} +1 -1
  19. package/src/ui/public/assets/{RecentDirectoriesChat-CeAb-DSk.js → RecentDirectoriesChat-DN7CtUV6.js} +1 -1
  20. package/src/ui/public/assets/{RemoteManagerDialog-C7pqRpzl.js → RemoteManagerDialog-5JJITbBA.js} +1 -1
  21. package/src/ui/public/assets/{RemoteRepoCard-BZcV9S8Z.js → RemoteRepoCard-BAksLs0D.js} +1 -1
  22. package/src/ui/public/assets/{SourceMapView-Bo7xTfCi.js → SourceMapView-IGoZ_15F.js} +1 -1
  23. package/src/ui/public/assets/{SvgIcon-_bACg8fN.js → SvgIcon-BPexLObf.js} +1 -1
  24. package/src/ui/public/assets/{UserInputNode-Cfzi_G75.js → UserInputNode-Bi7sIefa.js} +1 -1
  25. package/src/ui/public/assets/{WorkbenchView-Ifx4f8MG.js → WorkbenchView-CMsyIBYe.js} +2 -2
  26. package/src/ui/public/assets/{WorkbenchView-5tjrtuRX.css → WorkbenchView-PaqqcDj9.css} +1 -1
  27. package/src/ui/public/assets/{_plugin-vue_export-helper-BXpA-5RR.js → _plugin-vue_export-helper-BO6qa5C3.js} +5 -5
  28. package/src/ui/public/assets/{agentConversations-vfZW1S6H.js → agentConversations-mDAcOgXq.js} +1 -1
  29. package/src/ui/public/assets/{configStore-BpKN8VOg.js → configStore-D_CFFOs9.js} +1 -1
  30. package/src/ui/public/assets/{dagre-56EqSb7a.js → dagre-Cnlh8k5K.js} +3 -3
  31. package/src/ui/public/assets/{element-plus-DAeQkmsV.js → element-plus-CNJIhPSG.js} +1 -1
  32. package/src/ui/public/assets/{flow-mindmap-DSMXo-RP.js → flow-mindmap-DdKeBM_G.js} +1 -1
  33. package/src/ui/public/assets/index-BsHc5Rxd.js +57 -0
  34. package/src/ui/public/assets/index-CUvENjYd.css +1 -0
  35. package/src/ui/public/assets/{monaco-iQW4tGZA.js → monaco-Cs1I4pfm.js} +1 -1
  36. package/src/ui/public/assets/{office-docx-CX5czsEV.js → office-docx-DmRJb9rE.js} +1 -1
  37. package/src/ui/public/assets/{office-excel-D4925wfu.js → office-excel-DavLx3AP.js} +1 -1
  38. package/src/ui/public/assets/{office-pptx-92XfuytY.js → office-pptx-DYg4i8gh.js} +1 -1
  39. package/src/ui/public/assets/{vendor-DpIR4Sxg.css → vendor-B3_-csNx.css} +1 -1
  40. package/src/ui/public/assets/{vendor-ytAMhfHM.js → vendor-Dtqsc1If.js} +4 -4
  41. package/src/ui/public/assets/{vue-flow-COq_ygQX.js → vue-flow-3t3hqiSq.js} +1 -1
  42. package/src/ui/public/index.html +13 -13
  43. package/src/ui/public/assets/EditorView-BFAjQLzT.js +0 -1
  44. package/src/ui/public/assets/index-DDofdm66.js +0 -57
  45. package/src/ui/public/assets/index-DnNE9KX8.css +0 -1
@@ -1,4 +1,4 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{_r as e,fr as t,i as n,r,wn as i,yr as a,zn as o}from"./element-plus-DAeQkmsV.js";import{a as s,c,r as l,s as u}from"./vendor-ytAMhfHM.js";import{n as d}from"./_plugin-vue_export-helper-BXpA-5RR.js";import{a as f,i as p,t as m}from"./configStore-BpKN8VOg.js";import{f as h,g,h as _,n as v,t as y}from"./index-DDofdm66.js";function b(e,t=200){let n=typeof e==`string`?e:``;if(!n.trim())return``;let r=n.split(`
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{_r as e,fr as t,i as n,r,wn as i,yr as a,zn as o}from"./element-plus-CNJIhPSG.js";import{a as s,c,r as l,s as u}from"./vendor-Dtqsc1If.js";import{n as d}from"./_plugin-vue_export-helper-BO6qa5C3.js";import{a as f,i as p,t as m}from"./configStore-D_CFFOs9.js";import{f as h,g,h as _,n as v,t as y}from"./index-BsHc5Rxd.js";function b(e,t=200){let n=typeof e==`string`?e:``;if(!n.trim())return``;let r=n.split(`
2
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 x(e){return d(e===`done`?`@AGENT:对话已完成`:`@AGENT:对话出错`)}function S(e){let t={page:!1,browser:!1,sound:!1};try{let e=m();t.page=!!e.notifyPageOnTaskDone,t.browser=!!e.notifyBrowserOnTaskDone,t.sound=!!e.notifySoundOnTaskDone}catch{}if(!y(t))return!1;let r=String(e.title||``).trim()||d(`@AGENT:无标题`),i=b(e.detail),a=e.tag||`zen-gitsync-agent`,o=i?`${r}\n${i}`:r;return t.sound&&v(e.kind),g(t)&&_({title:x(e.kind),body:o,tag:a})||!t.page||e.alreadyToast||(e.kind===`done`?n.success(d(`@AGENT:对话完成:{name}`,{name:r})):n.error(d(`@AGENT:对话出错:{name}`,{name:r}))),!0}var C=`g ai`,w=`g-ai`,T=[{id:`gai`,name:C},...p.map(e=>({id:e.id,name:e.name}))],E=`zen-gitsync-agent-engine`;function D(e){return e===`gai`||f(e)}function O(e){return T.find(t=>t.id===e)?.name||`g ai`}function k(e){return f(e)}function A(){try{let e=localStorage.getItem(E);if(D(e))return e}catch{}return`gai`}function j(e){try{localStorage.setItem(E,e)}catch{}}o(),t();var M=[`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(`,`),N=65536,P=`local-`,F=0;function I(e){if(!e||!Array.isArray(e.messages))return[];let t=[],n=e.messages.length,r=new Map;for(let t of e.turnTimings||[])typeof t?.turnIndex==`number`&&Number.isFinite(t?.durationMs)&&r.set(t.turnIndex,t);let i=-1;for(let a=0;a<n;a++){let o=e.messages[a];if(o.role!==`system`){if(o.role===`user`){i+=1;let e=``,n;if(typeof o.content==`string`)e=o.content;else if(Array.isArray(o.content)){e=o.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(` `);let t=o.content.filter(e=>e?.type===`image_url`&&typeof e.image_url?.url==`string`).map((e,t)=>({id:`att-${a}-${t}`,name:`image`,size:0,type:z(e.image_url?.url||``)||`image/*`,preview:e.image_url?.url}));t.length>0&&(n=t)}(e||n)&&t.push({id:`msg-${a}`,role:`user`,content:e,attachments:n,status:`done`,createdAt:Date.now()})}else if(o.role===`assistant`){let o=`msg-${a}`,s=``,l=[],u=a;for(;u<n;){let t=e.messages[u];if(t.role!==`assistant`&&t.role!==`tool`)break;if(t.role===`assistant`){if(typeof t.content==`string`&&(s+=t.content),t.tool_calls&&t.tool_calls.length>0)for(let e of t.tool_calls)l.push({id:e.id||e.function?.name||c(),name:e.function?.name||``,arguments:e.function?.arguments||``,argsPreview:L(e.function?.name||``,e.function?.arguments||``),status:`done`,result:``})}else{let e=t.tool_call_id||t.name||``,n=l.find(t=>t.id===e);if(n){let e;e=typeof t.content==`string`?t.content:Array.isArray(t.content)&&t.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(`
3
3
  `)||`(non-text result)`,e.length>N&&(e=`…(前文已截断)\n${e.slice(-65536)}`),n.result=e}}u++}a=u-1,s.length>N&&(s=`…(前文已截断)\n${s.slice(-65536)}`);let d=!!s,f=l.length>0;if(d||f){let e=r.get(i),n=e?.finishedAt?Date.parse(e.finishedAt):NaN;t.push({id:o,role:`assistant`,content:s,toolCalls:f?l:void 0,status:`done`,createdAt:Number.isFinite(n)&&e?n-e.durationMs:Date.now(),finishedAt:Number.isFinite(n)?n:void 0,meta:e?{durationMs:e.durationMs}:void 0})}}}}return t}function L(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=s(t,`update_plan`);if(!e)return``;let{total:r,done:i}=l(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 R(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 z(e){let t=/^data:([^;,]+)/.exec(e);return t?t[1]:``}function B(){let t=m(),o=h(),s=++F,l=a([]),f=a(!1),p=a(A());function g(e){D(e)&&(p.value=e,j(e))}let _=e(new Map),v=a(null),y=a(!1),b=0,x=0,C=new Set;function w(e){return{key:e,sessionId:e.startsWith(P)?null:e,title:``,messages:[],isStreaming:!1,abortController:null,nonce:0,pendingQuestion:null,answeringQuestion:!1,contextUsage:null,queue:[],queuePaused:!1}}function T(e){let t=_.get(e);return t||=(_.set(e,w(e)),_.get(e)),t}let E=i(()=>v.value?_.get(v.value)??null:null),O=i(()=>E.value?.messages??[]),k=i(()=>E.value?.isStreaming??!1),M=i(()=>E.value?.contextUsage??null),L=i(()=>{let e=M.value;return e?{ratio:Math.min(Math.max(e.tokenRatio,e.messageRatio),1),current:e.tokens,total:e.maxTokens,unit:`K`,suffix:`上下文已使用`,detail:[`${e.messages} / ${e.maxMessages} 条消息`,typeof e.actualInputTokens==`number`&&e.actualInputTokens>0?`实测 ${e.actualInputTokens.toLocaleString()} token`:`估算 ${Math.round(e.estTokens).toLocaleString()} token`,e.droppedMessages>0?`会话共 ${e.transcriptMessages} 条,本次只带入 ${e.messages} 条(其余已摘成梗概)`:``].filter(Boolean).join(`
4
4
  `)}:null}),z=i(()=>{let e=l.value.find(e=>e.sessionId===v.value);return D(e?.engine)?e.engine:p.value}),B=i(()=>l.value.some(e=>e.sessionId===v.value)),V=i(()=>E.value?.pendingQuestion??null),H=i(()=>E.value?.answeringQuestion??!1),U=i(()=>E.value?.queuePaused??!1),W=i(()=>(E.value?.queue??[]).map(e=>({id:e.id,text:e.text,attachmentNames:e.files.map(e=>e.file.name)})));function G(e){let t=E.value;if(!t)return;let n=t.queue.findIndex(t=>t.id===e);n<0||(t.queue.splice(n,1),t.queue.length===0&&(t.queuePaused=!1))}function K(e){if(e.isStreaming)return;let t=e.queue.shift();t&&Q(t.text,t.files,{...t.options,targetKey:e.key,background:!0})}function q(){let e=E.value;e&&!e.isStreaming&&e.queue.length!==0&&(e.queuePaused=!1,K(e))}function J(e){return!!_.get(e)?.isStreaming}function Y(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 X(){let e=++b,r=t.currentDirectory||``;if(!r){l.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:[];l.value=Y(a)}catch(t){if(e!==b)return;n.error(d(`@AGENT:加载会话列表失败`)+`: `+(t?.message||t))}finally{e===b&&(f.value=!1)}}function Z(e,n){let r=new Date().toISOString(),i=l.value.find(t=>t.sessionId===e);if(i){i.isGenerating=!0,i.updatedAt=r;return}l.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},...l.value]}function ee(e){let t=l.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function te(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=I(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 ne(e){try{await r.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}l.value=l.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 re(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=l.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 ie(){v.value=null}async function Q(r,i=[],a={}){let l=i.filter(e=>e?.file?.type?.startsWith(`image/`)),u=i.filter(e=>!e?.file?.type?.startsWith(`image/`)),f=[],p=0;for(let e of u){let t=e.file.size||0;if(!(t>10485760)){if(f.length>=10||p+t>20971520)break;p+=t,f.push(e)}}let m=u.filter(e=>!f.includes(e));m.length>0&&n.warning(`${d(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${m.map(e=>e.file.name).join(`、`)}`);let h=a.targetKey||v.value||`${P}${Date.now()}-${++x}`,g=T(h);if(!r.trim()&&l.length===0&&f.length===0)return;if(g.isStreaming){g.queue.push({id:c(),text:r,files:[...l,...f],options:a});return}let _=(await Promise.allSettled(l.map(e=>R(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),y=(await Promise.allSettled(f.map(async e=>({name:e.file.name||`file`,dataUrl:await R(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));a.background||(v.value=g.key),g.nonce+=1;let b=g.nonce;g.abortController=new AbortController;let S=g.abortController;g.pendingQuestion=null,g.answeringQuestion=!1;let C={id:c(),role:`user`,content:r,status:`done`,createdAt:Date.now()},w=[...l,...f];w.length>0&&(C.attachments=w.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(C);let E=e({id:c(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});g.messages.push(E),g.isStreaming=!0,g.lastSendOptions=a;let D=`${s}:${h}:${b}`;o.begin(D),await $(g,b,S,E,D,{sessionId:g.sessionId||``,userMessage:r,cwd:t.currentDirectory||``,engine:a.engine??z.value,..._.length>0?{images:_}:{},...y.length>0?{attachments:y}:{},...a.openFilePath?{openFilePath:a.openFilePath}:{},...a.dirStatus?.length?{dirStatus:a.dirStatus}:{},...a.dirSummary?{dirSummary:a.dirSummary}:{},...a.allowDispatch?{allowDispatch:!0,dispatchExecutor:a.dispatchExecutor||``,dispatchUseDefaultPrompt:a.dispatchUseDefaultPrompt!==!1}:{}})}async function $(t,r,i,a,s,l){let f=String(l.userMessage||``),p=[],m=t.sessionId,h=!1,g=null;try{let o=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify(l),signal:i.signal});if(r!==t.nonce)return;if(!o.ok||!o.body){let e=await o.text().catch(()=>``);throw Error(e||`HTTP ${o.status}`)}let s=o.body.getReader(),h=new TextDecoder(`utf-8`),y=``;for(;;){let{value:i,done:o}=await s.read();if(r!==t.nonce)return;if(o)break;y+=h.decode(i,{stream:!0});let l=y.split(`
@@ -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-DAeQkmsV.js";import{S as c,h as l,v as u}from"./vendor-ytAMhfHM.js";import{a as d,n as f,r as p}from"./_plugin-vue_export-helper-BXpA-5RR.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":r,"en-US":i};function v(e){return _[e]||r}t(),s();var y=c(`locale`,()=>{let e=o(p()),t=a(()=>v(e.value));async function n(t){d(t),e.value=t;let n=E();n.locale!==t&&await n.saveGeneralSettings({locale:t})}return{currentLocale:e,elementPlusLocale:t,changeLocale:n}}),b=`flowdash-md-preview-theme`,x=`data-md-theme`,ee=`github`,S=Object.keys(l);function C(e,t){let n=RegExp(`(?:^|[;{\\n])\\s*${t}\\s*:\\s*([^;]+);`).exec(e);return n?n[1].trim():void 0}var w=S.map(e=>{let t=u(e)||``;return{value:e,bg:C(t,`background`),fg:C(t,`color`)}});function T(e){if(typeof document>`u`)return;let t=typeof e==`string`&&e.trim()?e.trim():ee,n=u(t)??u(`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)}t(),s();var E=c(`config`,()=>{let t=o(``),r=o([]),i=o([]),s=o([]),c=o([]),l=o([]),u=o([]),p=o([]),m=o([]),g=o(!1),_=o({enabled:!1,type:`command`,refId:``}),v=o(!1),b=o(!1),x=o(``),C=o(``),w=o(``),E=o(!0),D=o(!1),O=o(!0),k=o(!1),A=o(!1),j=o(!0),M=o(`light`),N=o(`zh-CN`),P=o([]),F=o(1e3),I=o(8e5),L=o([]),R=o(null),z=o(`claude`),B=o(!0),V=o(!1),H=o(!0),U={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:ee,editorWorkspaceByProject:{}},W=o(JSON.parse(JSON.stringify(U))),G=o(!1);function te(e){w.value=e||``}let ne=a(()=>{let e=w.value;return e?W.value.aiDiffSummaryByProject[e]!==!1:!1});function re(){let e=w.value;if(e&&W.value.layoutsByProject?.[e]){W.value.layout={...W.value.layoutsByProject[e]};return}}function K(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 ie(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return M.value=e,K(e),Ie({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}K(M.value);let q=a(()=>({defaultCommitMessage:t.value,descriptionTemplates:r.value,scopeTemplates:i.value,messageTemplates:s.value,commandTemplates:c.value,lockedFiles:l.value,customCommands:u.value,orchestrations:p.value,startupItems:m.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:w.value})),ae=a(()=>!!(x.value&&x.value.trim()));async function oe(){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 J(e=!1){if(!e&&b.value&&!v.value)return console.log(f(`@D50BB:使用缓存的配置信息`)),q.value;v.value=!0;try{v.value=!0,console.log(f(`@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||f(`@D50BB:加载配置失败`)),t=String(a?.configPath||``),r=t?`\n${f(`@D50BB:配置文件`)}: ${t}`:``;return n.error(`${f(`@D50BB:加载配置失败: `)}${e}${r}`),x.value=e,C.value=t,null}if(x.value=``,C.value=``,t.value=a.defaultCommitMessage||``,r.value=a.descriptionTemplates||[],i.value=a.scopeTemplates||[],s.value=a.messageTemplates||[],c.value=a.commandTemplates||[],l.value=a.lockedFiles||[],u.value=a.customCommands||[],p.value=a.orchestrations||[],m.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&&(O.value=!!a.isStandardCommit),a.skipHooks!==void 0&&(k.value=!!a.skipHooks),a.autoQuickPushOnEnter!==void 0&&(A.value=!!a.autoQuickPushOnEnter),a.autoSetDefaultMessage!==void 0&&(D.value=!!a.autoSetDefaultMessage),a.autoClosePushModal!==void 0&&(E.value=!!a.autoClosePushModal),a.pullBeforePush!==void 0&&(j.value=!!a.pullBeforePush),Array.isArray(a.models)&&(P.value=a.models),Number.isFinite(Number(a.aiMaxToolIterations))&&Number(a.aiMaxToolIterations)>0&&(F.value=Math.floor(Number(a.aiMaxToolIterations))),Number.isFinite(Number(a.aiMaxRequestTokens))&&Number(a.aiMaxRequestTokens)>0&&(I.value=Math.floor(Number(a.aiMaxRequestTokens))),Number.isFinite(Number(a?.aiRequestBudget?.maxUserChars))&&Number(a.aiRequestBudget.maxUserChars)>0&&(R.value={maxTokens:Math.floor(Number(a.aiRequestBudget.maxTokens)||0),maxChars:Math.floor(Number(a.aiRequestBudget.maxChars)||0),maxMessages:Math.floor(Number(a.aiRequestBudget.maxMessages)||0),maxUserChars:Math.floor(Number(a.aiRequestBudget.maxUserChars))}),Array.isArray(a.agentPresetPrompts)&&(L.value=a.agentPresetPrompts.filter(e=>e&&typeof e.label==`string`&&typeof e.prompt==`string`).map(e=>({id:String(e.id??``),label:e.label,prompt:e.prompt}))),h(a.taskExecutor)&&(z.value=a.taskExecutor),typeof a.notifyPageOnTaskDone==`boolean`&&(B.value=a.notifyPageOnTaskDone),typeof a.notifyBrowserOnTaskDone==`boolean`&&(V.value=a.notifyBrowserOnTaskDone),typeof a.notifySoundOnTaskDone==`boolean`&&(H.value=a.notifySoundOnTaskDone),a.theme&&[`light`,`dark`,`auto`].includes(a.theme)&&(M.value=a.theme,K(a.theme)),a.locale&&[`zh-CN`,`en-US`].includes(a.locale)){N.value=a.locale,d(a.locale);let e=y();e.currentLocale=a.locale}if(a.currentDirectory&&(w.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,U.layout.leftRatio),midRatio:e(r,U.layout.midRatio),rightRatio:e(i,U.layout.rightRatio),topRatio:e(a,U.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)):U.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(W.value={...W.value,...t}),Object.keys(t).length>0&&Q(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):U.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):U.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):U.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):U.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=a.ui.editorWorkspaceByProject&&typeof a.ui.editorWorkspaceByProject==`object`&&!Array.isArray(a.ui.editorWorkspaceByProject)?a.ui.editorWorkspaceByProject:{},o={},s=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`&&e.length>0):[];for(let[e,t]of Object.entries(i)){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 a.ui.mindmapDir==`string`?a.ui.mindmapDir.trim():``,l=[],u=new Set,d=Array.isArray(a.ui.mindmapDirs)?a.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={...U.layout,...a.ui.layout||{}};W.value={layout:f,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))):U.fileDiffSplitPercent,diffPreviewSplitPercent:Number.isFinite(Number(a.ui.diffPreviewSplitPercent))?Math.min(85,Math.max(25,Number(a.ui.diffPreviewSplitPercent))):U.diffPreviewSplitPercent,commandConsole:{expanded:typeof a.ui.commandConsole?.expanded==`boolean`?a.ui.commandConsole.expanded:U.commandConsole.expanded,useTerminal:typeof a.ui.commandConsole?.useTerminal==`boolean`?a.ui.commandConsole.useTerminal:U.commandConsole.useTerminal,showTerminalSessions:typeof a.ui.commandConsole?.showTerminalSessions==`boolean`?a.ui.commandConsole.showTerminalSessions:U.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(a.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(a.ui.commandConsole.splitPercent))):U.commandConsole.splitPercent},editorAutoSave:typeof a.ui.editorAutoSave==`boolean`?a.ui.editorAutoSave:U.editorAutoSave,fileTreeAutoRefresh:typeof a.ui.fileTreeAutoRefresh==`boolean`?a.ui.fileTreeAutoRefresh:U.fileTreeAutoRefresh,editorSidebarWidth:Number.isFinite(Number(a.ui.editorSidebarWidth))?Math.min(400,Math.max(140,Number(a.ui.editorSidebarWidth))):U.editorSidebarWidth,mindmapDirs:l,mindmapDir:c,headerToolsHidden:Array.isArray(a.ui.headerToolsHidden)?a.ui.headerToolsHidden.filter(e=>typeof e==`string`):[],lastTaskExecutor:h(a.ui.lastTaskExecutor)?a.ui.lastTaskExecutor:U.lastTaskExecutor,pickerGlobalSearch:typeof a.ui.pickerGlobalSearch==`boolean`?a.ui.pickerGlobalSearch:U.pickerGlobalSearch,markdownTheme:typeof a.ui.markdownTheme==`string`&&S.includes(a.ui.markdownTheme)?a.ui.markdownTheme:U.markdownTheme,editorWorkspaceByProject:o}}return re(),T(W.value.markdownTheme),G.value=!0,b.value=!0,console.log(f(`@D50BB:配置信息加载完成`)),q.value}catch(e){return console.error(`加载配置失败:`,e),n.error(`${f(`@D50BB:加载配置失败: `)}${e.message}`),x.value=e.message,null}finally{v.value=!1}}async function se(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:O.value,skipHooks:k.value,autoQuickPushOnEnter:A.value,autoSetDefaultMessage:D.value,autoClosePushModal:E.value,pullBeforePush:j.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}e([O,k,A,D,E,j],()=>{b.value&&se()});let Y=null,X={};async function Z(){if(Y&&=(clearTimeout(Y),null),Object.keys(X).length===0)return;let e=X;X={};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 Q(e,t={}){if(G.value){if(t.immediate){Object.assign(X,e),await Z();return}Object.assign(X,e),Y&&clearTimeout(Y),Y=setTimeout(()=>{Z()},300)}}async function ce(e){h(e)&&W.value.lastTaskExecutor!==e&&(W.value.lastTaskExecutor=e,await Q({lastTaskExecutor:e},{immediate:!0}))}let le=a(()=>h(W.value.lastTaskExecutor)?W.value.lastTaskExecutor:z.value);async function ue(){W.value.layout={...U.layout};let e=w.value;return e&&(W.value.layoutsByProject={...W.value.layoutsByProject,[e]:{...W.value.layout}}),await Q({layoutsByProject:W.value.layoutsByProject},{immediate:!0}),W.value.layout}async function de(e){let t=w.value;t&&(W.value.aiDiffSummaryByProject={...W.value.aiDiffSummaryByProject,[t]:e},await Q({aiDiffSummaryByProject:{[t]:e}},{immediate:!0}))}async function fe(e){if(!Number.isFinite(e))return;let t=Math.min(400,Math.max(140,e));W.value.editorSidebarWidth=t,await Q({editorSidebarWidth:t})}function pe(e){let t=w.value;if(!t)return;let n=e.tabs.slice(0,40);W.value.editorWorkspaceByProject={...W.value.editorWorkspaceByProject,[t]:{expandedDirs:e.expandedDirs.slice(0,200),tabs:n,activeTab:e.activeTab&&n.includes(e.activeTab)?e.activeTab:null}},Q({editorWorkspaceByProject:W.value.editorWorkspaceByProject})}function me(e){let t=e??w.value;return t?W.value.editorWorkspaceByProject[t]??null:null}e(()=>W.value.fileListViewMode,e=>{G.value&&Q({fileListViewMode:e})}),e(()=>W.value.fileDiffSplitPercent,e=>{G.value&&Q({fileDiffSplitPercent:e})}),e(()=>W.value.diffPreviewSplitPercent,e=>{G.value&&e!=null&&Q({diffPreviewSplitPercent:e})}),e(()=>W.value.editorAutoSave,e=>{G.value&&Q({editorAutoSave:e})}),e(()=>W.value.fileTreeAutoRefresh,e=>{G.value&&Q({fileTreeAutoRefresh:e})}),e(()=>W.value.headerToolsHidden,e=>{G.value&&Array.isArray(e)&&Q({headerToolsHidden:e})}),e(()=>W.value.mindmapDirs,e=>{G.value&&Array.isArray(e)&&Q({mindmapDirs:e})}),e(()=>W.value.pickerGlobalSearch,e=>{G.value&&Q({pickerGlobalSearch:e})});let he=a(()=>W.value.markdownTheme);async function ge(e){let t=S.includes(e)?e:U.markdownTheme;return W.value.markdownTheme=t,T(t),await Q({markdownTheme:t},{immediate:!0}),t}e(()=>W.value.markdownTheme,e=>{G.value&&typeof e==`string`&&e&&(T(e),Q({markdownTheme:e}))}),e(()=>W.value.layout,e=>{if(!G.value)return;let t=w.value;t&&(W.value.layoutsByProject={...W.value.layoutsByProject,[t]:e},Q({layoutsByProject:W.value.layoutsByProject}))},{deep:!0}),e(()=>W.value.commandConsole,e=>{G.value&&Q({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{Z()});async function _e(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 ve(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 ye(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(f(`@D50BB:模板已保存`)),!0):(n.error(`${f(`@D50BB:保存模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function be(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(f(`@D50BB:模板已删除`)),!0):(n.error(`${f(`@D50BB:删除模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function xe(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(f(`@D50BB:模板已更新`)),!0}return n.error(`${f(`@D50BB:更新模板失败: `)}${o.error}`),!1}catch(e){return n.error(`${f(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function Se(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(f(`@D50BB:模板已置顶`)),!0):(n.error(`${f(`@D50BB:置顶模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function $(){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 Ce(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 $(),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 we(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 $(),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 Te(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 Ee(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 J(!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 De(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 J(!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 Oe(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 J(!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 ke(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 J(!0),!0):(n.error(t.error),!1)}catch(e){return n.error(e.message),!1}}async function Ae(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 J(!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 je(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 J(!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 Me(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 J(!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 Ne(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 Pe(e){try{let t=await(await fetch(`/api/config/save-ai-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...e.aiMaxToolIterations===void 0?{}:{aiMaxToolIterations:e.aiMaxToolIterations},...e.aiMaxRequestTokens===void 0?{}:{aiMaxRequestTokens:e.aiMaxRequestTokens},...e.agentPresetPrompts===void 0?{}:{agentPresetPrompts:e.agentPresetPrompts}})})).json();return t.success?(t.aiMaxToolIterations!==void 0&&(F.value=Number(t.aiMaxToolIterations)||e.aiMaxToolIterations||F.value),t.aiMaxRequestTokens!==void 0&&(I.value=Number(t.aiMaxRequestTokens)||e.aiMaxRequestTokens||I.value),t.aiRequestBudget&&Number(t.aiRequestBudget.maxUserChars)>0&&(R.value={maxTokens:Math.floor(Number(t.aiRequestBudget.maxTokens)||0),maxChars:Math.floor(Number(t.aiRequestBudget.maxChars)||0),maxMessages:Math.floor(Number(t.aiRequestBudget.maxMessages)||0),maxUserChars:Math.floor(Number(t.aiRequestBudget.maxUserChars))}),Array.isArray(t.agentPresetPrompts)&&(L.value=t.agentPresetPrompts),!0):(n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${e.message}`),!1}}async function Fe(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?(P.value=e,!0):(n.error(`${f(`@D50BB:保存模型失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存模型失败: `)}${e.message}`),!1}}async function Ie(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&&(M.value=e.theme,K(e.theme)),e.locale){N.value=e.locale,d(e.locale);let t=y();t.currentLocale=e.locale}return h(e.taskExecutor)&&(z.value=e.taskExecutor),typeof e.notifyPageOnTaskDone==`boolean`&&(B.value=e.notifyPageOnTaskDone),typeof e.notifyBrowserOnTaskDone==`boolean`&&(V.value=e.notifyBrowserOnTaskDone),typeof e.notifySoundOnTaskDone==`boolean`&&(H.value=e.notifySoundOnTaskDone),!0}return n.error(`保存通用设置失败: ${t.error}`),!1}catch(e){return n.error(`保存通用设置失败: ${e.message}`),!1}}return{models:P,aiMaxToolIterations:F,aiMaxRequestTokens:I,agentPresetPrompts:L,aiRequestBudget:R,taskExecutor:z,resolvedTaskExecutor:le,setLastTaskExecutor:ce,notifyPageOnTaskDone:B,notifyBrowserOnTaskDone:V,notifySoundOnTaskDone:H,defaultCommitMessage:t,descriptionTemplates:r,scopeTemplates:i,messageTemplates:s,commandTemplates:c,lockedFiles:l,customCommands:u,orchestrations:p,startupItems:m,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:b,configLoadError:x,configFilePath:C,hasConfigLoadError:ae,currentDirectory:w,config:q,autoClosePushModal:E,autoSetDefaultMessage:D,isStandardCommit:O,skipHooks:k,autoQuickPushOnEnter:A,pullBeforePush:j,theme:M,locale:N,ui:W,isUiLoaded:G,aiDiffSummaryEnabled:ne,markdownTheme:he,loadConfig:J,setCurrentDirectory:te,openSystemConfigFile:oe,saveTemplate:ye,saveModels:Fe,saveAiSettings:Pe,saveGeneralSettings:Ie,saveUiSettings:Q,setAiDiffSummaryEnabled:de,setEditorSidebarWidth:fe,saveEditorWorkspace:pe,getEditorWorkspace:me,setMarkdownTheme:ge,resetUiLayout:ue,applyTheme:K,toggleTheme:ie,saveDefaultMessage:_e,deleteTemplate:be,updateTemplate:xe,pinTemplate:Se,loadLockedFiles:$,lockFile:Ce,unlockFile:we,isFileLocked:Te,saveCustomCommand:Ee,deleteCustomCommand:De,updateCustomCommand:Oe,pinCustomCommand:ke,saveOrchestration:Ae,deleteOrchestration:je,updateOrchestration:Me,saveStartupItems:Ne,saveAfterQuickPushAction:ve,saveCommitSettings:se}});export{h as a,m as i,w as n,g as o,y as r,E as t};
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-CNJIhPSG.js";import{S as c,h as l,v as u}from"./vendor-Dtqsc1If.js";import{a as d,n as f,r as p}from"./_plugin-vue_export-helper-BO6qa5C3.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":r,"en-US":i};function v(e){return _[e]||r}t(),s();var y=c(`locale`,()=>{let e=o(p()),t=a(()=>v(e.value));async function n(t){d(t),e.value=t;let n=E();n.locale!==t&&await n.saveGeneralSettings({locale:t})}return{currentLocale:e,elementPlusLocale:t,changeLocale:n}}),b=`flowdash-md-preview-theme`,x=`data-md-theme`,ee=`github`,S=Object.keys(l);function C(e,t){let n=RegExp(`(?:^|[;{\\n])\\s*${t}\\s*:\\s*([^;]+);`).exec(e);return n?n[1].trim():void 0}var w=S.map(e=>{let t=u(e)||``;return{value:e,bg:C(t,`background`),fg:C(t,`color`)}});function T(e){if(typeof document>`u`)return;let t=typeof e==`string`&&e.trim()?e.trim():ee,n=u(t)??u(`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)}t(),s();var E=c(`config`,()=>{let t=o(``),r=o([]),i=o([]),s=o([]),c=o([]),l=o([]),u=o([]),p=o([]),m=o([]),g=o(!1),_=o({enabled:!1,type:`command`,refId:``}),v=o(!1),b=o(!1),x=o(``),C=o(``),w=o(``),E=o(!0),D=o(!1),O=o(!0),k=o(!1),A=o(!1),j=o(!0),M=o(`light`),N=o(`zh-CN`),P=o([]),F=o(1e3),I=o(8e5),L=o([]),R=o(null),z=o(`claude`),B=o(!0),V=o(!1),H=o(!0),U={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:ee,editorWorkspaceByProject:{}},W=o(JSON.parse(JSON.stringify(U))),G=o(!1);function te(e){w.value=e||``}let ne=a(()=>{let e=w.value;return e?W.value.aiDiffSummaryByProject[e]!==!1:!1});function re(){let e=w.value;if(e&&W.value.layoutsByProject?.[e]){W.value.layout={...W.value.layoutsByProject[e]};return}}function K(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 ie(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return M.value=e,K(e),Ie({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}K(M.value);let q=a(()=>({defaultCommitMessage:t.value,descriptionTemplates:r.value,scopeTemplates:i.value,messageTemplates:s.value,commandTemplates:c.value,lockedFiles:l.value,customCommands:u.value,orchestrations:p.value,startupItems:m.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:w.value})),ae=a(()=>!!(x.value&&x.value.trim()));async function oe(){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 J(e=!1){if(!e&&b.value&&!v.value)return console.log(f(`@D50BB:使用缓存的配置信息`)),q.value;v.value=!0;try{v.value=!0,console.log(f(`@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||f(`@D50BB:加载配置失败`)),t=String(a?.configPath||``),r=t?`\n${f(`@D50BB:配置文件`)}: ${t}`:``;return n.error(`${f(`@D50BB:加载配置失败: `)}${e}${r}`),x.value=e,C.value=t,null}if(x.value=``,C.value=``,t.value=a.defaultCommitMessage||``,r.value=a.descriptionTemplates||[],i.value=a.scopeTemplates||[],s.value=a.messageTemplates||[],c.value=a.commandTemplates||[],l.value=a.lockedFiles||[],u.value=a.customCommands||[],p.value=a.orchestrations||[],m.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&&(O.value=!!a.isStandardCommit),a.skipHooks!==void 0&&(k.value=!!a.skipHooks),a.autoQuickPushOnEnter!==void 0&&(A.value=!!a.autoQuickPushOnEnter),a.autoSetDefaultMessage!==void 0&&(D.value=!!a.autoSetDefaultMessage),a.autoClosePushModal!==void 0&&(E.value=!!a.autoClosePushModal),a.pullBeforePush!==void 0&&(j.value=!!a.pullBeforePush),Array.isArray(a.models)&&(P.value=a.models),Number.isFinite(Number(a.aiMaxToolIterations))&&Number(a.aiMaxToolIterations)>0&&(F.value=Math.floor(Number(a.aiMaxToolIterations))),Number.isFinite(Number(a.aiMaxRequestTokens))&&Number(a.aiMaxRequestTokens)>0&&(I.value=Math.floor(Number(a.aiMaxRequestTokens))),Number.isFinite(Number(a?.aiRequestBudget?.maxUserChars))&&Number(a.aiRequestBudget.maxUserChars)>0&&(R.value={maxTokens:Math.floor(Number(a.aiRequestBudget.maxTokens)||0),maxChars:Math.floor(Number(a.aiRequestBudget.maxChars)||0),maxMessages:Math.floor(Number(a.aiRequestBudget.maxMessages)||0),maxUserChars:Math.floor(Number(a.aiRequestBudget.maxUserChars))}),Array.isArray(a.agentPresetPrompts)&&(L.value=a.agentPresetPrompts.filter(e=>e&&typeof e.label==`string`&&typeof e.prompt==`string`).map(e=>({id:String(e.id??``),label:e.label,prompt:e.prompt}))),h(a.taskExecutor)&&(z.value=a.taskExecutor),typeof a.notifyPageOnTaskDone==`boolean`&&(B.value=a.notifyPageOnTaskDone),typeof a.notifyBrowserOnTaskDone==`boolean`&&(V.value=a.notifyBrowserOnTaskDone),typeof a.notifySoundOnTaskDone==`boolean`&&(H.value=a.notifySoundOnTaskDone),a.theme&&[`light`,`dark`,`auto`].includes(a.theme)&&(M.value=a.theme,K(a.theme)),a.locale&&[`zh-CN`,`en-US`].includes(a.locale)){N.value=a.locale,d(a.locale);let e=y();e.currentLocale=a.locale}if(a.currentDirectory&&(w.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,U.layout.leftRatio),midRatio:e(r,U.layout.midRatio),rightRatio:e(i,U.layout.rightRatio),topRatio:e(a,U.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)):U.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(W.value={...W.value,...t}),Object.keys(t).length>0&&Q(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):U.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):U.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):U.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):U.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=a.ui.editorWorkspaceByProject&&typeof a.ui.editorWorkspaceByProject==`object`&&!Array.isArray(a.ui.editorWorkspaceByProject)?a.ui.editorWorkspaceByProject:{},o={},s=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`&&e.length>0):[];for(let[e,t]of Object.entries(i)){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 a.ui.mindmapDir==`string`?a.ui.mindmapDir.trim():``,l=[],u=new Set,d=Array.isArray(a.ui.mindmapDirs)?a.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={...U.layout,...a.ui.layout||{}};W.value={layout:f,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))):U.fileDiffSplitPercent,diffPreviewSplitPercent:Number.isFinite(Number(a.ui.diffPreviewSplitPercent))?Math.min(85,Math.max(25,Number(a.ui.diffPreviewSplitPercent))):U.diffPreviewSplitPercent,commandConsole:{expanded:typeof a.ui.commandConsole?.expanded==`boolean`?a.ui.commandConsole.expanded:U.commandConsole.expanded,useTerminal:typeof a.ui.commandConsole?.useTerminal==`boolean`?a.ui.commandConsole.useTerminal:U.commandConsole.useTerminal,showTerminalSessions:typeof a.ui.commandConsole?.showTerminalSessions==`boolean`?a.ui.commandConsole.showTerminalSessions:U.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(a.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(a.ui.commandConsole.splitPercent))):U.commandConsole.splitPercent},editorAutoSave:typeof a.ui.editorAutoSave==`boolean`?a.ui.editorAutoSave:U.editorAutoSave,fileTreeAutoRefresh:typeof a.ui.fileTreeAutoRefresh==`boolean`?a.ui.fileTreeAutoRefresh:U.fileTreeAutoRefresh,editorSidebarWidth:Number.isFinite(Number(a.ui.editorSidebarWidth))?Math.min(400,Math.max(140,Number(a.ui.editorSidebarWidth))):U.editorSidebarWidth,mindmapDirs:l,mindmapDir:c,headerToolsHidden:Array.isArray(a.ui.headerToolsHidden)?a.ui.headerToolsHidden.filter(e=>typeof e==`string`):[],lastTaskExecutor:h(a.ui.lastTaskExecutor)?a.ui.lastTaskExecutor:U.lastTaskExecutor,pickerGlobalSearch:typeof a.ui.pickerGlobalSearch==`boolean`?a.ui.pickerGlobalSearch:U.pickerGlobalSearch,markdownTheme:typeof a.ui.markdownTheme==`string`&&S.includes(a.ui.markdownTheme)?a.ui.markdownTheme:U.markdownTheme,editorWorkspaceByProject:o}}return re(),T(W.value.markdownTheme),G.value=!0,b.value=!0,console.log(f(`@D50BB:配置信息加载完成`)),q.value}catch(e){return console.error(`加载配置失败:`,e),n.error(`${f(`@D50BB:加载配置失败: `)}${e.message}`),x.value=e.message,null}finally{v.value=!1}}async function se(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:O.value,skipHooks:k.value,autoQuickPushOnEnter:A.value,autoSetDefaultMessage:D.value,autoClosePushModal:E.value,pullBeforePush:j.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}e([O,k,A,D,E,j],()=>{b.value&&se()});let Y=null,X={};async function Z(){if(Y&&=(clearTimeout(Y),null),Object.keys(X).length===0)return;let e=X;X={};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 Q(e,t={}){if(G.value){if(t.immediate){Object.assign(X,e),await Z();return}Object.assign(X,e),Y&&clearTimeout(Y),Y=setTimeout(()=>{Z()},300)}}async function ce(e){h(e)&&W.value.lastTaskExecutor!==e&&(W.value.lastTaskExecutor=e,await Q({lastTaskExecutor:e},{immediate:!0}))}let le=a(()=>h(W.value.lastTaskExecutor)?W.value.lastTaskExecutor:z.value);async function ue(){W.value.layout={...U.layout};let e=w.value;return e&&(W.value.layoutsByProject={...W.value.layoutsByProject,[e]:{...W.value.layout}}),await Q({layoutsByProject:W.value.layoutsByProject},{immediate:!0}),W.value.layout}async function de(e){let t=w.value;t&&(W.value.aiDiffSummaryByProject={...W.value.aiDiffSummaryByProject,[t]:e},await Q({aiDiffSummaryByProject:{[t]:e}},{immediate:!0}))}async function fe(e){if(!Number.isFinite(e))return;let t=Math.min(400,Math.max(140,e));W.value.editorSidebarWidth=t,await Q({editorSidebarWidth:t})}function pe(e){let t=w.value;if(!t)return;let n=e.tabs.slice(0,40);W.value.editorWorkspaceByProject={...W.value.editorWorkspaceByProject,[t]:{expandedDirs:e.expandedDirs.slice(0,200),tabs:n,activeTab:e.activeTab&&n.includes(e.activeTab)?e.activeTab:null}},Q({editorWorkspaceByProject:W.value.editorWorkspaceByProject})}function me(e){let t=e??w.value;return t?W.value.editorWorkspaceByProject[t]??null:null}e(()=>W.value.fileListViewMode,e=>{G.value&&Q({fileListViewMode:e})}),e(()=>W.value.fileDiffSplitPercent,e=>{G.value&&Q({fileDiffSplitPercent:e})}),e(()=>W.value.diffPreviewSplitPercent,e=>{G.value&&e!=null&&Q({diffPreviewSplitPercent:e})}),e(()=>W.value.editorAutoSave,e=>{G.value&&Q({editorAutoSave:e})}),e(()=>W.value.fileTreeAutoRefresh,e=>{G.value&&Q({fileTreeAutoRefresh:e})}),e(()=>W.value.headerToolsHidden,e=>{G.value&&Array.isArray(e)&&Q({headerToolsHidden:e})}),e(()=>W.value.mindmapDirs,e=>{G.value&&Array.isArray(e)&&Q({mindmapDirs:e})}),e(()=>W.value.pickerGlobalSearch,e=>{G.value&&Q({pickerGlobalSearch:e})});let he=a(()=>W.value.markdownTheme);async function ge(e){let t=S.includes(e)?e:U.markdownTheme;return W.value.markdownTheme=t,T(t),await Q({markdownTheme:t},{immediate:!0}),t}e(()=>W.value.markdownTheme,e=>{G.value&&typeof e==`string`&&e&&(T(e),Q({markdownTheme:e}))}),e(()=>W.value.layout,e=>{if(!G.value)return;let t=w.value;t&&(W.value.layoutsByProject={...W.value.layoutsByProject,[t]:e},Q({layoutsByProject:W.value.layoutsByProject}))},{deep:!0}),e(()=>W.value.commandConsole,e=>{G.value&&Q({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{Z()});async function _e(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 ve(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 ye(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(f(`@D50BB:模板已保存`)),!0):(n.error(`${f(`@D50BB:保存模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function be(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(f(`@D50BB:模板已删除`)),!0):(n.error(`${f(`@D50BB:删除模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function xe(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(f(`@D50BB:模板已更新`)),!0}return n.error(`${f(`@D50BB:更新模板失败: `)}${o.error}`),!1}catch(e){return n.error(`${f(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function Se(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(f(`@D50BB:模板已置顶`)),!0):(n.error(`${f(`@D50BB:置顶模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function $(){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 Ce(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 $(),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 we(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 $(),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 Te(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 Ee(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 J(!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 De(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 J(!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 Oe(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 J(!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 ke(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 J(!0),!0):(n.error(t.error),!1)}catch(e){return n.error(e.message),!1}}async function Ae(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 J(!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 je(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 J(!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 Me(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 J(!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 Ne(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 Pe(e){try{let t=await(await fetch(`/api/config/save-ai-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...e.aiMaxToolIterations===void 0?{}:{aiMaxToolIterations:e.aiMaxToolIterations},...e.aiMaxRequestTokens===void 0?{}:{aiMaxRequestTokens:e.aiMaxRequestTokens},...e.agentPresetPrompts===void 0?{}:{agentPresetPrompts:e.agentPresetPrompts}})})).json();return t.success?(t.aiMaxToolIterations!==void 0&&(F.value=Number(t.aiMaxToolIterations)||e.aiMaxToolIterations||F.value),t.aiMaxRequestTokens!==void 0&&(I.value=Number(t.aiMaxRequestTokens)||e.aiMaxRequestTokens||I.value),t.aiRequestBudget&&Number(t.aiRequestBudget.maxUserChars)>0&&(R.value={maxTokens:Math.floor(Number(t.aiRequestBudget.maxTokens)||0),maxChars:Math.floor(Number(t.aiRequestBudget.maxChars)||0),maxMessages:Math.floor(Number(t.aiRequestBudget.maxMessages)||0),maxUserChars:Math.floor(Number(t.aiRequestBudget.maxUserChars))}),Array.isArray(t.agentPresetPrompts)&&(L.value=t.agentPresetPrompts),!0):(n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${e.message}`),!1}}async function Fe(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?(P.value=e,!0):(n.error(`${f(`@D50BB:保存模型失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存模型失败: `)}${e.message}`),!1}}async function Ie(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&&(M.value=e.theme,K(e.theme)),e.locale){N.value=e.locale,d(e.locale);let t=y();t.currentLocale=e.locale}return h(e.taskExecutor)&&(z.value=e.taskExecutor),typeof e.notifyPageOnTaskDone==`boolean`&&(B.value=e.notifyPageOnTaskDone),typeof e.notifyBrowserOnTaskDone==`boolean`&&(V.value=e.notifyBrowserOnTaskDone),typeof e.notifySoundOnTaskDone==`boolean`&&(H.value=e.notifySoundOnTaskDone),!0}return n.error(`保存通用设置失败: ${t.error}`),!1}catch(e){return n.error(`保存通用设置失败: ${e.message}`),!1}}return{models:P,aiMaxToolIterations:F,aiMaxRequestTokens:I,agentPresetPrompts:L,aiRequestBudget:R,taskExecutor:z,resolvedTaskExecutor:le,setLastTaskExecutor:ce,notifyPageOnTaskDone:B,notifyBrowserOnTaskDone:V,notifySoundOnTaskDone:H,defaultCommitMessage:t,descriptionTemplates:r,scopeTemplates:i,messageTemplates:s,commandTemplates:c,lockedFiles:l,customCommands:u,orchestrations:p,startupItems:m,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:b,configLoadError:x,configFilePath:C,hasConfigLoadError:ae,currentDirectory:w,config:q,autoClosePushModal:E,autoSetDefaultMessage:D,isStandardCommit:O,skipHooks:k,autoQuickPushOnEnter:A,pullBeforePush:j,theme:M,locale:N,ui:W,isUiLoaded:G,aiDiffSummaryEnabled:ne,markdownTheme:he,loadConfig:J,setCurrentDirectory:te,openSystemConfigFile:oe,saveTemplate:ye,saveModels:Fe,saveAiSettings:Pe,saveGeneralSettings:Ie,saveUiSettings:Q,setAiDiffSummaryEnabled:de,setEditorSidebarWidth:fe,saveEditorWorkspace:pe,getEditorWorkspace:me,setMarkdownTheme:ge,resetUiLayout:ue,applyTheme:K,toggleTheme:ie,saveDefaultMessage:_e,deleteTemplate:be,updateTemplate:xe,pinTemplate:Se,loadLockedFiles:$,lockFile:Ce,unlockFile:we,isFileLocked:Te,saveCustomCommand:Ee,deleteCustomCommand:De,updateCustomCommand:Oe,pinCustomCommand:ke,saveOrchestration:Ae,deleteOrchestration:je,updateOrchestration:Me,saveStartupItems:Ne,saveAfterQuickPushAction:ve,saveCommitSettings:se}});export{h as a,m as i,w as n,g as o,y as r,E as t};