zen-gitsync 2.18.19 → 2.18.20
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.
- package/package.json +3 -1
- package/src/ui/public/assets/{AgentView-CRkUXGCW.js → AgentView-Du9akUeZ.js} +2 -2
- package/src/ui/public/assets/{AppVersionBadge-Dqca8Uoi.js → AppVersionBadge-86tbKU20.js} +2 -2
- package/src/ui/public/assets/{BranchSelector-CN2iCCAs.js → BranchSelector-CsrkmTCA.js} +1 -1
- package/src/ui/public/assets/{ChatSilenceBadge-ltPjxE4-.js → ChatSilenceBadge-BBoFeSqe.js} +1 -1
- package/src/ui/public/assets/{CommitForm-mOWC0Zio.js → CommitForm-DBK0GXEh.js} +1 -1
- package/src/ui/public/assets/{CommonDialog-D2f72EzI.js → CommonDialog-BkuDIWro.js} +1 -1
- package/src/ui/public/assets/EditorAgentPanel-BMUphuG0.css +1 -0
- package/src/ui/public/assets/EditorAgentPanel-KiHbQPJP.js +34 -0
- package/src/ui/public/assets/EditorView-B18B4yNJ.js +13 -0
- package/src/ui/public/assets/EditorView-CnWsMdHg.css +1 -0
- package/src/ui/public/assets/{FlowExecutionViewer-4dAyrq6w.js → FlowExecutionViewer-ClUkAmA2.js} +1 -1
- package/src/ui/public/assets/{FlowOrchestrationWorkspace-BYcu7GZu.js → FlowOrchestrationWorkspace-B3sOK3fz.js} +1 -1
- package/src/ui/public/assets/{LogList-n-gSd_A8.js → LogList-6aO0-2xh.js} +1 -1
- package/src/ui/public/assets/{MindmapView-DZHwQrhd.css → MindmapView-BDI3D_1h.css} +1 -1
- package/src/ui/public/assets/MindmapView-aJ9TTijE.js +4 -0
- package/src/ui/public/assets/{MonitorView-D0mJlgEJ.js → MonitorView-fcNrgVaU.js} +1 -1
- package/src/ui/public/assets/{ProjectManagerView-CuKtgxJg.js → ProjectManagerView-CZfrML6A.js} +1 -1
- package/src/ui/public/assets/{ProjectStartupButton-Cx0JvDzM.js → ProjectStartupButton-D5MREz6F.js} +1 -1
- package/src/ui/public/assets/{RecentDirectoriesChat-5OEF3wdB.js → RecentDirectoriesChat-wfkSF6NU.js} +1 -1
- package/src/ui/public/assets/{RemoteManagerDialog-ItxNmLvY.js → RemoteManagerDialog-BBwNlK9J.js} +1 -1
- package/src/ui/public/assets/{RemoteRepoCard-y-GzPZ7M.js → RemoteRepoCard-CTnmfv2y.js} +1 -1
- package/src/ui/public/assets/{SourceMapView-DXJUPkaX.js → SourceMapView-B4q5qiE8.js} +1 -1
- package/src/ui/public/assets/{SvgIcon-DkU8Uro2.js → SvgIcon-WpEiC1rI.js} +1 -1
- package/src/ui/public/assets/{UserInputNode-unSg-ucz.js → UserInputNode-Deoc3UvQ.js} +1 -1
- package/src/ui/public/assets/{WorkbenchView-C2-X3Ik_.js → WorkbenchView-CijzpDWN.js} +1 -1
- package/src/ui/public/assets/{_plugin-vue_export-helper-Dz34f-q7.js → _plugin-vue_export-helper-BhdsvhKo.js} +2 -2
- package/src/ui/public/assets/{agentConversations-DLAC_0wI.js → agentConversations-DaAtF1v4.js} +3 -3
- package/src/ui/public/assets/{configStore-BjNspgAX.js → configStore-Drlw8KtR.js} +1 -1
- package/src/ui/public/assets/{flow-mindmap-DqCKZUlr.css → flow-mindmap-BwYC4xxV.css} +1 -1
- package/src/ui/public/assets/flow-mindmap-cTg78Krq.js +139 -0
- package/src/ui/public/assets/{index-BybDOX1D.js → index-cDiVh_ZL.js} +6 -6
- package/src/ui/public/assets/{relativeTime-DN4_NV-7.js → relativeTime-CoXAs57j.js} +1 -1
- package/src/ui/public/assets/{toolsStore-C5a4cV7b.js → toolsStore-CnX34C96.js} +1 -1
- package/src/ui/public/assets/{useOrchestrator-Cd6p-ldI.js → useOrchestrator-BXmxJsRl.js} +1 -1
- package/src/ui/public/assets/{useWorkbenchProjects-OkQTFYcp.js → useWorkbenchProjects-BS59r5Rj.js} +1 -1
- package/src/ui/public/index.html +8 -8
- package/src/ui/server/routes/workbench/agentChat.js +12 -4
- package/src/ui/server/routes/workbench/agentChatContext.test.js +22 -0
- package/src/ui/server/routes/workbench/agentRoutes.js +12 -0
- package/src/ui/public/assets/EditorView-D7tyqaAl.js +0 -46
- package/src/ui/public/assets/EditorView-cW_Ax-z8.css +0 -1
- package/src/ui/public/assets/MindmapView-msWKbkjo.js +0 -2
- package/src/ui/public/assets/flow-mindmap-CpjwoduB.js +0 -259
package/src/ui/public/assets/{agentConversations-DLAC_0wI.js → agentConversations-DaAtF1v4.js}
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{In as e,cr as t,gr as n,i as r,lr as i,mr as a,nr as o,pr as s,r as c,xn as l}from"./element-plus-Bz6lYur-.js";import{a as u,i as d,o as f,r as p}from"./vendor-C2k0GBzj.js";import{n as m}from"./_plugin-vue_export-helper-
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{In as e,cr as t,gr as n,i as r,lr as i,mr as a,nr as o,pr as s,r as c,xn as l}from"./element-plus-Bz6lYur-.js";import{a as u,i as d,o as f,r as p}from"./vendor-C2k0GBzj.js";import{n as m}from"./_plugin-vue_export-helper-BhdsvhKo.js";import{c as h,s as g,t as _}from"./configStore-Drlw8KtR.js";import{A as v,k as y,n as b,p as ee,r as x,t as S}from"./index-cDiVh_ZL.js";function te(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 C(e){return m(e===`done`?`@AGENT:对话已完成`:`@AGENT:对话出错`)}function w(){let e={page:!1,browser:!1,sound:!1};try{let t=_();e.page=!!t.notifyPageOnTaskDone,e.browser=!!t.notifyBrowserOnTaskDone,e.sound=!!t.notifySoundOnTaskDone}catch{}return e}function ne(){return w().sound?x():!1}function re(e){let t=w();if(!S(t))return!1;let n=String(e.title||``).trim()||m(`@AGENT:无标题`),i=te(e.detail),a=e.tag||`zen-gitsync-agent`,o=i?`${n}\n${i}`:n;return t.sound&&b(e.kind),v(t)&&y({title:C(e.kind),body:o,tag:a})||!t.page||e.alreadyToast||(e.kind===`done`?r.success(m(`@AGENT:对话完成:{name}`,{name:n})):r.error(m(`@AGENT:对话出错:{name}`,{name:n}))),!0}var T=`g ai`,E=`g-ai`,D=[{id:`gai`,name:T},...g.map(e=>({id:e.id,name:e.name}))],O=`zen-gitsync-agent-engine`;function k(e){return e===`gai`||h(e)}function A(e){return D.find(t=>t.id===e)?.name||`g ai`}function j(e){return h(e)}function ie(){try{let e=localStorage.getItem(O);if(k(e))return e}catch{}return`gai`}function ae(e){try{localStorage.setItem(O,e)}catch{}}var M=[`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`],N=/!\[([^\]]*)\]\(\s*(?:<([^<>\n]+)>|([^()\s]+))(\s+["'][^"']*["'])?\s*\)/g,oe=/^\s*(`{3,}|~{3,})/,P=/\.([a-z0-9]+)$/;function F(e){let t=e.trim().toLowerCase().match(P);return!!t&&M.includes(t[1])}function I(e){let t=String(e||``).trim();if(!t)return!1;if(/^[a-zA-Z]:[\\/]/.test(t))return F(t);let n=t.match(/^([a-z][a-z0-9+.-]+):/i);return n&&n[1].toLowerCase()!==`file`||t.startsWith(`//`)||t.startsWith(`/`)?!1:F(t)}function L(e,t){return`/api/workbench/jobs/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function R(e,t){return`/api/agent/sessions/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function z(e,t){return e.includes(`}${a||``})`:e}):e}function B(e,t){let n=typeof e==`string`?e:``;if(!n||!t||!n.includes(`![`))return n;let r=n.split(`
|
|
3
3
|
`),i=null,a=[];for(let e of r){let n=e.match(oe);if(n){let t=n[1][0];i===null?i=t:i===t&&(i=null),a.push(e);continue}a.push(i===null?z(e,t):e)}return a.join(`
|
|
4
4
|
`)}function V(e,t){return B(e,t?e=>L(t,e):null)}function se(e,t){return B(e,t?e=>R(t,e):null)}e(),i();var H=[`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(`,`),U=65536,W=`local-`,ce=0;function le(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:q(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=``,c=[],l=a;for(;l<n;){let t=e.messages[l];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)c.push({id:e.id||e.function?.name||d(),name:e.function?.name||``,arguments:e.function?.arguments||``,argsPreview:G(e.function?.name||``,e.function?.arguments||``),status:`done`,result:``})}else{let e=t.tool_call_id||t.name||``,n=c.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(`
|
|
5
5
|
`)||`(non-text result)`,e.length>U&&(e=`…(前文已截断)\n${e.slice(-65536)}`),n.result=e}}l++}a=l-1,s.length>U&&(s=`…(前文已截断)\n${s.slice(-65536)}`);let u=!!s,f=c.length>0;if(u||f){let e=r.get(i),n=e?.finishedAt?Date.parse(e.finishedAt):NaN;t.push({id:o,role:`assistant`,content:s,toolCalls:f?c: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 G(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=f(t,`update_plan`);if(!e)return``;let{total:r,done:i}=p(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 K(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 q(e){let t=/^data:([^;,]+)/.exec(e);return t?t[1]:``}function J(){let e=_(),i=ee(),f=++ce,p=n([]),h=n(!1),g=n(ie());function v(e){k(e)&&(g.value=e,ae(e))}let y=a(new Map),b=n(null),x=n(!1),S=0,te=0,C=new Set,w=new Map;function T(e){return{key:e,sessionId:e.startsWith(W)?null:e,title:``,messages:[],isStreaming:!1,abortController:null,nonce:0,pendingQuestion:null,answeringQuestion:!1,contextUsage:null,queue:[],queuePaused:!1,lastEventAt:null}}function E(e){let t=y.get(e);return t||=(y.set(e,T(e)),y.get(e)),t}let D=l(()=>b.value?y.get(b.value)??null:null),O=l(()=>D.value?.messages??[]),A=l(()=>{let e=O.value,t=D.value?.sessionId??null;if(!t)return e;let n=!1,r=e.map(e=>{if(!e.content||!e.content.includes(`![`))return e;let r=se(e.content,t);return r===e.content?e:(n=!0,{...e,content:r})});return n?r:e}),j=l(()=>D.value?.isStreaming??!1),M=n(Date.now()),N=null,oe=l(()=>{let e=D.value;return!e||!e.isStreaming||!e.lastEventAt?null:Math.max(0,M.value-e.lastEventAt)});o(j,e=>{e?(M.value=Date.now(),N||=setInterval(()=>{M.value=Date.now()},1e3)):N&&=(clearInterval(N),null)},{immediate:!0}),t()&&s(()=>{N&&=(clearInterval(N),null)});let P=l(()=>D.value?.contextUsage??null),F=l(()=>{let e=P.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(`
|
|
6
|
-
`)}:null}),I=l(()=>{let e=p.value.find(e=>e.sessionId===b.value);return k(e?.engine)?e.engine:g.value}),L=l(()=>p.value.some(e=>e.sessionId===b.value)),R=l(()=>D.value?.pendingQuestion??null),z=l(()=>D.value?.answeringQuestion??!1),B=l(()=>D.value?.pendingQuestion??null),V=l(()=>D.value?.queuePaused??!1),H=l(()=>(D.value?.queue??[]).map(e=>({id:e.id,text:e.text,attachmentNames:e.files.map(e=>e.file.name)})));function G(e){let t=D.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 q(e){if(e.isStreaming)return;let t=e.queue.shift();t&&ve(t.text,t.files,{...t.options,targetKey:e.key,background:!0})}function J(){let e=D.value;e&&!e.isStreaming&&e.queue.length!==0&&(e.queuePaused=!1,q(e))}function Y(e){return!!y.get(e)?.isStreaming}function ue(t){let n=[...t];for(let t of y.values()){if(!t.sessionId)continue;let r=n.findIndex(e=>e.sessionId===t.sessionId);if(r!==-1){C.delete(t.sessionId),t.isStreaming&&(n[r]={...n[r],isGenerating:!0});continue}if(!t.isStreaming&&!C.has(t.sessionId))continue;let i=new Date().toISOString();n.unshift({sessionId:t.sessionId,title:t.title||m(`@AGENT:无标题`),source:`web`,cwd:e.currentDirectory||``,model:``,engine:g.value,createdAt:i,updatedAt:i,messageCount:t.messages.filter(e=>e.role===`user`).length||1,size:0,isGenerating:t.isStreaming})}return n}function X(e,t){return(t.updatedAt||``).localeCompare(e.updatedAt||``)}function de(t){if(!t?.sessionId||p.value.some(e=>e.sessionId===t.sessionId))return;let n={sessionId:t.sessionId,title:t.title||m(`@AGENT:无标题`),source:t.source||`web`,cwd:t.cwd||``,model:t.model||``,engine:t.engine,createdAt:t.createdAt||``,updatedAt:t.updatedAt||``,messageCount:Array.isArray(t.messages)?t.messages.length:0,size:0};w.set(t.sessionId,{meta:n,cwd:e.currentDirectory||``}),p.value=[...p.value,n].sort(X)}function Z(){if(w.size===0)return;let t=e.currentDirectory||``,n=[];for(let[e,r]of[...w]){if(r.cwd!==t||p.value.some(t=>t.sessionId===e)){w.delete(e);continue}n.push(r.meta)}n.length&&(p.value=[...p.value,...n].sort(X))}async function Q(){let t=++S,n=e.currentDirectory||``;if(!n){p.value=[],h.value=!1;return}h.value=!0;try{let e=`/api/agent/sessions?cwd=${encodeURIComponent(n)}`,i=await fetch(e).then(e=>e.json());if(t!==S)return;if(!i.success){r.error(i.error||m(`@AGENT:加载会话列表失败`));return}let a=Array.isArray(i.sessions)?i.sessions:[];p.value=ue(a),Z()}catch(e){if(t!==S)return;r.error(m(`@AGENT:加载会话列表失败`)+`: `+(e?.message||e))}finally{t===S&&(h.value=!1)}}function fe(t,n){let r=new Date().toISOString(),i=p.value.find(e=>e.sessionId===t);if(i){i.isGenerating=!0,i.updatedAt=r;return}p.value=[{sessionId:t,title:n||m(`@AGENT:无标题`),source:`web`,cwd:e.currentDirectory||``,model:``,engine:g.value,createdAt:r,updatedAt:r,messageCount:1,size:0,isGenerating:!0},...p.value]}function pe(e){let t=p.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function me(e){if(y.get(e)?.isStreaming){b.value=e;return}x.value=!0,b.value=e;try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){r.error(t.error||m(`@AGENT:加载会话失败`));return}let n=E(e);n.sessionId=e,n.messages=le(t.session),t.session?.title&&(n.title=t.session.title),de(t.session)}catch(e){r.error(m(`@AGENT:加载会话失败`)+`: `+(e?.message||e))}finally{x.value=!1}}async function he(e){try{await c.confirm(m(`@AGENT:确认删除该会话`),m(`@AGENT:删除后无法恢复`),{type:`warning`})}catch{return}let t=y.get(e);if(t?.abortController)try{t.abortController.abort()}catch{}y.delete(e);try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());if(!t.success){r.error(t.error||m(`@AGENT:删除失败`));return}p.value=p.value.filter(t=>t.sessionId!==e),w.delete(e),b.value===e&&(b.value=null),r.success(m(`@AGENT:已删除`))}catch(e){r.error(m(`@AGENT:删除失败`)+`: `+(e?.message||e))}}async function ge(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){r.error(n.error||m(`@AGENT:重命名失败`));return}let i=p.value.find(t=>t.sessionId===e);i&&(i.title=t);let a=y.get(e);a&&(a.title=t),r.success(m(`@AGENT:已重命名`))}catch(e){r.error(m(`@AGENT:重命名失败`)+`: `+(e?.message||e))}}function _e(){b.value=null}async function ve(t,n=[],o={}){let s=n.filter(e=>e?.file?.type?.startsWith(`image/`)),c=n.filter(e=>!e?.file?.type?.startsWith(`image/`)),l=[],u=0;for(let e of c){let t=e.file.size||0;if(!(t>10485760)){if(l.length>=10||u+t>20971520)break;u+=t,l.push(e)}}let p=c.filter(e=>!l.includes(e));p.length>0&&r.warning(`${m(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${p.map(e=>e.file.name).join(`、`)}`);let h=o.targetKey||b.value||`${W}${Date.now()}-${++te}`,g=E(h);if(!t.trim()&&s.length===0&&l.length===0)return;if(g.isStreaming){g.queue.push({id:d(),text:t,files:[...s,...l],options:o});return}let _=(await Promise.allSettled(s.map(e=>K(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),v=(await Promise.allSettled(l.map(async e=>({name:e.file.name||`file`,dataUrl:await K(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));o.background||(b.value=g.key),g.nonce+=1;let y=g.nonce;g.abortController=new AbortController;let ee=g.abortController;g.pendingQuestion=null,g.answeringQuestion=!1;let x={id:d(),role:`user`,content:t,status:`done`,createdAt:Date.now()},S=[...s,...l];S.length>0&&(x.attachments=S.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(x);let C=a({id:d(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});g.messages.push(C),g.isStreaming=!0,g.lastEventAt=Date.now(),g.lastSendOptions=o;let w=`${f}:${h}:${y}`;i.begin(w),await $(g,y,ee,C,w,{sessionId:g.sessionId||``,userMessage:t,cwd:e.currentDirectory||``,engine:o.engine??I.value,..._.length>0?{images:_}:{},...v.length>0?{attachments:v}:{},...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}:{}})}async function $(e,t,n,o,s,c){let l=String(c.userMessage||``),f=[],p=e.sessionId,h=!1,g=null;try{let i=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify(c),signal:n.signal});if(t!==e.nonce)return;if(!i.ok||!i.body){let e=await i.text().catch(()=>``);throw Error(e||`HTTP ${i.status}`)}let s=i.body.getReader(),h=new TextDecoder(`utf-8`),_=``;for(;;){let{value:n,done:i}=await s.read();if(t!==e.nonce)return;if(i)break;_+=h.decode(n,{stream:!0});let c=_.split(`
|
|
6
|
+
`)}:null}),I=l(()=>{let e=p.value.find(e=>e.sessionId===b.value);return k(e?.engine)?e.engine:g.value}),L=l(()=>p.value.some(e=>e.sessionId===b.value)),R=l(()=>D.value?.pendingQuestion??null),z=l(()=>D.value?.answeringQuestion??!1),B=l(()=>D.value?.pendingQuestion??null),V=l(()=>D.value?.queuePaused??!1),H=l(()=>(D.value?.queue??[]).map(e=>({id:e.id,text:e.text,attachmentNames:e.files.map(e=>e.file.name)})));function G(e){let t=D.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 q(e){if(e.isStreaming)return;let t=e.queue.shift();t&&ve(t.text,t.files,{...t.options,targetKey:e.key,background:!0})}function J(){let e=D.value;e&&!e.isStreaming&&e.queue.length!==0&&(e.queuePaused=!1,q(e))}function Y(e){return!!y.get(e)?.isStreaming}function ue(t){let n=[...t];for(let t of y.values()){if(!t.sessionId)continue;let r=n.findIndex(e=>e.sessionId===t.sessionId);if(r!==-1){C.delete(t.sessionId),t.isStreaming&&(n[r]={...n[r],isGenerating:!0});continue}if(!t.isStreaming&&!C.has(t.sessionId))continue;let i=new Date().toISOString();n.unshift({sessionId:t.sessionId,title:t.title||m(`@AGENT:无标题`),source:`web`,cwd:e.currentDirectory||``,model:``,engine:g.value,createdAt:i,updatedAt:i,messageCount:t.messages.filter(e=>e.role===`user`).length||1,size:0,isGenerating:t.isStreaming})}return n}function X(e,t){return(t.updatedAt||``).localeCompare(e.updatedAt||``)}function de(t){if(!t?.sessionId||p.value.some(e=>e.sessionId===t.sessionId))return;let n={sessionId:t.sessionId,title:t.title||m(`@AGENT:无标题`),source:t.source||`web`,cwd:t.cwd||``,model:t.model||``,engine:t.engine,createdAt:t.createdAt||``,updatedAt:t.updatedAt||``,messageCount:Array.isArray(t.messages)?t.messages.length:0,size:0};w.set(t.sessionId,{meta:n,cwd:e.currentDirectory||``}),p.value=[...p.value,n].sort(X)}function Z(){if(w.size===0)return;let t=e.currentDirectory||``,n=[];for(let[e,r]of[...w]){if(r.cwd!==t||p.value.some(t=>t.sessionId===e)){w.delete(e);continue}n.push(r.meta)}n.length&&(p.value=[...p.value,...n].sort(X))}async function Q(){let t=++S,n=e.currentDirectory||``;if(!n){p.value=[],h.value=!1;return}h.value=!0;try{let e=`/api/agent/sessions?cwd=${encodeURIComponent(n)}`,i=await fetch(e).then(e=>e.json());if(t!==S)return;if(!i.success){r.error(i.error||m(`@AGENT:加载会话列表失败`));return}let a=Array.isArray(i.sessions)?i.sessions:[];p.value=ue(a),Z()}catch(e){if(t!==S)return;r.error(m(`@AGENT:加载会话列表失败`)+`: `+(e?.message||e))}finally{t===S&&(h.value=!1)}}function fe(t,n){let r=new Date().toISOString(),i=p.value.find(e=>e.sessionId===t);if(i){i.isGenerating=!0,i.updatedAt=r;return}p.value=[{sessionId:t,title:n||m(`@AGENT:无标题`),source:`web`,cwd:e.currentDirectory||``,model:``,engine:g.value,createdAt:r,updatedAt:r,messageCount:1,size:0,isGenerating:!0},...p.value]}function pe(e){let t=p.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function me(e){if(y.get(e)?.isStreaming){b.value=e;return}x.value=!0,b.value=e;try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){r.error(t.error||m(`@AGENT:加载会话失败`));return}let n=E(e);n.sessionId=e,n.messages=le(t.session),t.session?.title&&(n.title=t.session.title),de(t.session)}catch(e){r.error(m(`@AGENT:加载会话失败`)+`: `+(e?.message||e))}finally{x.value=!1}}async function he(e){try{await c.confirm(m(`@AGENT:确认删除该会话`),m(`@AGENT:删除后无法恢复`),{type:`warning`})}catch{return}let t=y.get(e);if(t?.abortController)try{t.abortController.abort()}catch{}y.delete(e);try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());if(!t.success){r.error(t.error||m(`@AGENT:删除失败`));return}p.value=p.value.filter(t=>t.sessionId!==e),w.delete(e),b.value===e&&(b.value=null),r.success(m(`@AGENT:已删除`))}catch(e){r.error(m(`@AGENT:删除失败`)+`: `+(e?.message||e))}}async function ge(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){r.error(n.error||m(`@AGENT:重命名失败`));return}let i=p.value.find(t=>t.sessionId===e);i&&(i.title=t);let a=y.get(e);a&&(a.title=t),r.success(m(`@AGENT:已重命名`))}catch(e){r.error(m(`@AGENT:重命名失败`)+`: `+(e?.message||e))}}function _e(){b.value=null}async function ve(t,n=[],o={}){let s=n.filter(e=>e?.file?.type?.startsWith(`image/`)),c=n.filter(e=>!e?.file?.type?.startsWith(`image/`)),l=[],u=0;for(let e of c){let t=e.file.size||0;if(!(t>10485760)){if(l.length>=10||u+t>20971520)break;u+=t,l.push(e)}}let p=c.filter(e=>!l.includes(e));p.length>0&&r.warning(`${m(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${p.map(e=>e.file.name).join(`、`)}`);let h=o.targetKey||b.value||`${W}${Date.now()}-${++te}`,g=E(h);if(!t.trim()&&s.length===0&&l.length===0)return;if(g.isStreaming){g.queue.push({id:d(),text:t,files:[...s,...l],options:o});return}let _=(await Promise.allSettled(s.map(e=>K(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),v=(await Promise.allSettled(l.map(async e=>({name:e.file.name||`file`,dataUrl:await K(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));o.background||(b.value=g.key),g.nonce+=1;let y=g.nonce;g.abortController=new AbortController;let ee=g.abortController;g.pendingQuestion=null,g.answeringQuestion=!1;let x={id:d(),role:`user`,content:t,status:`done`,createdAt:Date.now()},S=[...s,...l];S.length>0&&(x.attachments=S.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(x);let C=a({id:d(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});g.messages.push(C),g.isStreaming=!0,g.lastEventAt=Date.now(),g.lastSendOptions=o;let w=`${f}:${h}:${y}`;i.begin(w),await $(g,y,ee,C,w,{sessionId:g.sessionId||``,userMessage:t,cwd:e.currentDirectory||``,engine:o.engine??I.value,..._.length>0?{images:_}:{},...v.length>0?{attachments:v}:{},...o.openFilePath?{openFilePath:o.openFilePath}:{},...o.docNote?{docNote:o.docNote}:{},...o.dirStatus?.length?{dirStatus:o.dirStatus}:{},...o.dirSummary?{dirSummary:o.dirSummary}:{},...o.allowDispatch?{allowDispatch:!0,dispatchExecutor:o.dispatchExecutor||``,dispatchUseDefaultPrompt:o.dispatchUseDefaultPrompt!==!1}:{}})}async function $(e,t,n,o,s,c){let l=String(c.userMessage||``),f=[],p=e.sessionId,h=!1,g=null;try{let i=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify(c),signal:n.signal});if(t!==e.nonce)return;if(!i.ok||!i.body){let e=await i.text().catch(()=>``);throw Error(e||`HTTP ${i.status}`)}let s=i.body.getReader(),h=new TextDecoder(`utf-8`),_=``;for(;;){let{value:n,done:i}=await s.read();if(t!==e.nonce)return;if(i)break;_+=h.decode(n,{stream:!0});let c=_.split(`
|
|
7
7
|
`);_=c.pop()??``;for(let t of c){let n=t.trim();if(!n.startsWith(`data:`))continue;let i=n.slice(5).trim();if(!i)continue;let s;try{s=JSON.parse(i)}catch{continue}switch(e.lastEventAt=Date.now(),s.type){case`context`:s.usage&&(e.contextUsage={...e.contextUsage||{},...s.usage});break;case`meta`:if(s.sessionId){let t=String(s.sessionId);if(p=t,e.sessionId!==t){let n=e.key;e.sessionId=t,e.key=t,n!==t&&(y.delete(n),y.set(t,e),b.value===n&&(b.value=t))}let n=String(s.title||``).trim()||l.trim().split(`
|
|
8
8
|
`)[0].trim().slice(0,40)||m(`@AGENT:无标题`);e.title||=n,fe(t,n)}break;case`attempt`:g={content:(o.content||``).length,reasoning:(o.reasoning||``).length,tools:o.toolCalls?.length??0};break;case`retry`:g&&(o.content=(o.content||``).slice(0,g.content),o.reasoning&&=o.reasoning.slice(0,g.reasoning),o.toolCalls&&o.toolCalls.length>g.tools&&(o.toolCalls.length=g.tools,f=[...o.toolCalls])),o.status=`pending`,o.error=``,o.finishedAt=void 0,o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`),r.info(m(`@AGENT:连接中断,正在自动重试({attempt}/{max}):{reason}`,{attempt:Number(s.attempt)||0,max:Number(s.maxRetries)||0,reason:String(s.reason||``)}));break;case`thinking`:o.reasoning||(o.reasoning=``,o.reasoningStatus=`streaming`),typeof o.reasoningStartedAt!=`number`&&(o.reasoningStartedAt=Date.now()),o.reasoningEndedAt=Date.now(),o.reasoning+=String(s.delta||``),o.status=`streaming`;break;case`content`:o.status===`pending`&&(o.status=`streaming`);{let e=String(s.delta||``);o.content+=e;let t=u(o.content);t.reasoning&&(o.reasoning||(o.reasoning=``,o.reasoningStatus=`streaming`),o.reasoning=t.reasoning,o.content=t.content)}break;case`tool_call_start`:{let e=a({id:s.toolCallId||d(),name:s.name||``,argsPreview:s.argsPreview||``,arguments:s.arguments||s.argsPreview||``,status:`running`,result:``});f.push(e),o.toolCalls||=[],o.toolCalls.push(e),o.status===`pending`&&(o.status=`streaming`);break}case`tool_output`:{let e=f.find(e=>e.id===s.toolCallId);if(e){let t=`${e.result||``}${String(s.chunk||``)}`;e.result=t.length>U?`…(前文已截断)\n${t.slice(-65536)}`:t}break}case`tool_result`:{let t=f.find(e=>e.id===s.toolCallId);t&&(t.result=String(s.result||``),t.status=`done`,t.name===`ask_user`&&(e.pendingQuestion=null));break}case`ask_user`:e.pendingQuestion={interactionId:String(s.interactionId||``),question:String(s.question||``),options:Array.isArray(s.options)?s.options.map(e=>String(e)):[],allowFreeText:s.allowFreeText!==!1,multiple:s.multiple===!0},ne();break;case`done`:{let e=s.content||o.content,t=u(e);t.reasoning&&!o.reasoning&&(o.reasoning=t.reasoning),o.content=t.content,o.status=`done`,o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`);break}case`turn_done`:{let e=Number(s.durationMs);if(!Number.isFinite(e)||e<0||o.meta?.durationMs!==void 0)break;o.finishedAt=Date.now(),o.meta={...o.meta||{},durationMs:e};break}case`error`:o.status=`error`,o.error=String(s.error||m(`@AGENT:未知错误`)),o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`)}}}if(t!==e.nonce)return;o.status===`pending`&&(o.status=`done`)}catch(i){if(t!==e.nonce)return;if(i?.name===`AbortError`||n.signal.aborted)h=!0,o.content=(o.content||``)+`
|
|
9
9
|
|
|
10
|
-
[`+m(`@AGENT:已停止`)+`]`,o.status=`done`,o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`),o.meta?.durationMs===void 0&&(o.finishedAt=Date.now(),o.meta={...o.meta||{},durationMs:o.finishedAt-(o.createdAt||o.finishedAt)});else{o.status=`error`;let e=i?.message||String(i);o.error=m(`@AGENT:连接中断,本轮进度已保留;点「重试」接着跑。原因:{reason}`,{reason:e}),o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`),r.error(o.error||m(`@AGENT:对话失败`))}}finally{let n=!!e.pendingQuestion,r=o.status===`error`?`error`:`done`;i.end(s),t===e.nonce&&(e.isStreaming=!1,e.pendingQuestion=null,e.answeringQuestion=!1,e.abortController=null,!h&&!n&&re({kind:r,title:e.title,detail:r===`error`&&o.error||o.content,tag:`zen-gitsync-agent-${p||e.key}`,alreadyToast:r===`error`}),e.queue.length>0&&(h||o.status===`error`?e.queuePaused=!0:n||q(e))),p&&(h&&C.add(p),pe(p)),Q().catch(()=>{})}}async function ye(t){let n=D.value;if(!n||n.isStreaming)return!1;let a=[...n.messages].reverse().find(e=>e.role===`assistant`),o=(t?.id?n.messages.find(e=>e.id===t.id):null)||a;if(!o||o.role!==`assistant`)return!1;if(a&&o.id!==a.id)return r.warning(m(`@AGENT:只能重试最后一轮`)),!1;if(!n.sessionId)return r.warning(m(`@AGENT:这条会话还没在服务端建立,请重新发送消息`)),!1;let s=p.value.find(e=>e.sessionId===n.sessionId)?.engine||I.value;if(s!==`gai`)return r.warning(m(`@AGENT:该会话由外部 CLI 引擎运行,不支持重试上一轮,请重新发送`)),!1;o.content=``,o.reasoning=void 0,o.reasoningStatus=void 0,o.reasoningStartedAt=void 0,o.reasoningEndedAt=void 0,o.error=``,o.status=`pending`,o.finishedAt=void 0,o.meta&&={...o.meta,durationMs:void 0},n.nonce+=1;let c=n.nonce;n.abortController=new AbortController;let l=n.abortController;n.pendingQuestion=null,n.answeringQuestion=!1,n.isStreaming=!0,n.lastEventAt=Date.now();let u=`${f}:${n.key}:${c}`;return i.begin(u),await $(n,c,l,o,u,{sessionId:n.sessionId||``,resume:!0,cwd:e.currentDirectory||``,engine:s,...n.lastSendOptions?.openFilePath?{openFilePath:n.lastSendOptions.openFilePath}:{},...n.lastSendOptions?.dirStatus?.length?{dirStatus:n.lastSendOptions.dirStatus}:{},...n.lastSendOptions?.dirSummary?{dirSummary:n.lastSendOptions.dirSummary}:{},...n.lastSendOptions?.allowDispatch?{allowDispatch:!0,dispatchExecutor:n.lastSendOptions.dispatchExecutor||``,dispatchUseDefaultPrompt:n.lastSendOptions.dispatchUseDefaultPrompt!==!1}:{}}),!0}async function be(e){let t=D.value,n=t?.pendingQuestion,i=t?.sessionId,a=(Array.isArray(e)?e:[e]).map(e=>String(e??``).trim()).filter(Boolean);if(!t||!n||!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:n.interactionId,answer:n.multiple?a:a[0]})}).then(e=>e.json());if(!e.success)throw Error(e.error||m(`@AGENT:回答提交失败`));return t.pendingQuestion=null,!0}catch(e){return r.error(e?.message||m(`@AGENT:回答提交失败`)),!1}finally{t.answeringQuestion=!1}}function xe(){let e=D.value;e?.abortController&&(e.abortController.abort(),e.abortController=null)}return{sessions:p,sessionsLoading:h,currentSessionId:b,messages:O,displayMessages:A,isStreaming:j,silentMs:oe,sessionLoading:x,pendingQuestion:R,questionPanel:B,answeringQuestion:z,isSessionGenerating:Y,contextUsage:P,inputContextUsage:F,queuedMessages:H,queuePaused:V,removeQueuedMessage:G,flushQueued:J,currentEngine:I,pendingEngine:g,isEngineLocked:L,pickEngine:v,loadSessions:Q,loadSession:me,deleteSession:he,renameSession:ge,newSession:_e,sendMessage:ve,retryTurn:ye,answerQuestion:be,stop:xe}}var Y=`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 ue(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?m(`@AGENT:今天`):`${e}${m(`@AGENT:天前`)}`}return`${t.getFullYear()}-${i(t.getMonth()+1)}-${i(t.getDate())}`}catch{return e}}function X(e,t){return e.map(e=>({id:e.sessionId,title:e.title||m(`@AGENT:无标题`),meta:`${ue(e.updatedAt)} · ${e.messageCount??0} ${m(`@AGENT:条`)}`,generatingText:e.isGenerating||t(e.sessionId)?m(`@AGENT:正在生成中...`):``,badge:e.source===`cli`?`CLI`:``,searchText:e.model}))}function de(){return{newConversation:m(`@AGENT:新建会话`),searchPlaceholder:m(`@AGENT:搜索会话...`),empty:m(`@AGENT:暂无会话`),emptyHint:m(`@AGENT:点击上方按钮开始对话`),noResult:m(`@AGENT:未找到匹配的会话`),loading:m(`@AGENT:加载会话中...`),rename:m(`@AGENT:重命名`),delete:m(`@AGENT:删除`),untitled:m(`@AGENT:无标题`),collapse:m(`@AGENT:收起会话列表`),expand:m(`@AGENT:展开会话列表`)}}var Z=`g ai`,Q=Y,fe={enable:!0},pe={enable:!0,items:[`duration`],visibility:`always`};function me(){return{title:m(`@AGENT:等待你的回答`),placeholder:m(`@AGENT:输入回答`),submit:m(`@AGENT:提交回答`),answered:m(`@AGENT:已回答`),expand:m(`@AGENT:展开完整问答`),collapse:m(`@AGENT:收起完整问答`)}}function he(){return{title:m(`@AGENT:排队中`),hint:m(`@AGENT:本轮结束后依次发送`),pausedHint:m(`@AGENT:已暂停,点「立即发送」继续`),send:m(`@AGENT:加入队列`),flush:m(`@AGENT:立即发送`),remove:m(`@AGENT:移出队列`)}}export{de as a,X as c,V as d,D as f,j as h,fe as i,H as l,A as m,Z as n,me as o,E as p,pe as r,he as s,Q as t,J as u};
|
|
10
|
+
[`+m(`@AGENT:已停止`)+`]`,o.status=`done`,o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`),o.meta?.durationMs===void 0&&(o.finishedAt=Date.now(),o.meta={...o.meta||{},durationMs:o.finishedAt-(o.createdAt||o.finishedAt)});else{o.status=`error`;let e=i?.message||String(i);o.error=m(`@AGENT:连接中断,本轮进度已保留;点「重试」接着跑。原因:{reason}`,{reason:e}),o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`),r.error(o.error||m(`@AGENT:对话失败`))}}finally{let n=!!e.pendingQuestion,r=o.status===`error`?`error`:`done`;i.end(s),t===e.nonce&&(e.isStreaming=!1,e.pendingQuestion=null,e.answeringQuestion=!1,e.abortController=null,!h&&!n&&re({kind:r,title:e.title,detail:r===`error`&&o.error||o.content,tag:`zen-gitsync-agent-${p||e.key}`,alreadyToast:r===`error`}),e.queue.length>0&&(h||o.status===`error`?e.queuePaused=!0:n||q(e))),p&&(h&&C.add(p),pe(p)),Q().catch(()=>{})}}async function ye(t){let n=D.value;if(!n||n.isStreaming)return!1;let a=[...n.messages].reverse().find(e=>e.role===`assistant`),o=(t?.id?n.messages.find(e=>e.id===t.id):null)||a;if(!o||o.role!==`assistant`)return!1;if(a&&o.id!==a.id)return r.warning(m(`@AGENT:只能重试最后一轮`)),!1;if(!n.sessionId)return r.warning(m(`@AGENT:这条会话还没在服务端建立,请重新发送消息`)),!1;let s=p.value.find(e=>e.sessionId===n.sessionId)?.engine||I.value;if(s!==`gai`)return r.warning(m(`@AGENT:该会话由外部 CLI 引擎运行,不支持重试上一轮,请重新发送`)),!1;o.content=``,o.reasoning=void 0,o.reasoningStatus=void 0,o.reasoningStartedAt=void 0,o.reasoningEndedAt=void 0,o.error=``,o.status=`pending`,o.finishedAt=void 0,o.meta&&={...o.meta,durationMs:void 0},n.nonce+=1;let c=n.nonce;n.abortController=new AbortController;let l=n.abortController;n.pendingQuestion=null,n.answeringQuestion=!1,n.isStreaming=!0,n.lastEventAt=Date.now();let u=`${f}:${n.key}:${c}`;return i.begin(u),await $(n,c,l,o,u,{sessionId:n.sessionId||``,resume:!0,cwd:e.currentDirectory||``,engine:s,...n.lastSendOptions?.openFilePath?{openFilePath:n.lastSendOptions.openFilePath}:{},...n.lastSendOptions?.docNote?{docNote:n.lastSendOptions.docNote}:{},...n.lastSendOptions?.dirStatus?.length?{dirStatus:n.lastSendOptions.dirStatus}:{},...n.lastSendOptions?.dirSummary?{dirSummary:n.lastSendOptions.dirSummary}:{},...n.lastSendOptions?.allowDispatch?{allowDispatch:!0,dispatchExecutor:n.lastSendOptions.dispatchExecutor||``,dispatchUseDefaultPrompt:n.lastSendOptions.dispatchUseDefaultPrompt!==!1}:{}}),!0}async function be(e){let t=D.value,n=t?.pendingQuestion,i=t?.sessionId,a=(Array.isArray(e)?e:[e]).map(e=>String(e??``).trim()).filter(Boolean);if(!t||!n||!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:n.interactionId,answer:n.multiple?a:a[0]})}).then(e=>e.json());if(!e.success)throw Error(e.error||m(`@AGENT:回答提交失败`));return t.pendingQuestion=null,!0}catch(e){return r.error(e?.message||m(`@AGENT:回答提交失败`)),!1}finally{t.answeringQuestion=!1}}function xe(){let e=D.value;e?.abortController&&(e.abortController.abort(),e.abortController=null)}return{sessions:p,sessionsLoading:h,currentSessionId:b,messages:O,displayMessages:A,isStreaming:j,silentMs:oe,sessionLoading:x,pendingQuestion:R,questionPanel:B,answeringQuestion:z,isSessionGenerating:Y,contextUsage:P,inputContextUsage:F,queuedMessages:H,queuePaused:V,removeQueuedMessage:G,flushQueued:J,currentEngine:I,pendingEngine:g,isEngineLocked:L,pickEngine:v,loadSessions:Q,loadSession:me,deleteSession:he,renameSession:ge,newSession:_e,sendMessage:ve,retryTurn:ye,answerQuestion:be,stop:xe}}var Y=`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 ue(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?m(`@AGENT:今天`):`${e}${m(`@AGENT:天前`)}`}return`${t.getFullYear()}-${i(t.getMonth()+1)}-${i(t.getDate())}`}catch{return e}}function X(e,t){return e.map(e=>({id:e.sessionId,title:e.title||m(`@AGENT:无标题`),meta:`${ue(e.updatedAt)} · ${e.messageCount??0} ${m(`@AGENT:条`)}`,generatingText:e.isGenerating||t(e.sessionId)?m(`@AGENT:正在生成中...`):``,badge:e.source===`cli`?`CLI`:``,searchText:e.model}))}function de(){return{newConversation:m(`@AGENT:新建会话`),searchPlaceholder:m(`@AGENT:搜索会话...`),empty:m(`@AGENT:暂无会话`),emptyHint:m(`@AGENT:点击上方按钮开始对话`),noResult:m(`@AGENT:未找到匹配的会话`),loading:m(`@AGENT:加载会话中...`),rename:m(`@AGENT:重命名`),delete:m(`@AGENT:删除`),untitled:m(`@AGENT:无标题`),collapse:m(`@AGENT:收起会话列表`),expand:m(`@AGENT:展开会话列表`)}}var Z=`g ai`,Q=Y,fe={enable:!0},pe={enable:!0,items:[`duration`],visibility:`always`};function me(){return{title:m(`@AGENT:等待你的回答`),placeholder:m(`@AGENT:输入回答`),submit:m(`@AGENT:提交回答`),answered:m(`@AGENT:已回答`),expand:m(`@AGENT:展开完整问答`),collapse:m(`@AGENT:收起完整问答`)}}function he(){return{title:m(`@AGENT:排队中`),hint:m(`@AGENT:本轮结束后依次发送`),pausedHint:m(`@AGENT:已暂停,点「立即发送」继续`),send:m(`@AGENT:加入队列`),flush:m(`@AGENT:立即发送`),remove:m(`@AGENT:移出队列`)}}export{de as a,X as c,V as d,D as f,j as h,fe as i,H as l,A as m,Z as n,me as o,E as p,pe as r,he as s,Q as t,J as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{In as e,gr as t,i as n,lr as r,n as i,nr as a,t as o,xn as s}from"./element-plus-Bz6lYur-.js";import{S as c,h as l,v as u}from"./vendor-C2k0GBzj.js";import{a as d,n as f,r as p}from"./_plugin-vue_export-helper-Dz34f-q7.js";var m=[{id:`claude`,name:`Claude Code`},{id:`opencode`,name:`OpenCode`},{id:`codex`,name:`Codex`},{id:`codebuddy`,name:`CodeBuddy Code`},{id:`pi`,name:`Pi Agent`}];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":i,"en-US":o};function v(e){return _[e]||i}r(),e();var ee=c(`locale`,()=>{let e=t(p()),n=s(()=>v(e.value));async function r(t){d(t),e.value=t;let n=M();n.locale!==t&&await n.saveGeneralSettings({locale:t})}return{currentLocale:e,elementPlusLocale:n,changeLocale:r}}),y=`flowdash-md-preview-theme`,b=`data-md-theme`,x=`github`,S={light:`github`,dark:`github-dark`},C=`md-preview--scoped-`,w=`flowdash-md-preview-scoped-`,T=new Set,E=Object.keys(l);function D(e,t){let n=RegExp(`(?:^|[;{\\n])\\s*${t}\\s*:\\s*([^;]+);`).exec(e);return n?n[1].trim():void 0}var O=E.map(e=>{let t=u(e)||``;return{value:e,bg:D(t,`background`),fg:D(t,`color`)}});function k(e){if(typeof document>`u`)return;let t=typeof e==`string`&&e.trim()?e.trim():x,n=u(t)??u(`github`),r=document.getElementById(y);if(!n){r?.remove();return}r||(r=document.createElement(`style`),r.id=y,document.head.appendChild(r)),r.setAttribute(b,t),r.textContent!==n&&(r.textContent=n)}function A(e){let t=typeof e==`string`&&e.trim()?e.trim():x;return C+(u(t)?t:x).toLowerCase().replace(/[^a-z0-9_-]+/g,`-`)}function j(e){let t=A(e);if(typeof document>`u`||T.has(t))return t;let n=t.slice(19),r=u(n)??u(`github`);if(!r)return null;let i=document.createElement(`style`);return i.id=`${w}${n}`,i.setAttribute(b,n),i.textContent=r.replace(/\.md-preview(?![\w-])/g,`.md-preview.${t}`),document.head.appendChild(i),T.add(t),t}r(),e();var M=c(`config`,()=>{let e=t(``),r=t([]),i=t([]),o=t([]),c=t([]),l=t([]),u=t([]),p=t([]),m=t([]),g=t(!1),_=t({enabled:!1,type:`command`,refId:``}),v=t(!1),y=t(!1),b=t(``),S=t(``),C=t(``),w=t(``),T=t(!0),D=t(!1),O=t(!0),A=t(!1),j=t(!1),M=t(!0),N=t(`light`),P=t(`zh-CN`),F=t([]),I=t(1e3),L=t(8e5),R=t([]),z=t(``),B=t(null),V=t(`claude`),te=t(!0),H=t(!1),U=t(!0),W={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:x,editorWorkspaceByProject:{}},G=t(JSON.parse(JSON.stringify(W))),K=t(!1);function ne(e,t=``){C.value=e||``,w.value=t||``}let re=s(()=>{let e=C.value;return e?G.value.aiDiffSummaryByProject[e]!==!1:!1});function ie(){let e=C.value;if(e&&G.value.layoutsByProject?.[e]){G.value.layout={...G.value.layoutsByProject[e]};return}}function q(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 ae(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return N.value=e,q(e),Re({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}q(N.value);let J=s(()=>({defaultCommitMessage:e.value,descriptionTemplates:r.value,scopeTemplates:i.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:C.value})),oe=s(()=>!!(b.value&&b.value.trim()));async function se(){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 Y(t=!1){if(!t&&y.value&&!v.value)return console.log(f(`@D50BB:使用缓存的配置信息`)),J.value;v.value=!0;try{v.value=!0,console.log(f(`@D50BB:加载配置信息...`));let t=await fetch(`/api/config/getConfig`),a=await t.json().catch(()=>({}));if(!t.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}`),b.value=e,S.value=t,null}if(b.value=``,S.value=``,e.value=a.defaultCommitMessage||``,r.value=a.descriptionTemplates||[],i.value=a.scopeTemplates||[],o.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&&(A.value=!!a.skipHooks),a.autoQuickPushOnEnter!==void 0&&(j.value=!!a.autoQuickPushOnEnter),a.autoSetDefaultMessage!==void 0&&(D.value=!!a.autoSetDefaultMessage),a.autoClosePushModal!==void 0&&(T.value=!!a.autoClosePushModal),a.pullBeforePush!==void 0&&(M.value=!!a.pullBeforePush),Array.isArray(a.models)&&(F.value=a.models),Number.isFinite(Number(a.aiMaxToolIterations))&&Number(a.aiMaxToolIterations)>0&&(I.value=Math.floor(Number(a.aiMaxToolIterations))),Number.isFinite(Number(a.aiMaxRequestTokens))&&Number(a.aiMaxRequestTokens)>0&&(L.value=Math.floor(Number(a.aiMaxRequestTokens))),Number.isFinite(Number(a?.aiRequestBudget?.maxUserChars))&&Number(a.aiRequestBudget.maxUserChars)>0&&(B.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)&&(R.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)&&(V.value=a.taskExecutor),typeof a.agentDefaultPrompt==`string`&&(z.value=a.agentDefaultPrompt),typeof a.notifyPageOnTaskDone==`boolean`&&(te.value=a.notifyPageOnTaskDone),typeof a.notifyBrowserOnTaskDone==`boolean`&&(H.value=a.notifyBrowserOnTaskDone),typeof a.notifySoundOnTaskDone==`boolean`&&(U.value=a.notifySoundOnTaskDone),a.theme&&[`light`,`dark`,`auto`].includes(a.theme)&&(N.value=a.theme,q(a.theme)),a.locale&&[`zh-CN`,`en-US`].includes(a.locale)){P.value=a.locale,d(a.locale);let e=ee();e.currentLocale=a.locale}if(a.currentDirectory&&(C.value=a.currentDirectory),a.ui==null){let e=e=>{try{return localStorage.getItem(e)}catch{return null}},t={},n=e(`zen-gitsync-layout-left-ratio`),r=e(`zen-gitsync-layout-mid-ratio`),i=e(`zen-gitsync-layout-right-ratio`),a=e(`zen-gitsync-layout-top-ratio`);if(n||r||i||a){let e=(e,t)=>{let n=e==null?NaN:parseFloat(e);return Number.isFinite(n)?n:t};t.layout={leftRatio:e(n,W.layout.leftRatio),midRatio:e(r,W.layout.midRatio),rightRatio:e(i,W.layout.rightRatio),topRatio:e(a,W.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)):W.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(G.value={...G.value,...t}),Object.keys(t).length>0&&$(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):W.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):W.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):W.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):W.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={...W.layout,...a.ui.layout||{}};G.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))):W.fileDiffSplitPercent,diffPreviewSplitPercent:Number.isFinite(Number(a.ui.diffPreviewSplitPercent))?Math.min(85,Math.max(25,Number(a.ui.diffPreviewSplitPercent))):W.diffPreviewSplitPercent,commandConsole:{expanded:typeof a.ui.commandConsole?.expanded==`boolean`?a.ui.commandConsole.expanded:W.commandConsole.expanded,useTerminal:typeof a.ui.commandConsole?.useTerminal==`boolean`?a.ui.commandConsole.useTerminal:W.commandConsole.useTerminal,showTerminalSessions:typeof a.ui.commandConsole?.showTerminalSessions==`boolean`?a.ui.commandConsole.showTerminalSessions:W.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(a.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(a.ui.commandConsole.splitPercent))):W.commandConsole.splitPercent},editorAutoSave:typeof a.ui.editorAutoSave==`boolean`?a.ui.editorAutoSave:W.editorAutoSave,fileTreeAutoRefresh:typeof a.ui.fileTreeAutoRefresh==`boolean`?a.ui.fileTreeAutoRefresh:W.fileTreeAutoRefresh,editorSidebarWidth:Number.isFinite(Number(a.ui.editorSidebarWidth))?Math.min(400,Math.max(140,Number(a.ui.editorSidebarWidth))):W.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:W.lastTaskExecutor,pickerGlobalSearch:typeof a.ui.pickerGlobalSearch==`boolean`?a.ui.pickerGlobalSearch:W.pickerGlobalSearch,markdownTheme:typeof a.ui.markdownTheme==`string`&&E.includes(a.ui.markdownTheme)?a.ui.markdownTheme:W.markdownTheme,editorWorkspaceByProject:o}}return ie(),k(G.value.markdownTheme),K.value=!0,y.value=!0,console.log(f(`@D50BB:配置信息加载完成`)),J.value}catch(e){return console.error(`加载配置失败:`,e),n.error(`${f(`@D50BB:加载配置失败: `)}${e.message}`),b.value=e.message,null}finally{v.value=!1}}async function ce(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:O.value,skipHooks:A.value,autoQuickPushOnEnter:j.value,autoSetDefaultMessage:D.value,autoClosePushModal:T.value,pullBeforePush:M.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}a([O,A,j,D,T,M],()=>{y.value&&ce()});let X=null,Z={};async function Q(){if(X&&=(clearTimeout(X),null),Object.keys(Z).length===0)return;let e=Z;Z={};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 $(e,t={}){if(K.value){if(t.immediate){Object.assign(Z,e),await Q();return}Object.assign(Z,e),X&&clearTimeout(X),X=setTimeout(()=>{Q()},300)}}async function le(e){h(e)&&G.value.lastTaskExecutor!==e&&(G.value.lastTaskExecutor=e,await $({lastTaskExecutor:e},{immediate:!0}))}let ue=s(()=>h(G.value.lastTaskExecutor)?G.value.lastTaskExecutor:V.value);async function de(){G.value.layout={...W.layout};let e=C.value;return e&&(G.value.layoutsByProject={...G.value.layoutsByProject,[e]:{...G.value.layout}}),await $({layoutsByProject:G.value.layoutsByProject},{immediate:!0}),G.value.layout}async function fe(e){let t=C.value;t&&(G.value.aiDiffSummaryByProject={...G.value.aiDiffSummaryByProject,[t]:e},await $({aiDiffSummaryByProject:{[t]:e}},{immediate:!0}))}async function pe(e){if(!Number.isFinite(e))return;let t=Math.min(400,Math.max(140,e));G.value.editorSidebarWidth=t,await $({editorSidebarWidth:t})}function me(e){let t=C.value;if(!t)return;let n=e.tabs.slice(0,40);G.value.editorWorkspaceByProject={...G.value.editorWorkspaceByProject,[t]:{expandedDirs:e.expandedDirs.slice(0,200),tabs:n,activeTab:e.activeTab&&n.includes(e.activeTab)?e.activeTab:null}},$({editorWorkspaceByProject:G.value.editorWorkspaceByProject})}function he(e){let t=e??C.value;return t?G.value.editorWorkspaceByProject[t]??null:null}a(()=>G.value.fileListViewMode,e=>{K.value&&$({fileListViewMode:e})}),a(()=>G.value.fileDiffSplitPercent,e=>{K.value&&$({fileDiffSplitPercent:e})}),a(()=>G.value.diffPreviewSplitPercent,e=>{K.value&&e!=null&&$({diffPreviewSplitPercent:e})}),a(()=>G.value.editorAutoSave,e=>{K.value&&$({editorAutoSave:e})}),a(()=>G.value.fileTreeAutoRefresh,e=>{K.value&&$({fileTreeAutoRefresh:e})}),a(()=>G.value.headerToolsHidden,e=>{K.value&&Array.isArray(e)&&$({headerToolsHidden:e})}),a(()=>G.value.mindmapDirs,e=>{K.value&&Array.isArray(e)&&$({mindmapDirs:e})}),a(()=>G.value.pickerGlobalSearch,e=>{K.value&&$({pickerGlobalSearch:e})});let ge=s(()=>G.value.markdownTheme);async function _e(e){let t=E.includes(e)?e:W.markdownTheme;return G.value.markdownTheme=t,k(t),await $({markdownTheme:t},{immediate:!0}),t}a(()=>G.value.markdownTheme,e=>{K.value&&typeof e==`string`&&e&&(k(e),$({markdownTheme:e}))}),a(()=>G.value.layout,e=>{if(!K.value)return;let t=C.value;t&&(G.value.layoutsByProject={...G.value.layoutsByProject,[t]:e},$({layoutsByProject:G.value.layoutsByProject}))},{deep:!0}),a(()=>G.value.commandConsole,e=>{K.value&&$({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{Q()});async function ve(t){try{let r=await(await fetch(`/api/config/saveDefaultMessage`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({defaultCommitMessage:t})})).json();return r.success?(e.value=t,n.success(f(`@D50BB:默认提交信息已保存`)),!0):(n.error(`${f(`@D50BB:保存失败: `)}${r.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存失败: `)}${e.message}`),!1}}async function ye(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 be(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`?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:保存模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function xe(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`?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:删除模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function Se(e,t,a){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:a})})).json();if(s.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=o.value.indexOf(e);n!==-1&&(o.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:更新模板失败: `)}${s.error}`),!1}catch(e){return n.error(`${f(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function Ce(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`?(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:置顶模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function we(){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 Te(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 we(),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 Ee(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 we(),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 De(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 Oe(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 Y(!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 ke(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 Y(!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 Ae(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 Y(!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 je(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 Y(!0),!0):(n.error(t.error),!1)}catch(e){return n.error(e.message),!1}}async function Me(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 Y(!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 Ne(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 Y(!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 Pe(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 Y(!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 Fe(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 Ie(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},...e.agentDefaultPrompt===void 0?{}:{agentDefaultPrompt:e.agentDefaultPrompt}})})).json();return t.success?(t.aiMaxToolIterations!==void 0&&(I.value=Number(t.aiMaxToolIterations)||e.aiMaxToolIterations||I.value),t.aiMaxRequestTokens!==void 0&&(L.value=Number(t.aiMaxRequestTokens)||e.aiMaxRequestTokens||L.value),t.aiRequestBudget&&Number(t.aiRequestBudget.maxUserChars)>0&&(B.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)&&(R.value=t.agentPresetPrompts),typeof t.agentDefaultPrompt==`string`&&(z.value=t.agentDefaultPrompt),!0):(n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${e.message}`),!1}}async function Le(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 Re(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,q(e.theme)),e.locale){P.value=e.locale,d(e.locale);let t=ee();t.currentLocale=e.locale}return h(e.taskExecutor)&&(V.value=e.taskExecutor),typeof e.notifyPageOnTaskDone==`boolean`&&(te.value=e.notifyPageOnTaskDone),typeof e.notifyBrowserOnTaskDone==`boolean`&&(H.value=e.notifyBrowserOnTaskDone),typeof e.notifySoundOnTaskDone==`boolean`&&(U.value=e.notifySoundOnTaskDone),!0}return n.error(`保存通用设置失败: ${t.error}`),!1}catch(e){return n.error(`保存通用设置失败: ${e.message}`),!1}}return{models:F,aiMaxToolIterations:I,aiMaxRequestTokens:L,agentPresetPrompts:R,agentDefaultPrompt:z,aiRequestBudget:B,taskExecutor:V,resolvedTaskExecutor:ue,setLastTaskExecutor:le,notifyPageOnTaskDone:te,notifyBrowserOnTaskDone:H,notifySoundOnTaskDone:U,defaultCommitMessage:e,descriptionTemplates:r,scopeTemplates:i,messageTemplates:o,commandTemplates:c,lockedFiles:l,customCommands:u,orchestrations:p,startupItems:m,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:y,configLoadError:b,configFilePath:S,hasConfigLoadError:oe,currentDirectory:C,currentIconUrl:w,config:J,autoClosePushModal:T,autoSetDefaultMessage:D,isStandardCommit:O,skipHooks:A,autoQuickPushOnEnter:j,pullBeforePush:M,theme:N,locale:P,ui:G,isUiLoaded:K,aiDiffSummaryEnabled:re,markdownTheme:ge,loadConfig:Y,setCurrentDirectory:ne,openSystemConfigFile:se,saveTemplate:be,saveModels:Le,saveAiSettings:Ie,saveGeneralSettings:Re,saveUiSettings:$,setAiDiffSummaryEnabled:fe,setEditorSidebarWidth:pe,saveEditorWorkspace:me,getEditorWorkspace:he,setMarkdownTheme:_e,resetUiLayout:de,applyTheme:q,toggleTheme:ae,saveDefaultMessage:ve,deleteTemplate:xe,updateTemplate:Se,pinTemplate:Ce,loadLockedFiles:we,lockFile:Te,unlockFile:Ee,isFileLocked:De,saveCustomCommand:Oe,deleteCustomCommand:ke,updateCustomCommand:Ae,pinCustomCommand:je,saveOrchestration:Me,deleteOrchestration:Ne,updateOrchestration:Pe,saveStartupItems:Fe,saveAfterQuickPushAction:ye,saveCommitSettings:ce}});export{A as a,h as c,j as i,g as l,S as n,ee as o,O as r,m as s,M as t};
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{In as e,gr as t,i as n,lr as r,n as i,nr as a,t as o,xn as s}from"./element-plus-Bz6lYur-.js";import{S as c,h as l,v as u}from"./vendor-C2k0GBzj.js";import{a as d,n as f,r as p}from"./_plugin-vue_export-helper-BhdsvhKo.js";var m=[{id:`claude`,name:`Claude Code`},{id:`opencode`,name:`OpenCode`},{id:`codex`,name:`Codex`},{id:`codebuddy`,name:`CodeBuddy Code`},{id:`pi`,name:`Pi Agent`}];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":i,"en-US":o};function v(e){return _[e]||i}r(),e();var ee=c(`locale`,()=>{let e=t(p()),n=s(()=>v(e.value));async function r(t){d(t),e.value=t;let n=M();n.locale!==t&&await n.saveGeneralSettings({locale:t})}return{currentLocale:e,elementPlusLocale:n,changeLocale:r}}),y=`flowdash-md-preview-theme`,b=`data-md-theme`,x=`github`,S={light:`github`,dark:`github-dark`},C=`md-preview--scoped-`,w=`flowdash-md-preview-scoped-`,T=new Set,E=Object.keys(l);function D(e,t){let n=RegExp(`(?:^|[;{\\n])\\s*${t}\\s*:\\s*([^;]+);`).exec(e);return n?n[1].trim():void 0}var O=E.map(e=>{let t=u(e)||``;return{value:e,bg:D(t,`background`),fg:D(t,`color`)}});function k(e){if(typeof document>`u`)return;let t=typeof e==`string`&&e.trim()?e.trim():x,n=u(t)??u(`github`),r=document.getElementById(y);if(!n){r?.remove();return}r||(r=document.createElement(`style`),r.id=y,document.head.appendChild(r)),r.setAttribute(b,t),r.textContent!==n&&(r.textContent=n)}function A(e){let t=typeof e==`string`&&e.trim()?e.trim():x;return C+(u(t)?t:x).toLowerCase().replace(/[^a-z0-9_-]+/g,`-`)}function j(e){let t=A(e);if(typeof document>`u`||T.has(t))return t;let n=t.slice(19),r=u(n)??u(`github`);if(!r)return null;let i=document.createElement(`style`);return i.id=`${w}${n}`,i.setAttribute(b,n),i.textContent=r.replace(/\.md-preview(?![\w-])/g,`.md-preview.${t}`),document.head.appendChild(i),T.add(t),t}r(),e();var M=c(`config`,()=>{let e=t(``),r=t([]),i=t([]),o=t([]),c=t([]),l=t([]),u=t([]),p=t([]),m=t([]),g=t(!1),_=t({enabled:!1,type:`command`,refId:``}),v=t(!1),y=t(!1),b=t(``),S=t(``),C=t(``),w=t(``),T=t(!0),D=t(!1),O=t(!0),A=t(!1),j=t(!1),M=t(!0),N=t(`light`),P=t(`zh-CN`),F=t([]),I=t(1e3),L=t(8e5),R=t([]),z=t(``),B=t(null),V=t(`claude`),te=t(!0),H=t(!1),U=t(!0),W={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:x,editorWorkspaceByProject:{}},G=t(JSON.parse(JSON.stringify(W))),K=t(!1);function ne(e,t=``){C.value=e||``,w.value=t||``}let re=s(()=>{let e=C.value;return e?G.value.aiDiffSummaryByProject[e]!==!1:!1});function ie(){let e=C.value;if(e&&G.value.layoutsByProject?.[e]){G.value.layout={...G.value.layoutsByProject[e]};return}}function q(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 ae(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return N.value=e,q(e),Re({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}q(N.value);let J=s(()=>({defaultCommitMessage:e.value,descriptionTemplates:r.value,scopeTemplates:i.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:C.value})),oe=s(()=>!!(b.value&&b.value.trim()));async function se(){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 Y(t=!1){if(!t&&y.value&&!v.value)return console.log(f(`@D50BB:使用缓存的配置信息`)),J.value;v.value=!0;try{v.value=!0,console.log(f(`@D50BB:加载配置信息...`));let t=await fetch(`/api/config/getConfig`),a=await t.json().catch(()=>({}));if(!t.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}`),b.value=e,S.value=t,null}if(b.value=``,S.value=``,e.value=a.defaultCommitMessage||``,r.value=a.descriptionTemplates||[],i.value=a.scopeTemplates||[],o.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&&(A.value=!!a.skipHooks),a.autoQuickPushOnEnter!==void 0&&(j.value=!!a.autoQuickPushOnEnter),a.autoSetDefaultMessage!==void 0&&(D.value=!!a.autoSetDefaultMessage),a.autoClosePushModal!==void 0&&(T.value=!!a.autoClosePushModal),a.pullBeforePush!==void 0&&(M.value=!!a.pullBeforePush),Array.isArray(a.models)&&(F.value=a.models),Number.isFinite(Number(a.aiMaxToolIterations))&&Number(a.aiMaxToolIterations)>0&&(I.value=Math.floor(Number(a.aiMaxToolIterations))),Number.isFinite(Number(a.aiMaxRequestTokens))&&Number(a.aiMaxRequestTokens)>0&&(L.value=Math.floor(Number(a.aiMaxRequestTokens))),Number.isFinite(Number(a?.aiRequestBudget?.maxUserChars))&&Number(a.aiRequestBudget.maxUserChars)>0&&(B.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)&&(R.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)&&(V.value=a.taskExecutor),typeof a.agentDefaultPrompt==`string`&&(z.value=a.agentDefaultPrompt),typeof a.notifyPageOnTaskDone==`boolean`&&(te.value=a.notifyPageOnTaskDone),typeof a.notifyBrowserOnTaskDone==`boolean`&&(H.value=a.notifyBrowserOnTaskDone),typeof a.notifySoundOnTaskDone==`boolean`&&(U.value=a.notifySoundOnTaskDone),a.theme&&[`light`,`dark`,`auto`].includes(a.theme)&&(N.value=a.theme,q(a.theme)),a.locale&&[`zh-CN`,`en-US`].includes(a.locale)){P.value=a.locale,d(a.locale);let e=ee();e.currentLocale=a.locale}if(a.currentDirectory&&(C.value=a.currentDirectory),a.ui==null){let e=e=>{try{return localStorage.getItem(e)}catch{return null}},t={},n=e(`zen-gitsync-layout-left-ratio`),r=e(`zen-gitsync-layout-mid-ratio`),i=e(`zen-gitsync-layout-right-ratio`),a=e(`zen-gitsync-layout-top-ratio`);if(n||r||i||a){let e=(e,t)=>{let n=e==null?NaN:parseFloat(e);return Number.isFinite(n)?n:t};t.layout={leftRatio:e(n,W.layout.leftRatio),midRatio:e(r,W.layout.midRatio),rightRatio:e(i,W.layout.rightRatio),topRatio:e(a,W.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)):W.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(G.value={...G.value,...t}),Object.keys(t).length>0&&$(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):W.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):W.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):W.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):W.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={...W.layout,...a.ui.layout||{}};G.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))):W.fileDiffSplitPercent,diffPreviewSplitPercent:Number.isFinite(Number(a.ui.diffPreviewSplitPercent))?Math.min(85,Math.max(25,Number(a.ui.diffPreviewSplitPercent))):W.diffPreviewSplitPercent,commandConsole:{expanded:typeof a.ui.commandConsole?.expanded==`boolean`?a.ui.commandConsole.expanded:W.commandConsole.expanded,useTerminal:typeof a.ui.commandConsole?.useTerminal==`boolean`?a.ui.commandConsole.useTerminal:W.commandConsole.useTerminal,showTerminalSessions:typeof a.ui.commandConsole?.showTerminalSessions==`boolean`?a.ui.commandConsole.showTerminalSessions:W.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(a.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(a.ui.commandConsole.splitPercent))):W.commandConsole.splitPercent},editorAutoSave:typeof a.ui.editorAutoSave==`boolean`?a.ui.editorAutoSave:W.editorAutoSave,fileTreeAutoRefresh:typeof a.ui.fileTreeAutoRefresh==`boolean`?a.ui.fileTreeAutoRefresh:W.fileTreeAutoRefresh,editorSidebarWidth:Number.isFinite(Number(a.ui.editorSidebarWidth))?Math.min(400,Math.max(140,Number(a.ui.editorSidebarWidth))):W.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:W.lastTaskExecutor,pickerGlobalSearch:typeof a.ui.pickerGlobalSearch==`boolean`?a.ui.pickerGlobalSearch:W.pickerGlobalSearch,markdownTheme:typeof a.ui.markdownTheme==`string`&&E.includes(a.ui.markdownTheme)?a.ui.markdownTheme:W.markdownTheme,editorWorkspaceByProject:o}}return ie(),k(G.value.markdownTheme),K.value=!0,y.value=!0,console.log(f(`@D50BB:配置信息加载完成`)),J.value}catch(e){return console.error(`加载配置失败:`,e),n.error(`${f(`@D50BB:加载配置失败: `)}${e.message}`),b.value=e.message,null}finally{v.value=!1}}async function ce(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:O.value,skipHooks:A.value,autoQuickPushOnEnter:j.value,autoSetDefaultMessage:D.value,autoClosePushModal:T.value,pullBeforePush:M.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}a([O,A,j,D,T,M],()=>{y.value&&ce()});let X=null,Z={};async function Q(){if(X&&=(clearTimeout(X),null),Object.keys(Z).length===0)return;let e=Z;Z={};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 $(e,t={}){if(K.value){if(t.immediate){Object.assign(Z,e),await Q();return}Object.assign(Z,e),X&&clearTimeout(X),X=setTimeout(()=>{Q()},300)}}async function le(e){h(e)&&G.value.lastTaskExecutor!==e&&(G.value.lastTaskExecutor=e,await $({lastTaskExecutor:e},{immediate:!0}))}let ue=s(()=>h(G.value.lastTaskExecutor)?G.value.lastTaskExecutor:V.value);async function de(){G.value.layout={...W.layout};let e=C.value;return e&&(G.value.layoutsByProject={...G.value.layoutsByProject,[e]:{...G.value.layout}}),await $({layoutsByProject:G.value.layoutsByProject},{immediate:!0}),G.value.layout}async function fe(e){let t=C.value;t&&(G.value.aiDiffSummaryByProject={...G.value.aiDiffSummaryByProject,[t]:e},await $({aiDiffSummaryByProject:{[t]:e}},{immediate:!0}))}async function pe(e){if(!Number.isFinite(e))return;let t=Math.min(400,Math.max(140,e));G.value.editorSidebarWidth=t,await $({editorSidebarWidth:t})}function me(e){let t=C.value;if(!t)return;let n=e.tabs.slice(0,40);G.value.editorWorkspaceByProject={...G.value.editorWorkspaceByProject,[t]:{expandedDirs:e.expandedDirs.slice(0,200),tabs:n,activeTab:e.activeTab&&n.includes(e.activeTab)?e.activeTab:null}},$({editorWorkspaceByProject:G.value.editorWorkspaceByProject})}function he(e){let t=e??C.value;return t?G.value.editorWorkspaceByProject[t]??null:null}a(()=>G.value.fileListViewMode,e=>{K.value&&$({fileListViewMode:e})}),a(()=>G.value.fileDiffSplitPercent,e=>{K.value&&$({fileDiffSplitPercent:e})}),a(()=>G.value.diffPreviewSplitPercent,e=>{K.value&&e!=null&&$({diffPreviewSplitPercent:e})}),a(()=>G.value.editorAutoSave,e=>{K.value&&$({editorAutoSave:e})}),a(()=>G.value.fileTreeAutoRefresh,e=>{K.value&&$({fileTreeAutoRefresh:e})}),a(()=>G.value.headerToolsHidden,e=>{K.value&&Array.isArray(e)&&$({headerToolsHidden:e})}),a(()=>G.value.mindmapDirs,e=>{K.value&&Array.isArray(e)&&$({mindmapDirs:e})}),a(()=>G.value.pickerGlobalSearch,e=>{K.value&&$({pickerGlobalSearch:e})});let ge=s(()=>G.value.markdownTheme);async function _e(e){let t=E.includes(e)?e:W.markdownTheme;return G.value.markdownTheme=t,k(t),await $({markdownTheme:t},{immediate:!0}),t}a(()=>G.value.markdownTheme,e=>{K.value&&typeof e==`string`&&e&&(k(e),$({markdownTheme:e}))}),a(()=>G.value.layout,e=>{if(!K.value)return;let t=C.value;t&&(G.value.layoutsByProject={...G.value.layoutsByProject,[t]:e},$({layoutsByProject:G.value.layoutsByProject}))},{deep:!0}),a(()=>G.value.commandConsole,e=>{K.value&&$({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{Q()});async function ve(t){try{let r=await(await fetch(`/api/config/saveDefaultMessage`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({defaultCommitMessage:t})})).json();return r.success?(e.value=t,n.success(f(`@D50BB:默认提交信息已保存`)),!0):(n.error(`${f(`@D50BB:保存失败: `)}${r.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存失败: `)}${e.message}`),!1}}async function ye(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 be(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`?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:保存模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function xe(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`?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:删除模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function Se(e,t,a){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:a})})).json();if(s.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=o.value.indexOf(e);n!==-1&&(o.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:更新模板失败: `)}${s.error}`),!1}catch(e){return n.error(`${f(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function Ce(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`?(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:置顶模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function we(){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 Te(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 we(),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 Ee(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 we(),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 De(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 Oe(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 Y(!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 ke(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 Y(!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 Ae(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 Y(!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 je(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 Y(!0),!0):(n.error(t.error),!1)}catch(e){return n.error(e.message),!1}}async function Me(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 Y(!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 Ne(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 Y(!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 Pe(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 Y(!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 Fe(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 Ie(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},...e.agentDefaultPrompt===void 0?{}:{agentDefaultPrompt:e.agentDefaultPrompt}})})).json();return t.success?(t.aiMaxToolIterations!==void 0&&(I.value=Number(t.aiMaxToolIterations)||e.aiMaxToolIterations||I.value),t.aiMaxRequestTokens!==void 0&&(L.value=Number(t.aiMaxRequestTokens)||e.aiMaxRequestTokens||L.value),t.aiRequestBudget&&Number(t.aiRequestBudget.maxUserChars)>0&&(B.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)&&(R.value=t.agentPresetPrompts),typeof t.agentDefaultPrompt==`string`&&(z.value=t.agentDefaultPrompt),!0):(n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${e.message}`),!1}}async function Le(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 Re(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,q(e.theme)),e.locale){P.value=e.locale,d(e.locale);let t=ee();t.currentLocale=e.locale}return h(e.taskExecutor)&&(V.value=e.taskExecutor),typeof e.notifyPageOnTaskDone==`boolean`&&(te.value=e.notifyPageOnTaskDone),typeof e.notifyBrowserOnTaskDone==`boolean`&&(H.value=e.notifyBrowserOnTaskDone),typeof e.notifySoundOnTaskDone==`boolean`&&(U.value=e.notifySoundOnTaskDone),!0}return n.error(`保存通用设置失败: ${t.error}`),!1}catch(e){return n.error(`保存通用设置失败: ${e.message}`),!1}}return{models:F,aiMaxToolIterations:I,aiMaxRequestTokens:L,agentPresetPrompts:R,agentDefaultPrompt:z,aiRequestBudget:B,taskExecutor:V,resolvedTaskExecutor:ue,setLastTaskExecutor:le,notifyPageOnTaskDone:te,notifyBrowserOnTaskDone:H,notifySoundOnTaskDone:U,defaultCommitMessage:e,descriptionTemplates:r,scopeTemplates:i,messageTemplates:o,commandTemplates:c,lockedFiles:l,customCommands:u,orchestrations:p,startupItems:m,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:y,configLoadError:b,configFilePath:S,hasConfigLoadError:oe,currentDirectory:C,currentIconUrl:w,config:J,autoClosePushModal:T,autoSetDefaultMessage:D,isStandardCommit:O,skipHooks:A,autoQuickPushOnEnter:j,pullBeforePush:M,theme:N,locale:P,ui:G,isUiLoaded:K,aiDiffSummaryEnabled:re,markdownTheme:ge,loadConfig:Y,setCurrentDirectory:ne,openSystemConfigFile:se,saveTemplate:be,saveModels:Le,saveAiSettings:Ie,saveGeneralSettings:Re,saveUiSettings:$,setAiDiffSummaryEnabled:fe,setEditorSidebarWidth:pe,saveEditorWorkspace:me,getEditorWorkspace:he,setMarkdownTheme:_e,resetUiLayout:de,applyTheme:q,toggleTheme:ae,saveDefaultMessage:ve,deleteTemplate:xe,updateTemplate:Se,pinTemplate:Ce,loadLockedFiles:we,lockFile:Te,unlockFile:Ee,isFileLocked:De,saveCustomCommand:Oe,deleteCustomCommand:ke,updateCustomCommand:Ae,pinCustomCommand:je,saveOrchestration:Me,deleteOrchestration:Ne,updateOrchestration:Pe,saveStartupItems:Fe,saveAfterQuickPushAction:ye,saveCommitSettings:ce}});export{A as a,h as c,j as i,g as l,S as n,ee as o,O as r,m as s,M as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.zm-node-menu{z-index:40;color:#1e293b;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;gap:2px;min-width:168px;padding:4px;font-size:13px;display:flex;position:fixed;box-shadow:0 8px 24px #0f172a24}.zm-node-menu-item{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:8px;width:100%;padding:6px 10px;transition:background .1s;display:flex}.zm-node-menu-item:hover:not(:disabled){background:#f1f5f9}.zm-node-menu-item:active:not(:disabled){background:#e2e8f0}.zm-node-menu-item:disabled{color:#94a3b8;cursor:not-allowed}.zm-node-menu-icon{color:#64748b;flex-shrink:0;justify-content:center;align-items:center;width:13px;height:13px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:10px;font-weight:600;display:inline-flex}.zm-node-menu-icon-code{letter-spacing:-1px;font-size:10px}.zm-node-menu-icon-table{font-family:inherit;font-size:12px}.zm-node-menu-divider{background:#e2e8f0;height:1px;margin:2px 4px}.zm-node-menu-arrow{color:#94a3b8;margin-left:auto;font-size:14px;transition:transform .15s}.zm-node-menu-arrow.is-open{transform:rotate(90deg)}.zm-marker-picker{flex-direction:column;gap:6px;padding:4px 8px 6px;display:flex}.zm-marker-group{flex-direction:column;gap:3px;display:flex}.zm-marker-group-label{text-transform:uppercase;letter-spacing:.04em;color:#94a3b8;font-size:10px;font-weight:600}.zm-marker-grid{flex-wrap:wrap;gap:3px;display:flex}.zm-marker-cell{cursor:pointer;background:#f8fafc;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;width:26px;height:26px;padding:0;transition:all .1s;display:flex}.zm-marker-cell:hover{background:#e2e8f0;border-color:#cbd5e1}.zm-marker-cell.is-active{background:#eff6ff;border-color:#3b82f6;box-shadow:0 0 0 1px #3b82f633}.zm-marker-cell svg{display:block}.zm-marker-clear{font:inherit;color:#b91c1c;cursor:pointer;text-align:center;background:0 0;border:none;border-radius:4px;padding:3px;font-size:11px}.zm-marker-clear:hover{background:#fee2e2}.zm-canvas-menu{z-index:40;box-sizing:border-box;color:#1e293b;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;gap:2px;min-width:140px;padding:4px;font-size:13px;display:flex;position:fixed;box-shadow:0 8px 24px #0f172a24}.zm-canvas-menu-item{color:inherit;font:inherit;text-align:left;cursor:pointer;box-sizing:border-box;background:0 0;border:none;border-radius:4px;align-items:center;gap:8px;width:100%;padding:6px 10px;transition:background .1s;display:flex}.zm-canvas-menu-item:hover:not(:disabled){background:#f1f5f9}.zm-canvas-menu-item:active:not(:disabled){background:#e2e8f0}.zm-canvas-menu-item:disabled{color:#94a3b8;cursor:not-allowed}.zm-canvas-menu-item-has-submenu{box-sizing:border-box;position:relative}.zm-canvas-menu-item-has-submenu.is-open,.zm-canvas-menu-item-has-submenu:hover{background:#f1f5f9}.zm-canvas-menu-caret{color:#94a3b8;flex-shrink:0;align-items:center;margin-left:auto;display:inline-flex}.zm-canvas-menu-divider{background:#e2e8f0;height:1px;margin:2px 4px}.zm-canvas-submenu{z-index:41;box-sizing:border-box;color:#1e293b;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;gap:2px;min-width:160px;padding:4px;font-size:13px;animation:.12s ease-out zm-submenu-in;display:flex;position:fixed;box-shadow:0 8px 24px #0f172a24}@keyframes zm-submenu-in{0%{opacity:0;transform:translate(-4px)}to{opacity:1;transform:translate(0)}}.zm-drawer{background:#fafbfc;border-right:1px solid #e8eaed;flex-direction:column;flex-shrink:0;height:100%;display:flex;overflow:hidden}.zm-drawer--canvas{z-index:40;height:100%;position:absolute;top:0;bottom:0;box-shadow:0 12px 40px #0f172a14,0 2px 8px #0f172a0a}.zm-drawer--left.zm-drawer--canvas{border-right:1px solid #e8eaed;left:0}.zm-drawer--right.zm-drawer--canvas{border-left:1px solid #e8eaed;border-right:none;right:0}.zm-drawer-canvas-backdrop{z-index:39;cursor:pointer;-webkit-backdrop-filter:blur(2px);background:#0f172a2e;position:absolute;inset:0}.zm-drawer-enter-active,.zm-drawer-leave-active{transition:width .22s,opacity .15s}.zm-drawer-enter-from,.zm-drawer-leave-to{opacity:0;border-right:none;width:0!important}.zm-slide-left-enter-active,.zm-slide-left-leave-active,.zm-slide-right-enter-active,.zm-slide-right-leave-active{transition:transform .22s,opacity .18s}.zm-slide-left-enter-from,.zm-slide-left-leave-to{opacity:0;transform:translate(-100%)}.zm-slide-right-enter-from,.zm-slide-right-leave-to{opacity:0;transform:translate(100%)}.zm-fade-enter-active,.zm-fade-leave-active{transition:opacity .18s}.zm-fade-enter-from,.zm-fade-leave-to{opacity:0}.zm-drawer--right{border-left:1px solid #e8eaed;border-right:none}.zm-drawer-header{background:#fff;border-bottom:1px solid #f0f1f3;flex-shrink:0;align-items:center;gap:8px;padding:16px 20px;display:flex}.zm-drawer-title{color:#0f172a;letter-spacing:-.01em;flex:1;margin:0;font-size:14px;font-weight:600}.zm-drawer-close{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;transition:background .12s,color .12s;display:flex}.zm-drawer-close:hover{color:#1e293b;background:#f1f5f9}.zm-drawer-body{flex:1;min-height:0;overflow:auto}.zm-outline-root{flex-direction:column;height:100%;display:flex}.zm-outline-search{flex-shrink:0;align-items:center;gap:6px;padding:8px 10px 4px;display:flex}.zm-outline-search-icon{color:#94a3b8;flex-shrink:0}.zm-outline-search-input{min-width:0;font:inherit;color:#1e293b;box-sizing:border-box;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;outline:none;flex:1;padding:5px 10px;font-size:12px;transition:border-color .12s,box-shadow .12s}.zm-outline-search-input:focus{background:#fff;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.zm-outline-search-input::placeholder{color:#94a3b8;font-size:11px}.zm-outline-search-count{color:#64748b;white-space:nowrap;text-align:center;flex-shrink:0;min-width:36px;font-size:11px}.zm-outline-search-empty{color:#ef4444}.zm-outline-search-clear{cursor:pointer;color:#94a3b8;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;font-size:16px;line-height:1;display:flex}.zm-outline-search-clear:hover{color:#1e293b;background:#f1f5f9}.zm-outline-actions{flex-shrink:0;justify-content:flex-end;padding:4px 10px;display:flex}.zm-outline-action-btn{color:#64748b;cursor:pointer;background:#f8fafc;border:1px solid #e2e8f0;border-radius:5px;align-items:center;gap:5px;padding:3px 8px;font-family:inherit;font-size:11px;transition:all .1s;display:inline-flex}.zm-outline-action-btn:hover{color:#1e293b;background:#f1f5f9;border-color:#cbd5e1}.zm-outline-action-btn.is-success{color:#047857;background:#ecfdf5;border-color:#a7f3d0}.zm-outline{flex:1;min-height:0;margin:0;padding:4px 0 8px;font-size:13px;list-style:none;overflow:auto}.zm-outline-row{cursor:grab;color:#334155;-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;border-radius:4px;align-items:center;gap:6px;margin:0 6px;padding-top:4px;padding-bottom:4px;padding-right:6px;transition:background .1s;display:flex;position:relative;overflow:hidden}.zm-outline-row:active{cursor:grabbing}.zm-outline-row:hover{background:#f1f5f9}.zm-outline-row.is-root{color:#0f172a;font-weight:600}.zm-outline-row.is-selected{color:#1d4ed8;background:#eff6ff}.zm-outline-row.is-selected .zm-outline-toggle,.zm-outline-row.is-selected .zm-outline-dot,.zm-outline-row.is-selected .zm-outline-row-copy,.zm-outline-row.is-selected .zm-outline-row-action{color:#1d4ed8}.zm-outline-row.is-search-hit{background:#fffbeb;box-shadow:inset 3px 0 #f59e0b}.zm-outline-row.is-search-current{background:#fef3c7;box-shadow:inset 3px 0 #f97316,inset 0 0 0 1px #f973164d}.zm-outline-row.is-drag-over-before:before,.zm-outline-row.is-drag-over-after:after{content:"";pointer-events:none;background:#3b82f6;border-radius:1px;height:2px;position:absolute;left:6px;right:6px}.zm-outline-row.is-drag-over-before:before{top:0}.zm-outline-row.is-drag-over-after:after{bottom:0}.zm-outline-row.is-drag-over-child{outline-offset:-2px;outline:2px solid #3b82f6;background:#dbeafe!important}.zm-outline-toggle{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;padding:0;display:flex}.zm-outline-toggle:hover{color:#475569;background:#e2e8f0}.zm-outline-dot{background:#cbd5e1;border-radius:50%;flex-shrink:0;width:4px;height:4px;margin:0 6px}.zm-outline-index{color:#94a3b8;font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;flex-shrink:0;min-width:22px;font-size:11px}.zm-outline-text{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.zm-outline-input{font:inherit;color:inherit;background:#fff;border:1px solid #3b82f6;border-radius:3px;outline:none;flex:1;margin:-2px 0;padding:1px 4px;font-size:13px}.zm-outline-row-action{color:#94a3b8;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;padding:0;transition:background .1s,color .1s,border-color .1s;display:none}.zm-outline-row:hover .zm-outline-row-action,.zm-outline-row.is-selected .zm-outline-row-action{display:inline-flex}.zm-outline-row-action:hover{color:#1d4ed8;background:#dbeafe;border-color:#bfdbfe}.zm-outline-row-action img{filter:invert(38%)sepia(94%)saturate(2417%)hue-rotate(229deg)brightness(91%)contrast(91%)}.zm-outline-row-copy{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;padding:0;transition:background .1s,color .1s;display:none}.zm-outline-row:hover .zm-outline-row-copy,.zm-outline-row.is-selected .zm-outline-row-copy{display:flex}.zm-outline-row-copy:hover{color:#475569;background:#e2e8f0}.zm-outline-row-copy.is-success{color:#047857;background:#ecfdf5;display:flex}.zm-jtv-root{color:#334155;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;line-height:1.6}.zm-jtv-header{cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:3px;align-items:center;gap:4px;padding-right:6px;display:flex}.zm-jtv-header:hover{background:#f1f5f9}.zm-jtv-toggle{text-align:center;color:#94a3b8;flex-shrink:0;width:12px;font-size:9px;display:inline-block}.zm-jtv-toggle.is-leaf{color:#cbd5e1}.zm-jtv-key{color:#1d4ed8;font-weight:500}.zm-jtv-colon{color:#94a3b8;margin-right:4px}.zm-jtv-size{color:#64748b;font-style:italic}.zm-jtv-bracket,.zm-jtv-brace{color:#94a3b8;margin-left:4px;font-weight:500}.zm-jtv-footer{color:#94a3b8;font-weight:500}.zm-jtv-leaf{border-radius:3px;flex-wrap:wrap;align-items:center;gap:4px;padding-right:6px;display:flex}.zm-jtv-leaf:hover{background:#f8fafc}.zm-jtv-value{word-break:break-all}.zm-jtv-string{color:#047857}.zm-jtv-number{color:#b45309}.zm-jtv-boolean{color:#7c3aed;font-weight:500}.zm-jtv-null,.zm-jtv-undefined{color:#94a3b8;font-style:italic}.zm-jtv-thumb-wrap{flex-shrink:0;align-items:center;gap:4px;margin-left:6px;display:inline-flex}.zm-jtv-thumb{object-fit:contain;background:#fff;border:1px solid #e2e8f0;border-radius:3px;max-width:48px;max-height:32px}.zm-jtv-thumb-link{color:#3b82f6;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:10px;text-decoration:none}.zm-jtv-thumb-link:hover{text-decoration:underline}.zm-jtv-leaf mark,.zm-jtv-key mark{color:#422006;background:#fef08a;border-radius:2px;padding:0 1px}.zm-data-panel{background:#fff;flex-direction:column;height:100%;display:flex}.zm-data-header{background:#f8fafc;border-bottom:1px solid #f1f5f9;flex-shrink:0;align-items:center;padding:8px 12px 6px;display:flex}.zm-data-title{flex:1;align-items:baseline;gap:8px;min-width:0;display:flex}.zm-data-title-text{color:#1e293b;letter-spacing:.02em;font-size:12px;font-weight:600}.zm-data-title-meta{color:#94a3b8;font-variant-numeric:tabular-nums;font-size:11px}.zm-data-toolbar{background:#fff;border-bottom:1px solid #f1f5f9;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:4px;padding:6px 10px;display:flex}.zm-data-btn{color:#475569;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:6px;align-items:center;gap:4px;padding:4px 8px;font-family:inherit;font-size:12px;transition:all .1s;display:inline-flex}.zm-data-btn:hover{color:#1e293b;background:#f1f5f9;border-color:#cbd5e1}.zm-data-btn.is-icon{padding:4px 8px}.zm-data-btn.is-active{color:#1d4ed8;background:#eff6ff;border-color:#bfdbfe}.zm-data-btn.is-success{color:#047857;background:#ecfdf5;border-color:#a7f3d0}.zm-data-btn.is-primary{color:#fff;background:#3b82f6;border-color:#3b82f6}.zm-data-btn.is-primary:hover{color:#fff;background:#2563eb;border-color:#2563eb}.zm-data-btn:disabled{opacity:.4;cursor:not-allowed}.zm-data-btn-label{font-size:11px}.zm-data-toolbar-spacer{flex:1;min-width:4px}.zm-data-search{background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;flex:0 160px;align-items:center;gap:4px;min-width:0;padding:3px 6px;transition:all .1s;display:flex}.zm-data-search:focus-within,.zm-data-search.is-active{background:#fff;border-color:#3b82f6}.zm-data-search svg{color:#94a3b8;flex-shrink:0}.zm-data-search input{min-width:0;font:inherit;color:#1e293b;background:0 0;border:none;outline:none;flex:1;padding:0;font-size:11px}.zm-data-search input::placeholder{color:#94a3b8}.zm-data-search-clear{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:2px;padding:0 2px;font-size:14px;line-height:1}.zm-data-search-clear:hover{color:#1e293b;background:#e2e8f0}.zm-data-paste{background:#f8fafc;border-bottom:1px solid #f1f5f9;flex-shrink:0;padding:8px 10px 10px}.zm-data-tabs{gap:4px;margin-bottom:6px;display:flex}.zm-data-tab{font:inherit;color:#475569;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:4px;padding:2px 8px;font-size:11px;transition:all .1s}.zm-data-tab:hover{background:#f1f5f9}.zm-data-tab.is-active{color:#fff;background:#1e293b;border-color:#1e293b}.zm-data-paste textarea{resize:vertical;box-sizing:border-box;background:#fff;border:1px solid #e2e8f0;border-radius:4px;width:100%;min-height:60px;max-height:160px;padding:6px 8px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.4}.zm-data-paste textarea:focus{border-color:#3b82f6;outline:none}.zm-data-paste-actions{gap:4px;margin-top:6px;display:flex}.zm-data-error{color:#dc2626;margin-top:6px;font-size:11px}.zm-data-tree{background:#fff;flex:1;padding:8px 4px 8px 6px;overflow:auto}.zm-data-footer{color:#94a3b8;background:#f8fafc;border-top:1px solid #f1f5f9;flex-shrink:0;padding:6px 12px;font-size:10px;line-height:1.5}.zm-data-footer-hint code{color:#475569;background:#fff;border:1px solid #e2e8f0;border-radius:3px;margin:0 1px;padding:0 3px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:10px}.zm-md-panel{background:#f8fafc;flex-direction:column;height:100%;display:flex}.zm-md-toolbar{background:#f8fafc;border-bottom:1px solid #f1f5f9;flex-shrink:0;align-items:center;gap:6px;padding:8px 10px;display:flex}.zm-md-spacer{flex:1}.zm-md-btn{color:#475569;cursor:pointer;white-space:nowrap;background:#fff;border:1px solid #e2e8f0;border-radius:6px;align-items:center;gap:5px;padding:4px 10px;font-family:inherit;font-size:12px;transition:all .1s;display:inline-flex}.zm-md-btn:hover:not(:disabled){color:#1e293b;background:#f1f5f9;border-color:#cbd5e1}.zm-md-btn:disabled{opacity:.4;cursor:not-allowed}.zm-md-btn.is-primary{color:#fff;background:#3b82f6;border-color:#3b82f6}.zm-md-btn.is-primary:hover:not(:disabled){color:#fff;background:#2563eb;border-color:#2563eb}.zm-md-error{color:#dc2626;background:#fef2f2;border-bottom:1px solid #fee2e2;flex-shrink:0;padding:6px 10px;font-size:11px}.zm-md-split,.zm-md-edit,.zm-md-preview{flex-direction:column;flex:1;min-height:0;display:flex}.zm-md-pane-header{color:#475569;letter-spacing:.02em;background:#f1f5f9;border-bottom:1px solid #e2e8f0;flex-shrink:0;align-items:center;gap:8px;padding:6px 10px;font-size:11px;font-weight:600;display:flex}.zm-md-hint{color:#94a3b8;margin-left:auto;font-size:10px;font-weight:400}.zm-md-textarea{color:#1e293b;resize:none;box-sizing:border-box;background:#fff;border:none;border-bottom:1px solid #e2e8f0;outline:none;flex:1;width:100%;padding:10px 12px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;line-height:1.5}.zm-md-textarea:focus{background:#fafbfc}.zm-md-preview-body{background:#fff;border-bottom:1px solid #e2e8f0;flex:1;min-height:0;position:relative}.zm-md-footer{background:#f8fafc;border-top:1px solid #e2e8f0;flex-shrink:0;justify-content:flex-end;padding:8px 10px;display:flex}.zm-settings-panel[data-v-89c2361e]{flex-direction:column;gap:14px;padding:16px 16px 24px;display:flex}.zm-settings-section[data-v-89c2361e]{background:#fff;border:1px solid #eef0f3;border-radius:12px;padding:16px}.zm-settings-section--actions[data-v-89c2361e]{background:0 0;border:none;padding:0}.zm-settings-section-title[data-v-89c2361e]{color:#0f172a;letter-spacing:-.01em;align-items:baseline;gap:6px;margin:0 0 14px;font-size:13px;font-weight:600;display:flex}.zm-settings-section-sub[data-v-89c2361e]{color:#64748b;text-overflow:ellipsis;white-space:nowrap;max-width:180px;font-size:11px;font-weight:500;overflow:hidden}.zm-settings-field[data-v-89c2361e]{color:#1e293b;justify-content:space-between;align-items:center;gap:12px;min-height:32px;margin:10px 0;font-size:13px;display:flex}.zm-settings-label[data-v-89c2361e]{color:#334155;flex:1;font-weight:500}.zm-settings-sub[data-v-89c2361e]{color:#64748b;margin-left:4px;font-family:ui-monospace,monospace;font-size:11px;font-weight:400}.zm-settings-value-tag[data-v-89c2361e]{color:#64748b;white-space:nowrap;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:2px 8px;font-family:ui-monospace,monospace;font-size:11px}.zm-settings-number[data-v-89c2361e]{color:#0f172a;text-align:right;-moz-appearance:textfield;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;width:64px;padding:5px 10px;font-size:12px;transition:border-color .12s,box-shadow .12s}.zm-settings-number[data-v-89c2361e]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.zm-settings-number[data-v-89c2361e]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.zm-settings-number[data-v-89c2361e]:focus{background:#fff;border-color:#3b82f6;outline:none;box-shadow:0 0 0 3px #3b82f61a}.zm-select[data-v-89c2361e]{color:#1e293b;cursor:pointer;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;outline:none;min-width:100px;padding:5px 10px;font-family:inherit;font-size:12px;transition:border-color .12s,box-shadow .12s}.zm-select[data-v-89c2361e]:focus,.zm-select[data-v-89c2361e]:hover{border-color:#3b82f6}.zm-select[data-v-89c2361e]:focus{background:#fff;box-shadow:0 0 0 3px #3b82f61a}.zm-settings-hint[data-v-89c2361e]{color:#94a3b8;margin:6px 0 0;font-size:11px;line-height:1.5}.zm-settings-divider[data-v-89c2361e]{background:#f1f5f9;height:1px;margin:12px 0}.zm-slider[data-v-89c2361e]{align-items:center;height:22px;margin:2px 0 6px;display:flex;position:relative}.zm-slider-track[data-v-89c2361e]{pointer-events:none;background:#e2e8f0;border-radius:999px;height:4px;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}.zm-slider input[type=range][data-v-89c2361e]{appearance:none;cursor:pointer;z-index:1;background:0 0;width:100%;height:22px;margin:0;position:relative}.zm-slider input[type=range][data-v-89c2361e]::-webkit-slider-runnable-track{appearance:none;background:0 0;border-radius:999px;height:4px}.zm-slider input[type=range][data-v-89c2361e]::-moz-range-track{background:0 0;border-radius:999px;height:4px}.zm-slider input[type=range][data-v-89c2361e]::-webkit-slider-thumb{appearance:none;cursor:pointer;background:#fff;border:2px solid #3b82f6;border-radius:50%;width:16px;height:16px;margin-top:-6px;transition:border-color .12s,box-shadow .12s;box-shadow:0 1px 4px #3b82f633}.zm-slider input[type=range][data-v-89c2361e]::-webkit-slider-thumb:hover{border-color:#2563eb;box-shadow:0 2px 8px #3b82f64d}.zm-slider input[type=range][data-v-89c2361e]::-moz-range-thumb{cursor:pointer;background:#fff;border:2px solid #3b82f6;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 4px #3b82f633}.zm-toggle[data-v-89c2361e]{cursor:pointer;background:#cbd5e1;border:none;border-radius:999px;flex-shrink:0;width:38px;height:22px;padding:0;transition:background .15s;position:relative}.zm-toggle.is-on[data-v-89c2361e]{background:#3b82f6}.zm-toggle-knob[data-v-89c2361e]{background:#fff;border-radius:50%;width:18px;height:18px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #0000002e}.zm-toggle.is-on .zm-toggle-knob[data-v-89c2361e]{transform:translate(16px)}.zm-swatch-row[data-v-89c2361e]{flex-wrap:wrap;gap:5px;margin:4px 0 10px;display:flex}.zm-swatch-row--compact[data-v-89c2361e]{gap:4px;margin-bottom:6px}.zm-swatch[data-v-89c2361e]{cursor:pointer;border:1.5px solid #e2e8f0;border-radius:7px;flex-shrink:0;width:22px;height:22px;padding:0;transition:transform .1s,border-color .12s,box-shadow .12s}.zm-swatch[data-v-89c2361e]:hover{border-color:#94a3b8;transform:scale(1.12)}.zm-swatch.is-active[data-v-89c2361e]{border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f626}.zm-swatch.is-reset[data-v-89c2361e]{color:#94a3b8;background:#fff;justify-content:center;align-items:center;font-size:12px;line-height:1;display:flex}.zm-swatch.is-reset[data-v-89c2361e]:hover{color:#ef4444;border-color:#fca5a5}.zm-swatch--custom[data-v-89c2361e]{background:conic-gradient(#f87171,#fbbf24,#34d399,#22d3ee,#818cf8,#c084fc,#f87171);border:1.5px solid #e2e8f0;position:relative;overflow:hidden}.zm-swatch--custom input[type=color][data-v-89c2361e]{opacity:0;cursor:pointer;border:none;width:100%;height:100%;padding:0;position:absolute;inset:0}.zm-color-input-wrap[data-v-89c2361e]{cursor:pointer;align-items:center;gap:6px;display:inline-flex}.zm-color-input[data-v-89c2361e]{cursor:pointer;background:0 0;border:1.5px solid #e2e8f0;border-radius:7px;width:28px;height:22px;padding:0}.zm-color-input-text[data-v-89c2361e]{color:#64748b;font-family:ui-monospace,monospace;font-size:11px}.zm-settings-field.zm-line-style-field[data-v-89c2361e]{flex-direction:column;align-items:stretch;gap:6px}.zm-line-style-field .zm-settings-label[data-v-89c2361e]{flex:none}.zm-line-style-group[data-v-89c2361e]{grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:4px;width:100%;display:grid}.zm-line-style-btn[data-v-89c2361e]{cursor:pointer;color:#94a3b8;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;align-items:center;gap:2px;padding:5px 4px;font-family:inherit;transition:all .12s;display:inline-flex}.zm-line-style-btn[data-v-89c2361e]:hover{color:#475569;background:#fff;border-color:#cbd5e1}.zm-line-style-btn.is-on[data-v-89c2361e]{color:#3b82f6;background:#eff6ff;border-color:#3b82f6}.zm-line-style-label[data-v-89c2361e]{font-size:11px;font-weight:500}.zm-settings-preview[data-v-89c2361e]{background:#f8fafc;border:1px solid #eef0f3;border-radius:10px;margin-top:12px;padding:10px 10px 8px}.zm-settings-preview svg[data-v-89c2361e]{display:block}.zm-settings-preview-labels[data-v-89c2361e]{color:#94a3b8;justify-content:space-between;margin-top:4px;padding:0 2px;font-size:10px;display:flex}.zm-palette-picker[data-v-89c2361e]{background:#f8fafc;border:1px solid #eef0f3;border-radius:10px;margin:8px 0;padding:12px}.zm-palette-list[data-v-89c2361e]{flex-direction:column;gap:6px;margin-top:4px;display:flex}.zm-palette-option[data-v-89c2361e]{cursor:pointer;text-align:left;background:#fff;border:1px solid #e2e8f0;border-radius:8px;align-items:center;gap:8px;width:100%;padding:7px 10px;transition:border-color .15s,background .15s;display:flex}.zm-palette-option[data-v-89c2361e]:hover{background:#f8fafc;border-color:#cbd5e1}.zm-palette-option.is-active[data-v-89c2361e]{background:#eff6ff;border-color:#3b82f6;box-shadow:0 0 0 1px #3b82f6}.zm-palette-option-name[data-v-89c2361e]{color:#1e293b;flex-shrink:0;min-width:36px;font-size:12px;font-weight:500}.zm-palette-option-swatches[data-v-89c2361e]{border-radius:3px;flex:1;gap:2px;height:14px;display:flex;overflow:hidden}.zm-palette-option-swatch[data-v-89c2361e]{flex:1;min-width:0;height:100%}.zm-palette-custom-editor[data-v-89c2361e]{margin-top:8px}.zm-palette-textarea[data-v-89c2361e]{color:#0f172a;resize:vertical;box-sizing:border-box;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;width:100%;min-height:36px;padding:7px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;transition:border-color .1s,box-shadow .1s}.zm-palette-textarea[data-v-89c2361e]:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.zm-palette-custom-actions[data-v-89c2361e]{gap:6px;margin-top:6px;display:flex}.zm-palette-add[data-v-89c2361e]{color:#3b82f6;cursor:pointer;background:#fff;border:1px dashed #bfdbfe;border-radius:8px;width:100%;margin-top:8px;padding:7px 8px;font-family:inherit;font-size:12px;font-weight:500;transition:all .1s}.zm-palette-add[data-v-89c2361e]:hover{background:#eff6ff;border-color:#3b82f6}.zm-data-btn[data-v-89c2361e]{color:#475569;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:8px;align-items:center;gap:5px;padding:6px 12px;font-family:inherit;font-size:12px;transition:all .1s;display:inline-flex}.zm-data-btn[data-v-89c2361e]:hover{color:#1e293b;background:#f1f5f9;border-color:#cbd5e1}.zm-data-btn.is-primary[data-v-89c2361e]{color:#fff;background:#3b82f6;border-color:#3b82f6}.zm-data-btn.is-primary[data-v-89c2361e]:hover{color:#fff;background:#2563eb;border-color:#2563eb}.zm-settings-reset[data-v-89c2361e]{color:#64748b;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:10px;width:100%;padding:10px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .1s}.zm-settings-reset[data-v-89c2361e]:hover{color:#ef4444;background:#fef2f2;border-color:#fecaca}.zm-note-panel{background:#f8fafc;flex-direction:column;gap:10px;height:100%;padding:12px 12px 16px;display:flex}.zm-note-empty{color:#64748b;padding:20px 12px;font-size:13px;line-height:1.6}.zm-note-empty p{margin:0 0 6px}.zm-note-hint{color:#94a3b8;font-size:12px}.zm-note-header{background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;flex-shrink:0;gap:4px;padding:10px 12px;display:flex}.zm-note-title-row{align-items:baseline;gap:8px;min-width:0;display:flex}.zm-note-label{text-transform:uppercase;letter-spacing:.04em;color:#94a3b8;flex-shrink:0;font-size:10px;font-weight:600}.zm-note-name{color:#1e293b;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;font-weight:600;overflow:hidden}.zm-note-meta{color:#94a3b8;font-size:11px}.zm-note-scroll{flex-direction:column;flex:1;gap:10px;min-height:0;padding-right:2px;display:flex;overflow-y:auto}.zm-note-section{background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.zm-note-section-head{align-items:center;gap:8px;min-width:0;display:flex}.zm-note-section-title{text-transform:uppercase;letter-spacing:.04em;color:#64748b;flex:1;min-width:0;font-size:10px;font-weight:600}.zm-note-section-hint{color:#94a3b8;font-size:10px}.zm-note-section-tag{color:#475569;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:1px 6px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:10px;line-height:1.4}.zm-note-section-actions{justify-content:flex-end;display:flex}.zm-note-textarea{width:100%;min-height:120px;font:inherit;color:#1e293b;resize:none;box-sizing:border-box;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;outline:none;padding:10px 12px;font-family:inherit;font-size:13px;line-height:20px;overflow:hidden}.zm-note-textarea:focus{background:#fff;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.zm-note-textarea:disabled{color:#94a3b8;cursor:not-allowed;background:#f8fafc}.zm-note-textarea::placeholder{color:#94a3b8;white-space:pre-line}.zm-note-split{flex-direction:column;gap:6px;display:flex}.zm-note-preview-toggle{font:inherit;color:#1d4ed8;cursor:pointer;background:0 0;border:1px solid #bfdbfe;border-radius:999px;flex-shrink:0;padding:1px 8px;font-size:10px;transition:all .1s}.zm-note-preview-toggle:hover{background:#eff6ff;border-color:#93c5fd}.zm-note-preview{color:#1e293b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;max-height:240px;padding:8px 12px;font-size:13px;line-height:1.6;overflow:auto}.zm-note-preview-hint{color:#94a3b8;font-size:12px;font-style:italic}.zm-note-preview-body h1,.zm-note-preview-body h2,.zm-note-preview-body h3{color:#0f172a;margin:8px 0 4px;font-weight:600}.zm-note-preview-body h1{font-size:16px}.zm-note-preview-body h2{font-size:14px}.zm-note-preview-body h3{font-size:13px}.zm-note-preview-body h4,.zm-note-preview-body h5,.zm-note-preview-body h6{color:#334155;margin:6px 0 4px;font-size:12px;font-weight:600}.zm-note-preview-body p{margin:0 0 6px}.zm-note-preview-body p:last-child{margin-bottom:0}.zm-note-preview-body ul,.zm-note-preview-body ol{margin:0 0 6px;padding-left:20px}.zm-note-preview-body li{margin:0 0 2px}.zm-note-preview-body blockquote{color:#475569;background:#f1f5f9;border-left:3px solid #cbd5e1;margin:0 0 6px;padding:4px 10px}.zm-note-preview-body code{color:#be185d;background:#f1f5f9;border-radius:3px;padding:1px 4px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:12px}.zm-note-preview-body pre{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:6px;margin:0 0 6px;padding:8px 10px;overflow:auto}.zm-note-preview-body pre code{color:inherit;background:0 0;padding:0;font-size:12px;line-height:1.55}.zm-note-preview-body a{color:#1d4ed8;-webkit-text-decoration:underline #bfdbfe;text-decoration:underline #bfdbfe}.zm-note-preview-body a:hover{text-decoration-color:#1d4ed8}.zm-note-preview-body table{border-collapse:collapse;margin:0 0 6px;font-size:12px}.zm-note-preview-body th,.zm-note-preview-body td{text-align:left;border:1px solid #e2e8f0;padding:4px 8px}.zm-note-preview-body th{background:#f1f5f9;font-weight:600}.zm-note-preview-body hr{border:none;border-top:1px solid #e2e8f0;margin:8px 0}.zm-note-preview-body img{border-radius:4px;max-width:100%;max-height:200px;display:block}.zm-note-input{width:100%;font:inherit;color:#1e293b;box-sizing:border-box;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;outline:none;padding:7px 10px;font-family:inherit;font-size:12px;line-height:1.5}.zm-note-input:focus{background:#fff;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.zm-note-input:disabled{color:#94a3b8;cursor:not-allowed;background:#f8fafc}.zm-note-input-code{resize:none;white-space:pre;min-height:80px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:11px;line-height:20px;overflow:hidden}.zm-note-add-row{flex-wrap:wrap;gap:6px;padding:2px 2px 0;display:flex}.zm-note-add-chip{font:inherit;color:#64748b;cursor:pointer;background:#fff;border:1px dashed #cbd5e1;border-radius:999px;padding:3px 10px;font-size:11px;transition:all .1s}.zm-note-add-chip:hover{color:#1d4ed8;background:#eff6ff;border-color:#93c5fd}.zm-note-link-chip{color:#1d4ed8;word-break:break-all;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:#eff6ff;border:1px solid #bfdbfe;border-radius:6px;max-width:100%;padding:6px 10px;font-size:12px;text-decoration:none;transition:background .1s;display:inline-block;overflow:hidden}.zm-note-link-chip:hover{background:#dbeafe}.zm-note-image{object-fit:contain;background:#f1f5f9;border-radius:6px;max-width:100%;max-height:240px;margin:0 auto;display:block}.zm-note-code{color:#24292e;white-space:pre-wrap;word-break:break-word;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:8px;max-height:320px;margin:0;padding:10px 12px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:12px;line-height:1.55;overflow:auto;box-shadow:0 1px 3px #0f172a14}.zm-note-code code{font:inherit;color:inherit;background:0 0;padding:0}.zm-note-table{border-collapse:separate;border-spacing:0;color:#1e293b;table-layout:auto;background:#fffbeb;border:1px solid #fcd34d;border-radius:8px;width:100%;font-size:12px;overflow:hidden;box-shadow:0 1px 3px #92400e14}.zm-note-table th{text-align:left;white-space:nowrap;background:#fde68a;border-right:1px solid #fcd34d;padding:6px 10px;font-weight:600}.zm-note-table th:last-child{border-right:none}.zm-note-table td{text-align:left;vertical-align:top;word-break:break-word;background:#fffbeb;border-top:1px solid #fde68a;border-right:1px solid #fde68a;padding:6px 10px}.zm-note-table tr:last-child td{border-bottom:none}.zm-note-table td:last-child{border-right:none}.zm-note-action-btn{color:#fff;cursor:pointer;background:#3b82f6;border:1px solid #3b82f6;border-radius:6px;padding:4px 10px;font-family:inherit;font-size:12px;transition:all .1s}.zm-note-action-btn.is-danger{color:#b91c1c;background:#fff;border-color:#fca5a5}.zm-note-action-btn.is-danger:hover{background:#fee2e2;border-color:#f87171}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}.zm-mindmap{-webkit-user-select:none;user-select:none;width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;position:relative;overflow:hidden}.zm-canvas{cursor:grab;position:absolute;inset:0}.zm-canvas:active{cursor:grabbing}.zm-world{transform-origin:0 0;position:absolute;top:0;left:0}.zm-svg-layer{pointer-events:none;position:absolute;overflow:visible}.zm-marquee{pointer-events:none;z-index:5;background:#3b82f614;border:1px dashed #3b82f6;position:absolute}.zm-svg{pointer-events:none;shape-rendering:geometricprecision;position:absolute;top:0;left:0;overflow:visible}.zm-node{box-sizing:border-box;cursor:default;white-space:nowrap;z-index:1;border:1px solid #0000;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;padding:.4em;line-height:1.2;transition:box-shadow .15s;display:flex;position:absolute}.zm-node:hover{z-index:2;box-shadow:0 4px 12px #0000001a}.zm-node:not(.is-root):not(.is-editing){cursor:grab}.zm-node.is-root{cursor:default}.zm-node.is-dragging-source{opacity:.4;cursor:grabbing}.zm-node.is-drop-target{outline-offset:2px;outline:2px solid #4caf50;transition:outline-color .1s}.zm-node.is-drop-target-before{box-shadow:0 -3px #3b82f6,0 1px 2px #0000000f}.zm-node.is-drop-target-after{box-shadow:0 3px #3b82f6,0 1px 2px #0000000f}.zm-drop-indicator{pointer-events:none;z-index:9999;background:#3b82f6;border-radius:2px;position:absolute;box-shadow:0 0 6px #3b82f680}.zm-drag-ghost{pointer-events:none;z-index:10000;color:#333;white-space:nowrap;will-change:transform,left,top;background:#fff;border:1px solid #4caf50;border-radius:4px;align-items:center;gap:6px;max-width:200px;padding:4px 10px;font-size:13px;display:flex;position:absolute;box-shadow:0 4px 12px #00000026}.zm-drag-ghost-text{text-overflow:ellipsis;min-width:0;overflow:hidden}.zm-drag-ghost-count{color:#fff;background:#4caf50;border-radius:8px;flex:none;padding:1px 6px;font-size:11px;font-weight:600;line-height:1.5}body.is-dragging{-webkit-user-select:none;user-select:none;cursor:grabbing!important}.zm-node.is-root{font-weight:600}.zm-node.is-selected{outline-offset:2px;z-index:3;outline:2px solid #3b82f6}.zm-text{justify-content:center;align-items:center;gap:4px;max-width:200px;min-height:1.2em;display:flex;overflow:hidden}.zm-text-label{pointer-events:none;white-space:pre-line;flex-shrink:1;min-width:0;overflow:hidden}.zm-input{color:inherit;font:inherit;text-align:center;resize:none;background:0 0;border:none;outline:none;width:100%;min-width:40px;padding:0;line-height:1.2;overflow:hidden}.zm-tooltip{color:#f8fafc;pointer-events:none;z-index:1000;white-space:normal;word-break:break-word;background:#0f172af0;border-radius:6px;max-width:240px;padding:6px 10px;font-size:12px;line-height:1.4;animation:.12s ease-out zm-tooltip-in;position:absolute;transform:translate(-50%,-100%);box-shadow:0 4px 14px #0000002e}.zm-tooltip.is-below{transform:translate(-50%)}.zm-tooltip:after{content:"";border:4px solid #0000;border-top-color:#0f172af0;position:absolute;top:100%;left:50%;transform:translate(-50%)}.zm-tooltip.is-below:after{border-top-color:#0000;border-bottom-color:#0f172af0;top:auto;bottom:100%}@keyframes zm-tooltip-in{0%{opacity:0;transform:translate(-50%,calc(4px - 100%))}to{opacity:1;transform:translate(-50%,-100%)}}.zm-tooltip.is-below{animation-name:zm-tooltip-in-below}@keyframes zm-tooltip-in-below{0%{opacity:0;transform:translate(-50%,-4px)}to{opacity:1;transform:translate(-50%)}}.zm-rich{text-align:left;width:max-content;color:inherit;border-radius:4px;margin-top:6px;padding:0 .8em .2em;font-size:.78em;line-height:1.35;overflow:visible}.zm-rich-above{margin:0 0 2px}.zm-rich-no-overflow{max-height:none;overflow:visible}.zm-rich-code{white-space:pre-wrap;word-break:break-word;background:#fffffff2;border:1px solid;border-radius:6px;margin:0;padding:6px 14px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.92em}.zm-rich-list{margin:0;padding-left:1.2em;list-style:outside}.zm-rich-list li{margin:1px 0}.zm-rich-table{border-collapse:separate;border-spacing:0;background:#fffffff2;border:1px solid;border-radius:6px;width:100%;font-size:.92em;overflow:hidden}.zm-rich-table th{text-align:left;opacity:.9;background:#ffffffbf;border-bottom:1px solid;border-right:1px solid;padding:3px 10px;font-weight:600}.zm-rich-table th:last-child{border-right:none}.zm-rich-table td{opacity:.9;border-top:1px solid;border-right:1px solid;padding:3px 10px}.zm-rich-table tr:last-child td{border-bottom:none}.zm-rich-table td:last-child{border-right:none}.zm-rich-edit{width:100%;min-height:90px;color:inherit;resize:vertical;white-space:pre;box-sizing:border-box;background:#fff9;border:1px solid;border-radius:3px;outline:none;margin:0;padding:4px 6px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.92em;line-height:1.4}.zm-rich-edit:focus{border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f626}.zm-rich-paragraph{white-space:pre-wrap;word-break:break-word}.zm-btn{color:#fff;cursor:pointer;opacity:0;z-index:4;background:#3b82f6;border:none;border-radius:50%;justify-content:center;align-items:center;width:18px;height:18px;transition:opacity .15s,transform .15s;display:flex;position:absolute}.zm-node:hover .zm-btn,.zm-node.is-selected .zm-btn{opacity:1}.zm-btn:hover{transform:scale(1.15)}.zm-collapse{background:#fff;border:none;border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;display:flex;top:50%;right:-8px;transform:translateY(-50%);box-shadow:0 1px 3px #0f172a33}.zm-collapse-bar{background:var(--zm-collapse-color,#64748b);border-radius:1px;width:7px;height:2px;display:block}.zm-collapse.is-on-left{left:-8px;right:auto}.zm-collapse:hover{background:#fff;transform:translateY(-50%)scale(1.2)}.zm-collapse-badge{color:#fff;text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none;z-index:2;border-radius:5px;min-width:18px;height:18px;padding:0 5px;font-size:11px;font-weight:600;line-height:18px;transition:filter .1s;position:absolute;top:50%;left:calc(100% + 8px);transform:translateY(-50%);box-shadow:0 1px 2px #00000026}.zm-collapse-badge.is-on-left{left:auto;right:calc(100% + 8px)}.zm-collapse-badge:hover{filter:brightness(.9)}.zm-node.has-image{white-space:normal;flex-direction:column;gap:6px;padding:8px}.zm-node-img{pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;object-fit:contain;border-radius:4px;display:block}.zm-node-link,.zm-node-note-btn{color:currentColor;cursor:pointer;opacity:.75;pointer-events:auto;background:0 0;border:none;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;padding:0;text-decoration:none;transition:opacity .1s,background .1s;display:inline-flex}.zm-node-link:hover,.zm-node-note-btn:hover{opacity:1;background:#0f172a14}.zm-node-link svg,.zm-node-note-btn svg{display:block}.zm-img-resize-handle{cursor:nwse-resize;z-index:4;background:#3b82f6;border:2px solid #fff;border-radius:50%;width:14px;height:14px;transition:transform .1s;position:absolute;bottom:-6px;right:-6px;box-shadow:0 1px 4px #0f172a4d}.zm-img-resize-handle:hover{transform:scale(1.2)}.zm-node.is-resizing{cursor:nwse-resize!important}.zm-img-remove-btn{cursor:pointer;color:#64748b;z-index:4;background:#fff;border:1px solid #e2e8f0;border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;padding:0;transition:all .1s;display:flex;position:absolute;top:-6px;right:-6px;box-shadow:0 1px 3px #0f172a26}.zm-img-remove-btn:hover{color:#b91c1c;background:#fee2e2;border-color:#fca5a5}.zm-relation-path{fill:none;stroke:#94a3b8;stroke-width:1.5px;stroke-dasharray:6 4;stroke-linecap:round;pointer-events:none}.zm-relation-path.is-selected{stroke:#3b82f6}.zm-relation-arrow{fill:#94a3b8;stroke:none;pointer-events:none}.zm-relation-arrow.is-selected{fill:#3b82f6}.zm-relation-hit{fill:none;stroke:#0000;stroke-width:20px;pointer-events:stroke;cursor:pointer}.zm-relation-label{fill:#64748b;paint-order:stroke;stroke:#fff;stroke-width:3px;pointer-events:all;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px}.zm-relation-guide{stroke:#3b82f6;stroke-width:1px;stroke-dasharray:3 3;pointer-events:none;vector-effect:non-scaling-stroke}.zm-relation-handle{fill:#fff;stroke:#3b82f6;stroke-width:1.5px;vector-effect:non-scaling-stroke;pointer-events:all;cursor:grab}.zm-relation-handle-hit{fill:#0000;stroke:#0000;pointer-events:all;cursor:grab}.zm-relation-handle:hover{fill:#dbeafe}.zm-relation-handle-ctrl{stroke:#f59e0b}.zm-relation-handle-ctrl:hover{fill:#fef3c7}.zm-canvas.is-relation-mode{cursor:crosshair}.zm-node.is-relation-source{box-shadow:0 0 0 2px #3b82f6,0 0 0 5px #3b82f640}.zm-node.is-relation-target{box-shadow:0 0 0 2px #22c55e,0 0 0 5px #22c55e40}.zm-relation-label-input{color:#334155;text-align:center;z-index:5;background:#fff;border:1px solid #3b82f6;border-radius:4px;outline:none;min-width:72px;padding:2px 8px;font-size:12px;line-height:1.5;position:absolute;transform:translate(-50%,-110%);box-shadow:0 2px 8px #0f172a1f}.zm-order-badge{color:#475569;font-variant-numeric:tabular-nums;pointer-events:none;-webkit-user-select:none;user-select:none;vertical-align:middle;background:#e2e8f0;border-radius:3px;margin-left:6px;padding:0 5px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.zm-canvas-fab{color:#475569;cursor:pointer;z-index:11;opacity:0;pointer-events:none;background:#fff;border:1px solid #e8eaed;border-radius:999px;justify-content:center;align-items:center;width:34px;height:34px;transition:opacity .18s,transform .18s,background .1s,color .1s,box-shadow .12s;display:flex;position:absolute;transform:translateY(4px);box-shadow:0 2px 8px #0f172a0f,0 1px 2px #0f172a0a}.zm-canvas-fab.is-visible{opacity:1;pointer-events:auto;transform:translateY(0)}.zm-canvas-fab:hover{color:#1e293b;background:#f8fafc;box-shadow:0 4px 16px #0f172a1a,0 1px 4px #0f172a0f}.zm-canvas-fab:active{transform:scale(.94)}.zm-canvas-fab-preview{top:16px;right:16px}.zm-canvas-fab-outline{top:16px;left:16px}.zm-toolbar{-webkit-backdrop-filter:blur(12px)saturate(180%);z-index:10;background:#ffffffeb;border:1px solid #e2e8f099;border-radius:999px;align-items:center;gap:4px;padding:7px 12px;transition:opacity .18s,transform .18s;display:flex;position:absolute;bottom:16px;left:50%;transform:translate(-50%);box-shadow:0 4px 20px #0f172a0f,0 1px 3px #0f172a0a}.zm-toolbar.is-preview-only{opacity:0;pointer-events:none;transform:translate(-50%)translateY(8px)}.zm-toolbar.is-preview-only.is-hovered{opacity:1;pointer-events:auto;transform:translate(-50%)translateY(0)}.zm-tb-btn{cursor:pointer;color:#475569;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;width:32px;height:32px;transition:background .12s,color .12s;display:flex}.zm-tb-btn:hover{color:#0f172a;background:#f1f5f9}.zm-tb-btn img{filter:invert(20%)sepia(15%)saturate(500%)hue-rotate(180deg);transition:filter .1s}.zm-tb-btn:hover img{filter:invert(15%)sepia(30%)saturate(800%)hue-rotate(180deg)}.zm-tb-btn.active{background:var(--zm-tb-active,#fff7ed);color:var(--zm-tb-active-fg,#c2410c)}.zm-tb-divider{background:#e2e8f0b3;width:1px;height:18px;margin:0 4px}.zm-tb-tip{color:#64748b;text-align:center;min-width:38px;font-size:12px}.zm-tb-zoom{cursor:pointer;-webkit-user-select:none;user-select:none}.zm-tb-zoom:hover{color:#3b82f6}.zm-node.is-search-hit{outline-offset:2px;z-index:3;outline:2px solid #f59e0b}.zm-node.is-search-current{outline-offset:3px;z-index:4;outline:3px solid #f97316;box-shadow:0 0 0 4px #f9731626}.zm-node.is-search-dimmed{opacity:.35}.zm-node-markers{pointer-events:none;flex-shrink:0;align-items:center;gap:2px;display:flex}.zm-node-marker{flex-shrink:0;width:14px;height:14px;display:inline-flex}.zm-node-marker svg{width:14px;height:14px;display:block}.zm-node-tags{flex-wrap:wrap;justify-content:center;gap:3px;max-width:100%;margin-top:3px;display:flex;overflow:hidden}.zm-node-tag{white-space:nowrap;pointer-events:none;border-radius:999px;padding:1px 6px;font-size:10px;font-weight:500;line-height:1.4;display:inline-block}.zm-app{color:#1e293b;background:#f8fafc;width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:14px;display:flex;overflow:hidden}.zm-app-main{flex-direction:column;flex:1;min-width:0;display:flex}.zm-app-preview-exit{z-index:10;-webkit-backdrop-filter:blur(8px);color:#475569;cursor:pointer;background:#ffffffeb;border:1px solid #e8eaed;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;transition:background .12s,color .12s,transform .12s;display:inline-flex;position:absolute;top:12px;right:12px;box-shadow:0 2px 8px #0f172a0f}.zm-app-preview-exit:hover{color:#0f172a;background:#f1f5f9;transform:scale(1.05)}.zm-app-canvas{flex:1;min-height:0;position:relative}
|
|
1
|
+
.zm-node-menu{z-index:40;color:#1e293b;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;gap:2px;min-width:168px;padding:4px;font-size:13px;display:flex;position:fixed;box-shadow:0 8px 24px #0f172a24}.zm-node-menu-item{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:8px;width:100%;padding:6px 10px;transition:background .1s;display:flex}.zm-node-menu-item:hover:not(:disabled){background:#f1f5f9}.zm-node-menu-item:active:not(:disabled){background:#e2e8f0}.zm-node-menu-item:disabled{color:#94a3b8;cursor:not-allowed}.zm-node-menu-icon{color:#64748b;flex-shrink:0;justify-content:center;align-items:center;width:13px;height:13px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:10px;font-weight:600;display:inline-flex}.zm-node-menu-icon-code{letter-spacing:-1px;font-size:10px}.zm-node-menu-icon-table{font-family:inherit;font-size:12px}.zm-node-menu-divider{background:#e2e8f0;height:1px;margin:2px 4px}.zm-node-menu-arrow{color:#94a3b8;margin-left:auto;font-size:14px;transition:transform .15s}.zm-node-menu-arrow.is-open{transform:rotate(90deg)}.zm-marker-picker{flex-direction:column;gap:6px;padding:4px 8px 6px;display:flex}.zm-marker-group{flex-direction:column;gap:3px;display:flex}.zm-marker-group-label{text-transform:uppercase;letter-spacing:.04em;color:#94a3b8;font-size:10px;font-weight:600}.zm-marker-grid{flex-wrap:wrap;gap:3px;display:flex}.zm-marker-cell{cursor:pointer;background:#f8fafc;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;width:26px;height:26px;padding:0;transition:all .1s;display:flex}.zm-marker-cell:hover{background:#e2e8f0;border-color:#cbd5e1}.zm-marker-cell.is-active{background:#eff6ff;border-color:#3b82f6;box-shadow:0 0 0 1px #3b82f633}.zm-marker-cell svg{display:block}.zm-marker-clear{font:inherit;color:#b91c1c;cursor:pointer;text-align:center;background:0 0;border:none;border-radius:4px;padding:3px;font-size:11px}.zm-marker-clear:hover{background:#fee2e2}.zm-canvas-menu{z-index:40;box-sizing:border-box;color:#1e293b;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;gap:2px;min-width:140px;padding:4px;font-size:13px;display:flex;position:fixed;box-shadow:0 8px 24px #0f172a24}.zm-canvas-menu-item{color:inherit;font:inherit;text-align:left;cursor:pointer;box-sizing:border-box;background:0 0;border:none;border-radius:4px;align-items:center;gap:8px;width:100%;padding:6px 10px;transition:background .1s;display:flex}.zm-canvas-menu-item:hover:not(:disabled){background:#f1f5f9}.zm-canvas-menu-item:active:not(:disabled){background:#e2e8f0}.zm-canvas-menu-item:disabled{color:#94a3b8;cursor:not-allowed}.zm-canvas-menu-item-has-submenu{box-sizing:border-box;position:relative}.zm-canvas-menu-item-has-submenu.is-open,.zm-canvas-menu-item-has-submenu:hover{background:#f1f5f9}.zm-canvas-menu-caret{color:#94a3b8;flex-shrink:0;align-items:center;margin-left:auto;display:inline-flex}.zm-canvas-menu-divider{background:#e2e8f0;height:1px;margin:2px 4px}.zm-canvas-submenu{z-index:41;box-sizing:border-box;color:#1e293b;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;gap:2px;min-width:160px;padding:4px;font-size:13px;animation:.12s ease-out zm-submenu-in;display:flex;position:fixed;box-shadow:0 8px 24px #0f172a24}@keyframes zm-submenu-in{0%{opacity:0;transform:translate(-4px)}to{opacity:1;transform:translate(0)}}.zm-drawer{background:#fafbfc;border-right:1px solid #e8eaed;flex-direction:column;flex-shrink:0;height:100%;display:flex;overflow:hidden}.zm-drawer--canvas{z-index:40;height:100%;position:absolute;top:0;bottom:0;box-shadow:0 12px 40px #0f172a14,0 2px 8px #0f172a0a}.zm-drawer--left.zm-drawer--canvas{border-right:1px solid #e8eaed;left:0}.zm-drawer--right.zm-drawer--canvas{border-left:1px solid #e8eaed;border-right:none;right:0}.zm-drawer-canvas-backdrop{z-index:39;cursor:pointer;-webkit-backdrop-filter:blur(2px);background:#0f172a2e;position:absolute;inset:0}.zm-drawer-enter-active,.zm-drawer-leave-active{transition:width .22s,opacity .15s}.zm-drawer-enter-from,.zm-drawer-leave-to{opacity:0;border-right:none;width:0!important}.zm-slide-left-enter-active,.zm-slide-left-leave-active,.zm-slide-right-enter-active,.zm-slide-right-leave-active{transition:transform .22s,opacity .18s}.zm-slide-left-enter-from,.zm-slide-left-leave-to{opacity:0;transform:translate(-100%)}.zm-slide-right-enter-from,.zm-slide-right-leave-to{opacity:0;transform:translate(100%)}.zm-fade-enter-active,.zm-fade-leave-active{transition:opacity .18s}.zm-fade-enter-from,.zm-fade-leave-to{opacity:0}.zm-drawer--right{border-left:1px solid #e8eaed;border-right:none}.zm-drawer-header{background:#fff;border-bottom:1px solid #f0f1f3;flex-shrink:0;align-items:center;gap:8px;padding:16px 20px;display:flex}.zm-drawer-title{color:#0f172a;letter-spacing:-.01em;flex:1;margin:0;font-size:14px;font-weight:600}.zm-drawer-close{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;transition:background .12s,color .12s;display:flex}.zm-drawer-close:hover{color:#1e293b;background:#f1f5f9}.zm-drawer-body{flex:1;min-height:0;overflow:auto}.zm-outline-root{flex-direction:column;height:100%;display:flex}.zm-outline-search{flex-shrink:0;align-items:center;gap:6px;padding:8px 10px 4px;display:flex}.zm-outline-search-icon{color:#94a3b8;flex-shrink:0}.zm-outline-search-input{min-width:0;font:inherit;color:#1e293b;box-sizing:border-box;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;outline:none;flex:1;padding:5px 10px;font-size:12px;transition:border-color .12s,box-shadow .12s}.zm-outline-search-input:focus{background:#fff;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.zm-outline-search-input::placeholder{color:#94a3b8;font-size:11px}.zm-outline-search-count{color:#64748b;white-space:nowrap;text-align:center;flex-shrink:0;min-width:36px;font-size:11px}.zm-outline-search-empty{color:#ef4444}.zm-outline-search-clear{cursor:pointer;color:#94a3b8;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;font-size:16px;line-height:1;display:flex}.zm-outline-search-clear:hover{color:#1e293b;background:#f1f5f9}.zm-outline-actions{flex-shrink:0;justify-content:flex-end;padding:4px 10px;display:flex}.zm-outline-action-btn{color:#64748b;cursor:pointer;background:#f8fafc;border:1px solid #e2e8f0;border-radius:5px;align-items:center;gap:5px;padding:3px 8px;font-family:inherit;font-size:11px;transition:all .1s;display:inline-flex}.zm-outline-action-btn:hover{color:#1e293b;background:#f1f5f9;border-color:#cbd5e1}.zm-outline-action-btn.is-success{color:#047857;background:#ecfdf5;border-color:#a7f3d0}.zm-outline{flex:1;min-height:0;margin:0;padding:4px 0 8px;font-size:13px;list-style:none;overflow:auto}.zm-outline-row{cursor:grab;color:#334155;-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;border-radius:4px;align-items:center;gap:6px;margin:0 6px;padding-top:4px;padding-bottom:4px;padding-right:6px;transition:background .1s;display:flex;position:relative;overflow:hidden}.zm-outline-row:active{cursor:grabbing}.zm-outline-row:hover{background:#f1f5f9}.zm-outline-row.is-root{color:#0f172a;font-weight:600}.zm-outline-row.is-selected{color:#1d4ed8;background:#eff6ff}.zm-outline-row.is-selected .zm-outline-toggle,.zm-outline-row.is-selected .zm-outline-dot,.zm-outline-row.is-selected .zm-outline-row-copy,.zm-outline-row.is-selected .zm-outline-row-action{color:#1d4ed8}.zm-outline-row.is-search-hit{background:#fffbeb;box-shadow:inset 3px 0 #f59e0b}.zm-outline-row.is-search-current{background:#fef3c7;box-shadow:inset 3px 0 #f97316,inset 0 0 0 1px #f973164d}.zm-outline-row.is-drag-over-before:before,.zm-outline-row.is-drag-over-after:after{content:"";pointer-events:none;background:#3b82f6;border-radius:1px;height:2px;position:absolute;left:6px;right:6px}.zm-outline-row.is-drag-over-before:before{top:0}.zm-outline-row.is-drag-over-after:after{bottom:0}.zm-outline-row.is-drag-over-child{outline-offset:-2px;outline:2px solid #3b82f6;background:#dbeafe!important}.zm-outline-toggle{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;padding:0;display:flex}.zm-outline-toggle:hover{color:#475569;background:#e2e8f0}.zm-outline-dot{background:#cbd5e1;border-radius:50%;flex-shrink:0;width:4px;height:4px;margin:0 6px}.zm-outline-index{color:#94a3b8;font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;flex-shrink:0;min-width:22px;font-size:11px}.zm-outline-text{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.zm-outline-input{font:inherit;color:inherit;background:#fff;border:1px solid #3b82f6;border-radius:3px;outline:none;flex:1;margin:-2px 0;padding:1px 4px;font-size:13px}.zm-outline-row-action{color:#94a3b8;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;padding:0;transition:background .1s,color .1s,border-color .1s;display:none}.zm-outline-row:hover .zm-outline-row-action,.zm-outline-row.is-selected .zm-outline-row-action{display:inline-flex}.zm-outline-row-action:hover{color:#1d4ed8;background:#dbeafe;border-color:#bfdbfe}.zm-outline-row-action img{filter:invert(38%)sepia(94%)saturate(2417%)hue-rotate(229deg)brightness(91%)contrast(91%)}.zm-outline-row-copy{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;padding:0;transition:background .1s,color .1s;display:none}.zm-outline-row:hover .zm-outline-row-copy,.zm-outline-row.is-selected .zm-outline-row-copy{display:flex}.zm-outline-row-copy:hover{color:#475569;background:#e2e8f0}.zm-outline-row-copy.is-success{color:#047857;background:#ecfdf5;display:flex}.zm-jtv-root{color:#334155;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;line-height:1.6}.zm-jtv-header{cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:3px;align-items:center;gap:4px;padding-right:6px;display:flex}.zm-jtv-header:hover{background:#f1f5f9}.zm-jtv-toggle{text-align:center;color:#94a3b8;flex-shrink:0;width:12px;font-size:9px;display:inline-block}.zm-jtv-toggle.is-leaf{color:#cbd5e1}.zm-jtv-key{color:#1d4ed8;font-weight:500}.zm-jtv-colon{color:#94a3b8;margin-right:4px}.zm-jtv-size{color:#64748b;font-style:italic}.zm-jtv-bracket,.zm-jtv-brace{color:#94a3b8;margin-left:4px;font-weight:500}.zm-jtv-footer{color:#94a3b8;font-weight:500}.zm-jtv-leaf{border-radius:3px;flex-wrap:wrap;align-items:center;gap:4px;padding-right:6px;display:flex}.zm-jtv-leaf:hover{background:#f8fafc}.zm-jtv-value{word-break:break-all}.zm-jtv-string{color:#047857}.zm-jtv-number{color:#b45309}.zm-jtv-boolean{color:#7c3aed;font-weight:500}.zm-jtv-null,.zm-jtv-undefined{color:#94a3b8;font-style:italic}.zm-jtv-thumb-wrap{flex-shrink:0;align-items:center;gap:4px;margin-left:6px;display:inline-flex}.zm-jtv-thumb{object-fit:contain;background:#fff;border:1px solid #e2e8f0;border-radius:3px;max-width:48px;max-height:32px}.zm-jtv-thumb-link{color:#3b82f6;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:10px;text-decoration:none}.zm-jtv-thumb-link:hover{text-decoration:underline}.zm-jtv-leaf mark,.zm-jtv-key mark{color:#422006;background:#fef08a;border-radius:2px;padding:0 1px}.zm-data-panel{background:#fff;flex-direction:column;height:100%;display:flex}.zm-data-header{background:#f8fafc;border-bottom:1px solid #f1f5f9;flex-shrink:0;align-items:center;padding:8px 12px 6px;display:flex}.zm-data-title{flex:1;align-items:baseline;gap:8px;min-width:0;display:flex}.zm-data-title-text{color:#1e293b;letter-spacing:.02em;font-size:12px;font-weight:600}.zm-data-title-meta{color:#94a3b8;font-variant-numeric:tabular-nums;font-size:11px}.zm-data-toolbar{background:#fff;border-bottom:1px solid #f1f5f9;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:4px;padding:6px 10px;display:flex}.zm-data-btn{color:#475569;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:6px;align-items:center;gap:4px;padding:4px 8px;font-family:inherit;font-size:12px;transition:all .1s;display:inline-flex}.zm-data-btn:hover{color:#1e293b;background:#f1f5f9;border-color:#cbd5e1}.zm-data-btn.is-icon{padding:4px 8px}.zm-data-btn.is-active{color:#1d4ed8;background:#eff6ff;border-color:#bfdbfe}.zm-data-btn.is-success{color:#047857;background:#ecfdf5;border-color:#a7f3d0}.zm-data-btn.is-primary{color:#fff;background:#3b82f6;border-color:#3b82f6}.zm-data-btn.is-primary:hover{color:#fff;background:#2563eb;border-color:#2563eb}.zm-data-btn:disabled{opacity:.4;cursor:not-allowed}.zm-data-btn-label{font-size:11px}.zm-data-toolbar-spacer{flex:1;min-width:4px}.zm-data-search{background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;flex:0 160px;align-items:center;gap:4px;min-width:0;padding:3px 6px;transition:all .1s;display:flex}.zm-data-search:focus-within,.zm-data-search.is-active{background:#fff;border-color:#3b82f6}.zm-data-search svg{color:#94a3b8;flex-shrink:0}.zm-data-search input{min-width:0;font:inherit;color:#1e293b;background:0 0;border:none;outline:none;flex:1;padding:0;font-size:11px}.zm-data-search input::placeholder{color:#94a3b8}.zm-data-search-clear{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:2px;padding:0 2px;font-size:14px;line-height:1}.zm-data-search-clear:hover{color:#1e293b;background:#e2e8f0}.zm-data-paste{background:#f8fafc;border-bottom:1px solid #f1f5f9;flex-shrink:0;padding:8px 10px 10px}.zm-data-tabs{gap:4px;margin-bottom:6px;display:flex}.zm-data-tab{font:inherit;color:#475569;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:4px;padding:2px 8px;font-size:11px;transition:all .1s}.zm-data-tab:hover{background:#f1f5f9}.zm-data-tab.is-active{color:#fff;background:#1e293b;border-color:#1e293b}.zm-data-paste textarea{resize:vertical;box-sizing:border-box;background:#fff;border:1px solid #e2e8f0;border-radius:4px;width:100%;min-height:60px;max-height:160px;padding:6px 8px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.4}.zm-data-paste textarea:focus{border-color:#3b82f6;outline:none}.zm-data-paste-actions{gap:4px;margin-top:6px;display:flex}.zm-data-error{color:#dc2626;margin-top:6px;font-size:11px}.zm-data-tree{background:#fff;flex:1;padding:8px 4px 8px 6px;overflow:auto}.zm-data-footer{color:#94a3b8;background:#f8fafc;border-top:1px solid #f1f5f9;flex-shrink:0;padding:6px 12px;font-size:10px;line-height:1.5}.zm-data-footer-hint code{color:#475569;background:#fff;border:1px solid #e2e8f0;border-radius:3px;margin:0 1px;padding:0 3px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:10px}.zm-md-panel{background:#f8fafc;flex-direction:column;height:100%;display:flex}.zm-md-toolbar{background:#f8fafc;border-bottom:1px solid #f1f5f9;flex-shrink:0;align-items:center;gap:6px;padding:8px 10px;display:flex}.zm-md-spacer{flex:1}.zm-md-btn{color:#475569;cursor:pointer;white-space:nowrap;background:#fff;border:1px solid #e2e8f0;border-radius:6px;align-items:center;gap:5px;padding:4px 10px;font-family:inherit;font-size:12px;transition:all .1s;display:inline-flex}.zm-md-btn:hover:not(:disabled){color:#1e293b;background:#f1f5f9;border-color:#cbd5e1}.zm-md-btn:disabled{opacity:.4;cursor:not-allowed}.zm-md-btn.is-primary{color:#fff;background:#3b82f6;border-color:#3b82f6}.zm-md-btn.is-primary:hover:not(:disabled){color:#fff;background:#2563eb;border-color:#2563eb}.zm-md-error{color:#dc2626;background:#fef2f2;border-bottom:1px solid #fee2e2;flex-shrink:0;padding:6px 10px;font-size:11px}.zm-md-split,.zm-md-edit,.zm-md-preview{flex-direction:column;flex:1;min-height:0;display:flex}.zm-md-pane-header{color:#475569;letter-spacing:.02em;background:#f1f5f9;border-bottom:1px solid #e2e8f0;flex-shrink:0;align-items:center;gap:8px;padding:6px 10px;font-size:11px;font-weight:600;display:flex}.zm-md-hint{color:#94a3b8;margin-left:auto;font-size:10px;font-weight:400}.zm-md-textarea{color:#1e293b;resize:none;box-sizing:border-box;background:#fff;border:none;border-bottom:1px solid #e2e8f0;outline:none;flex:1;width:100%;padding:10px 12px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;line-height:1.5}.zm-md-textarea:focus{background:#fafbfc}.zm-md-preview-body{background:#fff;border-bottom:1px solid #e2e8f0;flex:1;min-height:0;position:relative}.zm-md-footer{background:#f8fafc;border-top:1px solid #e2e8f0;flex-shrink:0;justify-content:flex-end;padding:8px 10px;display:flex}.zm-settings-panel[data-v-23aa6448]{flex-direction:column;gap:14px;padding:16px 16px 24px;display:flex}.zm-settings-section[data-v-23aa6448]{background:#fff;border:1px solid #eef0f3;border-radius:12px;padding:16px}.zm-settings-section--actions[data-v-23aa6448]{background:0 0;border:none;padding:0}.zm-settings-section-title[data-v-23aa6448]{color:#0f172a;letter-spacing:-.01em;align-items:baseline;gap:6px;margin:0 0 14px;font-size:13px;font-weight:600;display:flex}.zm-settings-section-sub[data-v-23aa6448]{color:#64748b;text-overflow:ellipsis;white-space:nowrap;max-width:180px;font-size:11px;font-weight:500;overflow:hidden}.zm-settings-field[data-v-23aa6448]{color:#1e293b;justify-content:space-between;align-items:center;gap:12px;min-height:32px;margin:10px 0;font-size:13px;display:flex}.zm-settings-label[data-v-23aa6448]{color:#334155;flex:1;font-weight:500}.zm-settings-sub[data-v-23aa6448]{color:#64748b;margin-left:4px;font-family:ui-monospace,monospace;font-size:11px;font-weight:400}.zm-settings-value-tag[data-v-23aa6448]{color:#64748b;white-space:nowrap;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:2px 8px;font-family:ui-monospace,monospace;font-size:11px}.zm-settings-number[data-v-23aa6448]{color:#0f172a;text-align:right;-moz-appearance:textfield;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;width:64px;padding:5px 10px;font-size:12px;transition:border-color .12s,box-shadow .12s}.zm-settings-number[data-v-23aa6448]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.zm-settings-number[data-v-23aa6448]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.zm-settings-number[data-v-23aa6448]:focus{background:#fff;border-color:#3b82f6;outline:none;box-shadow:0 0 0 3px #3b82f61a}.zm-select[data-v-23aa6448]{color:#1e293b;cursor:pointer;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;outline:none;min-width:100px;padding:5px 10px;font-family:inherit;font-size:12px;transition:border-color .12s,box-shadow .12s}.zm-select[data-v-23aa6448]:focus,.zm-select[data-v-23aa6448]:hover{border-color:#3b82f6}.zm-select[data-v-23aa6448]:focus{background:#fff;box-shadow:0 0 0 3px #3b82f61a}.zm-settings-hint[data-v-23aa6448]{color:#94a3b8;margin:6px 0 0;font-size:11px;line-height:1.5}.zm-settings-divider[data-v-23aa6448]{background:#f1f5f9;height:1px;margin:12px 0}.zm-slider[data-v-23aa6448]{align-items:center;height:22px;margin:2px 0 6px;display:flex;position:relative}.zm-slider-track[data-v-23aa6448]{pointer-events:none;background:#e2e8f0;border-radius:999px;height:4px;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}.zm-slider input[type=range][data-v-23aa6448]{appearance:none;cursor:pointer;z-index:1;background:0 0;width:100%;height:22px;margin:0;position:relative}.zm-slider input[type=range][data-v-23aa6448]::-webkit-slider-runnable-track{appearance:none;background:0 0;border-radius:999px;height:4px}.zm-slider input[type=range][data-v-23aa6448]::-moz-range-track{background:0 0;border-radius:999px;height:4px}.zm-slider input[type=range][data-v-23aa6448]::-webkit-slider-thumb{appearance:none;cursor:pointer;background:#fff;border:2px solid #3b82f6;border-radius:50%;width:16px;height:16px;margin-top:-6px;transition:border-color .12s,box-shadow .12s;box-shadow:0 1px 4px #3b82f633}.zm-slider input[type=range][data-v-23aa6448]::-webkit-slider-thumb:hover{border-color:#2563eb;box-shadow:0 2px 8px #3b82f64d}.zm-slider input[type=range][data-v-23aa6448]::-moz-range-thumb{cursor:pointer;background:#fff;border:2px solid #3b82f6;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 4px #3b82f633}.zm-toggle[data-v-23aa6448]{cursor:pointer;background:#cbd5e1;border:none;border-radius:999px;flex-shrink:0;width:38px;height:22px;padding:0;transition:background .15s;position:relative}.zm-toggle.is-on[data-v-23aa6448]{background:#3b82f6}.zm-toggle-knob[data-v-23aa6448]{background:#fff;border-radius:50%;width:18px;height:18px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #0000002e}.zm-toggle.is-on .zm-toggle-knob[data-v-23aa6448]{transform:translate(16px)}.zm-swatch-row[data-v-23aa6448]{flex-wrap:wrap;gap:5px;margin:4px 0 10px;display:flex}.zm-swatch-row--compact[data-v-23aa6448]{gap:4px;margin-bottom:6px}.zm-swatch[data-v-23aa6448]{cursor:pointer;border:1.5px solid #e2e8f0;border-radius:7px;flex-shrink:0;width:22px;height:22px;padding:0;transition:transform .1s,border-color .12s,box-shadow .12s}.zm-swatch[data-v-23aa6448]:hover{border-color:#94a3b8;transform:scale(1.12)}.zm-swatch.is-active[data-v-23aa6448]{border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f626}.zm-swatch.is-reset[data-v-23aa6448]{color:#94a3b8;background:#fff;justify-content:center;align-items:center;font-size:12px;line-height:1;display:flex}.zm-swatch.is-reset[data-v-23aa6448]:hover{color:#ef4444;border-color:#fca5a5}.zm-swatch--custom[data-v-23aa6448]{background:conic-gradient(#f87171,#fbbf24,#34d399,#22d3ee,#818cf8,#c084fc,#f87171);border:1.5px solid #e2e8f0;position:relative;overflow:hidden}.zm-swatch--custom input[type=color][data-v-23aa6448]{opacity:0;cursor:pointer;border:none;width:100%;height:100%;padding:0;position:absolute;inset:0}.zm-color-input-wrap[data-v-23aa6448]{cursor:pointer;align-items:center;gap:6px;display:inline-flex}.zm-color-input[data-v-23aa6448]{cursor:pointer;background:0 0;border:1.5px solid #e2e8f0;border-radius:7px;width:28px;height:22px;padding:0}.zm-color-input-text[data-v-23aa6448]{color:#64748b;font-family:ui-monospace,monospace;font-size:11px}.zm-settings-field.zm-line-style-field[data-v-23aa6448]{flex-direction:column;align-items:stretch;gap:6px}.zm-line-style-field .zm-settings-label[data-v-23aa6448]{flex:none}.zm-line-style-group[data-v-23aa6448]{grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:4px;width:100%;display:grid}.zm-line-style-btn[data-v-23aa6448]{cursor:pointer;color:#94a3b8;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;align-items:center;gap:2px;padding:5px 4px;font-family:inherit;transition:all .12s;display:inline-flex}.zm-line-style-btn[data-v-23aa6448]:hover{color:#475569;background:#fff;border-color:#cbd5e1}.zm-line-style-btn.is-on[data-v-23aa6448]{color:#3b82f6;background:#eff6ff;border-color:#3b82f6}.zm-line-style-label[data-v-23aa6448]{font-size:11px;font-weight:500}.zm-settings-preview[data-v-23aa6448]{background:#f8fafc;border:1px solid #eef0f3;border-radius:10px;margin-top:12px;padding:10px 10px 8px}.zm-settings-preview svg[data-v-23aa6448]{display:block}.zm-settings-preview-labels[data-v-23aa6448]{color:#94a3b8;justify-content:space-between;margin-top:4px;padding:0 2px;font-size:10px;display:flex}.zm-palette-picker[data-v-23aa6448]{background:#f8fafc;border:1px solid #eef0f3;border-radius:10px;margin:8px 0;padding:12px}.zm-palette-list[data-v-23aa6448]{flex-direction:column;gap:6px;margin-top:4px;display:flex}.zm-palette-option[data-v-23aa6448]{cursor:pointer;text-align:left;background:#fff;border:1px solid #e2e8f0;border-radius:8px;align-items:center;gap:8px;width:100%;padding:7px 10px;transition:border-color .15s,background .15s;display:flex}.zm-palette-option[data-v-23aa6448]:hover{background:#f8fafc;border-color:#cbd5e1}.zm-palette-option.is-active[data-v-23aa6448]{background:#eff6ff;border-color:#3b82f6;box-shadow:0 0 0 1px #3b82f6}.zm-palette-option-name[data-v-23aa6448]{color:#1e293b;flex-shrink:0;min-width:36px;font-size:12px;font-weight:500}.zm-palette-option-swatches[data-v-23aa6448]{border-radius:3px;flex:1;gap:2px;height:14px;display:flex;overflow:hidden}.zm-palette-option-swatch[data-v-23aa6448]{flex:1;min-width:0;height:100%}.zm-palette-custom-editor[data-v-23aa6448]{margin-top:8px}.zm-palette-textarea[data-v-23aa6448]{color:#0f172a;resize:vertical;box-sizing:border-box;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;width:100%;min-height:36px;padding:7px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;transition:border-color .1s,box-shadow .1s}.zm-palette-textarea[data-v-23aa6448]:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.zm-palette-custom-actions[data-v-23aa6448]{gap:6px;margin-top:6px;display:flex}.zm-palette-add[data-v-23aa6448]{color:#3b82f6;cursor:pointer;background:#fff;border:1px dashed #bfdbfe;border-radius:8px;width:100%;margin-top:8px;padding:7px 8px;font-family:inherit;font-size:12px;font-weight:500;transition:all .1s}.zm-palette-add[data-v-23aa6448]:hover{background:#eff6ff;border-color:#3b82f6}.zm-data-btn[data-v-23aa6448]{color:#475569;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:8px;align-items:center;gap:5px;padding:6px 12px;font-family:inherit;font-size:12px;transition:all .1s;display:inline-flex}.zm-data-btn[data-v-23aa6448]:hover{color:#1e293b;background:#f1f5f9;border-color:#cbd5e1}.zm-data-btn.is-primary[data-v-23aa6448]{color:#fff;background:#3b82f6;border-color:#3b82f6}.zm-data-btn.is-primary[data-v-23aa6448]:hover{color:#fff;background:#2563eb;border-color:#2563eb}.zm-settings-reset[data-v-23aa6448]{color:#64748b;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:10px;width:100%;padding:10px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .1s}.zm-settings-reset[data-v-23aa6448]:hover{color:#ef4444;background:#fef2f2;border-color:#fecaca}.zm-note-panel{background:#f8fafc;flex-direction:column;gap:10px;height:100%;padding:12px 12px 16px;display:flex}.zm-note-empty{color:#64748b;padding:20px 12px;font-size:13px;line-height:1.6}.zm-note-empty p{margin:0 0 6px}.zm-note-hint{color:#94a3b8;font-size:12px}.zm-note-header{background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;flex-shrink:0;gap:4px;padding:10px 12px;display:flex}.zm-note-title-row{align-items:baseline;gap:8px;min-width:0;display:flex}.zm-note-label{text-transform:uppercase;letter-spacing:.04em;color:#94a3b8;flex-shrink:0;font-size:10px;font-weight:600}.zm-note-name{color:#1e293b;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;font-weight:600;overflow:hidden}.zm-note-meta{color:#94a3b8;font-size:11px}.zm-note-scroll{flex-direction:column;flex:1;gap:10px;min-height:0;padding-right:2px;display:flex;overflow-y:auto}.zm-note-section{background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.zm-note-section-head{align-items:center;gap:8px;min-width:0;display:flex}.zm-note-section-title{text-transform:uppercase;letter-spacing:.04em;color:#64748b;flex:1;min-width:0;font-size:10px;font-weight:600}.zm-note-section-hint{color:#94a3b8;font-size:10px}.zm-note-section-tag{color:#475569;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:1px 6px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:10px;line-height:1.4}.zm-note-section-actions{justify-content:flex-end;display:flex}.zm-note-textarea{width:100%;min-height:120px;font:inherit;color:#1e293b;resize:none;box-sizing:border-box;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;outline:none;padding:10px 12px;font-family:inherit;font-size:13px;line-height:20px;overflow:hidden}.zm-note-textarea:focus{background:#fff;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.zm-note-textarea:disabled{color:#94a3b8;cursor:not-allowed;background:#f8fafc}.zm-note-textarea::placeholder{color:#94a3b8;white-space:pre-line}.zm-note-split{flex-direction:column;gap:6px;display:flex}.zm-note-preview-toggle{font:inherit;color:#1d4ed8;cursor:pointer;background:0 0;border:1px solid #bfdbfe;border-radius:999px;flex-shrink:0;padding:1px 8px;font-size:10px;transition:all .1s}.zm-note-preview-toggle:hover{background:#eff6ff;border-color:#93c5fd}.zm-note-preview{color:#1e293b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;max-height:240px;padding:8px 12px;font-size:13px;line-height:1.6;overflow:auto}.zm-note-preview-hint{color:#94a3b8;font-size:12px;font-style:italic}.zm-note-preview-body h1,.zm-note-preview-body h2,.zm-note-preview-body h3{color:#0f172a;margin:8px 0 4px;font-weight:600}.zm-note-preview-body h1{font-size:16px}.zm-note-preview-body h2{font-size:14px}.zm-note-preview-body h3{font-size:13px}.zm-note-preview-body h4,.zm-note-preview-body h5,.zm-note-preview-body h6{color:#334155;margin:6px 0 4px;font-size:12px;font-weight:600}.zm-note-preview-body p{margin:0 0 6px}.zm-note-preview-body p:last-child{margin-bottom:0}.zm-note-preview-body ul,.zm-note-preview-body ol{margin:0 0 6px;padding-left:20px}.zm-note-preview-body li{margin:0 0 2px}.zm-note-preview-body blockquote{color:#475569;background:#f1f5f9;border-left:3px solid #cbd5e1;margin:0 0 6px;padding:4px 10px}.zm-note-preview-body code{color:#be185d;background:#f1f5f9;border-radius:3px;padding:1px 4px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:12px}.zm-note-preview-body pre{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:6px;margin:0 0 6px;padding:8px 10px;overflow:auto}.zm-note-preview-body pre code{color:inherit;background:0 0;padding:0;font-size:12px;line-height:1.55}.zm-note-preview-body a{color:#1d4ed8;-webkit-text-decoration:underline #bfdbfe;text-decoration:underline #bfdbfe}.zm-note-preview-body a:hover{text-decoration-color:#1d4ed8}.zm-note-preview-body table{border-collapse:collapse;margin:0 0 6px;font-size:12px}.zm-note-preview-body th,.zm-note-preview-body td{text-align:left;border:1px solid #e2e8f0;padding:4px 8px}.zm-note-preview-body th{background:#f1f5f9;font-weight:600}.zm-note-preview-body hr{border:none;border-top:1px solid #e2e8f0;margin:8px 0}.zm-note-preview-body img{border-radius:4px;max-width:100%;max-height:200px;display:block}.zm-note-input{width:100%;font:inherit;color:#1e293b;box-sizing:border-box;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;outline:none;padding:7px 10px;font-family:inherit;font-size:12px;line-height:1.5}.zm-note-input:focus{background:#fff;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.zm-note-input:disabled{color:#94a3b8;cursor:not-allowed;background:#f8fafc}.zm-note-input-code{resize:none;white-space:pre;min-height:80px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:11px;line-height:20px;overflow:hidden}.zm-note-add-row{flex-wrap:wrap;gap:6px;padding:2px 2px 0;display:flex}.zm-note-add-chip{font:inherit;color:#64748b;cursor:pointer;background:#fff;border:1px dashed #cbd5e1;border-radius:999px;padding:3px 10px;font-size:11px;transition:all .1s}.zm-note-add-chip:hover{color:#1d4ed8;background:#eff6ff;border-color:#93c5fd}.zm-note-link-chip{color:#1d4ed8;word-break:break-all;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:#eff6ff;border:1px solid #bfdbfe;border-radius:6px;max-width:100%;padding:6px 10px;font-size:12px;text-decoration:none;transition:background .1s;display:inline-block;overflow:hidden}.zm-note-link-chip:hover{background:#dbeafe}.zm-note-image{object-fit:contain;background:#f1f5f9;border-radius:6px;max-width:100%;max-height:240px;margin:0 auto;display:block}.zm-note-code{color:#24292e;white-space:pre-wrap;word-break:break-word;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:8px;max-height:320px;margin:0;padding:10px 12px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:12px;line-height:1.55;overflow:auto;box-shadow:0 1px 3px #0f172a14}.zm-note-code code{font:inherit;color:inherit;background:0 0;padding:0}.zm-note-table{border-collapse:separate;border-spacing:0;color:#1e293b;table-layout:auto;background:#fffbeb;border:1px solid #fcd34d;border-radius:8px;width:100%;font-size:12px;overflow:hidden;box-shadow:0 1px 3px #92400e14}.zm-note-table th{text-align:left;white-space:nowrap;background:#fde68a;border-right:1px solid #fcd34d;padding:6px 10px;font-weight:600}.zm-note-table th:last-child{border-right:none}.zm-note-table td{text-align:left;vertical-align:top;word-break:break-word;background:#fffbeb;border-top:1px solid #fde68a;border-right:1px solid #fde68a;padding:6px 10px}.zm-note-table tr:last-child td{border-bottom:none}.zm-note-table td:last-child{border-right:none}.zm-note-action-btn{color:#fff;cursor:pointer;background:#3b82f6;border:1px solid #3b82f6;border-radius:6px;padding:4px 10px;font-family:inherit;font-size:12px;transition:all .1s}.zm-note-action-btn.is-danger{color:#b91c1c;background:#fff;border-color:#fca5a5}.zm-note-action-btn.is-danger:hover{background:#fee2e2;border-color:#f87171}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}.zm-mindmap{-webkit-user-select:none;user-select:none;width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;position:relative;overflow:hidden}.zm-mindmap:fullscreen{width:100vw;height:100vh}.zm-canvas{cursor:grab;position:absolute;inset:0}.zm-canvas:active{cursor:grabbing}.zm-world{transform-origin:0 0;position:absolute;top:0;left:0}.zm-svg-layer{pointer-events:none;position:absolute;overflow:visible}.zm-marquee{pointer-events:none;z-index:5;background:#3b82f614;border:1px dashed #3b82f6;position:absolute}.zm-svg{pointer-events:none;shape-rendering:geometricprecision;position:absolute;top:0;left:0;overflow:visible}.zm-node{box-sizing:border-box;cursor:default;white-space:nowrap;z-index:1;border:1px solid #0000;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;padding:.4em;line-height:1.2;transition:box-shadow .15s;display:flex;position:absolute}.zm-node:hover{z-index:2;box-shadow:0 4px 12px #0000001a}.zm-node:not(.is-root):not(.is-editing){cursor:grab}.zm-node.is-root{cursor:default}.zm-node.is-dragging-source{opacity:.4;cursor:grabbing}.zm-node.is-drop-target{outline-offset:2px;outline:2px solid #4caf50;transition:outline-color .1s}.zm-node.is-drop-target-before{box-shadow:0 -3px #3b82f6,0 1px 2px #0000000f}.zm-node.is-drop-target-after{box-shadow:0 3px #3b82f6,0 1px 2px #0000000f}.zm-drop-indicator{pointer-events:none;z-index:9999;background:#3b82f6;border-radius:2px;position:absolute;box-shadow:0 0 6px #3b82f680}.zm-drag-ghost{pointer-events:none;z-index:10000;color:#fff;white-space:nowrap;will-change:transform,left,top;background:#3b82f6;border:none;border-radius:2px;align-items:center;gap:6px;max-width:200px;padding:5px 12px;font-size:13px;font-weight:500;display:flex;position:absolute;box-shadow:0 8px 20px -6px #0f172a73}.zm-drag-ghost-text{text-overflow:ellipsis;min-width:0;overflow:hidden}.zm-drag-ghost-count{color:#1d4ed8;background:#ffffffeb;border-radius:999px;flex:none;padding:1px 6px;font-size:11px;font-weight:600;line-height:1.5}body.is-dragging{-webkit-user-select:none;user-select:none;cursor:grabbing!important}body.is-dragging .zm-text-label{-webkit-user-select:none;user-select:none}.zm-node.is-root{font-weight:600}.zm-node.is-selected{outline-offset:2px;z-index:3;outline:2px solid #3b82f6}.zm-text{justify-content:center;align-items:center;gap:4px;max-width:200px;min-height:1.2em;display:flex;overflow:hidden}.zm-text-label{pointer-events:auto;-webkit-user-select:text;user-select:text;cursor:text;white-space:pre-line;flex-shrink:1;min-width:0;overflow:hidden}.zm-input{color:inherit;font:inherit;text-align:center;resize:none;background:0 0;border:none;outline:none;width:100%;min-width:40px;padding:0;line-height:1.2;overflow:hidden}.zm-tooltip{color:#f8fafc;pointer-events:none;z-index:1000;white-space:normal;word-break:break-word;background:#0f172af0;border-radius:6px;max-width:240px;padding:6px 10px;font-size:12px;line-height:1.4;animation:.12s ease-out zm-tooltip-in;position:absolute;transform:translate(-50%,-100%);box-shadow:0 4px 14px #0000002e}.zm-tooltip.is-below{transform:translate(-50%)}.zm-tooltip:after{content:"";border:4px solid #0000;border-top-color:#0f172af0;position:absolute;top:100%;left:50%;transform:translate(-50%)}.zm-tooltip.is-below:after{border-top-color:#0000;border-bottom-color:#0f172af0;top:auto;bottom:100%}@keyframes zm-tooltip-in{0%{opacity:0;transform:translate(-50%,calc(4px - 100%))}to{opacity:1;transform:translate(-50%,-100%)}}.zm-tooltip.is-below{animation-name:zm-tooltip-in-below}@keyframes zm-tooltip-in-below{0%{opacity:0;transform:translate(-50%,-4px)}to{opacity:1;transform:translate(-50%)}}.zm-rich{text-align:left;width:max-content;color:inherit;border-radius:4px;margin-top:6px;padding:0 .8em .2em;font-size:.78em;line-height:1.35;overflow:visible}.zm-rich-above{margin:0 0 2px}.zm-rich-no-overflow{max-height:none;overflow:visible}.zm-rich-code{white-space:pre-wrap;word-break:break-word;background:#fffffff2;border:1px solid;border-radius:6px;margin:0;padding:6px 14px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.92em}.zm-rich-list{margin:0;padding-left:1.2em;list-style:outside}.zm-rich-list li{margin:1px 0}.zm-rich-table{border-collapse:separate;border-spacing:0;background:#fffffff2;border:1px solid;border-radius:6px;width:100%;font-size:.92em;overflow:hidden}.zm-rich-table th{text-align:left;opacity:.9;background:#ffffffbf;border-bottom:1px solid;border-right:1px solid;padding:3px 10px;font-weight:600}.zm-rich-table th:last-child{border-right:none}.zm-rich-table td{opacity:.9;border-top:1px solid;border-right:1px solid;padding:3px 10px}.zm-rich-table tr:last-child td{border-bottom:none}.zm-rich-table td:last-child{border-right:none}.zm-rich-edit{width:100%;min-height:90px;color:inherit;resize:vertical;white-space:pre;box-sizing:border-box;background:#fff9;border:1px solid;border-radius:3px;outline:none;margin:0;padding:4px 6px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.92em;line-height:1.4}.zm-rich-edit:focus{border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f626}.zm-rich-paragraph{white-space:pre-wrap;word-break:break-word}.zm-btn{color:#fff;cursor:pointer;opacity:0;z-index:4;background:#3b82f6;border:none;border-radius:50%;justify-content:center;align-items:center;width:18px;height:18px;transition:opacity .15s,transform .15s;display:flex;position:absolute}.zm-node:hover .zm-btn,.zm-node.is-selected .zm-btn{opacity:1}.zm-btn:hover{transform:scale(1.15)}.zm-collapse{background:#fff;border:none;border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;display:flex;top:50%;right:-8px;transform:translateY(-50%);box-shadow:0 1px 3px #0f172a33}.zm-collapse-bar{background:var(--zm-collapse-color,#64748b);border-radius:1px;width:7px;height:2px;display:block}.zm-collapse.is-on-left{left:-8px;right:auto}.zm-collapse:hover{background:#fff;transform:translateY(-50%)scale(1.2)}.zm-collapse-badge{color:#fff;text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none;z-index:2;border-radius:5px;min-width:18px;height:18px;padding:0 5px;font-size:11px;font-weight:600;line-height:18px;transition:filter .1s;position:absolute;top:50%;left:calc(100% + 8px);transform:translateY(-50%);box-shadow:0 1px 2px #00000026}.zm-collapse-badge.is-on-left{left:auto;right:calc(100% + 8px)}.zm-collapse-badge:hover{filter:brightness(.9)}.zm-node.has-image{white-space:normal;flex-direction:column;gap:6px;padding:8px}.zm-node-img{pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;object-fit:contain;border-radius:4px;display:block}.zm-node-link,.zm-node-note-btn{color:currentColor;cursor:pointer;opacity:.75;pointer-events:auto;background:0 0;border:none;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;padding:0;text-decoration:none;transition:opacity .1s,background .1s;display:inline-flex}.zm-node-link:hover,.zm-node-note-btn:hover{opacity:1;background:#0f172a14}.zm-node-link svg,.zm-node-note-btn svg{display:block}.zm-img-resize-handle{cursor:nwse-resize;z-index:4;background:#3b82f6;border:2px solid #fff;border-radius:50%;width:14px;height:14px;transition:transform .1s;position:absolute;bottom:-6px;right:-6px;box-shadow:0 1px 4px #0f172a4d}.zm-img-resize-handle:hover{transform:scale(1.2)}.zm-node.is-resizing{cursor:nwse-resize!important}.zm-img-remove-btn{cursor:pointer;color:#64748b;z-index:4;background:#fff;border:1px solid #e2e8f0;border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;padding:0;transition:all .1s;display:flex;position:absolute;top:-6px;right:-6px;box-shadow:0 1px 3px #0f172a26}.zm-img-remove-btn:hover{color:#b91c1c;background:#fee2e2;border-color:#fca5a5}.zm-relation-path{fill:none;stroke:#94a3b8;stroke-width:1.5px;stroke-dasharray:6 4;stroke-linecap:round;pointer-events:none}.zm-relation-path.is-selected{stroke:#3b82f6}.zm-relation-arrow{fill:#94a3b8;stroke:none;pointer-events:none}.zm-relation-arrow.is-selected{fill:#3b82f6}.zm-relation-hit{fill:none;stroke:#0000;stroke-width:20px;pointer-events:stroke;cursor:pointer}.zm-relation-label{fill:#64748b;paint-order:stroke;stroke:#fff;stroke-width:3px;pointer-events:all;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px}.zm-relation-guide{stroke:#3b82f6;stroke-width:1px;stroke-dasharray:3 3;pointer-events:none;vector-effect:non-scaling-stroke}.zm-relation-handle{fill:#fff;stroke:#3b82f6;stroke-width:1.5px;vector-effect:non-scaling-stroke;pointer-events:all;cursor:grab}.zm-relation-handle-hit{fill:#0000;stroke:#0000;pointer-events:all;cursor:grab}.zm-relation-handle:hover{fill:#dbeafe}.zm-relation-handle-ctrl{stroke:#f59e0b}.zm-relation-handle-ctrl:hover{fill:#fef3c7}.zm-canvas.is-relation-mode{cursor:crosshair}.zm-node.is-relation-source{box-shadow:0 0 0 2px #3b82f6,0 0 0 5px #3b82f640}.zm-node.is-relation-target{box-shadow:0 0 0 2px #22c55e,0 0 0 5px #22c55e40}.zm-relation-label-input{color:#334155;text-align:center;z-index:5;background:#fff;border:1px solid #3b82f6;border-radius:4px;outline:none;min-width:72px;padding:2px 8px;font-size:12px;line-height:1.5;position:absolute;transform:translate(-50%,-110%);box-shadow:0 2px 8px #0f172a1f}.zm-order-badge{color:#475569;font-variant-numeric:tabular-nums;pointer-events:none;-webkit-user-select:none;user-select:none;vertical-align:middle;background:#e2e8f0;border-radius:3px;margin-left:6px;padding:0 5px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.zm-canvas-fab{color:#475569;cursor:pointer;z-index:11;opacity:0;pointer-events:none;background:#fff;border:1px solid #e8eaed;border-radius:999px;justify-content:center;align-items:center;width:34px;height:34px;transition:opacity .18s,transform .18s,background .1s,color .1s,box-shadow .12s;display:flex;position:absolute;transform:translateY(4px);box-shadow:0 2px 8px #0f172a0f,0 1px 2px #0f172a0a}.zm-canvas-fab.is-visible{opacity:1;pointer-events:auto;transform:translateY(0)}.zm-canvas-fab:hover{color:#1e293b;background:#f8fafc;box-shadow:0 4px 16px #0f172a1a,0 1px 4px #0f172a0f}.zm-canvas-fab:active{transform:scale(.94)}.zm-canvas-fab-preview{top:16px;right:16px}.zm-toolbar{-webkit-backdrop-filter:blur(12px)saturate(180%);z-index:10;background:#ffffffeb;border:1px solid #e2e8f099;border-radius:999px;align-items:center;gap:4px;padding:7px 12px;transition:opacity .18s,transform .18s;display:flex;position:absolute;bottom:16px;left:50%;transform:translate(-50%);box-shadow:0 4px 20px #0f172a0f,0 1px 3px #0f172a0a}.zm-toolbar.is-preview-only{opacity:0;pointer-events:none;transform:translate(-50%)translateY(8px)}.zm-toolbar.is-preview-only.is-hovered{opacity:1;pointer-events:auto;transform:translate(-50%)translateY(0)}.zm-tb-btn{cursor:pointer;color:#475569;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;width:32px;height:32px;transition:background .12s,color .12s;display:flex}.zm-tb-btn:hover{color:#0f172a;background:#f1f5f9}.zm-tb-btn img{filter:invert(20%)sepia(15%)saturate(500%)hue-rotate(180deg);transition:filter .1s}.zm-tb-btn:hover img{filter:invert(15%)sepia(30%)saturate(800%)hue-rotate(180deg)}.zm-tb-btn.active{background:var(--zm-tb-active,#fff7ed);color:var(--zm-tb-active-fg,#c2410c)}.zm-tb-divider{background:#e2e8f0b3;width:1px;height:18px;margin:0 4px}.zm-tb-tip{color:#64748b;text-align:center;min-width:38px;font-size:12px}.zm-tb-zoom{cursor:pointer;-webkit-user-select:none;user-select:none}.zm-tb-zoom:hover{color:#3b82f6}.zm-node.is-search-hit{outline-offset:2px;z-index:3;outline:2px solid #f59e0b}.zm-node.is-search-current{outline-offset:3px;z-index:4;outline:3px solid #f97316;box-shadow:0 0 0 4px #f9731626}.zm-node.is-search-dimmed{opacity:.35}.zm-node-markers{pointer-events:none;flex-shrink:0;align-items:center;gap:2px;display:flex}.zm-node-marker{flex-shrink:0;width:14px;height:14px;display:inline-flex}.zm-node-marker svg{width:14px;height:14px;display:block}.zm-node-tags{flex-wrap:wrap;justify-content:center;gap:3px;max-width:100%;margin-top:3px;display:flex;overflow:hidden}.zm-node-tag{white-space:nowrap;pointer-events:none;border-radius:999px;padding:1px 6px;font-size:10px;font-weight:500;line-height:1.4;display:inline-block}.zm-app{color:#1e293b;background:#f8fafc;width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:14px;display:flex;overflow:hidden}.zm-app-main{flex-direction:column;flex:1;min-width:0;display:flex}.zm-app-preview-exit{z-index:10;-webkit-backdrop-filter:blur(8px);color:#475569;cursor:pointer;background:#ffffffeb;border:1px solid #e8eaed;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;transition:background .12s,color .12s,transform .12s;display:inline-flex;position:absolute;top:12px;right:12px;box-shadow:0 2px 8px #0f172a0f}.zm-app-preview-exit:hover{color:#0f172a;background:#f1f5f9;transform:scale(1.05)}.zm-app-canvas{flex:1;min-height:0;position:relative}
|