zen-gitsync 2.17.38 → 2.17.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +34 -2
  2. package/package.json +3 -1
  3. package/src/ui/public/assets/{AgentEngineSelector-BMJAsMx_.js → AgentEngineSelector-Ca7h-OVv.js} +1 -1
  4. package/src/ui/public/assets/{AgentView-BH5Ec4j1.js → AgentView-KzzF7_Sv.js} +1 -1
  5. package/src/ui/public/assets/{AppVersionBadge-DNG70v26.js → AppVersionBadge-B8VigVla.js} +2 -2
  6. package/src/ui/public/assets/{BranchSelector-DBI8ieGq.js → BranchSelector-DgEH8i2U.js} +1 -1
  7. package/src/ui/public/assets/{CommitForm-BHwc5sEG.js → CommitForm-24MRGz_j.js} +1 -1
  8. package/src/ui/public/assets/{CommonDialog-DuI8Bsg7.js → CommonDialog-C3ruJAse.js} +1 -1
  9. package/src/ui/public/assets/{EditorView-B3EO-mxZ.js → EditorView-BtlRxw4L.js} +1 -1
  10. package/src/ui/public/assets/{FileDiffViewer-DtGtQGLR.js → FileDiffViewer-B5cXoziJ.js} +1 -1
  11. package/src/ui/public/assets/{FlowExecutionViewer-sM9EwU3Q.js → FlowExecutionViewer-DtFInmRe.js} +1 -1
  12. package/src/ui/public/assets/{FlowOrchestrationWorkspace-0Kh0IoGP.js → FlowOrchestrationWorkspace-BC5nzN88.js} +1 -1
  13. package/src/ui/public/assets/{IconButton-C07zojvw.js → IconButton-CmaM18jB.js} +1 -1
  14. package/src/ui/public/assets/{LogList-BatjYplm.js → LogList-DiMQ_7yP.js} +1 -1
  15. package/src/ui/public/assets/{MindmapView-CTHfsYTC.js → MindmapView-CqOAPpFu.js} +1 -1
  16. package/src/ui/public/assets/{MonitorView-BblFdPFM.js → MonitorView-POiXYq_a.js} +1 -1
  17. package/src/ui/public/assets/{ProjectStartupButton-CFQKlRoA.js → ProjectStartupButton-DnxiVsCj.js} +1 -1
  18. package/src/ui/public/assets/{RecentDirectoriesChat-BVgA8lLY.js → RecentDirectoriesChat-BTJsk605.js} +1 -1
  19. package/src/ui/public/assets/{RemoteManagerDialog-BxD0m5c-.js → RemoteManagerDialog-BgEilA7I.js} +1 -1
  20. package/src/ui/public/assets/{RemoteRepoCard-kOIERvah.js → RemoteRepoCard-CcZ04i_i.js} +1 -1
  21. package/src/ui/public/assets/{SourceMapView-Bs3DYqDP.js → SourceMapView-BkijspIL.js} +1 -1
  22. package/src/ui/public/assets/{SvgIcon-YQZtv72i.js → SvgIcon-CBqXx2qp.js} +1 -1
  23. package/src/ui/public/assets/{TemplateManager-zSKmah02.js → TemplateManager-Bd9A3dXY.js} +1 -1
  24. package/src/ui/public/assets/{UserInputNode-DMCLoOUw.js → UserInputNode-DYXVDPO-.js} +1 -1
  25. package/src/ui/public/assets/WorkbenchView-CIhuba2j.js +232 -0
  26. package/src/ui/public/assets/{_plugin-vue_export-helper-DcQKU19k.js → _plugin-vue_export-helper-DqKDIY1f.js} +2 -2
  27. package/src/ui/public/assets/{agentConversations-D_TsndCC.js → agentConversations-CVTMnWX1.js} +1 -1
  28. package/src/ui/public/assets/{configStore-u3FUM08v.js → configStore-CqbN-y1x.js} +1 -1
  29. package/src/ui/public/assets/{gitStore-ZjHYEyKS.js → gitStore-BrDeYGjs.js} +1 -1
  30. package/src/ui/public/assets/index-DTR0zSQP.css +1 -0
  31. package/src/ui/public/assets/{index-DorcTBZN.js → index-DkTmqIha.js} +65 -60
  32. package/src/ui/public/assets/{previewSandbox-KLKRAhm4.js → previewSandbox-DAqiCX7e.js} +1 -1
  33. package/src/ui/public/assets/{toolsStore-CfyhqJeq.js → toolsStore-DVWI6-BS.js} +1 -1
  34. package/src/ui/public/index.html +12 -12
  35. package/src/ui/server/index.js +9 -0
  36. package/src/ui/server/routes/projectStartupAi.js +521 -0
  37. package/src/ui/server/routes/projectStartupAi.test.js +378 -0
  38. package/src/ui/server/routes/workbench/orchestratorStore.js +5 -5
  39. package/src/ui/server/routes/workbench/orchestratorStore.progressReport.test.js +27 -0
  40. package/src/ui/server/routes/workbench/progressReport.js +15 -0
  41. package/src/ui/public/assets/WorkbenchView-nHzg7gau.js +0 -231
  42. package/src/ui/public/assets/index-BaV4YcQ6.css +0 -1
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/office-docx-CTz4O0Ml.js","assets/rolldown-runtime-C0FnF6B9.js","assets/element-plus-Buzx8xRf.js","assets/dagre-CDSwApuC.js","assets/element-plus-Qexo5hiM.css","assets/office-excel-DaZCapUD.js","assets/office-pptx-CFwyD4jf.js"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{$n as t,Bn as n,Dn as r,En as i,Fn as a,Fr as o,Ht as s,In as c,J as l,Jr as u,On as d,Pn as f,Tn as p,W as m,Xr as h,Yn as g,Zn as _,br as v,cn as y,cr as b,ei as x,kn as S,nr as C,or as w,pr as T,qn as E,sn as D,wt as O,xn as k}from"./element-plus-Buzx8xRf.js";import{_ as A}from"./vendor-wERX2bc3.js";import{t as j}from"./_plugin-vue_export-helper-DcQKU19k.js";import{ir as M}from"./dagre-CDSwApuC.js";import{n as N,r as P}from"./flow-mindmap-D-65aZb7.js";var F=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`ico`,`svg`]);function ee(e){if(!e)return!1;let t=e.split(`.`).pop()?.toLowerCase()??``;return F.has(t)}function te(e){return`/api/editor/raw?path=${encodeURIComponent(e)}`}var I=new Set([`doc`,`docx`,`xls`,`xlsx`,`ppt`,`pptx`,`odt`,`ods`,`odp`]);function L(e){return e.split(/[\\/]/).pop()?.split(`.`).pop()?.toLowerCase()||``}function R(e){return I.has(L(e))}function z(e,t={}){let n=new URLSearchParams({source:t.source||`worktree`,file:e});return t.rev&&n.set(`rev`,t.rev),t.side&&n.set(`side`,t.side),`/api/office/preview?${n.toString()}`}function B(e,t={}){let n=new URLSearchParams({source:t.source||`worktree`,file:e});return t.rev&&n.set(`rev`,t.rev),t.side&&n.set(`side`,t.side),`/api/office/raw?${n.toString()}`}n(),T();var V=c({__name:`ImagePreview`,props:{filePath:{type:String,required:!0},fileName:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=v(null),i=v(1),a=v(0),o=v(0),c=v(!1),u=v({x:0,y:0}),d=v(null),f=v(!1),m=v(null),h=()=>{if(!r.value||!d.value)return;let e=r.value.clientWidth-32,t=r.value.clientHeight-32;if(e<=0||t<=0)return;let n=Math.min(e/d.value.w,t/d.value.h,1);i.value=n,a.value=0,o.value=0},_=()=>{i.value=Math.min(i.value*1.2,8)},b=()=>{i.value=Math.max(i.value/1.2,.1)},x=()=>{i.value=1,a.value=0,o.value=0,h()},S=e=>{e.preventDefault(),e.deltaY<0?_():b()},C=e=>{e.button===0&&(c.value=!0,u.value={x:e.clientX-a.value,y:e.clientY-o.value})},T=e=>{c.value&&(a.value=e.clientX-u.value.x,o.value=e.clientY-u.value.y)},k=()=>{c.value=!1},A=e=>{let t=e.target;d.value={w:t.naturalWidth,h:t.naturalHeight},f.value=!1,requestAnimationFrame(()=>h())},j=()=>{f.value=!0},M=p(()=>n.fileName||n.filePath?.split(`/`).pop()||``),N=p(()=>te(n.filePath));g(()=>{window.addEventListener(`mousemove`,T),window.addEventListener(`mouseup`,k),window.addEventListener(`resize`,h)}),E(()=>{window.removeEventListener(`mousemove`,T),window.removeEventListener(`mouseup`,k),window.removeEventListener(`resize`,h)}),w(()=>n.filePath,()=>{d.value=null,f.value=!1,i.value=1,a.value=0,o.value=0});let P={props:n,containerRef:r,scale:i,translateX:a,translateY:o,isDragging:c,dragStart:u,naturalSize:d,loadError:f,imgRef:m,fit:h,zoomIn:_,zoomOut:b,reset:x,onWheel:S,onMouseDown:C,onMouseMove:T,onMouseUp:k,onImgLoad:A,onImgError:j,displayName:M,imageUrl:N,get ElIcon(){return l},get ZoomIn(){return D},get ZoomOut(){return y},get Refresh(){return s},get FullScreen(){return O}};return Object.defineProperty(P,"__isScriptSetup",{enumerable:!1,value:!0}),P}});n(),o();var H={class:`image-preview-toolbar`},U=[`title`],W={key:0,class:`image-preview-dim`},G={key:1,class:`image-preview-dim`},K={key:0,class:`image-preview-error`},q={class:`image-preview-error-path`},J=[`src`,`alt`],Y={class:`image-preview-footer`},X={class:`image-preview-zoom`};function Z(e,t,n,r,a,o){let s=m;return _(),S(`div`,{class:`image-preview`,ref:`containerRef`,onWheel:r.onWheel},[d(` 顶部工具条 `),i(`div`,H,[i(`span`,{class:`image-preview-name`,title:r.props.filePath},x(r.displayName),9,U),r.naturalSize?(_(),S(`span`,W,x(r.naturalSize.w)+` × `+x(r.naturalSize.h)+` px`,1)):(_(),S(`span`,G,x(Math.round(r.scale*100))+`%`,1)),t[0]||=i(`div`,{class:`image-preview-spacer`},null,-1),f(s,{content:`放大`,placement:`top`},{default:b(()=>[i(`button`,{class:`image-preview-btn`,onClick:r.zoomIn},[f(r.ElIcon,null,{default:b(()=>[f(r.ZoomIn)]),_:1})])]),_:1}),f(s,{content:`缩小`,placement:`top`},{default:b(()=>[i(`button`,{class:`image-preview-btn`,onClick:r.zoomOut},[f(r.ElIcon,null,{default:b(()=>[f(r.ZoomOut)]),_:1})])]),_:1}),f(s,{content:`适应窗口`,placement:`top`},{default:b(()=>[i(`button`,{class:`image-preview-btn`,onClick:r.reset},[f(r.ElIcon,null,{default:b(()=>[f(r.Refresh)]),_:1})])]),_:1})]),d(` 图片区域 `),i(`div`,{class:u([`image-preview-stage`,{"is-dragging":r.isDragging}]),onMousedown:r.onMouseDown},[r.loadError?(_(),S(`div`,K,[f(r.ElIcon,{size:`32`,color:`var(--color-danger)`},{default:b(()=>[f(r.FullScreen)]),_:1}),t[1]||=i(`p`,null,`图片加载失败`,-1),i(`p`,q,x(r.props.filePath),1)])):(_(),S(`img`,{key:1,ref:`imgRef`,src:r.imageUrl,alt:r.displayName,class:`image-preview-img`,style:h({transform:`translate(${r.translateX}px, ${r.translateY}px) scale(${r.scale})`}),onLoad:r.onImgLoad,onError:r.onImgError,draggable:`false`},null,44,J))],34),d(` 底部提示 `),i(`div`,Y,[t[2]||=i(`span`,null,`滚轮缩放 · 拖拽平移 · 双击重置`,-1),i(`span`,X,x(Math.round(r.scale*100))+`%`,1)])],544)}var ne=j(V,[[`render`,Z],[`__scopeId`,`data-v-88f42dc3`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/ImagePreview.vue`]]);n();var re=c({__name:`MarkdownPreview`,props:{content:{type:String,required:!0},allowHtml:{type:Boolean,required:!1,default:!0}},setup(e,{expose:t}){t();let n=e;function r(e){if(typeof document>`u`)return e;let t=document.createElement(`template`);return t.innerHTML=e,t.content.querySelectorAll(`script, style, iframe, object, embed, form, input, button, textarea, select`).forEach(e=>e.remove()),t.content.querySelectorAll(`*`).forEach(e=>{for(let t of Array.from(e.attributes)){let n=t.name.toLowerCase();if(n.startsWith(`on`)||n===`style`||n===`srcdoc`){e.removeAttribute(t.name);continue}if(n===`href`||n===`src`||n===`xlink:href`){let r=t.value.trim().replace(/[\u0000-\u0020]+/g,``);/^(https?:|mailto:|tel:|#|\/|\.\/|\.\.\/)/i.test(r)||n===`src`&&/^data:image\/(?:png|gif|jpe?g|webp);base64,/i.test(r)||e.removeAttribute(t.name)}}e.getAttribute(`target`)===`_blank`&&e.setAttribute(`rel`,`noopener noreferrer`)}),t.innerHTML}let i={props:n,sanitizeRenderedHtml:r,segments:p(()=>{let e=n.content||``,t=[],i=`@@FLOWDASH_MINDMAP_BLOCK_`,a=e.replace(/```[ \t]*mindmap[ \t]*\n([\s\S]*?)```/gi,(e,n)=>{let r=t.length;return t.push({id:r,md:n}),`${i}${r}@@`}),o=A(a,{className:!1,html:n.allowHtml}),s=n.allowHtml?o:r(o),c=RegExp(`(?:<p>)?\\s*${i}(\\d+)@@\\s*(?:</p>)?`,`g`),l=[],u=0,d;for(;(d=c.exec(s))!==null;){d.index>u&&l.push({type:`html`,html:s.slice(u,d.index)});let e=Number(d[1]);l.push({type:`mindmap`,id:e,md:t[e].md,data:N(t[e].md)}),u=d.index+d[0].length}return u<s.length&&l.push({type:`html`,html:s.slice(u)}),l.length===0&&l.push({type:`html`,html:`<p class="md-empty">无内容</p>`}),l}),get MindMap(){return P}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}});n();var ie={class:`md-preview`},ae=[`innerHTML`],oe={key:1,class:`md-mindmap`};function se(e,n,r,a,o,s){return _(),S(`div`,ie,[(_(!0),S(k,null,t(a.segments,(e,t)=>(_(),S(k,{key:t},[e.type===`html`?(_(),S(`div`,{key:0,class:`md-segment`,innerHTML:e.html},null,8,ae)):(_(),S(`div`,oe,[n[0]||=i(`div`,{class:`md-mindmap-title`},`四维导图`,-1),f(a.MindMap,{data:e.data,"preview-mode":``,class:`md-mindmap-canvas`},null,8,[`data`])]))],64))),128))])}var ce=j(re,[[`render`,se],[`__scopeId`,`data-v-c5fe3d4b`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/MarkdownPreview.vue`]]);n(),T();var le=c({__name:`OfficePreview`,props:{filePath:{type:String,required:!0},source:{type:String,required:!1,default:`worktree`},rev:{type:String,required:!1,default:``},side:{type:String,required:!1,default:`new`}},setup(t,{expose:n}){n();let r=t,i=a(()=>M(()=>import(`./office-docx-CTz4O0Ml.js`).then(t=>e(t.t(),1)),__vite__mapDeps([0,1,2,3,4]))),o=a(()=>M(()=>import(`./office-excel-DaZCapUD.js`).then(t=>e(t.t(),1)),__vite__mapDeps([5,1,0,2,3,4]))),s=a(()=>M(()=>import(`./office-pptx-CFwyD4jf.js`).then(t=>e(t.t(),1)),__vite__mapDeps([6,1,0,2,3,4]))),c=p(()=>L(r.filePath)),l=p(()=>c.value===`docx`?i:c.value===`xls`||c.value===`xlsx`?o:c.value===`pptx`?s:null),u=p(()=>B(r.filePath,{source:r.source,rev:r.rev,side:r.side})),d=p(()=>z(r.filePath,{source:r.source,rev:r.rev,side:r.side})),f=v(null),m=v(``),h=v(!1),g=v(!1),_=v(!1),y=0;function b(){m.value&&URL.revokeObjectURL(m.value),m.value=``}async function x(e){try{let t=await fetch(d.value);if(!t.ok)throw Error(`HTTP ${t.status}`);if(e!==y)return;m.value=URL.createObjectURL(await t.blob()),_.value=!0,g.value=!1}catch{e===y&&(g.value=!0)}}async function S(){let e=++y;if(h.value=!0,g.value=!1,_.value=!1,f.value=null,b(),!l.value){await x(e),e===y&&(h.value=!1);return}try{let t=await fetch(u.value);if(!t.ok)throw Error(`HTTP ${t.status}`);if(e!==y)return;f.value=await t.arrayBuffer()}catch{await x(e)}finally{e===y&&(h.value=!1)}}function C(){if(!_.value){let e=y;f.value=null,h.value=!0,x(e).finally(()=>{e===y&&(h.value=!1)})}}function T(){S()}w(u,()=>{S()},{immediate:!0}),E(()=>{y++,b()});let D={props:r,DocxPreview:i,ExcelPreview:o,PptxPreview:s,ext:c,officeComponent:l,rawUrl:u,fallbackUrl:d,sourceData:f,fallbackBlobUrl:m,loading:h,failed:g,usingFallback:_,get requestId(){return y},set requestId(e){y=e},revokeFallbackUrl:b,fetchFallback:x,loadPreview:S,onRenderError:C,reload:T};return Object.defineProperty(D,"__isScriptSetup",{enumerable:!1,value:!0}),D}});n(),o();var ue={class:`office-preview`},de={class:`office-preview-toolbar`},fe={class:`office-preview-badge`},pe={key:0,class:`office-preview-side`},me={key:0,class:`office-preview-state`},Q={key:1,class:`office-preview-state office-preview-error`},he=[`src`];function ge(e,t,n,a,o,s){return _(),S(`div`,ue,[i(`div`,de,[t[0]||=i(`span`,{class:`office-preview-title`},`Office 预览`,-1),i(`span`,fe,x(a.ext.toUpperCase()),1),n.source===`git`?(_(),S(`span`,pe,x(n.side===`old`?`旧版本`:`新版本`),1)):d(`v-if`,!0),i(`button`,{class:`office-preview-reload`,type:`button`,onClick:a.reload},`刷新`)]),a.loading?(_(),S(`div`,me,`正在生成预览…`)):a.failed?(_(),S(`div`,Q,[...t[1]||=[i(`p`,null,`无法预览此 Office 文件。`,-1),i(`p`,{class:`office-preview-hint`},`支持 docx、xls/xlsx、pptx;老格式需要安装 LibreOffice 才能兜底预览。`,-1)]])):a.usingFallback?(_(),S(`iframe`,{key:2,class:`office-preview-frame`,src:a.fallbackBlobUrl,title:`Office 文件 PDF 预览`},null,8,he)):a.officeComponent&&a.sourceData?(_(),r(C(a.officeComponent),{key:3,class:`office-preview-document`,src:a.sourceData,onError:a.onRenderError},null,40,[`src`])):d(`v-if`,!0)])}var _e=j(le,[[`render`,ge],[`__scopeId`,`data-v-93e099c2`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/OfficePreview.vue`]]),ve=`allow-scripts allow-forms allow-popups allow-modals`,$=`<script>(function(){
2
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{$n as t,Bn as n,Dn as r,En as i,Fn as a,Fr as o,Ht as s,In as c,J as l,Jr as u,On as d,Pn as f,Tn as p,W as m,Xr as h,Yn as g,Zn as _,br as v,cn as y,cr as b,ei as x,kn as S,nr as C,or as w,pr as T,qn as E,sn as D,wt as O,xn as k}from"./element-plus-Buzx8xRf.js";import{_ as A}from"./vendor-wERX2bc3.js";import{t as j}from"./_plugin-vue_export-helper-DqKDIY1f.js";import{ir as M}from"./dagre-CDSwApuC.js";import{n as N,r as P}from"./flow-mindmap-D-65aZb7.js";var F=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`ico`,`svg`]);function ee(e){if(!e)return!1;let t=e.split(`.`).pop()?.toLowerCase()??``;return F.has(t)}function te(e){return`/api/editor/raw?path=${encodeURIComponent(e)}`}var I=new Set([`doc`,`docx`,`xls`,`xlsx`,`ppt`,`pptx`,`odt`,`ods`,`odp`]);function L(e){return e.split(/[\\/]/).pop()?.split(`.`).pop()?.toLowerCase()||``}function R(e){return I.has(L(e))}function z(e,t={}){let n=new URLSearchParams({source:t.source||`worktree`,file:e});return t.rev&&n.set(`rev`,t.rev),t.side&&n.set(`side`,t.side),`/api/office/preview?${n.toString()}`}function B(e,t={}){let n=new URLSearchParams({source:t.source||`worktree`,file:e});return t.rev&&n.set(`rev`,t.rev),t.side&&n.set(`side`,t.side),`/api/office/raw?${n.toString()}`}n(),T();var V=c({__name:`ImagePreview`,props:{filePath:{type:String,required:!0},fileName:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=v(null),i=v(1),a=v(0),o=v(0),c=v(!1),u=v({x:0,y:0}),d=v(null),f=v(!1),m=v(null),h=()=>{if(!r.value||!d.value)return;let e=r.value.clientWidth-32,t=r.value.clientHeight-32;if(e<=0||t<=0)return;let n=Math.min(e/d.value.w,t/d.value.h,1);i.value=n,a.value=0,o.value=0},_=()=>{i.value=Math.min(i.value*1.2,8)},b=()=>{i.value=Math.max(i.value/1.2,.1)},x=()=>{i.value=1,a.value=0,o.value=0,h()},S=e=>{e.preventDefault(),e.deltaY<0?_():b()},C=e=>{e.button===0&&(c.value=!0,u.value={x:e.clientX-a.value,y:e.clientY-o.value})},T=e=>{c.value&&(a.value=e.clientX-u.value.x,o.value=e.clientY-u.value.y)},k=()=>{c.value=!1},A=e=>{let t=e.target;d.value={w:t.naturalWidth,h:t.naturalHeight},f.value=!1,requestAnimationFrame(()=>h())},j=()=>{f.value=!0},M=p(()=>n.fileName||n.filePath?.split(`/`).pop()||``),N=p(()=>te(n.filePath));g(()=>{window.addEventListener(`mousemove`,T),window.addEventListener(`mouseup`,k),window.addEventListener(`resize`,h)}),E(()=>{window.removeEventListener(`mousemove`,T),window.removeEventListener(`mouseup`,k),window.removeEventListener(`resize`,h)}),w(()=>n.filePath,()=>{d.value=null,f.value=!1,i.value=1,a.value=0,o.value=0});let P={props:n,containerRef:r,scale:i,translateX:a,translateY:o,isDragging:c,dragStart:u,naturalSize:d,loadError:f,imgRef:m,fit:h,zoomIn:_,zoomOut:b,reset:x,onWheel:S,onMouseDown:C,onMouseMove:T,onMouseUp:k,onImgLoad:A,onImgError:j,displayName:M,imageUrl:N,get ElIcon(){return l},get ZoomIn(){return D},get ZoomOut(){return y},get Refresh(){return s},get FullScreen(){return O}};return Object.defineProperty(P,"__isScriptSetup",{enumerable:!1,value:!0}),P}});n(),o();var H={class:`image-preview-toolbar`},U=[`title`],W={key:0,class:`image-preview-dim`},G={key:1,class:`image-preview-dim`},K={key:0,class:`image-preview-error`},q={class:`image-preview-error-path`},J=[`src`,`alt`],Y={class:`image-preview-footer`},X={class:`image-preview-zoom`};function Z(e,t,n,r,a,o){let s=m;return _(),S(`div`,{class:`image-preview`,ref:`containerRef`,onWheel:r.onWheel},[d(` 顶部工具条 `),i(`div`,H,[i(`span`,{class:`image-preview-name`,title:r.props.filePath},x(r.displayName),9,U),r.naturalSize?(_(),S(`span`,W,x(r.naturalSize.w)+` × `+x(r.naturalSize.h)+` px`,1)):(_(),S(`span`,G,x(Math.round(r.scale*100))+`%`,1)),t[0]||=i(`div`,{class:`image-preview-spacer`},null,-1),f(s,{content:`放大`,placement:`top`},{default:b(()=>[i(`button`,{class:`image-preview-btn`,onClick:r.zoomIn},[f(r.ElIcon,null,{default:b(()=>[f(r.ZoomIn)]),_:1})])]),_:1}),f(s,{content:`缩小`,placement:`top`},{default:b(()=>[i(`button`,{class:`image-preview-btn`,onClick:r.zoomOut},[f(r.ElIcon,null,{default:b(()=>[f(r.ZoomOut)]),_:1})])]),_:1}),f(s,{content:`适应窗口`,placement:`top`},{default:b(()=>[i(`button`,{class:`image-preview-btn`,onClick:r.reset},[f(r.ElIcon,null,{default:b(()=>[f(r.Refresh)]),_:1})])]),_:1})]),d(` 图片区域 `),i(`div`,{class:u([`image-preview-stage`,{"is-dragging":r.isDragging}]),onMousedown:r.onMouseDown},[r.loadError?(_(),S(`div`,K,[f(r.ElIcon,{size:`32`,color:`var(--color-danger)`},{default:b(()=>[f(r.FullScreen)]),_:1}),t[1]||=i(`p`,null,`图片加载失败`,-1),i(`p`,q,x(r.props.filePath),1)])):(_(),S(`img`,{key:1,ref:`imgRef`,src:r.imageUrl,alt:r.displayName,class:`image-preview-img`,style:h({transform:`translate(${r.translateX}px, ${r.translateY}px) scale(${r.scale})`}),onLoad:r.onImgLoad,onError:r.onImgError,draggable:`false`},null,44,J))],34),d(` 底部提示 `),i(`div`,Y,[t[2]||=i(`span`,null,`滚轮缩放 · 拖拽平移 · 双击重置`,-1),i(`span`,X,x(Math.round(r.scale*100))+`%`,1)])],544)}var ne=j(V,[[`render`,Z],[`__scopeId`,`data-v-88f42dc3`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/ImagePreview.vue`]]);n();var re=c({__name:`MarkdownPreview`,props:{content:{type:String,required:!0},allowHtml:{type:Boolean,required:!1,default:!0}},setup(e,{expose:t}){t();let n=e;function r(e){if(typeof document>`u`)return e;let t=document.createElement(`template`);return t.innerHTML=e,t.content.querySelectorAll(`script, style, iframe, object, embed, form, input, button, textarea, select`).forEach(e=>e.remove()),t.content.querySelectorAll(`*`).forEach(e=>{for(let t of Array.from(e.attributes)){let n=t.name.toLowerCase();if(n.startsWith(`on`)||n===`style`||n===`srcdoc`){e.removeAttribute(t.name);continue}if(n===`href`||n===`src`||n===`xlink:href`){let r=t.value.trim().replace(/[\u0000-\u0020]+/g,``);/^(https?:|mailto:|tel:|#|\/|\.\/|\.\.\/)/i.test(r)||n===`src`&&/^data:image\/(?:png|gif|jpe?g|webp);base64,/i.test(r)||e.removeAttribute(t.name)}}e.getAttribute(`target`)===`_blank`&&e.setAttribute(`rel`,`noopener noreferrer`)}),t.innerHTML}let i={props:n,sanitizeRenderedHtml:r,segments:p(()=>{let e=n.content||``,t=[],i=`@@FLOWDASH_MINDMAP_BLOCK_`,a=e.replace(/```[ \t]*mindmap[ \t]*\n([\s\S]*?)```/gi,(e,n)=>{let r=t.length;return t.push({id:r,md:n}),`${i}${r}@@`}),o=A(a,{className:!1,html:n.allowHtml}),s=n.allowHtml?o:r(o),c=RegExp(`(?:<p>)?\\s*${i}(\\d+)@@\\s*(?:</p>)?`,`g`),l=[],u=0,d;for(;(d=c.exec(s))!==null;){d.index>u&&l.push({type:`html`,html:s.slice(u,d.index)});let e=Number(d[1]);l.push({type:`mindmap`,id:e,md:t[e].md,data:N(t[e].md)}),u=d.index+d[0].length}return u<s.length&&l.push({type:`html`,html:s.slice(u)}),l.length===0&&l.push({type:`html`,html:`<p class="md-empty">无内容</p>`}),l}),get MindMap(){return P}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}});n();var ie={class:`md-preview`},ae=[`innerHTML`],oe={key:1,class:`md-mindmap`};function se(e,n,r,a,o,s){return _(),S(`div`,ie,[(_(!0),S(k,null,t(a.segments,(e,t)=>(_(),S(k,{key:t},[e.type===`html`?(_(),S(`div`,{key:0,class:`md-segment`,innerHTML:e.html},null,8,ae)):(_(),S(`div`,oe,[n[0]||=i(`div`,{class:`md-mindmap-title`},`四维导图`,-1),f(a.MindMap,{data:e.data,"preview-mode":``,class:`md-mindmap-canvas`},null,8,[`data`])]))],64))),128))])}var ce=j(re,[[`render`,se],[`__scopeId`,`data-v-c5fe3d4b`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/MarkdownPreview.vue`]]);n(),T();var le=c({__name:`OfficePreview`,props:{filePath:{type:String,required:!0},source:{type:String,required:!1,default:`worktree`},rev:{type:String,required:!1,default:``},side:{type:String,required:!1,default:`new`}},setup(t,{expose:n}){n();let r=t,i=a(()=>M(()=>import(`./office-docx-CTz4O0Ml.js`).then(t=>e(t.t(),1)),__vite__mapDeps([0,1,2,3,4]))),o=a(()=>M(()=>import(`./office-excel-DaZCapUD.js`).then(t=>e(t.t(),1)),__vite__mapDeps([5,1,0,2,3,4]))),s=a(()=>M(()=>import(`./office-pptx-CFwyD4jf.js`).then(t=>e(t.t(),1)),__vite__mapDeps([6,1,0,2,3,4]))),c=p(()=>L(r.filePath)),l=p(()=>c.value===`docx`?i:c.value===`xls`||c.value===`xlsx`?o:c.value===`pptx`?s:null),u=p(()=>B(r.filePath,{source:r.source,rev:r.rev,side:r.side})),d=p(()=>z(r.filePath,{source:r.source,rev:r.rev,side:r.side})),f=v(null),m=v(``),h=v(!1),g=v(!1),_=v(!1),y=0;function b(){m.value&&URL.revokeObjectURL(m.value),m.value=``}async function x(e){try{let t=await fetch(d.value);if(!t.ok)throw Error(`HTTP ${t.status}`);if(e!==y)return;m.value=URL.createObjectURL(await t.blob()),_.value=!0,g.value=!1}catch{e===y&&(g.value=!0)}}async function S(){let e=++y;if(h.value=!0,g.value=!1,_.value=!1,f.value=null,b(),!l.value){await x(e),e===y&&(h.value=!1);return}try{let t=await fetch(u.value);if(!t.ok)throw Error(`HTTP ${t.status}`);if(e!==y)return;f.value=await t.arrayBuffer()}catch{await x(e)}finally{e===y&&(h.value=!1)}}function C(){if(!_.value){let e=y;f.value=null,h.value=!0,x(e).finally(()=>{e===y&&(h.value=!1)})}}function T(){S()}w(u,()=>{S()},{immediate:!0}),E(()=>{y++,b()});let D={props:r,DocxPreview:i,ExcelPreview:o,PptxPreview:s,ext:c,officeComponent:l,rawUrl:u,fallbackUrl:d,sourceData:f,fallbackBlobUrl:m,loading:h,failed:g,usingFallback:_,get requestId(){return y},set requestId(e){y=e},revokeFallbackUrl:b,fetchFallback:x,loadPreview:S,onRenderError:C,reload:T};return Object.defineProperty(D,"__isScriptSetup",{enumerable:!1,value:!0}),D}});n(),o();var ue={class:`office-preview`},de={class:`office-preview-toolbar`},fe={class:`office-preview-badge`},pe={key:0,class:`office-preview-side`},me={key:0,class:`office-preview-state`},Q={key:1,class:`office-preview-state office-preview-error`},he=[`src`];function ge(e,t,n,a,o,s){return _(),S(`div`,ue,[i(`div`,de,[t[0]||=i(`span`,{class:`office-preview-title`},`Office 预览`,-1),i(`span`,fe,x(a.ext.toUpperCase()),1),n.source===`git`?(_(),S(`span`,pe,x(n.side===`old`?`旧版本`:`新版本`),1)):d(`v-if`,!0),i(`button`,{class:`office-preview-reload`,type:`button`,onClick:a.reload},`刷新`)]),a.loading?(_(),S(`div`,me,`正在生成预览…`)):a.failed?(_(),S(`div`,Q,[...t[1]||=[i(`p`,null,`无法预览此 Office 文件。`,-1),i(`p`,{class:`office-preview-hint`},`支持 docx、xls/xlsx、pptx;老格式需要安装 LibreOffice 才能兜底预览。`,-1)]])):a.usingFallback?(_(),S(`iframe`,{key:2,class:`office-preview-frame`,src:a.fallbackBlobUrl,title:`Office 文件 PDF 预览`},null,8,he)):a.officeComponent&&a.sourceData?(_(),r(C(a.officeComponent),{key:3,class:`office-preview-document`,src:a.sourceData,onError:a.onRenderError},null,40,[`src`])):d(`v-if`,!0)])}var _e=j(le,[[`render`,ge],[`__scopeId`,`data-v-93e099c2`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/OfficePreview.vue`]]),ve=`allow-scripts allow-forms allow-popups allow-modals`,$=`<script>(function(){
3
3
  try{window.localStorage.getItem('__zk')}catch(e){
4
4
  var d={};var s={getItem:function(k){return Object.prototype.hasOwnProperty.call(d,k)?d[k]:null},setItem:function(k,v){d[k]=String(v)},removeItem:function(k){delete d[k]},clear:function(){d={}},key:function(i){var ks=Object.keys(d);return i<ks.length?ks[i]:null}};
5
5
  Object.defineProperty(window,'localStorage',{get:function(){return s},configurable:true});
@@ -1 +1 @@
1
- import{br as e,pr as t}from"./element-plus-Buzx8xRf.js";import{S as n}from"./vendor-wERX2bc3.js";import{n as r}from"./_plugin-vue_export-helper-DcQKU19k.js";import{a as i,i as a}from"./configStore-u3FUM08v.js";t();var o=6e5;function s(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.name!=`string`||!t.name?null:{name:t.name,detail:typeof t.detail==`string`&&t.detail?t.detail:null,provider:typeof t.provider==`string`&&t.provider?t.provider:null,source:t.source===`config`||t.source===`state`?t.source:null}}var c=n(`tools`,()=>{let t=e(!1),n=e(!1),c=e(!1),l=e(!1),u=e(!1),d=e(!1),f=e(!1),p=e(null),m=e(!1),h=e(``),g=e({}),_=e({}),v=e({}),y=e(!1),b=0,x=null;function S(e=!1){return!e&&Date.now()-b<3e5?Promise.resolve():x||(y.value=!0,x=(async()=>{try{let e=await(await fetch(`/api/latest-tool-versions`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})})).json();e.success&&e.latest&&typeof e.latest==`object`&&(v.value=e.latest,b=Date.now())}catch{}finally{y.value=!1,x=null}})(),x)}let C=null;function w(){return C||(m.value=!0,C=(async()=>{try{let e=await(await fetch(`/api/check-tools`)).json();e.success&&(t.value=!!e.vscode,n.value=!!e.claude,c.value=!!e.codex,l.value=!!e.opencode,u.value=!!e.kimi,d.value=!!e.zcode,f.value=!!e.dsh,h.value=typeof e.platform==`string`?e.platform:``,g.value=e.installers&&typeof e.installers==`object`?e.installers:{},_.value=e.versions&&typeof e.versions==`object`?e.versions:{},p.value=Date.now())}catch{}finally{m.value=!1,C=null}})(),C)}function T(e){switch(e){case`vscode`:return t.value;case`claude`:return n.value;case`codex`:return c.value;case`opencode`:return l.value;case`kimi`:return u.value;case`zcode`:return d.value;case`dsh`:return f.value}}let E=e({}),D=e(!1),O=0,k=null;function A(e){if(!D.value)return{status:`unknown`};if(!i(e))return{status:`unset`};let t=E.value[e];return t?{status:`set`,info:t}:{status:`unset`}}function j(e=!1){return!e&&D.value&&Date.now()-O<6e5?Promise.resolve():k||(k=(async()=>{try{let e=await(await fetch(`/api/workbench/executor-models`)).json();if(e?.success&&e.models&&typeof e.models==`object`){let t={};for(let n of a)t[n.id]=s(e.models[n.id]);E.value=t,D.value=!0,O=Date.now()}}catch{}finally{k=null}})(),k)}function M(e){let t=A(e);return t.status===`unknown`?``:t.status===`set`?t.info.name:r(`@42BB9:未在配置中指定`)}function N(e){let t=A(e);return t.status===`set`?[t.info.source===`state`?r(`@42BB9:CLI 内最近使用`):``,t.info.detail,t.info.provider].filter(Boolean).join(` · `):``}let P=null;function F(){P||=(w(),j(),setInterval(()=>{w(),j()},o))}function I(){P&&=(clearInterval(P),null)}return{vscodeAvailable:t,claudeAvailable:n,codexAvailable:c,opencodeAvailable:l,kimiAvailable:u,zcodeAvailable:d,dshAvailable:f,lastCheckedAt:p,isChecking:m,platform:h,installers:g,versions:_,latestVersions:v,isFetchingLatest:y,isToolAvailable:T,executorModels:E,executorModelsReady:D,executorModelState:A,executorModelText:M,executorModelDetail:N,fetchExecutorModels:j,checkTools:w,fetchLatestVersions:S,startPolling:F,stopPolling:I}});export{c as t};
1
+ import{br as e,pr as t}from"./element-plus-Buzx8xRf.js";import{S as n}from"./vendor-wERX2bc3.js";import{n as r}from"./_plugin-vue_export-helper-DqKDIY1f.js";import{a as i,i as a}from"./configStore-CqbN-y1x.js";t();var o=6e5;function s(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.name!=`string`||!t.name?null:{name:t.name,detail:typeof t.detail==`string`&&t.detail?t.detail:null,provider:typeof t.provider==`string`&&t.provider?t.provider:null,source:t.source===`config`||t.source===`state`?t.source:null}}var c=n(`tools`,()=>{let t=e(!1),n=e(!1),c=e(!1),l=e(!1),u=e(!1),d=e(!1),f=e(!1),p=e(null),m=e(!1),h=e(``),g=e({}),_=e({}),v=e({}),y=e(!1),b=0,x=null;function S(e=!1){return!e&&Date.now()-b<3e5?Promise.resolve():x||(y.value=!0,x=(async()=>{try{let e=await(await fetch(`/api/latest-tool-versions`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})})).json();e.success&&e.latest&&typeof e.latest==`object`&&(v.value=e.latest,b=Date.now())}catch{}finally{y.value=!1,x=null}})(),x)}let C=null;function w(){return C||(m.value=!0,C=(async()=>{try{let e=await(await fetch(`/api/check-tools`)).json();e.success&&(t.value=!!e.vscode,n.value=!!e.claude,c.value=!!e.codex,l.value=!!e.opencode,u.value=!!e.kimi,d.value=!!e.zcode,f.value=!!e.dsh,h.value=typeof e.platform==`string`?e.platform:``,g.value=e.installers&&typeof e.installers==`object`?e.installers:{},_.value=e.versions&&typeof e.versions==`object`?e.versions:{},p.value=Date.now())}catch{}finally{m.value=!1,C=null}})(),C)}function T(e){switch(e){case`vscode`:return t.value;case`claude`:return n.value;case`codex`:return c.value;case`opencode`:return l.value;case`kimi`:return u.value;case`zcode`:return d.value;case`dsh`:return f.value}}let E=e({}),D=e(!1),O=0,k=null;function A(e){if(!D.value)return{status:`unknown`};if(!i(e))return{status:`unset`};let t=E.value[e];return t?{status:`set`,info:t}:{status:`unset`}}function j(e=!1){return!e&&D.value&&Date.now()-O<6e5?Promise.resolve():k||(k=(async()=>{try{let e=await(await fetch(`/api/workbench/executor-models`)).json();if(e?.success&&e.models&&typeof e.models==`object`){let t={};for(let n of a)t[n.id]=s(e.models[n.id]);E.value=t,D.value=!0,O=Date.now()}}catch{}finally{k=null}})(),k)}function M(e){let t=A(e);return t.status===`unknown`?``:t.status===`set`?t.info.name:r(`@42BB9:未在配置中指定`)}function N(e){let t=A(e);return t.status===`set`?[t.info.source===`state`?r(`@42BB9:CLI 内最近使用`):``,t.info.detail,t.info.provider].filter(Boolean).join(` · `):``}let P=null;function F(){P||=(w(),j(),setInterval(()=>{w(),j()},o))}function I(){P&&=(clearInterval(P),null)}return{vscodeAvailable:t,claudeAvailable:n,codexAvailable:c,opencodeAvailable:l,kimiAvailable:u,zcodeAvailable:d,dshAvailable:f,lastCheckedAt:p,isChecking:m,platform:h,installers:g,versions:_,latestVersions:v,isFetchingLatest:y,isToolAvailable:T,executorModels:E,executorModelsReady:D,executorModelState:A,executorModelText:M,executorModelDetail:N,fetchExecutorModels:j,checkTools:w,fetchLatestVersions:S,startPolling:F,stopPolling:I}});export{c as t};
@@ -10,26 +10,26 @@
10
10
  <meta name="theme-color" content="#141820" media="(prefers-color-scheme: dark)" />
11
11
  <title>Zen GitSync</title>
12
12
  <!-- 字体改为自托管(@font-face 见 src/main.css),不再依赖 Google Fonts 外链 -->
13
- <script type="module" crossorigin src="/assets/index-DorcTBZN.js"></script>
13
+ <script type="module" crossorigin src="/assets/index-DkTmqIha.js"></script>
14
14
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/dagre-CDSwApuC.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/element-plus-Buzx8xRf.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/vendor-wERX2bc3.js">
18
- <link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-DcQKU19k.js">
19
- <link rel="modulepreload" crossorigin href="/assets/SvgIcon-YQZtv72i.js">
20
- <link rel="modulepreload" crossorigin href="/assets/IconButton-C07zojvw.js">
21
- <link rel="modulepreload" crossorigin href="/assets/configStore-u3FUM08v.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-DqKDIY1f.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/SvgIcon-CBqXx2qp.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/IconButton-CmaM18jB.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/configStore-CqbN-y1x.js">
22
22
  <link rel="modulepreload" crossorigin href="/assets/socket-io-BFqQXqAp.js">
23
- <link rel="modulepreload" crossorigin href="/assets/gitStore-ZjHYEyKS.js">
23
+ <link rel="modulepreload" crossorigin href="/assets/gitStore-BrDeYGjs.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/fileIcon-B5p5pGN9.js">
25
25
  <link rel="modulepreload" crossorigin href="/assets/flow-mindmap-D-65aZb7.js">
26
- <link rel="modulepreload" crossorigin href="/assets/previewSandbox-KLKRAhm4.js">
26
+ <link rel="modulepreload" crossorigin href="/assets/previewSandbox-DAqiCX7e.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/monaco-BD8Gy_t7.js">
28
28
  <link rel="modulepreload" crossorigin href="/assets/useThemeObserver-CWioG2jb.js">
29
- <link rel="modulepreload" crossorigin href="/assets/CommonDialog-DuI8Bsg7.js">
30
- <link rel="modulepreload" crossorigin href="/assets/FileDiffViewer-DtGtQGLR.js">
31
- <link rel="modulepreload" crossorigin href="/assets/toolsStore-CfyhqJeq.js">
32
- <link rel="modulepreload" crossorigin href="/assets/TemplateManager-zSKmah02.js">
29
+ <link rel="modulepreload" crossorigin href="/assets/CommonDialog-C3ruJAse.js">
30
+ <link rel="modulepreload" crossorigin href="/assets/FileDiffViewer-B5cXoziJ.js">
31
+ <link rel="modulepreload" crossorigin href="/assets/toolsStore-DVWI6-BS.js">
32
+ <link rel="modulepreload" crossorigin href="/assets/TemplateManager-Bd9A3dXY.js">
33
33
  <link rel="modulepreload" crossorigin href="/assets/vue-flow-KUZI4f_9.js">
34
34
  <link rel="stylesheet" crossorigin href="/assets/element-plus-Qexo5hiM.css">
35
35
  <link rel="stylesheet" crossorigin href="/assets/vendor-CP-WuGZG.css">
@@ -42,7 +42,7 @@
42
42
  <link rel="stylesheet" crossorigin href="/assets/FileDiffViewer-n5ea9qMe.css">
43
43
  <link rel="stylesheet" crossorigin href="/assets/TemplateManager-DO7EPfj8.css">
44
44
  <link rel="stylesheet" crossorigin href="/assets/vue-flow-CavUTEzp.css">
45
- <link rel="stylesheet" crossorigin href="/assets/index-BaV4YcQ6.css">
45
+ <link rel="stylesheet" crossorigin href="/assets/index-DTR0zSQP.css">
46
46
  </head>
47
47
  <body>
48
48
  <div id="app"></div>
@@ -41,6 +41,7 @@ import { registerGitRoutes } from './routes/git.js';
41
41
  import { registerFsRoutes } from './routes/fs.js';
42
42
  import { registerRecentDirectoriesSummaryRoutes } from './routes/recentDirectoriesAiSummary.js';
43
43
  import { registerNpmRoutes } from './routes/npm.js';
44
+ import { registerProjectStartupAiRoutes } from './routes/projectStartupAi.js';
44
45
  import { registerFileOpenRoutes } from './routes/fileOpen.js';
45
46
  import { registerLocalReposRoutes } from './routes/localRepos.js';
46
47
  import { registerExplorerContextMenuRoutes } from './routes/explorerContextMenu.js';
@@ -413,6 +414,14 @@ async function startUIServer(noOpen = false, savePort = false) {
413
414
  getCurrentProjectPath: () => currentProjectPath
414
415
  });
415
416
 
417
+ // 「AI 启动建议」面板(Git 视图左栏,NPM 脚本面板上方):
418
+ // 扫出项目事实交默认模型,换回一份有序、可直接点启动的清单
419
+ registerProjectStartupAiRoutes({
420
+ app,
421
+ configManager,
422
+ getCurrentProjectPath: () => currentProjectPath
423
+ });
424
+
416
425
  registerFileOpenRoutes({
417
426
  app
418
427
  });