prime-dev-cli 1.0.19 → 1.0.21
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 +2 -0
- package/dist/server/.next/build-manifest.json +6 -6
- package/dist/server/.next/cache/.rscinfo +1 -1
- 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-create-branch/route/app-build-manifest.json +10 -0
- package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route/app-paths-manifest.json +3 -0
- package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route/build-manifest.json +16 -0
- package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route/next-font-manifest.json +6 -0
- package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route/react-loadable-manifest.json +1 -0
- package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route/server-reference-manifest.json +4 -0
- package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route.js +8 -0
- package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route.js.map +5 -0
- package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route.js.nft.json +1 -0
- package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route_client-reference-manifest.js +2 -0
- package/dist/server/.next/server/app/api/admin-git-batch-merge/route/app-build-manifest.json +10 -0
- package/dist/server/.next/server/app/api/admin-git-batch-merge/route/app-paths-manifest.json +3 -0
- package/dist/server/.next/server/app/api/admin-git-batch-merge/route/build-manifest.json +16 -0
- package/dist/server/.next/server/app/api/admin-git-batch-merge/route/next-font-manifest.json +6 -0
- package/dist/server/.next/server/app/api/admin-git-batch-merge/route/react-loadable-manifest.json +1 -0
- package/dist/server/.next/server/app/api/admin-git-batch-merge/route/server-reference-manifest.json +4 -0
- package/dist/server/.next/server/app/api/admin-git-batch-merge/route.js +8 -0
- package/dist/server/.next/server/app/api/admin-git-batch-merge/route.js.map +5 -0
- package/dist/server/.next/server/app/api/admin-git-batch-merge/route.js.nft.json +1 -0
- package/dist/server/.next/server/app/api/admin-git-batch-merge/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 +2 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__0879b2d6._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__0d56f35b._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__0e8a08fc._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__1e792460._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__2a29597f._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__2a78acef._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__2f8b52da._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__2ffbf0d3._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__452b5f9c._.js +13 -13
- package/dist/server/.next/server/chunks/[root-of-the-server]__452b5f9c._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__4ec3205b._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__4fd52ac1._.js +13 -13
- package/dist/server/.next/server/chunks/[root-of-the-server]__4fd52ac1._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__5c9f62f9._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__8637b7f1._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__8a8561ea._.js +16 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__8a8561ea._.js.map +1 -0
- package/dist/server/.next/server/chunks/{[root-of-the-server]__4ab3dd83._.js → [root-of-the-server]__978c4dda._.js} +14 -14
- package/dist/server/.next/server/chunks/[root-of-the-server]__978c4dda._.js.map +1 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__a6fbefc6._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__a74239fc._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__aaa3fe74._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__b176e8df._.js +14 -14
- package/dist/server/.next/server/chunks/[root-of-the-server]__b176e8df._.js.map +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__6cbd50e9._.js → [root-of-the-server]__bc84f5d7._.js} +14 -14
- package/dist/server/.next/server/chunks/[root-of-the-server]__bc84f5d7._.js.map +1 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__c18498ef._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__dda45cac._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__de18efbd._.js +13 -13
- package/dist/server/.next/server/chunks/[root-of-the-server]__de18efbd._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__e0b7050d._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__ec681197._.js.map +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__f111df8e._.js +16 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__f111df8e._.js.map +1 -0
- 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/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/server/server-reference-manifest.js +1 -1
- package/dist/server/.next/server/server-reference-manifest.json +1 -1
- package/dist/server/.next/static/chunks/{2602bf706e977560.js.map → 263bfd9c535a6eda.js.map} +1 -1
- package/dist/server/.next/static/chunks/{1091ba2f3c451a47.js → 2693a47bbc4fc75c.js} +1 -1
- package/dist/server/.next/static/chunks/{1aa036ed62a506c8.js → 352f266165580042.js} +2 -2
- package/dist/server/.next/static/chunks/67cde2756fdf3a91.js +3 -0
- package/dist/server/.next/static/chunks/{1154a499e8e3867b.js → ac48e758a0b74c2b.js} +1 -1
- package/dist/server/.next/static/chunks/c198f02ea70fda25.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 +1 -1
- package/package.json +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__4ab3dd83._.js.map +0 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__6cbd50e9._.js.map +0 -1
- package/dist/server/.next/static/chunks/99154153690ad580.js.map +0 -1
- package/dist/server/.next/static/chunks/9bc1bbb3fe6e5eb3.js +0 -3
- /package/dist/server/.next/static/{tz_bf3MbzRijrx8XdXPWA → TxLJ_6S5QAvwM1pkwjUrZ}/_buildManifest.js +0 -0
- /package/dist/server/.next/static/{tz_bf3MbzRijrx8XdXPWA → TxLJ_6S5QAvwM1pkwjUrZ}/_clientMiddlewareManifest.json +0 -0
- /package/dist/server/.next/static/{tz_bf3MbzRijrx8XdXPWA → TxLJ_6S5QAvwM1pkwjUrZ}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(globalThis.TURBOPACK=globalThis.TURBOPACK||[]).push(["object"==typeof document?document.currentScript:void 0,{86442:function(e){var s,{g:r,__dirname:t,m:a,e:n}=e;"undefined"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=t+"/"),(s={}).endianness=function(){return"LE"},s.hostname=function(){return"undefined"!=typeof location?location.hostname:""},s.loadavg=function(){return[]},s.uptime=function(){return 0},s.freemem=function(){return Number.MAX_VALUE},s.totalmem=function(){return Number.MAX_VALUE},s.cpus=function(){return[]},s.type=function(){return"Browser"},s.release=function(){return"undefined"!=typeof navigator?navigator.appVersion:""},s.networkInterfaces=s.getNetworkInterfaces=function(){return{}},s.arch=function(){return"javascript"},s.platform=function(){return"browser"},s.tmpdir=s.tmpDir=function(){return"/tmp"},s.EOL="\n",s.homedir=function(){return"/"},a.exports=s},87733:function(e){var{g:s,__dirname:r,m:t,e:a}=e;!function(){"use strict";var e={114:function(e){function s(e){if("string"!=typeof e)throw TypeError("Path must be a string. Received "+JSON.stringify(e))}function r(e,s){for(var r,t="",a=0,n=-1,o=0,c=0;c<=e.length;++c){if(c<e.length)r=e.charCodeAt(c);else if(47===r)break;else r=47;if(47===r){if(n===c-1||1===o);else if(n!==c-1&&2===o){if(t.length<2||2!==a||46!==t.charCodeAt(t.length-1)||46!==t.charCodeAt(t.length-2)){if(t.length>2){var i=t.lastIndexOf("/");if(i!==t.length-1){-1===i?(t="",a=0):a=(t=t.slice(0,i)).length-1-t.lastIndexOf("/"),n=c,o=0;continue}}else if(2===t.length||1===t.length){t="",a=0,n=c,o=0;continue}}s&&(t.length>0?t+="/..":t="..",a=2)}else t.length>0?t+="/"+e.slice(n+1,c):t=e.slice(n+1,c),a=c-n-1;n=c,o=0}else 46===r&&-1!==o?++o:o=-1}return t}var t={resolve:function(){for(var e,t,a="",n=!1,o=arguments.length-1;o>=-1&&!n;o--)o>=0?t=arguments[o]:(void 0===e&&(e=""),t=e),s(t),0!==t.length&&(a=t+"/"+a,n=47===t.charCodeAt(0));if(a=r(a,!n),n)if(a.length>0)return"/"+a;else return"/";return a.length>0?a:"."},normalize:function(e){if(s(e),0===e.length)return".";var t=47===e.charCodeAt(0),a=47===e.charCodeAt(e.length-1);return(0!==(e=r(e,!t)).length||t||(e="."),e.length>0&&a&&(e+="/"),t)?"/"+e:e},isAbsolute:function(e){return s(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0==arguments.length)return".";for(var e,r=0;r<arguments.length;++r){var a=arguments[r];s(a),a.length>0&&(void 0===e?e=a:e+="/"+a)}return void 0===e?".":t.normalize(e)},relative:function(e,r){if(s(e),s(r),e===r||(e=t.resolve(e))===(r=t.resolve(r)))return"";for(var a=1;a<e.length&&47===e.charCodeAt(a);++a);for(var n=e.length,o=n-a,c=1;c<r.length&&47===r.charCodeAt(c);++c);for(var i=r.length-c,l=o<i?o:i,d=-1,g=0;g<=l;++g){if(g===l){if(i>l){if(47===r.charCodeAt(c+g))return r.slice(c+g+1);else if(0===g)return r.slice(c+g)}else o>l&&(47===e.charCodeAt(a+g)?d=g:0===g&&(d=0));break}var p=e.charCodeAt(a+g);if(p!==r.charCodeAt(c+g))break;47===p&&(d=g)}var u="";for(g=a+d+1;g<=n;++g)(g===n||47===e.charCodeAt(g))&&(0===u.length?u+="..":u+="/..");return u.length>0?u+r.slice(c+d):(c+=d,47===r.charCodeAt(c)&&++c,r.slice(c))},_makeLong:function(e){return e},dirname:function(e){if(s(e),0===e.length)return".";for(var r=e.charCodeAt(0),t=47===r,a=-1,n=!0,o=e.length-1;o>=1;--o)if(47===(r=e.charCodeAt(o))){if(!n){a=o;break}}else n=!1;return -1===a?t?"/":".":t&&1===a?"//":e.slice(0,a)},basename:function(e,r){if(void 0!==r&&"string"!=typeof r)throw TypeError('"ext" argument must be a string');s(e);var t,a=0,n=-1,o=!0;if(void 0!==r&&r.length>0&&r.length<=e.length){if(r.length===e.length&&r===e)return"";var c=r.length-1,i=-1;for(t=e.length-1;t>=0;--t){var l=e.charCodeAt(t);if(47===l){if(!o){a=t+1;break}}else -1===i&&(o=!1,i=t+1),c>=0&&(l===r.charCodeAt(c)?-1==--c&&(n=t):(c=-1,n=i))}return a===n?n=i:-1===n&&(n=e.length),e.slice(a,n)}for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!o){a=t+1;break}}else -1===n&&(o=!1,n=t+1);return -1===n?"":e.slice(a,n)},extname:function(e){s(e);for(var r=-1,t=0,a=-1,n=!0,o=0,c=e.length-1;c>=0;--c){var i=e.charCodeAt(c);if(47===i){if(!n){t=c+1;break}continue}-1===a&&(n=!1,a=c+1),46===i?-1===r?r=c:1!==o&&(o=1):-1!==r&&(o=-1)}return -1===r||-1===a||0===o||1===o&&r===a-1&&r===t+1?"":e.slice(r,a)},format:function(e){var s,r;if(null===e||"object"!=typeof e)throw TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return s=e.dir||e.root,r=e.base||(e.name||"")+(e.ext||""),s?s===e.root?s+r:s+"/"+r:r},parse:function(e){s(e);var r,t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;var a=e.charCodeAt(0),n=47===a;n?(t.root="/",r=1):r=0;for(var o=-1,c=0,i=-1,l=!0,d=e.length-1,g=0;d>=r;--d){if(47===(a=e.charCodeAt(d))){if(!l){c=d+1;break}continue}-1===i&&(l=!1,i=d+1),46===a?-1===o?o=d:1!==g&&(g=1):-1!==o&&(g=-1)}return -1===o||-1===i||0===g||1===g&&o===i-1&&o===c+1?-1!==i&&(0===c&&n?t.base=t.name=e.slice(1,i):t.base=t.name=e.slice(c,i)):(0===c&&n?(t.name=e.slice(1,o),t.base=e.slice(1,i)):(t.name=e.slice(c,o),t.base=e.slice(c,i)),t.ext=e.slice(o,i)),c>0?t.dir=e.slice(0,c-1):n&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};t.posix=t,e.exports=t}},s={};function a(r){var t=s[r];if(void 0!==t)return t.exports;var n=s[r]={exports:{}},o=!0;try{e[r](n,n.exports,a),o=!1}finally{o&&delete s[r]}return n.exports}a.ab=r+"/",t.exports=a(114)}()},7647:e=>{"use strict";var{g:s,__dirname:r}=e;{e.s({PROJECT_CONFIG_PATH:()=>r,ProjectStatus:()=>n,WORKSPACE_CONFIG:()=>s});var t=e.i(86442),a=e.i(87733);let s={WORKSPACE_ROOT:(0,a.join)((0,t.homedir)(),"Documents","prime-workspace"),GIT_TIMEOUT:3e5,MAX_CONCURRENT_CLONES:Math.max(2,Math.min((0,t.cpus)().length,8)),MAX_RETRY_ATTEMPTS:3},r=(0,a.join)((0,t.homedir)(),".prime-projects.json");var n=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e.INCOMPLETE="incomplete",e}({})}},9993:e=>{"use strict";var{g:s,__dirname:r}=e;{e.s({default:()=>s});var t=e.i(20393),a=e.i(19886),n=e.i(42152),o=e.i(86871),c=e.i(75777),i=e.i(70599),l=e.i(80226),d=e.i(19579),g=e.i(7647);let s=()=>{let e=(0,n.useRouter)(),[s,r]=(0,a.useState)({isInitializing:!1,isCompleted:!1,isLoading:!0,hasCompleted:!1,globalProgress:0,globalMessage:"正在检查工作空间状态...",projects:{}}),[p,u]=(0,a.useState)({selectedProjects:[],createBranch:"release/GDirect-",baseBranch:"main",mergeBranch:""}),[m,h]=(0,a.useState)({isRunning:!1,operationLogs:[],feedbacks:[],runId:""}),[j,x]=(0,a.useState)({selectedProjects:[],targetBranch:"main",sourceBranch:""}),[b,f]=(0,a.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[y,v]=(0,a.useState)({selectedProjects:[],createBranch:"",baseBranch:"main"}),[N,C]=(0,a.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[P,S]=(0,a.useState)(!1),[w,k]=(0,a.useState)(null),[L,A]=(0,a.useState)(!1),[I,R]=(0,a.useState)(!1),[E,O]=(0,a.useState)([]),[B,T]=(0,a.useState)({});(0,a.useEffect)(()=>{$()},[]),(0,a.useEffect)(()=>{(async()=>{try{let e=await fetch("/api/admin-status"),s=await e.json();S(!!s?.isAdmin)}catch(e){console.error("获取管理员状态失败:",e),S(!1)}})()},[]);let $=async()=>{try{r(e=>({...e,isLoading:!0,globalMessage:"正在检查工作空间状态..."}));let e=await fetch("/api/check-workspace"),s=await e.json();if(s.success){let e={};s.projects.forEach(s=>{e[s.name]={name:s.name,status:s.status,progress:100*(s.status===g.ProjectStatus.EXISTING),message:s.message,canRetry:!1,needsCleanup:s.needsCleanup||!1}}),r(r=>({...r,isLoading:!1,projects:e,globalMessage:s.message||"检查完成"}))}else r(e=>({...e,isLoading:!1,globalMessage:s.error||"检查工作空间状态失败"}))}catch(e){r(e=>({...e,isLoading:!1,globalMessage:"无法连接到服务器,请刷新页面重试"})),console.error("检查工作空间状态失败:",e)}},D=e=>{switch(e.type){case"initialization":case"workspace_created":case"projects_loaded":if(r(s=>({...s,globalProgress:e.progress||0,globalMessage:e.message||""})),e.projects&&Array.isArray(e.projects)){let s={};e.projects.forEach(e=>{s[e]={name:e,status:g.ProjectStatus.PENDING,progress:0,message:"等待开始...",canRetry:!1}}),r(e=>({...e,projects:s}))}break;case"project_existing":if(e.projectName){let s=e.projectName;r(r=>({...r,globalProgress:e.progress??r.globalProgress,globalMessage:e.message??"",projects:{...r.projects,[s]:{...r.projects[s],status:g.ProjectStatus.EXISTING,message:"项目已存在",progress:100,canRetry:!1}}}))}break;case"project_start":if(e.projectName){let s=e.projectName;r(r=>({...r,globalProgress:e.progress??r.globalProgress,globalMessage:e.message??"",projects:{...r.projects,[s]:{...r.projects[s],status:g.ProjectStatus.CLONING,message:"开始克隆...",progress:0}}}))}break;case"project_progress":if(e.projectName){let s=e.projectName;r(r=>({...r,globalProgress:e.progress??r.globalProgress,projects:{...r.projects,[s]:{...r.projects[s],message:e.message??"",progress:Math.min(e.progress??0,100)}}}))}break;case"project_success":if(e.projectName){let s=e.projectName;r(r=>({...r,globalProgress:e.progress??r.globalProgress,projects:{...r.projects,[s]:{...r.projects[s],status:g.ProjectStatus.SUCCESS,message:"克隆成功",progress:100,canRetry:!1}}}))}break;case"project_failed":if(e.projectName){let s=e.projectName;r(r=>({...r,globalProgress:e.progress??r.globalProgress,projects:{...r.projects,[s]:{...r.projects[s],status:g.ProjectStatus.FAILED,message:"克隆失败",error:e.error,canRetry:!0}}}))}break;case"command_log":if(e.projectName&&e.logType&&void 0!==e.content&&e.timestamp){let s=e.projectName,t=e.logType,a=e.content,n=e.timestamp;r(e=>({...e,projects:{...e.projects,[s]:{...e.projects[s],logs:[...e.projects[s]?.logs||[],{type:t,content:a,timestamp:n}].slice(-1e3)}}}))}break;case"completion":r(s=>({...s,isInitializing:!1,isCompleted:!0,hasCompleted:!0,globalProgress:100,globalMessage:e.message??"初始化完成",completionSummary:e.result?{success:e.result.success,totalProjects:e.result.totalProjects,successCount:e.result.successCount,failedCount:e.result.failedCount,duration:e.result.duration}:void 0}));break;case"error":r(s=>({...s,isInitializing:!1,hasCompleted:!0,globalMessage:e.message??"发生错误",globalProgress:e.progress??s.globalProgress}))}},M=async(e,s="cursor")=>{r(s=>({...s,projects:{...s.projects,[e]:{...s.projects[e],isOpening:!0}}}));try{let t=await fetch("/api/open-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:e,editor:s})}),a=await t.json();if(a.success&&a.editorUrl){let e=document.createElement("a");e.href=a.editorUrl,e.style.display="none",document.body.appendChild(e),e.click(),document.body.removeChild(e)}else console.error("打开项目失败:",a.error);r(s=>({...s,projects:{...s.projects,[e]:{...s.projects[e],isOpening:!1}}}))}catch(s){r(s=>({...s,projects:{...s.projects,[e]:{...s.projects[e],isOpening:!1}}})),console.error("打开项目失败:",s)}},_=async e=>{r(s=>({...s,projects:{...s.projects,[e]:{...s.projects[e],isCleaningUp:!0}}}));try{let s=await fetch("/api/cleanup-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:e})}),t=await s.json();t.success?r(s=>({...s,projects:{...s.projects,[e]:{...s.projects[e],status:g.ProjectStatus.PENDING,message:"已清理,待克隆",isCleaningUp:!1,needsCleanup:!1}}})):r(s=>({...s,projects:{...s.projects,[e]:{...s.projects[e],isCleaningUp:!1,error:t.error}}}))}catch(s){r(r=>({...r,projects:{...r.projects,[e]:{...r.projects[e],isCleaningUp:!1,error:s instanceof Error?s.message:String(s)}}}))}},G=async e=>{r(s=>({...s,projects:{...s.projects,[e]:{...s.projects[e],status:g.ProjectStatus.RETRYING,message:"正在重试...",progress:0,canRetry:!1}}}));try{let s=await fetch("/api/retry-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:e})}),t=await s.json();r(s=>({...s,projects:{...s.projects,[e]:{...s.projects[e],status:t.success?g.ProjectStatus.SUCCESS:g.ProjectStatus.FAILED,message:t.message,error:t.error,progress:t.success?100:s.projects[e].progress,canRetry:!t.success}}}))}catch(s){r(r=>({...r,projects:{...r.projects,[e]:{...r.projects[e],status:g.ProjectStatus.FAILED,message:"重试失败",error:s instanceof Error?s.message:String(s),canRetry:!0}}}))}},U=e=>{switch(e){case g.ProjectStatus.EXISTING:case g.ProjectStatus.SUCCESS:return"text-green-600 bg-green-50 border-green-200";case g.ProjectStatus.FAILED:return"text-red-600 bg-red-50 border-red-200";case g.ProjectStatus.INCOMPLETE:return"text-orange-600 bg-orange-50 border-orange-200";case g.ProjectStatus.CLONING:case g.ProjectStatus.RETRYING:return"text-blue-600 bg-blue-50 border-blue-200";case g.ProjectStatus.PENDING:default:return"text-gray-600 bg-gray-50 border-gray-200"}},F=e=>{switch(e){case g.ProjectStatus.PENDING:return"待克隆";case g.ProjectStatus.EXISTING:return"已存在";case g.ProjectStatus.CLONING:return"克隆中";case g.ProjectStatus.SUCCESS:return"成功";case g.ProjectStatus.FAILED:return"失败";case g.ProjectStatus.INCOMPLETE:return"不完整";case g.ProjectStatus.RETRYING:return"重试中";default:return"未知"}},z=()=>{let e=Object.values(s.projects);return e.length>0&&e.every(e=>e.status===g.ProjectStatus.EXISTING)},J=s=>{e.push(`/configuration?project=${encodeURIComponent(s)}`)},X=(e,s)=>{u(r=>({...r,[e]:s}))},Y=(e,s)=>{x(r=>({...r,[e]:s}))},K=(e,s)=>{v(r=>({...r,[e]:s}))},H=async e=>{let s=[];if(0===j.selectedProjects.length&&s.push("请先选择至少一个项目。"),j.targetBranch.trim()||s.push("请填写合入分支名称。"),j.sourceBranch.trim()||s.push("请填写被合入分支名称。"),s.length>0)return void f({isRunning:!1,operationLogs:[],feedbacks:s,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let r=j.selectedProjects.length;f({isRunning:!0,operationLogs:[`开始批量分支合并,共 ${r} 个项目...`],feedbacks:[],progress:0,totalProjects:r,completedProjects:0,currentProject:""});let t=[],a=[];for(let s=0;s<j.selectedProjects.length;s++){let n=j.selectedProjects[s];f(e=>({...e,currentProject:n,completedProjects:s,progress:Math.round(s/r*100),operationLogs:[...e.operationLogs,`[进度] ${s+1}/${r} 开始处理项目 ${n}`]}));try{let s=await fetch("/api/admin-git-batch-merge",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:[n],targetBranch:j.targetBranch.trim(),sourceBranch:j.sourceBranch.trim(),dryRun:e})}),r=await s.json(),o=Array.isArray(r.operationLogs)?r.operationLogs:[],c=Array.isArray(r.feedbacks)?r.feedbacks:[r.error||"执行失败"];f(e=>({...e,operationLogs:[...e.operationLogs,...o],feedbacks:[...e.feedbacks,...c]})),a.push(...c),Array.isArray(r.projectResults)&&t.push(...r.projectResults)}catch(s){let e=s instanceof Error?s.message:"执行失败";f(s=>({...s,operationLogs:[...s.operationLogs,`[${n}] 请求失败: ${e}`],feedbacks:[...s.feedbacks,`[${n}] ${e}`]})),a.push(`[${n}] ${e}`),t.push({projectName:n,success:!1,reason:e})}}f(e=>({...e,isRunning:!1,progress:100,completedProjects:r,currentProject:"",operationLogs:[...e.operationLogs,"批量分支合并执行完成。"],feedbacks:a.length>0?a:e.feedbacks})),t.length>0?(O(t),R(!0)):(O([]),R(!1))},V=async e=>{let s=[];if(0===y.selectedProjects.length&&s.push("请先选择至少一个项目。"),y.createBranch.trim()||s.push("请填写新分支名称。"),y.baseBranch.trim()||s.push("请填写来源分支名称。"),s.length>0)return void C({isRunning:!1,operationLogs:[],feedbacks:s,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let r=y.selectedProjects.length;C({isRunning:!0,operationLogs:[`开始批量新建分支,共 ${r} 个项目...`],feedbacks:[],progress:0,totalProjects:r,completedProjects:0,currentProject:""});let t=[],a=[];for(let s=0;s<y.selectedProjects.length;s++){let n=y.selectedProjects[s];C(e=>({...e,currentProject:n,completedProjects:s,progress:Math.round(s/r*100),operationLogs:[...e.operationLogs,`[进度] ${s+1}/${r} 开始处理项目 ${n}`]}));try{let s=await fetch("/api/admin-git-batch-create-branch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:[n],createBranch:y.createBranch.trim(),baseBranch:y.baseBranch.trim(),dryRun:e})}),r=await s.json(),o=Array.isArray(r.operationLogs)?r.operationLogs:[],c=Array.isArray(r.feedbacks)?r.feedbacks:[r.error||"执行失败"];C(e=>({...e,operationLogs:[...e.operationLogs,...o],feedbacks:[...e.feedbacks,...c]})),a.push(...c),Array.isArray(r.projectResults)&&t.push(...r.projectResults)}catch(s){let e=s instanceof Error?s.message:"执行失败";C(s=>({...s,operationLogs:[...s.operationLogs,`[${n}] 请求失败: ${e}`],feedbacks:[...s.feedbacks,`[${n}] ${e}`]})),a.push(`[${n}] ${e}`),t.push({projectName:n,success:!1,reason:e})}}C(e=>({...e,isRunning:!1,progress:100,completedProjects:r,currentProject:"",operationLogs:[...e.operationLogs,"批量新建分支执行完成。"],feedbacks:a.length>0?a:e.feedbacks})),t.length>0?(O(t),R(!0)):(O([]),R(!1))},q=async e=>{let s=[];if(0===p.selectedProjects.length&&s.push("请先选择至少一个项目。"),p.createBranch.trim()||s.push("请填写创建分支名。"),p.baseBranch.trim()||s.push("请填写从 origin 哪个分支创建。"),p.mergeBranch.trim()||s.push("请填写被合并分支名称。"),s.length>0)return void h({isRunning:!1,operationLogs:[],feedbacks:s,runId:""});let r=`uat-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;h({isRunning:!0,operationLogs:[],feedbacks:[],runId:r});try{let s=await fetch("/api/uat-git-flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:p.selectedProjects,createBranch:p.createBranch.trim(),baseBranch:p.baseBranch.trim(),mergeBranch:p.mergeBranch.trim(),dryRun:e,runId:r})}),t=await s.json();h({isRunning:!1,operationLogs:Array.isArray(t.operationLogs)?t.operationLogs:[],feedbacks:Array.isArray(t.feedbacks)?t.feedbacks:[t.error||"执行失败"],runId:""}),Array.isArray(t.projectResults)&&(O(t.projectResults),R(!0))}catch(e){h({isRunning:!1,operationLogs:[],feedbacks:[e instanceof Error?e.message:"执行失败"],runId:""}),O([]),R(!1)}},W=async()=>{if(w&&m.runId)try{let e=await fetch("/api/uat-git-flow/step",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"execute",runId:m.runId,stepId:w.stepId})}),s=await e.json(),r=Array.isArray(s.operationLogs)?s.operationLogs:[],t=Array.isArray(s.feedbacks)?s.feedbacks:[s.error||"执行失败"];if(!s.success){h(e=>({...e,isRunning:!1,operationLogs:r,feedbacks:t,runId:""})),k(null),A(!1);return}h(e=>({...e,operationLogs:r,feedbacks:t,isRunning:!s.isComplete,runId:s.isComplete?"":e.runId})),s.nextStep?(k(s.nextStep),A(!0)):(k(null),A(!1),Array.isArray(s.projectResults)&&(O(s.projectResults),R(!0)))}catch(e){h(s=>({...s,isRunning:!1,operationLogs:s.operationLogs,feedbacks:[...s.feedbacks,e instanceof Error?e.message:"执行失败"],runId:""})),k(null),A(!1)}},Q=async()=>{if(m.runId)try{let e=await fetch("/api/uat-git-flow/abort",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({runId:m.runId})}),s=await e.json();s&&Array.isArray(s.operationLogs)?h(e=>({...e,isRunning:!1,operationLogs:s.operationLogs,feedbacks:Array.isArray(s.feedbacks)?s.feedbacks:e.feedbacks,runId:""})):h(e=>({...e,isRunning:!1,runId:""})),Array.isArray(s.projectResults)&&(O(s.projectResults),R(!0)),k(null),A(!1)}catch(e){h(s=>({...s,feedbacks:[...s.feedbacks,e instanceof Error?e.message:"中断失败"]}))}};return(0,t.jsxs)("div",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,t.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,t.jsx)("h1",{className:"text-2xl font-bold",children:"项目初始化"}),s.isLoading?(0,t.jsx)(o.Button,{disabled:!0,children:"检查中..."}):(0,t.jsx)(o.Button,{onClick:()=>{r(e=>({...e,isInitializing:!0,isCompleted:!1,hasCompleted:!1,globalProgress:0,globalMessage:"正在连接服务器...",projects:{},completionSummary:void 0}));let e=new EventSource("/api/initialize-workspace");e.onmessage=e=>{try{let s=JSON.parse(e.data);D(s)}catch(e){console.error("解析 SSE 消息失败:",e)}},e.onerror=()=>{r(e=>e.hasCompleted?e:{...e,isInitializing:!1,globalMessage:"连接服务器失败,请重试"}),e.close()},e.addEventListener("error",()=>{e.close()})},disabled:s.isInitializing,children:s.isInitializing?"初始化中...":"创建项目空间"})]}),(s.isInitializing||s.isCompleted)&&!z()&&(0,t.jsxs)("div",{className:"mb-6 p-4 bg-gray-50 rounded-lg",children:[(0,t.jsxs)("div",{className:"flex justify-between items-center mb-2",children:[(0,t.jsx)("span",{className:"text-sm font-medium",children:s.globalMessage}),(0,t.jsxs)("span",{className:"text-sm text-gray-600",children:[s.globalProgress,"%"]})]}),(0,t.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,t.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${s.globalProgress}%`}})})]}),s.completionSummary&&!z()&&(0,t.jsxs)("div",{className:`mb-6 p-4 rounded-lg border ${s.completionSummary.success?"bg-green-50 border-green-200":"bg-yellow-50 border-yellow-200"}`,children:[(0,t.jsx)("h3",{className:"font-semibold mb-2",children:"初始化完成"}),(0,t.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm",children:[(0,t.jsxs)("div",{children:["总项目数: ",s.completionSummary.totalProjects]}),(0,t.jsxs)("div",{className:"text-green-600",children:["成功: ",s.completionSummary.successCount]}),(0,t.jsxs)("div",{className:"text-red-600",children:["失败: ",s.completionSummary.failedCount]}),(0,t.jsxs)("div",{children:["耗时: ",Math.round(s.completionSummary.duration/1e3),"s"]})]})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4",children:Object.keys(s.projects).length>0?Object.values(s.projects).map(e=>(0,t.jsxs)("div",{className:`border rounded-lg p-4 ${U(e.status)}`,children:[(0,t.jsxs)("div",{className:"flex justify-between items-start mb-2",children:[(0,t.jsx)("h2",{className:"font-semibold cursor-pointer hover:text-blue-600 transition-colors",onClick:()=>J(e.name),title:"点击进入项目配置",children:e.name}),(0,t.jsx)("span",{className:"text-xs px-2 py-1 rounded-full bg-white",children:F(e.status)})]}),(0,t.jsx)("p",{className:"text-sm mb-2",children:e.message}),e.status===g.ProjectStatus.CLONING||e.status===g.ProjectStatus.RETRYING?(0,t.jsxs)("div",{className:"mb-2",children:[(0,t.jsx)("div",{className:"w-full bg-white rounded-full h-1",children:(0,t.jsx)("div",{className:"bg-current h-1 rounded-full transition-all duration-300",style:{width:`${e.progress}%`}})}),(0,t.jsxs)("span",{className:"text-xs",children:[e.progress,"%"]})]}):null,e.error&&(0,t.jsx)("p",{className:"text-xs text-red-600 mb-2",children:e.error}),(0,t.jsxs)("div",{className:"space-y-2",children:[e.canRetry&&(0,t.jsx)(o.Button,{size:"sm",variant:"outline",onClick:()=>G(e.name),className:"w-full",children:"重试"}),e.needsCleanup&&e.status===g.ProjectStatus.INCOMPLETE&&(0,t.jsx)(o.Button,{size:"sm",variant:"destructive",onClick:()=>_(e.name),disabled:e.isCleaningUp,className:"w-full",children:e.isCleaningUp?"清理中...":"清理项目"}),(e.status===g.ProjectStatus.EXISTING||e.status===g.ProjectStatus.SUCCESS)&&(0,t.jsx)(c.EditorSplitButton,{onOpen:s=>M(e.name,s),loading:e.isOpening,loadingText:"打开中...",size:"sm",variant:"default",className:"w-full"}),e.logs&&e.logs.length>0&&(0,t.jsx)(o.Button,{size:"sm",variant:"outline",onClick:()=>T(s=>({...s,[e.name]:!s[e.name]})),className:"w-full",children:B[e.name]?"隐藏日志":`查看日志 (${e.logs.length})`})]}),B[e.name]&&e.logs&&e.logs.length>0&&(0,t.jsx)("div",{className:"mt-3 border-t pt-3",children:(0,t.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:e.logs.map((e,s)=>(0,t.jsxs)("div",{className:`mb-1 ${"stderr"===e.type?"text-red-400":"progress"===e.type?"text-yellow-400":"text-green-400"}`,children:[(0,t.jsx)("span",{className:"text-gray-500 mr-2",children:new Date(e.timestamp).toLocaleTimeString()}),(0,t.jsxs)("span",{className:"text-blue-400 mr-2",children:["[",e.type,"]"]}),(0,t.jsx)("span",{className:"whitespace-pre-wrap",children:e.content})]},s))})})]},e.name)):(0,t.jsx)("div",{className:"col-span-full text-center text-gray-500 py-8",children:s.isLoading?"正在检查项目状态...":s.isInitializing?"正在加载项目...":'点击"创建项目空间"开始初始化'})}),P&&(0,t.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,t.jsx)("h2",{className:"text-lg font-semibold",children:"UAT上线前 Git 操作流"}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)(o.Button,{onClick:()=>q(!1),disabled:m.isRunning,children:m.isRunning?"执行中...":"执行"}),(0,t.jsx)(o.Button,{variant:"outline",onClick:()=>q(!0),disabled:m.isRunning,children:"DRY RUN"}),(0,t.jsx)(o.Button,{variant:"destructive",onClick:Q,disabled:!m.isRunning,children:"中断"})]})]}),(0,t.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(l.Label,{htmlFor:"uat-projects",children:"选择项目"}),(0,t.jsx)("select",{id:"uat-projects",multiple:!0,value:p.selectedProjects,onChange:e=>{let s=Array.from(e.target.selectedOptions).map(e=>e.value);u(e=>({...e,selectedProjects:s}))},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(s.projects).length?(0,t.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(s.projects).map(e=>(0,t.jsx)("option",{value:e,children:e},e))}),(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,t.jsxs)("div",{className:"grid gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(l.Label,{htmlFor:"uat-create-branch",children:"创建分支名"}),(0,t.jsx)(i.Input,{id:"uat-create-branch",value:p.createBranch,onChange:e=>X("createBranch",e.target.value),placeholder:"例如: release/uat-2026-01"})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(l.Label,{htmlFor:"uat-base-branch",children:"从 origin 哪个分支创建"}),(0,t.jsx)(i.Input,{id:"uat-base-branch",value:p.baseBranch,onChange:e=>X("baseBranch",e.target.value),placeholder:"例如: develop"})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(l.Label,{htmlFor:"uat-merge-branch",children:"被合并分支名称"}),(0,t.jsx)(i.Input,{id:"uat-merge-branch",value:p.mergeBranch,onChange:e=>X("mergeBranch",e.target.value),placeholder:"例如: release/candidate"})]})]})]}),(0,t.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,t.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,t.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===m.operationLogs.length?(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,t.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:m.operationLogs.map((e,s)=>(0,t.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:e},s))})]}),(0,t.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,t.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===m.feedbacks.length?(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,t.jsx)("div",{className:"space-y-1 text-sm",children:m.feedbacks.map((e,s)=>(0,t.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:e},s))})]})]})]}),P&&(0,t.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,t.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量分支合并"}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)(o.Button,{onClick:()=>H(!1),disabled:b.isRunning,children:b.isRunning?"执行中...":"执行"}),(0,t.jsx)(o.Button,{variant:"outline",onClick:()=>H(!0),disabled:b.isRunning,children:"DRY RUN"})]})]}),(0,t.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(l.Label,{htmlFor:"batch-merge-projects",children:"选择项目"}),(0,t.jsx)("select",{id:"batch-merge-projects",multiple:!0,value:j.selectedProjects,onChange:e=>{let s=Array.from(e.target.selectedOptions).map(e=>e.value);x(e=>({...e,selectedProjects:s}))},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(s.projects).length?(0,t.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(s.projects).map(e=>(0,t.jsx)("option",{value:e,children:e},e))}),(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,t.jsxs)("div",{className:"grid gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(l.Label,{htmlFor:"batch-merge-target-branch",children:"合入分支名称"}),(0,t.jsx)(i.Input,{id:"batch-merge-target-branch",value:j.targetBranch,onChange:e=>Y("targetBranch",e.target.value),placeholder:"例如: main"})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(l.Label,{htmlFor:"batch-merge-source-branch",children:"被合入分支名称"}),(0,t.jsx)(i.Input,{id:"batch-merge-source-branch",value:j.sourceBranch,onChange:e=>Y("sourceBranch",e.target.value),placeholder:"例如: release/candidate"})]})]})]}),(b.isRunning||b.progress>0)&&(0,t.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,t.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,t.jsxs)("span",{children:["进度: ",b.completedProjects,"/",b.totalProjects,b.currentProject?` \xb7 当前项目: ${b.currentProject}`:""]}),(0,t.jsxs)("span",{children:[b.progress,"%"]})]}),(0,t.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,t.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${b.progress}%`}})})]}),(0,t.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,t.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,t.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===b.operationLogs.length?(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,t.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:b.operationLogs.map((e,s)=>(0,t.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:e},s))})]}),(0,t.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,t.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===b.feedbacks.length?(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,t.jsx)("div",{className:"space-y-1 text-sm",children:b.feedbacks.map((e,s)=>(0,t.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:e},s))})]})]})]}),P&&(0,t.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,t.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量新建分支"}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)(o.Button,{onClick:()=>V(!1),disabled:N.isRunning,children:N.isRunning?"执行中...":"执行"}),(0,t.jsx)(o.Button,{variant:"outline",onClick:()=>V(!0),disabled:N.isRunning,children:"DRY RUN"})]})]}),(0,t.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(l.Label,{htmlFor:"batch-create-branch-projects",children:"选择项目"}),(0,t.jsx)("select",{id:"batch-create-branch-projects",multiple:!0,value:y.selectedProjects,onChange:e=>{let s=Array.from(e.target.selectedOptions).map(e=>e.value);v(e=>({...e,selectedProjects:s}))},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(s.projects).length?(0,t.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(s.projects).map(e=>(0,t.jsx)("option",{value:e,children:e},e))}),(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,t.jsxs)("div",{className:"grid gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(l.Label,{htmlFor:"batch-create-branch-name",children:"新分支名称"}),(0,t.jsx)(i.Input,{id:"batch-create-branch-name",value:y.createBranch,onChange:e=>K("createBranch",e.target.value),placeholder:"例如: release/2026-03"})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(l.Label,{htmlFor:"batch-create-branch-base",children:"来源分支名称"}),(0,t.jsx)(i.Input,{id:"batch-create-branch-base",value:y.baseBranch,onChange:e=>K("baseBranch",e.target.value),placeholder:"例如: main"})]})]})]}),(N.isRunning||N.progress>0)&&(0,t.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,t.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,t.jsxs)("span",{children:["进度: ",N.completedProjects,"/",N.totalProjects,N.currentProject?` \xb7 当前项目: ${N.currentProject}`:""]}),(0,t.jsxs)("span",{children:[N.progress,"%"]})]}),(0,t.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,t.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${N.progress}%`}})})]}),(0,t.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,t.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,t.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===N.operationLogs.length?(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,t.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:N.operationLogs.map((e,s)=>(0,t.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:e},s))})]}),(0,t.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,t.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===N.feedbacks.length?(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,t.jsx)("div",{className:"space-y-1 text-sm",children:N.feedbacks.map((e,s)=>(0,t.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:e},s))})]})]})]}),(0,t.jsx)(d.Dialog,{open:!1,onOpenChange:e=>{!e&&w&&m.isRunning||A(e)},children:(0,t.jsxs)(d.DialogContent,{showCloseButton:!1,children:[(0,t.jsxs)(d.DialogHeader,{children:[(0,t.jsx)(d.DialogTitle,{children:"确认执行下一步"}),(0,t.jsx)(d.DialogDescription,{children:w?`${w.projectName} \xb7 ${w.description}`:"准备下一步执行"})]}),(0,t.jsx)("div",{className:"rounded-md border bg-gray-50 p-3 text-sm font-mono text-gray-700",children:w?w.command:""}),(0,t.jsxs)(d.DialogFooter,{children:[(0,t.jsx)(o.Button,{variant:"outline",onClick:Q,children:"取消执行"}),(0,t.jsx)(o.Button,{onClick:W,disabled:!w,children:"确认并执行"})]})]})}),(0,t.jsx)(d.Dialog,{open:P&&I,onOpenChange:R,children:(0,t.jsxs)(d.DialogContent,{children:[(0,t.jsxs)(d.DialogHeader,{children:[(0,t.jsx)(d.DialogTitle,{children:"操作结果"}),(0,t.jsx)(d.DialogDescription,{children:"查看所有项目执行结果"})]}),(0,t.jsx)("div",{className:"space-y-2",children:0===E.length?(0,t.jsx)("p",{className:"text-sm text-gray-500",children:"暂无结果"}):E.map(e=>(0,t.jsxs)("div",{className:`rounded-md border px-3 py-2 text-sm ${e.success?"bg-green-50 text-green-700":"bg-red-50 text-red-700"}`,children:[(0,t.jsxs)("div",{className:"flex items-start justify-between",children:[(0,t.jsx)("span",{className:"font-medium",children:e.projectName}),(0,t.jsx)("span",{className:"ml-4 text-right",children:e.success?"成功":e.reason||"失败"})]}),!e.success&&e.rollbackActions&&e.rollbackActions.length>0&&(0,t.jsxs)("div",{className:"mt-2 text-xs text-gray-600",children:[(0,t.jsx)("div",{className:"font-semibold text-gray-700",children:"已回滚操作:"}),(0,t.jsx)("ul",{className:"mt-1 list-disc pl-4",children:e.rollbackActions.map((s,r)=>(0,t.jsx)("li",{children:s},`${e.projectName}-rollback-${r}`))})]})]},e.projectName))}),(0,t.jsx)(d.DialogFooter,{children:(0,t.jsx)(o.Button,{onClick:()=>R(!1),children:"关闭"})})]})})]})}}}}]);
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=c198f02ea70fda25.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(globalThis.TURBOPACK=globalThis.TURBOPACK||[]).push(["object"==typeof document?document.currentScript:void 0,{},{otherChunks:["static/chunks/7d7379cdf8fe9ec5.js","static/chunks/
|
|
1
|
+
(globalThis.TURBOPACK=globalThis.TURBOPACK||[]).push(["object"==typeof document?document.currentScript:void 0,{},{otherChunks:["static/chunks/7d7379cdf8fe9ec5.js","static/chunks/352f266165580042.js"],runtimeModuleIds:[85445,96999]}]),(()=>{let e;if(!Array.isArray(globalThis.TURBOPACK))return;let t="/_next/",r=Symbol("reexported objects"),n=Object.prototype.hasOwnProperty,o="undefined"!=typeof Symbol&&Symbol.toStringTag;function l(e,t,r){n.call(e,t)||Object.defineProperty(e,t,r)}function u(e,t){for(let r in l(e,"__esModule",{value:!0}),o&&l(e,o,{value:"Module"}),t){let n=t[r];Array.isArray(n)?l(e,r,{get:n[0],set:n[1],enumerable:!0}):l(e,r,{get:n,enumerable:!0})}Object.seal(e)}function i(e,t,r){e.namespaceObject=e.exports,u(t,r)}function s(e,t,o){let l;(l=e[r])||(l=e[r]=[],e.exports=e.namespaceObject=new Proxy(t,{get(e,t){if(n.call(e,t)||"default"===t||"__esModule"===t)return Reflect.get(e,t);for(let e of l){let r=Reflect.get(e,t);if(void 0!==r)return r}},ownKeys(e){let t=Reflect.ownKeys(e);for(let e of l)for(let r of Reflect.ownKeys(e))"default"===r||t.includes(r)||t.push(r);return t}})),"object"==typeof o&&null!==o&&e[r].push(o)}function a(e,t){e.exports=t}function c(e,t){e.exports=e.namespaceObject=t}let f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,p=[null,f({}),f([]),f(f)];function d(e,t,r){let n=Object.create(null);for(let t=e;("object"==typeof t||"function"==typeof t)&&!p.includes(t);t=f(t))for(let r of Object.getOwnPropertyNames(t))n[r]=function(e,t){return()=>e[t]}(e,r);return r&&"default"in n||(n.default=()=>e),u(t,n),t}function h(e,t){let r=X(t,e);if(r.error)throw r.error;if(r.namespaceObject)return r.namespaceObject;let n=r.exports;return r.namespaceObject=d(n,"function"==typeof n?function(...e){return n.apply(this,e)}:Object.create(null),n&&n.__esModule)}let m="function"==typeof require?require:function(){throw Error("Unexpected use of runtime require")};function b(e,t){let r=X(t,e);if(r.error)throw r.error;return r.exports}function y(e){function t(t){if(n.call(e,t))return e[t].module();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r}return t.keys=()=>Object.keys(e),t.resolve=t=>{if(n.call(e,t))return e[t].id();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r},t.import=async e=>await t(e),t}function O(){let e,t;return{promise:new Promise((r,n)=>{t=n,e=r}),resolve:e,reject:t}}let g=Symbol("turbopack queues"),w=Symbol("turbopack exports"),R=Symbol("turbopack error");function j(e){e&&1!==e.status&&(e.status=1,e.forEach(e=>e.queueCount--),e.forEach(e=>e.queueCount--?e.queueCount++:e()))}function U(e,t,r){let n=r?Object.assign([],{status:-1}):void 0,o=new Set,{resolve:l,reject:u,promise:i}=O(),s=Object.assign(i,{[w]:e.exports,[g]:e=>{n&&e(n),o.forEach(e),s.catch(()=>{})}}),a={get:()=>s,set(e){e!==s&&(s[w]=e)}};Object.defineProperty(e,"exports",a),Object.defineProperty(e,"namespaceObject",a),t(function(e){let t=e.map(e=>{if(null!==e&&"object"==typeof e){if(g in e)return e;if(null!=e&&"object"==typeof e&&"then"in e&&"function"==typeof e.then){let t=Object.assign([],{status:0}),r={[w]:{},[g]:e=>e(t)};return e.then(e=>{r[w]=e,j(t)},e=>{r[R]=e,j(t)}),r}}return{[w]:e,[g]:()=>{}}}),r=()=>t.map(e=>{if(e[R])throw e[R];return e[w]}),{promise:l,resolve:u}=O(),i=Object.assign(()=>u(r),{queueCount:0});function s(e){e!==n&&!o.has(e)&&(o.add(e),e&&0===e.status&&(i.queueCount++,e.push(i)))}return t.map(e=>e[g](s)),i.queueCount?l:r()},function(e){e?u(s[R]=e):l(s[w]),j(n)}),n&&-1===n.status&&(n.status=0)}let C=function(e){let t=new URL(e,"x:/"),r={};for(let e in t)r[e]=t[e];for(let t in r.href=e,r.pathname=e.replace(/[?#].*/,""),r.origin=r.protocol="",r.toString=r.toJSON=(...t)=>e,r)Object.defineProperty(this,t,{enumerable:!0,configurable:!0,value:r[t]})};function k(e,t){throw Error(`Invariant: ${t(e)}`)}C.prototype=URL.prototype;var P=function(e){return e[e.Runtime=0]="Runtime",e[e.Parent=1]="Parent",e[e.Update=2]="Update",e}(P||{});let _=Object.create(null),$=new Set,T=new Map,v=new Map,S=new Map,A=new Map;async function E(e,t){let r;if("string"==typeof t)return K(e,t);let n=t.included||[],o=n.map(e=>!!_[e]||S.get(e));if(o.length>0&&o.every(e=>e))return Promise.all(o);let l=t.moduleChunks||[],u=l.map(e=>A.get(e)).filter(e=>e);if(u.length>0){if(u.length===l.length)return Promise.all(u);let t=new Set;for(let e of l)A.has(e)||t.add(e);for(let r of t){let t=K(e,r);A.set(r,t),u.push(t)}r=Promise.all(u)}else for(let n of(r=K(e,t.path),l))A.has(n)||A.set(n,r);for(let e of n)S.has(e)||S.set(e,r);return r}async function x(t,r){try{await e.loadChunk(r,t)}catch(n){let e;switch(t.type){case 0:e=`as a runtime dependency of chunk ${t.chunkPath}`;break;case 1:e=`from module ${t.parentId}`;break;case 2:e="from an HMR update";break;default:k(t,e=>`Unknown source type: ${e?.type}`)}throw Error(`Failed to load chunk ${r} ${e}${n?`: ${n}`:""}`,n?{cause:n}:void 0)}}async function K(e,t){return x(e,L(t))}function N(e){return`/ROOT/${e??""}`}function M(e){let t=new Blob([`self.TURBOPACK_WORKER_LOCATION = ${JSON.stringify(location.origin)};
|
|
2
2
|
self.TURBOPACK_NEXT_CHUNK_URLS = ${JSON.stringify(e.reverse().map(L),null,2)};
|
|
3
3
|
importScripts(...self.TURBOPACK_NEXT_CHUNK_URLS.map(c => self.TURBOPACK_WORKER_LOCATION + c).reverse());`],{type:"text/javascript"});return URL.createObjectURL(t)}function L(e){return`${t}${e.split("/").map(e=>encodeURIComponent(e)).join("/")}`}function I([r,n,o]){let l=function(e){if("string"==typeof e)return e;let r=decodeURIComponent(("undefined"!=typeof TURBOPACK_NEXT_CHUNK_URLS?TURBOPACK_NEXT_CHUNK_URLS.pop():e.getAttribute("src")).replace(/[?#].*$/,""));return r.startsWith(t)?r.slice(t.length):r}(r);for(let[e,t]of Object.entries(n))_[e]||(_[e]=t),function(e,t){let r=T.get(e);r?r.add(t):(r=new Set([t]),T.set(e,r));let n=v.get(t);n?n.add(e):(n=new Set([e]),v.set(t,n))}(e,l);return e.registerChunk(l,o)}let B=/\.js(?:\?[^#]*)?(?:#.*)?$/,q=/\.css(?:\?[^#]*)?(?:#.*)?$/;function H(e){return q.test(e)}let W={},X=(e,t)=>{let r=W[e];return r||D(e,{type:P.Parent,parentId:t.id})};function D(e,t){let r=_[e];if("function"!=typeof r){let r;switch(t.type){case P.Runtime:r=`as a runtime entry of chunk ${t.chunkPath}`;break;case P.Parent:r=`because it was required from module ${t.parentId}`;break;case P.Update:r="because of an HMR update";break;default:k(t,e=>`Unknown source type: ${e?.type}`)}throw Error(`Module ${e} was instantiated ${r}, but the module factory is not available. It might have been deleted in an HMR update.`)}switch(t.type){case P.Runtime:$.add(e);break;case P.Parent:break;case P.Update:throw Error("Unexpected");default:k(t,e=>`Unknown source type: ${e?.type}`)}let n={exports:{},error:void 0,loaded:!1,id:e,namespaceObject:void 0};W[e]=n;try{let t={type:P.Parent,parentId:e},o=b.bind(null,n);r.call(n.exports,{a:U.bind(null,n),e:n.exports,r:b.bind(null,n),t:m,f:y,i:h.bind(null,n),s:i.bind(null,n,n.exports),j:s.bind(null,n,n.exports),v:a.bind(null,n),n:c.bind(null,n),m:n,c:W,M:_,l:E.bind(null,t),L:x.bind(null,t),w:F.bind(null,t),u:J.bind(null,t),g:globalThis,P:N,U:C,R:function(e){let t=o(e);return t?.default??t},b:M,d:"string"==typeof n.id?n.id.replace(/(^|\/)\/+$/,""):n.id})}catch(e){throw n.error=e,e}return n.loaded=!0,n.namespaceObject&&n.exports!==n.namespaceObject&&d(n.exports,n.namespaceObject),n}async function F(e,t,r){let n=fetch(L(t)),{instance:o}=await WebAssembly.instantiateStreaming(n,r);return o.exports}async function J(e,t){let r=fetch(L(t));return await WebAssembly.compileStreaming(r)}let z=new Map;(()=>{function t(e){let t=z.get(e);if(!t){let r,n;t={resolved:!1,promise:new Promise((e,t)=>{r=e,n=t}),resolve:()=>{t.resolved=!0,r()},reject:n},z.set(e,t)}return t}e={async registerChunk(e,r){if(t(L(e)).resolve(),null!=r){for(let e of r.otherChunks)t(L("string"==typeof e?e:e.path));if(await Promise.all(r.otherChunks.map(t=>E({type:P.Runtime,chunkPath:e},t))),r.runtimeModuleIds.length>0)for(let t of r.runtimeModuleIds)!function(e,t){let r=W[e];if(r){if(r.error)throw r.error;return}D(e,{type:P.Runtime,chunkPath:t})}(t,e)}},loadChunk:(e,r)=>(function(e,r){let n=t(e);if(n.resolved)return n.promise;if(r.type===P.Runtime)return H(e)&&n.resolve(),n.promise;if("function"==typeof importScripts)if(H(e));else if(B.test(e))self.TURBOPACK_NEXT_CHUNK_URLS.push(e),importScripts(TURBOPACK_WORKER_LOCATION+e);else throw Error(`can't infer type of chunk from URL ${e} in worker`);else{let t=decodeURI(e);if(H(e))if(document.querySelectorAll(`link[rel=stylesheet][href="${e}"],link[rel=stylesheet][href^="${e}?"],link[rel=stylesheet][href="${t}"],link[rel=stylesheet][href^="${t}?"]`).length>0)n.resolve();else{let t=document.createElement("link");t.rel="stylesheet",t.href=e,t.onerror=()=>{n.reject()},t.onload=()=>{n.resolve()},document.body.appendChild(t)}else if(B.test(e)){let r=document.querySelectorAll(`script[src="${e}"],script[src^="${e}?"],script[src="${t}"],script[src^="${t}?"]`);if(r.length>0)for(let e of Array.from(r))e.addEventListener("error",()=>{n.reject()});else{let t=document.createElement("script");t.src=e,t.onerror=()=>{n.reject()},document.body.appendChild(t)}}else throw Error(`can't infer type of chunk from URL ${e}`)}return n.promise})(e,r)}})();let G=globalThis.TURBOPACK;globalThis.TURBOPACK={push:I},G.forEach(I)})();
|
|
4
4
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["turbopack:///[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/os-browserify/browser.js","turbopack:///[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/path-browserify/index.js","turbopack:///[project]/packages/server/src/lib/workspace-types.ts","turbopack:///[project]/packages/server/src/components/project-initializer.tsx"],"sourcesContent":["(function(){if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n={};!function(){var e=n;e.endianness=function(){return\"LE\"};e.hostname=function(){if(typeof location!==\"undefined\"){return location.hostname}else return\"\"};e.loadavg=function(){return[]};e.uptime=function(){return 0};e.freemem=function(){return Number.MAX_VALUE};e.totalmem=function(){return Number.MAX_VALUE};e.cpus=function(){return[]};e.type=function(){return\"Browser\"};e.release=function(){if(typeof navigator!==\"undefined\"){return navigator.appVersion}return\"\"};e.networkInterfaces=e.getNetworkInterfaces=function(){return{}};e.arch=function(){return\"javascript\"};e.platform=function(){return\"browser\"};e.tmpdir=e.tmpDir=function(){return\"/tmp\"};e.EOL=\"\\n\";e.homedir=function(){return\"/\"}}();module.exports=n})();","(function(){\"use strict\";var e={114:function(e){function assertPath(e){if(typeof e!==\"string\"){throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(e))}}function normalizeStringPosix(e,r){var t=\"\";var i=0;var n=-1;var a=0;var f;for(var l=0;l<=e.length;++l){if(l<e.length)f=e.charCodeAt(l);else if(f===47)break;else f=47;if(f===47){if(n===l-1||a===1){}else if(n!==l-1&&a===2){if(t.length<2||i!==2||t.charCodeAt(t.length-1)!==46||t.charCodeAt(t.length-2)!==46){if(t.length>2){var s=t.lastIndexOf(\"/\");if(s!==t.length-1){if(s===-1){t=\"\";i=0}else{t=t.slice(0,s);i=t.length-1-t.lastIndexOf(\"/\")}n=l;a=0;continue}}else if(t.length===2||t.length===1){t=\"\";i=0;n=l;a=0;continue}}if(r){if(t.length>0)t+=\"/..\";else t=\"..\";i=2}}else{if(t.length>0)t+=\"/\"+e.slice(n+1,l);else t=e.slice(n+1,l);i=l-n-1}n=l;a=0}else if(f===46&&a!==-1){++a}else{a=-1}}return t}function _format(e,r){var t=r.dir||r.root;var i=r.base||(r.name||\"\")+(r.ext||\"\");if(!t){return i}if(t===r.root){return t+i}return t+e+i}var r={resolve:function resolve(){var e=\"\";var r=false;var t;for(var i=arguments.length-1;i>=-1&&!r;i--){var n;if(i>=0)n=arguments[i];else{if(t===undefined)t=\"\";n=t}assertPath(n);if(n.length===0){continue}e=n+\"/\"+e;r=n.charCodeAt(0)===47}e=normalizeStringPosix(e,!r);if(r){if(e.length>0)return\"/\"+e;else return\"/\"}else if(e.length>0){return e}else{return\".\"}},normalize:function normalize(e){assertPath(e);if(e.length===0)return\".\";var r=e.charCodeAt(0)===47;var t=e.charCodeAt(e.length-1)===47;e=normalizeStringPosix(e,!r);if(e.length===0&&!r)e=\".\";if(e.length>0&&t)e+=\"/\";if(r)return\"/\"+e;return e},isAbsolute:function isAbsolute(e){assertPath(e);return e.length>0&&e.charCodeAt(0)===47},join:function join(){if(arguments.length===0)return\".\";var e;for(var t=0;t<arguments.length;++t){var i=arguments[t];assertPath(i);if(i.length>0){if(e===undefined)e=i;else e+=\"/\"+i}}if(e===undefined)return\".\";return r.normalize(e)},relative:function relative(e,t){assertPath(e);assertPath(t);if(e===t)return\"\";e=r.resolve(e);t=r.resolve(t);if(e===t)return\"\";var i=1;for(;i<e.length;++i){if(e.charCodeAt(i)!==47)break}var n=e.length;var a=n-i;var f=1;for(;f<t.length;++f){if(t.charCodeAt(f)!==47)break}var l=t.length;var s=l-f;var o=a<s?a:s;var u=-1;var h=0;for(;h<=o;++h){if(h===o){if(s>o){if(t.charCodeAt(f+h)===47){return t.slice(f+h+1)}else if(h===0){return t.slice(f+h)}}else if(a>o){if(e.charCodeAt(i+h)===47){u=h}else if(h===0){u=0}}break}var c=e.charCodeAt(i+h);var v=t.charCodeAt(f+h);if(c!==v)break;else if(c===47)u=h}var g=\"\";for(h=i+u+1;h<=n;++h){if(h===n||e.charCodeAt(h)===47){if(g.length===0)g+=\"..\";else g+=\"/..\"}}if(g.length>0)return g+t.slice(f+u);else{f+=u;if(t.charCodeAt(f)===47)++f;return t.slice(f)}},_makeLong:function _makeLong(e){return e},dirname:function dirname(e){assertPath(e);if(e.length===0)return\".\";var r=e.charCodeAt(0);var t=r===47;var i=-1;var n=true;for(var a=e.length-1;a>=1;--a){r=e.charCodeAt(a);if(r===47){if(!n){i=a;break}}else{n=false}}if(i===-1)return t?\"/\":\".\";if(t&&i===1)return\"//\";return e.slice(0,i)},basename:function basename(e,r){if(r!==undefined&&typeof r!==\"string\")throw new TypeError('\"ext\" argument must be a string');assertPath(e);var t=0;var i=-1;var n=true;var a;if(r!==undefined&&r.length>0&&r.length<=e.length){if(r.length===e.length&&r===e)return\"\";var f=r.length-1;var l=-1;for(a=e.length-1;a>=0;--a){var s=e.charCodeAt(a);if(s===47){if(!n){t=a+1;break}}else{if(l===-1){n=false;l=a+1}if(f>=0){if(s===r.charCodeAt(f)){if(--f===-1){i=a}}else{f=-1;i=l}}}}if(t===i)i=l;else if(i===-1)i=e.length;return e.slice(t,i)}else{for(a=e.length-1;a>=0;--a){if(e.charCodeAt(a)===47){if(!n){t=a+1;break}}else if(i===-1){n=false;i=a+1}}if(i===-1)return\"\";return e.slice(t,i)}},extname:function extname(e){assertPath(e);var r=-1;var t=0;var i=-1;var n=true;var a=0;for(var f=e.length-1;f>=0;--f){var l=e.charCodeAt(f);if(l===47){if(!n){t=f+1;break}continue}if(i===-1){n=false;i=f+1}if(l===46){if(r===-1)r=f;else if(a!==1)a=1}else if(r!==-1){a=-1}}if(r===-1||i===-1||a===0||a===1&&r===i-1&&r===t+1){return\"\"}return e.slice(r,i)},format:function format(e){if(e===null||typeof e!==\"object\"){throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof e)}return _format(\"/\",e)},parse:function parse(e){assertPath(e);var r={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(e.length===0)return r;var t=e.charCodeAt(0);var i=t===47;var n;if(i){r.root=\"/\";n=1}else{n=0}var a=-1;var f=0;var l=-1;var s=true;var o=e.length-1;var u=0;for(;o>=n;--o){t=e.charCodeAt(o);if(t===47){if(!s){f=o+1;break}continue}if(l===-1){s=false;l=o+1}if(t===46){if(a===-1)a=o;else if(u!==1)u=1}else if(a!==-1){u=-1}}if(a===-1||l===-1||u===0||u===1&&a===l-1&&a===f+1){if(l!==-1){if(f===0&&i)r.base=r.name=e.slice(1,l);else r.base=r.name=e.slice(f,l)}}else{if(f===0&&i){r.name=e.slice(1,a);r.base=e.slice(1,l)}else{r.name=e.slice(f,a);r.base=e.slice(f,l)}r.ext=e.slice(a,l)}if(f>0)r.dir=e.slice(0,f-1);else if(i)r.dir=\"/\";return r},sep:\"/\",delimiter:\":\",win32:null,posix:null};r.posix=r;e.exports=r}};var r={};function __nccwpck_require__(t){var i=r[t];if(i!==undefined){return i.exports}var n=r[t]={exports:{}};var a=true;try{e[t](n,n.exports,__nccwpck_require__);a=false}finally{if(a)delete r[t]}return n.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(114);module.exports=t})();","import { homedir, cpus } from 'os';\nimport { join } from 'path';\n\n/**\n * 工作空间配置常量\n */\nexport const WORKSPACE_CONFIG = {\n // 工作空间根目录路径\n WORKSPACE_ROOT: join(homedir(), 'Documents', 'prime-workspace'),\n\n // Git 操作超时时间 (毫秒)\n GIT_TIMEOUT: 300000, // 5分钟\n\n // 最大并发克隆数量(基于CPU核心数,最小2个,最大8个)\n MAX_CONCURRENT_CLONES: Math.max(2, Math.min(cpus().length, 8)),\n\n // 重试次数限制\n MAX_RETRY_ATTEMPTS: 3,\n} as const;\n\nexport const PROJECT_CONFIG_PATH = join(homedir(), '.prime-projects.json');\n\nexport interface ProjectConfig {\n repo: string;\n mockingIntercept?: boolean;\n mockOpen?: boolean;\n envs: {\n [envName: string]: {\n host: string;\n currentProxy: string;\n proxyEnv: {\n [key: string]: string;\n };\n envFileName: string;\n proxyKey: string;\n subApps?: string[];\n };\n };\n}\n\nexport interface ProjectsConfig {\n [projectName: string]: ProjectConfig;\n}\n\n/**\n * 项目状态枚举\n */\nexport enum ProjectStatus {\n PENDING = 'pending',\n EXISTING = 'existing',\n CLONING = 'cloning',\n SUCCESS = 'success',\n FAILED = 'failed',\n RETRYING = 'retrying',\n INCOMPLETE = 'incomplete', // 不完整的项目,需要清理\n}\n\n/**\n * 项目进度信息接口\n */\nexport interface ProjectProgress {\n projectName: string;\n status: ProjectStatus;\n progress: number; // 0-100\n message: string;\n error?: string;\n startTime?: number;\n endTime?: number;\n}\n\n/**\n * 初始化结果接口\n */\nexport interface InitializationResult {\n success: boolean;\n totalProjects: number;\n successCount: number;\n failedCount: number;\n failedProjects: string[];\n workspacePath: string;\n duration: number;\n}\n\n/**\n * Git 操作配置接口\n */\nexport interface GitOperationConfig {\n repoUrl: string;\n projectName?: string;\n targetDir: string;\n timeout: number;\n onProgress?: (progress: number, message: string) => void;\n onError?: (error: string) => void;\n onLog?: (projectName: string, logType: 'stdout' | 'stderr' | 'progress', content: string) => void;\n}\n","\"use client\";\n\nimport { useEffect, useState, type ChangeEvent } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { Button } from '@/components/ui/button';\nimport { EditorSplitButton } from '@/components/EditorSplitButton';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { ProjectStatus } from '@/lib/workspace-types';\nimport type { EditorType } from '@/lib/editor-operations';\n\ninterface ProjectState {\n name: string;\n status: ProjectStatus;\n progress: number;\n message: string;\n error?: string;\n canRetry: boolean;\n isOpening?: boolean;\n isCleaningUp?: boolean;\n needsCleanup?: boolean;\n logs?: Array<{type: 'stdout' | 'stderr' | 'progress', content: string, timestamp: number}>;\n}\n\ninterface InitializationState {\n isInitializing: boolean;\n isCompleted: boolean;\n isLoading: boolean;\n hasCompleted: boolean;\n globalProgress: number;\n globalMessage: string;\n projects: Record<string, ProjectState>;\n completionSummary?: {\n success: boolean;\n totalProjects: number;\n successCount: number;\n failedCount: number;\n duration: number;\n };\n}\n\nconst ProjectInitializer = () => {\n const router = useRouter();\n const [state, setState] = useState<InitializationState>({\n isInitializing: false,\n isCompleted: false,\n isLoading: true,\n hasCompleted: false,\n globalProgress: 0,\n globalMessage: '正在检查工作空间状态...',\n projects: {},\n });\n\n const [uatForm, setUatForm] = useState({\n selectedProjects: [] as string[],\n createBranch: 'release/GDirect-',\n baseBranch: 'main',\n mergeBranch: '',\n });\n\n const [uatRunState, setUatRunState] = useState({\n isRunning: false,\n operationLogs: [] as string[],\n feedbacks: [] as string[],\n runId: '',\n });\n\n const [batchMergeForm, setBatchMergeForm] = useState({\n selectedProjects: [] as string[],\n targetBranch: 'main',\n sourceBranch: '',\n });\n\n const [batchMergeRunState, setBatchMergeRunState] = useState({\n isRunning: false,\n operationLogs: [] as string[],\n feedbacks: [] as string[],\n progress: 0,\n totalProjects: 0,\n completedProjects: 0,\n currentProject: '',\n });\n\n const [batchCreateBranchForm, setBatchCreateBranchForm] = useState({\n selectedProjects: [] as string[],\n createBranch: '',\n baseBranch: 'main',\n });\n\n const [batchCreateBranchRunState, setBatchCreateBranchRunState] = useState({\n isRunning: false,\n operationLogs: [] as string[],\n feedbacks: [] as string[],\n progress: 0,\n totalProjects: 0,\n completedProjects: 0,\n currentProject: '',\n });\n\n const [isAdmin, setIsAdmin] = useState(false);\n\n const [pendingStep, setPendingStep] = useState<{\n stepId: string;\n projectName: string;\n description: string;\n command: string;\n } | null>(null);\n const [isConfirmOpen, setIsConfirmOpen] = useState(false);\n const useStepConfirm = false;\n const [showResultDialog, setShowResultDialog] = useState(false);\n const [projectResults, setProjectResults] = useState<Array<{\n projectName: string;\n success: boolean;\n reason?: string;\n rollbackActions?: string[];\n }>>([]);\n \n const [expandedLogs, setExpandedLogs] = useState<Record<string, boolean>>({});\n\n // 页面加载时检查工作空间状态\n useEffect(() => {\n checkWorkspaceStatus();\n }, []);\n\n useEffect(() => {\n const fetchAdminStatus = async () => {\n try {\n const response = await fetch('/api/admin-status');\n const data = await response.json();\n setIsAdmin(Boolean(data?.isAdmin));\n } catch (error) {\n console.error('获取管理员状态失败:', error);\n setIsAdmin(false);\n }\n };\n fetchAdminStatus();\n }, []);\n\n // 检查工作空间状态\n const checkWorkspaceStatus = async () => {\n try {\n setState(prev => ({\n ...prev,\n isLoading: true,\n globalMessage: '正在检查工作空间状态...',\n }));\n\n const response = await fetch('/api/check-workspace');\n const data = await response.json();\n\n if (data.success) {\n const projectStates: Record<string, ProjectState> = {};\n data.projects.forEach((project: { name: string; status: ProjectStatus; message: string; needsCleanup?: boolean }) => {\n projectStates[project.name] = {\n name: project.name,\n status: project.status,\n progress: project.status === ProjectStatus.EXISTING ? 100 : 0,\n message: project.message,\n canRetry: false,\n needsCleanup: project.needsCleanup || false,\n };\n });\n\n setState(prev => ({\n ...prev,\n isLoading: false,\n projects: projectStates,\n globalMessage: data.message || '检查完成',\n }));\n } else {\n setState(prev => ({\n ...prev,\n isLoading: false,\n globalMessage: data.error || '检查工作空间状态失败',\n }));\n }\n } catch (error) {\n setState(prev => ({\n ...prev,\n isLoading: false,\n globalMessage: '无法连接到服务器,请刷新页面重试',\n }));\n console.error('检查工作空间状态失败:', error);\n }\n };\n\n // 开始初始化工作空间\n const startInitialization = () => {\n setState(prev => ({\n ...prev,\n isInitializing: true,\n isCompleted: false,\n hasCompleted: false,\n globalProgress: 0,\n globalMessage: '正在连接服务器...',\n projects: {},\n completionSummary: undefined,\n }));\n\n // 创建 EventSource 连接\n const eventSource = new EventSource('/api/initialize-workspace');\n\n eventSource.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n handleSSEMessage(data);\n } catch (error) {\n console.error('解析 SSE 消息失败:', error);\n }\n };\n\n eventSource.onerror = () => {\n setState(prev => {\n // 如果已经收到完成消息,则不显示错误(这是正常的连接关闭)\n if (prev.hasCompleted) {\n return prev;\n }\n \n return {\n ...prev,\n isInitializing: false,\n globalMessage: '连接服务器失败,请重试',\n };\n });\n eventSource.close();\n };\n\n // 监听连接关闭\n eventSource.addEventListener('error', () => {\n eventSource.close();\n });\n };\n\n // 处理 SSE 消息\n const handleSSEMessage = (data: {\n type: string;\n progress?: number;\n message?: string;\n projects?: string[];\n projectName?: string;\n error?: string;\n logType?: 'stdout' | 'stderr' | 'progress';\n content?: string;\n timestamp?: number;\n result?: {\n success: boolean;\n totalProjects: number;\n successCount: number;\n failedCount: number;\n duration: number;\n };\n }) => {\n switch (data.type) {\n case 'initialization':\n case 'workspace_created':\n case 'projects_loaded':\n setState(prev => ({\n ...prev,\n globalProgress: (data.progress as number) || 0,\n globalMessage: (data.message as string) || '',\n }));\n \n // 如果收到项目列表,初始化项目状态\n if (data.projects && Array.isArray(data.projects)) {\n const projectStates: Record<string, ProjectState> = {};\n data.projects.forEach((projectName: string) => {\n projectStates[projectName] = {\n name: projectName,\n status: ProjectStatus.PENDING,\n progress: 0,\n message: '等待开始...',\n canRetry: false,\n };\n });\n setState(prev => ({ ...prev, projects: projectStates }));\n }\n break;\n\n case 'project_existing':\n if (data.projectName) {\n const projectName = data.projectName;\n setState(prev => ({\n ...prev,\n globalProgress: data.progress ?? prev.globalProgress,\n globalMessage: data.message ?? '',\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n status: ProjectStatus.EXISTING,\n message: '项目已存在',\n progress: 100,\n canRetry: false,\n },\n },\n }));\n }\n break;\n\n case 'project_start':\n if (data.projectName) {\n const projectName = data.projectName;\n setState(prev => ({\n ...prev,\n globalProgress: data.progress ?? prev.globalProgress,\n globalMessage: data.message ?? '',\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n status: ProjectStatus.CLONING,\n message: '开始克隆...',\n progress: 0,\n },\n },\n }));\n }\n break;\n\n case 'project_progress':\n if (data.projectName) {\n const projectName = data.projectName;\n setState(prev => ({\n ...prev,\n globalProgress: data.progress ?? prev.globalProgress,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n message: data.message ?? '',\n progress: Math.min(data.progress ?? 0, 100),\n },\n },\n }));\n }\n break;\n\n case 'project_success':\n if (data.projectName) {\n const projectName = data.projectName;\n setState(prev => ({\n ...prev,\n globalProgress: data.progress ?? prev.globalProgress,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n status: ProjectStatus.SUCCESS,\n message: '克隆成功',\n progress: 100,\n canRetry: false,\n },\n },\n }));\n }\n break;\n\n case 'project_failed':\n if (data.projectName) {\n const projectName = data.projectName;\n setState(prev => ({\n ...prev,\n globalProgress: data.progress ?? prev.globalProgress,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n status: ProjectStatus.FAILED,\n message: '克隆失败',\n error: data.error,\n canRetry: true,\n },\n },\n }));\n }\n break;\n\n case 'command_log':\n if (data.projectName && data.logType && data.content !== undefined && data.timestamp) {\n const projectName = data.projectName;\n const logType = data.logType as 'stdout' | 'stderr' | 'progress';\n const content = data.content as string;\n const timestamp = data.timestamp as number;\n \n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n logs: [\n ...(prev.projects[projectName]?.logs || []),\n {\n type: logType,\n content: content,\n timestamp: timestamp,\n }\n ].slice(-1000), // 保留最新的1000条日志\n },\n },\n }));\n }\n break;\n\n case 'completion':\n setState(prev => ({\n ...prev,\n isInitializing: false,\n isCompleted: true,\n hasCompleted: true,\n globalProgress: 100,\n globalMessage: data.message ?? '初始化完成',\n completionSummary: data.result ? {\n success: data.result.success,\n totalProjects: data.result.totalProjects,\n successCount: data.result.successCount,\n failedCount: data.result.failedCount,\n duration: data.result.duration,\n } : undefined,\n }));\n break;\n\n case 'error':\n setState(prev => ({\n ...prev,\n isInitializing: false,\n hasCompleted: true,\n globalMessage: data.message ?? '发生错误',\n globalProgress: data.progress ?? prev.globalProgress,\n }));\n break;\n }\n };\n\n // 在编辑器中打开项目(使用 editor schema 协议)\n const openProject = async (projectName: string, editor: EditorType = 'cursor') => {\n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n isOpening: true,\n },\n },\n }));\n\n try {\n const response = await fetch('/api/open-project', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ projectName, editor }),\n });\n\n const result = await response.json();\n\n if (result.success && result.editorUrl) {\n // 使用编辑器 schema 协议打开项目\n // 创建临时链接并点击,这样可以触发系统调用对应的编辑器应用程序\n const link = document.createElement('a');\n link.href = result.editorUrl;\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else {\n console.error('打开项目失败:', result.error);\n }\n\n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n isOpening: false,\n },\n },\n }));\n } catch (error) {\n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n isOpening: false,\n },\n },\n }));\n console.error('打开项目失败:', error);\n }\n };\n\n // 清理不完整的项目\n const cleanupProject = async (projectName: string) => {\n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n isCleaningUp: true,\n },\n },\n }));\n\n try {\n const response = await fetch('/api/cleanup-project', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ projectName }),\n });\n\n const result = await response.json();\n\n if (result.success) {\n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n status: ProjectStatus.PENDING,\n message: '已清理,待克隆',\n isCleaningUp: false,\n needsCleanup: false,\n },\n },\n }));\n } else {\n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n isCleaningUp: false,\n error: result.error,\n },\n },\n }));\n }\n } catch (error) {\n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n isCleaningUp: false,\n error: error instanceof Error ? error.message : String(error),\n },\n },\n }));\n }\n };\n\n // 重试单个项目\n const retryProject = async (projectName: string) => {\n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n status: ProjectStatus.RETRYING,\n message: '正在重试...',\n progress: 0,\n canRetry: false,\n },\n },\n }));\n\n try {\n const response = await fetch('/api/retry-project', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ projectName }),\n });\n\n const result = await response.json();\n\n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n status: result.success ? ProjectStatus.SUCCESS : ProjectStatus.FAILED,\n message: result.message,\n error: result.error,\n progress: result.success ? 100 : prev.projects[projectName].progress,\n canRetry: !result.success,\n },\n },\n }));\n } catch (error) {\n setState(prev => ({\n ...prev,\n projects: {\n ...prev.projects,\n [projectName]: {\n ...prev.projects[projectName],\n status: ProjectStatus.FAILED,\n message: '重试失败',\n error: error instanceof Error ? error.message : String(error),\n canRetry: true,\n },\n },\n }));\n }\n };\n\n // 获取状态样式\n const getStatusColor = (status: ProjectStatus) => {\n switch (status) {\n case ProjectStatus.EXISTING:\n return 'text-green-600 bg-green-50 border-green-200';\n case ProjectStatus.SUCCESS:\n return 'text-green-600 bg-green-50 border-green-200';\n case ProjectStatus.FAILED:\n return 'text-red-600 bg-red-50 border-red-200';\n case ProjectStatus.INCOMPLETE:\n return 'text-orange-600 bg-orange-50 border-orange-200';\n case ProjectStatus.CLONING:\n case ProjectStatus.RETRYING:\n return 'text-blue-600 bg-blue-50 border-blue-200';\n case ProjectStatus.PENDING:\n return 'text-gray-600 bg-gray-50 border-gray-200';\n default:\n return 'text-gray-600 bg-gray-50 border-gray-200';\n }\n };\n\n const getStatusText = (status: ProjectStatus) => {\n switch (status) {\n case ProjectStatus.PENDING:\n return '待克隆';\n case ProjectStatus.EXISTING:\n return '已存在';\n case ProjectStatus.CLONING:\n return '克隆中';\n case ProjectStatus.SUCCESS:\n return '成功';\n case ProjectStatus.FAILED:\n return '失败';\n case ProjectStatus.INCOMPLETE:\n return '不完整';\n case ProjectStatus.RETRYING:\n return '重试中';\n default:\n return '未知';\n }\n };\n\n // 判断是否所有项目都已存在\n const isAllProjectsExisting = () => {\n const projectValues = Object.values(state.projects);\n return projectValues.length > 0 && \n projectValues.every(project => project.status === ProjectStatus.EXISTING);\n };\n\n // 导航到项目配置页面\n const navigateToProjectConfig = (projectName: string) => {\n router.push(`/configuration?project=${encodeURIComponent(projectName)}`);\n };\n\n const handleProjectSelection = (event: ChangeEvent<HTMLSelectElement>) => {\n const selectedProjects = Array.from(event.target.selectedOptions).map(option => option.value);\n setUatForm(prev => ({\n ...prev,\n selectedProjects,\n }));\n };\n\n const handleBatchMergeProjectSelection = (event: ChangeEvent<HTMLSelectElement>) => {\n const selectedProjects = Array.from(event.target.selectedOptions).map(option => option.value);\n setBatchMergeForm(prev => ({\n ...prev,\n selectedProjects,\n }));\n };\n\n const handleBatchCreateBranchProjectSelection = (event: ChangeEvent<HTMLSelectElement>) => {\n const selectedProjects = Array.from(event.target.selectedOptions).map(option => option.value);\n setBatchCreateBranchForm(prev => ({\n ...prev,\n selectedProjects,\n }));\n };\n\n const updateUatField = (\n field: 'createBranch' | 'baseBranch' | 'mergeBranch',\n value: string\n ) => {\n setUatForm(prev => ({\n ...prev,\n [field]: value,\n }));\n };\n\n const updateBatchMergeField = (\n field: 'targetBranch' | 'sourceBranch',\n value: string,\n ) => {\n setBatchMergeForm(prev => ({\n ...prev,\n [field]: value,\n }));\n };\n\n const updateBatchCreateBranchField = (\n field: 'createBranch' | 'baseBranch',\n value: string,\n ) => {\n setBatchCreateBranchForm(prev => ({\n ...prev,\n [field]: value,\n }));\n };\n\n const runBatchBranchMerge = async (dryRun: boolean) => {\n const feedbacks: string[] = [];\n\n if (batchMergeForm.selectedProjects.length === 0) {\n feedbacks.push('请先选择至少一个项目。');\n }\n\n if (!batchMergeForm.targetBranch.trim()) {\n feedbacks.push('请填写合入分支名称。');\n }\n\n if (!batchMergeForm.sourceBranch.trim()) {\n feedbacks.push('请填写被合入分支名称。');\n }\n\n if (feedbacks.length > 0) {\n setBatchMergeRunState({\n isRunning: false,\n operationLogs: [],\n feedbacks,\n progress: 0,\n totalProjects: 0,\n completedProjects: 0,\n currentProject: '',\n });\n return;\n }\n\n const totalProjects = batchMergeForm.selectedProjects.length;\n setBatchMergeRunState({\n isRunning: true,\n operationLogs: [`开始批量分支合并,共 ${totalProjects} 个项目...`],\n feedbacks: [],\n progress: 0,\n totalProjects,\n completedProjects: 0,\n currentProject: '',\n });\n\n const allProjectResults: Array<{\n projectName: string;\n success: boolean;\n reason?: string;\n rollbackActions?: string[];\n }> = [];\n const allFeedbacks: string[] = [];\n\n for (let index = 0; index < batchMergeForm.selectedProjects.length; index++) {\n const projectName = batchMergeForm.selectedProjects[index];\n setBatchMergeRunState(prev => ({\n ...prev,\n currentProject: projectName,\n completedProjects: index,\n progress: Math.round((index / totalProjects) * 100),\n operationLogs: [\n ...prev.operationLogs,\n `[进度] ${index + 1}/${totalProjects} 开始处理项目 ${projectName}`,\n ],\n }));\n\n try {\n const response = await fetch('/api/admin-git-batch-merge', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projects: [projectName],\n targetBranch: batchMergeForm.targetBranch.trim(),\n sourceBranch: batchMergeForm.sourceBranch.trim(),\n dryRun,\n }),\n });\n\n const result = await response.json();\n const operationLogs = Array.isArray(result.operationLogs) ? result.operationLogs : [];\n const feedback = Array.isArray(result.feedbacks) ? result.feedbacks : [result.error || '执行失败'];\n\n setBatchMergeRunState(prev => ({\n ...prev,\n operationLogs: [...prev.operationLogs, ...operationLogs],\n feedbacks: [...prev.feedbacks, ...feedback],\n }));\n\n allFeedbacks.push(...feedback);\n if (Array.isArray(result.projectResults)) {\n allProjectResults.push(...result.projectResults);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : '执行失败';\n setBatchMergeRunState(prev => ({\n ...prev,\n operationLogs: [...prev.operationLogs, `[${projectName}] 请求失败: ${message}`],\n feedbacks: [...prev.feedbacks, `[${projectName}] ${message}`],\n }));\n allFeedbacks.push(`[${projectName}] ${message}`);\n allProjectResults.push({\n projectName,\n success: false,\n reason: message,\n });\n }\n }\n\n setBatchMergeRunState(prev => ({\n ...prev,\n isRunning: false,\n progress: 100,\n completedProjects: totalProjects,\n currentProject: '',\n operationLogs: [...prev.operationLogs, '批量分支合并执行完成。'],\n feedbacks: allFeedbacks.length > 0 ? allFeedbacks : prev.feedbacks,\n }));\n\n if (allProjectResults.length > 0) {\n setProjectResults(allProjectResults);\n setShowResultDialog(true);\n } else {\n setProjectResults([]);\n setShowResultDialog(false);\n }\n };\n\n const runBatchCreateBranch = async (dryRun: boolean) => {\n const feedbacks: string[] = [];\n\n if (batchCreateBranchForm.selectedProjects.length === 0) {\n feedbacks.push('请先选择至少一个项目。');\n }\n\n if (!batchCreateBranchForm.createBranch.trim()) {\n feedbacks.push('请填写新分支名称。');\n }\n\n if (!batchCreateBranchForm.baseBranch.trim()) {\n feedbacks.push('请填写来源分支名称。');\n }\n\n if (feedbacks.length > 0) {\n setBatchCreateBranchRunState({\n isRunning: false,\n operationLogs: [],\n feedbacks,\n progress: 0,\n totalProjects: 0,\n completedProjects: 0,\n currentProject: '',\n });\n return;\n }\n\n const totalProjects = batchCreateBranchForm.selectedProjects.length;\n setBatchCreateBranchRunState({\n isRunning: true,\n operationLogs: [`开始批量新建分支,共 ${totalProjects} 个项目...`],\n feedbacks: [],\n progress: 0,\n totalProjects,\n completedProjects: 0,\n currentProject: '',\n });\n\n const allProjectResults: Array<{\n projectName: string;\n success: boolean;\n reason?: string;\n rollbackActions?: string[];\n }> = [];\n const allFeedbacks: string[] = [];\n\n for (let index = 0; index < batchCreateBranchForm.selectedProjects.length; index++) {\n const projectName = batchCreateBranchForm.selectedProjects[index];\n setBatchCreateBranchRunState(prev => ({\n ...prev,\n currentProject: projectName,\n completedProjects: index,\n progress: Math.round((index / totalProjects) * 100),\n operationLogs: [\n ...prev.operationLogs,\n `[进度] ${index + 1}/${totalProjects} 开始处理项目 ${projectName}`,\n ],\n }));\n\n try {\n const response = await fetch('/api/admin-git-batch-create-branch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projects: [projectName],\n createBranch: batchCreateBranchForm.createBranch.trim(),\n baseBranch: batchCreateBranchForm.baseBranch.trim(),\n dryRun,\n }),\n });\n\n const result = await response.json();\n const operationLogs = Array.isArray(result.operationLogs) ? result.operationLogs : [];\n const feedback = Array.isArray(result.feedbacks) ? result.feedbacks : [result.error || '执行失败'];\n\n setBatchCreateBranchRunState(prev => ({\n ...prev,\n operationLogs: [...prev.operationLogs, ...operationLogs],\n feedbacks: [...prev.feedbacks, ...feedback],\n }));\n\n allFeedbacks.push(...feedback);\n if (Array.isArray(result.projectResults)) {\n allProjectResults.push(...result.projectResults);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : '执行失败';\n setBatchCreateBranchRunState(prev => ({\n ...prev,\n operationLogs: [...prev.operationLogs, `[${projectName}] 请求失败: ${message}`],\n feedbacks: [...prev.feedbacks, `[${projectName}] ${message}`],\n }));\n allFeedbacks.push(`[${projectName}] ${message}`);\n allProjectResults.push({\n projectName,\n success: false,\n reason: message,\n });\n }\n }\n\n setBatchCreateBranchRunState(prev => ({\n ...prev,\n isRunning: false,\n progress: 100,\n completedProjects: totalProjects,\n currentProject: '',\n operationLogs: [...prev.operationLogs, '批量新建分支执行完成。'],\n feedbacks: allFeedbacks.length > 0 ? allFeedbacks : prev.feedbacks,\n }));\n\n if (allProjectResults.length > 0) {\n setProjectResults(allProjectResults);\n setShowResultDialog(true);\n } else {\n setProjectResults([]);\n setShowResultDialog(false);\n }\n };\n\n const runUatGitFlow = async (dryRun: boolean) => {\n const feedbacks: string[] = [];\n\n if (uatForm.selectedProjects.length === 0) {\n feedbacks.push('请先选择至少一个项目。');\n }\n\n if (!uatForm.createBranch.trim()) {\n feedbacks.push('请填写创建分支名。');\n }\n\n if (!uatForm.baseBranch.trim()) {\n feedbacks.push('请填写从 origin 哪个分支创建。');\n }\n\n if (!uatForm.mergeBranch.trim()) {\n feedbacks.push('请填写被合并分支名称。');\n }\n\n if (feedbacks.length > 0) {\n setUatRunState({\n isRunning: false,\n operationLogs: [],\n feedbacks,\n runId: '',\n });\n return;\n }\n\n const runId = `uat-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n\n setUatRunState({\n isRunning: true,\n operationLogs: [],\n feedbacks: [],\n runId,\n });\n\n if (dryRun || !useStepConfirm) {\n try {\n const response = await fetch('/api/uat-git-flow', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projects: uatForm.selectedProjects,\n createBranch: uatForm.createBranch.trim(),\n baseBranch: uatForm.baseBranch.trim(),\n mergeBranch: uatForm.mergeBranch.trim(),\n dryRun,\n runId,\n }),\n });\n\n const result = await response.json();\n\n setUatRunState({\n isRunning: false,\n operationLogs: Array.isArray(result.operationLogs) ? result.operationLogs : [],\n feedbacks: Array.isArray(result.feedbacks) ? result.feedbacks : [result.error || '执行失败'],\n runId: '',\n });\n if (Array.isArray(result.projectResults)) {\n setProjectResults(result.projectResults);\n setShowResultDialog(true);\n }\n } catch (error) {\n setUatRunState({\n isRunning: false,\n operationLogs: [],\n feedbacks: [error instanceof Error ? error.message : '执行失败'],\n runId: '',\n });\n setProjectResults([]);\n setShowResultDialog(false);\n }\n return;\n }\n\n try {\n const response = await fetch('/api/uat-git-flow/step', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n action: 'start',\n projects: uatForm.selectedProjects,\n createBranch: uatForm.createBranch.trim(),\n baseBranch: uatForm.baseBranch.trim(),\n mergeBranch: uatForm.mergeBranch.trim(),\n runId,\n }),\n });\n\n const result = await response.json();\n const logs = Array.isArray(result.operationLogs) ? result.operationLogs : [];\n const feedback = Array.isArray(result.feedbacks) ? result.feedbacks : [result.error || '执行失败'];\n\n if (!result.success) {\n setUatRunState({\n isRunning: false,\n operationLogs: logs,\n feedbacks: feedback,\n runId: '',\n });\n return;\n }\n\n setUatRunState(prev => ({\n ...prev,\n isRunning: !result.isComplete,\n operationLogs: logs,\n feedbacks: feedback,\n runId,\n }));\n\n if (result.nextStep) {\n setPendingStep(result.nextStep);\n setIsConfirmOpen(true);\n } else {\n setPendingStep(null);\n setIsConfirmOpen(false);\n setUatRunState(prev => ({ ...prev, isRunning: false, runId: '' }));\n if (Array.isArray(result.projectResults)) {\n setProjectResults(result.projectResults);\n setShowResultDialog(true);\n }\n }\n } catch (error) {\n setUatRunState({\n isRunning: false,\n operationLogs: [],\n feedbacks: [error instanceof Error ? error.message : '执行失败'],\n runId: '',\n });\n setPendingStep(null);\n setIsConfirmOpen(false);\n }\n };\n\n const confirmNextStep = async () => {\n if (!pendingStep || !uatRunState.runId) return;\n try {\n const response = await fetch('/api/uat-git-flow/step', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n action: 'execute',\n runId: uatRunState.runId,\n stepId: pendingStep.stepId,\n }),\n });\n\n const result = await response.json();\n const logs = Array.isArray(result.operationLogs) ? result.operationLogs : [];\n const feedback = Array.isArray(result.feedbacks) ? result.feedbacks : [result.error || '执行失败'];\n\n if (!result.success) {\n setUatRunState(prev => ({\n ...prev,\n isRunning: false,\n operationLogs: logs,\n feedbacks: feedback,\n runId: '',\n }));\n setPendingStep(null);\n setIsConfirmOpen(false);\n return;\n }\n\n setUatRunState(prev => ({\n ...prev,\n operationLogs: logs,\n feedbacks: feedback,\n isRunning: !result.isComplete,\n runId: result.isComplete ? '' : prev.runId,\n }));\n\n if (result.nextStep) {\n setPendingStep(result.nextStep);\n setIsConfirmOpen(true);\n } else {\n setPendingStep(null);\n setIsConfirmOpen(false);\n if (Array.isArray(result.projectResults)) {\n setProjectResults(result.projectResults);\n setShowResultDialog(true);\n }\n }\n } catch (error) {\n setUatRunState(prev => ({\n ...prev,\n isRunning: false,\n operationLogs: prev.operationLogs,\n feedbacks: [...prev.feedbacks, error instanceof Error ? error.message : '执行失败'],\n runId: '',\n }));\n setPendingStep(null);\n setIsConfirmOpen(false);\n }\n };\n\n const abortUatGitFlow = async () => {\n if (!uatRunState.runId) return;\n try {\n const response = await fetch(useStepConfirm ? '/api/uat-git-flow/step' : '/api/uat-git-flow/abort', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: useStepConfirm\n ? JSON.stringify({ action: 'abort', runId: uatRunState.runId })\n : JSON.stringify({ runId: uatRunState.runId }),\n });\n const result = await response.json();\n if (result && Array.isArray(result.operationLogs)) {\n setUatRunState(prev => ({\n ...prev,\n isRunning: false,\n operationLogs: result.operationLogs,\n feedbacks: Array.isArray(result.feedbacks) ? result.feedbacks : prev.feedbacks,\n runId: '',\n }));\n } else {\n setUatRunState(prev => ({\n ...prev,\n isRunning: false,\n runId: '',\n }));\n }\n if (Array.isArray(result.projectResults)) {\n setProjectResults(result.projectResults);\n setShowResultDialog(true);\n }\n setPendingStep(null);\n setIsConfirmOpen(false);\n } catch (error) {\n setUatRunState(prev => ({\n ...prev,\n feedbacks: [...prev.feedbacks, error instanceof Error ? error.message : '中断失败'],\n }));\n }\n };\n\n const handleConfirmOpenChange = (open: boolean) => {\n if (!open && pendingStep && uatRunState.isRunning) {\n return;\n }\n setIsConfirmOpen(open);\n };\n\n return (\n <div className=\"container mx-auto p-4 sm:p-6 md:p-8\">\n <div className=\"flex justify-between items-center mb-6\">\n <h1 className=\"text-2xl font-bold\">项目初始化</h1>\n {state.isLoading ? (\n <Button disabled>检查中...</Button>\n ) : (\n <Button \n onClick={startInitialization}\n disabled={state.isInitializing}\n >\n {state.isInitializing ? '初始化中...' : '创建项目空间'}\n </Button>\n )}\n </div>\n\n {/* 全局进度 */}\n {(state.isInitializing || state.isCompleted) && !isAllProjectsExisting() && (\n <div className=\"mb-6 p-4 bg-gray-50 rounded-lg\">\n <div className=\"flex justify-between items-center mb-2\">\n <span className=\"text-sm font-medium\">{state.globalMessage}</span>\n <span className=\"text-sm text-gray-600\">{state.globalProgress}%</span>\n </div>\n <div className=\"w-full bg-gray-200 rounded-full h-2\">\n <div \n className=\"bg-blue-600 h-2 rounded-full transition-all duration-300\"\n style={{ width: `${state.globalProgress}%` }}\n />\n </div>\n </div>\n )}\n\n {/* 完成总结 */}\n {state.completionSummary && !isAllProjectsExisting() && (\n <div className={`mb-6 p-4 rounded-lg border ${\n state.completionSummary.success \n ? 'bg-green-50 border-green-200' \n : 'bg-yellow-50 border-yellow-200'\n }`}>\n <h3 className=\"font-semibold mb-2\">初始化完成</h3>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm\">\n <div>总项目数: {state.completionSummary.totalProjects}</div>\n <div className=\"text-green-600\">成功: {state.completionSummary.successCount}</div>\n <div className=\"text-red-600\">失败: {state.completionSummary.failedCount}</div>\n <div>耗时: {Math.round(state.completionSummary.duration / 1000)}s</div>\n </div>\n </div>\n )}\n\n {/* 项目列表 */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4\">\n {Object.keys(state.projects).length > 0 ? (\n Object.values(state.projects).map((project) => (\n <div \n key={project.name} \n className={`border rounded-lg p-4 ${getStatusColor(project.status)}`}\n >\n <div className=\"flex justify-between items-start mb-2\">\n <h2 \n className=\"font-semibold cursor-pointer hover:text-blue-600 transition-colors\"\n onClick={() => navigateToProjectConfig(project.name)}\n title=\"点击进入项目配置\"\n >\n {project.name}\n </h2>\n <span className=\"text-xs px-2 py-1 rounded-full bg-white\">\n {getStatusText(project.status)}\n </span>\n </div>\n \n <p className=\"text-sm mb-2\">{project.message}</p>\n \n {project.status === ProjectStatus.CLONING || project.status === ProjectStatus.RETRYING ? (\n <div className=\"mb-2\">\n <div className=\"w-full bg-white rounded-full h-1\">\n <div \n className=\"bg-current h-1 rounded-full transition-all duration-300\"\n style={{ width: `${project.progress}%` }}\n />\n </div>\n <span className=\"text-xs\">{project.progress}%</span>\n </div>\n ) : null}\n\n {project.error && (\n <p className=\"text-xs text-red-600 mb-2\">{project.error}</p>\n )}\n\n <div className=\"space-y-2\">\n {project.canRetry && (\n <Button \n size=\"sm\"\n variant=\"outline\"\n onClick={() => retryProject(project.name)}\n className=\"w-full\"\n >\n 重试\n </Button>\n )}\n \n {project.needsCleanup && project.status === ProjectStatus.INCOMPLETE && (\n <Button \n size=\"sm\"\n variant=\"destructive\"\n onClick={() => cleanupProject(project.name)}\n disabled={project.isCleaningUp}\n className=\"w-full\"\n >\n {project.isCleaningUp ? '清理中...' : '清理项目'}\n </Button>\n )}\n \n {(project.status === ProjectStatus.EXISTING || project.status === ProjectStatus.SUCCESS) && (\n <EditorSplitButton\n onOpen={(editor) => openProject(project.name, editor)}\n loading={project.isOpening}\n loadingText=\"打开中...\"\n size=\"sm\"\n variant=\"default\"\n className=\"w-full\"\n />\n )}\n \n {project.logs && project.logs.length > 0 && (\n <Button \n size=\"sm\"\n variant=\"outline\"\n onClick={() => setExpandedLogs(prev => ({\n ...prev,\n [project.name]: !prev[project.name]\n }))}\n className=\"w-full\"\n >\n {expandedLogs[project.name] ? '隐藏日志' : `查看日志 (${project.logs.length})`}\n </Button>\n )}\n </div>\n\n {/* 日志显示区域 */}\n {expandedLogs[project.name] && project.logs && project.logs.length > 0 && (\n <div className=\"mt-3 border-t pt-3\">\n <div className=\"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto\">\n {project.logs.map((log, index) => (\n <div key={index} className={`mb-1 ${\n log.type === 'stderr' \n ? 'text-red-400' \n : log.type === 'progress' \n ? 'text-yellow-400' \n : 'text-green-400'\n }`}>\n <span className=\"text-gray-500 mr-2\">\n {new Date(log.timestamp).toLocaleTimeString()}\n </span>\n <span className=\"text-blue-400 mr-2\">[{log.type}]</span>\n <span className=\"whitespace-pre-wrap\">{log.content}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n ))\n ) : (\n <div className=\"col-span-full text-center text-gray-500 py-8\">\n {state.isLoading ? '正在检查项目状态...' : \n state.isInitializing ? '正在加载项目...' : \n '点击\"创建项目空间\"开始初始化'}\n </div>\n )}\n </div>\n\n {/* UAT Git 操作流 */}\n {isAdmin && (\n <div className=\"mt-8 rounded-lg border bg-white p-4 shadow-sm\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4\">\n <h2 className=\"text-lg font-semibold\">UAT上线前 Git 操作流</h2>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => runUatGitFlow(false)}\n disabled={uatRunState.isRunning}\n >\n {uatRunState.isRunning ? '执行中...' : '执行'}\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => runUatGitFlow(true)}\n disabled={uatRunState.isRunning}\n >\n DRY RUN\n </Button>\n <Button\n variant=\"destructive\"\n onClick={abortUatGitFlow}\n disabled={!uatRunState.isRunning}\n >\n 中断\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"uat-projects\">选择项目</Label>\n <select\n id=\"uat-projects\"\n multiple\n value={uatForm.selectedProjects}\n onChange={handleProjectSelection}\n 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]\"\n >\n {Object.keys(state.projects).length === 0 ? (\n <option value=\"\" disabled>暂无可用项目</option>\n ) : (\n Object.keys(state.projects).map(projectName => (\n <option key={projectName} value={projectName}>\n {projectName}\n </option>\n ))\n )}\n </select>\n <p className=\"text-xs text-gray-500\">按住 Command / Ctrl 可多选</p>\n </div>\n\n <div className=\"grid gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"uat-create-branch\">创建分支名</Label>\n <Input\n id=\"uat-create-branch\"\n value={uatForm.createBranch}\n onChange={(event) => updateUatField('createBranch', event.target.value)}\n placeholder=\"例如: release/uat-2026-01\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"uat-base-branch\">从 origin 哪个分支创建</Label>\n <Input\n id=\"uat-base-branch\"\n value={uatForm.baseBranch}\n onChange={(event) => updateUatField('baseBranch', event.target.value)}\n placeholder=\"例如: develop\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"uat-merge-branch\">被合并分支名称</Label>\n <Input\n id=\"uat-merge-branch\"\n value={uatForm.mergeBranch}\n onChange={(event) => updateUatField('mergeBranch', event.target.value)}\n placeholder=\"例如: release/candidate\"\n />\n </div>\n </div>\n </div>\n\n <div className=\"mt-6 grid gap-4 md:grid-cols-2\">\n <div className=\"rounded-lg border p-3\">\n <h3 className=\"text-sm font-semibold mb-2\">操作记录</h3>\n {uatRunState.operationLogs.length === 0 ? (\n <p className=\"text-xs text-gray-500\">暂无记录</p>\n ) : (\n <div className=\"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto\">\n {uatRunState.operationLogs.map((log, index) => (\n <div key={index} className=\"mb-1 whitespace-pre-wrap\">\n {log}\n </div>\n ))}\n </div>\n )}\n </div>\n <div className=\"rounded-lg border p-3\">\n <h3 className=\"text-sm font-semibold mb-2\">反馈信息</h3>\n {uatRunState.feedbacks.length === 0 ? (\n <p className=\"text-xs text-gray-500\">暂无反馈</p>\n ) : (\n <div className=\"space-y-1 text-sm\">\n {uatRunState.feedbacks.map((message, index) => (\n <div key={index} className=\"rounded bg-gray-50 px-2 py-1 text-gray-700\">\n {message}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n {isAdmin && (\n <div className=\"mt-8 rounded-lg border bg-white p-4 shadow-sm\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4\">\n <h2 className=\"text-lg font-semibold\">常用 Git 分支操作 · 批量分支合并</h2>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => runBatchBranchMerge(false)}\n disabled={batchMergeRunState.isRunning}\n >\n {batchMergeRunState.isRunning ? '执行中...' : '执行'}\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => runBatchBranchMerge(true)}\n disabled={batchMergeRunState.isRunning}\n >\n DRY RUN\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"batch-merge-projects\">选择项目</Label>\n <select\n id=\"batch-merge-projects\"\n multiple\n value={batchMergeForm.selectedProjects}\n onChange={handleBatchMergeProjectSelection}\n 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]\"\n >\n {Object.keys(state.projects).length === 0 ? (\n <option value=\"\" disabled>暂无可用项目</option>\n ) : (\n Object.keys(state.projects).map(projectName => (\n <option key={projectName} value={projectName}>\n {projectName}\n </option>\n ))\n )}\n </select>\n <p className=\"text-xs text-gray-500\">按住 Command / Ctrl 可多选</p>\n </div>\n\n <div className=\"grid gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"batch-merge-target-branch\">合入分支名称</Label>\n <Input\n id=\"batch-merge-target-branch\"\n value={batchMergeForm.targetBranch}\n onChange={(event) => updateBatchMergeField('targetBranch', event.target.value)}\n placeholder=\"例如: main\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"batch-merge-source-branch\">被合入分支名称</Label>\n <Input\n id=\"batch-merge-source-branch\"\n value={batchMergeForm.sourceBranch}\n onChange={(event) => updateBatchMergeField('sourceBranch', event.target.value)}\n placeholder=\"例如: release/candidate\"\n />\n </div>\n </div>\n </div>\n\n {(batchMergeRunState.isRunning || batchMergeRunState.progress > 0) && (\n <div className=\"mt-4 rounded-lg border p-3\">\n <div className=\"flex justify-between items-center mb-2 text-sm\">\n <span>\n 进度: {batchMergeRunState.completedProjects}/{batchMergeRunState.totalProjects}\n {batchMergeRunState.currentProject ? ` · 当前项目: ${batchMergeRunState.currentProject}` : ''}\n </span>\n <span>{batchMergeRunState.progress}%</span>\n </div>\n <div className=\"w-full bg-gray-200 rounded-full h-2\">\n <div\n className=\"bg-blue-600 h-2 rounded-full transition-all duration-300\"\n style={{ width: `${batchMergeRunState.progress}%` }}\n />\n </div>\n </div>\n )}\n\n <div className=\"mt-6 grid gap-4 md:grid-cols-2\">\n <div className=\"rounded-lg border p-3\">\n <h3 className=\"text-sm font-semibold mb-2\">操作记录</h3>\n {batchMergeRunState.operationLogs.length === 0 ? (\n <p className=\"text-xs text-gray-500\">暂无记录</p>\n ) : (\n <div className=\"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto\">\n {batchMergeRunState.operationLogs.map((log, index) => (\n <div key={index} className=\"mb-1 whitespace-pre-wrap\">\n {log}\n </div>\n ))}\n </div>\n )}\n </div>\n <div className=\"rounded-lg border p-3\">\n <h3 className=\"text-sm font-semibold mb-2\">反馈信息</h3>\n {batchMergeRunState.feedbacks.length === 0 ? (\n <p className=\"text-xs text-gray-500\">暂无反馈</p>\n ) : (\n <div className=\"space-y-1 text-sm\">\n {batchMergeRunState.feedbacks.map((message, index) => (\n <div key={index} className=\"rounded bg-gray-50 px-2 py-1 text-gray-700\">\n {message}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n {isAdmin && (\n <div className=\"mt-8 rounded-lg border bg-white p-4 shadow-sm\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4\">\n <h2 className=\"text-lg font-semibold\">常用 Git 分支操作 · 批量新建分支</h2>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => runBatchCreateBranch(false)}\n disabled={batchCreateBranchRunState.isRunning}\n >\n {batchCreateBranchRunState.isRunning ? '执行中...' : '执行'}\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => runBatchCreateBranch(true)}\n disabled={batchCreateBranchRunState.isRunning}\n >\n DRY RUN\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"batch-create-branch-projects\">选择项目</Label>\n <select\n id=\"batch-create-branch-projects\"\n multiple\n value={batchCreateBranchForm.selectedProjects}\n onChange={handleBatchCreateBranchProjectSelection}\n 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]\"\n >\n {Object.keys(state.projects).length === 0 ? (\n <option value=\"\" disabled>暂无可用项目</option>\n ) : (\n Object.keys(state.projects).map(projectName => (\n <option key={projectName} value={projectName}>\n {projectName}\n </option>\n ))\n )}\n </select>\n <p className=\"text-xs text-gray-500\">按住 Command / Ctrl 可多选</p>\n </div>\n\n <div className=\"grid gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"batch-create-branch-name\">新分支名称</Label>\n <Input\n id=\"batch-create-branch-name\"\n value={batchCreateBranchForm.createBranch}\n onChange={(event) => updateBatchCreateBranchField('createBranch', event.target.value)}\n placeholder=\"例如: release/2026-03\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"batch-create-branch-base\">来源分支名称</Label>\n <Input\n id=\"batch-create-branch-base\"\n value={batchCreateBranchForm.baseBranch}\n onChange={(event) => updateBatchCreateBranchField('baseBranch', event.target.value)}\n placeholder=\"例如: main\"\n />\n </div>\n </div>\n </div>\n\n {(batchCreateBranchRunState.isRunning || batchCreateBranchRunState.progress > 0) && (\n <div className=\"mt-4 rounded-lg border p-3\">\n <div className=\"flex justify-between items-center mb-2 text-sm\">\n <span>\n 进度: {batchCreateBranchRunState.completedProjects}/{batchCreateBranchRunState.totalProjects}\n {batchCreateBranchRunState.currentProject ? ` · 当前项目: ${batchCreateBranchRunState.currentProject}` : ''}\n </span>\n <span>{batchCreateBranchRunState.progress}%</span>\n </div>\n <div className=\"w-full bg-gray-200 rounded-full h-2\">\n <div\n className=\"bg-blue-600 h-2 rounded-full transition-all duration-300\"\n style={{ width: `${batchCreateBranchRunState.progress}%` }}\n />\n </div>\n </div>\n )}\n\n <div className=\"mt-6 grid gap-4 md:grid-cols-2\">\n <div className=\"rounded-lg border p-3\">\n <h3 className=\"text-sm font-semibold mb-2\">操作记录</h3>\n {batchCreateBranchRunState.operationLogs.length === 0 ? (\n <p className=\"text-xs text-gray-500\">暂无记录</p>\n ) : (\n <div className=\"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto\">\n {batchCreateBranchRunState.operationLogs.map((log, index) => (\n <div key={index} className=\"mb-1 whitespace-pre-wrap\">\n {log}\n </div>\n ))}\n </div>\n )}\n </div>\n <div className=\"rounded-lg border p-3\">\n <h3 className=\"text-sm font-semibold mb-2\">反馈信息</h3>\n {batchCreateBranchRunState.feedbacks.length === 0 ? (\n <p className=\"text-xs text-gray-500\">暂无反馈</p>\n ) : (\n <div className=\"space-y-1 text-sm\">\n {batchCreateBranchRunState.feedbacks.map((message, index) => (\n <div key={index} className=\"rounded bg-gray-50 px-2 py-1 text-gray-700\">\n {message}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n <Dialog open={useStepConfirm && isConfirmOpen} onOpenChange={handleConfirmOpenChange}>\n <DialogContent showCloseButton={false}>\n <DialogHeader>\n <DialogTitle>确认执行下一步</DialogTitle>\n <DialogDescription>\n {pendingStep ? `${pendingStep.projectName} · ${pendingStep.description}` : '准备下一步执行'}\n </DialogDescription>\n </DialogHeader>\n <div className=\"rounded-md border bg-gray-50 p-3 text-sm font-mono text-gray-700\">\n {pendingStep ? pendingStep.command : ''}\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={abortUatGitFlow}>\n 取消执行\n </Button>\n <Button onClick={confirmNextStep} disabled={!pendingStep}>\n 确认并执行\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n <Dialog open={isAdmin && showResultDialog} onOpenChange={setShowResultDialog}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>操作结果</DialogTitle>\n <DialogDescription>查看所有项目执行结果</DialogDescription>\n </DialogHeader>\n <div className=\"space-y-2\">\n {projectResults.length === 0 ? (\n <p className=\"text-sm text-gray-500\">暂无结果</p>\n ) : (\n projectResults.map((result) => (\n <div\n key={result.projectName}\n className={`rounded-md border px-3 py-2 text-sm ${\n result.success ? 'bg-green-50 text-green-700' : 'bg-red-50 text-red-700'\n }`}\n >\n <div className=\"flex items-start justify-between\">\n <span className=\"font-medium\">{result.projectName}</span>\n <span className=\"ml-4 text-right\">\n {result.success ? '成功' : result.reason || '失败'}\n </span>\n </div>\n {!result.success && result.rollbackActions && result.rollbackActions.length > 0 && (\n <div className=\"mt-2 text-xs text-gray-600\">\n <div className=\"font-semibold text-gray-700\">已回滚操作:</div>\n <ul className=\"mt-1 list-disc pl-4\">\n {result.rollbackActions.map((action, index) => (\n <li key={`${result.projectName}-rollback-${index}`}>{action}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ))\n )}\n </div>\n <DialogFooter>\n <Button onClick={() => setShowResultDialog(false)}>关闭</Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n );\n};\n\nexport default ProjectInitializer;\n"],"names":[],"mappings":"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","ignoreList":[0,1]}
|
package/dist/server/.next/trace
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":133,"timestamp":168996906429,"id":4,"parentId":1,"tags":{},"startTime":1768981440586,"traceId":"1e72c249a63ade35"},{"name":"load-custom-routes","duration":1051,"timestamp":168996906604,"id":5,"parentId":1,"tags":{},"startTime":1768981440587,"traceId":"1e72c249a63ade35"},{"name":"create-dist-dir","duration":200,"timestamp":168996940523,"id":6,"parentId":1,"tags":{},"startTime":1768981440621,"traceId":"1e72c249a63ade35"},{"name":"create-pages-mapping","duration":102,"timestamp":168997016621,"id":7,"parentId":1,"tags":{},"startTime":1768981440697,"traceId":"1e72c249a63ade35"},{"name":"collect-app-paths","duration":1967,"timestamp":168997016742,"id":8,"parentId":1,"tags":{},"startTime":1768981440697,"traceId":"1e72c249a63ade35"},{"name":"create-app-mapping","duration":1570,"timestamp":168997018721,"id":9,"parentId":1,"tags":{},"startTime":1768981440699,"traceId":"1e72c249a63ade35"},{"name":"public-dir-conflict-check","duration":247,"timestamp":168997020658,"id":10,"parentId":1,"tags":{},"startTime":1768981440701,"traceId":"1e72c249a63ade35"},{"name":"generate-routes-manifest","duration":1400,"timestamp":168997021027,"id":11,"parentId":1,"tags":{},"startTime":1768981440701,"traceId":"1e72c249a63ade35"},{"name":"verify-and-lint","duration":1507482,"timestamp":168999770474,"id":15,"parentId":1,"tags":{},"startTime":1768981443451,"traceId":"1e72c249a63ade35"},{"name":"verify-typescript-setup","duration":2356165,"timestamp":168999769364,"id":14,"parentId":1,"tags":{},"startTime":1768981443449,"traceId":"1e72c249a63ade35"},{"name":"check-static-error-page","duration":1504,"timestamp":169002133338,"id":18,"parentId":17,"tags":{},"startTime":1768981445813,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":2110,"timestamp":169002163765,"id":19,"parentId":17,"tags":{"page":"/_app"},"startTime":1768981445844,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":1654,"timestamp":169002164237,"id":21,"parentId":17,"tags":{"page":"/_document"},"startTime":1768981445844,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":1737,"timestamp":169002164189,"id":20,"parentId":17,"tags":{"page":"/_error"},"startTime":1768981445844,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":196933,"timestamp":169002167192,"id":58,"parentId":25,"tags":{},"startTime":1768981445847,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":199857,"timestamp":169002164381,"id":25,"parentId":17,"tags":{"page":"/api/check-mock-intercept"},"startTime":1768981445844,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":198092,"timestamp":169002167147,"id":57,"parentId":24,"tags":{},"startTime":1768981445847,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":200903,"timestamp":169002164367,"id":24,"parentId":17,"tags":{"page":"/api/all-projects-envs"},"startTime":1768981445844,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":200557,"timestamp":169002167412,"id":63,"parentId":28,"tags":{},"startTime":1768981445847,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":203521,"timestamp":169002164467,"id":28,"parentId":17,"tags":{"page":"/api/cleanup-project"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":206824,"timestamp":169002167582,"id":65,"parentId":35,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":209905,"timestamp":169002164520,"id":35,"parentId":17,"tags":{"page":"/api/microapp-proxy-config"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":208349,"timestamp":169002167336,"id":60,"parentId":30,"tags":{},"startTime":1768981445847,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":211213,"timestamp":169002164490,"id":30,"parentId":17,"tags":{"page":"/api/delete-mock-api"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":209107,"timestamp":169002167603,"id":66,"parentId":34,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":212436,"timestamp":169002164514,"id":34,"parentId":17,"tags":{"page":"/api/microapp-proxy-change-stream"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":212131,"timestamp":169002167377,"id":61,"parentId":29,"tags":{},"startTime":1768981445847,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":215052,"timestamp":169002164482,"id":29,"parentId":17,"tags":{"page":"/api/current-branch"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":212339,"timestamp":169002167293,"id":59,"parentId":27,"tags":{},"startTime":1768981445847,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":215240,"timestamp":169002164398,"id":27,"parentId":17,"tags":{"page":"/api/cleanup-mock"},"startTime":1768981445844,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":213966,"timestamp":169002166989,"id":56,"parentId":23,"tags":{},"startTime":1768981445847,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":216618,"timestamp":169002164350,"id":23,"parentId":17,"tags":{"page":"/api/admin-status"},"startTime":1768981445844,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":215015,"timestamp":169002167627,"id":68,"parentId":36,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":218136,"timestamp":169002164525,"id":36,"parentId":17,"tags":{"page":"/api/mock-file-content"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":216650,"timestamp":169002167876,"id":72,"parentId":39,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":220003,"timestamp":169002164543,"id":39,"parentId":17,"tags":{"page":"/api/mock-setting"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":218473,"timestamp":169002167885,"id":73,"parentId":40,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":221875,"timestamp":169002164548,"id":40,"parentId":17,"tags":{"page":"/api/open-all-mock"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":219209,"timestamp":169002167554,"id":64,"parentId":32,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":222271,"timestamp":169002164502,"id":32,"parentId":17,"tags":{"page":"/api/initialize-workspace"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":220268,"timestamp":169002167858,"id":70,"parentId":37,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":223609,"timestamp":169002164531,"id":37,"parentId":17,"tags":{"page":"/api/mock-file"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":220602,"timestamp":169002167635,"id":69,"parentId":33,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":223734,"timestamp":169002164508,"id":33,"parentId":17,"tags":{"page":"/api/memory-status"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":220370,"timestamp":169002167896,"id":74,"parentId":43,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":223704,"timestamp":169002164567,"id":43,"parentId":17,"tags":{"page":"/api/process/logs/stream"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":222881,"timestamp":169002167940,"id":78,"parentId":45,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":226261,"timestamp":169002164578,"id":45,"parentId":17,"tags":{"page":"/api/process/status"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":224617,"timestamp":169002167948,"id":79,"parentId":41,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":228024,"timestamp":169002164555,"id":41,"parentId":17,"tags":{"page":"/api/open-project"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":226154,"timestamp":169002167397,"id":62,"parentId":31,"tags":{},"startTime":1768981445847,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":229076,"timestamp":169002164496,"id":31,"parentId":17,"tags":{"page":"/api/get-mock-data"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":226187,"timestamp":169002167958,"id":80,"parentId":51,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":229545,"timestamp":169002164612,"id":51,"parentId":17,"tags":{"page":"/api/workspace/create"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":226270,"timestamp":169002167920,"id":76,"parentId":42,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":229635,"timestamp":169002164561,"id":42,"parentId":17,"tags":{"page":"/api/process/logs"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":227686,"timestamp":169002168002,"id":82,"parentId":46,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":231118,"timestamp":169002164584,"id":46,"parentId":17,"tags":{"page":"/api/project-config"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":229643,"timestamp":169002167618,"id":67,"parentId":26,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":232887,"timestamp":169002164390,"id":26,"parentId":17,"tags":{"page":"/api/check-workspace"},"startTime":1768981445844,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":230997,"timestamp":169002167913,"id":75,"parentId":44,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":234356,"timestamp":169002164572,"id":44,"parentId":17,"tags":{"page":"/api/process/start"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":232415,"timestamp":169002168206,"id":86,"parentId":48,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":236065,"timestamp":169002164595,"id":48,"parentId":17,"tags":{"page":"/api/uat-git-flow/abort"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":233482,"timestamp":169002168037,"id":83,"parentId":50,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":236927,"timestamp":169002164606,"id":50,"parentId":17,"tags":{"page":"/api/uat-git-flow/step"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":233574,"timestamp":169002167990,"id":81,"parentId":49,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":236967,"timestamp":169002164601,"id":49,"parentId":17,"tags":{"page":"/api/uat-git-flow"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":235601,"timestamp":169002168048,"id":84,"parentId":55,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":239060,"timestamp":169002164646,"id":55,"parentId":17,"tags":{"page":"/favicon.ico"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":235897,"timestamp":169002167869,"id":71,"parentId":38,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":239234,"timestamp":169002164537,"id":38,"parentId":17,"tags":{"page":"/api/mock-open-status"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":239326,"timestamp":169002167929,"id":77,"parentId":47,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":242691,"timestamp":169002164589,"id":47,"parentId":17,"tags":{"page":"/api/retry-project"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":246226,"timestamp":169002168067,"id":85,"parentId":22,"tags":{},"startTime":1768981445848,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":250019,"timestamp":169002164298,"id":22,"parentId":17,"tags":{"page":"/_not-found"},"startTime":1768981445844,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":239895,"timestamp":169002177168,"id":88,"parentId":52,"tags":{},"startTime":1768981445857,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":252466,"timestamp":169002164618,"id":52,"parentId":17,"tags":{"page":"/configuration"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":239955,"timestamp":169002177152,"id":87,"parentId":53,"tags":{},"startTime":1768981445857,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":252485,"timestamp":169002164629,"id":53,"parentId":17,"tags":{"page":"/initialization"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"is-page-static","duration":248615,"timestamp":169002177171,"id":89,"parentId":54,"tags":{},"startTime":1768981445857,"traceId":"1e72c249a63ade35"},{"name":"check-page","duration":261163,"timestamp":169002164638,"id":54,"parentId":17,"tags":{"page":"/"},"startTime":1768981445845,"traceId":"1e72c249a63ade35"},{"name":"static-check","duration":292834,"timestamp":169002133009,"id":17,"parentId":1,"tags":{},"startTime":1768981445813,"traceId":"1e72c249a63ade35"},{"name":"generate-required-server-files","duration":184,"timestamp":169002426110,"id":91,"parentId":1,"tags":{},"startTime":1768981446106,"traceId":"1e72c249a63ade35"},{"name":"write-routes-manifest","duration":549,"timestamp":169002431106,"id":93,"parentId":1,"tags":{},"startTime":1768981446111,"traceId":"1e72c249a63ade35"},{"name":"load-dotenv","duration":11,"timestamp":169002444263,"id":96,"parentId":95,"tags":{},"startTime":1768981446124,"traceId":"1e72c249a63ade35"},{"name":"run-export-path-map","duration":291,"timestamp":169002540361,"id":97,"parentId":95,"tags":{},"startTime":1768981446220,"traceId":"1e72c249a63ade35"},{"name":"next-export","duration":488615,"timestamp":169002443785,"id":95,"parentId":1,"tags":{},"startTime":1768981446124,"traceId":"1e72c249a63ade35"},{"name":"move-exported-app-not-found-","duration":2459,"timestamp":169002933565,"id":98,"parentId":94,"tags":{},"startTime":1768981446614,"traceId":"1e72c249a63ade35"},{"name":"move-exported-page","duration":8341,"timestamp":169002936112,"id":99,"parentId":94,"tags":{},"startTime":1768981446616,"traceId":"1e72c249a63ade35"},{"name":"static-generation","duration":542832,"timestamp":169002440262,"id":94,"parentId":1,"tags":{},"startTime":1768981446120,"traceId":"1e72c249a63ade35"},{"name":"write-routes-manifest","duration":6053,"timestamp":169002983106,"id":100,"parentId":1,"tags":{},"startTime":1768981446663,"traceId":"1e72c249a63ade35"},{"name":"node-file-trace-build","duration":4892856,"timestamp":169002427633,"id":92,"parentId":1,"tags":{"isTurbotrace":"false"},"startTime":1768981446108,"traceId":"1e72c249a63ade35"},{"name":"apply-include-excludes","duration":281,"timestamp":169007320511,"id":101,"parentId":1,"tags":{},"startTime":1768981451001,"traceId":"1e72c249a63ade35"},{"name":"print-tree-view","duration":2486,"timestamp":169007321162,"id":102,"parentId":1,"tags":{},"startTime":1768981451001,"traceId":"1e72c249a63ade35"},{"name":"telemetry-flush","duration":35,"timestamp":169007323659,"id":103,"parentId":1,"tags":{},"startTime":1768981451004,"traceId":"1e72c249a63ade35"},{"name":"next-build","duration":10795974,"timestamp":168996527723,"id":1,"tags":{"buildMode":"default","isTurboBuild":"true","version":"15.3.4","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1768981440208,"traceId":"1e72c249a63ade35"}]
|
|
1
|
+
[{"name":"generate-buildid","duration":139,"timestamp":508120048288,"id":4,"parentId":1,"tags":{},"startTime":1772446551247,"traceId":"f1fe2b64f092ba4a"},{"name":"load-custom-routes","duration":955,"timestamp":508120048475,"id":5,"parentId":1,"tags":{},"startTime":1772446551247,"traceId":"f1fe2b64f092ba4a"},{"name":"create-dist-dir","duration":191,"timestamp":508120081898,"id":6,"parentId":1,"tags":{},"startTime":1772446551280,"traceId":"f1fe2b64f092ba4a"},{"name":"create-pages-mapping","duration":107,"timestamp":508120132522,"id":7,"parentId":1,"tags":{},"startTime":1772446551331,"traceId":"f1fe2b64f092ba4a"},{"name":"collect-app-paths","duration":1712,"timestamp":508120132650,"id":8,"parentId":1,"tags":{},"startTime":1772446551331,"traceId":"f1fe2b64f092ba4a"},{"name":"create-app-mapping","duration":1592,"timestamp":508120134381,"id":9,"parentId":1,"tags":{},"startTime":1772446551333,"traceId":"f1fe2b64f092ba4a"},{"name":"public-dir-conflict-check","duration":377,"timestamp":508120136321,"id":10,"parentId":1,"tags":{},"startTime":1772446551335,"traceId":"f1fe2b64f092ba4a"},{"name":"generate-routes-manifest","duration":1269,"timestamp":508120136851,"id":11,"parentId":1,"tags":{},"startTime":1772446551335,"traceId":"f1fe2b64f092ba4a"},{"name":"verify-and-lint","duration":2461493,"timestamp":508128239192,"id":15,"parentId":1,"tags":{},"startTime":1772446559438,"traceId":"f1fe2b64f092ba4a"},{"name":"verify-typescript-setup","duration":3377623,"timestamp":508128234979,"id":14,"parentId":1,"tags":{},"startTime":1772446559434,"traceId":"f1fe2b64f092ba4a"},{"name":"check-static-error-page","duration":10136,"timestamp":508131627124,"id":18,"parentId":17,"tags":{},"startTime":1772446562826,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":3428,"timestamp":508131683605,"id":19,"parentId":17,"tags":{"page":"/_app"},"startTime":1772446562882,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":2514,"timestamp":508131684530,"id":21,"parentId":17,"tags":{"page":"/_document"},"startTime":1772446562883,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":2639,"timestamp":508131684453,"id":20,"parentId":17,"tags":{"page":"/_error"},"startTime":1772446562883,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":291878,"timestamp":508131690262,"id":61,"parentId":24,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":297807,"timestamp":508131684733,"id":24,"parentId":17,"tags":{"page":"/api/admin-git-batch-merge"},"startTime":1772446562883,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":292590,"timestamp":508131690066,"id":59,"parentId":26,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":297905,"timestamp":508131684762,"id":26,"parentId":17,"tags":{"page":"/api/all-projects-envs"},"startTime":1772446562883,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":297677,"timestamp":508131690424,"id":65,"parentId":29,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":303271,"timestamp":508131684856,"id":29,"parentId":17,"tags":{"page":"/api/cleanup-mock"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":299739,"timestamp":508131690638,"id":67,"parentId":32,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":305521,"timestamp":508131684883,"id":32,"parentId":17,"tags":{"page":"/api/delete-mock-api"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":303581,"timestamp":508131690603,"id":66,"parentId":25,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":309488,"timestamp":508131684749,"id":25,"parentId":17,"tags":{"page":"/api/admin-status"},"startTime":1772446562883,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":305049,"timestamp":508131690675,"id":68,"parentId":34,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":310848,"timestamp":508131684898,"id":34,"parentId":17,"tags":{"page":"/api/initialize-workspace"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":310926,"timestamp":508131690688,"id":69,"parentId":35,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":316723,"timestamp":508131684912,"id":35,"parentId":17,"tags":{"page":"/api/memory-status"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":311984,"timestamp":508131690337,"id":62,"parentId":28,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":317519,"timestamp":508131684840,"id":28,"parentId":17,"tags":{"page":"/api/check-workspace"},"startTime":1772446562883,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":314337,"timestamp":508131690725,"id":71,"parentId":36,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":320183,"timestamp":508131684918,"id":36,"parentId":17,"tags":{"page":"/api/microapp-proxy-change-stream"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":317368,"timestamp":508131690807,"id":73,"parentId":38,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":323270,"timestamp":508131684933,"id":38,"parentId":17,"tags":{"page":"/api/mock-file-content"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":319520,"timestamp":508131690821,"id":74,"parentId":40,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":325423,"timestamp":508131684955,"id":40,"parentId":17,"tags":{"page":"/api/mock-open-status"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":322495,"timestamp":508131689623,"id":58,"parentId":23,"tags":{},"startTime":1772446562888,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":327445,"timestamp":508131684703,"id":23,"parentId":17,"tags":{"page":"/api/admin-git-batch-create-branch"},"startTime":1772446562883,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":321877,"timestamp":508131690405,"id":64,"parentId":30,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":327427,"timestamp":508131684869,"id":30,"parentId":17,"tags":{"page":"/api/cleanup-project"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":321521,"timestamp":508131690835,"id":75,"parentId":37,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":327450,"timestamp":508131684927,"id":37,"parentId":17,"tags":{"page":"/api/microapp-proxy-config"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":322724,"timestamp":508131690387,"id":63,"parentId":31,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":328253,"timestamp":508131684876,"id":31,"parentId":17,"tags":{"page":"/api/current-branch"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":325746,"timestamp":508131690126,"id":60,"parentId":27,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":331126,"timestamp":508131684771,"id":27,"parentId":17,"tags":{"page":"/api/check-mock-intercept"},"startTime":1772446562883,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":325072,"timestamp":508131690858,"id":77,"parentId":42,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":330966,"timestamp":508131684970,"id":42,"parentId":17,"tags":{"page":"/api/open-all-mock"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":325097,"timestamp":508131690867,"id":78,"parentId":43,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":330992,"timestamp":508131684976,"id":43,"parentId":17,"tags":{"page":"/api/open-project"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":326659,"timestamp":508131690797,"id":72,"parentId":39,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":332549,"timestamp":508131684946,"id":39,"parentId":17,"tags":{"page":"/api/mock-file"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":328304,"timestamp":508131690921,"id":82,"parentId":48,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":334231,"timestamp":508131685014,"id":48,"parentId":17,"tags":{"page":"/api/project-config"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":328571,"timestamp":508131690714,"id":70,"parentId":33,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":334398,"timestamp":508131684892,"id":33,"parentId":17,"tags":{"page":"/api/get-mock-data"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":332164,"timestamp":508131690886,"id":80,"parentId":44,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":338100,"timestamp":508131684982,"id":44,"parentId":17,"tags":{"page":"/api/process/logs"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":332207,"timestamp":508131690939,"id":84,"parentId":50,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":338120,"timestamp":508131685032,"id":50,"parentId":17,"tags":{"page":"/api/uat-git-flow/abort"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":332543,"timestamp":508131690930,"id":83,"parentId":49,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":338488,"timestamp":508131685026,"id":49,"parentId":17,"tags":{"page":"/api/retry-project"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":333571,"timestamp":508131690975,"id":85,"parentId":51,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":339516,"timestamp":508131685041,"id":51,"parentId":17,"tags":{"page":"/api/uat-git-flow"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":333623,"timestamp":508131691026,"id":87,"parentId":47,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":339659,"timestamp":508131685008,"id":47,"parentId":17,"tags":{"page":"/api/process/status"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":334725,"timestamp":508131691047,"id":88,"parentId":53,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":340724,"timestamp":508131685058,"id":53,"parentId":17,"tags":{"page":"/api/workspace/create"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":335442,"timestamp":508131691013,"id":86,"parentId":52,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":341444,"timestamp":508131685047,"id":52,"parentId":17,"tags":{"page":"/api/uat-git-flow/step"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":338339,"timestamp":508131690843,"id":76,"parentId":41,"tags":{},"startTime":1772446562889,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":344242,"timestamp":508131684962,"id":41,"parentId":17,"tags":{"page":"/api/mock-setting"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":341833,"timestamp":508131691057,"id":89,"parentId":57,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":347815,"timestamp":508131685102,"id":57,"parentId":17,"tags":{"page":"/favicon.ico"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":344544,"timestamp":508131690878,"id":79,"parentId":45,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":350458,"timestamp":508131684992,"id":45,"parentId":17,"tags":{"page":"/api/process/logs/stream"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":348898,"timestamp":508131690910,"id":81,"parentId":46,"tags":{},"startTime":1772446562890,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":354831,"timestamp":508131684998,"id":46,"parentId":17,"tags":{"page":"/api/process/start"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":351475,"timestamp":508131692653,"id":90,"parentId":22,"tags":{},"startTime":1772446562891,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":359569,"timestamp":508131684607,"id":22,"parentId":17,"tags":{"page":"/_not-found"},"startTime":1772446562883,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":340801,"timestamp":508131708569,"id":93,"parentId":55,"tags":{},"startTime":1772446562907,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":364333,"timestamp":508131685080,"id":55,"parentId":17,"tags":{"page":"/initialization"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":341914,"timestamp":508131708566,"id":92,"parentId":54,"tags":{},"startTime":1772446562907,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":365431,"timestamp":508131685064,"id":54,"parentId":17,"tags":{"page":"/configuration"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"is-page-static","duration":348876,"timestamp":508131708549,"id":91,"parentId":56,"tags":{},"startTime":1772446562907,"traceId":"f1fe2b64f092ba4a"},{"name":"check-page","duration":372356,"timestamp":508131685093,"id":56,"parentId":17,"tags":{"page":"/"},"startTime":1772446562884,"traceId":"f1fe2b64f092ba4a"},{"name":"static-check","duration":432390,"timestamp":508131625108,"id":17,"parentId":1,"tags":{},"startTime":1772446562824,"traceId":"f1fe2b64f092ba4a"},{"name":"generate-required-server-files","duration":1159,"timestamp":508132058770,"id":95,"parentId":1,"tags":{},"startTime":1772446563257,"traceId":"f1fe2b64f092ba4a"},{"name":"write-routes-manifest","duration":922,"timestamp":508132077150,"id":97,"parentId":1,"tags":{},"startTime":1772446563276,"traceId":"f1fe2b64f092ba4a"},{"name":"load-dotenv","duration":13,"timestamp":508132116026,"id":100,"parentId":99,"tags":{},"startTime":1772446563315,"traceId":"f1fe2b64f092ba4a"},{"name":"run-export-path-map","duration":329,"timestamp":508132312419,"id":101,"parentId":99,"tags":{},"startTime":1772446563511,"traceId":"f1fe2b64f092ba4a"},{"name":"next-export","duration":650657,"timestamp":508132115454,"id":99,"parentId":1,"tags":{},"startTime":1772446563314,"traceId":"f1fe2b64f092ba4a"},{"name":"move-exported-app-not-found-","duration":8048,"timestamp":508132767331,"id":102,"parentId":98,"tags":{},"startTime":1772446563966,"traceId":"f1fe2b64f092ba4a"},{"name":"move-exported-page","duration":10728,"timestamp":508132775483,"id":103,"parentId":98,"tags":{},"startTime":1772446563974,"traceId":"f1fe2b64f092ba4a"},{"name":"static-generation","duration":713196,"timestamp":508132110986,"id":98,"parentId":1,"tags":{},"startTime":1772446563310,"traceId":"f1fe2b64f092ba4a"},{"name":"write-routes-manifest","duration":6276,"timestamp":508132824195,"id":104,"parentId":1,"tags":{},"startTime":1772446564023,"traceId":"f1fe2b64f092ba4a"},{"name":"node-file-trace-build","duration":4198094,"timestamp":508132069818,"id":96,"parentId":1,"tags":{"isTurbotrace":"false"},"startTime":1772446563268,"traceId":"f1fe2b64f092ba4a"},{"name":"apply-include-excludes","duration":252,"timestamp":508136267928,"id":105,"parentId":1,"tags":{},"startTime":1772446567467,"traceId":"f1fe2b64f092ba4a"},{"name":"print-tree-view","duration":2715,"timestamp":508136268520,"id":106,"parentId":1,"tags":{},"startTime":1772446567467,"traceId":"f1fe2b64f092ba4a"},{"name":"telemetry-flush","duration":29,"timestamp":508136271247,"id":107,"parentId":1,"tags":{},"startTime":1772446567470,"traceId":"f1fe2b64f092ba4a"},{"name":"next-build","duration":16631768,"timestamp":508119639511,"id":1,"tags":{"buildMode":"default","isTurboBuild":"true","version":"15.3.4","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1772446550838,"traceId":"f1fe2b64f092ba4a"}]
|