prime-dev-cli 1.0.21 → 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/.next/BUILD_ID +1 -1
- package/dist/server/.next/app-build-manifest.json +1 -1
- package/dist/server/.next/app-path-routes-manifest.json +3 -0
- package/dist/server/.next/build-manifest.json +6 -6
- package/dist/server/.next/cache/.tsbuildinfo +1 -1
- package/dist/server/.next/cache/eslint/.cache_1qa5vxt +1 -1
- package/dist/server/.next/fallback-build-manifest.json +6 -6
- package/dist/server/.next/next-minimal-server.js.nft.json +1 -1
- package/dist/server/.next/next-server.js.nft.json +1 -1
- package/dist/server/.next/prerender-manifest.json +9 -9
- package/dist/server/.next/server/app/_not-found.html +1 -1
- package/dist/server/.next/server/app/_not-found.rsc +1 -1
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/app-build-manifest.json +10 -0
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/app-paths-manifest.json +3 -0
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/build-manifest.json +16 -0
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/next-font-manifest.json +6 -0
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/react-loadable-manifest.json +1 -0
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/server-reference-manifest.json +4 -0
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route.js +8 -0
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route.js.map +5 -0
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route.js.nft.json +1 -0
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route_client-reference-manifest.js +2 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/app-build-manifest.json +10 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/app-paths-manifest.json +3 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/build-manifest.json +16 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/next-font-manifest.json +6 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/react-loadable-manifest.json +1 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/server-reference-manifest.json +4 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/abort/route.js +8 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/abort/route.js.map +5 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/abort/route.js.nft.json +1 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/abort/route_client-reference-manifest.js +2 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/route/app-build-manifest.json +10 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/route/app-paths-manifest.json +3 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/route/build-manifest.json +16 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/route/next-font-manifest.json +6 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/route/react-loadable-manifest.json +1 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/route/server-reference-manifest.json +4 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/route.js +9 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/route.js.map +5 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/route.js.nft.json +1 -0
- package/dist/server/.next/server/app/api/gwh-git-flow/route_client-reference-manifest.js +2 -0
- package/dist/server/.next/server/app/api/uat-git-flow/route.js +2 -2
- package/dist/server/.next/server/app/api/uat-git-flow/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/uat-git-flow/step/route.js +2 -2
- package/dist/server/.next/server/app/api/uat-git-flow/step/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/configuration.html +1 -1
- package/dist/server/.next/server/app/configuration.rsc +1 -1
- package/dist/server/.next/server/app/index.html +1 -1
- package/dist/server/.next/server/app/index.rsc +1 -1
- package/dist/server/.next/server/app/initialization/page/app-build-manifest.json +1 -1
- package/dist/server/.next/server/app/initialization/page_client-reference-manifest.js +1 -1
- package/dist/server/.next/server/app/initialization.html +1 -1
- package/dist/server/.next/server/app/initialization.rsc +2 -2
- package/dist/server/.next/server/app-paths-manifest.json +3 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__0f9a35fc._.js +3 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__0f9a35fc._.js.map +1 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__37bfbf6b._.js +16 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__37bfbf6b._.js.map +1 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__66dc5e6b._.js +16 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__66dc5e6b._.js.map +1 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__98088bea._.js.map +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__bc84f5d7._.js → [root-of-the-server]__9f7a6c58._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__978c4dda._.js.map → [root-of-the-server]__9f7a6c58._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__978c4dda._.js → [root-of-the-server]__ac6efee1._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__bc84f5d7._.js.map → [root-of-the-server]__ac6efee1._.js.map} +1 -1
- package/dist/server/.next/server/chunks/_24087f66._.js +1 -1
- package/dist/server/.next/server/chunks/_24087f66._.js.map +1 -1
- package/dist/server/.next/server/chunks/_61c263b3._.js +1 -1
- package/dist/server/.next/server/chunks/_61c263b3._.js.map +1 -1
- package/dist/server/.next/server/chunks/_f35a5421._.js +3 -0
- package/dist/server/.next/server/chunks/_f35a5421._.js.map +1 -0
- package/dist/server/.next/server/chunks/ssr/packages_server_src_7cef6dbd._.js +1 -1
- package/dist/server/.next/server/chunks/ssr/packages_server_src_7cef6dbd._.js.map +1 -1
- package/dist/server/.next/server/middleware-build-manifest.js +4 -4
- package/dist/server/.next/server/pages/404.html +1 -1
- package/dist/server/.next/server/pages/500.html +1 -1
- package/dist/server/.next/server/pages/_app/build-manifest.json +2 -2
- package/dist/server/.next/server/pages/_error/build-manifest.json +2 -2
- package/dist/server/.next/static/chunks/{2693a47bbc4fc75c.js → 0a55e0a2ff3b09e0.js} +1 -1
- package/dist/server/.next/static/chunks/13acbe5989647429.js +3 -0
- package/dist/server/.next/static/chunks/{352f266165580042.js → 6803a56f8e33c487.js} +2 -2
- package/dist/server/.next/static/chunks/{ac48e758a0b74c2b.js → 8f80ca1e88635b12.js} +1 -1
- package/dist/server/.next/static/chunks/{263bfd9c535a6eda.js.map → acb330991f8ec5eb.js.map} +1 -1
- package/dist/server/.next/static/chunks/f5014a46b22ea191.js.map +1 -0
- package/dist/server/.next/static/chunks/pages/_app.js +2 -2
- package/dist/server/.next/static/chunks/pages/_error.js +2 -2
- package/dist/server/.next/trace +2 -1
- package/package.json +1 -1
- package/dist/server/.next/static/chunks/67cde2756fdf3a91.js +0 -3
- package/dist/server/.next/static/chunks/c198f02ea70fda25.js.map +0 -1
- /package/dist/server/.next/static/{TxLJ_6S5QAvwM1pkwjUrZ → FFQIKXlgcLTQYLDJOFtvJ}/_buildManifest.js +0 -0
- /package/dist/server/.next/static/{TxLJ_6S5QAvwM1pkwjUrZ → FFQIKXlgcLTQYLDJOFtvJ}/_clientMiddlewareManifest.json +0 -0
- /package/dist/server/.next/static/{TxLJ_6S5QAvwM1pkwjUrZ → FFQIKXlgcLTQYLDJOFtvJ}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports={67450:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({PROJECT_CONFIG_PATH:()=>c,ProjectStatus:()=>f,WORKSPACE_CONFIG:()=>b});var d=a.i(13442),e=a.i(30331);let b={WORKSPACE_ROOT:(0,e.join)((0,d.homedir)(),"Documents","prime-workspace"),GIT_TIMEOUT:3e5,MAX_CONCURRENT_CLONES:Math.max(2,Math.min((0,d.cpus)().length,8)),MAX_RETRY_ATTEMPTS:3},c=(0,e.join)((0,d.homedir)(),".prime-projects.json");var f=function(a){return a.PENDING="pending",a.EXISTING="existing",a.CLONING="cloning",a.SUCCESS="success",a.FAILED="failed",a.RETRYING="retrying",a.INCOMPLETE="incomplete",a}({})}},90250:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});var d=a.i(99559),e=a.i(57560),f=a.i(40490),g=a.i(50923),h=a.i(2031),i=a.i(94688),j=a.i(58413),k=a.i(22529),l=a.i(67450);let b=()=>{let a=(0,f.useRouter)(),[b,c]=(0,e.useState)({isInitializing:!1,isCompleted:!1,isLoading:!0,hasCompleted:!1,globalProgress:0,globalMessage:"正在检查工作空间状态...",projects:{}}),[m,n]=(0,e.useState)({selectedProjects:[],createBranch:"release/GDirect-",baseBranch:"main",mergeBranch:""}),[o,p]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],runId:""}),[q,r]=(0,e.useState)({selectedProjects:[],targetBranch:"main",sourceBranch:""}),[s,t]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[u,v]=(0,e.useState)({selectedProjects:[],createBranch:"",baseBranch:"main"}),[w,x]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[y,z]=(0,e.useState)(!1),[A,B]=(0,e.useState)(null),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(!1),[G,H]=(0,e.useState)([]),[I,J]=(0,e.useState)({});(0,e.useEffect)(()=>{K()},[]),(0,e.useEffect)(()=>{(async()=>{try{let a=await fetch("/api/admin-status"),b=await a.json();z(!!b?.isAdmin)}catch(a){console.error("获取管理员状态失败:",a),z(!1)}})()},[]);let K=async()=>{try{c(a=>({...a,isLoading:!0,globalMessage:"正在检查工作空间状态..."}));let a=await fetch("/api/check-workspace"),b=await a.json();if(b.success){let a={};b.projects.forEach(b=>{a[b.name]={name:b.name,status:b.status,progress:100*(b.status===l.ProjectStatus.EXISTING),message:b.message,canRetry:!1,needsCleanup:b.needsCleanup||!1}}),c(c=>({...c,isLoading:!1,projects:a,globalMessage:b.message||"检查完成"}))}else c(a=>({...a,isLoading:!1,globalMessage:b.error||"检查工作空间状态失败"}))}catch(a){c(a=>({...a,isLoading:!1,globalMessage:"无法连接到服务器,请刷新页面重试"})),console.error("检查工作空间状态失败:",a)}},L=a=>{switch(a.type){case"initialization":case"workspace_created":case"projects_loaded":if(c(b=>({...b,globalProgress:a.progress||0,globalMessage:a.message||""})),a.projects&&Array.isArray(a.projects)){let b={};a.projects.forEach(a=>{b[a]={name:a,status:l.ProjectStatus.PENDING,progress:0,message:"等待开始...",canRetry:!1}}),c(a=>({...a,projects:b}))}break;case"project_existing":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,globalMessage:a.message??"",projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.EXISTING,message:"项目已存在",progress:100,canRetry:!1}}}))}break;case"project_start":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,globalMessage:a.message??"",projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.CLONING,message:"开始克隆...",progress:0}}}))}break;case"project_progress":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,projects:{...c.projects,[b]:{...c.projects[b],message:a.message??"",progress:Math.min(a.progress??0,100)}}}))}break;case"project_success":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.SUCCESS,message:"克隆成功",progress:100,canRetry:!1}}}))}break;case"project_failed":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.FAILED,message:"克隆失败",error:a.error,canRetry:!0}}}))}break;case"command_log":if(a.projectName&&a.logType&&void 0!==a.content&&a.timestamp){let b=a.projectName,d=a.logType,e=a.content,f=a.timestamp;c(a=>({...a,projects:{...a.projects,[b]:{...a.projects[b],logs:[...a.projects[b]?.logs||[],{type:d,content:e,timestamp:f}].slice(-1e3)}}}))}break;case"completion":c(b=>({...b,isInitializing:!1,isCompleted:!0,hasCompleted:!0,globalProgress:100,globalMessage:a.message??"初始化完成",completionSummary:a.result?{success:a.result.success,totalProjects:a.result.totalProjects,successCount:a.result.successCount,failedCount:a.result.failedCount,duration:a.result.duration}:void 0}));break;case"error":c(b=>({...b,isInitializing:!1,hasCompleted:!0,globalMessage:a.message??"发生错误",globalProgress:a.progress??b.globalProgress}))}},M=async(a,b="cursor")=>{c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isOpening:!0}}}));try{let d=await fetch("/api/open-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:a,editor:b})}),e=await d.json();if(e.success&&e.editorUrl){let a=document.createElement("a");a.href=e.editorUrl,a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)}else console.error("打开项目失败:",e.error);c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isOpening:!1}}}))}catch(b){c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isOpening:!1}}})),console.error("打开项目失败:",b)}},N=async a=>{c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isCleaningUp:!0}}}));try{let b=await fetch("/api/cleanup-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:a})}),d=await b.json();d.success?c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],status:l.ProjectStatus.PENDING,message:"已清理,待克隆",isCleaningUp:!1,needsCleanup:!1}}})):c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isCleaningUp:!1,error:d.error}}}))}catch(b){c(c=>({...c,projects:{...c.projects,[a]:{...c.projects[a],isCleaningUp:!1,error:b instanceof Error?b.message:String(b)}}}))}},O=async a=>{c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],status:l.ProjectStatus.RETRYING,message:"正在重试...",progress:0,canRetry:!1}}}));try{let b=await fetch("/api/retry-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:a})}),d=await b.json();c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],status:d.success?l.ProjectStatus.SUCCESS:l.ProjectStatus.FAILED,message:d.message,error:d.error,progress:d.success?100:b.projects[a].progress,canRetry:!d.success}}}))}catch(b){c(c=>({...c,projects:{...c.projects,[a]:{...c.projects[a],status:l.ProjectStatus.FAILED,message:"重试失败",error:b instanceof Error?b.message:String(b),canRetry:!0}}}))}},P=a=>{switch(a){case l.ProjectStatus.EXISTING:case l.ProjectStatus.SUCCESS:return"text-green-600 bg-green-50 border-green-200";case l.ProjectStatus.FAILED:return"text-red-600 bg-red-50 border-red-200";case l.ProjectStatus.INCOMPLETE:return"text-orange-600 bg-orange-50 border-orange-200";case l.ProjectStatus.CLONING:case l.ProjectStatus.RETRYING:return"text-blue-600 bg-blue-50 border-blue-200";case l.ProjectStatus.PENDING:default:return"text-gray-600 bg-gray-50 border-gray-200"}},Q=a=>{switch(a){case l.ProjectStatus.PENDING:return"待克隆";case l.ProjectStatus.EXISTING:return"已存在";case l.ProjectStatus.CLONING:return"克隆中";case l.ProjectStatus.SUCCESS:return"成功";case l.ProjectStatus.FAILED:return"失败";case l.ProjectStatus.INCOMPLETE:return"不完整";case l.ProjectStatus.RETRYING:return"重试中";default:return"未知"}},R=()=>{let a=Object.values(b.projects);return a.length>0&&a.every(a=>a.status===l.ProjectStatus.EXISTING)},S=b=>{a.push(`/configuration?project=${encodeURIComponent(b)}`)},T=(a,b)=>{n(c=>({...c,[a]:b}))},U=(a,b)=>{r(c=>({...c,[a]:b}))},V=(a,b)=>{v(c=>({...c,[a]:b}))},W=async a=>{let b=[];if(0===q.selectedProjects.length&&b.push("请先选择至少一个项目。"),q.targetBranch.trim()||b.push("请填写合入分支名称。"),q.sourceBranch.trim()||b.push("请填写被合入分支名称。"),b.length>0)return void t({isRunning:!1,operationLogs:[],feedbacks:b,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let c=q.selectedProjects.length;t({isRunning:!0,operationLogs:[`开始批量分支合并,共 ${c} 个项目...`],feedbacks:[],progress:0,totalProjects:c,completedProjects:0,currentProject:""});let d=[],e=[];for(let b=0;b<q.selectedProjects.length;b++){let f=q.selectedProjects[b];t(a=>({...a,currentProject:f,completedProjects:b,progress:Math.round(b/c*100),operationLogs:[...a.operationLogs,`[进度] ${b+1}/${c} 开始处理项目 ${f}`]}));try{let b=await fetch("/api/admin-git-batch-merge",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:[f],targetBranch:q.targetBranch.trim(),sourceBranch:q.sourceBranch.trim(),dryRun:a})}),c=await b.json(),g=Array.isArray(c.operationLogs)?c.operationLogs:[],h=Array.isArray(c.feedbacks)?c.feedbacks:[c.error||"执行失败"];t(a=>({...a,operationLogs:[...a.operationLogs,...g],feedbacks:[...a.feedbacks,...h]})),e.push(...h),Array.isArray(c.projectResults)&&d.push(...c.projectResults)}catch(b){let a=b instanceof Error?b.message:"执行失败";t(b=>({...b,operationLogs:[...b.operationLogs,`[${f}] 请求失败: ${a}`],feedbacks:[...b.feedbacks,`[${f}] ${a}`]})),e.push(`[${f}] ${a}`),d.push({projectName:f,success:!1,reason:a})}}t(a=>({...a,isRunning:!1,progress:100,completedProjects:c,currentProject:"",operationLogs:[...a.operationLogs,"批量分支合并执行完成。"],feedbacks:e.length>0?e:a.feedbacks})),d.length>0?(H(d),F(!0)):(H([]),F(!1))},X=async a=>{let b=[];if(0===u.selectedProjects.length&&b.push("请先选择至少一个项目。"),u.createBranch.trim()||b.push("请填写新分支名称。"),u.baseBranch.trim()||b.push("请填写来源分支名称。"),b.length>0)return void x({isRunning:!1,operationLogs:[],feedbacks:b,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let c=u.selectedProjects.length;x({isRunning:!0,operationLogs:[`开始批量新建分支,共 ${c} 个项目...`],feedbacks:[],progress:0,totalProjects:c,completedProjects:0,currentProject:""});let d=[],e=[];for(let b=0;b<u.selectedProjects.length;b++){let f=u.selectedProjects[b];x(a=>({...a,currentProject:f,completedProjects:b,progress:Math.round(b/c*100),operationLogs:[...a.operationLogs,`[进度] ${b+1}/${c} 开始处理项目 ${f}`]}));try{let b=await fetch("/api/admin-git-batch-create-branch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:[f],createBranch:u.createBranch.trim(),baseBranch:u.baseBranch.trim(),dryRun:a})}),c=await b.json(),g=Array.isArray(c.operationLogs)?c.operationLogs:[],h=Array.isArray(c.feedbacks)?c.feedbacks:[c.error||"执行失败"];x(a=>({...a,operationLogs:[...a.operationLogs,...g],feedbacks:[...a.feedbacks,...h]})),e.push(...h),Array.isArray(c.projectResults)&&d.push(...c.projectResults)}catch(b){let a=b instanceof Error?b.message:"执行失败";x(b=>({...b,operationLogs:[...b.operationLogs,`[${f}] 请求失败: ${a}`],feedbacks:[...b.feedbacks,`[${f}] ${a}`]})),e.push(`[${f}] ${a}`),d.push({projectName:f,success:!1,reason:a})}}x(a=>({...a,isRunning:!1,progress:100,completedProjects:c,currentProject:"",operationLogs:[...a.operationLogs,"批量新建分支执行完成。"],feedbacks:e.length>0?e:a.feedbacks})),d.length>0?(H(d),F(!0)):(H([]),F(!1))},Y=async a=>{let b=[];if(0===m.selectedProjects.length&&b.push("请先选择至少一个项目。"),m.createBranch.trim()||b.push("请填写创建分支名。"),m.baseBranch.trim()||b.push("请填写从 origin 哪个分支创建。"),m.mergeBranch.trim()||b.push("请填写被合并分支名称。"),b.length>0)return void p({isRunning:!1,operationLogs:[],feedbacks:b,runId:""});let c=`uat-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;p({isRunning:!0,operationLogs:[],feedbacks:[],runId:c});try{let b=await fetch("/api/uat-git-flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:m.selectedProjects,createBranch:m.createBranch.trim(),baseBranch:m.baseBranch.trim(),mergeBranch:m.mergeBranch.trim(),dryRun:a,runId:c})}),d=await b.json();p({isRunning:!1,operationLogs:Array.isArray(d.operationLogs)?d.operationLogs:[],feedbacks:Array.isArray(d.feedbacks)?d.feedbacks:[d.error||"执行失败"],runId:""}),Array.isArray(d.projectResults)&&(H(d.projectResults),F(!0))}catch(a){p({isRunning:!1,operationLogs:[],feedbacks:[a instanceof Error?a.message:"执行失败"],runId:""}),H([]),F(!1)}},Z=async()=>{if(A&&o.runId)try{let a=await fetch("/api/uat-git-flow/step",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"execute",runId:o.runId,stepId:A.stepId})}),b=await a.json(),c=Array.isArray(b.operationLogs)?b.operationLogs:[],d=Array.isArray(b.feedbacks)?b.feedbacks:[b.error||"执行失败"];if(!b.success){p(a=>({...a,isRunning:!1,operationLogs:c,feedbacks:d,runId:""})),B(null),D(!1);return}p(a=>({...a,operationLogs:c,feedbacks:d,isRunning:!b.isComplete,runId:b.isComplete?"":a.runId})),b.nextStep?(B(b.nextStep),D(!0)):(B(null),D(!1),Array.isArray(b.projectResults)&&(H(b.projectResults),F(!0)))}catch(a){p(b=>({...b,isRunning:!1,operationLogs:b.operationLogs,feedbacks:[...b.feedbacks,a instanceof Error?a.message:"执行失败"],runId:""})),B(null),D(!1)}},$=async()=>{if(o.runId)try{let a=await fetch("/api/uat-git-flow/abort",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({runId:o.runId})}),b=await a.json();b&&Array.isArray(b.operationLogs)?p(a=>({...a,isRunning:!1,operationLogs:b.operationLogs,feedbacks:Array.isArray(b.feedbacks)?b.feedbacks:a.feedbacks,runId:""})):p(a=>({...a,isRunning:!1,runId:""})),Array.isArray(b.projectResults)&&(H(b.projectResults),F(!0)),B(null),D(!1)}catch(a){p(b=>({...b,feedbacks:[...b.feedbacks,a instanceof Error?a.message:"中断失败"]}))}};return(0,d.jsxs)("div",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold",children:"项目初始化"}),b.isLoading?(0,d.jsx)(g.Button,{disabled:!0,children:"检查中..."}):(0,d.jsx)(g.Button,{onClick:()=>{c(a=>({...a,isInitializing:!0,isCompleted:!1,hasCompleted:!1,globalProgress:0,globalMessage:"正在连接服务器...",projects:{},completionSummary:void 0}));let a=new EventSource("/api/initialize-workspace");a.onmessage=a=>{try{let b=JSON.parse(a.data);L(b)}catch(a){console.error("解析 SSE 消息失败:",a)}},a.onerror=()=>{c(a=>a.hasCompleted?a:{...a,isInitializing:!1,globalMessage:"连接服务器失败,请重试"}),a.close()},a.addEventListener("error",()=>{a.close()})},disabled:b.isInitializing,children:b.isInitializing?"初始化中...":"创建项目空间"})]}),(b.isInitializing||b.isCompleted)&&!R()&&(0,d.jsxs)("div",{className:"mb-6 p-4 bg-gray-50 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2",children:[(0,d.jsx)("span",{className:"text-sm font-medium",children:b.globalMessage}),(0,d.jsxs)("span",{className:"text-sm text-gray-600",children:[b.globalProgress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${b.globalProgress}%`}})})]}),b.completionSummary&&!R()&&(0,d.jsxs)("div",{className:`mb-6 p-4 rounded-lg border ${b.completionSummary.success?"bg-green-50 border-green-200":"bg-yellow-50 border-yellow-200"}`,children:[(0,d.jsx)("h3",{className:"font-semibold mb-2",children:"初始化完成"}),(0,d.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm",children:[(0,d.jsxs)("div",{children:["总项目数: ",b.completionSummary.totalProjects]}),(0,d.jsxs)("div",{className:"text-green-600",children:["成功: ",b.completionSummary.successCount]}),(0,d.jsxs)("div",{className:"text-red-600",children:["失败: ",b.completionSummary.failedCount]}),(0,d.jsxs)("div",{children:["耗时: ",Math.round(b.completionSummary.duration/1e3),"s"]})]})]}),(0,d.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4",children:Object.keys(b.projects).length>0?Object.values(b.projects).map(a=>(0,d.jsxs)("div",{className:`border rounded-lg p-4 ${P(a.status)}`,children:[(0,d.jsxs)("div",{className:"flex justify-between items-start mb-2",children:[(0,d.jsx)("h2",{className:"font-semibold cursor-pointer hover:text-blue-600 transition-colors",onClick:()=>S(a.name),title:"点击进入项目配置",children:a.name}),(0,d.jsx)("span",{className:"text-xs px-2 py-1 rounded-full bg-white",children:Q(a.status)})]}),(0,d.jsx)("p",{className:"text-sm mb-2",children:a.message}),a.status===l.ProjectStatus.CLONING||a.status===l.ProjectStatus.RETRYING?(0,d.jsxs)("div",{className:"mb-2",children:[(0,d.jsx)("div",{className:"w-full bg-white rounded-full h-1",children:(0,d.jsx)("div",{className:"bg-current h-1 rounded-full transition-all duration-300",style:{width:`${a.progress}%`}})}),(0,d.jsxs)("span",{className:"text-xs",children:[a.progress,"%"]})]}):null,a.error&&(0,d.jsx)("p",{className:"text-xs text-red-600 mb-2",children:a.error}),(0,d.jsxs)("div",{className:"space-y-2",children:[a.canRetry&&(0,d.jsx)(g.Button,{size:"sm",variant:"outline",onClick:()=>O(a.name),className:"w-full",children:"重试"}),a.needsCleanup&&a.status===l.ProjectStatus.INCOMPLETE&&(0,d.jsx)(g.Button,{size:"sm",variant:"destructive",onClick:()=>N(a.name),disabled:a.isCleaningUp,className:"w-full",children:a.isCleaningUp?"清理中...":"清理项目"}),(a.status===l.ProjectStatus.EXISTING||a.status===l.ProjectStatus.SUCCESS)&&(0,d.jsx)(h.EditorSplitButton,{onOpen:b=>M(a.name,b),loading:a.isOpening,loadingText:"打开中...",size:"sm",variant:"default",className:"w-full"}),a.logs&&a.logs.length>0&&(0,d.jsx)(g.Button,{size:"sm",variant:"outline",onClick:()=>J(b=>({...b,[a.name]:!b[a.name]})),className:"w-full",children:I[a.name]?"隐藏日志":`查看日志 (${a.logs.length})`})]}),I[a.name]&&a.logs&&a.logs.length>0&&(0,d.jsx)("div",{className:"mt-3 border-t pt-3",children:(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:a.logs.map((a,b)=>(0,d.jsxs)("div",{className:`mb-1 ${"stderr"===a.type?"text-red-400":"progress"===a.type?"text-yellow-400":"text-green-400"}`,children:[(0,d.jsx)("span",{className:"text-gray-500 mr-2",children:new Date(a.timestamp).toLocaleTimeString()}),(0,d.jsxs)("span",{className:"text-blue-400 mr-2",children:["[",a.type,"]"]}),(0,d.jsx)("span",{className:"whitespace-pre-wrap",children:a.content})]},b))})})]},a.name)):(0,d.jsx)("div",{className:"col-span-full text-center text-gray-500 py-8",children:b.isLoading?"正在检查项目状态...":b.isInitializing?"正在加载项目...":'点击"创建项目空间"开始初始化'})}),y&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"UAT上线前 Git 操作流"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>Y(!1),disabled:o.isRunning,children:o.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>Y(!0),disabled:o.isRunning,children:"DRY RUN"}),(0,d.jsx)(g.Button,{variant:"destructive",onClick:$,disabled:!o.isRunning,children:"中断"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"uat-projects",multiple:!0,value:m.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);n(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-create-branch",children:"创建分支名"}),(0,d.jsx)(i.Input,{id:"uat-create-branch",value:m.createBranch,onChange:a=>T("createBranch",a.target.value),placeholder:"例如: release/uat-2026-01"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-base-branch",children:"从 origin 哪个分支创建"}),(0,d.jsx)(i.Input,{id:"uat-base-branch",value:m.baseBranch,onChange:a=>T("baseBranch",a.target.value),placeholder:"例如: develop"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-merge-branch",children:"被合并分支名称"}),(0,d.jsx)(i.Input,{id:"uat-merge-branch",value:m.mergeBranch,onChange:a=>T("mergeBranch",a.target.value),placeholder:"例如: release/candidate"})]})]})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===o.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:o.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===o.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:o.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),y&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量分支合并"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>W(!1),disabled:s.isRunning,children:s.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>W(!0),disabled:s.isRunning,children:"DRY RUN"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-merge-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"batch-merge-projects",multiple:!0,value:q.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);r(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-merge-target-branch",children:"合入分支名称"}),(0,d.jsx)(i.Input,{id:"batch-merge-target-branch",value:q.targetBranch,onChange:a=>U("targetBranch",a.target.value),placeholder:"例如: main"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-merge-source-branch",children:"被合入分支名称"}),(0,d.jsx)(i.Input,{id:"batch-merge-source-branch",value:q.sourceBranch,onChange:a=>U("sourceBranch",a.target.value),placeholder:"例如: release/candidate"})]})]})]}),(s.isRunning||s.progress>0)&&(0,d.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,d.jsxs)("span",{children:["进度: ",s.completedProjects,"/",s.totalProjects,s.currentProject?` \xb7 当前项目: ${s.currentProject}`:""]}),(0,d.jsxs)("span",{children:[s.progress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${s.progress}%`}})})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===s.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:s.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===s.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:s.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),y&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量新建分支"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>X(!1),disabled:w.isRunning,children:w.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>X(!0),disabled:w.isRunning,children:"DRY RUN"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-create-branch-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"batch-create-branch-projects",multiple:!0,value:u.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);v(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-create-branch-name",children:"新分支名称"}),(0,d.jsx)(i.Input,{id:"batch-create-branch-name",value:u.createBranch,onChange:a=>V("createBranch",a.target.value),placeholder:"例如: release/2026-03"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-create-branch-base",children:"来源分支名称"}),(0,d.jsx)(i.Input,{id:"batch-create-branch-base",value:u.baseBranch,onChange:a=>V("baseBranch",a.target.value),placeholder:"例如: main"})]})]})]}),(w.isRunning||w.progress>0)&&(0,d.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,d.jsxs)("span",{children:["进度: ",w.completedProjects,"/",w.totalProjects,w.currentProject?` \xb7 当前项目: ${w.currentProject}`:""]}),(0,d.jsxs)("span",{children:[w.progress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${w.progress}%`}})})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===w.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:w.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===w.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:w.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),(0,d.jsx)(k.Dialog,{open:!1,onOpenChange:a=>{!a&&A&&o.isRunning||D(a)},children:(0,d.jsxs)(k.DialogContent,{showCloseButton:!1,children:[(0,d.jsxs)(k.DialogHeader,{children:[(0,d.jsx)(k.DialogTitle,{children:"确认执行下一步"}),(0,d.jsx)(k.DialogDescription,{children:A?`${A.projectName} \xb7 ${A.description}`:"准备下一步执行"})]}),(0,d.jsx)("div",{className:"rounded-md border bg-gray-50 p-3 text-sm font-mono text-gray-700",children:A?A.command:""}),(0,d.jsxs)(k.DialogFooter,{children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:$,children:"取消执行"}),(0,d.jsx)(g.Button,{onClick:Z,disabled:!A,children:"确认并执行"})]})]})}),(0,d.jsx)(k.Dialog,{open:y&&E,onOpenChange:F,children:(0,d.jsxs)(k.DialogContent,{children:[(0,d.jsxs)(k.DialogHeader,{children:[(0,d.jsx)(k.DialogTitle,{children:"操作结果"}),(0,d.jsx)(k.DialogDescription,{children:"查看所有项目执行结果"})]}),(0,d.jsx)("div",{className:"space-y-2",children:0===G.length?(0,d.jsx)("p",{className:"text-sm text-gray-500",children:"暂无结果"}):G.map(a=>(0,d.jsxs)("div",{className:`rounded-md border px-3 py-2 text-sm ${a.success?"bg-green-50 text-green-700":"bg-red-50 text-red-700"}`,children:[(0,d.jsxs)("div",{className:"flex items-start justify-between",children:[(0,d.jsx)("span",{className:"font-medium",children:a.projectName}),(0,d.jsx)("span",{className:"ml-4 text-right",children:a.success?"成功":a.reason||"失败"})]}),!a.success&&a.rollbackActions&&a.rollbackActions.length>0&&(0,d.jsxs)("div",{className:"mt-2 text-xs text-gray-600",children:[(0,d.jsx)("div",{className:"font-semibold text-gray-700",children:"已回滚操作:"}),(0,d.jsx)("ul",{className:"mt-1 list-disc pl-4",children:a.rollbackActions.map((b,c)=>(0,d.jsx)("li",{children:b},`${a.projectName}-rollback-${c}`))})]})]},a.projectName))}),(0,d.jsx)(k.DialogFooter,{children:(0,d.jsx)(g.Button,{onClick:()=>F(!1),children:"关闭"})})]})})]})}}}};
|
|
1
|
+
module.exports={67450:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({PROJECT_CONFIG_PATH:()=>c,ProjectStatus:()=>f,WORKSPACE_CONFIG:()=>b});var d=a.i(13442),e=a.i(30331);let b={WORKSPACE_ROOT:(0,e.join)((0,d.homedir)(),"Documents","prime-workspace"),GIT_TIMEOUT:3e5,MAX_CONCURRENT_CLONES:Math.max(2,Math.min((0,d.cpus)().length,8)),MAX_RETRY_ATTEMPTS:3},c=(0,e.join)((0,d.homedir)(),".prime-projects.json");var f=function(a){return a.PENDING="pending",a.EXISTING="existing",a.CLONING="cloning",a.SUCCESS="success",a.FAILED="failed",a.RETRYING="retrying",a.INCOMPLETE="incomplete",a}({})}},90250:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});var d=a.i(99559),e=a.i(57560),f=a.i(40490),g=a.i(50923),h=a.i(2031),i=a.i(94688),j=a.i(58413),k=a.i(22529),l=a.i(67450);let b=()=>{let a=(0,f.useRouter)(),[b,c]=(0,e.useState)({isInitializing:!1,isCompleted:!1,isLoading:!0,hasCompleted:!1,globalProgress:0,globalMessage:"正在检查工作空间状态...",projects:{}}),[m,n]=(0,e.useState)({selectedProjects:[],createBranch:"release/",baseBranch:"main",mergeBranch:"feature/"}),[o,p]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],runId:""}),[q,r]=(0,e.useState)({selectedProjects:[],createBranch:"release/",baseBranch:"GWH",mergeBranch:"feature/"}),[s,t]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],runId:""}),[u,v]=(0,e.useState)({selectedProjects:[],targetBranch:"main",sourceBranch:""}),[w,x]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[y,z]=(0,e.useState)({selectedProjects:[],createBranch:"",baseBranch:"main"}),[A,B]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[C,D]=(0,e.useState)({selectedProjects:[],branchName:""}),[E,F]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[G,H]=(0,e.useState)(!1),[I,J]=(0,e.useState)(null),[K,L]=(0,e.useState)(!1),[M,N]=(0,e.useState)(!1),[O,P]=(0,e.useState)([]),[Q,R]=(0,e.useState)({});(0,e.useEffect)(()=>{S()},[]),(0,e.useEffect)(()=>{(async()=>{try{let a=await fetch("/api/admin-status"),b=await a.json();H(!!b?.isAdmin)}catch(a){console.error("获取管理员状态失败:",a),H(!1)}})()},[]);let S=async()=>{try{c(a=>({...a,isLoading:!0,globalMessage:"正在检查工作空间状态..."}));let a=await fetch("/api/check-workspace"),b=await a.json();if(b.success){let a={};b.projects.forEach(b=>{a[b.name]={name:b.name,status:b.status,progress:100*(b.status===l.ProjectStatus.EXISTING),message:b.message,canRetry:!1,needsCleanup:b.needsCleanup||!1}}),c(c=>({...c,isLoading:!1,projects:a,globalMessage:b.message||"检查完成"}))}else c(a=>({...a,isLoading:!1,globalMessage:b.error||"检查工作空间状态失败"}))}catch(a){c(a=>({...a,isLoading:!1,globalMessage:"无法连接到服务器,请刷新页面重试"})),console.error("检查工作空间状态失败:",a)}},T=a=>{switch(a.type){case"initialization":case"workspace_created":case"projects_loaded":if(c(b=>({...b,globalProgress:a.progress||0,globalMessage:a.message||""})),a.projects&&Array.isArray(a.projects)){let b={};a.projects.forEach(a=>{b[a]={name:a,status:l.ProjectStatus.PENDING,progress:0,message:"等待开始...",canRetry:!1}}),c(a=>({...a,projects:b}))}break;case"project_existing":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,globalMessage:a.message??"",projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.EXISTING,message:"项目已存在",progress:100,canRetry:!1}}}))}break;case"project_start":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,globalMessage:a.message??"",projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.CLONING,message:"开始克隆...",progress:0}}}))}break;case"project_progress":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,projects:{...c.projects,[b]:{...c.projects[b],message:a.message??"",progress:Math.min(a.progress??0,100)}}}))}break;case"project_success":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.SUCCESS,message:"克隆成功",progress:100,canRetry:!1}}}))}break;case"project_failed":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.FAILED,message:"克隆失败",error:a.error,canRetry:!0}}}))}break;case"command_log":if(a.projectName&&a.logType&&void 0!==a.content&&a.timestamp){let b=a.projectName,d=a.logType,e=a.content,f=a.timestamp;c(a=>({...a,projects:{...a.projects,[b]:{...a.projects[b],logs:[...a.projects[b]?.logs||[],{type:d,content:e,timestamp:f}].slice(-1e3)}}}))}break;case"completion":c(b=>({...b,isInitializing:!1,isCompleted:!0,hasCompleted:!0,globalProgress:100,globalMessage:a.message??"初始化完成",completionSummary:a.result?{success:a.result.success,totalProjects:a.result.totalProjects,successCount:a.result.successCount,failedCount:a.result.failedCount,duration:a.result.duration}:void 0}));break;case"error":c(b=>({...b,isInitializing:!1,hasCompleted:!0,globalMessage:a.message??"发生错误",globalProgress:a.progress??b.globalProgress}))}},U=async(a,b="cursor")=>{c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isOpening:!0}}}));try{let d=await fetch("/api/open-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:a,editor:b})}),e=await d.json();if(e.success&&e.editorUrl){let a=document.createElement("a");a.href=e.editorUrl,a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)}else console.error("打开项目失败:",e.error);c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isOpening:!1}}}))}catch(b){c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isOpening:!1}}})),console.error("打开项目失败:",b)}},V=async a=>{c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isCleaningUp:!0}}}));try{let b=await fetch("/api/cleanup-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:a})}),d=await b.json();d.success?c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],status:l.ProjectStatus.PENDING,message:"已清理,待克隆",isCleaningUp:!1,needsCleanup:!1}}})):c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isCleaningUp:!1,error:d.error}}}))}catch(b){c(c=>({...c,projects:{...c.projects,[a]:{...c.projects[a],isCleaningUp:!1,error:b instanceof Error?b.message:String(b)}}}))}},W=async a=>{c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],status:l.ProjectStatus.RETRYING,message:"正在重试...",progress:0,canRetry:!1}}}));try{let b=await fetch("/api/retry-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:a})}),d=await b.json();c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],status:d.success?l.ProjectStatus.SUCCESS:l.ProjectStatus.FAILED,message:d.message,error:d.error,progress:d.success?100:b.projects[a].progress,canRetry:!d.success}}}))}catch(b){c(c=>({...c,projects:{...c.projects,[a]:{...c.projects[a],status:l.ProjectStatus.FAILED,message:"重试失败",error:b instanceof Error?b.message:String(b),canRetry:!0}}}))}},X=a=>{switch(a){case l.ProjectStatus.EXISTING:case l.ProjectStatus.SUCCESS:return"text-green-600 bg-green-50 border-green-200";case l.ProjectStatus.FAILED:return"text-red-600 bg-red-50 border-red-200";case l.ProjectStatus.INCOMPLETE:return"text-orange-600 bg-orange-50 border-orange-200";case l.ProjectStatus.CLONING:case l.ProjectStatus.RETRYING:return"text-blue-600 bg-blue-50 border-blue-200";case l.ProjectStatus.PENDING:default:return"text-gray-600 bg-gray-50 border-gray-200"}},Y=a=>{switch(a){case l.ProjectStatus.PENDING:return"待克隆";case l.ProjectStatus.EXISTING:return"已存在";case l.ProjectStatus.CLONING:return"克隆中";case l.ProjectStatus.SUCCESS:return"成功";case l.ProjectStatus.FAILED:return"失败";case l.ProjectStatus.INCOMPLETE:return"不完整";case l.ProjectStatus.RETRYING:return"重试中";default:return"未知"}},Z=()=>{let a=Object.values(b.projects);return a.length>0&&a.every(a=>a.status===l.ProjectStatus.EXISTING)},$=b=>{a.push(`/configuration?project=${encodeURIComponent(b)}`)},_=(a,b)=>{n(c=>({...c,[a]:b}))},aa=(a,b)=>{r(c=>({...c,[a]:b}))},ab=(a,b)=>{v(c=>({...c,[a]:b}))},ac=(a,b)=>{z(c=>({...c,[a]:b}))},ad=a=>{D(b=>({...b,branchName:a}))},ae=async a=>{let b=[];if(0===u.selectedProjects.length&&b.push("请先选择至少一个项目。"),u.targetBranch.trim()||b.push("请填写合入分支名称。"),u.sourceBranch.trim()||b.push("请填写被合入分支名称。"),b.length>0)return void x({isRunning:!1,operationLogs:[],feedbacks:b,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let c=u.selectedProjects.length;x({isRunning:!0,operationLogs:[`开始批量分支合并,共 ${c} 个项目...`],feedbacks:[],progress:0,totalProjects:c,completedProjects:0,currentProject:""});let d=[],e=[];for(let b=0;b<u.selectedProjects.length;b++){let f=u.selectedProjects[b];x(a=>({...a,currentProject:f,completedProjects:b,progress:Math.round(b/c*100),operationLogs:[...a.operationLogs,`[进度] ${b+1}/${c} 开始处理项目 ${f}`]}));try{let b=await fetch("/api/admin-git-batch-merge",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:[f],targetBranch:u.targetBranch.trim(),sourceBranch:u.sourceBranch.trim(),dryRun:a})}),c=await b.json(),g=Array.isArray(c.operationLogs)?c.operationLogs:[],h=Array.isArray(c.feedbacks)?c.feedbacks:[c.error||"执行失败"];x(a=>({...a,operationLogs:[...a.operationLogs,...g],feedbacks:[...a.feedbacks,...h]})),e.push(...h),Array.isArray(c.projectResults)&&d.push(...c.projectResults)}catch(b){let a=b instanceof Error?b.message:"执行失败";x(b=>({...b,operationLogs:[...b.operationLogs,`[${f}] 请求失败: ${a}`],feedbacks:[...b.feedbacks,`[${f}] ${a}`]})),e.push(`[${f}] ${a}`),d.push({projectName:f,success:!1,reason:a})}}x(a=>({...a,isRunning:!1,progress:100,completedProjects:c,currentProject:"",operationLogs:[...a.operationLogs,"批量分支合并执行完成。"],feedbacks:e.length>0?e:a.feedbacks})),d.length>0?(P(d),N(!0)):(P([]),N(!1))},af=async a=>{let b=[];if(0===y.selectedProjects.length&&b.push("请先选择至少一个项目。"),y.createBranch.trim()||b.push("请填写新分支名称。"),y.baseBranch.trim()||b.push("请填写来源分支名称。"),b.length>0)return void B({isRunning:!1,operationLogs:[],feedbacks:b,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let c=y.selectedProjects.length;B({isRunning:!0,operationLogs:[`开始批量新建分支,共 ${c} 个项目...`],feedbacks:[],progress:0,totalProjects:c,completedProjects:0,currentProject:""});let d=[],e=[];for(let b=0;b<y.selectedProjects.length;b++){let f=y.selectedProjects[b];B(a=>({...a,currentProject:f,completedProjects:b,progress:Math.round(b/c*100),operationLogs:[...a.operationLogs,`[进度] ${b+1}/${c} 开始处理项目 ${f}`]}));try{let b=await fetch("/api/admin-git-batch-create-branch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:[f],createBranch:y.createBranch.trim(),baseBranch:y.baseBranch.trim(),dryRun:a})}),c=await b.json(),g=Array.isArray(c.operationLogs)?c.operationLogs:[],h=Array.isArray(c.feedbacks)?c.feedbacks:[c.error||"执行失败"];B(a=>({...a,operationLogs:[...a.operationLogs,...g],feedbacks:[...a.feedbacks,...h]})),e.push(...h),Array.isArray(c.projectResults)&&d.push(...c.projectResults)}catch(b){let a=b instanceof Error?b.message:"执行失败";B(b=>({...b,operationLogs:[...b.operationLogs,`[${f}] 请求失败: ${a}`],feedbacks:[...b.feedbacks,`[${f}] ${a}`]})),e.push(`[${f}] ${a}`),d.push({projectName:f,success:!1,reason:a})}}B(a=>({...a,isRunning:!1,progress:100,completedProjects:c,currentProject:"",operationLogs:[...a.operationLogs,"批量新建分支执行完成。"],feedbacks:e.length>0?e:a.feedbacks})),d.length>0?(P(d),N(!0)):(P([]),N(!1))},ag=async a=>{let b=[];if(0===C.selectedProjects.length&&b.push("请先选择至少一个项目。"),C.branchName.trim()||b.push("请填写远端分支名称。"),b.length>0)return void F({isRunning:!1,operationLogs:[],feedbacks:b,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let c=C.selectedProjects.length;F({isRunning:!0,operationLogs:[`开始批量删除远端分支,共 ${c} 个项目...`],feedbacks:[],progress:0,totalProjects:c,completedProjects:0,currentProject:""});let d=[],e=[];for(let b=0;b<C.selectedProjects.length;b++){let f=C.selectedProjects[b];F(a=>({...a,currentProject:f,completedProjects:b,progress:Math.round(b/c*100),operationLogs:[...a.operationLogs,`[进度] ${b+1}/${c} 开始处理项目 ${f}`]}));try{let b=await fetch("/api/admin-git-batch-delete-branch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:[f],branchName:C.branchName.trim(),dryRun:a})}),c=await b.json(),g=Array.isArray(c.operationLogs)?c.operationLogs:[],h=Array.isArray(c.feedbacks)?c.feedbacks:[c.error||"执行失败"];F(a=>({...a,operationLogs:[...a.operationLogs,...g],feedbacks:[...a.feedbacks,...h]})),e.push(...h),Array.isArray(c.projectResults)&&d.push(...c.projectResults)}catch(b){let a=b instanceof Error?b.message:"执行失败";F(b=>({...b,operationLogs:[...b.operationLogs,`[${f}] 请求失败: ${a}`],feedbacks:[...b.feedbacks,`[${f}] ${a}`]})),e.push(`[${f}] ${a}`),d.push({projectName:f,success:!1,reason:a})}}F(a=>({...a,isRunning:!1,progress:100,completedProjects:c,currentProject:"",operationLogs:[...a.operationLogs,"批量删除远端分支执行完成。"],feedbacks:e.length>0?e:a.feedbacks})),d.length>0?(P(d),N(!0)):(P([]),N(!1))},ah=async a=>{let b=[];if(0===m.selectedProjects.length&&b.push("请先选择至少一个项目。"),m.createBranch.trim()||b.push("请填写创建分支名。"),m.baseBranch.trim()||b.push("请填写从 origin 哪个分支创建。"),m.mergeBranch.trim()||b.push("请填写被合并分支名称。"),b.length>0)return void p({isRunning:!1,operationLogs:[],feedbacks:b,runId:""});let c=`uat-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;p({isRunning:!0,operationLogs:[],feedbacks:[],runId:c});try{let b=await fetch("/api/uat-git-flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:m.selectedProjects,createBranch:m.createBranch.trim(),baseBranch:"main",mergeBranch:m.mergeBranch.trim(),dryRun:a,runId:c})}),d=await b.json();p({isRunning:!1,operationLogs:Array.isArray(d.operationLogs)?d.operationLogs:[],feedbacks:Array.isArray(d.feedbacks)?d.feedbacks:[d.error||"执行失败"],runId:""}),Array.isArray(d.projectResults)&&(P(d.projectResults),N(!0))}catch(a){p({isRunning:!1,operationLogs:[],feedbacks:[a instanceof Error?a.message:"执行失败"],runId:""}),P([]),N(!1)}},ai=async a=>{let b=[];if(0===q.selectedProjects.length&&b.push("请先选择至少一个项目。"),q.createBranch.trim()||b.push("请填写创建分支名。"),q.baseBranch.trim()||b.push("请填写从 origin 哪个分支创建。"),q.mergeBranch.trim()||b.push("请填写被合并分支名称。"),b.length>0)return void t({isRunning:!1,operationLogs:[],feedbacks:b,runId:""});let c=`gwh-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;t({isRunning:!0,operationLogs:[],feedbacks:[],runId:c});try{let b=await fetch("/api/gwh-git-flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:q.selectedProjects,createBranch:q.createBranch.trim(),baseBranch:"GWH",mergeBranch:q.mergeBranch.trim(),dryRun:a,runId:c})}),d=await b.json();t({isRunning:!1,operationLogs:Array.isArray(d.operationLogs)?d.operationLogs:[],feedbacks:Array.isArray(d.feedbacks)?d.feedbacks:[d.error||"执行失败"],runId:""}),Array.isArray(d.projectResults)&&(P(d.projectResults),N(!0))}catch(a){t({isRunning:!1,operationLogs:[],feedbacks:[a instanceof Error?a.message:"执行失败"],runId:""}),P([]),N(!1)}},aj=async()=>{if(I&&o.runId)try{let a=await fetch("/api/uat-git-flow/step",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"execute",runId:o.runId,stepId:I.stepId})}),b=await a.json(),c=Array.isArray(b.operationLogs)?b.operationLogs:[],d=Array.isArray(b.feedbacks)?b.feedbacks:[b.error||"执行失败"];if(!b.success){p(a=>({...a,isRunning:!1,operationLogs:c,feedbacks:d,runId:""})),J(null),L(!1);return}p(a=>({...a,operationLogs:c,feedbacks:d,isRunning:!b.isComplete,runId:b.isComplete?"":a.runId})),b.nextStep?(J(b.nextStep),L(!0)):(J(null),L(!1),Array.isArray(b.projectResults)&&(P(b.projectResults),N(!0)))}catch(a){p(b=>({...b,isRunning:!1,operationLogs:b.operationLogs,feedbacks:[...b.feedbacks,a instanceof Error?a.message:"执行失败"],runId:""})),J(null),L(!1)}},ak=async()=>{if(o.runId)try{let a=await fetch("/api/uat-git-flow/abort",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({runId:o.runId})}),b=await a.json();b&&Array.isArray(b.operationLogs)?p(a=>({...a,isRunning:!1,operationLogs:b.operationLogs,feedbacks:Array.isArray(b.feedbacks)?b.feedbacks:a.feedbacks,runId:""})):p(a=>({...a,isRunning:!1,runId:""})),Array.isArray(b.projectResults)&&(P(b.projectResults),N(!0)),J(null),L(!1)}catch(a){p(b=>({...b,feedbacks:[...b.feedbacks,a instanceof Error?a.message:"中断失败"]}))}},al=async()=>{if(s.runId)try{let a=await fetch("/api/gwh-git-flow/abort",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({runId:s.runId})}),b=await a.json();b&&Array.isArray(b.operationLogs)?t(a=>({...a,isRunning:!1,operationLogs:b.operationLogs,feedbacks:Array.isArray(b.feedbacks)?b.feedbacks:a.feedbacks,runId:""})):t(a=>({...a,isRunning:!1,runId:""})),Array.isArray(b.projectResults)&&(P(b.projectResults),N(!0))}catch(a){t(b=>({...b,feedbacks:[...b.feedbacks,a instanceof Error?a.message:"中断失败"]}))}};return(0,d.jsxs)("div",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold",children:"项目初始化"}),b.isLoading?(0,d.jsx)(g.Button,{disabled:!0,children:"检查中..."}):(0,d.jsx)(g.Button,{onClick:()=>{c(a=>({...a,isInitializing:!0,isCompleted:!1,hasCompleted:!1,globalProgress:0,globalMessage:"正在连接服务器...",projects:{},completionSummary:void 0}));let a=new EventSource("/api/initialize-workspace");a.onmessage=a=>{try{let b=JSON.parse(a.data);T(b)}catch(a){console.error("解析 SSE 消息失败:",a)}},a.onerror=()=>{c(a=>a.hasCompleted?a:{...a,isInitializing:!1,globalMessage:"连接服务器失败,请重试"}),a.close()},a.addEventListener("error",()=>{a.close()})},disabled:b.isInitializing,children:b.isInitializing?"初始化中...":"创建项目空间"})]}),(b.isInitializing||b.isCompleted)&&!Z()&&(0,d.jsxs)("div",{className:"mb-6 p-4 bg-gray-50 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2",children:[(0,d.jsx)("span",{className:"text-sm font-medium",children:b.globalMessage}),(0,d.jsxs)("span",{className:"text-sm text-gray-600",children:[b.globalProgress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${b.globalProgress}%`}})})]}),b.completionSummary&&!Z()&&(0,d.jsxs)("div",{className:`mb-6 p-4 rounded-lg border ${b.completionSummary.success?"bg-green-50 border-green-200":"bg-yellow-50 border-yellow-200"}`,children:[(0,d.jsx)("h3",{className:"font-semibold mb-2",children:"初始化完成"}),(0,d.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm",children:[(0,d.jsxs)("div",{children:["总项目数: ",b.completionSummary.totalProjects]}),(0,d.jsxs)("div",{className:"text-green-600",children:["成功: ",b.completionSummary.successCount]}),(0,d.jsxs)("div",{className:"text-red-600",children:["失败: ",b.completionSummary.failedCount]}),(0,d.jsxs)("div",{children:["耗时: ",Math.round(b.completionSummary.duration/1e3),"s"]})]})]}),(0,d.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4",children:Object.keys(b.projects).length>0?Object.values(b.projects).map(a=>(0,d.jsxs)("div",{className:`border rounded-lg p-4 ${X(a.status)}`,children:[(0,d.jsxs)("div",{className:"flex justify-between items-start mb-2",children:[(0,d.jsx)("h2",{className:"font-semibold cursor-pointer hover:text-blue-600 transition-colors",onClick:()=>$(a.name),title:"点击进入项目配置",children:a.name}),(0,d.jsx)("span",{className:"text-xs px-2 py-1 rounded-full bg-white",children:Y(a.status)})]}),(0,d.jsx)("p",{className:"text-sm mb-2",children:a.message}),a.status===l.ProjectStatus.CLONING||a.status===l.ProjectStatus.RETRYING?(0,d.jsxs)("div",{className:"mb-2",children:[(0,d.jsx)("div",{className:"w-full bg-white rounded-full h-1",children:(0,d.jsx)("div",{className:"bg-current h-1 rounded-full transition-all duration-300",style:{width:`${a.progress}%`}})}),(0,d.jsxs)("span",{className:"text-xs",children:[a.progress,"%"]})]}):null,a.error&&(0,d.jsx)("p",{className:"text-xs text-red-600 mb-2",children:a.error}),(0,d.jsxs)("div",{className:"space-y-2",children:[a.canRetry&&(0,d.jsx)(g.Button,{size:"sm",variant:"outline",onClick:()=>W(a.name),className:"w-full",children:"重试"}),a.needsCleanup&&a.status===l.ProjectStatus.INCOMPLETE&&(0,d.jsx)(g.Button,{size:"sm",variant:"destructive",onClick:()=>V(a.name),disabled:a.isCleaningUp,className:"w-full",children:a.isCleaningUp?"清理中...":"清理项目"}),(a.status===l.ProjectStatus.EXISTING||a.status===l.ProjectStatus.SUCCESS)&&(0,d.jsx)(h.EditorSplitButton,{onOpen:b=>U(a.name,b),loading:a.isOpening,loadingText:"打开中...",size:"sm",variant:"default",className:"w-full"}),a.logs&&a.logs.length>0&&(0,d.jsx)(g.Button,{size:"sm",variant:"outline",onClick:()=>R(b=>({...b,[a.name]:!b[a.name]})),className:"w-full",children:Q[a.name]?"隐藏日志":`查看日志 (${a.logs.length})`})]}),Q[a.name]&&a.logs&&a.logs.length>0&&(0,d.jsx)("div",{className:"mt-3 border-t pt-3",children:(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:a.logs.map((a,b)=>(0,d.jsxs)("div",{className:`mb-1 ${"stderr"===a.type?"text-red-400":"progress"===a.type?"text-yellow-400":"text-green-400"}`,children:[(0,d.jsx)("span",{className:"text-gray-500 mr-2",children:new Date(a.timestamp).toLocaleTimeString()}),(0,d.jsxs)("span",{className:"text-blue-400 mr-2",children:["[",a.type,"]"]}),(0,d.jsx)("span",{className:"whitespace-pre-wrap",children:a.content})]},b))})})]},a.name)):(0,d.jsx)("div",{className:"col-span-full text-center text-gray-500 py-8",children:b.isLoading?"正在检查项目状态...":b.isInitializing?"正在加载项目...":'点击"创建项目空间"开始初始化'})}),G&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"UAT上线前 Git 操作流"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>ah(!1),disabled:o.isRunning,children:o.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>ah(!0),disabled:o.isRunning,children:"DRY RUN"}),(0,d.jsx)(g.Button,{variant:"destructive",onClick:ak,disabled:!o.isRunning,children:"中断"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"uat-projects",multiple:!0,value:m.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);n(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-create-branch",children:"创建分支名"}),(0,d.jsx)(i.Input,{id:"uat-create-branch",value:m.createBranch,onChange:a=>_("createBranch",a.target.value),placeholder:"例如: release/uat-2026-01"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-base-branch",children:"从 origin 哪个分支创建(固定)"}),(0,d.jsx)(i.Input,{id:"uat-base-branch",value:m.baseBranch,disabled:!0,placeholder:"main"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-merge-branch",children:"被合并分支名称"}),(0,d.jsx)(i.Input,{id:"uat-merge-branch",value:m.mergeBranch,onChange:a=>_("mergeBranch",a.target.value),placeholder:"例如: feature/xxx"})]})]})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===o.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:o.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===o.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:o.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),G&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"武汉协和版本上线前 Git 操作流"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>ai(!1),disabled:s.isRunning,children:s.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>ai(!0),disabled:s.isRunning,children:"DRY RUN"}),(0,d.jsx)(g.Button,{variant:"destructive",onClick:al,disabled:!s.isRunning,children:"中断"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"gwh-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"gwh-projects",multiple:!0,value:q.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);r(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"gwh-create-branch",children:"创建分支名"}),(0,d.jsx)(i.Input,{id:"gwh-create-branch",value:q.createBranch,onChange:a=>aa("createBranch",a.target.value),placeholder:"例如: release/whxh-2026-03"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"gwh-base-branch",children:"从 origin 哪个分支创建(固定)"}),(0,d.jsx)(i.Input,{id:"gwh-base-branch",value:q.baseBranch,disabled:!0,placeholder:"GWH"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"gwh-merge-branch",children:"被合并分支名称"}),(0,d.jsx)(i.Input,{id:"gwh-merge-branch",value:q.mergeBranch,onChange:a=>aa("mergeBranch",a.target.value),placeholder:"例如: feature/xxx"})]})]})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===s.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:s.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===s.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:s.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),G&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量分支合并"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>ae(!1),disabled:w.isRunning,children:w.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>ae(!0),disabled:w.isRunning,children:"DRY RUN"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-merge-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"batch-merge-projects",multiple:!0,value:u.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);v(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-merge-target-branch",children:"合入分支名称"}),(0,d.jsx)(i.Input,{id:"batch-merge-target-branch",value:u.targetBranch,onChange:a=>ab("targetBranch",a.target.value),placeholder:"例如: main"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-merge-source-branch",children:"被合入分支名称"}),(0,d.jsx)(i.Input,{id:"batch-merge-source-branch",value:u.sourceBranch,onChange:a=>ab("sourceBranch",a.target.value),placeholder:"例如: release/candidate"})]})]})]}),(w.isRunning||w.progress>0)&&(0,d.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,d.jsxs)("span",{children:["进度: ",w.completedProjects,"/",w.totalProjects,w.currentProject?` \xb7 当前项目: ${w.currentProject}`:""]}),(0,d.jsxs)("span",{children:[w.progress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${w.progress}%`}})})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===w.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:w.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===w.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:w.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),G&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量新建分支"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>af(!1),disabled:A.isRunning,children:A.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>af(!0),disabled:A.isRunning,children:"DRY RUN"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-create-branch-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"batch-create-branch-projects",multiple:!0,value:y.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);z(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-create-branch-name",children:"新分支名称"}),(0,d.jsx)(i.Input,{id:"batch-create-branch-name",value:y.createBranch,onChange:a=>ac("createBranch",a.target.value),placeholder:"例如: release/2026-03"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-create-branch-base",children:"来源分支名称"}),(0,d.jsx)(i.Input,{id:"batch-create-branch-base",value:y.baseBranch,onChange:a=>ac("baseBranch",a.target.value),placeholder:"例如: main"})]})]})]}),(A.isRunning||A.progress>0)&&(0,d.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,d.jsxs)("span",{children:["进度: ",A.completedProjects,"/",A.totalProjects,A.currentProject?` \xb7 当前项目: ${A.currentProject}`:""]}),(0,d.jsxs)("span",{children:[A.progress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${A.progress}%`}})})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===A.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:A.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===A.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:A.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),G&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量删除远端分支"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>ag(!1),disabled:E.isRunning,children:E.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>ag(!0),disabled:E.isRunning,children:"DRY RUN"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-delete-branch-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"batch-delete-branch-projects",multiple:!0,value:C.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);D(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsx)("div",{className:"grid gap-4",children:(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-delete-branch-name",children:"远端分支名称"}),(0,d.jsx)(i.Input,{id:"batch-delete-branch-name",value:C.branchName,onChange:a=>ad(a.target.value),placeholder:"例如: release/2026-03"})]})})]}),(E.isRunning||E.progress>0)&&(0,d.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,d.jsxs)("span",{children:["进度: ",E.completedProjects,"/",E.totalProjects,E.currentProject?` \xb7 当前项目: ${E.currentProject}`:""]}),(0,d.jsxs)("span",{children:[E.progress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${E.progress}%`}})})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===E.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:E.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===E.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:E.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),(0,d.jsx)(k.Dialog,{open:!1,onOpenChange:a=>{!a&&I&&o.isRunning||L(a)},children:(0,d.jsxs)(k.DialogContent,{showCloseButton:!1,children:[(0,d.jsxs)(k.DialogHeader,{children:[(0,d.jsx)(k.DialogTitle,{children:"确认执行下一步"}),(0,d.jsx)(k.DialogDescription,{children:I?`${I.projectName} \xb7 ${I.description}`:"准备下一步执行"})]}),(0,d.jsx)("div",{className:"rounded-md border bg-gray-50 p-3 text-sm font-mono text-gray-700",children:I?I.command:""}),(0,d.jsxs)(k.DialogFooter,{children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:ak,children:"取消执行"}),(0,d.jsx)(g.Button,{onClick:aj,disabled:!I,children:"确认并执行"})]})]})}),(0,d.jsx)(k.Dialog,{open:G&&M,onOpenChange:N,children:(0,d.jsxs)(k.DialogContent,{children:[(0,d.jsxs)(k.DialogHeader,{children:[(0,d.jsx)(k.DialogTitle,{children:"操作结果"}),(0,d.jsx)(k.DialogDescription,{children:"查看所有项目执行结果"})]}),(0,d.jsx)("div",{className:"space-y-2",children:0===O.length?(0,d.jsx)("p",{className:"text-sm text-gray-500",children:"暂无结果"}):O.map(a=>(0,d.jsxs)("div",{className:`rounded-md border px-3 py-2 text-sm ${a.success?"bg-green-50 text-green-700":"bg-red-50 text-red-700"}`,children:[(0,d.jsxs)("div",{className:"flex items-start justify-between",children:[(0,d.jsx)("span",{className:"font-medium",children:a.projectName}),(0,d.jsx)("span",{className:"ml-4 text-right",children:a.success?"成功":a.reason||"失败"})]}),!a.success&&a.rollbackActions&&a.rollbackActions.length>0&&(0,d.jsxs)("div",{className:"mt-2 text-xs text-gray-600",children:[(0,d.jsx)("div",{className:"font-semibold text-gray-700",children:"已回滚操作:"}),(0,d.jsx)("ul",{className:"mt-1 list-disc pl-4",children:a.rollbackActions.map((b,c)=>(0,d.jsx)("li",{children:b},`${a.projectName}-rollback-${c}`))})]})]},a.projectName))}),(0,d.jsx)(k.DialogFooter,{children:(0,d.jsx)(g.Button,{onClick:()=>N(!1),children:"关闭"})})]})})]})}}}};
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=packages_server_src_7cef6dbd._.js.map
|