zen-gitsync 2.14.1 → 2.14.2

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 (25) hide show
  1. package/package.json +1 -1
  2. package/src/ui/public/assets/{AppVersionBadge-zv0-I77-.js → AppVersionBadge-M9ydXpd9.js} +1 -1
  3. package/src/ui/public/assets/{BranchSelector-D7-iEofR.js → BranchSelector-scIk6OeM.js} +1 -1
  4. package/src/ui/public/assets/{CommandConsole-Bu6N8qeh.js → CommandConsole-BikQuarw.js} +2 -2
  5. package/src/ui/public/assets/{CommitForm-C11gIhY6.js → CommitForm-DuvNxUdP.js} +1 -1
  6. package/src/ui/public/assets/{EditorView-Ce6CTr9d.js → EditorView-rGLnccH3.js} +0 -0
  7. package/src/ui/public/assets/{FlowExecutionViewer-DA_gtjWd.js → FlowExecutionViewer-B4BADP8e.js} +1 -1
  8. package/src/ui/public/assets/{FlowOrchestrationWorkspace-BJ6tqbOP.js → FlowOrchestrationWorkspace-C3l3Jco7.js} +1 -1
  9. package/src/ui/public/assets/{LogList-DYGfJdcb.js → LogList-7agk5Obq.js} +1 -1
  10. package/src/ui/public/assets/MindmapView-B8rUSi-e.css +1 -0
  11. package/src/ui/public/assets/MindmapView-mOFG9TmR.js +1 -0
  12. package/src/ui/public/assets/{ProjectStartupButton-C3LM1U1R.js → ProjectStartupButton-CgS14qyg.js} +1 -1
  13. package/src/ui/public/assets/{RemoteRepoCard-ebapcxCN.js → RemoteRepoCard-CFKl6CB9.js} +1 -1
  14. package/src/ui/public/assets/{SourceMapView-CFTKhZQi.js → SourceMapView-Dsc_a3t7.js} +1 -1
  15. package/src/ui/public/assets/{UserInputNode-CfmSt5Mh.js → UserInputNode-yBT2005h.js} +1 -1
  16. package/src/ui/public/assets/{WorkbenchView-kAXgcs6z.js → WorkbenchView-CiG-qMl7.js} +1 -1
  17. package/src/ui/public/assets/configStore-Cq6Qwn35.js +1 -0
  18. package/src/ui/public/assets/{index-C1q8_YYO.js → index-CPqKvZBK.js} +3 -3
  19. package/src/ui/public/index.html +2 -2
  20. package/src/ui/server/index.js +130 -2
  21. package/src/ui/server/routes/gitOps.js +8 -4
  22. package/src/utils/index.js +165 -12
  23. package/src/ui/public/assets/MindmapView-Az3mQBEW.js +0 -1
  24. package/src/ui/public/assets/MindmapView-RpSZW35N.css +0 -1
  25. package/src/ui/public/assets/configStore-DHCrsR6z.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zen-gitsync",
3
- "version": "2.14.1",
3
+ "version": "2.14.2",
4
4
  "description": "Auto commit, scheduled sync, and visual GUI for Git. Run `g` in any repo for one-key commit & push, AI commit messages, scheduled background sync, and a drag-and-drop workflow builder.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -1,2 +1,2 @@
1
1
  import"./rolldown-runtime-CMxvf4Kt.js";import{B as e,Cn as t,D as n,Et as r,Fn as i,G as a,Jn as o,Kn as s,Ln as c,Mn as l,Pn as u,Sn as d,Tn as f,Y as p,_n as m,a as h,ar as g,dr as _,fr as v,gn as y,hn as b,hr as x,i as S,mn as C,nt as w,rt as T,vn as E}from"./element-plus-B6Owr5jY.js";import{n as D,t as O}from"./_plugin-vue_export-helper-BMXWW0fG.js";async function k(e,t){let n=e.body.getReader(),r=new TextDecoder(`utf-8`),i=``;for(;;){let{done:e,value:a}=await n.read();if(e)break;i+=r.decode(a,{stream:!0});let o=i.split(`
2
- `);i=o.pop()??``;for(let e of o)e.trim()&&t(e)}i.trim()&&t(i)}async function A(){let e=await fetch(`/api/app-version`);return e.ok?e.json():{success:!1,current:``,latest:null,hasUpdate:!1,error:`HTTP ${e.status}`}}async function j(e){let t=await fetch(`/api/app-upgrade`,{method:`POST`});if(!t.ok){let n=`HTTP ${t.status}`;try{let e=await t.json();e?.error&&(n=e.error)}catch{}e({type:`error`,message:n}),e({type:`done`,code:t.status});return}if(!t.body){e({type:`error`,message:`响应无 body`}),e({type:`done`,code:-1});return}await k(t,t=>{try{e(JSON.parse(t))}catch{}})}async function M(){let e=await fetch(`/api/app-restart`,{method:`POST`});if(!e.ok){let t=`HTTP ${e.status}`;try{let n=await e.json();n?.error&&(t=n.error)}catch{}throw Error(t)}if(!e.body)throw Error(`响应无 body`);return new Promise((t,n)=>{let r=!1,i=e=>{r||(r=!0,e())};k(e,e=>{try{let r=JSON.parse(e);r.type===`ready`&&typeof r.port==`number`&&r.port>0?i(()=>t(r.port)):r.type===`timeout`?i(()=>n(Error(`restart.timeout`))):r.type===`error`&&i(()=>n(Error(r.message||`restart.failed`)))}catch{}}).then(()=>{i(()=>n(Error(`restart.stream-closed`)))}).catch(()=>{})})}var N={key:3},P={key:4},F={key:5},I={key:0,class:`upgrade-hint`},L={key:0,class:`upgrade-countdown`},R=O(f({__name:`UpgradeDialog`,props:{modelValue:{type:Boolean},logs:{},status:{},countdown:{default:0}},emits:[`update:modelValue`,`retry`,`restart`,`cancel`],setup(i,{emit:a}){let u=i,f=a,h=g(null);s(()=>u.logs,async()=>{await l(),h.value&&(h.value.scrollTop=h.value.scrollHeight)});function S(){u.status!==`running`&&(u.status===`success`&&u.countdown>0&&f(`cancel`),f(`update:modelValue`,!1))}function C(){f(`retry`)}function O(){f(`restart`)}function k(){f(`cancel`),f(`update:modelValue`,!1)}return(a,s)=>{let l=p,u=e,g=n;return c(),y(g,{"model-value":i.modelValue,"onUpdate:modelValue":s[0]||=e=>f(`update:modelValue`,e),title:_(D)(`@F13B4:升级`),width:`680px`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":i.status!==`running`,"append-to-body":``,onClose:S},{footer:o(()=>[i.status===`failed`?(c(),y(u,{key:0,type:`primary`,onClick:C},{default:o(()=>[d(x(_(D)(`@F13B4:重试`)),1)]),_:1})):m(``,!0),i.status===`success`?(c(),y(u,{key:1,type:`primary`,onClick:O},{default:o(()=>[d(x(_(D)(`@F13B4:立即重启并刷新`)),1)]),_:1})):m(``,!0),i.status===`success`?(c(),y(u,{key:2,onClick:k},{default:o(()=>[d(x(_(D)(`@F13B4:稍后手动重启`)),1)]),_:1})):m(``,!0),i.status===`running`?(c(),y(u,{key:3,disabled:``},{default:o(()=>[d(x(_(D)(`@F13B4:升级中`))+`... `,1)]),_:1})):m(``,!0)]),default:o(()=>[b(`div`,{class:v([`upgrade-status`,`is-${i.status}`])},[i.status===`running`?(c(),y(l,{key:0,class:`is-loading`},{default:o(()=>[t(_(r))]),_:1})):i.status===`success`?(c(),y(l,{key:1,color:`#67c23a`},{default:o(()=>[t(_(w))]),_:1})):(c(),y(l,{key:2,color:`#f56c6c`},{default:o(()=>[t(_(T))]),_:1})),i.status===`running`?(c(),E(`span`,N,x(_(D)(`@F13B4:升级中`)),1)):i.status===`success`?(c(),E(`span`,P,x(_(D)(`@F13B4:升级完成`)),1)):(c(),E(`span`,F,x(_(D)(`@F13B4:升级失败`)),1))],2),i.status===`success`?(c(),E(`p`,I,[d(x(_(D)(`@F13B4:新版本已全局安装,需要重启服务才能生效`))+` `,1),i.countdown>0?(c(),E(`span`,L,x(_(D)(`@F13B4:{seconds} 秒后自动刷新`,{seconds:i.countdown})),1)):m(``,!0)])):m(``,!0),b(`pre`,{ref_key:`logEl`,ref:h,class:`upgrade-log`},x(i.logs||_(D)(`@F13B4:等待日志输出`)),513)]),_:1},8,[`model-value`,`title`,`show-close`])}}}),[[`__scopeId`,`data-v-3de8edac`]]),z={class:`app-version-badge`},B=[`aria-label`],V=[`aria-label`],H=[`title`,`aria-label`],U={class:`upgrade-btn__label`},W={class:`upgrade-btn__version`},G=`https://github.com/xz333221/zen-gitsync/releases`,K=5,q=`app-version-check`,J=3600*1e3,Y=O(f({__name:`AppVersionBadge`,setup(e){let n=`2.14.1`,r=g(n),s=C(()=>r.value||n),l=g(null),d=g(!1),f=g(``),p=g(`running`),v=g(0),y=null,w=g(!1);function T(){try{let e=sessionStorage.getItem(q);if(!e)return null;let{at:t,data:n}=JSON.parse(e);return Date.now()-t>J?null:n}catch{return null}}function O(e){try{sessionStorage.setItem(q,JSON.stringify({at:Date.now(),data:e}))}catch{}}async function k(e=!1){let t=T();t&&(l.value=t);try{let t=await A();l.value=t,O(t),t.current&&(r.value=t.current),!e&&t.success&&t.hasUpdate&&h({type:`success`,message:D(`@F13B4:发现新版本 {version}`,{version:t.latest??``}),duration:4e3})}catch(t){e||h({type:`warning`,message:D(`@F13B4:检查更新失败 {error}`,{error:t?.message||``})})}}async function N(){if(l.value?.hasUpdate){try{await S.confirm(D(`@F13B4:确定要从 {current} 升级到 {latest} 吗?`,{current:l.value.current,latest:l.value.latest}),D(`@F13B4:升级`),{confirmButtonText:D(`@F13B4:确定升级`),cancelButtonText:D(`@F13B4:取消`),type:`info`})}catch{return}f.value=``,p.value=`running`,d.value=!0,await j(e=>{if(e.type===`done`){if(p.value=e.code===0?`success`:`failed`,e.code===0){try{sessionStorage.removeItem(q)}catch{}l.value?.latest&&(r.value=l.value.latest),P()}}else e.message&&(f.value+=e.message)})}}function P(){F(),v.value=K,y=setInterval(()=>{--v.value,v.value<=0&&(y&&=(clearInterval(y),null),L())},1e3)}function F(){y&&=(clearInterval(y),null),v.value=0}function I(){F()}async function L(){if(F(),!w.value){w.value=!0;try{let e=await M(),{pathname:t,search:n,hash:r}=window.location;window.location.href=`http://localhost:${e}${t}${n}${r}`}catch(e){let t=e?.message||``,n={"restart.timeout":`@F13B4:重启超时`,"restart.stream-closed":`@F13B4:重启失败,请刷新页面重试`,"restart.failed":`@F13B4:重启失败`}[t];h({type:`warning`,message:n?D(n):D(`@F13B4:重启失败 {error}`,{error:t})}),w.value=!1}}}return u(()=>{F()}),i(()=>{k(!0)}),(e,n)=>{let r=a;return c(),E(`div`,z,[t(r,{content:_(D)(`@F13B4:在 GitHub 上查看源码`),placement:`top`,effect:`dark`,"show-after":300},{default:o(()=>[b(`a`,{href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link`,"aria-label":_(D)(`@F13B4:在 GitHub 上查看源码`)},[...n[1]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[b(`path`,{d:`M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844a9.59 9.59 0 0 1 2.504.337c1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.02 10.02 0 0 0 22 12.017C22 6.484 17.522 2 12 2z`})],-1)]],8,B)]),_:1},8,[`content`]),t(r,{content:_(D)(`@F13B4:在 npm 上查看包`),placement:`top`,effect:`dark`,"show-after":300},{default:o(()=>[b(`a`,{href:`https://www.npmjs.com/package/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link badge-icon-link--npm`,"aria-label":_(D)(`@F13B4:在 npm 上查看包`)},[...n[2]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[b(`path`,{d:`M2 2v20h20V2H2zm17.167 17.167H12.5v-10h-3.333v10H4.833V4.833h14.334v14.334z`})],-1)]],8,V)]),_:1},8,[`content`]),t(r,{content:_(D)(`@F13B4:查看更新`),placement:`top`,effect:`dark`,"show-after":300},{default:o(()=>[b(`a`,{href:G,target:`_blank`,rel:`noopener noreferrer`,class:`version-link`},`v`+x(s.value),1)]),_:1},8,[`content`]),l.value?.hasUpdate?(c(),E(`button`,{key:0,type:`button`,class:`upgrade-btn`,title:_(D)(`@F13B4:发现新版本 {version},点击升级`,{version:l.value.latest??``}),"aria-label":_(D)(`@F13B4:发现新版本 {version},点击升级`,{version:l.value.latest??``}),onClick:N},[n[3]||=b(`span`,{class:`upgrade-btn__dot`,"aria-hidden":`true`},null,-1),b(`span`,U,x(_(D)(`@F13B4:升级`)),1),b(`span`,W,`v`+x(l.value.latest),1)],8,H)):m(``,!0),t(R,{modelValue:d.value,"onUpdate:modelValue":n[0]||=e=>d.value=e,logs:f.value,status:p.value,countdown:v.value,onRetry:N,onRestart:L,onCancel:I},null,8,[`modelValue`,`logs`,`status`,`countdown`])])}}}),[[`__scopeId`,`data-v-bc7c0d5c`]]);export{Y as default};
2
+ `);i=o.pop()??``;for(let e of o)e.trim()&&t(e)}i.trim()&&t(i)}async function A(){let e=await fetch(`/api/app-version`);return e.ok?e.json():{success:!1,current:``,latest:null,hasUpdate:!1,error:`HTTP ${e.status}`}}async function j(e){let t=await fetch(`/api/app-upgrade`,{method:`POST`});if(!t.ok){let n=`HTTP ${t.status}`;try{let e=await t.json();e?.error&&(n=e.error)}catch{}e({type:`error`,message:n}),e({type:`done`,code:t.status});return}if(!t.body){e({type:`error`,message:`响应无 body`}),e({type:`done`,code:-1});return}await k(t,t=>{try{e(JSON.parse(t))}catch{}})}async function M(){let e=await fetch(`/api/app-restart`,{method:`POST`});if(!e.ok){let t=`HTTP ${e.status}`;try{let n=await e.json();n?.error&&(t=n.error)}catch{}throw Error(t)}if(!e.body)throw Error(`响应无 body`);return new Promise((t,n)=>{let r=!1,i=e=>{r||(r=!0,e())};k(e,e=>{try{let r=JSON.parse(e);r.type===`ready`&&typeof r.port==`number`&&r.port>0?i(()=>t(r.port)):r.type===`timeout`?i(()=>n(Error(`restart.timeout`))):r.type===`error`&&i(()=>n(Error(r.message||`restart.failed`)))}catch{}}).then(()=>{i(()=>n(Error(`restart.stream-closed`)))}).catch(()=>{})})}var N={key:3},P={key:4},F={key:5},I={key:0,class:`upgrade-hint`},L={key:0,class:`upgrade-countdown`},R=O(f({__name:`UpgradeDialog`,props:{modelValue:{type:Boolean},logs:{},status:{},countdown:{default:0}},emits:[`update:modelValue`,`retry`,`restart`,`cancel`],setup(i,{emit:a}){let u=i,f=a,h=g(null);s(()=>u.logs,async()=>{await l(),h.value&&(h.value.scrollTop=h.value.scrollHeight)});function S(){u.status!==`running`&&(u.status===`success`&&u.countdown>0&&f(`cancel`),f(`update:modelValue`,!1))}function C(){f(`retry`)}function O(){f(`restart`)}function k(){f(`cancel`),f(`update:modelValue`,!1)}return(a,s)=>{let l=p,u=e,g=n;return c(),y(g,{"model-value":i.modelValue,"onUpdate:modelValue":s[0]||=e=>f(`update:modelValue`,e),title:_(D)(`@F13B4:升级`),width:`680px`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":i.status!==`running`,"append-to-body":``,onClose:S},{footer:o(()=>[i.status===`failed`?(c(),y(u,{key:0,type:`primary`,onClick:C},{default:o(()=>[d(x(_(D)(`@F13B4:重试`)),1)]),_:1})):m(``,!0),i.status===`success`?(c(),y(u,{key:1,type:`primary`,onClick:O},{default:o(()=>[d(x(_(D)(`@F13B4:立即重启并刷新`)),1)]),_:1})):m(``,!0),i.status===`success`?(c(),y(u,{key:2,onClick:k},{default:o(()=>[d(x(_(D)(`@F13B4:稍后手动重启`)),1)]),_:1})):m(``,!0),i.status===`running`?(c(),y(u,{key:3,disabled:``},{default:o(()=>[d(x(_(D)(`@F13B4:升级中`))+`... `,1)]),_:1})):m(``,!0)]),default:o(()=>[b(`div`,{class:v([`upgrade-status`,`is-${i.status}`])},[i.status===`running`?(c(),y(l,{key:0,class:`is-loading`},{default:o(()=>[t(_(r))]),_:1})):i.status===`success`?(c(),y(l,{key:1,color:`#67c23a`},{default:o(()=>[t(_(w))]),_:1})):(c(),y(l,{key:2,color:`#f56c6c`},{default:o(()=>[t(_(T))]),_:1})),i.status===`running`?(c(),E(`span`,N,x(_(D)(`@F13B4:升级中`)),1)):i.status===`success`?(c(),E(`span`,P,x(_(D)(`@F13B4:升级完成`)),1)):(c(),E(`span`,F,x(_(D)(`@F13B4:升级失败`)),1))],2),i.status===`success`?(c(),E(`p`,I,[d(x(_(D)(`@F13B4:新版本已全局安装,需要重启服务才能生效`))+` `,1),i.countdown>0?(c(),E(`span`,L,x(_(D)(`@F13B4:{seconds} 秒后自动刷新`,{seconds:i.countdown})),1)):m(``,!0)])):m(``,!0),b(`pre`,{ref_key:`logEl`,ref:h,class:`upgrade-log`},x(i.logs||_(D)(`@F13B4:等待日志输出`)),513)]),_:1},8,[`model-value`,`title`,`show-close`])}}}),[[`__scopeId`,`data-v-3de8edac`]]),z={class:`app-version-badge`},B=[`aria-label`],V=[`aria-label`],H=[`title`,`aria-label`],U={class:`upgrade-btn__label`},W={class:`upgrade-btn__version`},G=`https://github.com/xz333221/zen-gitsync/releases`,K=5,q=`app-version-check`,J=3600*1e3,Y=O(f({__name:`AppVersionBadge`,setup(e){let n=`2.14.2`,r=g(n),s=C(()=>r.value||n),l=g(null),d=g(!1),f=g(``),p=g(`running`),v=g(0),y=null,w=g(!1);function T(){try{let e=sessionStorage.getItem(q);if(!e)return null;let{at:t,data:n}=JSON.parse(e);return Date.now()-t>J?null:n}catch{return null}}function O(e){try{sessionStorage.setItem(q,JSON.stringify({at:Date.now(),data:e}))}catch{}}async function k(e=!1){let t=T();t&&(l.value=t);try{let t=await A();l.value=t,O(t),t.current&&(r.value=t.current),!e&&t.success&&t.hasUpdate&&h({type:`success`,message:D(`@F13B4:发现新版本 {version}`,{version:t.latest??``}),duration:4e3})}catch(t){e||h({type:`warning`,message:D(`@F13B4:检查更新失败 {error}`,{error:t?.message||``})})}}async function N(){if(l.value?.hasUpdate){try{await S.confirm(D(`@F13B4:确定要从 {current} 升级到 {latest} 吗?`,{current:l.value.current,latest:l.value.latest}),D(`@F13B4:升级`),{confirmButtonText:D(`@F13B4:确定升级`),cancelButtonText:D(`@F13B4:取消`),type:`info`})}catch{return}f.value=``,p.value=`running`,d.value=!0,await j(e=>{if(e.type===`done`){if(p.value=e.code===0?`success`:`failed`,e.code===0){try{sessionStorage.removeItem(q)}catch{}l.value?.latest&&(r.value=l.value.latest),P()}}else e.message&&(f.value+=e.message)})}}function P(){F(),v.value=K,y=setInterval(()=>{--v.value,v.value<=0&&(y&&=(clearInterval(y),null),L())},1e3)}function F(){y&&=(clearInterval(y),null),v.value=0}function I(){F()}async function L(){if(F(),!w.value){w.value=!0;try{let e=await M(),{pathname:t,search:n,hash:r}=window.location;window.location.href=`http://localhost:${e}${t}${n}${r}`}catch(e){let t=e?.message||``,n={"restart.timeout":`@F13B4:重启超时`,"restart.stream-closed":`@F13B4:重启失败,请刷新页面重试`,"restart.failed":`@F13B4:重启失败`}[t];h({type:`warning`,message:n?D(n):D(`@F13B4:重启失败 {error}`,{error:t})}),w.value=!1}}}return u(()=>{F()}),i(()=>{k(!0)}),(e,n)=>{let r=a;return c(),E(`div`,z,[t(r,{content:_(D)(`@F13B4:在 GitHub 上查看源码`),placement:`top`,effect:`dark`,"show-after":300},{default:o(()=>[b(`a`,{href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link`,"aria-label":_(D)(`@F13B4:在 GitHub 上查看源码`)},[...n[1]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[b(`path`,{d:`M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844a9.59 9.59 0 0 1 2.504.337c1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.02 10.02 0 0 0 22 12.017C22 6.484 17.522 2 12 2z`})],-1)]],8,B)]),_:1},8,[`content`]),t(r,{content:_(D)(`@F13B4:在 npm 上查看包`),placement:`top`,effect:`dark`,"show-after":300},{default:o(()=>[b(`a`,{href:`https://www.npmjs.com/package/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link badge-icon-link--npm`,"aria-label":_(D)(`@F13B4:在 npm 上查看包`)},[...n[2]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[b(`path`,{d:`M2 2v20h20V2H2zm17.167 17.167H12.5v-10h-3.333v10H4.833V4.833h14.334v14.334z`})],-1)]],8,V)]),_:1},8,[`content`]),t(r,{content:_(D)(`@F13B4:查看更新`),placement:`top`,effect:`dark`,"show-after":300},{default:o(()=>[b(`a`,{href:G,target:`_blank`,rel:`noopener noreferrer`,class:`version-link`},`v`+x(s.value),1)]),_:1},8,[`content`]),l.value?.hasUpdate?(c(),E(`button`,{key:0,type:`button`,class:`upgrade-btn`,title:_(D)(`@F13B4:发现新版本 {version},点击升级`,{version:l.value.latest??``}),"aria-label":_(D)(`@F13B4:发现新版本 {version},点击升级`,{version:l.value.latest??``}),onClick:N},[n[3]||=b(`span`,{class:`upgrade-btn__dot`,"aria-hidden":`true`},null,-1),b(`span`,U,x(_(D)(`@F13B4:升级`)),1),b(`span`,W,`v`+x(l.value.latest),1)],8,H)):m(``,!0),t(R,{modelValue:d.value,"onUpdate:modelValue":n[0]||=e=>d.value=e,logs:f.value,status:p.value,countdown:v.value,onRetry:N,onRestart:L,onCancel:I},null,8,[`modelValue`,`logs`,`status`,`countdown`])])}}}),[[`__scopeId`,`data-v-bc7c0d5c`]]);export{Y as default};
@@ -1 +1 @@
1
- import"./rolldown-runtime-CMxvf4Kt.js";import{Cn as e,Jn as t,K as n,L as r,Ln as i,Lt as ee,Pt as a,R as o,Tn as te,W as ne,Y as re,_n as s,ar as c,cn as l,dr as u,fr as d,gn as f,hn as p,hr as m,kt as h,mn as g,q as ie,r as _,tt as v,un as y,vn as b,zn as x}from"./element-plus-B6Owr5jY.js";import{n as S,t as C}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{t as w}from"./SvgIcon-Cw2mL_zx.js";import{n as ae,t as oe}from"./CommonDialog-G17HYMln.js";import{b as T}from"./index-C1q8_YYO.js";var E={key:0,class:`branch-info`},D={class:`branch-wrapper`},O={class:`branch-btn`},k={class:`branch-btn-name`},A={class:`branch-btn-caret`},j={class:`branch-popover-inner`},M={class:`branch-search`},N={class:`branch-list`},P=[`onClick`],F={key:1,class:`branch-item-check-placeholder`},I={class:`branch-item-name`},L={key:0,class:`branch-empty`},R={class:`branch-popover-footer`},z={class:`create-branch-content`},B={class:`form-label`},se={class:`form-label`},V={class:`dialog-footer`},H={class:`footer-actions`},U=[`disabled`],W=C(te({__name:`BranchSelector`,emits:[`branchChanged`],setup(te,{emit:C}){let W=T(),G=C,K=c(!1),q=c(``),J=g(()=>{let e=q.value.trim().toLowerCase();return e?W.allBranches.filter(t=>t.toLowerCase().includes(e)):W.allBranches});async function ce(e){if(e===W.currentBranch){K.value=!1;return}K.value=!1,await W.changeBranch(e)&&(G(`branchChanged`),W.refreshLog())}let Y=c(!1),X=c(``),Z=c(``);function le(){K.value=!1,Z.value=W.currentBranch,Y.value=!0}async function Q(){await W.createBranch(X.value,Z.value)&&(Y.value=!1,X.value=``,G(`branchChanged`))}let $=c(!1);async function ue(){if(!$.value){$.value=!0;try{await Promise.all([W.getCurrentBranch(!0),W.getBranchStatus(!0),W.getAllBranches()]),G(`branchChanged`),W.refreshLog()}finally{$.value=!1}}}return(te,c)=>{let g=re,C=ne,T=_,G=ie,de=r,fe=o,pe=n;return u(W).currentBranch?(i(),b(`div`,E,[p(`div`,D,[e(T,{visible:K.value,"onUpdate:visible":c[1]||=e=>K.value=e,placement:`top-start`,width:260,trigger:`click`,"popper-class":`branch-popover`,"show-arrow":!1,onShow:c[2]||=e=>q.value=``},{reference:t(()=>[p(`button`,O,[e(w,{"icon-class":`git-branch`,"class-name":`branch-btn-icon`}),p(`span`,k,m(u(W).currentBranch),1),p(`span`,A,[e(g,null,{default:t(()=>[...c[7]||=[p(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[p(`path`,{fill:`currentColor`,d:`M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.776a29.12 29.12 0 0 0 0-41.6 30.592 30.592 0 0 0-42.752 0z`})],-1)]]),_:1})])])]),default:t(()=>[p(`div`,j,[p(`div`,M,[e(C,{modelValue:q.value,"onUpdate:modelValue":c[0]||=e=>q.value=e,placeholder:u(S)(`@F13B4:搜索或签出分支`),size:`small`,clearable:``,autofocus:``},null,8,[`modelValue`,`placeholder`])]),p(`div`,N,[(i(!0),b(y,null,x(J.value,n=>(i(),b(`div`,{key:n,class:d([`branch-item`,{"is-active":n===u(W).currentBranch}]),onClick:e=>ce(n)},[n===u(W).currentBranch?(i(),f(g,{key:0,class:`branch-item-check`},{default:t(()=>[e(u(v))]),_:1})):(i(),b(`span`,F)),e(w,{"icon-class":`git-branch`,"class-name":`branch-item-icon`}),p(`span`,I,m(n),1)],10,P))),128)),J.value.length===0?(i(),b(`div`,L,m(u(S)(`@F13B4:没有匹配的分支`)),1)):s(``,!0)]),p(`div`,R,[p(`button`,{class:`branch-create-btn`,onClick:le},[e(g,null,{default:t(()=>[e(u(a))]),_:1}),p(`span`,null,m(u(S)(`@F13B4:创建新分支`)),1)])])])]),_:1},8,[`visible`]),e(ae,{tooltip:u(S)(`@CMDCON:刷新`),onClick:ue},{default:t(()=>[e(g,{class:d({"is-loading":$.value})},{default:t(()=>[e(u(ee))]),_:1},8,[`class`])]),_:1},8,[`tooltip`])]),e(oe,{modelValue:Y.value,"onUpdate:modelValue":c[6]||=e=>Y.value=e,title:u(S)(`@F13B4:创建新分支`),size:`small`,"destroy-on-close":!0,"append-to-body":!0,"custom-class":`create-branch-dialog`},{footer:t(()=>[p(`div`,V,[p(`div`,H,[p(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:c[5]||=e=>Y.value=!1},m(u(S)(`@F13B4:取消`)),1),p(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:Q,disabled:u(W).isCreatingBranch},[u(W).isCreatingBranch?(i(),f(g,{key:1,class:`is-loading`},{default:t(()=>[...c[8]||=[p(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[p(`path`,{fill:`currentColor`,d:`M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32z`})],-1)]]),_:1})):(i(),f(g,{key:0},{default:t(()=>[e(u(v))]),_:1})),p(`span`,null,m(u(S)(`@F13B4:创建`)),1)],8,U)])])]),default:t(()=>[p(`div`,z,[e(pe,{model:{newBranchName:X.value,selectedBaseBranch:Z.value},"label-position":`top`},{default:t(()=>[e(G,null,{label:t(()=>[p(`div`,B,[e(g,{class:`label-icon`},{default:t(()=>[e(u(a))]),_:1}),p(`span`,null,m(u(S)(`@F13B4:新分支名称`)),1)])]),default:t(()=>[e(C,{modelValue:X.value,"onUpdate:modelValue":c[3]||=e=>X.value=e,placeholder:u(S)(`@F13B4:请输入新分支名称`),class:`modern-input`,size:`large`,onKeyup:l(Q,[`enter`])},null,8,[`modelValue`,`placeholder`])]),_:1}),e(G,null,{label:t(()=>[p(`div`,se,[e(g,{class:`label-icon`},{default:t(()=>[e(u(h))]),_:1}),p(`span`,null,m(u(S)(`@F13B4:基于分支`)),1)])]),default:t(()=>[e(fe,{modelValue:Z.value,"onUpdate:modelValue":c[4]||=e=>Z.value=e,placeholder:u(S)(`@F13B4:选择基础分支`),class:`modern-select`,size:`large`,style:{width:`100%`}},{default:t(()=>[(i(!0),b(y,null,x(u(W).allBranches,e=>(i(),f(de,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1})]),_:1},8,[`model`])])]),_:1},8,[`modelValue`,`title`])])):s(``,!0)}}}),[[`__scopeId`,`data-v-665171bc`]]);export{W as default};
1
+ import"./rolldown-runtime-CMxvf4Kt.js";import{Cn as e,Jn as t,K as n,L as r,Ln as i,Lt as ee,Pt as a,R as o,Tn as te,W as ne,Y as re,_n as s,ar as c,cn as l,dr as u,fr as d,gn as f,hn as p,hr as m,kt as h,mn as g,q as ie,r as _,tt as v,un as y,vn as b,zn as x}from"./element-plus-B6Owr5jY.js";import{n as S,t as C}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{t as w}from"./SvgIcon-Cw2mL_zx.js";import{n as ae,t as oe}from"./CommonDialog-G17HYMln.js";import{b as T}from"./index-CPqKvZBK.js";var E={key:0,class:`branch-info`},D={class:`branch-wrapper`},O={class:`branch-btn`},k={class:`branch-btn-name`},A={class:`branch-btn-caret`},j={class:`branch-popover-inner`},M={class:`branch-search`},N={class:`branch-list`},P=[`onClick`],F={key:1,class:`branch-item-check-placeholder`},I={class:`branch-item-name`},L={key:0,class:`branch-empty`},R={class:`branch-popover-footer`},z={class:`create-branch-content`},B={class:`form-label`},se={class:`form-label`},V={class:`dialog-footer`},H={class:`footer-actions`},U=[`disabled`],W=C(te({__name:`BranchSelector`,emits:[`branchChanged`],setup(te,{emit:C}){let W=T(),G=C,K=c(!1),q=c(``),J=g(()=>{let e=q.value.trim().toLowerCase();return e?W.allBranches.filter(t=>t.toLowerCase().includes(e)):W.allBranches});async function ce(e){if(e===W.currentBranch){K.value=!1;return}K.value=!1,await W.changeBranch(e)&&(G(`branchChanged`),W.refreshLog())}let Y=c(!1),X=c(``),Z=c(``);function le(){K.value=!1,Z.value=W.currentBranch,Y.value=!0}async function Q(){await W.createBranch(X.value,Z.value)&&(Y.value=!1,X.value=``,G(`branchChanged`))}let $=c(!1);async function ue(){if(!$.value){$.value=!0;try{await Promise.all([W.getCurrentBranch(!0),W.getBranchStatus(!0),W.getAllBranches()]),G(`branchChanged`),W.refreshLog()}finally{$.value=!1}}}return(te,c)=>{let g=re,C=ne,T=_,G=ie,de=r,fe=o,pe=n;return u(W).currentBranch?(i(),b(`div`,E,[p(`div`,D,[e(T,{visible:K.value,"onUpdate:visible":c[1]||=e=>K.value=e,placement:`top-start`,width:260,trigger:`click`,"popper-class":`branch-popover`,"show-arrow":!1,onShow:c[2]||=e=>q.value=``},{reference:t(()=>[p(`button`,O,[e(w,{"icon-class":`git-branch`,"class-name":`branch-btn-icon`}),p(`span`,k,m(u(W).currentBranch),1),p(`span`,A,[e(g,null,{default:t(()=>[...c[7]||=[p(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[p(`path`,{fill:`currentColor`,d:`M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.776a29.12 29.12 0 0 0 0-41.6 30.592 30.592 0 0 0-42.752 0z`})],-1)]]),_:1})])])]),default:t(()=>[p(`div`,j,[p(`div`,M,[e(C,{modelValue:q.value,"onUpdate:modelValue":c[0]||=e=>q.value=e,placeholder:u(S)(`@F13B4:搜索或签出分支`),size:`small`,clearable:``,autofocus:``},null,8,[`modelValue`,`placeholder`])]),p(`div`,N,[(i(!0),b(y,null,x(J.value,n=>(i(),b(`div`,{key:n,class:d([`branch-item`,{"is-active":n===u(W).currentBranch}]),onClick:e=>ce(n)},[n===u(W).currentBranch?(i(),f(g,{key:0,class:`branch-item-check`},{default:t(()=>[e(u(v))]),_:1})):(i(),b(`span`,F)),e(w,{"icon-class":`git-branch`,"class-name":`branch-item-icon`}),p(`span`,I,m(n),1)],10,P))),128)),J.value.length===0?(i(),b(`div`,L,m(u(S)(`@F13B4:没有匹配的分支`)),1)):s(``,!0)]),p(`div`,R,[p(`button`,{class:`branch-create-btn`,onClick:le},[e(g,null,{default:t(()=>[e(u(a))]),_:1}),p(`span`,null,m(u(S)(`@F13B4:创建新分支`)),1)])])])]),_:1},8,[`visible`]),e(ae,{tooltip:u(S)(`@CMDCON:刷新`),onClick:ue},{default:t(()=>[e(g,{class:d({"is-loading":$.value})},{default:t(()=>[e(u(ee))]),_:1},8,[`class`])]),_:1},8,[`tooltip`])]),e(oe,{modelValue:Y.value,"onUpdate:modelValue":c[6]||=e=>Y.value=e,title:u(S)(`@F13B4:创建新分支`),size:`small`,"destroy-on-close":!0,"append-to-body":!0,"custom-class":`create-branch-dialog`},{footer:t(()=>[p(`div`,V,[p(`div`,H,[p(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:c[5]||=e=>Y.value=!1},m(u(S)(`@F13B4:取消`)),1),p(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:Q,disabled:u(W).isCreatingBranch},[u(W).isCreatingBranch?(i(),f(g,{key:1,class:`is-loading`},{default:t(()=>[...c[8]||=[p(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[p(`path`,{fill:`currentColor`,d:`M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32z`})],-1)]]),_:1})):(i(),f(g,{key:0},{default:t(()=>[e(u(v))]),_:1})),p(`span`,null,m(u(S)(`@F13B4:创建`)),1)],8,U)])])]),default:t(()=>[p(`div`,z,[e(pe,{model:{newBranchName:X.value,selectedBaseBranch:Z.value},"label-position":`top`},{default:t(()=>[e(G,null,{label:t(()=>[p(`div`,B,[e(g,{class:`label-icon`},{default:t(()=>[e(u(a))]),_:1}),p(`span`,null,m(u(S)(`@F13B4:新分支名称`)),1)])]),default:t(()=>[e(C,{modelValue:X.value,"onUpdate:modelValue":c[3]||=e=>X.value=e,placeholder:u(S)(`@F13B4:请输入新分支名称`),class:`modern-input`,size:`large`,onKeyup:l(Q,[`enter`])},null,8,[`modelValue`,`placeholder`])]),_:1}),e(G,null,{label:t(()=>[p(`div`,se,[e(g,{class:`label-icon`},{default:t(()=>[e(u(h))]),_:1}),p(`span`,null,m(u(S)(`@F13B4:基于分支`)),1)])]),default:t(()=>[e(fe,{modelValue:Z.value,"onUpdate:modelValue":c[4]||=e=>Z.value=e,placeholder:u(S)(`@F13B4:选择基础分支`),class:`modern-select`,size:`large`,style:{width:`100%`}},{default:t(()=>[(i(!0),b(y,null,x(u(W).allBranches,e=>(i(),f(de,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1})]),_:1},8,[`model`])])]),_:1},8,[`modelValue`,`title`])])):s(``,!0)}}}),[[`__scopeId`,`data-v-665171bc`]]);export{W as default};
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-C1q8_YYO.js","assets/_plugin-vue_export-helper-BMXWW0fG.js","assets/vendor-BuiZXcjj.js","assets/rolldown-runtime-CMxvf4Kt.js","assets/monaco-BFLoT2VD.js","assets/monaco-B2lPvkrc.css","assets/element-plus-B6Owr5jY.js","assets/element-plus-D06ZgZjR.css","assets/vendor-DNI_idR2.css","assets/socket-io-z4n873W1.js","assets/vue-flow-C6RXt-U3.js","assets/vue-flow-CavUTEzp.css","assets/CommonDialog-G17HYMln.js","assets/SvgIcon-Cw2mL_zx.js","assets/SvgIcon-BQ6bR7l0.css","assets/CommonDialog-Cyh3xu0p.css","assets/configStore-DHCrsR6z.js","assets/index-gbRjS0sL.css","assets/ProjectStartupButton-C3LM1U1R.js","assets/ProjectStartupButton-B7zvqRj_.css","assets/FlowOrchestrationWorkspace-BJ6tqbOP.js","assets/dagre-CWIGcX9d.js","assets/UserInputNode-CfmSt5Mh.js","assets/UserInputNode-DDtvv9Iq.css","assets/FlowOrchestrationWorkspace-BAQDU9Jd.css","assets/FlowExecutionViewer-DA_gtjWd.js","assets/FlowExecutionViewer-B5kh7VxS.css"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{B as t,Cn as n,Et as r,Fn as i,Ft as a,G as o,Gt as s,In as c,Jn as l,Kn as u,Kt as d,Ln as f,Mn as p,Sn as m,Tn as h,W as ee,X as te,Xt as ne,Y as re,Yn as ie,_n as g,a as _,ar as v,c as ae,cn as oe,dr as y,fr as se,gn as b,hn as x,hr as S,i as ce,jt as le,ln as ue,lt as de,mn as C,o as fe,ot as pe,pt as me,s as he,tn as ge,un as _e,vn as w,wn as ve,xt as ye,yt as be,zn as xe,zt as Se}from"./element-plus-B6Owr5jY.js";import{i as Ce}from"./vendor-BuiZXcjj.js";import{n as T,t as we}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{t as Te}from"./SvgIcon-Cw2mL_zx.js";import{n as E,t as Ee}from"./CommonDialog-G17HYMln.js";import{t as De}from"./socket-io-z4n873W1.js";import{t as Oe}from"./configStore-DHCrsR6z.js";import{i as ke}from"./monaco-BFLoT2VD.js";import{b as Ae,u as je,x as Me}from"./index-C1q8_YYO.js";var Ne=e(Ce(),1),D={0:`var(--color-black)`,1:`#cd3131`,2:`#0dbc79`,3:`#e5e510`,4:`#2472c8`,5:`#bc3fbc`,6:`#11a8cd`,7:`#e5e5e5`,8:`#666666`,9:`#f14c4c`,10:`#23d18b`,11:`#f5f543`,12:`#3b8eea`,13:`#d670d6`,14:`#29b8db`,15:`var(--color-white)`};function Pe(e={}){let t=new Ne.default({fg:e.fg??`#e5e5e5`,bg:e.bg??`transparent`,newline:e.newline??!1,escapeXML:e.escapeXML??!1,stream:e.stream??!1,colors:e.colors??D});function n(e){return t.toHtml(e)}return{ansiToHtml:n,converter:t}}function Fe(){let e=v([]),t=v(!1);async function n(){try{t.value=!0;let n=await(await fetch(`/api/terminal-sessions`)).json();n?.success?e.value=Array.isArray(n.sessions)?n.sessions:[]:_.error(n?.error||`获取终端会话失败`)}catch(e){_.error(e?.message||`获取终端会话失败`)}finally{t.value=!1}}async function r(e){try{t.value=!0;let r=await(await fetch(`/api/terminal-sessions/${e.id}/restart`,{method:`POST`})).json();return r?.success?(_.success(`已重新启动终端`),await n(),!0):(_.error(r?.error||`重新启动失败`),!1)}catch(e){return _.error(e?.message||`重新启动失败`),!1}finally{t.value=!1}}async function i(e){try{await ce.confirm(`确定要删除该终端会话记录吗?如果该终端仍在运行,将尝试结束进程。`,`删除终端会话`,{confirmButtonText:`删除`,cancelButtonText:`取消`,type:`warning`})}catch{return!1}try{t.value=!0;let r=await(await fetch(`/api/terminal-sessions/${e.id}`,{method:`DELETE`})).json();return r?.success?(_.success(`已删除`),await n(),!0):(_.error(r?.error||`删除失败`),!1)}catch(e){return _.error(e?.message||`删除失败`),!1}finally{t.value=!1}}function a(t){let n=e.value.findIndex(e=>e.id===t.id);n>=0?e.value.splice(n,1,t):e.value.unshift(t)}return{sessions:e,loading:C(()=>t.value),count:C(()=>e.value.length),refresh:n,restart:r,remove:i,upsert:a}}var Ie={class:`console-header`},Le={class:`header-left`},Re={class:`console-title`},ze={class:`header-actions`},Be={key:0,class:`execution-controls`},Ve={key:1,viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`currentColor`,style:{display:`block`}},He={class:`console-content`},Ue={class:`termial-session`},We={key:0,class:`terminal-sessions-panel`},Ge={class:`terminal-sessions-header`},Ke={class:`terminal-sessions-title`},qe={class:`terminal-sessions-count`},Je={class:`terminal-sessions-actions`},Ye={class:`terminal-sessions-body`},Xe={key:0,class:`terminal-sessions-empty`},Ze={key:1,class:`terminal-sessions-list`},Qe={class:`terminal-session-main`},$e=[`title`],et={class:`terminal-session-pid`},tt={class:`terminal-session-meta`},nt={class:`terminal-session-dir`},rt={class:`terminal-session-actions`},it={key:1,class:`terminal-sessions-collapsed`},at={class:`console-content-main`},ot={key:0,class:`orchestration-flow-panel`},st={class:`flow-panel-header`},ct={class:`flow-panel-title`},lt={key:1,class:`orchestration-steps-panel`},ut={class:`steps-header`},dt={class:`steps-title`},ft={key:0,class:`steps-orchestration`},pt={key:0,class:`steps-list`},mt={class:`step-indicator`},ht={key:4,class:`step-number`},gt={class:`step-content`},_t={class:`step-header`},vt={key:0,class:`step-terminal-tag`,title:`终端执行`},yt={key:1,class:`step-disabled-tag`},bt={class:`step-name`},xt={key:1,class:`terminal-waiting-panel`},St={class:`waiting-content`},Ct={class:`waiting-text`},wt={class:`waiting-desc`},Tt={class:`waiting-actions`},Et={key:2,class:`terminal-waiting-panel user-confirm-panel`},Dt={class:`waiting-content`},Ot={class:`waiting-text`},kt={class:`waiting-desc`},At={class:`waiting-actions`},jt={class:`console-input-row`},Mt=[`title`],Nt={key:2,class:`console-output`},Pt=[`onClick`],Ft={class:`cmd-line`},It={class:`cmd-text`},Lt=[`title`],Rt={class:`ts`},zt={class:`cmd-actions`},Bt={key:0,class:`output-content`},Vt=[`innerHTML`],Ht=[`innerHTML`],Ut={key:0,class:`stdin-input-row`},Wt={class:`user-input-dialog-content`},Gt={key:0,class:`user-input-empty`},Kt={key:1,class:`user-input-form`},qt={class:`user-input-label`},Jt={key:0,class:`required`},O=we(h({__name:`CommandConsole`,setup(e){let h=ve(()=>ke(()=>import(`./index-C1q8_YYO.js`).then(e=>e.d),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]))),Ce=ve(()=>ke(()=>import(`./ProjectStartupButton-C3LM1U1R.js`),__vite__mapDeps([18,1,2,3,4,5,6,7,8,12,13,14,15,16,19]))),we=ve(()=>ke(()=>import(`./FlowOrchestrationWorkspace-BJ6tqbOP.js`),__vite__mapDeps([20,1,2,3,4,5,6,7,8,0,9,10,11,12,13,14,15,16,17,21,22,23,24]))),Ne=ve(()=>ke(()=>import(`./FlowExecutionViewer-DA_gtjWd.js`),__vite__mapDeps([25,1,2,3,4,5,6,7,8,10,11,22,16,23,26]))),D=Oe(),O=Ae();function Yt(){On().catch(e=>{_.error(e?.message||T(`@CF05E:提交后启动项执行失败`))})}async function Xt(e){let t=e?.flowData,n={id:String(e?.id||``).trim(),name:String(e?.name||``).trim()};if(t&&Array.isArray(t?.nodes)&&Array.isArray(t?.edges)){await Zt({flowData:t,orchestrationMeta:n});return}_.warning(T(`@CF05E:该编排缺少流程数据,无法执行`))}async function Zt(e){let t=e?.flowData;if(!t||!Array.isArray(t.nodes)||!Array.isArray(t.edges))return;let n=t.nodes,r=t.edges;J.value=!0,M.value=!0,N.value=!1,I.value=[],L.value=-1,an.value=t,on.value=!0,R.value=null,z.value=[],B.value=[],V.value=[],H.value=(e?.orchestrationMeta?.name||``).trim(),U.value=(e?.orchestrationMeta?.id||``).trim();let i={},a=new Map(n.map(e=>[e.id,e])),o=(e?.startNodeId||``).trim()||n.find(e=>e.type===`start`)?.id;if(!o){_.error(T(`@CF05E:未找到 start 节点`));return}let s=new Map;for(let e of r)s.has(e.source)||s.set(e.source,[]),s.get(e.source).push(e);for(let[e,t]of s.entries()){let n=a.get(e);if(n&&n.type!==`start`&&n.type!==`condition`&&t.length>1){_.error(`节点 ${n.data?.label||n.id} 出边超过 1 条,当前版本不支持`);return}}let c=Math.max(100,n.length*10),l=new Map,u=(e,t,n)=>{let r=e??``,i=n??``;switch(t){case`contains`:return r.includes(i);case`not_contains`:return!r.includes(i);case`isEmpty`:return String(r).trim().length===0;case`isNotEmpty`:return String(r).trim().length>0;case`==`:return r===i;case`!=`:return r!==i;case`>`:case`>=`:case`<`:case`<=`:{let e=Number(r),n=Number(i);return Number.isNaN(e)||Number.isNaN(n)?!1:t===`>`?e>n:t===`>=`?e>=n:t===`<`?e<n:e<=n}default:return!1}},d=(e,t)=>{let n=s.get(e)||[],r=(Array.isArray(t?.conditionBranches)?t.conditionBranches:[]).map(e=>({id:String(e?.id||``),name:String(e?.name||``),handleId:String(e?.handleId||``),priority:typeof e?.priority==`number`?e.priority:Number(e?.priority??0),combine:e?.combine===`any`?`any`:`all`,rules:Array.isArray(e?.rules)?e.rules:[],isDefault:!!e?.isDefault||String(e?.handleId||``)==="default"})).filter(e=>!!e.handleId),a=r.find(e=>e.isDefault)||r.find(e=>e.handleId==="default"),o=r.filter(e=>!e.isDefault&&e.handleId!=="default").sort((e,t)=>(e.priority??0)-(t.priority??0)),c=e=>{let t=Array.isArray(e.rules)?e.rules:[];if(t.length===0)return!1;let n=t.map(e=>{let t=String(e?.left?.nodeId||``).trim(),n=String(e?.left?.outputKey||`stdout`).trim()||`stdout`,r=t&&i?.[t]?.[n]||``;return u(String(r??``),String(e?.op||``),e?.right)});return e.combine===`any`?n.some(Boolean):n.every(Boolean)},l=o.find(e=>c(e));!l&&a&&(l=a);let d=String(l?.handleId||``),f=d?n.find(e=>String(e.sourceHandle||``).trim()===d):void 0;return console.log(`[FLOW][condition]`,{nodeId:e,chosen:l?{name:l.name,handleId:l.handleId,priority:l.priority,isDefault:l.isDefault}:null,outs:n.map(e=>({id:e.id,sourceHandle:e.sourceHandle,target:e.target})),nodeOutputsKeys:Object.keys(i||{})}),f},f=o,p=0;try{for(;f;){if(!M.value)throw Error(T(`@CF05E:用户停止执行`));if(p++>c)throw Error(`执行步数超过上限(${c}),可能存在循环`);let t=l.get(f)||0;if(l.set(f,t+1),t>=10)throw Error(`检测到节点 ${f} 被重复执行过多次,可能存在循环`);let n=a.get(f);if(!n)throw Error(`节点不存在: ${f}`);if(R.value=n.id,n.type===`start`){let e=s.get(n.id)||[];z.value=z.value.includes(n.id)?z.value:[...z.value,n.id],e[0]?.id&&(B.value=B.value.includes(e[0].id)?B.value:[...B.value,e[0].id]),f=e[0]?.target;continue}let r=n.data?.config;if(!r)throw Error(`节点未配置: ${n.data?.label||n.id}`);r.enabled===void 0&&(r.enabled=n.data?.enabled??!0);let o=e?.isSingleExecution===!0;if(r.enabled===!1&&!o){f=(s.get(n.id)||[])[0]?.target;continue}if(n.type===`condition`){let e=d(n.id,r);if(z.value=z.value.includes(n.id)?z.value:[...z.value,n.id],e?.id&&(B.value=B.value.includes(e.id)?B.value:[...B.value,e.id]),f=e?.target,o)break;continue}let u=s.get(n.id)||[],m=e?.isSingleExecution!==!0&&!!u[0]?.target;if(!await Xn([{...r,nodeId:n.id,enabled:r.enabled}],0,!0,e?.orchestrationMeta,{nodeOutputs:i,skipUiSetup:!0,skipUiTeardown:!0,forceTerminalConfirm:m})){n.id&&!V.value.includes(n.id)&&(V.value=[...V.value,n.id]);break}if(!M.value)break;z.value=z.value.includes(n.id)?z.value:[...z.value,n.id];let h=s.get(n.id)||[];if(h[0]?.id&&(B.value=B.value.includes(h[0].id)?B.value:[...B.value,h[0].id]),f=h[0]?.target,o)break}}catch(e){String(e?.message||e)!==T(`@CF05E:用户停止执行`)&&(R.value&&!V.value.includes(R.value)&&(V.value=[...V.value,R.value]),_.error(e?.message||String(e)))}finally{M.value=!1,N.value=!1,L.value=-1,I.value=[],R.value=null}}let Qt=Me(),k=v(null),A=v(``),j=v(``),M=v(!1),N=v(!1),P=v([]),F=0;function $t(){ce.confirm(T(`@CF05E:确定要清空所有执行历史吗?此操作不可撤销。`),T(`@CF05E:清空历史`),{confirmButtonText:T(`@CF05E:清空`),cancelButtonText:T(`@CF05E:取消`),type:`warning`}).then(()=>{P.value=[],_.success(T(`@CF05E:执行历史已清空`))}).catch(()=>{})}function en(){W&&W(!0)}function tn(){W&&W(!1),M.value=!1,N.value=!1}function nn(){G&&G(!0)}function rn(){G&&G(!1),M.value=!1,N.value=!1}let I=v([]),L=v(-1),an=v(null),on=v(!0),R=v(null),z=v([]),B=v([]),V=v([]),H=v(``),U=v(``),sn=v(!1),cn=v(``),W=null,ln=v(!1),un=v(``),G=null,dn=v(!1),fn=v(``),pn=v([]),mn=v({}),K=null,hn=C({get:()=>dn.value,set:e=>{dn.value=e}});function gn(){let e=Array.isArray(pn.value)?pn.value:[];for(let t of e){if(!t?.required)continue;let e=mn.value?.[t.name];if(e==null||String(e).trim()===``){_.warning(T(`@UINPUT:请输入必填参数的值`,{name:t.name}));return}}K&&K(!0)}function _n(){K&&K(!1),M.value=!1,N.value=!1}let{ansiToHtml:q}=Pe(),J=v(!1),Y=C({get:()=>D.ui.commandConsole.useTerminal,set:e=>{D.ui.commandConsole.useTerminal=e}}),{sessions:X,loading:vn,refresh:Z,restart:yn,remove:bn,upsert:xn}=Fe(),Q=C({get:()=>D.ui.commandConsole.showTerminalSessions,set:e=>{D.ui.commandConsole.showTerminalSessions=e}}),Sn=C(()=>X.value.length),Cn=v(!1);function wn(e){return new Promise(t=>setTimeout(t,e))}async function Tn(e=8e3){let t=Date.now();for(;Date.now()-t<e;){if(k.value&&k.value.connected)return!0;await wn(100)}return!1}async function En(e){let t=D.customCommands.find(t=>String(t.id)===String(e));if(!t){_.warning(`启动项命令不存在: ${e}`);return}let n=t.directory||A.value,r=t.command;if(Y.value){try{let e=await(await fetch(`/api/exec-in-terminal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:r,workingDirectory:n})})).json();e?.success?e?.session?xn(e.session):await Z():_.error(e?.error||T(`@CF05E:启动项命令执行失败`))}catch(e){_.error(e?.message||T(`@CF05E:启动项命令执行失败`))}return}if(!await Tn()){_.error(T(`@CF05E:Socket 连接未就绪,无法自动执行交互式启动项`));return}await $n(r,n)}async function Dn(e){let t=D.orchestrations.find(t=>t.id===e);if(!t){_.warning(`启动项工作流不存在: ${e}`);return}await Xt(t)}async function On(){await D.loadConfig(!1);let e=D.afterQuickPushAction;e?.enabled&&e?.refId&&(e.type===`workflow`?await Dn(e.refId):await En(e.refId))}async function kn(){if(Cn.value||(Cn.value=!0,await D.loadConfig(!1),!D.startupAutoRun))return;let e=(D.startupItems||[]).filter(e=>e?.enabled!==!1);if(e.length!==0)for(let t of e)t.type===`workflow`?await Dn(t.refId):await En(t.refId)}let An=e=>Math.min(85,Math.max(15,e)),jn=C({get:()=>An(D.ui.commandConsole.splitPercent),set:e=>{D.ui.commandConsole.splitPercent=An(e)}}),Mn=v(null),Nn=()=>{let e=Mn.value?.$el??Mn.value;if(e&&e.clientWidth)return e.clientWidth;try{return e?.getBoundingClientRect?.().width??0}catch{return 0}},Pn=()=>{let e=Mn.value?.$el??Mn.value;if(!e)return;let t=e.querySelectorAll?.(`.el-splitter__panel`),n=Nn();if(!t||t.length<1||n<=0)return;let r=t[0]?.getBoundingClientRect?.().width??0;if(r>0){let e=An(r/n*100);e!==jn.value&&(jn.value=e)}},Fn=C({get(){return`${An(jn.value)}%`},set(e){let t=NaN;if(typeof e==`number`){let n=Nn();n>0&&!isNaN(e)&&(t=e/n*100)}else if(typeof e==`string`){if(e.endsWith(`%`))t=parseFloat(e);else if(e.endsWith(`px`)){let n=parseFloat(e),r=Nn();r>0&&!isNaN(n)&&(t=n/r*100)}}isNaN(t)||(jn.value=An(t))}});async function In(e=!0){if(X.value.length!==0)try{let t=await(await fetch(`/api/terminal-sessions/status?cleanup=${e?`true`:`false`}`)).json();t?.success&&(X.value=Array.isArray(t.sessions)?t.sessions:[])}catch{}}function Ln(e){let t=String(e||``).trim();if(!t)return``;let n=t.replace(/\/+$/g,``).replace(/\+$/g,``),r=n.split(/[\\/]+/).filter(Boolean);return r[r.length-1]||n}let $=v(!1),Rn=v(!1);async function zn(){let e=j.value.trim();!e||M.value||(j.value=``,await Bn(e,A.value))}async function Bn(e,t=A.value){if(M.value=!0,Y.value){try{let n=await(await fetch(`/api/exec-in-terminal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e,workingDirectory:t})})).json();n?.success?(_.success(T(`@CF05E:已在新终端中执行命令`)),n?.session?xn(n.session):await Z()):_.error(n?.error||T(`@CF05E:执行失败`))}catch(e){_.error(e?.message||T(`@CF05E:执行失败`))}finally{M.value=!1}return}let n={id:++F,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0};P.value.unshift(n),j.value=``;try{console.log(`[前端-控制台] 开始发送流式请求:`,e);let t=await fetch(`/api/exec-stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e,directory:n.directory})});if(console.log(`[前端-控制台] 收到响应,状态:`,t.status,t.statusText),!t.ok)throw Error(`HTTP ${t.status}: ${t.statusText}`);let r=t.body?.getReader(),i=new TextDecoder;if(!r)throw Error(T(`@CF05E:无法读取响应流`));console.log(`[前端-控制台] 开始读取流数据`);let a=``,o=0;for(;;){let{done:e,value:t}=await r.read();if(o++,console.log(`[前端-控制台] 读取数据块 #${o}, done:`,e,`size:`,t?.length||0),e)break;let s=i.decode(t,{stream:!0});console.log(`[前端-控制台] 解码数据块:`,s.substring(0,200)),a+=s;let c=a.split(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CPqKvZBK.js","assets/_plugin-vue_export-helper-BMXWW0fG.js","assets/vendor-BuiZXcjj.js","assets/rolldown-runtime-CMxvf4Kt.js","assets/monaco-BFLoT2VD.js","assets/monaco-B2lPvkrc.css","assets/element-plus-B6Owr5jY.js","assets/element-plus-D06ZgZjR.css","assets/vendor-DNI_idR2.css","assets/socket-io-z4n873W1.js","assets/vue-flow-C6RXt-U3.js","assets/vue-flow-CavUTEzp.css","assets/CommonDialog-G17HYMln.js","assets/SvgIcon-Cw2mL_zx.js","assets/SvgIcon-BQ6bR7l0.css","assets/CommonDialog-Cyh3xu0p.css","assets/configStore-Cq6Qwn35.js","assets/index-gbRjS0sL.css","assets/ProjectStartupButton-CgS14qyg.js","assets/ProjectStartupButton-B7zvqRj_.css","assets/FlowOrchestrationWorkspace-C3l3Jco7.js","assets/dagre-CWIGcX9d.js","assets/UserInputNode-yBT2005h.js","assets/UserInputNode-DDtvv9Iq.css","assets/FlowOrchestrationWorkspace-BAQDU9Jd.css","assets/FlowExecutionViewer-B4BADP8e.js","assets/FlowExecutionViewer-B5kh7VxS.css"])))=>i.map(i=>d[i]);
2
+ import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{B as t,Cn as n,Et as r,Fn as i,Ft as a,G as o,Gt as s,In as c,Jn as l,Kn as u,Kt as d,Ln as f,Mn as p,Sn as m,Tn as h,W as ee,X as te,Xt as ne,Y as re,Yn as ie,_n as g,a as _,ar as v,c as ae,cn as oe,dr as y,fr as se,gn as b,hn as x,hr as S,i as ce,jt as le,ln as ue,lt as de,mn as C,o as fe,ot as pe,pt as me,s as he,tn as ge,un as _e,vn as w,wn as ve,xt as ye,yt as be,zn as xe,zt as Se}from"./element-plus-B6Owr5jY.js";import{i as Ce}from"./vendor-BuiZXcjj.js";import{n as T,t as we}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{t as Te}from"./SvgIcon-Cw2mL_zx.js";import{n as E,t as Ee}from"./CommonDialog-G17HYMln.js";import{t as De}from"./socket-io-z4n873W1.js";import{t as Oe}from"./configStore-Cq6Qwn35.js";import{i as ke}from"./monaco-BFLoT2VD.js";import{b as Ae,u as je,x as Me}from"./index-CPqKvZBK.js";var Ne=e(Ce(),1),D={0:`var(--color-black)`,1:`#cd3131`,2:`#0dbc79`,3:`#e5e510`,4:`#2472c8`,5:`#bc3fbc`,6:`#11a8cd`,7:`#e5e5e5`,8:`#666666`,9:`#f14c4c`,10:`#23d18b`,11:`#f5f543`,12:`#3b8eea`,13:`#d670d6`,14:`#29b8db`,15:`var(--color-white)`};function Pe(e={}){let t=new Ne.default({fg:e.fg??`#e5e5e5`,bg:e.bg??`transparent`,newline:e.newline??!1,escapeXML:e.escapeXML??!1,stream:e.stream??!1,colors:e.colors??D});function n(e){return t.toHtml(e)}return{ansiToHtml:n,converter:t}}function Fe(){let e=v([]),t=v(!1);async function n(){try{t.value=!0;let n=await(await fetch(`/api/terminal-sessions`)).json();n?.success?e.value=Array.isArray(n.sessions)?n.sessions:[]:_.error(n?.error||`获取终端会话失败`)}catch(e){_.error(e?.message||`获取终端会话失败`)}finally{t.value=!1}}async function r(e){try{t.value=!0;let r=await(await fetch(`/api/terminal-sessions/${e.id}/restart`,{method:`POST`})).json();return r?.success?(_.success(`已重新启动终端`),await n(),!0):(_.error(r?.error||`重新启动失败`),!1)}catch(e){return _.error(e?.message||`重新启动失败`),!1}finally{t.value=!1}}async function i(e){try{await ce.confirm(`确定要删除该终端会话记录吗?如果该终端仍在运行,将尝试结束进程。`,`删除终端会话`,{confirmButtonText:`删除`,cancelButtonText:`取消`,type:`warning`})}catch{return!1}try{t.value=!0;let r=await(await fetch(`/api/terminal-sessions/${e.id}`,{method:`DELETE`})).json();return r?.success?(_.success(`已删除`),await n(),!0):(_.error(r?.error||`删除失败`),!1)}catch(e){return _.error(e?.message||`删除失败`),!1}finally{t.value=!1}}function a(t){let n=e.value.findIndex(e=>e.id===t.id);n>=0?e.value.splice(n,1,t):e.value.unshift(t)}return{sessions:e,loading:C(()=>t.value),count:C(()=>e.value.length),refresh:n,restart:r,remove:i,upsert:a}}var Ie={class:`console-header`},Le={class:`header-left`},Re={class:`console-title`},ze={class:`header-actions`},Be={key:0,class:`execution-controls`},Ve={key:1,viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`currentColor`,style:{display:`block`}},He={class:`console-content`},Ue={class:`termial-session`},We={key:0,class:`terminal-sessions-panel`},Ge={class:`terminal-sessions-header`},Ke={class:`terminal-sessions-title`},qe={class:`terminal-sessions-count`},Je={class:`terminal-sessions-actions`},Ye={class:`terminal-sessions-body`},Xe={key:0,class:`terminal-sessions-empty`},Ze={key:1,class:`terminal-sessions-list`},Qe={class:`terminal-session-main`},$e=[`title`],et={class:`terminal-session-pid`},tt={class:`terminal-session-meta`},nt={class:`terminal-session-dir`},rt={class:`terminal-session-actions`},it={key:1,class:`terminal-sessions-collapsed`},at={class:`console-content-main`},ot={key:0,class:`orchestration-flow-panel`},st={class:`flow-panel-header`},ct={class:`flow-panel-title`},lt={key:1,class:`orchestration-steps-panel`},ut={class:`steps-header`},dt={class:`steps-title`},ft={key:0,class:`steps-orchestration`},pt={key:0,class:`steps-list`},mt={class:`step-indicator`},ht={key:4,class:`step-number`},gt={class:`step-content`},_t={class:`step-header`},vt={key:0,class:`step-terminal-tag`,title:`终端执行`},yt={key:1,class:`step-disabled-tag`},bt={class:`step-name`},xt={key:1,class:`terminal-waiting-panel`},St={class:`waiting-content`},Ct={class:`waiting-text`},wt={class:`waiting-desc`},Tt={class:`waiting-actions`},Et={key:2,class:`terminal-waiting-panel user-confirm-panel`},Dt={class:`waiting-content`},Ot={class:`waiting-text`},kt={class:`waiting-desc`},At={class:`waiting-actions`},jt={class:`console-input-row`},Mt=[`title`],Nt={key:2,class:`console-output`},Pt=[`onClick`],Ft={class:`cmd-line`},It={class:`cmd-text`},Lt=[`title`],Rt={class:`ts`},zt={class:`cmd-actions`},Bt={key:0,class:`output-content`},Vt=[`innerHTML`],Ht=[`innerHTML`],Ut={key:0,class:`stdin-input-row`},Wt={class:`user-input-dialog-content`},Gt={key:0,class:`user-input-empty`},Kt={key:1,class:`user-input-form`},qt={class:`user-input-label`},Jt={key:0,class:`required`},O=we(h({__name:`CommandConsole`,setup(e){let h=ve(()=>ke(()=>import(`./index-CPqKvZBK.js`).then(e=>e.d),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]))),Ce=ve(()=>ke(()=>import(`./ProjectStartupButton-CgS14qyg.js`),__vite__mapDeps([18,1,2,3,4,5,6,7,8,12,13,14,15,16,19]))),we=ve(()=>ke(()=>import(`./FlowOrchestrationWorkspace-C3l3Jco7.js`),__vite__mapDeps([20,1,2,3,4,5,6,7,8,0,9,10,11,12,13,14,15,16,17,21,22,23,24]))),Ne=ve(()=>ke(()=>import(`./FlowExecutionViewer-B4BADP8e.js`),__vite__mapDeps([25,1,2,3,4,5,6,7,8,10,11,22,16,23,26]))),D=Oe(),O=Ae();function Yt(){On().catch(e=>{_.error(e?.message||T(`@CF05E:提交后启动项执行失败`))})}async function Xt(e){let t=e?.flowData,n={id:String(e?.id||``).trim(),name:String(e?.name||``).trim()};if(t&&Array.isArray(t?.nodes)&&Array.isArray(t?.edges)){await Zt({flowData:t,orchestrationMeta:n});return}_.warning(T(`@CF05E:该编排缺少流程数据,无法执行`))}async function Zt(e){let t=e?.flowData;if(!t||!Array.isArray(t.nodes)||!Array.isArray(t.edges))return;let n=t.nodes,r=t.edges;J.value=!0,M.value=!0,N.value=!1,I.value=[],L.value=-1,an.value=t,on.value=!0,R.value=null,z.value=[],B.value=[],V.value=[],H.value=(e?.orchestrationMeta?.name||``).trim(),U.value=(e?.orchestrationMeta?.id||``).trim();let i={},a=new Map(n.map(e=>[e.id,e])),o=(e?.startNodeId||``).trim()||n.find(e=>e.type===`start`)?.id;if(!o){_.error(T(`@CF05E:未找到 start 节点`));return}let s=new Map;for(let e of r)s.has(e.source)||s.set(e.source,[]),s.get(e.source).push(e);for(let[e,t]of s.entries()){let n=a.get(e);if(n&&n.type!==`start`&&n.type!==`condition`&&t.length>1){_.error(`节点 ${n.data?.label||n.id} 出边超过 1 条,当前版本不支持`);return}}let c=Math.max(100,n.length*10),l=new Map,u=(e,t,n)=>{let r=e??``,i=n??``;switch(t){case`contains`:return r.includes(i);case`not_contains`:return!r.includes(i);case`isEmpty`:return String(r).trim().length===0;case`isNotEmpty`:return String(r).trim().length>0;case`==`:return r===i;case`!=`:return r!==i;case`>`:case`>=`:case`<`:case`<=`:{let e=Number(r),n=Number(i);return Number.isNaN(e)||Number.isNaN(n)?!1:t===`>`?e>n:t===`>=`?e>=n:t===`<`?e<n:e<=n}default:return!1}},d=(e,t)=>{let n=s.get(e)||[],r=(Array.isArray(t?.conditionBranches)?t.conditionBranches:[]).map(e=>({id:String(e?.id||``),name:String(e?.name||``),handleId:String(e?.handleId||``),priority:typeof e?.priority==`number`?e.priority:Number(e?.priority??0),combine:e?.combine===`any`?`any`:`all`,rules:Array.isArray(e?.rules)?e.rules:[],isDefault:!!e?.isDefault||String(e?.handleId||``)==="default"})).filter(e=>!!e.handleId),a=r.find(e=>e.isDefault)||r.find(e=>e.handleId==="default"),o=r.filter(e=>!e.isDefault&&e.handleId!=="default").sort((e,t)=>(e.priority??0)-(t.priority??0)),c=e=>{let t=Array.isArray(e.rules)?e.rules:[];if(t.length===0)return!1;let n=t.map(e=>{let t=String(e?.left?.nodeId||``).trim(),n=String(e?.left?.outputKey||`stdout`).trim()||`stdout`,r=t&&i?.[t]?.[n]||``;return u(String(r??``),String(e?.op||``),e?.right)});return e.combine===`any`?n.some(Boolean):n.every(Boolean)},l=o.find(e=>c(e));!l&&a&&(l=a);let d=String(l?.handleId||``),f=d?n.find(e=>String(e.sourceHandle||``).trim()===d):void 0;return console.log(`[FLOW][condition]`,{nodeId:e,chosen:l?{name:l.name,handleId:l.handleId,priority:l.priority,isDefault:l.isDefault}:null,outs:n.map(e=>({id:e.id,sourceHandle:e.sourceHandle,target:e.target})),nodeOutputsKeys:Object.keys(i||{})}),f},f=o,p=0;try{for(;f;){if(!M.value)throw Error(T(`@CF05E:用户停止执行`));if(p++>c)throw Error(`执行步数超过上限(${c}),可能存在循环`);let t=l.get(f)||0;if(l.set(f,t+1),t>=10)throw Error(`检测到节点 ${f} 被重复执行过多次,可能存在循环`);let n=a.get(f);if(!n)throw Error(`节点不存在: ${f}`);if(R.value=n.id,n.type===`start`){let e=s.get(n.id)||[];z.value=z.value.includes(n.id)?z.value:[...z.value,n.id],e[0]?.id&&(B.value=B.value.includes(e[0].id)?B.value:[...B.value,e[0].id]),f=e[0]?.target;continue}let r=n.data?.config;if(!r)throw Error(`节点未配置: ${n.data?.label||n.id}`);r.enabled===void 0&&(r.enabled=n.data?.enabled??!0);let o=e?.isSingleExecution===!0;if(r.enabled===!1&&!o){f=(s.get(n.id)||[])[0]?.target;continue}if(n.type===`condition`){let e=d(n.id,r);if(z.value=z.value.includes(n.id)?z.value:[...z.value,n.id],e?.id&&(B.value=B.value.includes(e.id)?B.value:[...B.value,e.id]),f=e?.target,o)break;continue}let u=s.get(n.id)||[],m=e?.isSingleExecution!==!0&&!!u[0]?.target;if(!await Xn([{...r,nodeId:n.id,enabled:r.enabled}],0,!0,e?.orchestrationMeta,{nodeOutputs:i,skipUiSetup:!0,skipUiTeardown:!0,forceTerminalConfirm:m})){n.id&&!V.value.includes(n.id)&&(V.value=[...V.value,n.id]);break}if(!M.value)break;z.value=z.value.includes(n.id)?z.value:[...z.value,n.id];let h=s.get(n.id)||[];if(h[0]?.id&&(B.value=B.value.includes(h[0].id)?B.value:[...B.value,h[0].id]),f=h[0]?.target,o)break}}catch(e){String(e?.message||e)!==T(`@CF05E:用户停止执行`)&&(R.value&&!V.value.includes(R.value)&&(V.value=[...V.value,R.value]),_.error(e?.message||String(e)))}finally{M.value=!1,N.value=!1,L.value=-1,I.value=[],R.value=null}}let Qt=Me(),k=v(null),A=v(``),j=v(``),M=v(!1),N=v(!1),P=v([]),F=0;function $t(){ce.confirm(T(`@CF05E:确定要清空所有执行历史吗?此操作不可撤销。`),T(`@CF05E:清空历史`),{confirmButtonText:T(`@CF05E:清空`),cancelButtonText:T(`@CF05E:取消`),type:`warning`}).then(()=>{P.value=[],_.success(T(`@CF05E:执行历史已清空`))}).catch(()=>{})}function en(){W&&W(!0)}function tn(){W&&W(!1),M.value=!1,N.value=!1}function nn(){G&&G(!0)}function rn(){G&&G(!1),M.value=!1,N.value=!1}let I=v([]),L=v(-1),an=v(null),on=v(!0),R=v(null),z=v([]),B=v([]),V=v([]),H=v(``),U=v(``),sn=v(!1),cn=v(``),W=null,ln=v(!1),un=v(``),G=null,dn=v(!1),fn=v(``),pn=v([]),mn=v({}),K=null,hn=C({get:()=>dn.value,set:e=>{dn.value=e}});function gn(){let e=Array.isArray(pn.value)?pn.value:[];for(let t of e){if(!t?.required)continue;let e=mn.value?.[t.name];if(e==null||String(e).trim()===``){_.warning(T(`@UINPUT:请输入必填参数的值`,{name:t.name}));return}}K&&K(!0)}function _n(){K&&K(!1),M.value=!1,N.value=!1}let{ansiToHtml:q}=Pe(),J=v(!1),Y=C({get:()=>D.ui.commandConsole.useTerminal,set:e=>{D.ui.commandConsole.useTerminal=e}}),{sessions:X,loading:vn,refresh:Z,restart:yn,remove:bn,upsert:xn}=Fe(),Q=C({get:()=>D.ui.commandConsole.showTerminalSessions,set:e=>{D.ui.commandConsole.showTerminalSessions=e}}),Sn=C(()=>X.value.length),Cn=v(!1);function wn(e){return new Promise(t=>setTimeout(t,e))}async function Tn(e=8e3){let t=Date.now();for(;Date.now()-t<e;){if(k.value&&k.value.connected)return!0;await wn(100)}return!1}async function En(e){let t=D.customCommands.find(t=>String(t.id)===String(e));if(!t){_.warning(`启动项命令不存在: ${e}`);return}let n=t.directory||A.value,r=t.command;if(Y.value){try{let e=await(await fetch(`/api/exec-in-terminal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:r,workingDirectory:n})})).json();e?.success?e?.session?xn(e.session):await Z():_.error(e?.error||T(`@CF05E:启动项命令执行失败`))}catch(e){_.error(e?.message||T(`@CF05E:启动项命令执行失败`))}return}if(!await Tn()){_.error(T(`@CF05E:Socket 连接未就绪,无法自动执行交互式启动项`));return}await $n(r,n)}async function Dn(e){let t=D.orchestrations.find(t=>t.id===e);if(!t){_.warning(`启动项工作流不存在: ${e}`);return}await Xt(t)}async function On(){await D.loadConfig(!1);let e=D.afterQuickPushAction;e?.enabled&&e?.refId&&(e.type===`workflow`?await Dn(e.refId):await En(e.refId))}async function kn(){if(Cn.value||(Cn.value=!0,await D.loadConfig(!1),!D.startupAutoRun))return;let e=(D.startupItems||[]).filter(e=>e?.enabled!==!1);if(e.length!==0)for(let t of e)t.type===`workflow`?await Dn(t.refId):await En(t.refId)}let An=e=>Math.min(85,Math.max(15,e)),jn=C({get:()=>An(D.ui.commandConsole.splitPercent),set:e=>{D.ui.commandConsole.splitPercent=An(e)}}),Mn=v(null),Nn=()=>{let e=Mn.value?.$el??Mn.value;if(e&&e.clientWidth)return e.clientWidth;try{return e?.getBoundingClientRect?.().width??0}catch{return 0}},Pn=()=>{let e=Mn.value?.$el??Mn.value;if(!e)return;let t=e.querySelectorAll?.(`.el-splitter__panel`),n=Nn();if(!t||t.length<1||n<=0)return;let r=t[0]?.getBoundingClientRect?.().width??0;if(r>0){let e=An(r/n*100);e!==jn.value&&(jn.value=e)}},Fn=C({get(){return`${An(jn.value)}%`},set(e){let t=NaN;if(typeof e==`number`){let n=Nn();n>0&&!isNaN(e)&&(t=e/n*100)}else if(typeof e==`string`){if(e.endsWith(`%`))t=parseFloat(e);else if(e.endsWith(`px`)){let n=parseFloat(e),r=Nn();r>0&&!isNaN(n)&&(t=n/r*100)}}isNaN(t)||(jn.value=An(t))}});async function In(e=!0){if(X.value.length!==0)try{let t=await(await fetch(`/api/terminal-sessions/status?cleanup=${e?`true`:`false`}`)).json();t?.success&&(X.value=Array.isArray(t.sessions)?t.sessions:[])}catch{}}function Ln(e){let t=String(e||``).trim();if(!t)return``;let n=t.replace(/\/+$/g,``).replace(/\+$/g,``),r=n.split(/[\\/]+/).filter(Boolean);return r[r.length-1]||n}let $=v(!1),Rn=v(!1);async function zn(){let e=j.value.trim();!e||M.value||(j.value=``,await Bn(e,A.value))}async function Bn(e,t=A.value){if(M.value=!0,Y.value){try{let n=await(await fetch(`/api/exec-in-terminal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e,workingDirectory:t})})).json();n?.success?(_.success(T(`@CF05E:已在新终端中执行命令`)),n?.session?xn(n.session):await Z()):_.error(n?.error||T(`@CF05E:执行失败`))}catch(e){_.error(e?.message||T(`@CF05E:执行失败`))}finally{M.value=!1}return}let n={id:++F,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0};P.value.unshift(n),j.value=``;try{console.log(`[前端-控制台] 开始发送流式请求:`,e);let t=await fetch(`/api/exec-stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e,directory:n.directory})});if(console.log(`[前端-控制台] 收到响应,状态:`,t.status,t.statusText),!t.ok)throw Error(`HTTP ${t.status}: ${t.statusText}`);let r=t.body?.getReader(),i=new TextDecoder;if(!r)throw Error(T(`@CF05E:无法读取响应流`));console.log(`[前端-控制台] 开始读取流数据`);let a=``,o=0;for(;;){let{done:e,value:t}=await r.read();if(o++,console.log(`[前端-控制台] 读取数据块 #${o}, done:`,e,`size:`,t?.length||0),e)break;let s=i.decode(t,{stream:!0});console.log(`[前端-控制台] 解码数据块:`,s.substring(0,200)),a+=s;let c=a.split(`
3
3
 
4
4
  `);a=c.pop()||``,console.log(`[前端-控制台] 分割出 ${c.length} 条消息`);for(let e of c){let t=e.split(`
5
5
  `);for(let e of t)if(e.startsWith(`data: `))try{let t=JSON.parse(e.substring(6));console.log(`[前端-控制台] 解析到数据:`,t.type,`长度:`,t.data?.length||0),t.type===`process_id`?(n.processId=t.data,console.log(`[前端-控制台] 收到进程ID:`,n.processId),P.value=[...P.value]):t.type===`stdout`?(n.stdout=(n.stdout||``)+q(t.data),console.log(`[前端-控制台] 当前stdout总长度:`,n.stdout.length),M.value&&n.stdout.length<200&&(M.value=!1),P.value=[...P.value]):t.type===`stderr`?(n.stderr=(n.stderr||``)+q(t.data),console.log(`[前端-控制台] 当前stderr总长度:`,n.stderr.length),M.value&&n.stderr.length<200&&(M.value=!1),P.value=[...P.value]):t.type===`exit`?(n.success=t.data.success,n.running=!1,console.log(`[前端-控制台] 进程退出,成功:`,n.success),P.value=[...P.value]):t.type===`error`&&(n.stderr=(n.stderr||``)+`错误: ${t.data}\n`,P.value=[...P.value])}catch(t){console.warn(`解析SSE数据失败:`,e,t)}}}if(a.trim()){let e=a.split(`
@@ -1,4 +1,4 @@
1
- import"./rolldown-runtime-CMxvf4Kt.js";import{B as e,Bt as t,Cn as n,Ct as r,D as i,E as a,Et as o,Fn as s,Ft as c,G as l,H as u,Ht as d,In as f,J as p,Jn as m,K as h,Kn as g,L as _,Ln as v,Lt as y,N as b,P as x,Pt as S,Q as C,R as w,S as T,Sn as E,Tn as D,W as O,X as k,Y as A,Yn as j,Yt as M,_n as N,a as P,ar as F,at as ee,ct as I,dr as L,fn as te,fr as R,gn as z,hn as B,hr as V,ht as H,i as U,kt as ne,ln as re,lt as ie,mn as W,mr as G,mt as ae,nt as oe,o as se,ot as K,q as ce,rr as le,sn as ue,st as de,tn as fe,tt as pe,un as q,v as J,vn as Y,z as me,zn as he,zt as ge}from"./element-plus-B6Owr5jY.js";import{c as _e}from"./vendor-BuiZXcjj.js";import{n as X,t as Z}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{n as ve,t as ye}from"./CommonDialog-G17HYMln.js";import{n as be,t as xe}from"./configStore-DHCrsR6z.js";import{a as Se,b as Q,c as Ce,f as we,i as Te,o as Ee,r as De,s as Oe,y as ke}from"./index-C1q8_YYO.js";var Ae={key:0},je={key:1},Me=Z(D({__name:`StageButton`,props:{from:{default:`form`}},emits:[`click`],setup(t,{emit:r}){let i=r,a=Q(),o=xe();function s(e){let t=e.replace(/\\/g,`/`);return o.lockedFiles.some(e=>t===e.replace(/\\/g,`/`))}function c(){return o.lockedFiles.length===0?!1:a.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)?s(e.path):!1)}let u=W(()=>a.fileList.filter(e=>[`modified`,`deleted`,`untracked`].includes(e.type)&&!s(e.path)).length),d=W(()=>a.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)&&!s(e.path))),f=W(()=>a.isSelectionMode&&a.hasSelectableFiles),p=W(()=>a.selectedUnstagedPaths.length),h=W(()=>a.isSelectionMode?p.value===0:!d.value),g=W(()=>f.value?`${X(`@29974:暂存所选 `)}${p.value}${X(`@29974: 个文件`)}`:d.value?c()?`${X(`@29974:暂存`)}${u.value}${X(`@29974:个未暂存文件(逐个添加)`)}`:`${X(`@29974:暂存所有更改(git add .)`)}`:X(`@29974:没有需要暂存的更改`));async function _(){i(`click`);try{if(f.value){await a.stageFiles(a.selectedUnstagedPaths);return}if(a.isSelectionMode)return;c()?await a.addToStage():await a.addAllToStage()}catch(e){console.error(`添加文件失败:`,e)}}return(r,i)=>{let o=e,s=l;return v(),z(s,{content:g.value,placement:`top`},{default:m(()=>[n(o,{type:`primary`,icon:L(S),onClick:_,loading:L(a).isAddingFiles,disabled:h.value,class:R([`stage-button`,`from-${t.from}`,{"is-selective":f.value}])},{default:m(()=>[E(V(f.value?L(X)(`@29974:暂存所选`):L(X)(`@29974:暂存`))+` `,1),f.value?(v(),Y(`span`,Ae,`(`+V(p.value)+`)`,1)):u.value>0?(v(),Y(`span`,je,`(`+V(u.value)+`)`,1)):N(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`class`])]),_:1},8,[`content`])}}}),[[`__scopeId`,`data-v-22060f7f`]]),Ne={key:0},Pe=Z(D({__name:`CommitButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`click`,`beforeCommit`,`afterCommit`],setup(t,{emit:r}){let i=t,a=r,s=Q(),c=xe(),u=W(()=>s.fileList.filter(e=>e.type===`added`&&!ke(e.path,c.lockedFiles)).length),d=W(()=>u.value>0),f=W(()=>s.hasConflictedFiles||s.isCommiting?!0:s.isMergeInProgress?!i.hasUserCommitMessage:!d.value||!i.hasUserCommitMessage),p=W(()=>s.isCommiting?X(`@76A11:正在提交中…`):s.hasConflictedFiles?X(`@76A11:存在冲突文件,请先解决冲突`):s.isMergeInProgress?i.hasUserCommitMessage?X(`@76A11:提交并完成合并`):X(`@76A11:请输入提交信息`):d.value?i.hasUserCommitMessage?`${X(`@76A11:提交`)}${u.value}${X(`@76A11:个已暂存文件`)}`:X(`@76A11:请输入提交信息`):X(`@76A11:没有已暂存的更改`)),h=W(()=>s.isCommiting?X(`@76A11:提交中…`):X(`@76A11:提交`));async function g(){if(i.finalCommitMessage.trim()){a(`beforeCommit`),a(`click`);try{a(`afterCommit`,await s.commitChanges(i.finalCommitMessage,i.skipHooks))}catch(e){console.error(`提交失败:`,e),a(`afterCommit`,!1)}}}return(r,i)=>{let a=e,c=l;return v(),z(c,{content:p.value,placement:`top`,disabled:L(s).isCommiting},{default:m(()=>[n(a,{type:`primary`,onClick:g,icon:L(s).isCommiting?L(o):L(pe),loading:L(s).isCommiting,disabled:f.value,"aria-busy":L(s).isCommiting?`true`:void 0,"aria-label":L(s).isCommiting?L(X)(`@76A11:正在提交中…`):void 0,class:R([`commit-button`,`from-${t.from}`,{"is-committing":L(s).isCommiting}])},{default:m(()=>[E(V(h.value)+` `,1),u.value>0&&!L(s).isCommiting?(v(),Y(`span`,Ne,`(`+V(u.value)+`)`,1)):N(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`aria-busy`,`aria-label`,`class`])]),_:1},8,[`content`,`disabled`])}}}),[[`__scopeId`,`data-v-6bd86c7e`]]),Fe={class:`push-progress-container`},Ie={key:0,class:`pulling-section`},Le={class:`pulling-text-wrap`},Re={class:`pulling-title`},ze={class:`pulling-sub`},Be={class:`stage-header`},Ve={class:`stage-icon`},He={class:`stage-info`},Ue={class:`stage-label`},We={key:0,class:`stage-percent`},Ge={key:0,class:`stage-progress`},Ke={key:2,class:`error-section`},qe={class:`error-header`},Je={class:`error-title`},Ye={class:`error-content`},Xe={key:0,class:`error-suggestion`},Ze={key:3,class:`messages-section`},Qe={class:`messages-title`},$e=Z(D({__name:`PushProgressModal`,props:{modelValue:{type:Boolean}},emits:[`update:modelValue`,`complete`,`pull-requested`],setup(t,{expose:r,emit:a}){let{t:s}=_e(),c=t,l=a,u=xe(),d=Q(),f=F(`progress`),p=F([]),h=F(``),g=F(!1),_=W(()=>h.value.includes(`non-fast-forward`)||h.value.includes(`rejected`)&&h.value.includes(`fetch first`)),y=F(!1);async function b(){y.value=!0;try{(await d.gitPull()).success&&(w.value=!1,l(`pull-requested`))}finally{y.value=!1}}let x=le([{name:`counting`,label:s(`@PUSH:计数对象`),status:`wait`,percent:0},{name:`compressing`,label:s(`@PUSH:压缩对象`),status:`wait`,percent:0},{name:`writing`,label:s(`@PUSH:写入对象`),status:`wait`,percent:0},{name:`resolving`,label:s(`@PUSH:解析增量`),status:`wait`,percent:0}]),S=F(0),C=F(null),w=W({get:()=>c.modelValue,set:e=>l(`update:modelValue`,e)}),T=W(()=>{if(g.value)return s(`@PUSH:正在拉取远程更新`);switch(f.value){case`progress`:return s(`@PUSH:正在推送`);case`success`:return s(`@PUSH:推送成功`);case`error`:return s(`@PUSH:推送失败`);default:return``}});function D(e){switch(e.type){case`progress`:e.message&&(p.value.push(e.message),setTimeout(()=>{C.value&&(C.value.scrollTop=C.value.scrollHeight)},0));break;case`stage-progress`:if(e.stage&&typeof e.percent==`number`){let t=x.findIndex(t=>t.name===e.stage);t!==-1&&(x[t].percent=e.percent,x[t].status=e.percent===100?`finish`:`process`,S.value=t,e.percent===100&&t<x.length-1&&(x[t+1].status=`wait`))}break;case`complete`:e.success?(f.value=`success`,x.forEach(e=>{(e.status===`process`||e.status===`wait`)&&(e.status=`finish`,e.percent=100)}),S.value=-1,u.autoClosePushModal?setTimeout(()=>{w.value=!1,l(`complete`,!0)},2e3):l(`complete`,!0)):(f.value=`error`,h.value=e.error||`未知错误`,S.value<x.length&&(x[S.value].status=`error`),S.value=-1,l(`complete`,!1));break}}function O(){f.value=`progress`,p.value=[],h.value=``,S.value=0,g.value=!1,x.forEach(e=>{e.status=`wait`,e.percent=0})}function k(e){g.value=e}return r({handleProgress:D,reset:O,setPulling:k}),(t,r)=>{let a=e;return v(),z(L(i),{modelValue:w.value,"onUpdate:modelValue":r[0]||=e=>w.value=e,title:T.value,width:`650px`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":f.value!==`progress`,"append-to-body":!0,"lock-scroll":!1,"destroy-on-close":``,class:R([`push-progress-dialog`,`status-${f.value}`])},{default:m(()=>[B(`div`,Fe,[g.value?(v(),Y(`div`,Ie,[r[1]||=B(`div`,{class:`pulling-icon-wrap`},[B(`svg`,{class:`pulling-spinner`,viewBox:`0 0 50 50`},[B(`circle`,{class:`pulling-spinner-track`,cx:`25`,cy:`25`,r:`20`,fill:`none`,"stroke-width":`4`}),B(`circle`,{class:`pulling-spinner-arc`,cx:`25`,cy:`25`,r:`20`,fill:`none`,"stroke-width":`4`})])],-1),B(`div`,Le,[B(`div`,Re,V(L(s)(`@PUSH:正在拉取远程更新`)),1),B(`div`,ze,V(L(s)(`@PUSH:拉取完成后自动继续推送`)),1)])])):(v(),Y(`div`,{key:1,class:R([`stages-section`,{"is-loading":f.value===`progress`,"is-success":f.value===`success`}])},[(v(!0),Y(q,null,he(x,(e,t)=>(v(),Y(`div`,{key:e.name,class:R([`stage-item`,{active:S.value===t,finished:e.status===`finish`,error:e.status===`error`}])},[B(`div`,Be,[B(`div`,Ve,[e.status===`finish`?(v(),z(L(A),{key:0,class:`icon-finish`},{default:m(()=>[n(L(oe))]),_:1})):e.status===`error`?(v(),z(L(A),{key:1,class:`icon-error`},{default:m(()=>[n(L(K))]),_:1})):e.status===`process`?(v(),z(L(A),{key:2,class:`icon-process rotating`},{default:m(()=>[n(L(o))]),_:1})):(v(),z(L(A),{key:3,class:`icon-wait`},{default:m(()=>[n(L(o))]),_:1}))]),B(`div`,He,[B(`div`,Ue,V(e.label),1),e.status===`process`||e.status===`finish`?(v(),Y(`div`,We,V(e.percent)+`% `,1)):N(``,!0)])]),e.status===`process`||e.status===`finish`?(v(),Y(`div`,Ge,[n(L(J),{percentage:e.percent,"stroke-width":6,"show-text":!1,color:e.status===`finish`?`var(--color-success)`:`var(--color-primary)`},null,8,[`percentage`,`color`])])):N(``,!0)],2))),128))],2)),f.value===`error`&&h.value?(v(),Y(`div`,Ke,[B(`div`,qe,[B(`div`,Je,V(L(s)(`@PUSH:错误详情`))+`:`,1),_.value?(v(),z(a,{key:0,type:`primary`,size:`small`,loading:y.value,onClick:b,class:`pull-button`},{default:m(()=>[n(L(A),null,{default:m(()=>[n(L(ae))]),_:1}),E(` `+V(L(s)(`@PUSH:先拉取更新`)),1)]),_:1},8,[`loading`])):N(``,!0)]),B(`div`,Ye,V(h.value),1),_.value?(v(),Y(`div`,Xe,V(L(s)(`@PUSH:检测到远程有新提交,请先拉取更新后再推送。`)),1)):N(``,!0)])):N(``,!0),p.value.length>0?(v(),Y(`div`,Ze,[B(`div`,Qe,V(L(s)(`@PUSH:详细信息`))+`:`,1),B(`div`,{ref_key:`messagesContainerRef`,ref:C,class:`progress-messages`},[(v(!0),Y(q,null,he(p.value,(e,t)=>(v(),Y(`div`,{key:t,class:`message-item`},V(e),1))),128))],512)])):N(``,!0)])]),_:1},8,[`modelValue`,`title`,`show-close`,`class`])}}}),[[`__scopeId`,`data-v-e8766d98`]]),et={key:0},tt=Z(D({__name:`PushButton`,props:{from:{default:`form`}},emits:[`click`,`beforePush`,`afterPush`],setup(t,{emit:r}){let i=r,a=Q(),o=F(!1),s=F(null),c=W(()=>a.branchAhead>0),u=W(()=>a.fileList.some(e=>e.type===`added`)),d=W(()=>a.hasConflictedFiles?!1:a.hasUpstream&&c.value&&!u.value),f=W(()=>!d.value),p=W(()=>a.hasConflictedFiles?X(`@F4137:存在冲突文件,请先解决冲突`):a.hasUpstream?c.value?u.value?X(`@F4137:有未提交的暂存更改,请先提交`):`${X(`@F4137:推送`)}${a.branchAhead}${X(`@F4137:个本地提交`)}`:X(`@F4137:没有需要推送的提交`):X(`@F4137:当前分支没有上游分支`)),h=W(()=>d.value?{backgroundColor:`var(--color-success)`,borderColor:`var(--color-success)`}:{});async function g(){i(`beforePush`),i(`click`);try{o.value=!0,s.value&&s.value.reset();let e=await a.pushToRemoteWithProgress(e=>{s.value&&s.value.handleProgress(e)});e&&await new Promise(e=>setTimeout(e,200)),i(`afterPush`,e)}catch(e){console.error(`推送失败:`,e),i(`afterPush`,!1)}}function _(e){}return(r,i)=>{let u=e,d=l;return v(),Y(`div`,null,[n(d,{content:p.value,placement:`top`},{default:m(()=>[n(u,{type:`primary`,icon:L(M),onClick:g,loading:L(a).isPushing,disabled:f.value,style:G(h.value),class:R([`push-button`,`from-${t.from}`])},{default:m(()=>[E(V(L(X)(`@F4137:推送`))+` `,1),c.value?(v(),Y(`span`,et,`(`+V(L(a).branchAhead)+`)`,1)):N(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`style`,`class`])]),_:1},8,[`content`]),n($e,{ref_key:`progressModalRef`,ref:s,modelValue:o.value,"onUpdate:modelValue":i[0]||=e=>o.value=e,onComplete:_},null,8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-a0e22137`]]),nt={class:`one-push-content`},rt={class:`one-push-text`},it={class:`one-push-title`},at={key:0,class:`one-push-desc`},ot=Z(D({__name:`QuickPushButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`beforePush`,`pushStart`,`afterPush`,`clearFields`],setup(t,{expose:r,emit:i}){let a=Q(),o=xe(),s=F(!1),u=F(null),d=t,f=i,p=W(()=>a.fileList.some(e=>!ke(e.path,o.lockedFiles))),h=W(()=>a.isSelectionMode&&a.selectedFiles.size>0&&a.selectedUnstagedPaths.length>0),g=W(()=>a.hasConflictedFiles?!0:a.isSelectionMode?!h.value||!d.hasUserCommitMessage||!a.hasUpstream:!p.value&&a.branchAhead===0||!d.hasUserCommitMessage||!a.hasUpstream),_=W(()=>a.isAddingFiles||a.isCommiting||a.isPushing),y=W(()=>{if(a.hasConflictedFiles)return X(`@2E184:存在冲突文件,请先解决冲突`);if(a.isSelectionMode)return a.selectedFiles.size===0?X(`@2E184:请先勾选要推送的文件`):a.selectedUnstagedPaths.length===0?X(`@2E184:所选文件无需暂存或被锁定`):d.hasUserCommitMessage?a.hasUpstream?X(`@2E184:一键完成:仅暂存所选文件 → 提交 → 推送到远程仓库`):X(`@2E184:当前分支没有上游分支`):X(`@2E184:请输入提交信息`);let e=a.branchAhead>0;return!p.value&&!e?X(`@2E184:没有需要提交或推送的更改`):d.hasUserCommitMessage?a.hasUpstream?p.value?X(`@2E184:一键完成:暂存所有更改 → 提交 → 推送到远程仓库`):X(`@2E184:本地已提交,一键推送到远程仓库`):X(`@2E184:当前分支没有上游分支`):X(`@2E184:请输入提交信息`)}),b=W(()=>a.isSelectionMode&&h.value?X(`@2E184:一键推送所选`):X(`@2E184:一键推送所有`)),x=W(()=>d.from===`form`?a.isSelectionMode&&h.value?X(`@2E184:暂存所选 + 提交 + 推送`):X(`@2E184:暂存 + 提交 + 推送`):``);async function S(){f(`beforePush`);try{let e=a.isSelectionMode&&h.value;if((e||p.value)&&!(e?await a.stageSelectedAndCommit(d.finalCommitMessage,d.skipHooks):await a.addAndCommit(d.finalCommitMessage,d.skipHooks))){f(`afterPush`,!1);return}if(f(`pushStart`),s.value=!0,o.pullBeforePush){u.value?.setPulling(!0);let e=await a.gitPull();if(u.value?.setPulling(!1),!e.success){P.error(X(`@2E184:拉取远程更新失败,已停止推送`)),s.value=!1,a.fetchStatus(),a.getBranchStatus(!0),f(`afterPush`,!1);return}}u.value&&u.value.reset();let t=await a.pushToRemoteWithProgress(e=>{u.value&&u.value.handleProgress(e)});if(t){try{window.dispatchEvent(new CustomEvent(`zen-gitsync:after-quick-push-success`))}catch{}f(`clearFields`)}f(`afterPush`,t)}catch(e){console.error(`一键推送失败:`,e),f(`afterPush`,!1)}}r({triggerQuickPush:S});function C(e){}return(r,i)=>{let a=A,o=e;return v(),Y(`div`,null,[n(L(l),{content:y.value,placement:`top`,"show-after":200},{default:m(()=>[n(o,{type:`primary`,onClick:S,loading:_.value,disabled:g.value,class:R([t.from,`one-push-button`])},{default:m(()=>[B(`div`,nt,[n(a,{class:`one-push-icon`},{default:m(()=>[n(L(c))]),_:1}),B(`div`,rt,[B(`span`,it,V(b.value),1),t.from===`form`?(v(),Y(`span`,at,V(x.value),1)):N(``,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`]),n($e,{ref_key:`progressModalRef`,ref:u,modelValue:s.value,"onUpdate:modelValue":i[0]||=e=>s.value=e,onComplete:C,onPullRequested:S},null,8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-9f003c37`]]),st={class:`create-tag-button`},ct={class:`tag-dialog-content`},lt={class:`tag-info-card`},ut={class:`info-icon`},dt={class:`info-content`},ft={class:`form-tip`},pt={class:`form-tip`},mt={class:`form-tip`},ht=Z(D({__name:`CreateTagButton`,props:{variant:{default:`icon`}},setup(t){let i=t,a=Q(),o=F(!1),s=F(``),c=F(``),u=F(`lightweight`),f=F(``),p=F(!1);function g(){s.value=``,c.value=``,u.value=`lightweight`,f.value=``,o.value=!0}async function _(){if(!s.value.trim()){P.warning(X(`@TAG01:请输入标签名称`));return}if(!/^[a-zA-Z0-9._\/-]+$/.test(s.value)){P.warning(X(`@TAG01:标签名称只能包含字母、数字、点、下划线、斜杠和连字符`));return}try{p.value=!0;let e=await(await fetch(`/api/create-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:s.value.trim(),message:c.value.trim(),type:u.value,commit:f.value.trim()})})).json();e.success?(P.success(X(`@TAG01:标签创建成功`)),o.value=!1):P.error(e.error||X(`@TAG01:创建标签失败`))}catch(e){console.error(`创建标签失败:`,e),P.error(X(`@TAG01:创建标签失败`))}finally{p.value=!1}}let y=W(()=>u.value===`lightweight`?X(`@TAG01:轻量标签是指向提交对象的引用,不包含额外信息`):X(`@TAG01:附注标签是完整的Git对象,包含标签信息、日期、标签者和可选的签名`));return(t,S)=>{let C=A,w=e,T=l,D=O,k=ce,j=b,M=x,P=h;return v(),Y(`div`,st,[n(T,{content:L(X)(`@TAG01:为当前提交创建标签`),placement:`top`,"show-after":200,disabled:i.variant===`text`},{default:m(()=>[n(w,{type:`success`,onClick:g,disabled:!L(a).isGitRepo,circle:i.variant===`icon`,size:i.variant===`icon`?`small`:`default`,class:R(i.variant===`text`?`action-button`:``)},{default:m(()=>[i.variant===`icon`?(v(),z(C,{key:0},{default:m(()=>[n(L(d))]),_:1})):(v(),Y(q,{key:1},[E(V(L(X)(`@TAG01:创建标签`)),1)],64))]),_:1},8,[`disabled`,`circle`,`size`,`class`])]),_:1},8,[`content`,`disabled`]),n(ye,{modelValue:o.value,"onUpdate:modelValue":S[4]||=e=>o.value=e,title:L(X)(`@TAG01:创建 Git 标签`),size:`medium`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":L(X)(`@TAG01:创建`),"cancel-text":L(X)(`@TAG01:取消`),"confirm-loading":p.value,"custom-class":`tag-dialog`,onConfirm:_},{default:m(()=>[B(`div`,ct,[B(`div`,lt,[B(`div`,ut,[n(C,null,{default:m(()=>[n(L(d))]),_:1})]),B(`div`,dt,[B(`h4`,null,V(L(X)(`@TAG01:Git 标签`)),1),B(`p`,null,V(L(X)(`@TAG01:标签用于标记项目的重要版本点,如发布版本 v1.0.0`)),1)])]),n(P,{"label-position":`top`,class:`tag-form`},{default:m(()=>[n(k,{label:L(X)(`@TAG01:标签名称`),required:``},{default:m(()=>[n(D,{modelValue:s.value,"onUpdate:modelValue":S[0]||=e=>s.value=e,placeholder:L(X)(`@TAG01:例如: v1.0.0 或 release-2024`),clearable:``,maxlength:`100`},{prefix:m(()=>[n(C,null,{default:m(()=>[n(L(d))]),_:1})]),_:1},8,[`modelValue`,`placeholder`]),B(`div`,ft,[n(C,null,{default:m(()=>[n(L(r))]),_:1}),B(`span`,null,V(L(X)(`@TAG01:建议使用语义化版本号,如 v1.0.0`)),1)])]),_:1},8,[`label`]),n(k,{label:L(X)(`@TAG01:标签类型`)},{default:m(()=>[n(M,{modelValue:u.value,"onUpdate:modelValue":S[1]||=e=>u.value=e,size:`default`},{default:m(()=>[n(j,{value:`lightweight`},{default:m(()=>[E(V(L(X)(`@TAG01:轻量标签`)),1)]),_:1}),n(j,{value:`annotated`},{default:m(()=>[E(V(L(X)(`@TAG01:附注标签`)),1)]),_:1})]),_:1},8,[`modelValue`]),B(`div`,pt,[n(C,null,{default:m(()=>[n(L(r))]),_:1}),B(`span`,null,V(y.value),1)])]),_:1},8,[`label`]),u.value===`annotated`?(v(),z(k,{key:0,label:L(X)(`@TAG01:标签说明`),required:u.value===`annotated`},{default:m(()=>[n(D,{modelValue:c.value,"onUpdate:modelValue":S[2]||=e=>c.value=e,placeholder:L(X)(`@TAG01:为此标签添加说明信息`),clearable:``,rows:3,type:`textarea`,resize:`none`,maxlength:`500`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`,`required`])):N(``,!0),n(k,{label:L(X)(`@TAG01:目标提交(可选)`)},{default:m(()=>[n(D,{modelValue:f.value,"onUpdate:modelValue":S[3]||=e=>f.value=e,placeholder:L(X)(`@TAG01:留空则为当前HEAD,或输入commit SHA`),clearable:``,maxlength:`40`},{prefix:m(()=>[...S[5]||=[B(`span`,{class:`commit-prefix`},`commit:`,-1)]]),_:1},8,[`modelValue`,`placeholder`]),B(`div`,mt,[n(C,null,{default:m(()=>[n(L(r))]),_:1}),B(`span`,null,V(L(X)(`@TAG01:默认为当前HEAD提交,也可以指定历史提交`)),1)])]),_:1},8,[`label`])]),_:1})])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`])])}}}),[[`__scopeId`,`data-v-cbbcdcda`]]),gt={class:`tag-list-button`},_t={class:`tag-list-content`},vt={key:0,class:`tag-header`},yt={class:`tag-stats`},bt={class:`stat-item`},xt={class:`stat-number`},St={class:`stat-label`},Ct={class:`tag-actions-header`},wt={class:`tag-list-container`},Tt={key:0,class:`empty-state`},Et={class:`empty-text`},Dt={class:`empty-hint`},Ot={key:1,class:`tag-cards`},kt={class:`tag-card-content`},At={class:`tag-info`},jt={class:`tag-main-info`},Mt={class:`tag-name-badge`},Nt={class:`tag-name-text`},Pt={class:`tag-meta`},Ft={class:`tag-commit`},It={class:`tag-date`},Lt={key:0,class:`tag-message`},Rt={class:`tag-card-actions`},zt={key:0,class:`tag-detail-content`},Bt={class:`detail-row`},Vt={class:`detail-label`},Ht={class:`detail-value`},Ut={class:`detail-row`},Wt={class:`detail-label`},Gt={class:`detail-value`},Kt={class:`detail-row`},qt={class:`detail-label`},Jt={class:`detail-value`},Yt={class:`detail-row`},Xt={class:`detail-label`},Zt={key:0,class:`detail-row detail-message`},Qt={class:`detail-label`},$t={class:`message-content`},en=Z(D({__name:`TagListButton`,props:{variant:{default:`icon`}},setup(t){let i=t,a=Q(),o=F(!1),s=F([]),c=F(!1),u=F(!1),f=F(!1),p=F(!1),h=F(null);async function g(){o.value=!0,await _()}async function _(){try{c.value=!0;let e=await(await fetch(`/api/list-tags`)).json();e.success?s.value=e.tags||[]:P.error(e.error||X(`@TAG01:获取标签列表失败`))}catch(e){console.error(`获取标签列表失败:`,e),P.error(X(`@TAG01:获取标签列表失败`))}finally{c.value=!1}}function b(e){h.value=e,p.value=!0}async function x(e){U.confirm(X(`@TAG01:确定要推送此标签到远程仓库吗?`),X(`@TAG01:推送标签`),{confirmButtonText:X(`@TAG01:推送`),cancelButtonText:X(`@TAG01:取消`),type:`info`}).then(async()=>{try{f.value=!0;let t=await(await fetch(`/api/push-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:e})})).json();t.success?P.success(X(`@TAG01:标签推送成功`)):P.error(t.error||X(`@TAG01:推送标签失败`))}catch(e){console.error(`推送标签失败:`,e),P.error(X(`@TAG01:推送标签失败`))}finally{f.value=!1}}).catch(()=>{})}async function S(){U.confirm(X(`@TAG01:确定要推送所有标签到远程仓库吗?`),X(`@TAG01:推送所有标签`),{confirmButtonText:X(`@TAG01:推送`),cancelButtonText:X(`@TAG01:取消`),type:`info`}).then(async()=>{try{f.value=!0;let e=await(await fetch(`/api/push-all-tags`,{method:`POST`})).json();e.success?P.success(X(`@TAG01:所有标签推送成功`)):P.error(e.error||X(`@TAG01:推送标签失败`))}catch(e){console.error(`推送标签失败:`,e),P.error(X(`@TAG01:推送标签失败`))}finally{f.value=!1}}).catch(()=>{})}async function C(e){U.confirm(X(`@TAG01:确定要删除此标签吗?此操作不可恢复。`),X(`@TAG01:删除标签`),{confirmButtonText:X(`@TAG01:删除`),cancelButtonText:X(`@TAG01:取消`),type:`warning`}).then(async()=>{await w(e)}).catch(()=>{})}async function w(e){try{u.value=!0;let t=await(await fetch(`/api/delete-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:e})})).json();t.success?(P.success(X(`@TAG01:标签删除成功`)),await _()):P.error(t.error||X(`@TAG01:删除标签失败`))}catch(e){console.error(`删除标签失败:`,e),P.error(X(`@TAG01:删除标签失败`))}finally{u.value=!1}}function D(e){if(!e)return`-`;try{return new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}catch{return e}}return(t,w)=>{let O=A,k=e,P=l,F=T,ee=me,I=se;return v(),Y(`div`,gt,[n(P,{content:L(X)(`@TAG01:查看和管理所有标签`),placement:`top`,"show-after":200,disabled:i.variant===`text`},{default:m(()=>[n(k,{type:`info`,onClick:g,disabled:!L(a).isGitRepo,circle:i.variant===`icon`,size:i.variant===`icon`?`small`:`default`,class:R(i.variant===`text`?`action-button`:``)},{default:m(()=>[i.variant===`icon`?(v(),z(O,{key:0},{default:m(()=>[n(L(d))]),_:1})):(v(),Y(q,{key:1},[E(V(L(X)(`@TAG01:标签列表`)),1)],64))]),_:1},8,[`disabled`,`circle`,`size`,`class`])]),_:1},8,[`content`,`disabled`]),n(ye,{modelValue:o.value,"onUpdate:modelValue":w[0]||=e=>o.value=e,title:L(X)(`@TAG01:Git 标签列表`),size:`large`,"show-footer":!1,"custom-class":`tag-list-dialog`},{default:m(()=>[B(`div`,_t,[c.value?N(``,!0):(v(),Y(`div`,vt,[B(`div`,yt,[B(`div`,bt,[n(O,{class:`stat-icon`},{default:m(()=>[n(L(d))]),_:1}),B(`span`,xt,V(s.value.length),1),B(`span`,St,V(L(X)(`@TAG01:个标签`)),1)])]),B(`div`,Ct,[n(k,{type:`primary`,size:`small`,icon:L(y),onClick:_,loading:c.value,class:`refresh-btn`},{default:m(()=>[E(V(L(X)(`@TAG01:刷新`)),1)]),_:1},8,[`icon`,`loading`]),s.value.length>0?(v(),z(k,{key:0,type:`success`,size:`small`,icon:L(M),onClick:S,loading:f.value,class:`push-all-btn`},{default:m(()=>[E(V(L(X)(`@TAG01:推送所有标签`)),1)]),_:1},8,[`icon`,`loading`])):N(``,!0)])])),j((v(),Y(`div`,wt,[s.value.length===0&&!c.value?(v(),Y(`div`,Tt,[n(F,{description:L(X)(`@TAG01:暂无标签`),"image-size":120},{image:m(()=>[n(O,{class:`empty-icon`},{default:m(()=>[n(L(d))]),_:1})]),description:m(()=>[B(`p`,Et,V(L(X)(`@TAG01:还没有创建任何标签`)),1),B(`p`,Dt,V(L(X)(`@TAG01:使用创建标签功能为项目添加版本标记`)),1)]),_:1},8,[`description`])])):(v(),Y(`div`,Ot,[(v(!0),Y(q,null,he(s.value,e=>(v(),Y(`div`,{key:e.name,class:`tag-card`},[B(`div`,kt,[B(`div`,At,[B(`div`,jt,[B(`div`,Mt,[n(O,{class:`badge-icon`},{default:m(()=>[n(L(d))]),_:1}),B(`span`,Nt,V(e.name),1),n(ee,{size:`small`,type:e.type===`annotated`?`warning`:`info`,class:`type-tag`},{default:m(()=>[E(V(e.type===`annotated`?L(X)(`@TAG01:附注`):L(X)(`@TAG01:轻量`)),1)]),_:2},1032,[`type`])]),B(`div`,Pt,[B(`span`,Ft,[n(O,null,{default:m(()=>[n(L(r))]),_:1}),E(` `+V(e.commit.substring(0,8)),1)]),B(`span`,It,V(D(e.date)),1)]),e.message?(v(),Y(`div`,Lt,V(e.message),1)):N(``,!0)])]),B(`div`,Rt,[e.message?(v(),z(k,{key:0,size:`small`,type:`info`,onClick:t=>b(e),class:`action-btn view-btn`},{default:m(()=>[E(V(L(X)(`@TAG01:查看`)),1)]),_:1},8,[`onClick`])):N(``,!0),n(k,{size:`small`,type:`success`,icon:L(M),onClick:t=>x(e.name),loading:f.value,class:`action-btn push-btn`},{default:m(()=>[E(V(L(X)(`@TAG01:推送`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),n(k,{size:`small`,type:`danger`,icon:L(ie),onClick:t=>C(e.name),loading:u.value,class:`action-btn delete-btn`},{default:m(()=>[E(V(L(X)(`@TAG01:删除`)),1)]),_:1},8,[`icon`,`onClick`,`loading`])])])]))),128))]))])),[[I,c.value]])])]),_:1},8,[`modelValue`,`title`]),n(ye,{modelValue:p.value,"onUpdate:modelValue":w[1]||=e=>p.value=e,title:L(X)(`@TAG01:标签详情`),size:`medium`,"show-footer":!1,"custom-class":`tag-detail-dialog`},{default:m(()=>[h.value?(v(),Y(`div`,zt,[B(`div`,Bt,[B(`span`,Vt,V(L(X)(`@TAG01:标签名称:`)),1),B(`code`,Ht,V(h.value.name),1)]),B(`div`,Ut,[B(`span`,Wt,V(L(X)(`@TAG01:提交SHA:`)),1),B(`code`,Gt,V(h.value.commit),1)]),B(`div`,Kt,[B(`span`,qt,V(L(X)(`@TAG01:创建时间:`)),1),B(`span`,Jt,V(D(h.value.date)),1)]),B(`div`,Yt,[B(`span`,Xt,V(L(X)(`@TAG01:类型:`)),1),n(ee,{type:h.value.type===`annotated`?`warning`:`info`,size:`small`},{default:m(()=>[E(V(h.value.type===`annotated`?L(X)(`@TAG01:附注标签`):L(X)(`@TAG01:轻量标签`)),1)]),_:1},8,[`type`])]),h.value.message?(v(),Y(`div`,Zt,[B(`span`,Qt,V(L(X)(`@TAG01:标签说明:`)),1),B(`div`,$t,V(h.value.message),1)])):N(``,!0)])):N(``,!0)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-fc8d7e86`]]),tn={class:`git-operations-button`},nn={class:`actions-section`},rn={class:`action-groups`},an={class:`action-group`},on={class:`group-title`},sn={class:`group-buttons`},cn={key:0},ln={class:`action-group`},un={class:`group-title`},dn={class:`group-buttons`},fn={class:`action-group`},pn={class:`group-title`},mn={class:`group-buttons`},hn={key:0},gn={class:`action-group`},_n={class:`group-title`},vn={class:`group-buttons`},yn={class:`action-group`},bn={class:`group-title`},xn={class:`group-buttons`},Sn={class:`action-group`},Cn={class:`group-title`},wn={class:`group-buttons`},Tn={class:`pull-error-content`},En={key:0},Dn={key:1},On={class:`pull-error-detail`},kn={class:`pull-error-label`},An={class:`pull-error-pre`},jn=Z(D({__name:`GitOperationsButton`,props:{variant:{default:`icon`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`afterCommit`,`afterPush`,`beforePush`,`clearFields`],setup(t,{expose:i,emit:o}){let s=t,c=o,u=Q(),d=F(!1),f=F(!1),p=F({needsMerge:!1,error:``,fullError:``,pullOutput:``});function h(){d.value=!0}let g=W(()=>u.fileList.filter(e=>e.type===`added`).length),_=W(()=>u.branchBehind>0),y=W(()=>u.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)));async function b(){try{let e=await u.gitPull();e.success?(await u.fetchStatus(),await u.fetchLog(!1)):(p.value={needsMerge:e.needsMerge,error:e.error,fullError:e.fullError,pullOutput:e.pullOutput},f.value=!0)}catch(e){console.error(`拉取失败:`,e)}}async function x(){try{await u.gitFetchAll(),await u.fetchStatus(),await u.fetchLog(!1)}catch(e){console.error(`获取远程分支失败:`,e)}}async function S(){if(s.hasUserCommitMessage)try{await u.addAndCommit(s.finalCommitMessage,s.skipHooks),u.fetchStatus(),u.fetchLog(),c(`afterCommit`,!0),c(`clearFields`)}catch(e){console.error(`暂存并提交失败:`,e)}}function C(){c(`beforePush`)}function w(e){c(`afterPush`,e)}function T(){c(`clearFields`)}return i({openGitOperationsDrawer:h}),(i,o)=>{let D=A,O=e,k=l,j=a;return v(),Y(`div`,tn,[s.variant===`icon`?(v(),z(ve,{key:0,tooltip:L(X)(`@F13B4:Git 操作`),size:`large`,"custom-class":`btn-rotate-on-hover`,onClick:h},{default:m(()=>[n(D,null,{default:m(()=>[n(L(ne))]),_:1})]),_:1},8,[`tooltip`])):(v(),z(O,{key:1,type:`primary`,class:`action-button`,onClick:h},{default:m(()=>[E(V(L(X)(`@F13B4:Git 操作`)),1)]),_:1})),n(j,{modelValue:d.value,"onUpdate:modelValue":o[2]||=e=>d.value=e,title:L(X)(`@76872:Git 操作`),direction:`rtl`,size:`362px`,"with-header":!0,"show-close":!0,"destroy-on-close":!1,"append-to-body":!0,class:`git-operations-drawer`},{default:m(()=>[B(`div`,nn,[B(`div`,rn,[B(`div`,an,[B(`div`,on,V(L(X)(`@76872:基础操作`)),1),B(`div`,sn,[n(Me,{onClick:()=>{},from:`drawer`}),n(Te,{onClick:()=>{},from:`drawer`}),n(Pe,{"has-user-commit-message":t.hasUserCommitMessage,"final-commit-message":t.finalCommitMessage,"skip-hooks":t.skipHooks,onBeforeCommit:()=>{},onAfterCommit:o[0]||=e=>c(`afterCommit`,e),onClick:()=>{},from:`drawer`},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),n(tt,{onBeforePush:()=>{},onAfterPush:o[1]||=e=>c(`afterPush`,e),onClick:()=>{},from:`drawer`}),n(k,{content:L(u).hasConflictedFiles?L(X)(`@76872:存在冲突文件,请先解决冲突`):_.value?`${L(X)(`@76872:拉取`)}${L(u).branchBehind}${L(X)(`@76872:个远程提交`)}`:`git pull`,placement:`top`},{default:m(()=>[n(O,{type:`primary`,icon:L(ae),onClick:b,loading:L(u).isGitPulling,disabled:!L(u).hasUpstream||L(u).hasConflictedFiles,class:`action-button`,style:G(L(u).hasUpstream&&!L(u).hasConflictedFiles?{color:`white`,backgroundColor:`#1e90ff`,borderColor:`#1e90ff`}:{})},{default:m(()=>[E(V(L(X)(`@76872:拉取`))+` `,1),_.value?(v(),Y(`span`,cn,`(`+V(L(u).branchBehind)+`)`,1)):N(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`style`])]),_:1},8,[`content`]),n(k,{content:`git fetch --all`,placement:`top`},{default:m(()=>[n(O,{type:`info`,icon:L(de),onClick:x,loading:L(u).isGitFetching,class:`action-button`,style:{color:`white`,"background-color":`#1e90ff`,"border-color":`#1e90ff`}},{default:m(()=>[E(V(L(X)(`@76872:获取所有远程分支`)),1)]),_:1},8,[`icon`,`loading`])]),_:1})])]),B(`div`,ln,[B(`div`,un,V(L(X)(`@76872:组合操作`)),1),B(`div`,dn,[n(k,{content:L(u).hasConflictedFiles?L(X)(`@76872:存在冲突文件,请先解决冲突`):`git add + git commit`,placement:`top`},{default:m(()=>[n(O,{type:`primary`,icon:L(H),onClick:S,loading:L(u).isAddingFiles||L(u).isCommiting,disabled:!y.value||!t.hasUserCommitMessage||L(u).hasConflictedFiles,class:`action-button`},{default:m(()=>[E(V(L(X)(`@76872:暂存并提交`)),1)]),_:1},8,[`icon`,`loading`,`disabled`])]),_:1},8,[`content`]),n(ot,{from:`drawer`,"has-user-commit-message":t.hasUserCommitMessage,"final-commit-message":t.finalCommitMessage,"skip-hooks":t.skipHooks,onBeforePush:C,onAfterPush:w,onClearFields:T},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])]),B(`div`,fn,[B(`div`,pn,V(L(X)(`@76872:重置操作`)),1),B(`div`,mn,[n(k,{content:g.value>0?`${L(X)(`@76872:撤销`)}${g.value}${L(X)(`@76872:个已暂存文件`)}`:`git reset HEAD`,placement:`top`},{default:m(()=>[n(O,{type:`warning`,icon:L(ge),onClick:L(u).resetHead,loading:L(u).isResetting,disabled:g.value===0||L(u).hasConflictedFiles,class:`action-button reset-button`},{default:m(()=>[E(V(L(X)(`@76872:重置暂存区`))+` `,1),g.value>0?(v(),Y(`span`,hn,`(`+V(g.value)+`)`,1)):N(``,!0)]),_:1},8,[`icon`,`onClick`,`loading`,`disabled`])]),_:1},8,[`content`]),n(De,{variant:`text`})])]),B(`div`,gn,[B(`div`,_n,V(L(X)(`@76872:分支操作`)),1),B(`div`,vn,[n(Se,{variant:`text`})])]),B(`div`,yn,[B(`div`,bn,V(L(X)(`@76872:储藏操作`)),1),B(`div`,xn,[n(Ce,{variant:`text`}),n(Oe,{variant:`text`})])]),B(`div`,Sn,[B(`div`,Cn,V(L(X)(`@TAG01:标签操作`)),1),B(`div`,wn,[n(ht,{variant:`text`}),n(en,{variant:`text`})])])])])]),_:1},8,[`modelValue`,`title`]),n(ye,{modelValue:f.value,"onUpdate:modelValue":o[3]||=e=>f.value=e,title:p.value.needsMerge?L(X)(`@76872:需要合并更改`):L(X)(`@76872:拉取失败`),size:`medium`,"show-footer":!0,"show-cancel":!1,"confirm-text":L(X)(`@76872:我知道了`),"append-to-body":!0,onConfirm:o[4]||=e=>f.value=!1},{default:m(()=>[B(`div`,Tn,[B(`div`,{class:R([`pull-error-type`,p.value.needsMerge?`is-warning`:`is-error`])},[n(D,{class:`pull-error-icon`},{default:m(()=>[n(L(r))]),_:1}),p.value.needsMerge?(v(),Y(`span`,En,V(L(X)(`@76872:本地存在未提交的更改,与远程内容冲突,请先处理本地更改后再拉取。`)),1)):(v(),Y(`span`,Dn,V(L(X)(`@76872:执行 git pull 时发生错误,请查看详细信息。`)),1))],2),B(`div`,On,[B(`div`,kn,V(L(X)(`@76872:错误详情`))+`:`,1),B(`pre`,An,V(p.value.fullError||p.value.error),1)])])]),_:1},8,[`modelValue`,`title`,`confirm-text`])])}}}),[[`__scopeId`,`data-v-58350746`]]),Mn={class:`loading-container`},Nn={class:`loading-text`},Pn={key:0,class:`loading-progress`},Fn=Z(D({__name:`GlobalLoading`,props:{visible:{type:Boolean,default:!1},text:{default:X(`@2AEBA:加载中...`)},showProgress:{type:Boolean,default:!1},progress:{default:0},mock:{type:Boolean,default:!1}},setup(e){return(t,r)=>(v(),z(te,{to:`body`},[n(fe,{name:`loading-fade`},{default:m(()=>[e.visible||e.mock?(v(),Y(`div`,{key:0,class:`global-loading-overlay`,onClick:r[0]||=re(()=>{},[`stop`])},[B(`div`,Mn,[r[1]||=B(`div`,{class:`loading-spinner`},[B(`div`,{class:`spinner-ring`}),B(`div`,{class:`spinner-ring`}),B(`div`,{class:`spinner-ring`})],-1),B(`div`,Nn,V(e.text),1),e.showProgress||e.mock?(v(),Y(`div`,Pn,[B(`div`,{class:R([`progress-bar`,{"is-mock":e.mock&&!e.showProgress}]),style:G(e.showProgress?{width:e.progress+`%`}:void 0)},null,6)])):N(``,!0)])])):N(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-6d13a220`]]),In={class:`success-container`},Ln={class:`success-text`},Rn={key:0,class:`success-description`},zn=Z(D({__name:`SuccessModal`,props:{visible:{type:Boolean,default:!1},text:{default:X(`@71545:操作成功!`)},description:{default:``}},setup(e){return(t,r)=>(v(),z(te,{to:`body`},[n(fe,{name:`success-fade`},{default:m(()=>[e.visible?(v(),Y(`div`,{key:0,class:`success-overlay`,onClick:r[0]||=re(()=>{},[`stop`])},[B(`div`,In,[r[1]||=B(`div`,{class:`success-icon`},[B(`svg`,{viewBox:`0 0 52 52`,class:`success-svg`},[B(`circle`,{class:`success-circle`,cx:`26`,cy:`26`,r:`25`,fill:`none`}),B(`path`,{class:`success-check`,fill:`none`,d:`m14.1 27.2l7.1 7.2 16.7-16.8`})])],-1),B(`div`,Ln,V(e.text),1),e.description?(v(),Y(`div`,Rn,V(e.description),1)):N(``,!0)])])):N(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-c10f43b3`]]),$=le({visible:!1,text:X(`@F2A3A:加载中...`),showProgress:!1,progress:0});function Bn(){return{loadingState:$,show:e=>{$.visible=!0,$.text=e?.text||X(`@F2A3A:加载中...`),$.showProgress=e?.showProgress||!1,$.progress=e?.progress||0},hide:()=>{$.visible=!1},updateProgress:e=>{$.progress=Math.max(0,Math.min(100,e))},updateText:e=>{$.text=e},setText:e=>{$.visible&&($.text=e)}}}var Vn=le({visible:!1,text:X(`@B8591:操作成功!`),description:``});function Hn(){let e=e=>{Vn.visible=!0,Vn.text=e?.text||X(`@B8591:操作成功!`),Vn.description=e?.description||``;let n=e?.duration||2e3;setTimeout(()=>{t()},n)},t=()=>{Vn.visible=!1};return{successState:Vn,show:e,hide:t}}var Un={class:`one-commit-content`},Wn={class:`one-commit-text`},Gn={class:`one-commit-title`},Kn={key:0,class:`one-commit-desc`},qn=Z(D({__name:`QuickCommitButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`beforeCommit`,`afterCommit`,`clearFields`],setup(t,{expose:r,emit:i}){let a=Q(),o=xe(),s=t,c=i,u=W(()=>a.fileList.some(e=>!ke(e.path,o.lockedFiles))),d=W(()=>a.isSelectionMode&&a.selectedFiles.size>0&&a.selectedUnstagedPaths.length>0),f=W(()=>a.hasConflictedFiles?!0:a.isSelectionMode?!d.value||!s.hasUserCommitMessage:!u.value||!s.hasUserCommitMessage),p=W(()=>a.isAddingFiles||a.isCommiting),h=W(()=>a.hasConflictedFiles?X(`@2E184:存在冲突文件,请先解决冲突`):a.isSelectionMode?a.selectedFiles.size===0?X(`@2E184:请先勾选要提交的文件`):a.selectedUnstagedPaths.length===0?X(`@2E184:所选文件无需暂存或被锁定`):s.hasUserCommitMessage?X(`@2E184:一键完成:仅暂存所选文件 → 提交`):X(`@2E184:请输入提交信息`):u.value?s.hasUserCommitMessage?X(`@2E184:一键完成:暂存所有更改 → 提交`):X(`@2E184:请输入提交信息`):X(`@2E184:没有需要提交的更改`)),g=W(()=>a.isSelectionMode&&d.value?X(`@2E184:一键提交所选`):X(`@2E184:一键提交`)),_=W(()=>s.from===`form`?a.isSelectionMode&&d.value?X(`@2E184:暂存所选 + 提交`):X(`@2E184:暂存 + 提交`):``);async function y(){c(`beforeCommit`);try{let e=await a.stageSelectedAndCommit(s.finalCommitMessage,s.skipHooks);e&&c(`clearFields`),c(`afterCommit`,e)}catch(e){console.error(`一键提交失败:`,e),c(`afterCommit`,!1)}}return r({triggerQuickCommit:y}),(r,i)=>{let a=A,o=e;return v(),Y(`div`,null,[n(L(l),{content:h.value,placement:`top`,"show-after":200},{default:m(()=>[n(o,{type:`primary`,onClick:y,loading:p.value,disabled:f.value,class:R([t.from,`one-commit-button`])},{default:m(()=>[B(`div`,Un,[n(a,{class:`one-commit-icon`},{default:m(()=>[n(L(H))]),_:1}),B(`div`,Wn,[B(`span`,Gn,V(g.value),1),t.from===`form`?(v(),Y(`span`,Kn,V(_.value),1)):N(``,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`])])}}}),[[`__scopeId`,`data-v-0bcf5e9d`]]),Jn={class:`form-bottom-actions`},Yn={class:`actions-flex-container`},Xn={class:`left-actions`},Zn={class:`button-grid`},Qn={class:`right-actions`},$n=Z(D({__name:`GitActionButtons`,props:{hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1},from:{default:`form`}},emits:[`afterCommit`,`afterPush`,`beforePush`,`pushStart`,`clearFields`],setup(e,{expose:t,emit:r}){let i=r,a=F(null);function o(e){i(`afterCommit`,e)}function s(e){i(`afterPush`,e)}function c(){i(`beforePush`)}function l(){i(`pushStart`)}function u(){i(`clearFields`)}async function d(){return a.value?.triggerQuickPush()}return t({triggerQuickPush:d}),(t,r)=>(v(),Y(`div`,Jn,[B(`div`,Yn,[B(`div`,Xn,[B(`div`,Zn,[n(Me,{onClick:()=>{},from:e.from},null,8,[`from`]),n(Pe,{"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforeCommit:()=>{},onAfterCommit:o,onClick:()=>{},from:e.from},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`,`from`]),n(tt,{onBeforePush:()=>{},onAfterPush:s,onClick:()=>{},from:e.from},null,8,[`from`])])]),B(`div`,Qn,[n(qn,{from:e.from,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onAfterCommit:o,onClearFields:u},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),n(ot,{ref_key:`quickPushRef`,ref:a,from:e.from,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforePush:c,onPushStart:l,onAfterPush:s,onClearFields:u},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])])]))}}),[[`__scopeId`,`data-v-2f7ac0a2`]]),er={class:`dialog-toolbar`},tr={class:`filter-controls`},nr={class:`toolbar-actions`},rr=[`disabled`],ir={class:`btn-text`},ar=[`disabled`],or={class:`btn-text`},sr=[`disabled`],cr={class:`btn-text`},lr={class:`history-scroll`},ur={key:0,class:`loading-state`},dr={class:`loading-text`},fr={key:3,class:`history-list`},pr=[`onClick`],mr={class:`command-info`},hr={class:`command-text`},gr={class:`command-meta`},_r={class:`timestamp`},vr={class:`duration`},yr={class:`item-actions`},br={key:0,class:`item-details`},xr={key:0,class:`output-section`},Sr={class:`output-header`},Cr=[`onClick`],wr={class:`output-content`},Tr={key:0,class:`truncation-notice`},Er={class:`output-header`},Dr={class:`output-content`},Or={key:0,class:`truncation-notice`},kr={key:2,class:`output-section error`},Ar={class:`output-header`},jr={class:`output-content`},Mr=Z(D({__name:`CommandHistory`,setup(e){let r=Q(),i=F([]),a=F(!1);function c(e){return Array.isArray(e)?e.join(` `):e==null?``:String(e)}let u=F(!1),d=F(!1),h=F(!1),g=F(new Set),y=F(!1),b=F(!1),x=F(`all`),S=F(`all`),D=F(``),j=W(()=>{let e=i.value;if(x.value!==`all`&&(e=e.filter(e=>x.value===`success`?e.success:!e.success)),S.value!==`all`&&(e=e.filter(e=>{let t=c(e.command).startsWith(`git `);return S.value===`git`?t:!t})),D.value.trim()){let t=D.value.toLowerCase();e=e.filter(e=>c(e.command).toLowerCase().includes(t)||e.stdout&&e.stdout.toLowerCase().includes(t)||e.stderr&&e.stderr.toLowerCase().includes(t)||e.error&&e.error.toLowerCase().includes(t))}return e}),M=W(()=>i.value.filter(e=>e.success).length),te=W(()=>i.value.filter(e=>!e.success).length),H=W(()=>i.value.filter(e=>c(e.command).startsWith(`git `)).length),ne=W(()=>i.value.filter(e=>!c(e.command).startsWith(`git `)).length);function G(){b.value=!0,i.value.length===0&&ae()}async function ae(){try{if(a.value=!0,r.socket&&r.socket.connected)r.socket.emit(`request_full_history`);else{let e=await(await fetch(`/api/command-history`)).json();e.success?i.value=e.history:P.error(`${X(`@81F0F:加载命令历史失败: `)}${e.error}`)}}catch(e){P.error(`${X(`@81F0F:加载命令历史失败: `)}${e.message}`)}finally{a.value=!1}}async function oe(){if(j.value.length===0){P.warning(X(`@81F0F:没有可复制的命令历史`));return}try{d.value=!0;let e=j.value.map(e=>{let t=`# ${ce(e.timestamp)}${X(`@81F0F: (耗时: `)}${le(e.executionTime)}) - ${e.success?X(`@81F0F:成功`):X(`@81F0F:失败`)}\n`;if(t+=`${c(e.command)}\n`,e.stdout&&(t+=`\n# 输出:\n${e.stdout}\n`),e.stderr){let n=J(e.command)?X(`@81F0F:输出信息`):X(`@81F0F:错误输出`);t+=`\n# ${n}:\n${e.stderr}\n`}return e.error&&(t+=`\n# 错误信息:\n${e.error}\n`),t}).join(`
1
+ import"./rolldown-runtime-CMxvf4Kt.js";import{B as e,Bt as t,Cn as n,Ct as r,D as i,E as a,Et as o,Fn as s,Ft as c,G as l,H as u,Ht as d,In as f,J as p,Jn as m,K as h,Kn as g,L as _,Ln as v,Lt as y,N as b,P as x,Pt as S,Q as C,R as w,S as T,Sn as E,Tn as D,W as O,X as k,Y as A,Yn as j,Yt as M,_n as N,a as P,ar as F,at as ee,ct as I,dr as L,fn as te,fr as R,gn as z,hn as B,hr as V,ht as H,i as U,kt as ne,ln as re,lt as ie,mn as W,mr as G,mt as ae,nt as oe,o as se,ot as K,q as ce,rr as le,sn as ue,st as de,tn as fe,tt as pe,un as q,v as J,vn as Y,z as me,zn as he,zt as ge}from"./element-plus-B6Owr5jY.js";import{c as _e}from"./vendor-BuiZXcjj.js";import{n as X,t as Z}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{n as ve,t as ye}from"./CommonDialog-G17HYMln.js";import{n as be,t as xe}from"./configStore-Cq6Qwn35.js";import{a as Se,b as Q,c as Ce,f as we,i as Te,o as Ee,r as De,s as Oe,y as ke}from"./index-CPqKvZBK.js";var Ae={key:0},je={key:1},Me=Z(D({__name:`StageButton`,props:{from:{default:`form`}},emits:[`click`],setup(t,{emit:r}){let i=r,a=Q(),o=xe();function s(e){let t=e.replace(/\\/g,`/`);return o.lockedFiles.some(e=>t===e.replace(/\\/g,`/`))}function c(){return o.lockedFiles.length===0?!1:a.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)?s(e.path):!1)}let u=W(()=>a.fileList.filter(e=>[`modified`,`deleted`,`untracked`].includes(e.type)&&!s(e.path)).length),d=W(()=>a.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)&&!s(e.path))),f=W(()=>a.isSelectionMode&&a.hasSelectableFiles),p=W(()=>a.selectedUnstagedPaths.length),h=W(()=>a.isSelectionMode?p.value===0:!d.value),g=W(()=>f.value?`${X(`@29974:暂存所选 `)}${p.value}${X(`@29974: 个文件`)}`:d.value?c()?`${X(`@29974:暂存`)}${u.value}${X(`@29974:个未暂存文件(逐个添加)`)}`:`${X(`@29974:暂存所有更改(git add .)`)}`:X(`@29974:没有需要暂存的更改`));async function _(){i(`click`);try{if(f.value){await a.stageFiles(a.selectedUnstagedPaths);return}if(a.isSelectionMode)return;c()?await a.addToStage():await a.addAllToStage()}catch(e){console.error(`添加文件失败:`,e)}}return(r,i)=>{let o=e,s=l;return v(),z(s,{content:g.value,placement:`top`},{default:m(()=>[n(o,{type:`primary`,icon:L(S),onClick:_,loading:L(a).isAddingFiles,disabled:h.value,class:R([`stage-button`,`from-${t.from}`,{"is-selective":f.value}])},{default:m(()=>[E(V(f.value?L(X)(`@29974:暂存所选`):L(X)(`@29974:暂存`))+` `,1),f.value?(v(),Y(`span`,Ae,`(`+V(p.value)+`)`,1)):u.value>0?(v(),Y(`span`,je,`(`+V(u.value)+`)`,1)):N(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`class`])]),_:1},8,[`content`])}}}),[[`__scopeId`,`data-v-22060f7f`]]),Ne={key:0},Pe=Z(D({__name:`CommitButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`click`,`beforeCommit`,`afterCommit`],setup(t,{emit:r}){let i=t,a=r,s=Q(),c=xe(),u=W(()=>s.fileList.filter(e=>e.type===`added`&&!ke(e.path,c.lockedFiles)).length),d=W(()=>u.value>0),f=W(()=>s.hasConflictedFiles||s.isCommiting?!0:s.isMergeInProgress?!i.hasUserCommitMessage:!d.value||!i.hasUserCommitMessage),p=W(()=>s.isCommiting?X(`@76A11:正在提交中…`):s.hasConflictedFiles?X(`@76A11:存在冲突文件,请先解决冲突`):s.isMergeInProgress?i.hasUserCommitMessage?X(`@76A11:提交并完成合并`):X(`@76A11:请输入提交信息`):d.value?i.hasUserCommitMessage?`${X(`@76A11:提交`)}${u.value}${X(`@76A11:个已暂存文件`)}`:X(`@76A11:请输入提交信息`):X(`@76A11:没有已暂存的更改`)),h=W(()=>s.isCommiting?X(`@76A11:提交中…`):X(`@76A11:提交`));async function g(){if(i.finalCommitMessage.trim()){a(`beforeCommit`),a(`click`);try{a(`afterCommit`,await s.commitChanges(i.finalCommitMessage,i.skipHooks))}catch(e){console.error(`提交失败:`,e),a(`afterCommit`,!1)}}}return(r,i)=>{let a=e,c=l;return v(),z(c,{content:p.value,placement:`top`,disabled:L(s).isCommiting},{default:m(()=>[n(a,{type:`primary`,onClick:g,icon:L(s).isCommiting?L(o):L(pe),loading:L(s).isCommiting,disabled:f.value,"aria-busy":L(s).isCommiting?`true`:void 0,"aria-label":L(s).isCommiting?L(X)(`@76A11:正在提交中…`):void 0,class:R([`commit-button`,`from-${t.from}`,{"is-committing":L(s).isCommiting}])},{default:m(()=>[E(V(h.value)+` `,1),u.value>0&&!L(s).isCommiting?(v(),Y(`span`,Ne,`(`+V(u.value)+`)`,1)):N(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`aria-busy`,`aria-label`,`class`])]),_:1},8,[`content`,`disabled`])}}}),[[`__scopeId`,`data-v-6bd86c7e`]]),Fe={class:`push-progress-container`},Ie={key:0,class:`pulling-section`},Le={class:`pulling-text-wrap`},Re={class:`pulling-title`},ze={class:`pulling-sub`},Be={class:`stage-header`},Ve={class:`stage-icon`},He={class:`stage-info`},Ue={class:`stage-label`},We={key:0,class:`stage-percent`},Ge={key:0,class:`stage-progress`},Ke={key:2,class:`error-section`},qe={class:`error-header`},Je={class:`error-title`},Ye={class:`error-content`},Xe={key:0,class:`error-suggestion`},Ze={key:3,class:`messages-section`},Qe={class:`messages-title`},$e=Z(D({__name:`PushProgressModal`,props:{modelValue:{type:Boolean}},emits:[`update:modelValue`,`complete`,`pull-requested`],setup(t,{expose:r,emit:a}){let{t:s}=_e(),c=t,l=a,u=xe(),d=Q(),f=F(`progress`),p=F([]),h=F(``),g=F(!1),_=W(()=>h.value.includes(`non-fast-forward`)||h.value.includes(`rejected`)&&h.value.includes(`fetch first`)),y=F(!1);async function b(){y.value=!0;try{(await d.gitPull()).success&&(w.value=!1,l(`pull-requested`))}finally{y.value=!1}}let x=le([{name:`counting`,label:s(`@PUSH:计数对象`),status:`wait`,percent:0},{name:`compressing`,label:s(`@PUSH:压缩对象`),status:`wait`,percent:0},{name:`writing`,label:s(`@PUSH:写入对象`),status:`wait`,percent:0},{name:`resolving`,label:s(`@PUSH:解析增量`),status:`wait`,percent:0}]),S=F(0),C=F(null),w=W({get:()=>c.modelValue,set:e=>l(`update:modelValue`,e)}),T=W(()=>{if(g.value)return s(`@PUSH:正在拉取远程更新`);switch(f.value){case`progress`:return s(`@PUSH:正在推送`);case`success`:return s(`@PUSH:推送成功`);case`error`:return s(`@PUSH:推送失败`);default:return``}});function D(e){switch(e.type){case`progress`:e.message&&(p.value.push(e.message),setTimeout(()=>{C.value&&(C.value.scrollTop=C.value.scrollHeight)},0));break;case`stage-progress`:if(e.stage&&typeof e.percent==`number`){let t=x.findIndex(t=>t.name===e.stage);t!==-1&&(x[t].percent=e.percent,x[t].status=e.percent===100?`finish`:`process`,S.value=t,e.percent===100&&t<x.length-1&&(x[t+1].status=`wait`))}break;case`complete`:e.success?(f.value=`success`,x.forEach(e=>{(e.status===`process`||e.status===`wait`)&&(e.status=`finish`,e.percent=100)}),S.value=-1,u.autoClosePushModal?setTimeout(()=>{w.value=!1,l(`complete`,!0)},2e3):l(`complete`,!0)):(f.value=`error`,h.value=e.error||`未知错误`,S.value<x.length&&(x[S.value].status=`error`),S.value=-1,l(`complete`,!1));break}}function O(){f.value=`progress`,p.value=[],h.value=``,S.value=0,g.value=!1,x.forEach(e=>{e.status=`wait`,e.percent=0})}function k(e){g.value=e}return r({handleProgress:D,reset:O,setPulling:k}),(t,r)=>{let a=e;return v(),z(L(i),{modelValue:w.value,"onUpdate:modelValue":r[0]||=e=>w.value=e,title:T.value,width:`650px`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":f.value!==`progress`,"append-to-body":!0,"lock-scroll":!1,"destroy-on-close":``,class:R([`push-progress-dialog`,`status-${f.value}`])},{default:m(()=>[B(`div`,Fe,[g.value?(v(),Y(`div`,Ie,[r[1]||=B(`div`,{class:`pulling-icon-wrap`},[B(`svg`,{class:`pulling-spinner`,viewBox:`0 0 50 50`},[B(`circle`,{class:`pulling-spinner-track`,cx:`25`,cy:`25`,r:`20`,fill:`none`,"stroke-width":`4`}),B(`circle`,{class:`pulling-spinner-arc`,cx:`25`,cy:`25`,r:`20`,fill:`none`,"stroke-width":`4`})])],-1),B(`div`,Le,[B(`div`,Re,V(L(s)(`@PUSH:正在拉取远程更新`)),1),B(`div`,ze,V(L(s)(`@PUSH:拉取完成后自动继续推送`)),1)])])):(v(),Y(`div`,{key:1,class:R([`stages-section`,{"is-loading":f.value===`progress`,"is-success":f.value===`success`}])},[(v(!0),Y(q,null,he(x,(e,t)=>(v(),Y(`div`,{key:e.name,class:R([`stage-item`,{active:S.value===t,finished:e.status===`finish`,error:e.status===`error`}])},[B(`div`,Be,[B(`div`,Ve,[e.status===`finish`?(v(),z(L(A),{key:0,class:`icon-finish`},{default:m(()=>[n(L(oe))]),_:1})):e.status===`error`?(v(),z(L(A),{key:1,class:`icon-error`},{default:m(()=>[n(L(K))]),_:1})):e.status===`process`?(v(),z(L(A),{key:2,class:`icon-process rotating`},{default:m(()=>[n(L(o))]),_:1})):(v(),z(L(A),{key:3,class:`icon-wait`},{default:m(()=>[n(L(o))]),_:1}))]),B(`div`,He,[B(`div`,Ue,V(e.label),1),e.status===`process`||e.status===`finish`?(v(),Y(`div`,We,V(e.percent)+`% `,1)):N(``,!0)])]),e.status===`process`||e.status===`finish`?(v(),Y(`div`,Ge,[n(L(J),{percentage:e.percent,"stroke-width":6,"show-text":!1,color:e.status===`finish`?`var(--color-success)`:`var(--color-primary)`},null,8,[`percentage`,`color`])])):N(``,!0)],2))),128))],2)),f.value===`error`&&h.value?(v(),Y(`div`,Ke,[B(`div`,qe,[B(`div`,Je,V(L(s)(`@PUSH:错误详情`))+`:`,1),_.value?(v(),z(a,{key:0,type:`primary`,size:`small`,loading:y.value,onClick:b,class:`pull-button`},{default:m(()=>[n(L(A),null,{default:m(()=>[n(L(ae))]),_:1}),E(` `+V(L(s)(`@PUSH:先拉取更新`)),1)]),_:1},8,[`loading`])):N(``,!0)]),B(`div`,Ye,V(h.value),1),_.value?(v(),Y(`div`,Xe,V(L(s)(`@PUSH:检测到远程有新提交,请先拉取更新后再推送。`)),1)):N(``,!0)])):N(``,!0),p.value.length>0?(v(),Y(`div`,Ze,[B(`div`,Qe,V(L(s)(`@PUSH:详细信息`))+`:`,1),B(`div`,{ref_key:`messagesContainerRef`,ref:C,class:`progress-messages`},[(v(!0),Y(q,null,he(p.value,(e,t)=>(v(),Y(`div`,{key:t,class:`message-item`},V(e),1))),128))],512)])):N(``,!0)])]),_:1},8,[`modelValue`,`title`,`show-close`,`class`])}}}),[[`__scopeId`,`data-v-e8766d98`]]),et={key:0},tt=Z(D({__name:`PushButton`,props:{from:{default:`form`}},emits:[`click`,`beforePush`,`afterPush`],setup(t,{emit:r}){let i=r,a=Q(),o=F(!1),s=F(null),c=W(()=>a.branchAhead>0),u=W(()=>a.fileList.some(e=>e.type===`added`)),d=W(()=>a.hasConflictedFiles?!1:a.hasUpstream&&c.value&&!u.value),f=W(()=>!d.value),p=W(()=>a.hasConflictedFiles?X(`@F4137:存在冲突文件,请先解决冲突`):a.hasUpstream?c.value?u.value?X(`@F4137:有未提交的暂存更改,请先提交`):`${X(`@F4137:推送`)}${a.branchAhead}${X(`@F4137:个本地提交`)}`:X(`@F4137:没有需要推送的提交`):X(`@F4137:当前分支没有上游分支`)),h=W(()=>d.value?{backgroundColor:`var(--color-success)`,borderColor:`var(--color-success)`}:{});async function g(){i(`beforePush`),i(`click`);try{o.value=!0,s.value&&s.value.reset();let e=await a.pushToRemoteWithProgress(e=>{s.value&&s.value.handleProgress(e)});e&&await new Promise(e=>setTimeout(e,200)),i(`afterPush`,e)}catch(e){console.error(`推送失败:`,e),i(`afterPush`,!1)}}function _(e){}return(r,i)=>{let u=e,d=l;return v(),Y(`div`,null,[n(d,{content:p.value,placement:`top`},{default:m(()=>[n(u,{type:`primary`,icon:L(M),onClick:g,loading:L(a).isPushing,disabled:f.value,style:G(h.value),class:R([`push-button`,`from-${t.from}`])},{default:m(()=>[E(V(L(X)(`@F4137:推送`))+` `,1),c.value?(v(),Y(`span`,et,`(`+V(L(a).branchAhead)+`)`,1)):N(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`style`,`class`])]),_:1},8,[`content`]),n($e,{ref_key:`progressModalRef`,ref:s,modelValue:o.value,"onUpdate:modelValue":i[0]||=e=>o.value=e,onComplete:_},null,8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-a0e22137`]]),nt={class:`one-push-content`},rt={class:`one-push-text`},it={class:`one-push-title`},at={key:0,class:`one-push-desc`},ot=Z(D({__name:`QuickPushButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`beforePush`,`pushStart`,`afterPush`,`clearFields`],setup(t,{expose:r,emit:i}){let a=Q(),o=xe(),s=F(!1),u=F(null),d=t,f=i,p=W(()=>a.fileList.some(e=>!ke(e.path,o.lockedFiles))),h=W(()=>a.isSelectionMode&&a.selectedFiles.size>0&&a.selectedUnstagedPaths.length>0),g=W(()=>a.hasConflictedFiles?!0:a.isSelectionMode?!h.value||!d.hasUserCommitMessage||!a.hasUpstream:!p.value&&a.branchAhead===0||!d.hasUserCommitMessage||!a.hasUpstream),_=W(()=>a.isAddingFiles||a.isCommiting||a.isPushing),y=W(()=>{if(a.hasConflictedFiles)return X(`@2E184:存在冲突文件,请先解决冲突`);if(a.isSelectionMode)return a.selectedFiles.size===0?X(`@2E184:请先勾选要推送的文件`):a.selectedUnstagedPaths.length===0?X(`@2E184:所选文件无需暂存或被锁定`):d.hasUserCommitMessage?a.hasUpstream?X(`@2E184:一键完成:仅暂存所选文件 → 提交 → 推送到远程仓库`):X(`@2E184:当前分支没有上游分支`):X(`@2E184:请输入提交信息`);let e=a.branchAhead>0;return!p.value&&!e?X(`@2E184:没有需要提交或推送的更改`):d.hasUserCommitMessage?a.hasUpstream?p.value?X(`@2E184:一键完成:暂存所有更改 → 提交 → 推送到远程仓库`):X(`@2E184:本地已提交,一键推送到远程仓库`):X(`@2E184:当前分支没有上游分支`):X(`@2E184:请输入提交信息`)}),b=W(()=>a.isSelectionMode&&h.value?X(`@2E184:一键推送所选`):X(`@2E184:一键推送所有`)),x=W(()=>d.from===`form`?a.isSelectionMode&&h.value?X(`@2E184:暂存所选 + 提交 + 推送`):X(`@2E184:暂存 + 提交 + 推送`):``);async function S(){f(`beforePush`);try{let e=a.isSelectionMode&&h.value;if((e||p.value)&&!(e?await a.stageSelectedAndCommit(d.finalCommitMessage,d.skipHooks):await a.addAndCommit(d.finalCommitMessage,d.skipHooks))){f(`afterPush`,!1);return}if(f(`pushStart`),s.value=!0,o.pullBeforePush){u.value?.setPulling(!0);let e=await a.gitPull();if(u.value?.setPulling(!1),!e.success){P.error(X(`@2E184:拉取远程更新失败,已停止推送`)),s.value=!1,a.fetchStatus(),a.getBranchStatus(!0),f(`afterPush`,!1);return}}u.value&&u.value.reset();let t=await a.pushToRemoteWithProgress(e=>{u.value&&u.value.handleProgress(e)});if(t){try{window.dispatchEvent(new CustomEvent(`zen-gitsync:after-quick-push-success`))}catch{}f(`clearFields`)}f(`afterPush`,t)}catch(e){console.error(`一键推送失败:`,e),f(`afterPush`,!1)}}r({triggerQuickPush:S});function C(e){}return(r,i)=>{let a=A,o=e;return v(),Y(`div`,null,[n(L(l),{content:y.value,placement:`top`,"show-after":200},{default:m(()=>[n(o,{type:`primary`,onClick:S,loading:_.value,disabled:g.value,class:R([t.from,`one-push-button`])},{default:m(()=>[B(`div`,nt,[n(a,{class:`one-push-icon`},{default:m(()=>[n(L(c))]),_:1}),B(`div`,rt,[B(`span`,it,V(b.value),1),t.from===`form`?(v(),Y(`span`,at,V(x.value),1)):N(``,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`]),n($e,{ref_key:`progressModalRef`,ref:u,modelValue:s.value,"onUpdate:modelValue":i[0]||=e=>s.value=e,onComplete:C,onPullRequested:S},null,8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-9f003c37`]]),st={class:`create-tag-button`},ct={class:`tag-dialog-content`},lt={class:`tag-info-card`},ut={class:`info-icon`},dt={class:`info-content`},ft={class:`form-tip`},pt={class:`form-tip`},mt={class:`form-tip`},ht=Z(D({__name:`CreateTagButton`,props:{variant:{default:`icon`}},setup(t){let i=t,a=Q(),o=F(!1),s=F(``),c=F(``),u=F(`lightweight`),f=F(``),p=F(!1);function g(){s.value=``,c.value=``,u.value=`lightweight`,f.value=``,o.value=!0}async function _(){if(!s.value.trim()){P.warning(X(`@TAG01:请输入标签名称`));return}if(!/^[a-zA-Z0-9._\/-]+$/.test(s.value)){P.warning(X(`@TAG01:标签名称只能包含字母、数字、点、下划线、斜杠和连字符`));return}try{p.value=!0;let e=await(await fetch(`/api/create-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:s.value.trim(),message:c.value.trim(),type:u.value,commit:f.value.trim()})})).json();e.success?(P.success(X(`@TAG01:标签创建成功`)),o.value=!1):P.error(e.error||X(`@TAG01:创建标签失败`))}catch(e){console.error(`创建标签失败:`,e),P.error(X(`@TAG01:创建标签失败`))}finally{p.value=!1}}let y=W(()=>u.value===`lightweight`?X(`@TAG01:轻量标签是指向提交对象的引用,不包含额外信息`):X(`@TAG01:附注标签是完整的Git对象,包含标签信息、日期、标签者和可选的签名`));return(t,S)=>{let C=A,w=e,T=l,D=O,k=ce,j=b,M=x,P=h;return v(),Y(`div`,st,[n(T,{content:L(X)(`@TAG01:为当前提交创建标签`),placement:`top`,"show-after":200,disabled:i.variant===`text`},{default:m(()=>[n(w,{type:`success`,onClick:g,disabled:!L(a).isGitRepo,circle:i.variant===`icon`,size:i.variant===`icon`?`small`:`default`,class:R(i.variant===`text`?`action-button`:``)},{default:m(()=>[i.variant===`icon`?(v(),z(C,{key:0},{default:m(()=>[n(L(d))]),_:1})):(v(),Y(q,{key:1},[E(V(L(X)(`@TAG01:创建标签`)),1)],64))]),_:1},8,[`disabled`,`circle`,`size`,`class`])]),_:1},8,[`content`,`disabled`]),n(ye,{modelValue:o.value,"onUpdate:modelValue":S[4]||=e=>o.value=e,title:L(X)(`@TAG01:创建 Git 标签`),size:`medium`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":L(X)(`@TAG01:创建`),"cancel-text":L(X)(`@TAG01:取消`),"confirm-loading":p.value,"custom-class":`tag-dialog`,onConfirm:_},{default:m(()=>[B(`div`,ct,[B(`div`,lt,[B(`div`,ut,[n(C,null,{default:m(()=>[n(L(d))]),_:1})]),B(`div`,dt,[B(`h4`,null,V(L(X)(`@TAG01:Git 标签`)),1),B(`p`,null,V(L(X)(`@TAG01:标签用于标记项目的重要版本点,如发布版本 v1.0.0`)),1)])]),n(P,{"label-position":`top`,class:`tag-form`},{default:m(()=>[n(k,{label:L(X)(`@TAG01:标签名称`),required:``},{default:m(()=>[n(D,{modelValue:s.value,"onUpdate:modelValue":S[0]||=e=>s.value=e,placeholder:L(X)(`@TAG01:例如: v1.0.0 或 release-2024`),clearable:``,maxlength:`100`},{prefix:m(()=>[n(C,null,{default:m(()=>[n(L(d))]),_:1})]),_:1},8,[`modelValue`,`placeholder`]),B(`div`,ft,[n(C,null,{default:m(()=>[n(L(r))]),_:1}),B(`span`,null,V(L(X)(`@TAG01:建议使用语义化版本号,如 v1.0.0`)),1)])]),_:1},8,[`label`]),n(k,{label:L(X)(`@TAG01:标签类型`)},{default:m(()=>[n(M,{modelValue:u.value,"onUpdate:modelValue":S[1]||=e=>u.value=e,size:`default`},{default:m(()=>[n(j,{value:`lightweight`},{default:m(()=>[E(V(L(X)(`@TAG01:轻量标签`)),1)]),_:1}),n(j,{value:`annotated`},{default:m(()=>[E(V(L(X)(`@TAG01:附注标签`)),1)]),_:1})]),_:1},8,[`modelValue`]),B(`div`,pt,[n(C,null,{default:m(()=>[n(L(r))]),_:1}),B(`span`,null,V(y.value),1)])]),_:1},8,[`label`]),u.value===`annotated`?(v(),z(k,{key:0,label:L(X)(`@TAG01:标签说明`),required:u.value===`annotated`},{default:m(()=>[n(D,{modelValue:c.value,"onUpdate:modelValue":S[2]||=e=>c.value=e,placeholder:L(X)(`@TAG01:为此标签添加说明信息`),clearable:``,rows:3,type:`textarea`,resize:`none`,maxlength:`500`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`,`required`])):N(``,!0),n(k,{label:L(X)(`@TAG01:目标提交(可选)`)},{default:m(()=>[n(D,{modelValue:f.value,"onUpdate:modelValue":S[3]||=e=>f.value=e,placeholder:L(X)(`@TAG01:留空则为当前HEAD,或输入commit SHA`),clearable:``,maxlength:`40`},{prefix:m(()=>[...S[5]||=[B(`span`,{class:`commit-prefix`},`commit:`,-1)]]),_:1},8,[`modelValue`,`placeholder`]),B(`div`,mt,[n(C,null,{default:m(()=>[n(L(r))]),_:1}),B(`span`,null,V(L(X)(`@TAG01:默认为当前HEAD提交,也可以指定历史提交`)),1)])]),_:1},8,[`label`])]),_:1})])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`])])}}}),[[`__scopeId`,`data-v-cbbcdcda`]]),gt={class:`tag-list-button`},_t={class:`tag-list-content`},vt={key:0,class:`tag-header`},yt={class:`tag-stats`},bt={class:`stat-item`},xt={class:`stat-number`},St={class:`stat-label`},Ct={class:`tag-actions-header`},wt={class:`tag-list-container`},Tt={key:0,class:`empty-state`},Et={class:`empty-text`},Dt={class:`empty-hint`},Ot={key:1,class:`tag-cards`},kt={class:`tag-card-content`},At={class:`tag-info`},jt={class:`tag-main-info`},Mt={class:`tag-name-badge`},Nt={class:`tag-name-text`},Pt={class:`tag-meta`},Ft={class:`tag-commit`},It={class:`tag-date`},Lt={key:0,class:`tag-message`},Rt={class:`tag-card-actions`},zt={key:0,class:`tag-detail-content`},Bt={class:`detail-row`},Vt={class:`detail-label`},Ht={class:`detail-value`},Ut={class:`detail-row`},Wt={class:`detail-label`},Gt={class:`detail-value`},Kt={class:`detail-row`},qt={class:`detail-label`},Jt={class:`detail-value`},Yt={class:`detail-row`},Xt={class:`detail-label`},Zt={key:0,class:`detail-row detail-message`},Qt={class:`detail-label`},$t={class:`message-content`},en=Z(D({__name:`TagListButton`,props:{variant:{default:`icon`}},setup(t){let i=t,a=Q(),o=F(!1),s=F([]),c=F(!1),u=F(!1),f=F(!1),p=F(!1),h=F(null);async function g(){o.value=!0,await _()}async function _(){try{c.value=!0;let e=await(await fetch(`/api/list-tags`)).json();e.success?s.value=e.tags||[]:P.error(e.error||X(`@TAG01:获取标签列表失败`))}catch(e){console.error(`获取标签列表失败:`,e),P.error(X(`@TAG01:获取标签列表失败`))}finally{c.value=!1}}function b(e){h.value=e,p.value=!0}async function x(e){U.confirm(X(`@TAG01:确定要推送此标签到远程仓库吗?`),X(`@TAG01:推送标签`),{confirmButtonText:X(`@TAG01:推送`),cancelButtonText:X(`@TAG01:取消`),type:`info`}).then(async()=>{try{f.value=!0;let t=await(await fetch(`/api/push-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:e})})).json();t.success?P.success(X(`@TAG01:标签推送成功`)):P.error(t.error||X(`@TAG01:推送标签失败`))}catch(e){console.error(`推送标签失败:`,e),P.error(X(`@TAG01:推送标签失败`))}finally{f.value=!1}}).catch(()=>{})}async function S(){U.confirm(X(`@TAG01:确定要推送所有标签到远程仓库吗?`),X(`@TAG01:推送所有标签`),{confirmButtonText:X(`@TAG01:推送`),cancelButtonText:X(`@TAG01:取消`),type:`info`}).then(async()=>{try{f.value=!0;let e=await(await fetch(`/api/push-all-tags`,{method:`POST`})).json();e.success?P.success(X(`@TAG01:所有标签推送成功`)):P.error(e.error||X(`@TAG01:推送标签失败`))}catch(e){console.error(`推送标签失败:`,e),P.error(X(`@TAG01:推送标签失败`))}finally{f.value=!1}}).catch(()=>{})}async function C(e){U.confirm(X(`@TAG01:确定要删除此标签吗?此操作不可恢复。`),X(`@TAG01:删除标签`),{confirmButtonText:X(`@TAG01:删除`),cancelButtonText:X(`@TAG01:取消`),type:`warning`}).then(async()=>{await w(e)}).catch(()=>{})}async function w(e){try{u.value=!0;let t=await(await fetch(`/api/delete-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:e})})).json();t.success?(P.success(X(`@TAG01:标签删除成功`)),await _()):P.error(t.error||X(`@TAG01:删除标签失败`))}catch(e){console.error(`删除标签失败:`,e),P.error(X(`@TAG01:删除标签失败`))}finally{u.value=!1}}function D(e){if(!e)return`-`;try{return new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}catch{return e}}return(t,w)=>{let O=A,k=e,P=l,F=T,ee=me,I=se;return v(),Y(`div`,gt,[n(P,{content:L(X)(`@TAG01:查看和管理所有标签`),placement:`top`,"show-after":200,disabled:i.variant===`text`},{default:m(()=>[n(k,{type:`info`,onClick:g,disabled:!L(a).isGitRepo,circle:i.variant===`icon`,size:i.variant===`icon`?`small`:`default`,class:R(i.variant===`text`?`action-button`:``)},{default:m(()=>[i.variant===`icon`?(v(),z(O,{key:0},{default:m(()=>[n(L(d))]),_:1})):(v(),Y(q,{key:1},[E(V(L(X)(`@TAG01:标签列表`)),1)],64))]),_:1},8,[`disabled`,`circle`,`size`,`class`])]),_:1},8,[`content`,`disabled`]),n(ye,{modelValue:o.value,"onUpdate:modelValue":w[0]||=e=>o.value=e,title:L(X)(`@TAG01:Git 标签列表`),size:`large`,"show-footer":!1,"custom-class":`tag-list-dialog`},{default:m(()=>[B(`div`,_t,[c.value?N(``,!0):(v(),Y(`div`,vt,[B(`div`,yt,[B(`div`,bt,[n(O,{class:`stat-icon`},{default:m(()=>[n(L(d))]),_:1}),B(`span`,xt,V(s.value.length),1),B(`span`,St,V(L(X)(`@TAG01:个标签`)),1)])]),B(`div`,Ct,[n(k,{type:`primary`,size:`small`,icon:L(y),onClick:_,loading:c.value,class:`refresh-btn`},{default:m(()=>[E(V(L(X)(`@TAG01:刷新`)),1)]),_:1},8,[`icon`,`loading`]),s.value.length>0?(v(),z(k,{key:0,type:`success`,size:`small`,icon:L(M),onClick:S,loading:f.value,class:`push-all-btn`},{default:m(()=>[E(V(L(X)(`@TAG01:推送所有标签`)),1)]),_:1},8,[`icon`,`loading`])):N(``,!0)])])),j((v(),Y(`div`,wt,[s.value.length===0&&!c.value?(v(),Y(`div`,Tt,[n(F,{description:L(X)(`@TAG01:暂无标签`),"image-size":120},{image:m(()=>[n(O,{class:`empty-icon`},{default:m(()=>[n(L(d))]),_:1})]),description:m(()=>[B(`p`,Et,V(L(X)(`@TAG01:还没有创建任何标签`)),1),B(`p`,Dt,V(L(X)(`@TAG01:使用创建标签功能为项目添加版本标记`)),1)]),_:1},8,[`description`])])):(v(),Y(`div`,Ot,[(v(!0),Y(q,null,he(s.value,e=>(v(),Y(`div`,{key:e.name,class:`tag-card`},[B(`div`,kt,[B(`div`,At,[B(`div`,jt,[B(`div`,Mt,[n(O,{class:`badge-icon`},{default:m(()=>[n(L(d))]),_:1}),B(`span`,Nt,V(e.name),1),n(ee,{size:`small`,type:e.type===`annotated`?`warning`:`info`,class:`type-tag`},{default:m(()=>[E(V(e.type===`annotated`?L(X)(`@TAG01:附注`):L(X)(`@TAG01:轻量`)),1)]),_:2},1032,[`type`])]),B(`div`,Pt,[B(`span`,Ft,[n(O,null,{default:m(()=>[n(L(r))]),_:1}),E(` `+V(e.commit.substring(0,8)),1)]),B(`span`,It,V(D(e.date)),1)]),e.message?(v(),Y(`div`,Lt,V(e.message),1)):N(``,!0)])]),B(`div`,Rt,[e.message?(v(),z(k,{key:0,size:`small`,type:`info`,onClick:t=>b(e),class:`action-btn view-btn`},{default:m(()=>[E(V(L(X)(`@TAG01:查看`)),1)]),_:1},8,[`onClick`])):N(``,!0),n(k,{size:`small`,type:`success`,icon:L(M),onClick:t=>x(e.name),loading:f.value,class:`action-btn push-btn`},{default:m(()=>[E(V(L(X)(`@TAG01:推送`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),n(k,{size:`small`,type:`danger`,icon:L(ie),onClick:t=>C(e.name),loading:u.value,class:`action-btn delete-btn`},{default:m(()=>[E(V(L(X)(`@TAG01:删除`)),1)]),_:1},8,[`icon`,`onClick`,`loading`])])])]))),128))]))])),[[I,c.value]])])]),_:1},8,[`modelValue`,`title`]),n(ye,{modelValue:p.value,"onUpdate:modelValue":w[1]||=e=>p.value=e,title:L(X)(`@TAG01:标签详情`),size:`medium`,"show-footer":!1,"custom-class":`tag-detail-dialog`},{default:m(()=>[h.value?(v(),Y(`div`,zt,[B(`div`,Bt,[B(`span`,Vt,V(L(X)(`@TAG01:标签名称:`)),1),B(`code`,Ht,V(h.value.name),1)]),B(`div`,Ut,[B(`span`,Wt,V(L(X)(`@TAG01:提交SHA:`)),1),B(`code`,Gt,V(h.value.commit),1)]),B(`div`,Kt,[B(`span`,qt,V(L(X)(`@TAG01:创建时间:`)),1),B(`span`,Jt,V(D(h.value.date)),1)]),B(`div`,Yt,[B(`span`,Xt,V(L(X)(`@TAG01:类型:`)),1),n(ee,{type:h.value.type===`annotated`?`warning`:`info`,size:`small`},{default:m(()=>[E(V(h.value.type===`annotated`?L(X)(`@TAG01:附注标签`):L(X)(`@TAG01:轻量标签`)),1)]),_:1},8,[`type`])]),h.value.message?(v(),Y(`div`,Zt,[B(`span`,Qt,V(L(X)(`@TAG01:标签说明:`)),1),B(`div`,$t,V(h.value.message),1)])):N(``,!0)])):N(``,!0)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-fc8d7e86`]]),tn={class:`git-operations-button`},nn={class:`actions-section`},rn={class:`action-groups`},an={class:`action-group`},on={class:`group-title`},sn={class:`group-buttons`},cn={key:0},ln={class:`action-group`},un={class:`group-title`},dn={class:`group-buttons`},fn={class:`action-group`},pn={class:`group-title`},mn={class:`group-buttons`},hn={key:0},gn={class:`action-group`},_n={class:`group-title`},vn={class:`group-buttons`},yn={class:`action-group`},bn={class:`group-title`},xn={class:`group-buttons`},Sn={class:`action-group`},Cn={class:`group-title`},wn={class:`group-buttons`},Tn={class:`pull-error-content`},En={key:0},Dn={key:1},On={class:`pull-error-detail`},kn={class:`pull-error-label`},An={class:`pull-error-pre`},jn=Z(D({__name:`GitOperationsButton`,props:{variant:{default:`icon`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`afterCommit`,`afterPush`,`beforePush`,`clearFields`],setup(t,{expose:i,emit:o}){let s=t,c=o,u=Q(),d=F(!1),f=F(!1),p=F({needsMerge:!1,error:``,fullError:``,pullOutput:``});function h(){d.value=!0}let g=W(()=>u.fileList.filter(e=>e.type===`added`).length),_=W(()=>u.branchBehind>0),y=W(()=>u.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)));async function b(){try{let e=await u.gitPull();e.success?(await u.fetchStatus(),await u.fetchLog(!1)):(p.value={needsMerge:e.needsMerge,error:e.error,fullError:e.fullError,pullOutput:e.pullOutput},f.value=!0)}catch(e){console.error(`拉取失败:`,e)}}async function x(){try{await u.gitFetchAll(),await u.fetchStatus(),await u.fetchLog(!1)}catch(e){console.error(`获取远程分支失败:`,e)}}async function S(){if(s.hasUserCommitMessage)try{await u.addAndCommit(s.finalCommitMessage,s.skipHooks),u.fetchStatus(),u.fetchLog(),c(`afterCommit`,!0),c(`clearFields`)}catch(e){console.error(`暂存并提交失败:`,e)}}function C(){c(`beforePush`)}function w(e){c(`afterPush`,e)}function T(){c(`clearFields`)}return i({openGitOperationsDrawer:h}),(i,o)=>{let D=A,O=e,k=l,j=a;return v(),Y(`div`,tn,[s.variant===`icon`?(v(),z(ve,{key:0,tooltip:L(X)(`@F13B4:Git 操作`),size:`large`,"custom-class":`btn-rotate-on-hover`,onClick:h},{default:m(()=>[n(D,null,{default:m(()=>[n(L(ne))]),_:1})]),_:1},8,[`tooltip`])):(v(),z(O,{key:1,type:`primary`,class:`action-button`,onClick:h},{default:m(()=>[E(V(L(X)(`@F13B4:Git 操作`)),1)]),_:1})),n(j,{modelValue:d.value,"onUpdate:modelValue":o[2]||=e=>d.value=e,title:L(X)(`@76872:Git 操作`),direction:`rtl`,size:`362px`,"with-header":!0,"show-close":!0,"destroy-on-close":!1,"append-to-body":!0,class:`git-operations-drawer`},{default:m(()=>[B(`div`,nn,[B(`div`,rn,[B(`div`,an,[B(`div`,on,V(L(X)(`@76872:基础操作`)),1),B(`div`,sn,[n(Me,{onClick:()=>{},from:`drawer`}),n(Te,{onClick:()=>{},from:`drawer`}),n(Pe,{"has-user-commit-message":t.hasUserCommitMessage,"final-commit-message":t.finalCommitMessage,"skip-hooks":t.skipHooks,onBeforeCommit:()=>{},onAfterCommit:o[0]||=e=>c(`afterCommit`,e),onClick:()=>{},from:`drawer`},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),n(tt,{onBeforePush:()=>{},onAfterPush:o[1]||=e=>c(`afterPush`,e),onClick:()=>{},from:`drawer`}),n(k,{content:L(u).hasConflictedFiles?L(X)(`@76872:存在冲突文件,请先解决冲突`):_.value?`${L(X)(`@76872:拉取`)}${L(u).branchBehind}${L(X)(`@76872:个远程提交`)}`:`git pull`,placement:`top`},{default:m(()=>[n(O,{type:`primary`,icon:L(ae),onClick:b,loading:L(u).isGitPulling,disabled:!L(u).hasUpstream||L(u).hasConflictedFiles,class:`action-button`,style:G(L(u).hasUpstream&&!L(u).hasConflictedFiles?{color:`white`,backgroundColor:`#1e90ff`,borderColor:`#1e90ff`}:{})},{default:m(()=>[E(V(L(X)(`@76872:拉取`))+` `,1),_.value?(v(),Y(`span`,cn,`(`+V(L(u).branchBehind)+`)`,1)):N(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`style`])]),_:1},8,[`content`]),n(k,{content:`git fetch --all`,placement:`top`},{default:m(()=>[n(O,{type:`info`,icon:L(de),onClick:x,loading:L(u).isGitFetching,class:`action-button`,style:{color:`white`,"background-color":`#1e90ff`,"border-color":`#1e90ff`}},{default:m(()=>[E(V(L(X)(`@76872:获取所有远程分支`)),1)]),_:1},8,[`icon`,`loading`])]),_:1})])]),B(`div`,ln,[B(`div`,un,V(L(X)(`@76872:组合操作`)),1),B(`div`,dn,[n(k,{content:L(u).hasConflictedFiles?L(X)(`@76872:存在冲突文件,请先解决冲突`):`git add + git commit`,placement:`top`},{default:m(()=>[n(O,{type:`primary`,icon:L(H),onClick:S,loading:L(u).isAddingFiles||L(u).isCommiting,disabled:!y.value||!t.hasUserCommitMessage||L(u).hasConflictedFiles,class:`action-button`},{default:m(()=>[E(V(L(X)(`@76872:暂存并提交`)),1)]),_:1},8,[`icon`,`loading`,`disabled`])]),_:1},8,[`content`]),n(ot,{from:`drawer`,"has-user-commit-message":t.hasUserCommitMessage,"final-commit-message":t.finalCommitMessage,"skip-hooks":t.skipHooks,onBeforePush:C,onAfterPush:w,onClearFields:T},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])]),B(`div`,fn,[B(`div`,pn,V(L(X)(`@76872:重置操作`)),1),B(`div`,mn,[n(k,{content:g.value>0?`${L(X)(`@76872:撤销`)}${g.value}${L(X)(`@76872:个已暂存文件`)}`:`git reset HEAD`,placement:`top`},{default:m(()=>[n(O,{type:`warning`,icon:L(ge),onClick:L(u).resetHead,loading:L(u).isResetting,disabled:g.value===0||L(u).hasConflictedFiles,class:`action-button reset-button`},{default:m(()=>[E(V(L(X)(`@76872:重置暂存区`))+` `,1),g.value>0?(v(),Y(`span`,hn,`(`+V(g.value)+`)`,1)):N(``,!0)]),_:1},8,[`icon`,`onClick`,`loading`,`disabled`])]),_:1},8,[`content`]),n(De,{variant:`text`})])]),B(`div`,gn,[B(`div`,_n,V(L(X)(`@76872:分支操作`)),1),B(`div`,vn,[n(Se,{variant:`text`})])]),B(`div`,yn,[B(`div`,bn,V(L(X)(`@76872:储藏操作`)),1),B(`div`,xn,[n(Ce,{variant:`text`}),n(Oe,{variant:`text`})])]),B(`div`,Sn,[B(`div`,Cn,V(L(X)(`@TAG01:标签操作`)),1),B(`div`,wn,[n(ht,{variant:`text`}),n(en,{variant:`text`})])])])])]),_:1},8,[`modelValue`,`title`]),n(ye,{modelValue:f.value,"onUpdate:modelValue":o[3]||=e=>f.value=e,title:p.value.needsMerge?L(X)(`@76872:需要合并更改`):L(X)(`@76872:拉取失败`),size:`medium`,"show-footer":!0,"show-cancel":!1,"confirm-text":L(X)(`@76872:我知道了`),"append-to-body":!0,onConfirm:o[4]||=e=>f.value=!1},{default:m(()=>[B(`div`,Tn,[B(`div`,{class:R([`pull-error-type`,p.value.needsMerge?`is-warning`:`is-error`])},[n(D,{class:`pull-error-icon`},{default:m(()=>[n(L(r))]),_:1}),p.value.needsMerge?(v(),Y(`span`,En,V(L(X)(`@76872:本地存在未提交的更改,与远程内容冲突,请先处理本地更改后再拉取。`)),1)):(v(),Y(`span`,Dn,V(L(X)(`@76872:执行 git pull 时发生错误,请查看详细信息。`)),1))],2),B(`div`,On,[B(`div`,kn,V(L(X)(`@76872:错误详情`))+`:`,1),B(`pre`,An,V(p.value.fullError||p.value.error),1)])])]),_:1},8,[`modelValue`,`title`,`confirm-text`])])}}}),[[`__scopeId`,`data-v-58350746`]]),Mn={class:`loading-container`},Nn={class:`loading-text`},Pn={key:0,class:`loading-progress`},Fn=Z(D({__name:`GlobalLoading`,props:{visible:{type:Boolean,default:!1},text:{default:X(`@2AEBA:加载中...`)},showProgress:{type:Boolean,default:!1},progress:{default:0},mock:{type:Boolean,default:!1}},setup(e){return(t,r)=>(v(),z(te,{to:`body`},[n(fe,{name:`loading-fade`},{default:m(()=>[e.visible||e.mock?(v(),Y(`div`,{key:0,class:`global-loading-overlay`,onClick:r[0]||=re(()=>{},[`stop`])},[B(`div`,Mn,[r[1]||=B(`div`,{class:`loading-spinner`},[B(`div`,{class:`spinner-ring`}),B(`div`,{class:`spinner-ring`}),B(`div`,{class:`spinner-ring`})],-1),B(`div`,Nn,V(e.text),1),e.showProgress||e.mock?(v(),Y(`div`,Pn,[B(`div`,{class:R([`progress-bar`,{"is-mock":e.mock&&!e.showProgress}]),style:G(e.showProgress?{width:e.progress+`%`}:void 0)},null,6)])):N(``,!0)])])):N(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-6d13a220`]]),In={class:`success-container`},Ln={class:`success-text`},Rn={key:0,class:`success-description`},zn=Z(D({__name:`SuccessModal`,props:{visible:{type:Boolean,default:!1},text:{default:X(`@71545:操作成功!`)},description:{default:``}},setup(e){return(t,r)=>(v(),z(te,{to:`body`},[n(fe,{name:`success-fade`},{default:m(()=>[e.visible?(v(),Y(`div`,{key:0,class:`success-overlay`,onClick:r[0]||=re(()=>{},[`stop`])},[B(`div`,In,[r[1]||=B(`div`,{class:`success-icon`},[B(`svg`,{viewBox:`0 0 52 52`,class:`success-svg`},[B(`circle`,{class:`success-circle`,cx:`26`,cy:`26`,r:`25`,fill:`none`}),B(`path`,{class:`success-check`,fill:`none`,d:`m14.1 27.2l7.1 7.2 16.7-16.8`})])],-1),B(`div`,Ln,V(e.text),1),e.description?(v(),Y(`div`,Rn,V(e.description),1)):N(``,!0)])])):N(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-c10f43b3`]]),$=le({visible:!1,text:X(`@F2A3A:加载中...`),showProgress:!1,progress:0});function Bn(){return{loadingState:$,show:e=>{$.visible=!0,$.text=e?.text||X(`@F2A3A:加载中...`),$.showProgress=e?.showProgress||!1,$.progress=e?.progress||0},hide:()=>{$.visible=!1},updateProgress:e=>{$.progress=Math.max(0,Math.min(100,e))},updateText:e=>{$.text=e},setText:e=>{$.visible&&($.text=e)}}}var Vn=le({visible:!1,text:X(`@B8591:操作成功!`),description:``});function Hn(){let e=e=>{Vn.visible=!0,Vn.text=e?.text||X(`@B8591:操作成功!`),Vn.description=e?.description||``;let n=e?.duration||2e3;setTimeout(()=>{t()},n)},t=()=>{Vn.visible=!1};return{successState:Vn,show:e,hide:t}}var Un={class:`one-commit-content`},Wn={class:`one-commit-text`},Gn={class:`one-commit-title`},Kn={key:0,class:`one-commit-desc`},qn=Z(D({__name:`QuickCommitButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`beforeCommit`,`afterCommit`,`clearFields`],setup(t,{expose:r,emit:i}){let a=Q(),o=xe(),s=t,c=i,u=W(()=>a.fileList.some(e=>!ke(e.path,o.lockedFiles))),d=W(()=>a.isSelectionMode&&a.selectedFiles.size>0&&a.selectedUnstagedPaths.length>0),f=W(()=>a.hasConflictedFiles?!0:a.isSelectionMode?!d.value||!s.hasUserCommitMessage:!u.value||!s.hasUserCommitMessage),p=W(()=>a.isAddingFiles||a.isCommiting),h=W(()=>a.hasConflictedFiles?X(`@2E184:存在冲突文件,请先解决冲突`):a.isSelectionMode?a.selectedFiles.size===0?X(`@2E184:请先勾选要提交的文件`):a.selectedUnstagedPaths.length===0?X(`@2E184:所选文件无需暂存或被锁定`):s.hasUserCommitMessage?X(`@2E184:一键完成:仅暂存所选文件 → 提交`):X(`@2E184:请输入提交信息`):u.value?s.hasUserCommitMessage?X(`@2E184:一键完成:暂存所有更改 → 提交`):X(`@2E184:请输入提交信息`):X(`@2E184:没有需要提交的更改`)),g=W(()=>a.isSelectionMode&&d.value?X(`@2E184:一键提交所选`):X(`@2E184:一键提交`)),_=W(()=>s.from===`form`?a.isSelectionMode&&d.value?X(`@2E184:暂存所选 + 提交`):X(`@2E184:暂存 + 提交`):``);async function y(){c(`beforeCommit`);try{let e=await a.stageSelectedAndCommit(s.finalCommitMessage,s.skipHooks);e&&c(`clearFields`),c(`afterCommit`,e)}catch(e){console.error(`一键提交失败:`,e),c(`afterCommit`,!1)}}return r({triggerQuickCommit:y}),(r,i)=>{let a=A,o=e;return v(),Y(`div`,null,[n(L(l),{content:h.value,placement:`top`,"show-after":200},{default:m(()=>[n(o,{type:`primary`,onClick:y,loading:p.value,disabled:f.value,class:R([t.from,`one-commit-button`])},{default:m(()=>[B(`div`,Un,[n(a,{class:`one-commit-icon`},{default:m(()=>[n(L(H))]),_:1}),B(`div`,Wn,[B(`span`,Gn,V(g.value),1),t.from===`form`?(v(),Y(`span`,Kn,V(_.value),1)):N(``,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`])])}}}),[[`__scopeId`,`data-v-0bcf5e9d`]]),Jn={class:`form-bottom-actions`},Yn={class:`actions-flex-container`},Xn={class:`left-actions`},Zn={class:`button-grid`},Qn={class:`right-actions`},$n=Z(D({__name:`GitActionButtons`,props:{hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1},from:{default:`form`}},emits:[`afterCommit`,`afterPush`,`beforePush`,`pushStart`,`clearFields`],setup(e,{expose:t,emit:r}){let i=r,a=F(null);function o(e){i(`afterCommit`,e)}function s(e){i(`afterPush`,e)}function c(){i(`beforePush`)}function l(){i(`pushStart`)}function u(){i(`clearFields`)}async function d(){return a.value?.triggerQuickPush()}return t({triggerQuickPush:d}),(t,r)=>(v(),Y(`div`,Jn,[B(`div`,Yn,[B(`div`,Xn,[B(`div`,Zn,[n(Me,{onClick:()=>{},from:e.from},null,8,[`from`]),n(Pe,{"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforeCommit:()=>{},onAfterCommit:o,onClick:()=>{},from:e.from},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`,`from`]),n(tt,{onBeforePush:()=>{},onAfterPush:s,onClick:()=>{},from:e.from},null,8,[`from`])])]),B(`div`,Qn,[n(qn,{from:e.from,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onAfterCommit:o,onClearFields:u},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),n(ot,{ref_key:`quickPushRef`,ref:a,from:e.from,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforePush:c,onPushStart:l,onAfterPush:s,onClearFields:u},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])])]))}}),[[`__scopeId`,`data-v-2f7ac0a2`]]),er={class:`dialog-toolbar`},tr={class:`filter-controls`},nr={class:`toolbar-actions`},rr=[`disabled`],ir={class:`btn-text`},ar=[`disabled`],or={class:`btn-text`},sr=[`disabled`],cr={class:`btn-text`},lr={class:`history-scroll`},ur={key:0,class:`loading-state`},dr={class:`loading-text`},fr={key:3,class:`history-list`},pr=[`onClick`],mr={class:`command-info`},hr={class:`command-text`},gr={class:`command-meta`},_r={class:`timestamp`},vr={class:`duration`},yr={class:`item-actions`},br={key:0,class:`item-details`},xr={key:0,class:`output-section`},Sr={class:`output-header`},Cr=[`onClick`],wr={class:`output-content`},Tr={key:0,class:`truncation-notice`},Er={class:`output-header`},Dr={class:`output-content`},Or={key:0,class:`truncation-notice`},kr={key:2,class:`output-section error`},Ar={class:`output-header`},jr={class:`output-content`},Mr=Z(D({__name:`CommandHistory`,setup(e){let r=Q(),i=F([]),a=F(!1);function c(e){return Array.isArray(e)?e.join(` `):e==null?``:String(e)}let u=F(!1),d=F(!1),h=F(!1),g=F(new Set),y=F(!1),b=F(!1),x=F(`all`),S=F(`all`),D=F(``),j=W(()=>{let e=i.value;if(x.value!==`all`&&(e=e.filter(e=>x.value===`success`?e.success:!e.success)),S.value!==`all`&&(e=e.filter(e=>{let t=c(e.command).startsWith(`git `);return S.value===`git`?t:!t})),D.value.trim()){let t=D.value.toLowerCase();e=e.filter(e=>c(e.command).toLowerCase().includes(t)||e.stdout&&e.stdout.toLowerCase().includes(t)||e.stderr&&e.stderr.toLowerCase().includes(t)||e.error&&e.error.toLowerCase().includes(t))}return e}),M=W(()=>i.value.filter(e=>e.success).length),te=W(()=>i.value.filter(e=>!e.success).length),H=W(()=>i.value.filter(e=>c(e.command).startsWith(`git `)).length),ne=W(()=>i.value.filter(e=>!c(e.command).startsWith(`git `)).length);function G(){b.value=!0,i.value.length===0&&ae()}async function ae(){try{if(a.value=!0,r.socket&&r.socket.connected)r.socket.emit(`request_full_history`);else{let e=await(await fetch(`/api/command-history`)).json();e.success?i.value=e.history:P.error(`${X(`@81F0F:加载命令历史失败: `)}${e.error}`)}}catch(e){P.error(`${X(`@81F0F:加载命令历史失败: `)}${e.message}`)}finally{a.value=!1}}async function oe(){if(j.value.length===0){P.warning(X(`@81F0F:没有可复制的命令历史`));return}try{d.value=!0;let e=j.value.map(e=>{let t=`# ${ce(e.timestamp)}${X(`@81F0F: (耗时: `)}${le(e.executionTime)}) - ${e.success?X(`@81F0F:成功`):X(`@81F0F:失败`)}\n`;if(t+=`${c(e.command)}\n`,e.stdout&&(t+=`\n# 输出:\n${e.stdout}\n`),e.stderr){let n=J(e.command)?X(`@81F0F:输出信息`):X(`@81F0F:错误输出`);t+=`\n# ${n}:\n${e.stderr}\n`}return e.error&&(t+=`\n# 错误信息:\n${e.error}\n`),t}).join(`
2
2
  ---
3
3
 
4
4
  `);await navigator.clipboard.writeText(e),P({message:X(`@81F0F:命令历史已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){P.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}finally{d.value=!1}}async function se(){if(j.value.length===0){P.warning(X(`@81F0F:没有可复制的命令`));return}try{y.value=!0;let e=j.value.map(e=>c(e.command)).join(`
@@ -1 +1 @@
1
- import{Cn as e,Dn as t,In as n,Jn as r,Kn as i,Ln as a,Mn as o,Tn as s,dr as c,mn as l,tr as u,vn as d}from"./element-plus-B6Owr5jY.js";import{n as f,t as p}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{i as m,l as h,n as g,s as _}from"./vue-flow-C6RXt-U3.js";import{a as v,c as y,i as b,n as x,o as S,r as C,s as w,t as T}from"./UserInputNode-CfmSt5Mh.js";var E={class:`flow-exec-viewer`},D=`flow-execution-viewer`,O=p(s({__name:`FlowExecutionViewer`,props:{flowData:{type:Object,required:!0},currentNodeId:{type:String,default:void 0},executedNodeIds:{type:Array,default:()=>[]},failedNodeIds:{type:Array,default:()=>[]},executedEdgeIds:{type:Array,default:()=>[]}},setup(p){function O(e){switch(e){case`command`:return`📋`;case`wait`:return`⏰`;case`version`:return`📦`;case`confirm`:return`✋`;case`code`:return`🧩`;case`start`:return`🚀`;case`condition`:return`🔀`;case`user_input`:return`⌨️`;default:return``}}let k=s({name:`FlowExecStartNodeRenderer`,props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(e){return()=>t(y,{id:e.id,nodeId:e.id,nodeType:`start`,title:f(`@FLOWNODE:开始`),icon:O(`start`),enabled:e.data?.enabled,selected:e.data?.selected,execStatus:e.data?.execStatus,deletable:!1},{})}});function A(e){return s({name:`FlowExecWrappedNode`,props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(n){let r=l(()=>{let e=n.data?.config,t=[...Array.isArray(e?.conditionBranches)?e.conditionBranches:[]].sort((e,t)=>{let n=e?.handleId==="default"||e?.isDefault,r=t?.handleId==="default"||t?.isDefault;return n&&!r?1:!n&&r?-1:Number(e?.priority??0)-Number(t?.priority??0)}).map(e=>String(e?.handleId||``).trim()).filter(e=>!!e);return t.includes(`default`)||t.push(`default`),t.length?t:[`default`]});return()=>t(y,{id:n.id,nodeId:n.id,nodeType:n.data?.type,title:n.data?.label,icon:O(n.data?.type),enabled:n.data?.enabled,selected:n.data?.selected,execStatus:n.data?.execStatus,sourceHandleIds:n.data?.type===`condition`?r.value:void 0,deletable:!1},{default:()=>t(e,{data:n.data,id:n.id})})}})}let j={start:u(k),command:u(A(w)),wait:u(A(S)),version:u(A(v)),confirm:u(A(b)),code:u(A(C)),condition:u(A(x)),user_input:u(A(T))},M=p,{onPaneReady:N}=h({id:D}),P=null,F=null;async function I(e){if(e){if(!P){F=e;return}for(let t=0;t<6;t+=1){if(await o(),await new Promise(e=>requestAnimationFrame(()=>e())),!(typeof P?.findNode==`function`&&P.findNode(e))){await new Promise(e=>window.setTimeout(()=>e(),60));continue}try{await P.fitView({nodes:[e],padding:.35,includeHiddenNodes:!0,minZoom:.35,maxZoom:1.2,duration:200})}catch{}break}}}N(e=>{P=e,console.log(`[FlowExecutionViewer] onPaneReady, flowId=`,D),console.log(`[FlowExecutionViewer] instance keys=`,Object.keys(e||{}));try{P.fitView({padding:.2,includeHiddenNodes:!0,duration:0})}catch{}let t=(M.currentNodeId||F||``).trim();t&&(F=null,I(t))});let L=null;i(()=>M.currentNodeId,async e=>{e&&(L&&=(window.clearTimeout(L),null),L=window.setTimeout(async()=>{if(console.log(`[FlowExecutionViewer] focus request, flowId=`,D,`nodeId=`,e),!P){F=e,console.log(`[FlowExecutionViewer] flowInstance not ready, pendingFocusNodeId=`,F);return}I(e)},150))}),n(()=>{L&&=(window.clearTimeout(L),null)});let R=l(()=>{let e=Array.isArray(M.flowData?.nodes)?M.flowData.nodes:[],t=new Set(M.executedNodeIds),n=new Set(M.failedNodeIds),r=M.currentNodeId;return e.map(e=>{let i;r&&e.id===r?i=`running`:n.has(e.id)?i=`failed`:t.has(e.id)&&(i=`success`);let a=[];return t.has(e.id)&&a.push(`exec-node-done`),{...e,data:{...e.data,execStatus:i},class:a.join(` `)}})}),z=l(()=>{let e=Array.isArray(M.flowData?.edges)?M.flowData.edges:[],t=new Set(M.executedEdgeIds);return e.map(e=>{let n=[];return t.has(e.id)&&n.push(`exec-edge-done`),{...e,class:n.join(` `)}})});return(t,n)=>(a(),d(`div`,E,[e(c(_),{id:D,nodes:R.value,edges:z.value,"node-types":j,"nodes-draggable":!1,"nodes-connectable":!1,"elements-selectable":!1,"zoom-on-scroll":!0,"zoom-on-double-click":!1,"pan-on-drag":!0,"min-zoom":.2,"max-zoom":1.5},{default:r(()=>[e(c(m)),e(c(g))]),_:1},8,[`nodes`,`edges`])]))}}),[[`__scopeId`,`data-v-d2ccb36e`]]);export{O as default};
1
+ import{Cn as e,Dn as t,In as n,Jn as r,Kn as i,Ln as a,Mn as o,Tn as s,dr as c,mn as l,tr as u,vn as d}from"./element-plus-B6Owr5jY.js";import{n as f,t as p}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{i as m,l as h,n as g,s as _}from"./vue-flow-C6RXt-U3.js";import{a as v,c as y,i as b,n as x,o as S,r as C,s as w,t as T}from"./UserInputNode-yBT2005h.js";var E={class:`flow-exec-viewer`},D=`flow-execution-viewer`,O=p(s({__name:`FlowExecutionViewer`,props:{flowData:{type:Object,required:!0},currentNodeId:{type:String,default:void 0},executedNodeIds:{type:Array,default:()=>[]},failedNodeIds:{type:Array,default:()=>[]},executedEdgeIds:{type:Array,default:()=>[]}},setup(p){function O(e){switch(e){case`command`:return`📋`;case`wait`:return`⏰`;case`version`:return`📦`;case`confirm`:return`✋`;case`code`:return`🧩`;case`start`:return`🚀`;case`condition`:return`🔀`;case`user_input`:return`⌨️`;default:return``}}let k=s({name:`FlowExecStartNodeRenderer`,props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(e){return()=>t(y,{id:e.id,nodeId:e.id,nodeType:`start`,title:f(`@FLOWNODE:开始`),icon:O(`start`),enabled:e.data?.enabled,selected:e.data?.selected,execStatus:e.data?.execStatus,deletable:!1},{})}});function A(e){return s({name:`FlowExecWrappedNode`,props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(n){let r=l(()=>{let e=n.data?.config,t=[...Array.isArray(e?.conditionBranches)?e.conditionBranches:[]].sort((e,t)=>{let n=e?.handleId==="default"||e?.isDefault,r=t?.handleId==="default"||t?.isDefault;return n&&!r?1:!n&&r?-1:Number(e?.priority??0)-Number(t?.priority??0)}).map(e=>String(e?.handleId||``).trim()).filter(e=>!!e);return t.includes(`default`)||t.push(`default`),t.length?t:[`default`]});return()=>t(y,{id:n.id,nodeId:n.id,nodeType:n.data?.type,title:n.data?.label,icon:O(n.data?.type),enabled:n.data?.enabled,selected:n.data?.selected,execStatus:n.data?.execStatus,sourceHandleIds:n.data?.type===`condition`?r.value:void 0,deletable:!1},{default:()=>t(e,{data:n.data,id:n.id})})}})}let j={start:u(k),command:u(A(w)),wait:u(A(S)),version:u(A(v)),confirm:u(A(b)),code:u(A(C)),condition:u(A(x)),user_input:u(A(T))},M=p,{onPaneReady:N}=h({id:D}),P=null,F=null;async function I(e){if(e){if(!P){F=e;return}for(let t=0;t<6;t+=1){if(await o(),await new Promise(e=>requestAnimationFrame(()=>e())),!(typeof P?.findNode==`function`&&P.findNode(e))){await new Promise(e=>window.setTimeout(()=>e(),60));continue}try{await P.fitView({nodes:[e],padding:.35,includeHiddenNodes:!0,minZoom:.35,maxZoom:1.2,duration:200})}catch{}break}}}N(e=>{P=e,console.log(`[FlowExecutionViewer] onPaneReady, flowId=`,D),console.log(`[FlowExecutionViewer] instance keys=`,Object.keys(e||{}));try{P.fitView({padding:.2,includeHiddenNodes:!0,duration:0})}catch{}let t=(M.currentNodeId||F||``).trim();t&&(F=null,I(t))});let L=null;i(()=>M.currentNodeId,async e=>{e&&(L&&=(window.clearTimeout(L),null),L=window.setTimeout(async()=>{if(console.log(`[FlowExecutionViewer] focus request, flowId=`,D,`nodeId=`,e),!P){F=e,console.log(`[FlowExecutionViewer] flowInstance not ready, pendingFocusNodeId=`,F);return}I(e)},150))}),n(()=>{L&&=(window.clearTimeout(L),null)});let R=l(()=>{let e=Array.isArray(M.flowData?.nodes)?M.flowData.nodes:[],t=new Set(M.executedNodeIds),n=new Set(M.failedNodeIds),r=M.currentNodeId;return e.map(e=>{let i;r&&e.id===r?i=`running`:n.has(e.id)?i=`failed`:t.has(e.id)&&(i=`success`);let a=[];return t.has(e.id)&&a.push(`exec-node-done`),{...e,data:{...e.data,execStatus:i},class:a.join(` `)}})}),z=l(()=>{let e=Array.isArray(M.flowData?.edges)?M.flowData.edges:[],t=new Set(M.executedEdgeIds);return e.map(e=>{let n=[];return t.has(e.id)&&n.push(`exec-edge-done`),{...e,class:n.join(` `)}})});return(t,n)=>(a(),d(`div`,E,[e(c(_),{id:D,nodes:R.value,edges:z.value,"node-types":j,"nodes-draggable":!1,"nodes-connectable":!1,"elements-selectable":!1,"zoom-on-scroll":!0,"zoom-on-double-click":!1,"pan-on-drag":!0,"min-zoom":.2,"max-zoom":1.5},{default:r(()=>[e(c(m)),e(c(g))]),_:1},8,[`nodes`,`edges`])]))}}),[[`__scopeId`,`data-v-d2ccb36e`]]);export{O as default};
@@ -1,4 +1,4 @@
1
- import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{At as t,B as n,Bn as r,C as i,Cn as a,Dn as o,Et as s,F as c,Fn as l,G as u,In as d,Jn as f,K as p,Kn as m,L as h,Ln as g,Lt as _,M as ee,Mn as te,P as v,Pt as y,R as ne,Rn as re,S as ie,Sn as b,St as ae,T as oe,Tn as x,Vt as se,W as ce,Xt as le,Y as ue,_n as S,_t as C,a as w,ar as T,at as de,b as E,ct as fe,d as D,dr as O,dt as k,fr as pe,g as A,gn as j,hn as M,hr as N,i as P,kn as F,ln as I,lt as me,mn as L,q as R,tr as z,u as B,un as V,vn as H,w as U,wt as W,yt as he,zn as G}from"./element-plus-B6Owr5jY.js";import{c as ge}from"./vendor-BuiZXcjj.js";import{n as K,t as q}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{t as _e}from"./SvgIcon-Cw2mL_zx.js";import{n as J,t as ve}from"./CommonDialog-G17HYMln.js";import{t as Y}from"./configStore-DHCrsR6z.js";import{i as ye,l as be,n as xe,s as Se}from"./vue-flow-C6RXt-U3.js";import{l as Ce}from"./index-C1q8_YYO.js";import{a as we,c as Te,i as Ee,n as De,o as Oe,r as ke,s as Ae,t as X}from"./UserInputNode-CfmSt5Mh.js";import{t as je}from"./dagre-CWIGcX9d.js";var Me=e(je(),1),Ne=x({__name:`NodeContextMenu`,props:{nodeId:{}},emits:[`execute-from-node`,`execute-single-node`],setup(e,{emit:t}){let n=e,o=t,s=T(!1);function c(e){e===`executeFrom`?o(`execute-from-node`,n.nodeId):e===`executeSingle`&&o(`execute-single-node`,n.nodeId)}return(e,t)=>{let n=ue,o=U,l=oe,u=i;return g(),j(u,{trigger:`contextmenu`,onCommand:c,onVisibleChange:t[0]||=e=>s.value=e,"popper-class":`flow-node-dropdown`},{dropdown:f(()=>[a(l,null,{default:f(()=>[a(o,{command:`executeFrom`},{default:f(()=>[a(n,null,{default:f(()=>[a(O(le))]),_:1}),t[1]||=b(` 从此处开始执行 `,-1)]),_:1}),a(o,{command:`executeSingle`},{default:f(()=>[a(n,null,{default:f(()=>[a(O(le))]),_:1}),t[2]||=b(` 只执行此节点 `,-1)]),_:1})]),_:1})]),default:f(()=>[r(e.$slots,`default`,{dropdownVisible:s.value})]),_:3})}}}),Pe={class:`package-json-selector`},Fe={class:`selector-container`},Ie={class:`option-content`},Z={class:`option-main`},Le={class:`package-name`},Re={class:`option-path`},ze={key:0,class:`empty-hint`},Be=q(x({__name:`PackageJsonSelector`,props:{modelValue:{},placeholder:{},clearable:{type:Boolean},disabled:{type:Boolean}},emits:[`update:modelValue`,`change`],setup(e,{emit:t}){let r=e,i=t,c=T(!1),l=T([]),u=T(``),d=L({get:()=>r.modelValue,set:e=>{u.value=e,i(`update:modelValue`,e),i(`change`,l.value.find(t=>t.fullPath===e)||null)}}),p=L(()=>l.value.map(e=>({label:e.displayName,value:e.fullPath,relativePath:e.relativePath,version:e.version})));async function ee(e){c.value=!0;try{let t=e?`/api/scan-package-files?directory=${encodeURIComponent(e)}`:`/api/scan-package-files`,n=await fetch(t);if(!n.ok)throw Error(`HTTP ${n.status}: ${n.statusText}`);let r=await n.json();if(r.success){l.value=r.packages||[],d.value&&!l.value.some(e=>e.fullPath===d.value)&&(d.value=``);let t=e?`目录 ${e}`:`当前项目`;w.success(`扫描 ${t} 完成,找到 ${l.value.length} 个 package.json 文件`)}else throw Error(r.error||`扫描失败`)}catch(e){console.error(`扫描package.json文件失败:`,e),w.error(`扫描失败: ${e.message}`),l.value=[]}finally{c.value=!1}}async function te(){try{let e=await(await fetch(`/api/browse_directory`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({currentPath:``})})).json();e.success?v(e):e.error&&w.error(e.error)}catch(e){w.error(`浏览目录失败: ${e.message}`)}}function v(e){if(!e||!e.items)return;let t=String(e.path||``),n=()=>{let e=String(t||``).trim();if(!e){w.warning(`请输入目录路径`);return}y(e)};P.alert(o(`div`,{class:`directory-browser`},[o(`div`,{class:`current-path`},[o(`span`,{class:`path-label`},`当前路径:`),o(`input`,{class:`path-value`,value:t,onInput:e=>{t=e.target.value},onKeydown:e=>{e.key===`Enter`&&(e.preventDefault(),n())}}),o(`button`,{type:`button`,class:`path-jump-btn`,onClick:n},`跳转`)]),o(`div`,{class:`directory-list`},[e.parentPath?o(`div`,{class:`directory-item parent-dir`,onClick:()=>y(e.parentPath)},[o(`span`,{class:`dir-icon`},o(`svg`,{class:`folder-icon`,viewBox:`0 0 24 24`,width:`20`,height:`20`,style:{fill:`var(--color-warning)`}},[o(`path`,{d:`M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z`})])),o(`span`,{class:`dir-name`},`返回上级目录`)]):null,...e.items.map(e=>o(`div`,{class:`directory-item`,onClick:()=>y(e.path)},[o(`span`,{class:`dir-icon`},o(`svg`,{class:`folder-icon`,viewBox:`0 0 24 24`,width:`20`,height:`20`,style:{fill:`var(--color-primary)`}},[o(`path`,{d:`M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z`})])),o(`span`,{class:`dir-name`},e.name)]))])]),`浏览并选择目录`,{confirmButtonText:`确定`,cancelButtonText:`取消`,showCancelButton:!0,customClass:`directory-browser-dialog`,callback:n=>{if(n===`confirm`){let n=String(t||e.path||``).trim();if(!n){w.warning(`请输入目录路径`);return}ee(n)}}})}async function y(e){try{P.close(),setTimeout(async()=>{try{let t=await(await fetch(`/api/browse_directory`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({currentPath:e})})).json();t.success?v(t):t.error&&w.error(t.error)}catch(e){w.error(`浏览目录失败: ${e.message}`)}},100)}catch(e){w.error(`处理目录选择时出错: ${e.message}`)}}return ee(),m(()=>r.modelValue,e=>{u.value=e},{immediate:!0}),(t,r)=>{let i=ue,o=h,u=ne,m=n,v=D;return g(),H(`div`,Pe,[M(`div`,Fe,[a(u,{modelValue:d.value,"onUpdate:modelValue":r[0]||=e=>d.value=e,placeholder:e.placeholder||`选择 package.json 文件`,clearable:e.clearable,disabled:e.disabled||c.value,filterable:``,class:`package-select`},{default:f(()=>[(g(!0),H(V,null,G(p.value,e=>(g(),j(o,{key:e.value,label:e.label,value:e.value},{default:f(()=>[M(`div`,Ie,[M(`div`,Z,[a(i,{class:`folder-icon`},{default:f(()=>[a(O(he))]),_:1}),M(`span`,Le,N(e.label),1)]),M(`div`,Re,N(e.relativePath),1)])]),_:2},1032,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`clearable`,`disabled`]),a(m,{icon:c.value?O(s):O(_),loading:c.value,disabled:e.disabled,size:`default`,onClick:r[1]||=e=>ee(),class:`refresh-btn`,title:`刷新当前项目`},{default:f(()=>[b(N(c.value?`扫描中...`:`刷新`),1)]),_:1},8,[`icon`,`loading`,`disabled`]),a(m,{icon:O(C),disabled:e.disabled||c.value,size:`default`,onClick:te,class:`custom-dir-btn`,title:`浏览并选择其他目录`},{default:f(()=>[...r[2]||=[b(` 其他目录 `,-1)]]),_:1},8,[`icon`,`disabled`])]),l.value.length===0&&!c.value?(g(),H(`div`,ze,[a(v,{type:`info`,size:`small`},{default:f(()=>[...r[3]||=[b(` 未找到 package.json 文件,请确保项目包含有效的 package.json `,-1)]]),_:1})])):S(``,!0)])}}}),[[`__scopeId`,`data-v-2f8c5bc0`]]),Ve={class:`param-list`},Q={key:0,class:`param-list__title`},He={key:0,class:`param-list__title-text`},$={class:`param-list__title-actions`},Ue={key:1,class:`param-list__empty`},We={key:2,class:`param-list__body`},Ge={class:`param-list__row-content`},Ke={key:0,class:`param-list__row-actions`},qe=q(x({__name:`ParamListContainer`,props:{modelValue:{},title:{},addable:{type:Boolean},removable:{type:Boolean},minItems:{},createItem:{type:Function},itemKey:{type:Function},disableAdd:{type:Boolean},disableRemove:{type:Function}},emits:[`update:modelValue`,`add`,`remove`],setup(e,{emit:t}){let i=e,o=t,s=L(()=>Array.isArray(i.modelValue)?i.modelValue:[]);function c(){if(!i.addable||i.disableAdd)return;let e=i.createItem;e&&(o(`update:modelValue`,[...s.value,e()]),o(`add`))}function l(e){if(!i.removable)return;let t=typeof i.minItems==`number`?i.minItems:0;if(s.value.length<=t)return;let n=s.value[e];if(i.disableRemove&&i.disableRemove(n,e))return;let r=[...s.value];r.splice(e,1),o(`update:modelValue`,r),o(`remove`,e)}function u(e,t){return i.itemKey?i.itemKey(e,t):t}return(t,i)=>{let o=n;return g(),H(`div`,Ve,[e.title!==void 0||e.addable?(g(),H(`div`,Q,[e.title?(g(),H(`span`,He,N(e.title),1)):S(``,!0),M(`div`,$,[r(t.$slots,`title-actions`,{},void 0,!0),e.addable?(g(),j(o,{key:0,type:`primary`,plain:``,icon:O(y),disabled:e.disableAdd||!e.createItem,onClick:c},null,8,[`icon`,`disabled`])):S(``,!0)])])):S(``,!0),s.value.length===0?(g(),H(`div`,Ue,[r(t.$slots,`empty`,{},void 0,!0)])):(g(),H(`div`,We,[(g(!0),H(V,null,G(s.value,(n,i)=>(g(),H(`div`,{key:u(n,i),class:pe([`param-list__row`,{"param-list__row--no-actions":!e.removable}])},[M(`div`,Ge,[r(t.$slots,`row`,{item:n,index:i},void 0,!0)]),e.removable?(g(),H(`div`,Ke,[a(o,{type:`danger`,plain:``,icon:O(me),disabled:typeof e.minItems==`number`&&s.value.length<=e.minItems||(e.disableRemove?e.disableRemove(n,i):!1),onClick:e=>l(i)},null,8,[`icon`,`disabled`,`onClick`])])):S(``,!0)],2))),128))]))])}}}),[[`__scopeId`,`data-v-e8a38cd0`]]),Je={class:`node-input-config`},Ye={class:`input-row`},Xe={class:`input-field param-name-field`},Ze={class:`field-label`},Qe={class:`input-field type-field`},$e={class:`field-label`},et={class:`input-field value-field`},tt={class:`field-label`},nt={class:`tree-node-label`},rt={class:`input-field required-field`},it={class:`field-label`},at=q(x({__name:`NodeInputConfig`,props:{modelValue:{},paramNames:{},disableParamNameEdit:{type:Boolean},predecessorNodes:{}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,i=T([]);m(()=>n.modelValue,e=>{i.value=e?[...e]:[]},{immediate:!0,deep:!0}),m(()=>n.paramNames,e=>{if(!e||e.length===0){i.value=[],r(`update:modelValue`,[]);return}let t=new Map(i.value.map(e=>[e.paramName,e])),n=[];for(let r of e)t.has(r)?n.push(t.get(r)):n.push({paramName:r,inputType:`manual`,required:!1,manualValue:``});i.value=n,r(`update:modelValue`,n)},{immediate:!0});function o(e,t,n){if(!i.value[e])return;let a=[...i.value];a[e]={...a[e],[t]:n},t===`inputType`&&(n===`manual`?(a[e].referenceNodeId=void 0,a[e].referenceOutputKey=void 0):a[e].manualValue=void 0),i.value=a,r(`update:modelValue`,a)}function s(e){return e.type===`command`?e.data.config?.displayName||e.data.config?.commandName||e.data.label||K(`@FLOWNODE:命令节点`):e.type===`code`?e.data.config?.displayName||e.data.label||K(`@FLOWNODE:代码节点`):e.data.label||e.id}function c(e){if(e.type===`command`)return[{key:`stdout`,label:K(`@NODEINPUT:标准输出(stdout)`)},{key:`stderr`,label:K(`@NODEINPUT:标准错误(stderr)`)},{key:`error`,label:K(`@NODEINPUT:错误(error)`)}];if(e.type===`code`){let t=e.data?.config,n=Array.isArray(t?.codeOutputParams)?t.codeOutputParams:[];if(n.length>0)return n.map(e=>String(e?.key||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}));let r=t?.codeOutputKeys;return(Array.isArray(r)?r:[]).map(e=>String(e||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}if(e.type===`user_input`){let t=e.data?.config;return(Array.isArray(t?.userInputParams)?t.userInputParams:[]).map(e=>String(e?.name||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}return[]}let l=L(()=>!n.predecessorNodes||n.predecessorNodes.length===0?[]:n.predecessorNodes.map(e=>({value:e.id,label:s(e),children:c(e).map(t=>({value:`${e.id}::${t.key}`,label:t.label}))})));function u(e,t){if(!t)return;let[n,a]=t.split(`::`),o=[...i.value];o[e]={...o[e],referenceNodeId:n,referenceOutputKey:a},i.value=o,r(`update:modelValue`,o)}function d(e){return e.referenceNodeId&&e.referenceOutputKey?`${e.referenceNodeId}::${e.referenceOutputKey}`:``}return(t,n)=>{let r=ce,s=h,c=ne,p=ue,m=B,_=A;return g(),H(`div`,Je,[a(qe,{"model-value":i.value,title:void 0,addable:!1,removable:!1},{empty:f(()=>[b(N(O(K)(`@NODEINPUT:命令中未检测到变量参数`)),1)]),row:f(({item:t,index:n})=>[M(`div`,Ye,[M(`div`,Xe,[M(`label`,Ze,N(O(K)(`@NODEINPUT:参数名`)),1),a(r,{"model-value":t.paramName,disabled:e.disableParamNameEdit,placeholder:O(K)(`@NODEINPUT:参数名`),size:`default`,"onUpdate:modelValue":e=>o(n,`paramName`,e)},null,8,[`model-value`,`disabled`,`placeholder`,`onUpdate:modelValue`])]),M(`div`,Qe,[M(`label`,$e,N(O(K)(`@NODEINPUT:类型`)),1),a(c,{"model-value":t.inputType,placeholder:O(K)(`@NODEINPUT:选择类型`),size:`default`,"onUpdate:modelValue":e=>o(n,`inputType`,e)},{default:f(()=>[a(s,{value:`manual`,label:O(K)(`@NODEINPUT:手动输入`)},null,8,[`label`]),a(s,{value:`reference`,label:O(K)(`@NODEINPUT:引用节点`),disabled:!e.predecessorNodes||e.predecessorNodes.length===0},null,8,[`label`,`disabled`])]),_:1},8,[`model-value`,`placeholder`,`onUpdate:modelValue`])]),M(`div`,et,[M(`label`,tt,N(O(K)(`@NODEINPUT:值`)),1),t.inputType===`manual`?(g(),j(r,{key:0,"model-value":t.manualValue,placeholder:O(K)(`@NODEINPUT:输入参数值`),size:`default`,clearable:``,"onUpdate:modelValue":e=>o(n,`manualValue`,e)},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`])):(g(),j(m,{key:1,"model-value":d(t),data:l.value,placeholder:O(K)(`@NODEINPUT:选择节点输出`),size:`default`,clearable:``,filterable:``,"check-strictly":``,"render-after-expand":!1,"onUpdate:modelValue":e=>u(n,e)},{default:f(({data:e})=>[M(`span`,nt,[e.children?S(``,!0):(g(),j(p,{key:0},{default:f(()=>[a(O(W))]),_:1})),b(` `+N(e.label),1)])]),_:1},8,[`model-value`,`data`,`placeholder`,`onUpdate:modelValue`]))]),M(`div`,rt,[M(`label`,it,N(O(K)(`@NODEINPUT:必填`)),1),a(_,{"model-value":!!t.required,"onUpdate:modelValue":e=>o(n,`required`,e)},null,8,[`model-value`,`onUpdate:modelValue`])])])]),_:1},8,[`model-value`])])}}}),[[`__scopeId`,`data-v-1e9fd815`]]),ot={class:`code-node-input-config`},st={class:`input-row`},ct={class:`input-field name-field`},lt={class:`field-label`},ut={class:`input-field type-field`},dt={class:`field-label`},ft={class:`input-field value-field`},pt={class:`field-label`},mt={class:`input-field action-field`},ht={class:`field-label`},gt=q(x({__name:`CodeNodeInputConfig`,props:{modelValue:{},predecessorNodes:{},title:{},addable:{type:Boolean}},emits:[`update:modelValue`],setup(e,{expose:t,emit:n}){let r=e,i=n,o=T([]);m(()=>r.modelValue,e=>{o.value=Array.isArray(e)?[...e]:[]},{immediate:!0,deep:!0});function s(e){return e.type===`command`?e.data.config?.displayName||e.data.config?.commandName||e.data.label||K(`@FLOWNODE:命令节点`):e.type===`code`?e.data.config?.displayName||e.data.label||K(`@FLOWNODE:代码节点`):e.data.label||e.id}function c(e){if(!e)return[];if(e.type===`command`)return[{key:`stdout`,label:K(`@NODEINPUT:标准输出(stdout)`)},{key:`stderr`,label:K(`@NODEINPUT:标准错误(stderr)`)},{key:`error`,label:K(`@NODEINPUT:错误(error)`)}];if(e.type===`code`){let t=e.data?.config;return(Array.isArray(t?.codeOutputParams)?t.codeOutputParams:[]).map(e=>String(e?.key||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}if(e.type===`user_input`){let t=e.data?.config;return(Array.isArray(t?.userInputParams)?t.userInputParams:[]).map(e=>String(e?.name||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}return[]}let l=L(()=>!r.predecessorNodes||r.predecessorNodes.length===0?[]:r.predecessorNodes.map(e=>({value:e.id,label:s(e),children:c(e).map(t=>({value:`${e.id}::${t.key}`,label:t.label}))})));function u(){return{name:``,source:`reference`,required:!1,ref:{nodeId:``,outputKey:`stdout`}}}function d(){let e=[...o.value,u()];o.value=e,i(`update:modelValue`,e)}t({addRow:d});function p(e,t){if(!o.value[e])return;let n=[...o.value];n[e]={...n[e],...t},t.source&&(t.source===`manual`?(n[e].ref=void 0,n[e].manualValue===void 0&&(n[e].manualValue=``)):(n[e].manualValue=void 0,n[e].ref||(n[e].ref={nodeId:``,outputKey:`stdout`}))),o.value=n,i(`update:modelValue`,n)}function _(e,t){if(!t)return;let[n,r]=t.split(`::`);p(e,{ref:{nodeId:n,outputKey:r}})}function ee(e){return e.ref?.nodeId&&e.ref?.outputKey?`${e.ref.nodeId}::${e.ref.outputKey}`:``}return(t,n)=>{let r=ce,s=h,c=ne,d=B,m=A;return g(),H(`div`,ot,[a(qe,{"model-value":o.value,title:e.title,addable:e.addable!==!1,removable:!0,"min-items":0,"create-item":u,"onUpdate:modelValue":n[0]||=e=>i(`update:modelValue`,e)},{empty:f(()=>[b(N(O(K)(`@NODECFG:暂无输入参数`)),1)]),row:f(({item:t,index:n})=>[M(`div`,st,[M(`div`,ct,[M(`label`,lt,N(O(K)(`@NODECFG:参数名`)),1),a(r,{modelValue:t.name,"onUpdate:modelValue":[e=>t.name=e,e=>p(n,{name:e})],placeholder:O(K)(`@NODECFG:参数名`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),M(`div`,ut,[M(`label`,dt,N(O(K)(`@NODECFG:参数值`)),1),a(c,{modelValue:t.source,"onUpdate:modelValue":[e=>t.source=e,e=>p(n,{source:e})],style:{width:`110px`}},{default:f(()=>[a(s,{label:O(K)(`@NODECFG:引用`),value:`reference`,disabled:!e.predecessorNodes||e.predecessorNodes.length===0},null,8,[`label`,`disabled`]),a(s,{label:O(K)(`@NODECFG:手动`),value:`manual`},null,8,[`label`])]),_:1},8,[`modelValue`,`onUpdate:modelValue`])]),M(`div`,ft,[M(`label`,pt,N(O(K)(`@NODECFG:值`)),1),t.source===`manual`?(g(),j(r,{key:0,modelValue:t.manualValue,"onUpdate:modelValue":[e=>t.manualValue=e,e=>p(n,{manualValue:e})],placeholder:O(K)(`@NODECFG:请输入`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])):(g(),j(d,{key:1,"model-value":ee(t),data:l.value,placeholder:O(K)(`@NODEINPUT:选择节点输出`),clearable:``,filterable:``,"check-strictly":``,"render-after-expand":!1,"onUpdate:modelValue":e=>_(n,e)},null,8,[`model-value`,`data`,`placeholder`,`onUpdate:modelValue`]))]),M(`div`,mt,[M(`label`,ht,N(O(K)(`@NODEINPUT:必填`)),1),a(m,{"model-value":!!t.required,"onUpdate:modelValue":e=>p(n,{required:e})},null,8,[`model-value`,`onUpdate:modelValue`])])])]),_:1},8,[`model-value`,`title`,`addable`])])}}}),[[`__scopeId`,`data-v-b90fd34c`]]),_t={class:`user-input-param-config`},vt={class:`input-row`},yt={class:`input-field name-field`},bt={class:`field-label`},xt={class:`input-field type-field`},St={class:`field-label`},Ct={class:`input-field value-field`},wt={class:`field-label`},Tt={class:`tree-node-label`},Et={class:`input-field action-field`},Dt={class:`field-label`},Ot=q(x({__name:`UserInputParamConfig`,props:{modelValue:{},predecessorNodes:{},title:{},addable:{type:Boolean}},emits:[`update:modelValue`],setup(e,{expose:t,emit:r}){let i=e,o=r,s=T([]);m(()=>i.modelValue,e=>{s.value=Array.isArray(e)?[...e]:[]},{immediate:!0,deep:!0});function c(){return{name:``,source:`manual`,defaultValue:``,required:!1}}function l(){let e=[...s.value,c()];s.value=e,o(`update:modelValue`,e)}t({addRow:l});function u(e,t){if(!s.value[e])return;let n=[...s.value];n[e]={...n[e],...t},t.source&&(t.source===`manual`?(n[e].ref=void 0,n[e].defaultValue===void 0&&(n[e].defaultValue=``)):(n[e].defaultValue=void 0,n[e].ref||(n[e].ref={nodeId:``,outputKey:`stdout`}))),s.value=n,o(`update:modelValue`,n)}function d(e){return e.type===`command`?e.data.config?.displayName||e.data.config?.commandName||e.data.label||K(`@FLOWNODE:命令节点`):e.type===`code`?e.data.config?.displayName||e.data.label||K(`@FLOWNODE:代码节点`):e.type===`user_input`?e.data.config?.displayName||e.data.label||K(`@FLOWNODE:用户输入`):e.data.label||e.id}function p(e){if(!e)return[];if(e.type===`command`)return[{key:`stdout`,label:K(`@NODEINPUT:标准输出(stdout)`)},{key:`stderr`,label:K(`@NODEINPUT:标准错误(stderr)`)},{key:`error`,label:K(`@NODEINPUT:错误(error)`)}];if(e.type===`code`){let t=e.data?.config;return(Array.isArray(t?.codeOutputParams)?t.codeOutputParams:[]).map(e=>String(e?.key||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}if(e.type===`user_input`){let t=e.data?.config;return(Array.isArray(t?.userInputParams)?t.userInputParams:[]).map(e=>String(e?.name||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}return[]}let _=L(()=>!i.predecessorNodes||i.predecessorNodes.length===0?[]:i.predecessorNodes.map(e=>({value:e.id,label:d(e),children:p(e).map(t=>({value:`${e.id}::${t.key}`,label:t.label}))})));function ee(e,t){if(!t)return;let[n,r]=t.split(`::`);u(e,{ref:{nodeId:n,outputKey:r}})}function te(e){return e.ref?.nodeId&&e.ref?.outputKey?`${e.ref.nodeId}::${e.ref.outputKey}`:``}return(t,r)=>{let d=ce,p=h,m=ne,v=ue,y=B,re=A,ie=n;return g(),H(`div`,_t,[a(qe,{"model-value":s.value,title:e.title,addable:e.addable!==!1,removable:!0,"min-items":0,"create-item":c,"onUpdate:modelValue":r[0]||=e=>o(`update:modelValue`,e)},{empty:f(()=>[b(N(O(K)(`@UINPUT:暂无输入参数`)),1)]),row:f(({item:e,index:t})=>[M(`div`,vt,[M(`div`,yt,[M(`label`,bt,N(O(K)(`@UINPUT:参数名`)),1),a(d,{modelValue:e.name,"onUpdate:modelValue":[t=>e.name=t,e=>u(t,{name:e})],placeholder:O(K)(`@UINPUT:参数名`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),M(`div`,xt,[M(`label`,St,N(O(K)(`@UINPUT:类型`)),1),a(m,{modelValue:e.source,"onUpdate:modelValue":[t=>e.source=t,e=>u(t,{source:e})],style:{width:`130px`}},{default:f(()=>[a(p,{label:O(K)(`@UINPUT:手动输入`),value:`manual`},null,8,[`label`]),a(p,{label:O(K)(`@UINPUT:引用`),value:`reference`,disabled:!i.predecessorNodes||i.predecessorNodes.length===0},null,8,[`label`,`disabled`])]),_:1},8,[`modelValue`,`onUpdate:modelValue`])]),M(`div`,Ct,[M(`label`,wt,N(e.source===`manual`?O(K)(`@UINPUT:默认值`):O(K)(`@UINPUT:引用输出`)),1),e.source===`manual`?(g(),j(d,{key:0,modelValue:e.defaultValue,"onUpdate:modelValue":[t=>e.defaultValue=t,e=>u(t,{defaultValue:e})],placeholder:O(K)(`@UINPUT:默认值`),clearable:``},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])):(g(),j(y,{key:1,"model-value":te(e),data:_.value,placeholder:O(K)(`@NODEINPUT:选择节点输出`),clearable:``,filterable:``,"check-strictly":``,"render-after-expand":!1,"onUpdate:modelValue":e=>ee(t,e)},{default:f(({data:e})=>[M(`span`,Tt,[e.children?S(``,!0):(g(),j(v,{key:0},{default:f(()=>[a(O(W))]),_:1})),b(` `+N(e.label),1)])]),_:1},8,[`model-value`,`data`,`placeholder`,`onUpdate:modelValue`]))]),M(`div`,Et,[M(`label`,Dt,N(O(K)(`@NODEINPUT:必填`)),1),a(re,{"model-value":!!e.required,"onUpdate:modelValue":e=>u(t,{required:e})},null,8,[`model-value`,`onUpdate:modelValue`])])])]),actions:f(()=>[e.addable===!1?S(``,!0):(g(),j(ie,{key:0,type:`primary`,plain:``,size:`small`,onClick:l},{default:f(()=>[b(N(O(K)(`@UINPUT:添加参数`)),1)]),_:1}))]),_:1},8,[`model-value`,`title`,`addable`])])}}}),[[`__scopeId`,`data-v-5dc978f3`]]),kt={key:0,class:`config-content`},At={class:`config-section`},jt={class:`section-title`},Mt={key:0,class:`config-section`},Nt={class:`section-title`},Pt={key:1,class:`config-section`},Ft={class:`section-title`},It={class:`sub-section`},Lt={class:`sub-title`},Rt={key:0,class:`empty-tip`},zt={key:1,class:`condition-branch-list`},Bt={class:`branch-main`},Vt={class:`branch-header`},Ht={class:`branch-title`},Ut={key:0,class:`branch-badge`},Wt={class:`branch-meta`},Gt={key:0,class:`branch-rules`},Kt={class:`rules-header`},qt={class:`rule-col`},Jt={class:`field-label`},Yt={class:`rule-col`},Xt={class:`field-label`},Zt={class:`rule-col`},Qt={class:`field-label`},$t={class:`rule-col`,style:{"align-self":`flex-end`}},en={key:1,class:`branch-default-tip`},tn={key:0,class:`branch-actions`},nn={key:2,class:`config-section`},rn={class:`section-title`},an={key:3,class:`config-section`},on={class:`section-title`},sn={key:4,class:`config-section`},cn={class:`section-title`},ln={key:5,class:`config-section`},un={class:`section-title`},dn={key:6,class:`config-section`},fn={class:`section-title`},pn={class:`output-param-row`},mn={class:`output-param-field`},hn={class:`field-label`},gn={key:7,class:`config-section`},_n={class:`section-title`},vn={key:0,class:`empty-tip`},yn={key:1,class:`command-list`},bn=[`onClick`],xn={class:`command-info`},Sn={class:`command-header`},Cn={class:`command-name`},wn={key:0,class:`command-desc`},Tn={class:`command-code`},En={class:`command-dir`},Dn={key:8,class:`config-section`},On={class:`section-title`},kn={style:{"margin-left":`var(--spacing-md)`}},An={key:9,class:`config-section`},jn={class:`section-title`},Mn={class:`sub-section`},Nn={class:`sub-title`},Pn={class:`code-examples`},Fn={class:`examples-title`},In={class:`examples-actions`},Ln={key:10,class:`config-section`},Rn={class:`section-title`},zn={class:`reference-tip`},Bn={class:`reference-tip`},Vn={class:`node-option`},Hn={class:`node-name`},Un={class:`node-id`},Wn={class:`reference-tip`},Gn={class:`reference-tip`},Kn={key:11,class:`config-section`},qn={class:`section-title`},Jn={class:`output-param-row`},Yn={class:`output-param-field`},Xn={class:`field-label`},Zn={class:`output-param-field`},Qn={class:`field-label`},$n={key:12,class:`config-section`},er={class:`section-title`},tr={class:`output-param-row`},nr={class:`output-param-field`},rr={class:`field-label`},ir={class:`output-param-field`},ar={class:`field-label`},or={class:`dialog-footer`},sr={class:`footer-actions`},cr=`function main(param) {
1
+ import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{At as t,B as n,Bn as r,C as i,Cn as a,Dn as o,Et as s,F as c,Fn as l,G as u,In as d,Jn as f,K as p,Kn as m,L as h,Ln as g,Lt as _,M as ee,Mn as te,P as v,Pt as y,R as ne,Rn as re,S as ie,Sn as b,St as ae,T as oe,Tn as x,Vt as se,W as ce,Xt as le,Y as ue,_n as S,_t as C,a as w,ar as T,at as de,b as E,ct as fe,d as D,dr as O,dt as k,fr as pe,g as A,gn as j,hn as M,hr as N,i as P,kn as F,ln as I,lt as me,mn as L,q as R,tr as z,u as B,un as V,vn as H,w as U,wt as W,yt as he,zn as G}from"./element-plus-B6Owr5jY.js";import{c as ge}from"./vendor-BuiZXcjj.js";import{n as K,t as q}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{t as _e}from"./SvgIcon-Cw2mL_zx.js";import{n as J,t as ve}from"./CommonDialog-G17HYMln.js";import{t as Y}from"./configStore-Cq6Qwn35.js";import{i as ye,l as be,n as xe,s as Se}from"./vue-flow-C6RXt-U3.js";import{l as Ce}from"./index-CPqKvZBK.js";import{a as we,c as Te,i as Ee,n as De,o as Oe,r as ke,s as Ae,t as X}from"./UserInputNode-yBT2005h.js";import{t as je}from"./dagre-CWIGcX9d.js";var Me=e(je(),1),Ne=x({__name:`NodeContextMenu`,props:{nodeId:{}},emits:[`execute-from-node`,`execute-single-node`],setup(e,{emit:t}){let n=e,o=t,s=T(!1);function c(e){e===`executeFrom`?o(`execute-from-node`,n.nodeId):e===`executeSingle`&&o(`execute-single-node`,n.nodeId)}return(e,t)=>{let n=ue,o=U,l=oe,u=i;return g(),j(u,{trigger:`contextmenu`,onCommand:c,onVisibleChange:t[0]||=e=>s.value=e,"popper-class":`flow-node-dropdown`},{dropdown:f(()=>[a(l,null,{default:f(()=>[a(o,{command:`executeFrom`},{default:f(()=>[a(n,null,{default:f(()=>[a(O(le))]),_:1}),t[1]||=b(` 从此处开始执行 `,-1)]),_:1}),a(o,{command:`executeSingle`},{default:f(()=>[a(n,null,{default:f(()=>[a(O(le))]),_:1}),t[2]||=b(` 只执行此节点 `,-1)]),_:1})]),_:1})]),default:f(()=>[r(e.$slots,`default`,{dropdownVisible:s.value})]),_:3})}}}),Pe={class:`package-json-selector`},Fe={class:`selector-container`},Ie={class:`option-content`},Z={class:`option-main`},Le={class:`package-name`},Re={class:`option-path`},ze={key:0,class:`empty-hint`},Be=q(x({__name:`PackageJsonSelector`,props:{modelValue:{},placeholder:{},clearable:{type:Boolean},disabled:{type:Boolean}},emits:[`update:modelValue`,`change`],setup(e,{emit:t}){let r=e,i=t,c=T(!1),l=T([]),u=T(``),d=L({get:()=>r.modelValue,set:e=>{u.value=e,i(`update:modelValue`,e),i(`change`,l.value.find(t=>t.fullPath===e)||null)}}),p=L(()=>l.value.map(e=>({label:e.displayName,value:e.fullPath,relativePath:e.relativePath,version:e.version})));async function ee(e){c.value=!0;try{let t=e?`/api/scan-package-files?directory=${encodeURIComponent(e)}`:`/api/scan-package-files`,n=await fetch(t);if(!n.ok)throw Error(`HTTP ${n.status}: ${n.statusText}`);let r=await n.json();if(r.success){l.value=r.packages||[],d.value&&!l.value.some(e=>e.fullPath===d.value)&&(d.value=``);let t=e?`目录 ${e}`:`当前项目`;w.success(`扫描 ${t} 完成,找到 ${l.value.length} 个 package.json 文件`)}else throw Error(r.error||`扫描失败`)}catch(e){console.error(`扫描package.json文件失败:`,e),w.error(`扫描失败: ${e.message}`),l.value=[]}finally{c.value=!1}}async function te(){try{let e=await(await fetch(`/api/browse_directory`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({currentPath:``})})).json();e.success?v(e):e.error&&w.error(e.error)}catch(e){w.error(`浏览目录失败: ${e.message}`)}}function v(e){if(!e||!e.items)return;let t=String(e.path||``),n=()=>{let e=String(t||``).trim();if(!e){w.warning(`请输入目录路径`);return}y(e)};P.alert(o(`div`,{class:`directory-browser`},[o(`div`,{class:`current-path`},[o(`span`,{class:`path-label`},`当前路径:`),o(`input`,{class:`path-value`,value:t,onInput:e=>{t=e.target.value},onKeydown:e=>{e.key===`Enter`&&(e.preventDefault(),n())}}),o(`button`,{type:`button`,class:`path-jump-btn`,onClick:n},`跳转`)]),o(`div`,{class:`directory-list`},[e.parentPath?o(`div`,{class:`directory-item parent-dir`,onClick:()=>y(e.parentPath)},[o(`span`,{class:`dir-icon`},o(`svg`,{class:`folder-icon`,viewBox:`0 0 24 24`,width:`20`,height:`20`,style:{fill:`var(--color-warning)`}},[o(`path`,{d:`M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z`})])),o(`span`,{class:`dir-name`},`返回上级目录`)]):null,...e.items.map(e=>o(`div`,{class:`directory-item`,onClick:()=>y(e.path)},[o(`span`,{class:`dir-icon`},o(`svg`,{class:`folder-icon`,viewBox:`0 0 24 24`,width:`20`,height:`20`,style:{fill:`var(--color-primary)`}},[o(`path`,{d:`M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z`})])),o(`span`,{class:`dir-name`},e.name)]))])]),`浏览并选择目录`,{confirmButtonText:`确定`,cancelButtonText:`取消`,showCancelButton:!0,customClass:`directory-browser-dialog`,callback:n=>{if(n===`confirm`){let n=String(t||e.path||``).trim();if(!n){w.warning(`请输入目录路径`);return}ee(n)}}})}async function y(e){try{P.close(),setTimeout(async()=>{try{let t=await(await fetch(`/api/browse_directory`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({currentPath:e})})).json();t.success?v(t):t.error&&w.error(t.error)}catch(e){w.error(`浏览目录失败: ${e.message}`)}},100)}catch(e){w.error(`处理目录选择时出错: ${e.message}`)}}return ee(),m(()=>r.modelValue,e=>{u.value=e},{immediate:!0}),(t,r)=>{let i=ue,o=h,u=ne,m=n,v=D;return g(),H(`div`,Pe,[M(`div`,Fe,[a(u,{modelValue:d.value,"onUpdate:modelValue":r[0]||=e=>d.value=e,placeholder:e.placeholder||`选择 package.json 文件`,clearable:e.clearable,disabled:e.disabled||c.value,filterable:``,class:`package-select`},{default:f(()=>[(g(!0),H(V,null,G(p.value,e=>(g(),j(o,{key:e.value,label:e.label,value:e.value},{default:f(()=>[M(`div`,Ie,[M(`div`,Z,[a(i,{class:`folder-icon`},{default:f(()=>[a(O(he))]),_:1}),M(`span`,Le,N(e.label),1)]),M(`div`,Re,N(e.relativePath),1)])]),_:2},1032,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`clearable`,`disabled`]),a(m,{icon:c.value?O(s):O(_),loading:c.value,disabled:e.disabled,size:`default`,onClick:r[1]||=e=>ee(),class:`refresh-btn`,title:`刷新当前项目`},{default:f(()=>[b(N(c.value?`扫描中...`:`刷新`),1)]),_:1},8,[`icon`,`loading`,`disabled`]),a(m,{icon:O(C),disabled:e.disabled||c.value,size:`default`,onClick:te,class:`custom-dir-btn`,title:`浏览并选择其他目录`},{default:f(()=>[...r[2]||=[b(` 其他目录 `,-1)]]),_:1},8,[`icon`,`disabled`])]),l.value.length===0&&!c.value?(g(),H(`div`,ze,[a(v,{type:`info`,size:`small`},{default:f(()=>[...r[3]||=[b(` 未找到 package.json 文件,请确保项目包含有效的 package.json `,-1)]]),_:1})])):S(``,!0)])}}}),[[`__scopeId`,`data-v-2f8c5bc0`]]),Ve={class:`param-list`},Q={key:0,class:`param-list__title`},He={key:0,class:`param-list__title-text`},$={class:`param-list__title-actions`},Ue={key:1,class:`param-list__empty`},We={key:2,class:`param-list__body`},Ge={class:`param-list__row-content`},Ke={key:0,class:`param-list__row-actions`},qe=q(x({__name:`ParamListContainer`,props:{modelValue:{},title:{},addable:{type:Boolean},removable:{type:Boolean},minItems:{},createItem:{type:Function},itemKey:{type:Function},disableAdd:{type:Boolean},disableRemove:{type:Function}},emits:[`update:modelValue`,`add`,`remove`],setup(e,{emit:t}){let i=e,o=t,s=L(()=>Array.isArray(i.modelValue)?i.modelValue:[]);function c(){if(!i.addable||i.disableAdd)return;let e=i.createItem;e&&(o(`update:modelValue`,[...s.value,e()]),o(`add`))}function l(e){if(!i.removable)return;let t=typeof i.minItems==`number`?i.minItems:0;if(s.value.length<=t)return;let n=s.value[e];if(i.disableRemove&&i.disableRemove(n,e))return;let r=[...s.value];r.splice(e,1),o(`update:modelValue`,r),o(`remove`,e)}function u(e,t){return i.itemKey?i.itemKey(e,t):t}return(t,i)=>{let o=n;return g(),H(`div`,Ve,[e.title!==void 0||e.addable?(g(),H(`div`,Q,[e.title?(g(),H(`span`,He,N(e.title),1)):S(``,!0),M(`div`,$,[r(t.$slots,`title-actions`,{},void 0,!0),e.addable?(g(),j(o,{key:0,type:`primary`,plain:``,icon:O(y),disabled:e.disableAdd||!e.createItem,onClick:c},null,8,[`icon`,`disabled`])):S(``,!0)])])):S(``,!0),s.value.length===0?(g(),H(`div`,Ue,[r(t.$slots,`empty`,{},void 0,!0)])):(g(),H(`div`,We,[(g(!0),H(V,null,G(s.value,(n,i)=>(g(),H(`div`,{key:u(n,i),class:pe([`param-list__row`,{"param-list__row--no-actions":!e.removable}])},[M(`div`,Ge,[r(t.$slots,`row`,{item:n,index:i},void 0,!0)]),e.removable?(g(),H(`div`,Ke,[a(o,{type:`danger`,plain:``,icon:O(me),disabled:typeof e.minItems==`number`&&s.value.length<=e.minItems||(e.disableRemove?e.disableRemove(n,i):!1),onClick:e=>l(i)},null,8,[`icon`,`disabled`,`onClick`])])):S(``,!0)],2))),128))]))])}}}),[[`__scopeId`,`data-v-e8a38cd0`]]),Je={class:`node-input-config`},Ye={class:`input-row`},Xe={class:`input-field param-name-field`},Ze={class:`field-label`},Qe={class:`input-field type-field`},$e={class:`field-label`},et={class:`input-field value-field`},tt={class:`field-label`},nt={class:`tree-node-label`},rt={class:`input-field required-field`},it={class:`field-label`},at=q(x({__name:`NodeInputConfig`,props:{modelValue:{},paramNames:{},disableParamNameEdit:{type:Boolean},predecessorNodes:{}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,i=T([]);m(()=>n.modelValue,e=>{i.value=e?[...e]:[]},{immediate:!0,deep:!0}),m(()=>n.paramNames,e=>{if(!e||e.length===0){i.value=[],r(`update:modelValue`,[]);return}let t=new Map(i.value.map(e=>[e.paramName,e])),n=[];for(let r of e)t.has(r)?n.push(t.get(r)):n.push({paramName:r,inputType:`manual`,required:!1,manualValue:``});i.value=n,r(`update:modelValue`,n)},{immediate:!0});function o(e,t,n){if(!i.value[e])return;let a=[...i.value];a[e]={...a[e],[t]:n},t===`inputType`&&(n===`manual`?(a[e].referenceNodeId=void 0,a[e].referenceOutputKey=void 0):a[e].manualValue=void 0),i.value=a,r(`update:modelValue`,a)}function s(e){return e.type===`command`?e.data.config?.displayName||e.data.config?.commandName||e.data.label||K(`@FLOWNODE:命令节点`):e.type===`code`?e.data.config?.displayName||e.data.label||K(`@FLOWNODE:代码节点`):e.data.label||e.id}function c(e){if(e.type===`command`)return[{key:`stdout`,label:K(`@NODEINPUT:标准输出(stdout)`)},{key:`stderr`,label:K(`@NODEINPUT:标准错误(stderr)`)},{key:`error`,label:K(`@NODEINPUT:错误(error)`)}];if(e.type===`code`){let t=e.data?.config,n=Array.isArray(t?.codeOutputParams)?t.codeOutputParams:[];if(n.length>0)return n.map(e=>String(e?.key||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}));let r=t?.codeOutputKeys;return(Array.isArray(r)?r:[]).map(e=>String(e||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}if(e.type===`user_input`){let t=e.data?.config;return(Array.isArray(t?.userInputParams)?t.userInputParams:[]).map(e=>String(e?.name||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}return[]}let l=L(()=>!n.predecessorNodes||n.predecessorNodes.length===0?[]:n.predecessorNodes.map(e=>({value:e.id,label:s(e),children:c(e).map(t=>({value:`${e.id}::${t.key}`,label:t.label}))})));function u(e,t){if(!t)return;let[n,a]=t.split(`::`),o=[...i.value];o[e]={...o[e],referenceNodeId:n,referenceOutputKey:a},i.value=o,r(`update:modelValue`,o)}function d(e){return e.referenceNodeId&&e.referenceOutputKey?`${e.referenceNodeId}::${e.referenceOutputKey}`:``}return(t,n)=>{let r=ce,s=h,c=ne,p=ue,m=B,_=A;return g(),H(`div`,Je,[a(qe,{"model-value":i.value,title:void 0,addable:!1,removable:!1},{empty:f(()=>[b(N(O(K)(`@NODEINPUT:命令中未检测到变量参数`)),1)]),row:f(({item:t,index:n})=>[M(`div`,Ye,[M(`div`,Xe,[M(`label`,Ze,N(O(K)(`@NODEINPUT:参数名`)),1),a(r,{"model-value":t.paramName,disabled:e.disableParamNameEdit,placeholder:O(K)(`@NODEINPUT:参数名`),size:`default`,"onUpdate:modelValue":e=>o(n,`paramName`,e)},null,8,[`model-value`,`disabled`,`placeholder`,`onUpdate:modelValue`])]),M(`div`,Qe,[M(`label`,$e,N(O(K)(`@NODEINPUT:类型`)),1),a(c,{"model-value":t.inputType,placeholder:O(K)(`@NODEINPUT:选择类型`),size:`default`,"onUpdate:modelValue":e=>o(n,`inputType`,e)},{default:f(()=>[a(s,{value:`manual`,label:O(K)(`@NODEINPUT:手动输入`)},null,8,[`label`]),a(s,{value:`reference`,label:O(K)(`@NODEINPUT:引用节点`),disabled:!e.predecessorNodes||e.predecessorNodes.length===0},null,8,[`label`,`disabled`])]),_:1},8,[`model-value`,`placeholder`,`onUpdate:modelValue`])]),M(`div`,et,[M(`label`,tt,N(O(K)(`@NODEINPUT:值`)),1),t.inputType===`manual`?(g(),j(r,{key:0,"model-value":t.manualValue,placeholder:O(K)(`@NODEINPUT:输入参数值`),size:`default`,clearable:``,"onUpdate:modelValue":e=>o(n,`manualValue`,e)},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`])):(g(),j(m,{key:1,"model-value":d(t),data:l.value,placeholder:O(K)(`@NODEINPUT:选择节点输出`),size:`default`,clearable:``,filterable:``,"check-strictly":``,"render-after-expand":!1,"onUpdate:modelValue":e=>u(n,e)},{default:f(({data:e})=>[M(`span`,nt,[e.children?S(``,!0):(g(),j(p,{key:0},{default:f(()=>[a(O(W))]),_:1})),b(` `+N(e.label),1)])]),_:1},8,[`model-value`,`data`,`placeholder`,`onUpdate:modelValue`]))]),M(`div`,rt,[M(`label`,it,N(O(K)(`@NODEINPUT:必填`)),1),a(_,{"model-value":!!t.required,"onUpdate:modelValue":e=>o(n,`required`,e)},null,8,[`model-value`,`onUpdate:modelValue`])])])]),_:1},8,[`model-value`])])}}}),[[`__scopeId`,`data-v-1e9fd815`]]),ot={class:`code-node-input-config`},st={class:`input-row`},ct={class:`input-field name-field`},lt={class:`field-label`},ut={class:`input-field type-field`},dt={class:`field-label`},ft={class:`input-field value-field`},pt={class:`field-label`},mt={class:`input-field action-field`},ht={class:`field-label`},gt=q(x({__name:`CodeNodeInputConfig`,props:{modelValue:{},predecessorNodes:{},title:{},addable:{type:Boolean}},emits:[`update:modelValue`],setup(e,{expose:t,emit:n}){let r=e,i=n,o=T([]);m(()=>r.modelValue,e=>{o.value=Array.isArray(e)?[...e]:[]},{immediate:!0,deep:!0});function s(e){return e.type===`command`?e.data.config?.displayName||e.data.config?.commandName||e.data.label||K(`@FLOWNODE:命令节点`):e.type===`code`?e.data.config?.displayName||e.data.label||K(`@FLOWNODE:代码节点`):e.data.label||e.id}function c(e){if(!e)return[];if(e.type===`command`)return[{key:`stdout`,label:K(`@NODEINPUT:标准输出(stdout)`)},{key:`stderr`,label:K(`@NODEINPUT:标准错误(stderr)`)},{key:`error`,label:K(`@NODEINPUT:错误(error)`)}];if(e.type===`code`){let t=e.data?.config;return(Array.isArray(t?.codeOutputParams)?t.codeOutputParams:[]).map(e=>String(e?.key||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}if(e.type===`user_input`){let t=e.data?.config;return(Array.isArray(t?.userInputParams)?t.userInputParams:[]).map(e=>String(e?.name||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}return[]}let l=L(()=>!r.predecessorNodes||r.predecessorNodes.length===0?[]:r.predecessorNodes.map(e=>({value:e.id,label:s(e),children:c(e).map(t=>({value:`${e.id}::${t.key}`,label:t.label}))})));function u(){return{name:``,source:`reference`,required:!1,ref:{nodeId:``,outputKey:`stdout`}}}function d(){let e=[...o.value,u()];o.value=e,i(`update:modelValue`,e)}t({addRow:d});function p(e,t){if(!o.value[e])return;let n=[...o.value];n[e]={...n[e],...t},t.source&&(t.source===`manual`?(n[e].ref=void 0,n[e].manualValue===void 0&&(n[e].manualValue=``)):(n[e].manualValue=void 0,n[e].ref||(n[e].ref={nodeId:``,outputKey:`stdout`}))),o.value=n,i(`update:modelValue`,n)}function _(e,t){if(!t)return;let[n,r]=t.split(`::`);p(e,{ref:{nodeId:n,outputKey:r}})}function ee(e){return e.ref?.nodeId&&e.ref?.outputKey?`${e.ref.nodeId}::${e.ref.outputKey}`:``}return(t,n)=>{let r=ce,s=h,c=ne,d=B,m=A;return g(),H(`div`,ot,[a(qe,{"model-value":o.value,title:e.title,addable:e.addable!==!1,removable:!0,"min-items":0,"create-item":u,"onUpdate:modelValue":n[0]||=e=>i(`update:modelValue`,e)},{empty:f(()=>[b(N(O(K)(`@NODECFG:暂无输入参数`)),1)]),row:f(({item:t,index:n})=>[M(`div`,st,[M(`div`,ct,[M(`label`,lt,N(O(K)(`@NODECFG:参数名`)),1),a(r,{modelValue:t.name,"onUpdate:modelValue":[e=>t.name=e,e=>p(n,{name:e})],placeholder:O(K)(`@NODECFG:参数名`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),M(`div`,ut,[M(`label`,dt,N(O(K)(`@NODECFG:参数值`)),1),a(c,{modelValue:t.source,"onUpdate:modelValue":[e=>t.source=e,e=>p(n,{source:e})],style:{width:`110px`}},{default:f(()=>[a(s,{label:O(K)(`@NODECFG:引用`),value:`reference`,disabled:!e.predecessorNodes||e.predecessorNodes.length===0},null,8,[`label`,`disabled`]),a(s,{label:O(K)(`@NODECFG:手动`),value:`manual`},null,8,[`label`])]),_:1},8,[`modelValue`,`onUpdate:modelValue`])]),M(`div`,ft,[M(`label`,pt,N(O(K)(`@NODECFG:值`)),1),t.source===`manual`?(g(),j(r,{key:0,modelValue:t.manualValue,"onUpdate:modelValue":[e=>t.manualValue=e,e=>p(n,{manualValue:e})],placeholder:O(K)(`@NODECFG:请输入`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])):(g(),j(d,{key:1,"model-value":ee(t),data:l.value,placeholder:O(K)(`@NODEINPUT:选择节点输出`),clearable:``,filterable:``,"check-strictly":``,"render-after-expand":!1,"onUpdate:modelValue":e=>_(n,e)},null,8,[`model-value`,`data`,`placeholder`,`onUpdate:modelValue`]))]),M(`div`,mt,[M(`label`,ht,N(O(K)(`@NODEINPUT:必填`)),1),a(m,{"model-value":!!t.required,"onUpdate:modelValue":e=>p(n,{required:e})},null,8,[`model-value`,`onUpdate:modelValue`])])])]),_:1},8,[`model-value`,`title`,`addable`])])}}}),[[`__scopeId`,`data-v-b90fd34c`]]),_t={class:`user-input-param-config`},vt={class:`input-row`},yt={class:`input-field name-field`},bt={class:`field-label`},xt={class:`input-field type-field`},St={class:`field-label`},Ct={class:`input-field value-field`},wt={class:`field-label`},Tt={class:`tree-node-label`},Et={class:`input-field action-field`},Dt={class:`field-label`},Ot=q(x({__name:`UserInputParamConfig`,props:{modelValue:{},predecessorNodes:{},title:{},addable:{type:Boolean}},emits:[`update:modelValue`],setup(e,{expose:t,emit:r}){let i=e,o=r,s=T([]);m(()=>i.modelValue,e=>{s.value=Array.isArray(e)?[...e]:[]},{immediate:!0,deep:!0});function c(){return{name:``,source:`manual`,defaultValue:``,required:!1}}function l(){let e=[...s.value,c()];s.value=e,o(`update:modelValue`,e)}t({addRow:l});function u(e,t){if(!s.value[e])return;let n=[...s.value];n[e]={...n[e],...t},t.source&&(t.source===`manual`?(n[e].ref=void 0,n[e].defaultValue===void 0&&(n[e].defaultValue=``)):(n[e].defaultValue=void 0,n[e].ref||(n[e].ref={nodeId:``,outputKey:`stdout`}))),s.value=n,o(`update:modelValue`,n)}function d(e){return e.type===`command`?e.data.config?.displayName||e.data.config?.commandName||e.data.label||K(`@FLOWNODE:命令节点`):e.type===`code`?e.data.config?.displayName||e.data.label||K(`@FLOWNODE:代码节点`):e.type===`user_input`?e.data.config?.displayName||e.data.label||K(`@FLOWNODE:用户输入`):e.data.label||e.id}function p(e){if(!e)return[];if(e.type===`command`)return[{key:`stdout`,label:K(`@NODEINPUT:标准输出(stdout)`)},{key:`stderr`,label:K(`@NODEINPUT:标准错误(stderr)`)},{key:`error`,label:K(`@NODEINPUT:错误(error)`)}];if(e.type===`code`){let t=e.data?.config;return(Array.isArray(t?.codeOutputParams)?t.codeOutputParams:[]).map(e=>String(e?.key||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}if(e.type===`user_input`){let t=e.data?.config;return(Array.isArray(t?.userInputParams)?t.userInputParams:[]).map(e=>String(e?.name||``).trim()).filter(e=>!!e).map(e=>({key:e,label:e}))}return[]}let _=L(()=>!i.predecessorNodes||i.predecessorNodes.length===0?[]:i.predecessorNodes.map(e=>({value:e.id,label:d(e),children:p(e).map(t=>({value:`${e.id}::${t.key}`,label:t.label}))})));function ee(e,t){if(!t)return;let[n,r]=t.split(`::`);u(e,{ref:{nodeId:n,outputKey:r}})}function te(e){return e.ref?.nodeId&&e.ref?.outputKey?`${e.ref.nodeId}::${e.ref.outputKey}`:``}return(t,r)=>{let d=ce,p=h,m=ne,v=ue,y=B,re=A,ie=n;return g(),H(`div`,_t,[a(qe,{"model-value":s.value,title:e.title,addable:e.addable!==!1,removable:!0,"min-items":0,"create-item":c,"onUpdate:modelValue":r[0]||=e=>o(`update:modelValue`,e)},{empty:f(()=>[b(N(O(K)(`@UINPUT:暂无输入参数`)),1)]),row:f(({item:e,index:t})=>[M(`div`,vt,[M(`div`,yt,[M(`label`,bt,N(O(K)(`@UINPUT:参数名`)),1),a(d,{modelValue:e.name,"onUpdate:modelValue":[t=>e.name=t,e=>u(t,{name:e})],placeholder:O(K)(`@UINPUT:参数名`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),M(`div`,xt,[M(`label`,St,N(O(K)(`@UINPUT:类型`)),1),a(m,{modelValue:e.source,"onUpdate:modelValue":[t=>e.source=t,e=>u(t,{source:e})],style:{width:`130px`}},{default:f(()=>[a(p,{label:O(K)(`@UINPUT:手动输入`),value:`manual`},null,8,[`label`]),a(p,{label:O(K)(`@UINPUT:引用`),value:`reference`,disabled:!i.predecessorNodes||i.predecessorNodes.length===0},null,8,[`label`,`disabled`])]),_:1},8,[`modelValue`,`onUpdate:modelValue`])]),M(`div`,Ct,[M(`label`,wt,N(e.source===`manual`?O(K)(`@UINPUT:默认值`):O(K)(`@UINPUT:引用输出`)),1),e.source===`manual`?(g(),j(d,{key:0,modelValue:e.defaultValue,"onUpdate:modelValue":[t=>e.defaultValue=t,e=>u(t,{defaultValue:e})],placeholder:O(K)(`@UINPUT:默认值`),clearable:``},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])):(g(),j(y,{key:1,"model-value":te(e),data:_.value,placeholder:O(K)(`@NODEINPUT:选择节点输出`),clearable:``,filterable:``,"check-strictly":``,"render-after-expand":!1,"onUpdate:modelValue":e=>ee(t,e)},{default:f(({data:e})=>[M(`span`,Tt,[e.children?S(``,!0):(g(),j(v,{key:0},{default:f(()=>[a(O(W))]),_:1})),b(` `+N(e.label),1)])]),_:1},8,[`model-value`,`data`,`placeholder`,`onUpdate:modelValue`]))]),M(`div`,Et,[M(`label`,Dt,N(O(K)(`@NODEINPUT:必填`)),1),a(re,{"model-value":!!e.required,"onUpdate:modelValue":e=>u(t,{required:e})},null,8,[`model-value`,`onUpdate:modelValue`])])])]),actions:f(()=>[e.addable===!1?S(``,!0):(g(),j(ie,{key:0,type:`primary`,plain:``,size:`small`,onClick:l},{default:f(()=>[b(N(O(K)(`@UINPUT:添加参数`)),1)]),_:1}))]),_:1},8,[`model-value`,`title`,`addable`])])}}}),[[`__scopeId`,`data-v-5dc978f3`]]),kt={key:0,class:`config-content`},At={class:`config-section`},jt={class:`section-title`},Mt={key:0,class:`config-section`},Nt={class:`section-title`},Pt={key:1,class:`config-section`},Ft={class:`section-title`},It={class:`sub-section`},Lt={class:`sub-title`},Rt={key:0,class:`empty-tip`},zt={key:1,class:`condition-branch-list`},Bt={class:`branch-main`},Vt={class:`branch-header`},Ht={class:`branch-title`},Ut={key:0,class:`branch-badge`},Wt={class:`branch-meta`},Gt={key:0,class:`branch-rules`},Kt={class:`rules-header`},qt={class:`rule-col`},Jt={class:`field-label`},Yt={class:`rule-col`},Xt={class:`field-label`},Zt={class:`rule-col`},Qt={class:`field-label`},$t={class:`rule-col`,style:{"align-self":`flex-end`}},en={key:1,class:`branch-default-tip`},tn={key:0,class:`branch-actions`},nn={key:2,class:`config-section`},rn={class:`section-title`},an={key:3,class:`config-section`},on={class:`section-title`},sn={key:4,class:`config-section`},cn={class:`section-title`},ln={key:5,class:`config-section`},un={class:`section-title`},dn={key:6,class:`config-section`},fn={class:`section-title`},pn={class:`output-param-row`},mn={class:`output-param-field`},hn={class:`field-label`},gn={key:7,class:`config-section`},_n={class:`section-title`},vn={key:0,class:`empty-tip`},yn={key:1,class:`command-list`},bn=[`onClick`],xn={class:`command-info`},Sn={class:`command-header`},Cn={class:`command-name`},wn={key:0,class:`command-desc`},Tn={class:`command-code`},En={class:`command-dir`},Dn={key:8,class:`config-section`},On={class:`section-title`},kn={style:{"margin-left":`var(--spacing-md)`}},An={key:9,class:`config-section`},jn={class:`section-title`},Mn={class:`sub-section`},Nn={class:`sub-title`},Pn={class:`code-examples`},Fn={class:`examples-title`},In={class:`examples-actions`},Ln={key:10,class:`config-section`},Rn={class:`section-title`},zn={class:`reference-tip`},Bn={class:`reference-tip`},Vn={class:`node-option`},Hn={class:`node-name`},Un={class:`node-id`},Wn={class:`reference-tip`},Gn={class:`reference-tip`},Kn={key:11,class:`config-section`},qn={class:`section-title`},Jn={class:`output-param-row`},Yn={class:`output-param-field`},Xn={class:`field-label`},Zn={class:`output-param-field`},Qn={class:`field-label`},$n={key:12,class:`config-section`},er={class:`section-title`},tr={class:`output-param-row`},nr={class:`output-param-field`},rr={class:`field-label`},ir={class:`output-param-field`},ar={class:`field-label`},or={class:`dialog-footer`},sr={class:`footer-actions`},cr=`function main(param) {
2
2
  const out = new Object()
3
3
  out.key0 = param.input
4
4
  return out
@@ -1,4 +1,4 @@
1
- import"./rolldown-runtime-CMxvf4Kt.js";import{B as e,Cn as t,Fn as n,G as r,Jn as i,Kn as a,L as o,Ln as s,Mn as c,O as ee,Pn as l,R as te,Sn as u,Tn as ne,W as re,Y as ie,Yn as ae,_n as d,a as f,ar as p,cn as m,ct as oe,dr as h,fr as g,gn as _,gt as se,h as v,hn as y,hr as b,i as ce,ln as x,m as le,mn as S,mr as ue,o as de,pt as fe,sn as pe,un as me,vn as C,xt as he,z as ge,zn as _e,zt as ve}from"./element-plus-B6Owr5jY.js";import{n as w,t as ye}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{n as be,t as xe}from"./CommonDialog-G17HYMln.js";import{b as Se,p as Ce,v as we}from"./index-C1q8_YYO.js";var Te={class:`log-header`},Ee={class:`header-left`},De={class:`log-actions`},Oe={key:1,viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`currentColor`,style:{display:`block`}},ke={key:0,class:`filter-panel-header`},Ae={class:`filter-form`},je={class:`filter-item`},Me={class:`compact-label`},Ne={class:`filter-item`},Pe={class:`compact-label`},Fe={class:`filter-item`},Ie={class:`compact-label`},Le={class:`filter-item`},Re={class:`compact-label`},ze={class:`filter-actions`},Be={key:0,role:`alert`,class:`log-error`},Ve={key:1,class:`log-empty-state`},He={class:`log-empty-text`},Ue={key:2,class:`content-area-content`},We={class:`table-view-container`},Ge={class:`commit-message-cell`},Ke={class:`message-content`},qe={key:0,class:`branch-container`},Je={class:`message-text`},Ye={class:`author-name`},Xe=[`title`,`aria-label`,`onClick`],Ze={class:`commit-detail-container`},Qe={key:0,class:`commit-info`},$e={class:`commit-info-row`},et={class:`info-item date-item`},tt={class:`info-label`},nt={class:`info-value`},rt={class:`info-item message-item`},it={class:`info-label`},at={class:`info-message-wrapper`},ot={class:`info-message-title`},st=[`innerHTML`],ct=[`aria-label`,`onKeydown`],T=ye(ne({__name:`LogList`,setup(ne,{expose:ye}){let T=Se(),E=p([]),D=p(``),lt=p(!1),O=S(()=>T.isLoadingLog||lt.value),k=p(!1),A=p(!1),ut=p(null),dt=p(!1),j=p(null),M=p([]),N=p(``),P=p(!1),F=p(``),I=p(`full-new`),L=p(``),R=p(``),z=p(!1),ft=S(()=>j.value?.message?j.value.message.split(`
1
+ import"./rolldown-runtime-CMxvf4Kt.js";import{B as e,Cn as t,Fn as n,G as r,Jn as i,Kn as a,L as o,Ln as s,Mn as c,O as ee,Pn as l,R as te,Sn as u,Tn as ne,W as re,Y as ie,Yn as ae,_n as d,a as f,ar as p,cn as m,ct as oe,dr as h,fr as g,gn as _,gt as se,h as v,hn as y,hr as b,i as ce,ln as x,m as le,mn as S,mr as ue,o as de,pt as fe,sn as pe,un as me,vn as C,xt as he,z as ge,zn as _e,zt as ve}from"./element-plus-B6Owr5jY.js";import{n as w,t as ye}from"./_plugin-vue_export-helper-BMXWW0fG.js";import{n as be,t as xe}from"./CommonDialog-G17HYMln.js";import{b as Se,p as Ce,v as we}from"./index-CPqKvZBK.js";var Te={class:`log-header`},Ee={class:`header-left`},De={class:`log-actions`},Oe={key:1,viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`currentColor`,style:{display:`block`}},ke={key:0,class:`filter-panel-header`},Ae={class:`filter-form`},je={class:`filter-item`},Me={class:`compact-label`},Ne={class:`filter-item`},Pe={class:`compact-label`},Fe={class:`filter-item`},Ie={class:`compact-label`},Le={class:`filter-item`},Re={class:`compact-label`},ze={class:`filter-actions`},Be={key:0,role:`alert`,class:`log-error`},Ve={key:1,class:`log-empty-state`},He={class:`log-empty-text`},Ue={key:2,class:`content-area-content`},We={class:`table-view-container`},Ge={class:`commit-message-cell`},Ke={class:`message-content`},qe={key:0,class:`branch-container`},Je={class:`message-text`},Ye={class:`author-name`},Xe=[`title`,`aria-label`,`onClick`],Ze={class:`commit-detail-container`},Qe={key:0,class:`commit-info`},$e={class:`commit-info-row`},et={class:`info-item date-item`},tt={class:`info-label`},nt={class:`info-value`},rt={class:`info-item message-item`},it={class:`info-label`},at={class:`info-message-wrapper`},ot={class:`info-message-title`},st=[`innerHTML`],ct=[`aria-label`,`onKeydown`],T=ye(ne({__name:`LogList`,setup(ne,{expose:ye}){let T=Se(),E=p([]),D=p(``),lt=p(!1),O=S(()=>T.isLoadingLog||lt.value),k=p(!1),A=p(!1),ut=p(null),dt=p(!1),j=p(null),M=p([]),N=p(``),P=p(!1),F=p(``),I=p(`full-new`),L=p(``),R=p(``),z=p(!1),ft=S(()=>j.value?.message?j.value.message.split(`
2
2
  `)[0].trim():``),pt=S(()=>j.value?.message?j.value.message.split(`
3
3
  `).slice(1).join(`
4
4
  `).trim():``),mt=S(()=>pt.value.length>0),ht=S(()=>pt.value.replace(/\n/g,`<br>`)),B=p(!1),V=p([]),H=p(``),U=p(null),gt=p([]),W=p([]),_t=p([]),G=p(!1),vt=p(0),yt=p(0),K=p(null),q=p(null),bt=S(()=>E.value),xt=S(()=>M.value.map(e=>({path:e,name:e.split(`/`).pop()||e})));async function J(e=!1,t=1){let n=Se();if(!n.isGitRepo){D.value=`当前目录不是Git仓库`;return}try{t>1?A.value=!0:lt.value=!0;let r=new URLSearchParams;r.append(`page`,t.toString()),r.append(`all`,e.toString()),r.append(`with_parents`,`true`),V.value.length>0&&r.append(`author`,V.value.join(`,`)),W.value.length>0&&r.append(`branch`,W.value.join(`,`)),H.value&&r.append(`message`,H.value),U.value&&Array.isArray(U.value)&&U.value.length===2&&(r.append(`dateFrom`,U.value[0]),r.append(`dateTo`,U.value[1])),r.append(`_t`,Date.now().toString());let i=await(await fetch(`/api/log?${r.toString()}`)).json();if(!i||!i.data||!Array.isArray(i.data)){D.value=`加载提交历史失败: 服务器返回数据格式不正确`;return}let a=t>1;a&&Array.isArray(i.data)?E.value=E.value.concat(i.data):Array.isArray(i.data)&&(E.value=i.data),n.currentPage=t,n.totalCommits=i.total??E.value.length,n.hasMoreData=i.hasMore===!0,!a&&!e&&c(()=>{Dt(),setTimeout(nn,200)}),D.value=``}catch(e){D.value=`加载提交历史失败: `+(e instanceof Error?e.message:String(e)),t>1&&(n.hasMoreData=!1)}finally{t>1?A.value=!1:lt.value=!1}}function St(e){return e.includes(`HEAD -> `)?e.replace(`HEAD -> `,``):e.includes(`origin/`)?e:e.trim()}function Ct(e){return e.includes(`HEAD`)?`success`:e.includes(`origin/`)?`warning`:`info`}function wt(e){return e?e.length>60?!0:e.includes(`
@@ -0,0 +1 @@
1
+ .mindmap-view[data-v-fde41ce9]{background:var(--bg-page);flex-direction:column;height:100%;min-height:0;display:flex;overflow:hidden}.mm-toolbar[data-v-fde41ce9]{background:var(--bg-container);border-bottom:1px solid var(--border-color);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 14px;display:flex}.mm-toolbar-left[data-v-fde41ce9],.mm-toolbar-right[data-v-fde41ce9]{align-items:center;gap:8px;min-width:0;display:flex}.mm-toolbar-right[data-v-fde41ce9]{flex-shrink:0}.mm-dir-path[data-v-fde41ce9]{color:var(--text-secondary);font-size:12px;font-family:var(--font-mono,monospace);white-space:nowrap;text-overflow:ellipsis;background:var(--bg-subtle);border-radius:var(--radius-sm);max-width:320px;padding:2px 8px;overflow:hidden}.mm-dir-empty[data-v-fde41ce9]{color:var(--text-tertiary);font-size:12px;font-style:italic}.mm-status[data-v-fde41ce9]{color:var(--text-secondary);align-items:center;gap:4px;margin-left:4px;font-size:12px;display:flex}.mm-status-title[data-v-fde41ce9]{white-space:nowrap;text-overflow:ellipsis;max-width:160px;font-weight:500;overflow:hidden}.mm-status-dirty[data-v-fde41ce9]{color:var(--color-warning);font-size:14px;line-height:1}.mm-body[data-v-fde41ce9]{flex:1;min-height:0;display:flex;overflow:hidden}.mm-sidebar[data-v-fde41ce9]{background:var(--bg-container);border-right:1px solid var(--border-color);flex-direction:column;flex-shrink:0;width:240px;display:flex}.mm-sidebar-header[data-v-fde41ce9]{border-bottom:1px solid var(--border-color);background:var(--bg-panel);justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.mm-sidebar-title[data-v-fde41ce9]{color:var(--text-secondary);letter-spacing:.5px;text-transform:uppercase;font-size:12px;font-weight:600}.mm-sidebar-list[data-v-fde41ce9]{flex:1;min-height:0;padding:4px;overflow-y:auto}.mm-sidebar-empty[data-v-fde41ce9],.mm-sidebar-error[data-v-fde41ce9]{text-align:center;color:var(--text-tertiary);padding:24px 12px;font-size:12px}.mm-sidebar-error[data-v-fde41ce9]{color:var(--color-danger)}.mm-file-item[data-v-fde41ce9]{border-radius:var(--radius-md);cursor:pointer;align-items:center;gap:8px;padding:6px 8px;transition:background .15s;display:flex;position:relative}.mm-file-item[data-v-fde41ce9]:hover{background:var(--bg-hover)}.mm-file-item.active[data-v-fde41ce9]{background:color-mix(in srgb, var(--color-primary) 12%, transparent)}.mm-file-item.active .mm-file-title[data-v-fde41ce9]{color:var(--color-primary);font-weight:600}.mm-file-icon[data-v-fde41ce9]{color:var(--text-tertiary);flex-shrink:0;align-items:center;display:flex}.mm-file-item.active .mm-file-icon[data-v-fde41ce9]{color:var(--color-primary)}.mm-file-info[data-v-fde41ce9]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.mm-file-title[data-v-fde41ce9]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:13px;overflow:hidden}.mm-file-meta[data-v-fde41ce9]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10.5px;overflow:hidden}.mm-file-actions[data-v-fde41ce9]{opacity:0;align-items:center;gap:2px;transition:opacity .15s;display:flex}.mm-file-item:hover .mm-file-actions[data-v-fde41ce9]{opacity:1}.mm-editor[data-v-fde41ce9]{background:var(--bg-container);flex:1;min-width:0;min-height:0;position:relative}.mm-editor[data-v-fde41ce9] .zm-mindmap,.mm-editor[data-v-fde41ce9]>*{width:100%;height:100%}.mm-editor-empty[data-v-fde41ce9]{color:var(--text-tertiary);flex-direction:column;justify-content:center;align-items:center;gap:8px;display:flex;position:absolute;inset:0}.mm-editor-empty svg[data-v-fde41ce9]{opacity:.4}.mm-editor-empty-title[data-v-fde41ce9]{color:var(--text-secondary);margin:8px 0 0;font-size:16px;font-weight:600}.mm-editor-empty-hint[data-v-fde41ce9]{color:var(--text-tertiary);margin:0;font-size:13px}@media (width<=900px){.mm-sidebar[data-v-fde41ce9]{width:180px}.mm-dir-path[data-v-fde41ce9]{max-width:160px}}