prime-dev-cli 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/server/.next/BUILD_ID +1 -1
  2. package/dist/server/.next/app-build-manifest.json +1 -1
  3. package/dist/server/.next/app-path-routes-manifest.json +1 -0
  4. package/dist/server/.next/build-manifest.json +6 -6
  5. package/dist/server/.next/cache/.tsbuildinfo +1 -1
  6. package/dist/server/.next/cache/eslint/.cache_1qa5vxt +1 -1
  7. package/dist/server/.next/fallback-build-manifest.json +6 -6
  8. package/dist/server/.next/next-minimal-server.js.nft.json +1 -1
  9. package/dist/server/.next/next-server.js.nft.json +1 -1
  10. package/dist/server/.next/prerender-manifest.json +9 -9
  11. package/dist/server/.next/server/app/_not-found.html +1 -1
  12. package/dist/server/.next/server/app/_not-found.rsc +1 -1
  13. package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route.js +3 -2
  14. package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route.js.nft.json +1 -1
  15. package/dist/server/.next/server/app/api/admin-git-batch-merge/route.js +3 -2
  16. package/dist/server/.next/server/app/api/admin-git-batch-merge/route.js.nft.json +1 -1
  17. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route/app-build-manifest.json +10 -0
  18. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route/app-paths-manifest.json +3 -0
  19. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route/build-manifest.json +16 -0
  20. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route/next-font-manifest.json +6 -0
  21. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route/react-loadable-manifest.json +1 -0
  22. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route/server-reference-manifest.json +4 -0
  23. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route.js +8 -0
  24. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route.js.map +5 -0
  25. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route.js.nft.json +1 -0
  26. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route_client-reference-manifest.js +2 -0
  27. package/dist/server/.next/server/app/api/gwh-git-flow/route.js +3 -2
  28. package/dist/server/.next/server/app/api/gwh-git-flow/route.js.nft.json +1 -1
  29. package/dist/server/.next/server/app/api/uat-git-flow/route.js +3 -2
  30. package/dist/server/.next/server/app/api/uat-git-flow/route.js.nft.json +1 -1
  31. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js +3 -2
  32. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js.nft.json +1 -1
  33. package/dist/server/.next/server/app/configuration.html +1 -1
  34. package/dist/server/.next/server/app/configuration.rsc +1 -1
  35. package/dist/server/.next/server/app/index.html +1 -1
  36. package/dist/server/.next/server/app/index.rsc +1 -1
  37. package/dist/server/.next/server/app/initialization/page/app-build-manifest.json +1 -1
  38. package/dist/server/.next/server/app/initialization/page_client-reference-manifest.js +1 -1
  39. package/dist/server/.next/server/app/initialization.html +1 -1
  40. package/dist/server/.next/server/app/initialization.rsc +2 -2
  41. package/dist/server/.next/server/app-paths-manifest.json +1 -0
  42. package/dist/server/.next/server/chunks/{[root-of-the-server]__66dc5e6b._.js → [root-of-the-server]__3952b86e._.js} +6 -6
  43. package/dist/server/.next/server/chunks/[root-of-the-server]__3952b86e._.js.map +1 -0
  44. package/dist/server/.next/server/chunks/[root-of-the-server]__d3078133._.js +16 -0
  45. package/dist/server/.next/server/chunks/[root-of-the-server]__d3078133._.js.map +1 -0
  46. package/dist/server/.next/server/chunks/_7a0784b7._.js +3 -0
  47. package/dist/server/.next/server/chunks/_7a0784b7._.js.map +1 -0
  48. package/dist/server/.next/server/chunks/_7ecb08a3._.js +3 -0
  49. package/dist/server/.next/server/chunks/_7ecb08a3._.js.map +1 -0
  50. package/dist/server/.next/server/chunks/packages_server_ccc16996._.js +3 -0
  51. package/dist/server/.next/server/chunks/packages_server_ccc16996._.js.map +1 -0
  52. package/dist/server/.next/server/chunks/packages_server_d1209331._.js +3 -0
  53. package/dist/server/.next/server/chunks/packages_server_d1209331._.js.map +1 -0
  54. package/dist/server/.next/server/chunks/packages_server_fbb3d3c1._.js +3 -0
  55. package/dist/server/.next/server/chunks/packages_server_fbb3d3c1._.js.map +1 -0
  56. package/dist/server/.next/server/chunks/ssr/_89496b8a._.js +1 -1
  57. package/dist/server/.next/server/chunks/ssr/_89496b8a._.js.map +1 -1
  58. package/dist/server/.next/server/chunks/ssr/packages_server_src_7cef6dbd._.js +1 -1
  59. package/dist/server/.next/server/chunks/ssr/packages_server_src_7cef6dbd._.js.map +1 -1
  60. package/dist/server/.next/server/middleware-build-manifest.js +4 -4
  61. package/dist/server/.next/server/pages/404.html +1 -1
  62. package/dist/server/.next/server/pages/500.html +1 -1
  63. package/dist/server/.next/server/pages/_app/build-manifest.json +2 -2
  64. package/dist/server/.next/server/pages/_error/build-manifest.json +2 -2
  65. package/dist/server/.next/static/chunks/6a5a3e57e911834d.js +3 -0
  66. package/dist/server/.next/static/chunks/{6803a56f8e33c487.js → 8ade09a4b436cb9d.js} +2 -2
  67. package/dist/server/.next/static/chunks/{8f80ca1e88635b12.js → aa6cbf0011bc69d5.js} +1 -1
  68. package/dist/server/.next/static/chunks/{acb330991f8ec5eb.js.map → b18e8b227375accd.js.map} +1 -1
  69. package/dist/server/.next/static/chunks/{0a55e0a2ff3b09e0.js → cf8cd3228a692db3.js} +1 -1
  70. package/dist/server/.next/static/chunks/e4ebccc6363cd9f1.js.map +1 -0
  71. package/dist/server/.next/static/chunks/pages/_app.js +2 -2
  72. package/dist/server/.next/static/chunks/pages/_error.js +2 -2
  73. package/dist/server/.next/trace +2 -2
  74. package/package.json +1 -1
  75. package/dist/server/.next/server/chunks/[root-of-the-server]__66dc5e6b._.js.map +0 -1
  76. package/dist/server/.next/server/chunks/[root-of-the-server]__8a8561ea._.js +0 -16
  77. package/dist/server/.next/server/chunks/[root-of-the-server]__8a8561ea._.js.map +0 -1
  78. package/dist/server/.next/server/chunks/[root-of-the-server]__9f7a6c58._.js +0 -16
  79. package/dist/server/.next/server/chunks/[root-of-the-server]__9f7a6c58._.js.map +0 -1
  80. package/dist/server/.next/server/chunks/[root-of-the-server]__ac6efee1._.js +0 -16
  81. package/dist/server/.next/server/chunks/[root-of-the-server]__ac6efee1._.js.map +0 -1
  82. package/dist/server/.next/server/chunks/[root-of-the-server]__f111df8e._.js +0 -16
  83. package/dist/server/.next/server/chunks/[root-of-the-server]__f111df8e._.js.map +0 -1
  84. package/dist/server/.next/static/chunks/2d9a99312c08fbf9.js +0 -3
  85. package/dist/server/.next/static/chunks/f36be6bae8f3723b.js.map +0 -1
  86. /package/dist/server/.next/static/{4KbwlsFdd1vqSOg9Nuj9R → hKvS6HjDU-eBShMXMQ7An}/_buildManifest.js +0 -0
  87. /package/dist/server/.next/static/{4KbwlsFdd1vqSOg9Nuj9R → hKvS6HjDU-eBShMXMQ7An}/_clientMiddlewareManifest.json +0 -0
  88. /package/dist/server/.next/static/{4KbwlsFdd1vqSOg9Nuj9R → hKvS6HjDU-eBShMXMQ7An}/_ssgManifest.js +0 -0
@@ -9,7 +9,7 @@ d:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"ViewportBoundary"]
9
9
  f:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"MetadataBoundary"]
10
10
  11:I[71163,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
11
11
  :HL["/_next/static/chunks/861aac2fba8d4e28.css","style"]
12
- 0:{"P":null,"b":"4KbwlsFdd1vqSOg9Nuj9R","p":"","c":["","configuration"],"i":false,"f":[[["",{"children":["configuration",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/861aac2fba8d4e28.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["configuration",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","searchParams":{},"params":{},"promises":["$@6","$@7"]}],[["$","script","script-0",{"src":"/_next/static/chunks/8c850efc5ffddd02.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/9148331cad3a934e.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$L9","$La",["$","$Lb",null,{"promise":"$@c"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","LLvNVgfRhAjN9h1aAmkqdv",{"children":[["$","$Ld",null,{"children":"$Le"}],null]}],["$","$Lf",null,{"children":"$L10"}]]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true}
12
+ 0:{"P":null,"b":"hKvS6HjDU-eBShMXMQ7An","p":"","c":["","configuration"],"i":false,"f":[[["",{"children":["configuration",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/861aac2fba8d4e28.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["configuration",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","searchParams":{},"params":{},"promises":["$@6","$@7"]}],[["$","script","script-0",{"src":"/_next/static/chunks/8c850efc5ffddd02.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/9148331cad3a934e.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$L9","$La",["$","$Lb",null,{"promise":"$@c"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","DAbzzLauh98jlG4jpEMRpv",{"children":[["$","$Ld",null,{"children":"$Le"}],null]}],["$","$Lf",null,{"children":"$L10"}]]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true}
13
13
  12:"$Sreact.suspense"
14
14
  13:I[73794,["/_next/static/chunks/ecfccf4677b4777a.js"],"AsyncMetadata"]
15
15
  6:{}
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1923d6510bea25be.js"/><script src="/_next/static/chunks/0e57f1354cda05d5.js" async=""></script><script src="/_next/static/chunks/e5e4fd3e83ab66f8.js" async=""></script><script src="/_next/static/chunks/c4c1da381d908575.js" async=""></script><script src="/_next/static/chunks/ecfccf4677b4777a.js" async=""></script><div hidden=""></div><title>Prime Dev CLI - 项目管理工具</title><meta name="description" content="管理多个前端项目的开发环境和配置"/><link rel="icon" href="/favicon.ico?favicon.45db1c09.ico" sizes="256x256" type="image/x-icon"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/ec548c7ce307cf6d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><script src="/_next/static/chunks/1923d6510bea25be.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[55889,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n3:I[54799,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n5:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"OutletBoundary\"]\n8:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadataOutlet\"]\na:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"ViewportBoundary\"]\nc:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"MetadataBoundary\"]\ne:I[71163,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n:HL[\"/_next/static/chunks/861aac2fba8d4e28.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"4KbwlsFdd1vqSOg9Nuj9R\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/861aac2fba8d4e28.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$L4\",null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$1\",\"YloNdoAXPeX-lOti9dFq1v\",{\"children\":[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null]}],[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"4:E{\"digest\":\"NEXT_REDIRECT;replace;/initialization;307;\"}\n"])</script><script>self.__next_f.push([1,"f:\"$Sreact.suspense\"\n10:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadata\"]\nd:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":[\"$\",\"$L10\",null,{\"promise\":\"$@11\"}]}]}]\n7:null\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Prime Dev CLI - 项目管理工具\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"管理多个前端项目的开发环境和配置\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.45db1c09.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}]],\"error\":null,\"digest\":\"$undefined\"}\n11:{\"metadata\":\"$9:metadata\",\"error\":null,\"digest\":\"$undefined\"}\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1923d6510bea25be.js"/><script src="/_next/static/chunks/0e57f1354cda05d5.js" async=""></script><script src="/_next/static/chunks/e5e4fd3e83ab66f8.js" async=""></script><script src="/_next/static/chunks/c4c1da381d908575.js" async=""></script><script src="/_next/static/chunks/ecfccf4677b4777a.js" async=""></script><div hidden=""></div><title>Prime Dev CLI - 项目管理工具</title><meta name="description" content="管理多个前端项目的开发环境和配置"/><link rel="icon" href="/favicon.ico?favicon.45db1c09.ico" sizes="256x256" type="image/x-icon"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/ec548c7ce307cf6d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><script src="/_next/static/chunks/1923d6510bea25be.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[55889,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n3:I[54799,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n5:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"OutletBoundary\"]\n8:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadataOutlet\"]\na:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"ViewportBoundary\"]\nc:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"MetadataBoundary\"]\ne:I[71163,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n:HL[\"/_next/static/chunks/861aac2fba8d4e28.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"hKvS6HjDU-eBShMXMQ7An\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/861aac2fba8d4e28.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$L4\",null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$1\",\"9V9jwFBe7zR58nvEeLceLv\",{\"children\":[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null]}],[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"4:E{\"digest\":\"NEXT_REDIRECT;replace;/initialization;307;\"}\n"])</script><script>self.__next_f.push([1,"f:\"$Sreact.suspense\"\n10:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadata\"]\nd:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":[\"$\",\"$L10\",null,{\"promise\":\"$@11\"}]}]}]\n7:null\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Prime Dev CLI - 项目管理工具\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"管理多个前端项目的开发环境和配置\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.45db1c09.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}]],\"error\":null,\"digest\":\"$undefined\"}\n11:{\"metadata\":\"$9:metadata\",\"error\":null,\"digest\":\"$undefined\"}\n"])</script></body></html>
@@ -7,7 +7,7 @@ a:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"ViewportBoundary"]
7
7
  c:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"MetadataBoundary"]
8
8
  e:I[71163,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
9
9
  :HL["/_next/static/chunks/861aac2fba8d4e28.css","style"]
10
- 0:{"P":null,"b":"4KbwlsFdd1vqSOg9Nuj9R","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/861aac2fba8d4e28.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":["$L4",null,["$","$L5",null,{"children":["$L6","$L7",["$","$L8",null,{"promise":"$@9"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","YloNdoAXPeX-lOti9dFq1v",{"children":[["$","$La",null,{"children":"$Lb"}],null]}],["$","$Lc",null,{"children":"$Ld"}]]}],false]],"m":"$undefined","G":["$e","$undefined"],"s":false,"S":true}
10
+ 0:{"P":null,"b":"hKvS6HjDU-eBShMXMQ7An","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/861aac2fba8d4e28.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":["$L4",null,["$","$L5",null,{"children":["$L6","$L7",["$","$L8",null,{"promise":"$@9"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","9V9jwFBe7zR58nvEeLceLv",{"children":[["$","$La",null,{"children":"$Lb"}],null]}],["$","$Lc",null,{"children":"$Ld"}]]}],false]],"m":"$undefined","G":["$e","$undefined"],"s":false,"S":true}
11
11
  4:E{"digest":"NEXT_REDIRECT;replace;/initialization;307;"}
12
12
  f:"$Sreact.suspense"
13
13
  10:I[73794,["/_next/static/chunks/ecfccf4677b4777a.js"],"AsyncMetadata"]
@@ -3,7 +3,7 @@
3
3
  "/initialization/page": [
4
4
  "static/chunks/ecfccf4677b4777a.js",
5
5
  "static/chunks/861aac2fba8d4e28.css",
6
- "static/chunks/2d9a99312c08fbf9.js",
6
+ "static/chunks/6a5a3e57e911834d.js",
7
7
  "static/chunks/43c514797c454939.js",
8
8
  "static/chunks/1923d6510bea25be.js",
9
9
  "static/chunks/0e57f1354cda05d5.js",
@@ -1,2 +1,2 @@
1
1
  globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {};
2
- globalThis.__RSC_MANIFEST["/initialization/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/packages/server/src/components/project-initializer.tsx <module evaluation>":{"id":9993,"name":"*","chunks":["/_next/static/chunks/2d9a99312c08fbf9.js","/_next/static/chunks/43c514797c454939.js"],"async":false},"[project]/packages/server/src/components/project-initializer.tsx":{"id":9993,"name":"*","chunks":["/_next/static/chunks/2d9a99312c08fbf9.js","/_next/static/chunks/43c514797c454939.js"],"async":false},"[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/client/components/error-boundary.js <module evaluation>":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/client/components/error-boundary.js":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/layout-router.js <module evaluation>":{"id":55889,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/layout-router.js":{"id":55889,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/render-from-template-context.js <module evaluation>":{"id":54799,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/render-from-template-context.js":{"id":54799,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/client-page.js <module evaluation>":{"id":4962,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/client-page.js":{"id":4962,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/client-segment.js <module evaluation>":{"id":60374,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/client-segment.js":{"id":60374,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/http-access-fallback/error-boundary.js <module evaluation>":{"id":94238,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/http-access-fallback/error-boundary.js":{"id":94238,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/metadata/async-metadata.js <module evaluation>":{"id":73794,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/metadata/async-metadata.js":{"id":73794,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/error-boundary.js <module evaluation>":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/error-boundary.js":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/metadata/metadata-boundary.js <module evaluation>":{"id":67903,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/metadata/metadata-boundary.js":{"id":67903,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false}},"ssrModuleMapping":{"9993":{"*":{"id":90250,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__a085452f._.js","server/chunks/ssr/_ee0c9da0._.js","server/chunks/ssr/packages_server_src_7cef6dbd._.js"],"async":false}},"71163":{"*":{"id":77342,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"55889":{"*":{"id":60752,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"54799":{"*":{"id":98696,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"4962":{"*":{"id":18263,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"60374":{"*":{"id":29996,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"94238":{"*":{"id":16477,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"73794":{"*":{"id":15890,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"67903":{"*":{"id":17423,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"9993":{"*":{"id":23352,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"71163":{"*":{"id":61928,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"55889":{"*":{"id":47058,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"54799":{"*":{"id":10287,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"4962":{"*":{"id":23309,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"60374":{"*":{"id":21696,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"94238":{"*":{"id":46950,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"73794":{"*":{"id":35824,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"67903":{"*":{"id":79641,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/packages/server/src/app/favicon.ico":[],"[project]/packages/server/src/app/layout":[{"path":"static/chunks/861aac2fba8d4e28.css","inlined":false}],"[project]/packages/server/src/app/initialization/page":[{"path":"static/chunks/861aac2fba8d4e28.css","inlined":false}]},"entryJSFiles":{"[project]/packages/server/src/app/favicon.ico":["static/chunks/ecfccf4677b4777a.js"],"[project]/packages/server/src/app/layout":[],"[project]/packages/server/src/app/initialization/page":["static/chunks/2d9a99312c08fbf9.js","static/chunks/43c514797c454939.js"]}}
2
+ globalThis.__RSC_MANIFEST["/initialization/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/packages/server/src/components/project-initializer.tsx <module evaluation>":{"id":9993,"name":"*","chunks":["/_next/static/chunks/6a5a3e57e911834d.js","/_next/static/chunks/43c514797c454939.js"],"async":false},"[project]/packages/server/src/components/project-initializer.tsx":{"id":9993,"name":"*","chunks":["/_next/static/chunks/6a5a3e57e911834d.js","/_next/static/chunks/43c514797c454939.js"],"async":false},"[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/client/components/error-boundary.js <module evaluation>":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/client/components/error-boundary.js":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/layout-router.js <module evaluation>":{"id":55889,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/layout-router.js":{"id":55889,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/render-from-template-context.js <module evaluation>":{"id":54799,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/render-from-template-context.js":{"id":54799,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/client-page.js <module evaluation>":{"id":4962,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/client-page.js":{"id":4962,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/client-segment.js <module evaluation>":{"id":60374,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/client-segment.js":{"id":60374,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/http-access-fallback/error-boundary.js <module evaluation>":{"id":94238,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/http-access-fallback/error-boundary.js":{"id":94238,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/metadata/async-metadata.js <module evaluation>":{"id":73794,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/metadata/async-metadata.js":{"id":73794,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/error-boundary.js <module evaluation>":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/error-boundary.js":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/metadata/metadata-boundary.js <module evaluation>":{"id":67903,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[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/esm/client/components/metadata/metadata-boundary.js":{"id":67903,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false}},"ssrModuleMapping":{"9993":{"*":{"id":90250,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__a085452f._.js","server/chunks/ssr/_ee0c9da0._.js","server/chunks/ssr/packages_server_src_7cef6dbd._.js"],"async":false}},"71163":{"*":{"id":77342,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"55889":{"*":{"id":60752,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"54799":{"*":{"id":98696,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"4962":{"*":{"id":18263,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"60374":{"*":{"id":29996,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"94238":{"*":{"id":16477,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"73794":{"*":{"id":15890,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"67903":{"*":{"id":17423,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"9993":{"*":{"id":23352,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"71163":{"*":{"id":61928,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"55889":{"*":{"id":47058,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"54799":{"*":{"id":10287,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"4962":{"*":{"id":23309,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"60374":{"*":{"id":21696,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"94238":{"*":{"id":46950,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"73794":{"*":{"id":35824,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"67903":{"*":{"id":79641,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/packages/server/src/app/favicon.ico":[],"[project]/packages/server/src/app/layout":[{"path":"static/chunks/861aac2fba8d4e28.css","inlined":false}],"[project]/packages/server/src/app/initialization/page":[{"path":"static/chunks/861aac2fba8d4e28.css","inlined":false}]},"entryJSFiles":{"[project]/packages/server/src/app/favicon.ico":["static/chunks/ecfccf4677b4777a.js"],"[project]/packages/server/src/app/layout":[],"[project]/packages/server/src/app/initialization/page":["static/chunks/6a5a3e57e911834d.js","static/chunks/43c514797c454939.js"]}}
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/861aac2fba8d4e28.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1923d6510bea25be.js"/><script src="/_next/static/chunks/0e57f1354cda05d5.js" async=""></script><script src="/_next/static/chunks/e5e4fd3e83ab66f8.js" async=""></script><script src="/_next/static/chunks/c4c1da381d908575.js" async=""></script><script src="/_next/static/chunks/ecfccf4677b4777a.js" async=""></script><script src="/_next/static/chunks/2d9a99312c08fbf9.js" async=""></script><script src="/_next/static/chunks/43c514797c454939.js" async=""></script><title>Prime Dev CLI - 项目管理工具</title><meta name="description" content="管理多个前端项目的开发环境和配置"/><link rel="icon" href="/favicon.ico?favicon.45db1c09.ico" sizes="256x256" type="image/x-icon"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/ec548c7ce307cf6d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="container mx-auto p-4 sm:p-6 md:p-8"><div class="flex justify-between items-center mb-6"><h1 class="text-2xl font-bold">项目初始化</h1><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground shadow-xs hover:bg-primary/90 h-9 px-4 py-2 has-[&gt;svg]:px-3" disabled="">检查中...</button></div><div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4"><div class="col-span-full text-center text-gray-500 py-8">正在检查项目状态...</div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/1923d6510bea25be.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[55889,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n3:I[54799,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n4:I[9993,[\"/_next/static/chunks/2d9a99312c08fbf9.js\",\"/_next/static/chunks/43c514797c454939.js\"],\"default\"]\n5:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"OutletBoundary\"]\n8:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadataOutlet\"]\na:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"ViewportBoundary\"]\nc:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"MetadataBoundary\"]\ne:I[71163,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n:HL[\"/_next/static/chunks/861aac2fba8d4e28.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"4KbwlsFdd1vqSOg9Nuj9R\",\"p\":\"\",\"c\":[\"\",\"initialization\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"initialization\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/861aac2fba8d4e28.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"initialization\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/2d9a99312c08fbf9.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/43c514797c454939.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L5\",null,{\"children\":[\"$L6\",\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$1\",\"N1fejoV3suBif9mIj7Gsdv\",{\"children\":[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null]}],[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"f:\"$Sreact.suspense\"\n10:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadata\"]\nd:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":[\"$\",\"$L10\",null,{\"promise\":\"$@11\"}]}]}]\n7:null\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Prime Dev CLI - 项目管理工具\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"管理多个前端项目的开发环境和配置\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.45db1c09.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}]],\"error\":null,\"digest\":\"$undefined\"}\n11:{\"metadata\":\"$9:metadata\",\"error\":null,\"digest\":\"$undefined\"}\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/861aac2fba8d4e28.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1923d6510bea25be.js"/><script src="/_next/static/chunks/0e57f1354cda05d5.js" async=""></script><script src="/_next/static/chunks/e5e4fd3e83ab66f8.js" async=""></script><script src="/_next/static/chunks/c4c1da381d908575.js" async=""></script><script src="/_next/static/chunks/ecfccf4677b4777a.js" async=""></script><script src="/_next/static/chunks/6a5a3e57e911834d.js" async=""></script><script src="/_next/static/chunks/43c514797c454939.js" async=""></script><title>Prime Dev CLI - 项目管理工具</title><meta name="description" content="管理多个前端项目的开发环境和配置"/><link rel="icon" href="/favicon.ico?favicon.45db1c09.ico" sizes="256x256" type="image/x-icon"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/ec548c7ce307cf6d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="container mx-auto p-4 sm:p-6 md:p-8"><div class="flex justify-between items-center mb-6"><h1 class="text-2xl font-bold">项目初始化</h1><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground shadow-xs hover:bg-primary/90 h-9 px-4 py-2 has-[&gt;svg]:px-3" disabled="">检查中...</button></div><div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4"><div class="col-span-full text-center text-gray-500 py-8">正在检查项目状态...</div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/1923d6510bea25be.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[55889,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n3:I[54799,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n4:I[9993,[\"/_next/static/chunks/6a5a3e57e911834d.js\",\"/_next/static/chunks/43c514797c454939.js\"],\"default\"]\n5:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"OutletBoundary\"]\n8:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadataOutlet\"]\na:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"ViewportBoundary\"]\nc:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"MetadataBoundary\"]\ne:I[71163,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n:HL[\"/_next/static/chunks/861aac2fba8d4e28.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"hKvS6HjDU-eBShMXMQ7An\",\"p\":\"\",\"c\":[\"\",\"initialization\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"initialization\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/861aac2fba8d4e28.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"initialization\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/6a5a3e57e911834d.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/43c514797c454939.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L5\",null,{\"children\":[\"$L6\",\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$1\",\"BKYhHWM0uhGx1ZTAFV6Liv\",{\"children\":[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null]}],[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"f:\"$Sreact.suspense\"\n10:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadata\"]\nd:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":[\"$\",\"$L10\",null,{\"promise\":\"$@11\"}]}]}]\n7:null\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Prime Dev CLI - 项目管理工具\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"管理多个前端项目的开发环境和配置\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.45db1c09.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}]],\"error\":null,\"digest\":\"$undefined\"}\n11:{\"metadata\":\"$9:metadata\",\"error\":null,\"digest\":\"$undefined\"}\n"])</script></body></html>
@@ -1,14 +1,14 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[55889,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
3
3
  3:I[54799,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
4
- 4:I[9993,["/_next/static/chunks/2d9a99312c08fbf9.js","/_next/static/chunks/43c514797c454939.js"],"default"]
4
+ 4:I[9993,["/_next/static/chunks/6a5a3e57e911834d.js","/_next/static/chunks/43c514797c454939.js"],"default"]
5
5
  5:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"OutletBoundary"]
6
6
  8:I[73794,["/_next/static/chunks/ecfccf4677b4777a.js"],"AsyncMetadataOutlet"]
7
7
  a:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"ViewportBoundary"]
8
8
  c:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"MetadataBoundary"]
9
9
  e:I[71163,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
10
10
  :HL["/_next/static/chunks/861aac2fba8d4e28.css","style"]
11
- 0:{"P":null,"b":"4KbwlsFdd1vqSOg9Nuj9R","p":"","c":["","initialization"],"i":false,"f":[[["",{"children":["initialization",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/861aac2fba8d4e28.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["initialization",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/2d9a99312c08fbf9.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/43c514797c454939.js","async":true,"nonce":"$undefined"}]],["$","$L5",null,{"children":["$L6","$L7",["$","$L8",null,{"promise":"$@9"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","N1fejoV3suBif9mIj7Gsdv",{"children":[["$","$La",null,{"children":"$Lb"}],null]}],["$","$Lc",null,{"children":"$Ld"}]]}],false]],"m":"$undefined","G":["$e","$undefined"],"s":false,"S":true}
11
+ 0:{"P":null,"b":"hKvS6HjDU-eBShMXMQ7An","p":"","c":["","initialization"],"i":false,"f":[[["",{"children":["initialization",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/861aac2fba8d4e28.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["initialization",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/6a5a3e57e911834d.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/43c514797c454939.js","async":true,"nonce":"$undefined"}]],["$","$L5",null,{"children":["$L6","$L7",["$","$L8",null,{"promise":"$@9"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","BKYhHWM0uhGx1ZTAFV6Liv",{"children":[["$","$La",null,{"children":"$Lb"}],null]}],["$","$Lc",null,{"children":"$Ld"}]]}],false]],"m":"$undefined","G":["$e","$undefined"],"s":false,"S":true}
12
12
  f:"$Sreact.suspense"
13
13
  10:I[73794,["/_next/static/chunks/ecfccf4677b4777a.js"],"AsyncMetadata"]
14
14
  d:["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":["$","$L10",null,{"promise":"$@11"}]}]}]
@@ -3,6 +3,7 @@
3
3
  "/api/admin-git-batch-create-branch/route": "app/api/admin-git-batch-create-branch/route.js",
4
4
  "/api/admin-git-batch-delete-branch/route": "app/api/admin-git-batch-delete-branch/route.js",
5
5
  "/api/admin-git-batch-merge/route": "app/api/admin-git-batch-merge/route.js",
6
+ "/api/admin-git-batch-probe-remote-branch/route": "app/api/admin-git-batch-probe-remote-branch/route.js",
6
7
  "/api/admin-status/route": "app/api/admin-status/route.js",
7
8
  "/api/all-projects-envs/route": "app/api/all-projects-envs/route.js",
8
9
  "/api/check-mock-intercept/route": "app/api/check-mock-intercept/route.js",
@@ -1,16 +1,16 @@
1
1
  module.exports={83886:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("fs",()=>require("fs"))},45935:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},88941:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({PROJECT_CONFIG_PATH:()=>r,ProjectStatus:()=>i,WORKSPACE_CONFIG:()=>t});var s=e.i(13442),n=e.i(30331);let t={WORKSPACE_ROOT:(0,n.join)((0,s.homedir)(),"Documents","prime-workspace"),GIT_TIMEOUT:3e5,MAX_CONCURRENT_CLONES:Math.max(2,Math.min((0,s.cpus)().length,8)),MAX_RETRY_ATTEMPTS:3},r=(0,n.join)((0,s.homedir)(),".prime-projects.json");var i=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}({})}},30331:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("path",()=>require("path"))},29549:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},83943:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},86103:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},23430:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},52670:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js"))},13442:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("os",()=>require("os"))},9892:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("fs/promises",()=>require("fs/promises"))},35692:e=>{"use strict";var{g:t,__dirname:r}=e;e.s({ProjectStatus:()=>a,getProjectsConfig:()=>i,saveProjectsConfig:()=>o});var s=e.i(9892),n=e.i(88941);async function i(){try{await (0,s.access)(n.PROJECT_CONFIG_PATH,s.constants.F_OK)}catch{return await o({}),{}}try{let e=await (0,s.readFile)(n.PROJECT_CONFIG_PATH,"utf-8");if(!e)return{};return JSON.parse(e)}catch(e){throw console.error("读取或解析项目配置文件失败:",e),Error("无法加载项目配置")}}async function o(e){let t=n.PROJECT_CONFIG_PATH+".tmp";try{await (0,s.writeFile)(t,JSON.stringify(e,null,2),"utf-8"),await (0,s.rename)(t,n.PROJECT_CONFIG_PATH)}catch(e){throw console.error("保存项目配置文件失败:",e),Error("无法保存项目配置")}}var a=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e}({})},87485:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("child_process",()=>require("child_process"))},77159:e=>{"use strict";var{g:t,__dirname:r}=e;e.s({checkMultipleProjectsExist:()=>f,checkProjectExists:()=>p,checkProjectStatus:()=>d,cleanupIncompleteProject:()=>m,cloneRepository:()=>c,createWorkspaceDirectory:()=>a,isValidGitUrl:()=>u,sanitizeProjectName:()=>l});var s=e.i(87485),n=e.i(83886),i=e.i(30331),o=e.i(88941);async function a(e){try{return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),{success:!0}}catch(e){return{success:!1,error:`创建工作空间目录失败: ${e instanceof Error?e.message:String(e)}`}}}async function c(e){let{repoUrl:t,projectName:r,targetDir:n,timeout:a,onProgress:c,onError:u,onLog:l}=e,d=r?.trim()||(0,i.basename)(t,".git");return new Promise(e=>{let r=Date.now(),p={projectName:d,status:o.ProjectStatus.CLONING,progress:0,message:"开始克隆项目...",startTime:r};c?.(0,"开始克隆项目...");let g=(0,i.join)(n,d),m=["clone","--progress","--verbose",t,g];l?.(d,"stdout",`[开始克隆] 执行命令: git ${m.join(" ")}
2
2
  `),l?.(d,"stdout",`[目标目录] ${g}
3
3
  `),l?.(d,"stdout",`[仓库地址] ${t}
4
- `);let f=(0,s.spawn)("git",m,{cwd:n,stdio:["pipe","pipe","pipe"]}),x="",w=0;l?.(d,"stdout",`[进程启动] Git 进程 PID: ${f.pid}
4
+ `);let f=(0,s.spawn)("git",m,{cwd:n,stdio:["pipe","pipe","pipe"]}),x="",j=0;l?.(d,"stdout",`[进程启动] Git 进程 PID: ${f.pid}
5
5
  `);let h=setTimeout(()=>{l?.(d,"stderr",`[超时警告] Git 进程运行超过 ${a/1e3}s,即将终止
6
- `),f.kill("SIGTERM");let t={...p,status:o.ProjectStatus.FAILED,progress:w,message:"克隆操作超时",error:`克隆操作超时 (${a/1e3}s)`,endTime:Date.now()};l?.(d,"stderr",`[进程终止] 克隆操作超时
7
- `),u?.(`${d}: 克隆操作超时`),e(t)},a);f.stdout?.on("data",e=>{let t=e.toString();l?.(d,"stdout",t),w=Math.min(w+10,80),c?.(w,"正在克隆代码...")}),f.stderr?.on("data",e=>{let t=e.toString();x+=t,t.includes("remote:")||t.includes("Receiving objects")||t.includes("Resolving deltas")||t.includes("Counting objects")||t.includes("Enumerating objects")||t.includes("Compressing objects")||t.includes("upload-pack")||t.includes("POST git-")||t.includes("正克隆到")||t.includes("Cloning into")?l?.(d,"progress",t):l?.(d,"stderr",t),t.includes("Receiving objects")||t.includes("Resolving deltas")?(w=Math.min(w+5,90),c?.(w,"正在接收对象...")):t.includes("Counting objects")?(w=Math.min(w+2,70),c?.(w,"正在计算对象...")):t.includes("Enumerating objects")&&(w=Math.min(w+2,50),c?.(w,"正在枚举对象..."))}),f.on("close",t=>{clearTimeout(h);let s=Date.now(),n=s-r;if(l?.(d,"stdout",`[进程结束] Git 进程退出,代码: ${t},耗时: ${Math.round(n/1e3)}s
6
+ `),f.kill("SIGTERM");let t={...p,status:o.ProjectStatus.FAILED,progress:j,message:"克隆操作超时",error:`克隆操作超时 (${a/1e3}s)`,endTime:Date.now()};l?.(d,"stderr",`[进程终止] 克隆操作超时
7
+ `),u?.(`${d}: 克隆操作超时`),e(t)},a);f.stdout?.on("data",e=>{let t=e.toString();l?.(d,"stdout",t),j=Math.min(j+10,80),c?.(j,"正在克隆代码...")}),f.stderr?.on("data",e=>{let t=e.toString();x+=t,t.includes("remote:")||t.includes("Receiving objects")||t.includes("Resolving deltas")||t.includes("Counting objects")||t.includes("Enumerating objects")||t.includes("Compressing objects")||t.includes("upload-pack")||t.includes("POST git-")||t.includes("正克隆到")||t.includes("Cloning into")?l?.(d,"progress",t):l?.(d,"stderr",t),t.includes("Receiving objects")||t.includes("Resolving deltas")?(j=Math.min(j+5,90),c?.(j,"正在接收对象...")):t.includes("Counting objects")?(j=Math.min(j+2,70),c?.(j,"正在计算对象...")):t.includes("Enumerating objects")&&(j=Math.min(j+2,50),c?.(j,"正在枚举对象..."))}),f.on("close",t=>{clearTimeout(h);let s=Date.now(),n=s-r;if(l?.(d,"stdout",`[进程结束] Git 进程退出,代码: ${t},耗时: ${Math.round(n/1e3)}s
8
8
  `),0===t){l?.(d,"stdout",`[克隆成功] 项目已成功克隆到: ${g}
9
9
  `);let t={...p,status:o.ProjectStatus.SUCCESS,progress:100,message:"克隆完成",endTime:s};c?.(100,"克隆完成"),e(t)}else{let r=function(e){let t=e.toLowerCase();return t.includes("authentication failed")||t.includes("access denied")?"身份验证失败,请检查仓库访问权限":t.includes("repository not found")||t.includes("not found")?"仓库不存在或无法访问":t.includes("network")||t.includes("connection")?"网络连接问题,请检查网络设置":t.includes("timeout")?"网络超时,请重试":t.includes("permission denied")?"权限被拒绝,请检查文件系统权限":t.includes("already exists")?"目标目录已存在":e.slice(0,200)+(e.length>200?"...":"")}(x);l?.(d,"stderr",`[克隆失败] 错误信息: ${r}
10
10
  `),l?.(d,"stderr",`[完整错误输出]
11
11
  ${x}
12
- `);let n={...p,status:o.ProjectStatus.FAILED,progress:w,message:"克隆失败",error:r||`Git 进程退出,代码: ${t}`,endTime:s};u?.(`${d}: ${n.error}`),e(n)}}),f.on("error",t=>{clearTimeout(h),l?.(d,"stderr",`[进程错误] Git 进程启动失败: ${t.message}
12
+ `);let n={...p,status:o.ProjectStatus.FAILED,progress:j,message:"克隆失败",error:r||`Git 进程退出,代码: ${t}`,endTime:s};u?.(`${d}: ${n.error}`),e(n)}}),f.on("error",t=>{clearTimeout(h),l?.(d,"stderr",`[进程错误] Git 进程启动失败: ${t.message}
13
13
  `),l?.(d,"stderr",`[错误详情] ${t.stack||"No stack trace"}
14
- `);let r={...p,status:o.ProjectStatus.FAILED,progress:w,message:"进程启动失败",error:`进程启动失败: ${t.message}`,endTime:Date.now()};u?.(`${d}: ${t.message}`),e(r)})})}function u(e){return/^(https?:\/\/|git@)[^\s]+\.git$/i.test(e)}function l(e){return e.replace(/[^a-zA-Z0-9\-_]/g,"")}async function d(e,t){try{let r=(0,i.join)(e,t);if(!(0,n.existsSync)(r))return{exists:!1,status:"not_exists",needsCleanup:!1};let s=(0,i.join)(r,".git");if(!(0,n.existsSync)(s))return{exists:!0,status:"incomplete",needsCleanup:!0};if(!await g(r))return console.log(`检测到不完整的Git仓库: ${r}`),{exists:!0,status:"incomplete",needsCleanup:!0};return{exists:!0,status:"complete",needsCleanup:!1}}catch(e){return console.error(`检查项目 ${t} 状态时出错:`,e),{exists:!1,status:"not_exists",needsCleanup:!1}}}async function p(e,t){return"complete"===(await d(e,t)).status}async function g(e){try{let t=(0,i.join)(e,".git");for(let e of["HEAD","config","refs"]){let r=(0,i.join)(t,e);if(!(0,n.existsSync)(r))return!1}let r=(await n.promises.readdir(e)).filter(e=>".git"!==e);if(0===r.length)return!1;let s=(0,i.join)(t,"HEAD"),o=await n.promises.readFile(s,"utf-8");if(!o.trim()||o.includes("unborn"))return!1;return!0}catch(e){return console.error("检查Git仓库完整性时出错:",e),!1}}async function m(e){try{console.log(`正在清理不完整的项目: ${e}`),await n.promises.rm(e,{recursive:!0,force:!0}),console.log(`清理完成: ${e}`)}catch(t){console.error(`清理项目失败 ${e}:`,t)}}async function f(e,t){let r={},s=t.map(async t=>{let s=await p(e,t);r[t]=s});return await Promise.all(s),r}},33808:e=>{"use strict";var{g:t,__dirname:r}=e;e.s({cleanupTempExecutionRepo:()=>u,createTempExecutionRepo:()=>c});var s=e.i(87485),n=e.i(9892),i=e.i(13442),o=e.i(30331);async function a(e,t){return new Promise((r,n)=>{let i=(0,s.spawn)("git",t,{cwd:e,stdio:["ignore","pipe","pipe"]}),o="",a="";i.stdout?.on("data",e=>{o+=e.toString()}),i.stderr?.on("data",e=>{a+=e.toString()}),i.on("close",e=>{r({code:e,stdout:o,stderr:a})}),i.on("error",e=>{n(e)})})}async function c(e,t){let r=await a(e,["remote","get-url","origin"]);if(0!==r.code)return{success:!1,error:r.stderr||r.stdout||"读取 origin 地址失败"};let s=r.stdout.trim();if(!s)return{success:!1,error:"origin 远端地址为空"};let c=`prime-uat-${t.replace(/[^a-zA-Z0-9\-_]/g,"-")}-`,u=await (0,n.mkdtemp)((0,o.join)((0,i.tmpdir)(),c)),l=(0,o.join)(u,t),d=await a(u,["clone","--no-tags",s,l]);return 0!==d.code?(await (0,n.rm)(u,{recursive:!0,force:!0}),{success:!1,error:d.stderr||d.stdout||"克隆临时仓库失败"}):{success:!0,value:{tempRootPath:u,projectPath:l}}}async function u(e){await (0,n.rm)(e,{recursive:!0,force:!0})}},34926:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({appendIgnoredPathsFromCheckoutWarning:()=>i,extractUnableToRmdirPaths:()=>n,hasBlockingWorkspaceChanges:()=>o});let t=/warning:\s+unable to rmdir '([^']+)': Directory not empty/g;function s(e){return e.trim().replace(/\\/g,"/").replace(/^\.\/+/,"").replace(/\/+$/,"")}function n(e){let r,n=new Set;for(;null!==(r=t.exec(e));){let e=s(r[1]||"");e&&n.add(e)}return t.lastIndex=0,[...n]}function i(e,t){let r=[];for(let s of n(e))t.has(s)||(t.add(s),r.push(s));return r}function o(e,t){let r=new Set;if(t)for(let e of t){let t=s(e);t&&r.add(t)}if(0===r.size)return e.trim().length>0;for(let t of e.split(/\r?\n/).filter(e=>e.length>0)){if("??"!==t.slice(0,2))return!0;let e=function(e){let t=e.length>=3?e.slice(3).trim():"";if(!t)return"";let r=t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t,n=" -> ",i=r.lastIndexOf(n);return s(-1===i?r:r.slice(i+n.length))}(t);if(!e)return!0;let n=!1;for(let t of r)if(e===t||e.startsWith(`${t}/`)){n=!0;break}if(!n)return!0}return!1}}},16829:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({clearGwhGitFlowState:()=>a,createGwhGitFlowState:()=>n,isGwhGitFlowAborted:()=>o,markGwhGitFlowAbort:()=>i});let t=new Map;function s(){let e=Date.now();for(let[r,s]of t.entries())e-s.updatedAt>18e5&&t.delete(r)}function n(e){s(),t.set(e,{aborted:!1,updatedAt:Date.now()})}function i(e){let r=t.get(e);t.set(e,{aborted:!0,updatedAt:Date.now()}),r||s()}function o(e){return s(),t.get(e)?.aborted??!1}function a(e){t.delete(e)}}},29494:function(e){var{g:t,__dirname:r,m:s,e:n}=e}};
14
+ `);let r={...p,status:o.ProjectStatus.FAILED,progress:j,message:"进程启动失败",error:`进程启动失败: ${t.message}`,endTime:Date.now()};u?.(`${d}: ${t.message}`),e(r)})})}function u(e){return/^(https?:\/\/|git@)[^\s]+\.git$/i.test(e)}function l(e){return e.replace(/[^a-zA-Z0-9\-_]/g,"")}async function d(e,t){try{let r=(0,i.join)(e,t);if(!(0,n.existsSync)(r))return{exists:!1,status:"not_exists",needsCleanup:!1};let s=(0,i.join)(r,".git");if(!(0,n.existsSync)(s))return{exists:!0,status:"incomplete",needsCleanup:!0};if(!await g(r))return console.log(`检测到不完整的Git仓库: ${r}`),{exists:!0,status:"incomplete",needsCleanup:!0};return{exists:!0,status:"complete",needsCleanup:!1}}catch(e){return console.error(`检查项目 ${t} 状态时出错:`,e),{exists:!1,status:"not_exists",needsCleanup:!1}}}async function p(e,t){return"complete"===(await d(e,t)).status}async function g(e){try{let t=(0,i.join)(e,".git");for(let e of["HEAD","config","refs"]){let r=(0,i.join)(t,e);if(!(0,n.existsSync)(r))return!1}let r=(await n.promises.readdir(e)).filter(e=>".git"!==e);if(0===r.length)return!1;let s=(0,i.join)(t,"HEAD"),o=await n.promises.readFile(s,"utf-8");if(!o.trim()||o.includes("unborn"))return!1;return!0}catch(e){return console.error("检查Git仓库完整性时出错:",e),!1}}async function m(e){try{console.log(`正在清理不完整的项目: ${e}`),await n.promises.rm(e,{recursive:!0,force:!0}),console.log(`清理完成: ${e}`)}catch(t){console.error(`清理项目失败 ${e}:`,t)}}async function f(e,t){let r={},s=t.map(async t=>{let s=await p(e,t);r[t]=s});return await Promise.all(s),r}},33808:e=>{"use strict";var{g:t,__dirname:r}=e;e.s({cleanupTempExecutionRepo:()=>u,createTempExecutionRepo:()=>c});var s=e.i(87485),n=e.i(9892),i=e.i(13442),o=e.i(30331);async function a(e,t){return new Promise((r,n)=>{let i=(0,s.spawn)("git",t,{cwd:e,stdio:["ignore","pipe","pipe"]}),o="",a="";i.stdout?.on("data",e=>{o+=e.toString()}),i.stderr?.on("data",e=>{a+=e.toString()}),i.on("close",e=>{r({code:e,stdout:o,stderr:a})}),i.on("error",e=>{n(e)})})}async function c(e,t){let r=await a(e,["remote","get-url","origin"]);if(0!==r.code)return{success:!1,error:r.stderr||r.stdout||"读取 origin 地址失败"};let s=r.stdout.trim();if(!s)return{success:!1,error:"origin 远端地址为空"};let c=`prime-uat-${t.replace(/[^a-zA-Z0-9\-_]/g,"-")}-`,u=await (0,n.mkdtemp)((0,o.join)((0,i.tmpdir)(),c)),l=(0,o.join)(u,t),d=await a(u,["clone","--no-tags",s,l]);return 0!==d.code?(await (0,n.rm)(u,{recursive:!0,force:!0}),{success:!1,error:d.stderr||d.stdout||"克隆临时仓库失败"}):{success:!0,value:{tempRootPath:u,projectPath:l}}}async function u(e){await (0,n.rm)(e,{recursive:!0,force:!0})}},34926:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({appendIgnoredPathsFromCheckoutWarning:()=>i,extractUnableToRmdirPaths:()=>n,hasBlockingWorkspaceChanges:()=>o});let t=/warning:\s+unable to rmdir '([^']+)': Directory not empty/g;function s(e){return e.trim().replace(/\\/g,"/").replace(/^\.\/+/,"").replace(/\/+$/,"")}function n(e){let r,n=new Set;for(;null!==(r=t.exec(e));){let e=s(r[1]||"");e&&n.add(e)}return t.lastIndex=0,[...n]}function i(e,t){let r=[];for(let s of n(e))t.has(s)||(t.add(s),r.push(s));return r}function o(e,t){let r=new Set;if(t)for(let e of t){let t=s(e);t&&r.add(t)}if(0===r.size)return e.trim().length>0;for(let t of e.split(/\r?\n/).filter(e=>e.length>0)){if("??"!==t.slice(0,2))return!0;let e=function(e){let t=e.length>=3?e.slice(3).trim():"";if(!t)return"";let r=t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t,n=" -> ",i=r.lastIndexOf(n);return s(-1===i?r:r.slice(i+n.length))}(t);if(!e)return!0;let n=!1;for(let t of r)if(e===t||e.startsWith(`${t}/`)){n=!0;break}if(!n)return!0}return!1}}}};
15
15
 
16
- //# sourceMappingURL=%5Broot-of-the-server%5D__66dc5e6b._.js.map
16
+ //# sourceMappingURL=%5Broot-of-the-server%5D__3952b86e._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["turbopack:///[project]/packages/server/src/lib/workspace-types.ts","turbopack:///[project]/packages/server/src/lib/workspace-config.ts","turbopack:///[project]/packages/server/src/lib/git-operations.ts","turbopack:///[project]/packages/server/src/app/api/uat-git-flow/temp-repo.ts","turbopack:///[project]/packages/server/src/app/api/uat-git-flow/git-status-utils.ts"],"sourcesContent":["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 ApiProxyRewrite {\n mode: 'none' | 'remove' | 'replace';\n targetPrefix?: string;\n}\n\nexport interface ApiProxyItem {\n prefix: string;\n proxyKey?: string;\n currentProxy: string;\n proxyEnv: {\n [key: string]: string;\n };\n rewrite?: ApiProxyRewrite;\n}\n\nexport interface ProjectConfig {\n repo: string;\n mockingIntercept?: boolean;\n mockOpen?: boolean;\n envs: {\n [envName: string]: {\n host: string;\n envFileName: string;\n apiProxies: ApiProxyItem[];\n subApps?: string[];\n startCommand?: 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","import { readFile, writeFile, access, constants, rename } from 'fs/promises';\nimport type { ProjectsConfig } from './workspace-types';\nimport { PROJECT_CONFIG_PATH } from './workspace-types';\n\n/**\n * 读取并解析项目配置文件\n * @returns {Promise<ProjectsConfig>} 项目配置对象\n */\nexport async function getProjectsConfig(): Promise<ProjectsConfig> {\n try {\n await access(PROJECT_CONFIG_PATH, constants.F_OK);\n } catch {\n // 文件不存在,创建并写入空对象\n await saveProjectsConfig({});\n return {};\n }\n\n try {\n const configContent = await readFile(PROJECT_CONFIG_PATH, 'utf-8');\n // 如果文件为空,返回空对象\n if (!configContent) {\n return {};\n }\n return JSON.parse(configContent);\n } catch (error) {\n console.error('读取或解析项目配置文件失败:', error);\n // 在出错时返回空对象或抛出错误,这里选择抛出以通知调用者\n throw new Error('无法加载项目配置');\n }\n}\n\n/**\n * 将项目配置写入文件(原子操作)\n * @param {ProjectsConfig} config - 要保存的配置对象\n */\nexport async function saveProjectsConfig(config: ProjectsConfig): Promise<void> {\n const tempConfigPath = PROJECT_CONFIG_PATH + '.tmp';\n try {\n await writeFile(tempConfigPath, JSON.stringify(config, null, 2), 'utf-8');\n await rename(tempConfigPath, PROJECT_CONFIG_PATH);\n } catch (error) {\n console.error('保存项目配置文件失败:', error);\n throw new Error('无法保存项目配置');\n }\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}\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}\n","import { spawn, ChildProcess } from 'child_process';\nimport { existsSync, mkdirSync } from 'fs';\nimport { promises as fs } from 'fs';\nimport { join, basename } from 'path';\nimport {\n ProjectStatus,\n type GitOperationConfig,\n type ProjectProgress,\n} from './workspace-types';\n\n/**\n * 创建工作空间目录\n * @param workspacePath 工作空间路径\n * @returns 创建结果\n */\nexport async function createWorkspaceDirectory(workspacePath: string): Promise<{ success: boolean; error?: string }> {\n try {\n if (!existsSync(workspacePath)) {\n mkdirSync(workspacePath, { recursive: true });\n }\n return { success: true };\n } catch (error) {\n return { \n success: false, \n error: `创建工作空间目录失败: ${error instanceof Error ? error.message : String(error)}` \n };\n }\n}\n\n/**\n * 执行 Git 克隆操作\n * @param config Git 操作配置\n * @returns Promise<ProjectProgress>\n */\nexport async function cloneRepository(config: GitOperationConfig): Promise<ProjectProgress> {\n const { repoUrl, projectName: configuredProjectName, targetDir, timeout, onProgress, onError, onLog } = config;\n const projectName = configuredProjectName?.trim() || basename(repoUrl, '.git');\n \n return new Promise<ProjectProgress>((resolve) => {\n const startTime = Date.now();\n \n // 更新开始状态\n const initialProgress: ProjectProgress = {\n projectName,\n status: ProjectStatus.CLONING,\n progress: 0,\n message: '开始克隆项目...',\n startTime,\n };\n onProgress?.(0, '开始克隆项目...');\n\n // 执行 git clone 命令\n const targetPath = join(targetDir, projectName);\n // 添加 --progress 参数来强制显示进度,--verbose 显示详细信息\n const gitArgs = ['clone', '--progress', '--verbose', repoUrl, targetPath];\n \n // 记录命令启动信息\n onLog?.(projectName, 'stdout', `[开始克隆] 执行命令: git ${gitArgs.join(' ')}\\n`);\n onLog?.(projectName, 'stdout', `[目标目录] ${targetPath}\\n`);\n onLog?.(projectName, 'stdout', `[仓库地址] ${repoUrl}\\n`);\n \n const gitProcess: ChildProcess = spawn('git', gitArgs, {\n cwd: targetDir,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n let errorOutput = '';\n let progressValue = 0;\n \n // 记录进程启动成功\n onLog?.(projectName, 'stdout', `[进程启动] Git 进程 PID: ${gitProcess.pid}\\n`);\n\n // 设置超时\n const timeoutId = setTimeout(() => {\n onLog?.(projectName, 'stderr', `[超时警告] Git 进程运行超过 ${timeout / 1000}s,即将终止\\n`);\n gitProcess.kill('SIGTERM');\n \n const errorResult: ProjectProgress = {\n ...initialProgress,\n status: ProjectStatus.FAILED,\n progress: progressValue,\n message: '克隆操作超时',\n error: `克隆操作超时 (${timeout / 1000}s)`,\n endTime: Date.now(),\n };\n onLog?.(projectName, 'stderr', `[进程终止] 克隆操作超时\\n`);\n onError?.(`${projectName}: 克隆操作超时`);\n resolve(errorResult);\n }, timeout);\n\n // 处理标准输出\n gitProcess.stdout?.on('data', (data: Buffer) => {\n const stdoutText = data.toString();\n \n // 实时发送日志\n onLog?.(projectName, 'stdout', stdoutText);\n \n // 模拟进度更新(Git 克隆没有内置进度,这里基于时间估算)\n progressValue = Math.min(progressValue + 10, 80);\n onProgress?.(progressValue, '正在克隆代码...');\n });\n\n // 处理错误输出\n gitProcess.stderr?.on('data', (data: Buffer) => {\n const stderrText = data.toString();\n errorOutput += stderrText;\n \n // 判断是进度信息还是错误信息\n const isProgressInfo = stderrText.includes('remote:') || \n stderrText.includes('Receiving objects') || \n stderrText.includes('Resolving deltas') ||\n stderrText.includes('Counting objects') ||\n stderrText.includes('Enumerating objects') ||\n stderrText.includes('Compressing objects') ||\n stderrText.includes('upload-pack') ||\n stderrText.includes('POST git-') ||\n stderrText.includes('正克隆到') ||\n stderrText.includes('Cloning into');\n \n // 根据内容类型发送不同的日志\n if (isProgressInfo) {\n onLog?.(projectName, 'progress', stderrText);\n } else {\n onLog?.(projectName, 'stderr', stderrText);\n }\n \n // Git 的进度信息通常在 stderr 中\n if (stderrText.includes('Receiving objects') || stderrText.includes('Resolving deltas')) {\n progressValue = Math.min(progressValue + 5, 90);\n onProgress?.(progressValue, '正在接收对象...');\n } else if (stderrText.includes('Counting objects')) {\n progressValue = Math.min(progressValue + 2, 70);\n onProgress?.(progressValue, '正在计算对象...');\n } else if (stderrText.includes('Enumerating objects')) {\n progressValue = Math.min(progressValue + 2, 50);\n onProgress?.(progressValue, '正在枚举对象...');\n }\n });\n\n // 处理进程结束\n gitProcess.on('close', (code: number | null) => {\n clearTimeout(timeoutId);\n const endTime = Date.now();\n const duration = endTime - startTime;\n \n onLog?.(projectName, 'stdout', `[进程结束] Git 进程退出,代码: ${code},耗时: ${Math.round(duration / 1000)}s\\n`);\n \n if (code === 0) {\n // 克隆成功\n onLog?.(projectName, 'stdout', `[克隆成功] 项目已成功克隆到: ${targetPath}\\n`);\n const successResult: ProjectProgress = {\n ...initialProgress,\n status: ProjectStatus.SUCCESS,\n progress: 100,\n message: '克隆完成',\n endTime,\n };\n onProgress?.(100, '克隆完成');\n resolve(successResult);\n } else {\n // 克隆失败\n const parsedError = parseGitError(errorOutput);\n onLog?.(projectName, 'stderr', `[克隆失败] 错误信息: ${parsedError}\\n`);\n onLog?.(projectName, 'stderr', `[完整错误输出]\\n${errorOutput}\\n`);\n \n const failureResult: ProjectProgress = {\n ...initialProgress,\n status: ProjectStatus.FAILED,\n progress: progressValue,\n message: '克隆失败',\n error: parsedError || `Git 进程退出,代码: ${code}`,\n endTime,\n };\n onError?.(`${projectName}: ${failureResult.error}`);\n resolve(failureResult);\n }\n });\n\n // 处理进程错误\n gitProcess.on('error', (error: Error) => {\n clearTimeout(timeoutId);\n onLog?.(projectName, 'stderr', `[进程错误] Git 进程启动失败: ${error.message}\\n`);\n onLog?.(projectName, 'stderr', `[错误详情] ${error.stack || 'No stack trace'}\\n`);\n \n const errorResult: ProjectProgress = {\n ...initialProgress,\n status: ProjectStatus.FAILED,\n progress: progressValue,\n message: '进程启动失败',\n error: `进程启动失败: ${error.message}`,\n endTime: Date.now(),\n };\n onError?.(`${projectName}: ${error.message}`);\n resolve(errorResult);\n });\n });\n}\n\n/**\n * 解析 Git 错误信息,提供用户友好的错误描述\n * @param errorOutput Git stderr 输出\n * @returns 用户友好的错误描述\n */\nfunction parseGitError(errorOutput: string): string {\n const lowerOutput = errorOutput.toLowerCase();\n \n if (lowerOutput.includes('authentication failed') || lowerOutput.includes('access denied')) {\n return '身份验证失败,请检查仓库访问权限';\n }\n \n if (lowerOutput.includes('repository not found') || lowerOutput.includes('not found')) {\n return '仓库不存在或无法访问';\n }\n \n if (lowerOutput.includes('network') || lowerOutput.includes('connection')) {\n return '网络连接问题,请检查网络设置';\n }\n \n if (lowerOutput.includes('timeout')) {\n return '网络超时,请重试';\n }\n \n if (lowerOutput.includes('permission denied')) {\n return '权限被拒绝,请检查文件系统权限';\n }\n \n if (lowerOutput.includes('already exists')) {\n return '目标目录已存在';\n }\n \n // 返回原始错误的前200个字符\n return errorOutput.slice(0, 200) + (errorOutput.length > 200 ? '...' : '');\n}\n\n/**\n * 验证 Git 仓库 URL 格式\n * @param url Git 仓库 URL\n * @returns 是否有效\n */\nexport function isValidGitUrl(url: string): boolean {\n const gitUrlPattern = /^(https?:\\/\\/|git@)[^\\s]+\\.git$/i;\n return gitUrlPattern.test(url);\n}\n\n/**\n * 清理项目名称,移除不安全字符\n * @param projectName 项目名称\n * @returns 清理后的项目名称\n */\nexport function sanitizeProjectName(projectName: string): string {\n return projectName.replace(/[^a-zA-Z0-9\\-_]/g, '');\n}\n\n/**\n * 项目检查结果类型\n */\nexport type ProjectCheckResult = {\n exists: boolean;\n status: 'not_exists' | 'complete' | 'incomplete';\n needsCleanup: boolean;\n};\n\n/**\n * 检查项目状态(详细版本)\n * @param workspacePath 工作空间路径\n * @param projectName 项目名称\n * @returns Promise<ProjectCheckResult> 详细的项目状态\n */\nexport async function checkProjectStatus(workspacePath: string, projectName: string): Promise<ProjectCheckResult> {\n try {\n const projectPath = join(workspacePath, projectName);\n \n // 检查项目目录是否存在\n if (!existsSync(projectPath)) {\n return {\n exists: false,\n status: 'not_exists',\n needsCleanup: false\n };\n }\n \n // 检查是否为 Git 仓库(存在 .git 目录)\n const gitPath = join(projectPath, '.git');\n if (!existsSync(gitPath)) {\n return {\n exists: true,\n status: 'incomplete',\n needsCleanup: true\n };\n }\n \n // 更严格的完整性检查\n const isComplete = await isGitRepositoryComplete(projectPath);\n if (!isComplete) {\n console.log(`检测到不完整的Git仓库: ${projectPath}`);\n return {\n exists: true,\n status: 'incomplete',\n needsCleanup: true\n };\n }\n \n return {\n exists: true,\n status: 'complete',\n needsCleanup: false\n };\n } catch (error) {\n console.error(`检查项目 ${projectName} 状态时出错:`, error);\n return {\n exists: false,\n status: 'not_exists',\n needsCleanup: false\n };\n }\n}\n\n/**\n * 检查项目是否已存在于工作空间中(兼容版本)\n * @param workspacePath 工作空间路径\n * @param projectName 项目名称\n * @returns Promise<boolean> 项目是否存在且为有效的 Git 仓库\n */\nexport async function checkProjectExists(workspacePath: string, projectName: string): Promise<boolean> {\n const result = await checkProjectStatus(workspacePath, projectName);\n return result.status === 'complete';\n}\n\n/**\n * 检查Git仓库是否完整\n * @param projectPath 项目路径\n * @returns Promise<boolean> 仓库是否完整\n */\nasync function isGitRepositoryComplete(projectPath: string): Promise<boolean> {\n try {\n const gitPath = join(projectPath, '.git');\n \n // 检查关键的Git文件是否存在\n const requiredFiles = ['HEAD', 'config', 'refs'];\n for (const file of requiredFiles) {\n const filePath = join(gitPath, file);\n if (!existsSync(filePath)) {\n return false;\n }\n }\n \n // 检查是否有实际的项目文件(不只是.git目录)\n const entries = await fs.readdir(projectPath);\n const nonGitFiles = entries.filter((entry: string) => entry !== '.git');\n \n // 如果只有.git目录,说明克隆未完成\n if (nonGitFiles.length === 0) {\n return false;\n }\n \n // 检查HEAD文件是否有效\n const headPath = join(gitPath, 'HEAD');\n const headContent = await fs.readFile(headPath, 'utf-8');\n if (!headContent.trim() || headContent.includes('unborn')) {\n return false;\n }\n \n return true;\n } catch (error) {\n console.error('检查Git仓库完整性时出错:', error);\n return false;\n }\n}\n\n/**\n * 清理不完整的项目目录\n * @param projectPath 项目路径\n */\nexport async function cleanupIncompleteProject(projectPath: string): Promise<void> {\n try {\n console.log(`正在清理不完整的项目: ${projectPath}`);\n await fs.rm(projectPath, { recursive: true, force: true });\n console.log(`清理完成: ${projectPath}`);\n } catch (error) {\n console.error(`清理项目失败 ${projectPath}:`, error);\n // 清理失败不抛出错误,避免阻塞后续流程\n }\n}\n\n/**\n * 批量检查多个项目的存在状态\n * @param workspacePath 工作空间路径\n * @param projectNames 项目名称列表\n * @returns Promise<Record<string, boolean>> 项目名称到存在状态的映射\n */\nexport async function checkMultipleProjectsExist(\n workspacePath: string, \n projectNames: string[]\n): Promise<Record<string, boolean>> {\n const results: Record<string, boolean> = {};\n \n // 并行检查所有项目\n const checks = projectNames.map(async (projectName) => {\n const exists = await checkProjectExists(workspacePath, projectName);\n results[projectName] = exists;\n });\n \n await Promise.all(checks);\n return results;\n} \n","import { spawn } from 'child_process';\nimport { mkdtemp, rm } from 'fs/promises';\nimport { tmpdir } from 'os';\nimport { join } from 'path';\n\ntype GitResult = {\n code: number | null;\n stdout: string;\n stderr: string;\n};\n\nasync function runGitCommand(cwd: string, args: string[]): Promise<GitResult> {\n return new Promise((resolve, reject) => {\n const child = spawn('git', args, {\n cwd,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n resolve({ code, stdout, stderr });\n });\n\n child.on('error', (error) => {\n reject(error);\n });\n });\n}\n\nfunction sanitizeProjectNameForTemp(projectName: string) {\n return projectName.replace(/[^a-zA-Z0-9\\-_]/g, '-');\n}\n\nexport type TempExecutionRepo = {\n tempRootPath: string;\n projectPath: string;\n};\n\nexport async function createTempExecutionRepo(sourceProjectPath: string, projectName: string): Promise<{\n success: true;\n value: TempExecutionRepo;\n} | {\n success: false;\n error: string;\n}> {\n const remoteResult = await runGitCommand(sourceProjectPath, ['remote', 'get-url', 'origin']);\n if (remoteResult.code !== 0) {\n return {\n success: false,\n error: remoteResult.stderr || remoteResult.stdout || '读取 origin 地址失败',\n };\n }\n\n const remoteUrl = remoteResult.stdout.trim();\n if (!remoteUrl) {\n return {\n success: false,\n error: 'origin 远端地址为空',\n };\n }\n\n const prefix = `prime-uat-${sanitizeProjectNameForTemp(projectName)}-`;\n const tempRootPath = await mkdtemp(join(tmpdir(), prefix));\n const tempProjectPath = join(tempRootPath, projectName);\n\n const cloneResult = await runGitCommand(tempRootPath, ['clone', '--no-tags', remoteUrl, tempProjectPath]);\n if (cloneResult.code !== 0) {\n await rm(tempRootPath, { recursive: true, force: true });\n return {\n success: false,\n error: cloneResult.stderr || cloneResult.stdout || '克隆临时仓库失败',\n };\n }\n\n return {\n success: true,\n value: {\n tempRootPath,\n projectPath: tempProjectPath,\n },\n };\n}\n\nexport async function cleanupTempExecutionRepo(tempRootPath: string) {\n await rm(tempRootPath, { recursive: true, force: true });\n}\n","const unableToRmdirWarningPattern = /warning:\\s+unable to rmdir '([^']+)': Directory not empty/g;\n\nfunction normalizeGitPath(path: string) {\n return path\n .trim()\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\/+/, '')\n .replace(/\\/+$/, '');\n}\n\nfunction parseStatusPath(line: string) {\n const rawPath = line.length >= 3 ? line.slice(3).trim() : '';\n if (!rawPath) return '';\n\n const unquoted = rawPath.startsWith('\"') && rawPath.endsWith('\"')\n ? rawPath.slice(1, -1)\n : rawPath;\n const renamedSeparator = ' -> ';\n const renamedIndex = unquoted.lastIndexOf(renamedSeparator);\n const targetPath = renamedIndex === -1\n ? unquoted\n : unquoted.slice(renamedIndex + renamedSeparator.length);\n\n return normalizeGitPath(targetPath);\n}\n\nexport function extractUnableToRmdirPaths(stderr: string) {\n const matchedPaths = new Set<string>();\n let match: RegExpExecArray | null;\n\n while ((match = unableToRmdirWarningPattern.exec(stderr)) !== null) {\n const normalizedPath = normalizeGitPath(match[1] || '');\n if (normalizedPath) {\n matchedPaths.add(normalizedPath);\n }\n }\n\n unableToRmdirWarningPattern.lastIndex = 0;\n return [...matchedPaths];\n}\n\nexport function appendIgnoredPathsFromCheckoutWarning(stderr: string, ignoredPaths: Set<string>) {\n const addedPaths: string[] = [];\n for (const path of extractUnableToRmdirPaths(stderr)) {\n if (!ignoredPaths.has(path)) {\n ignoredPaths.add(path);\n addedPaths.push(path);\n }\n }\n return addedPaths;\n}\n\nexport function hasBlockingWorkspaceChanges(statusOutput: string, ignoredUntrackedPaths?: Iterable<string>) {\n const ignoredPathSet = new Set<string>();\n if (ignoredUntrackedPaths) {\n for (const path of ignoredUntrackedPaths) {\n const normalizedPath = normalizeGitPath(path);\n if (normalizedPath) {\n ignoredPathSet.add(normalizedPath);\n }\n }\n }\n\n if (ignoredPathSet.size === 0) {\n return statusOutput.trim().length > 0;\n }\n\n const lines = statusOutput.split(/\\r?\\n/).filter(line => line.length > 0);\n for (const line of lines) {\n const statusCode = line.slice(0, 2);\n if (statusCode !== '??') {\n return true;\n }\n\n const statusPath = parseStatusPath(line);\n if (!statusPath) {\n return true;\n }\n\n let shouldIgnore = false;\n for (const ignoredPath of ignoredPathSet) {\n if (statusPath === ignoredPath || statusPath.startsWith(`${ignoredPath}/`)) {\n shouldIgnore = true;\n break;\n }\n }\n\n if (!shouldIgnore) {\n return true;\n }\n }\n\n return false;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ module.exports={83886:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("fs",()=>require("fs"))},45935:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},88941:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({PROJECT_CONFIG_PATH:()=>r,ProjectStatus:()=>i,WORKSPACE_CONFIG:()=>t});var s=e.i(13442),n=e.i(30331);let t={WORKSPACE_ROOT:(0,n.join)((0,s.homedir)(),"Documents","prime-workspace"),GIT_TIMEOUT:3e5,MAX_CONCURRENT_CLONES:Math.max(2,Math.min((0,s.cpus)().length,8)),MAX_RETRY_ATTEMPTS:3},r=(0,n.join)((0,s.homedir)(),".prime-projects.json");var i=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}({})}},30331:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("path",()=>require("path"))},29549:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},83943:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},86103:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},23430:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},52670:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js"))},13442:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("os",()=>require("os"))},9892:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("fs/promises",()=>require("fs/promises"))},35692:e=>{"use strict";var{g:t,__dirname:r}=e;e.s({ProjectStatus:()=>a,getProjectsConfig:()=>i,saveProjectsConfig:()=>o});var s=e.i(9892),n=e.i(88941);async function i(){try{await (0,s.access)(n.PROJECT_CONFIG_PATH,s.constants.F_OK)}catch{return await o({}),{}}try{let e=await (0,s.readFile)(n.PROJECT_CONFIG_PATH,"utf-8");if(!e)return{};return JSON.parse(e)}catch(e){throw console.error("读取或解析项目配置文件失败:",e),Error("无法加载项目配置")}}async function o(e){let t=n.PROJECT_CONFIG_PATH+".tmp";try{await (0,s.writeFile)(t,JSON.stringify(e,null,2),"utf-8"),await (0,s.rename)(t,n.PROJECT_CONFIG_PATH)}catch(e){throw console.error("保存项目配置文件失败:",e),Error("无法保存项目配置")}}var a=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e}({})},87485:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("child_process",()=>require("child_process"))},77159:e=>{"use strict";var{g:t,__dirname:r}=e;e.s({checkMultipleProjectsExist:()=>f,checkProjectExists:()=>d,checkProjectStatus:()=>l,cleanupIncompleteProject:()=>m,cloneRepository:()=>c,createWorkspaceDirectory:()=>a,isValidGitUrl:()=>u,sanitizeProjectName:()=>p});var s=e.i(87485),n=e.i(83886),i=e.i(30331),o=e.i(88941);async function a(e){try{return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),{success:!0}}catch(e){return{success:!1,error:`创建工作空间目录失败: ${e instanceof Error?e.message:String(e)}`}}}async function c(e){let{repoUrl:t,projectName:r,targetDir:n,timeout:a,onProgress:c,onError:u,onLog:p}=e,l=r?.trim()||(0,i.basename)(t,".git");return new Promise(e=>{let r=Date.now(),d={projectName:l,status:o.ProjectStatus.CLONING,progress:0,message:"开始克隆项目...",startTime:r};c?.(0,"开始克隆项目...");let g=(0,i.join)(n,l),m=["clone","--progress","--verbose",t,g];p?.(l,"stdout",`[开始克隆] 执行命令: git ${m.join(" ")}
2
+ `),p?.(l,"stdout",`[目标目录] ${g}
3
+ `),p?.(l,"stdout",`[仓库地址] ${t}
4
+ `);let f=(0,s.spawn)("git",m,{cwd:n,stdio:["pipe","pipe","pipe"]}),h="",x=0;p?.(l,"stdout",`[进程启动] Git 进程 PID: ${f.pid}
5
+ `);let $=setTimeout(()=>{p?.(l,"stderr",`[超时警告] Git 进程运行超过 ${a/1e3}s,即将终止
6
+ `),f.kill("SIGTERM");let t={...d,status:o.ProjectStatus.FAILED,progress:x,message:"克隆操作超时",error:`克隆操作超时 (${a/1e3}s)`,endTime:Date.now()};p?.(l,"stderr",`[进程终止] 克隆操作超时
7
+ `),u?.(`${l}: 克隆操作超时`),e(t)},a);f.stdout?.on("data",e=>{let t=e.toString();p?.(l,"stdout",t),x=Math.min(x+10,80),c?.(x,"正在克隆代码...")}),f.stderr?.on("data",e=>{let t=e.toString();h+=t,t.includes("remote:")||t.includes("Receiving objects")||t.includes("Resolving deltas")||t.includes("Counting objects")||t.includes("Enumerating objects")||t.includes("Compressing objects")||t.includes("upload-pack")||t.includes("POST git-")||t.includes("正克隆到")||t.includes("Cloning into")?p?.(l,"progress",t):p?.(l,"stderr",t),t.includes("Receiving objects")||t.includes("Resolving deltas")?(x=Math.min(x+5,90),c?.(x,"正在接收对象...")):t.includes("Counting objects")?(x=Math.min(x+2,70),c?.(x,"正在计算对象...")):t.includes("Enumerating objects")&&(x=Math.min(x+2,50),c?.(x,"正在枚举对象..."))}),f.on("close",t=>{clearTimeout($);let s=Date.now(),n=s-r;if(p?.(l,"stdout",`[进程结束] Git 进程退出,代码: ${t},耗时: ${Math.round(n/1e3)}s
8
+ `),0===t){p?.(l,"stdout",`[克隆成功] 项目已成功克隆到: ${g}
9
+ `);let t={...d,status:o.ProjectStatus.SUCCESS,progress:100,message:"克隆完成",endTime:s};c?.(100,"克隆完成"),e(t)}else{let r=function(e){let t=e.toLowerCase();return t.includes("authentication failed")||t.includes("access denied")?"身份验证失败,请检查仓库访问权限":t.includes("repository not found")||t.includes("not found")?"仓库不存在或无法访问":t.includes("network")||t.includes("connection")?"网络连接问题,请检查网络设置":t.includes("timeout")?"网络超时,请重试":t.includes("permission denied")?"权限被拒绝,请检查文件系统权限":t.includes("already exists")?"目标目录已存在":e.slice(0,200)+(e.length>200?"...":"")}(h);p?.(l,"stderr",`[克隆失败] 错误信息: ${r}
10
+ `),p?.(l,"stderr",`[完整错误输出]
11
+ ${h}
12
+ `);let n={...d,status:o.ProjectStatus.FAILED,progress:x,message:"克隆失败",error:r||`Git 进程退出,代码: ${t}`,endTime:s};u?.(`${l}: ${n.error}`),e(n)}}),f.on("error",t=>{clearTimeout($),p?.(l,"stderr",`[进程错误] Git 进程启动失败: ${t.message}
13
+ `),p?.(l,"stderr",`[错误详情] ${t.stack||"No stack trace"}
14
+ `);let r={...d,status:o.ProjectStatus.FAILED,progress:x,message:"进程启动失败",error:`进程启动失败: ${t.message}`,endTime:Date.now()};u?.(`${l}: ${t.message}`),e(r)})})}function u(e){return/^(https?:\/\/|git@)[^\s]+\.git$/i.test(e)}function p(e){return e.replace(/[^a-zA-Z0-9\-_]/g,"")}async function l(e,t){try{let r=(0,i.join)(e,t);if(!(0,n.existsSync)(r))return{exists:!1,status:"not_exists",needsCleanup:!1};let s=(0,i.join)(r,".git");if(!(0,n.existsSync)(s))return{exists:!0,status:"incomplete",needsCleanup:!0};if(!await g(r))return console.log(`检测到不完整的Git仓库: ${r}`),{exists:!0,status:"incomplete",needsCleanup:!0};return{exists:!0,status:"complete",needsCleanup:!1}}catch(e){return console.error(`检查项目 ${t} 状态时出错:`,e),{exists:!1,status:"not_exists",needsCleanup:!1}}}async function d(e,t){return"complete"===(await l(e,t)).status}async function g(e){try{let t=(0,i.join)(e,".git");for(let e of["HEAD","config","refs"]){let r=(0,i.join)(t,e);if(!(0,n.existsSync)(r))return!1}let r=(await n.promises.readdir(e)).filter(e=>".git"!==e);if(0===r.length)return!1;let s=(0,i.join)(t,"HEAD"),o=await n.promises.readFile(s,"utf-8");if(!o.trim()||o.includes("unborn"))return!1;return!0}catch(e){return console.error("检查Git仓库完整性时出错:",e),!1}}async function m(e){try{console.log(`正在清理不完整的项目: ${e}`),await n.promises.rm(e,{recursive:!0,force:!0}),console.log(`清理完成: ${e}`)}catch(t){console.error(`清理项目失败 ${e}:`,t)}}async function f(e,t){let r={},s=t.map(async t=>{let s=await d(e,t);r[t]=s});return await Promise.all(s),r}},33808:e=>{"use strict";var{g:t,__dirname:r}=e;e.s({cleanupTempExecutionRepo:()=>u,createTempExecutionRepo:()=>c});var s=e.i(87485),n=e.i(9892),i=e.i(13442),o=e.i(30331);async function a(e,t){return new Promise((r,n)=>{let i=(0,s.spawn)("git",t,{cwd:e,stdio:["ignore","pipe","pipe"]}),o="",a="";i.stdout?.on("data",e=>{o+=e.toString()}),i.stderr?.on("data",e=>{a+=e.toString()}),i.on("close",e=>{r({code:e,stdout:o,stderr:a})}),i.on("error",e=>{n(e)})})}async function c(e,t){let r=await a(e,["remote","get-url","origin"]);if(0!==r.code)return{success:!1,error:r.stderr||r.stdout||"读取 origin 地址失败"};let s=r.stdout.trim();if(!s)return{success:!1,error:"origin 远端地址为空"};let c=`prime-uat-${t.replace(/[^a-zA-Z0-9\-_]/g,"-")}-`,u=await (0,n.mkdtemp)((0,o.join)((0,i.tmpdir)(),c)),p=(0,o.join)(u,t),l=await a(u,["clone","--no-tags",s,p]);return 0!==l.code?(await (0,n.rm)(u,{recursive:!0,force:!0}),{success:!1,error:l.stderr||l.stdout||"克隆临时仓库失败"}):{success:!0,value:{tempRootPath:u,projectPath:p}}}async function u(e){await (0,n.rm)(e,{recursive:!0,force:!0})}},50784:function(e){var{g:t,__dirname:r,m:s,e:n}=e},84115:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({POST:()=>m});var s=e.i(15494),n=e.i(87485),i=e.i(83886),o=e.i(30331),a=e.i(35692),c=e.i(77159),u=e.i(88941),p=e.i(33808);let t=/\s/;function l(e,t){return new Promise((r,s)=>{let i=(0,n.spawn)("git",t,{cwd:e,stdio:["ignore","pipe","pipe"]}),o="",a="";i.stdout?.on("data",e=>{o+=e.toString()}),i.stderr?.on("data",e=>{a+=e.toString()}),i.on("close",e=>{r({code:e,stdout:o,stderr:a})}),i.on("error",e=>{s(e)})})}function d(e){return`git ${e.join(" ")}`}function g(e,t,r,s){0===s.code?e.push(`[${t}] 完成: ${r}`):e.push(`[${t}] 失败: ${r} ${s.stderr||s.stdout}`)}async function m(e){let r=new Set;try{let n=await e.json(),m=Array.isArray(n.projects)?n.projects:[],f="string"==typeof n.branchName?n.branchName.trim():"",h=!!n.dryRun,x=[],$=[],j=[],v=new Map,y=(e,t,r,s)=>{v.has(e)||(v.set(e,{success:t,reason:r,exists:s}),j.push({projectName:e,success:t,reason:r,exists:s}))};if(0===m.length||!f)return s.NextResponse.json({success:!1,operationLogs:x,feedbacks:["缺少必要参数,请填写完整后重试。"]},{status:400});if(!(!(!f||t.test(f)||f.startsWith("-"))&&1))return s.NextResponse.json({success:!1,operationLogs:x,feedbacks:["分支名称不合法,请避免空格或以 - 开头。"]},{status:400});let w=await (0,a.getProjectsConfig)(),P=u.WORKSPACE_CONFIG.WORKSPACE_ROOT;for(let e of m){let t=String(e),s=(0,c.sanitizeProjectName)(t);if(!s||s!==t){x.push(`[${t}] 失败: 项目名称包含无效字符`),$.push(`[${t}] 项目名称包含无效字符,已跳过。`),y(t,!1,"项目名称包含无效字符");continue}if(!w[s]){x.push(`[${s}] 失败: 未在项目配置中找到`),$.push(`[${s}] 未在项目配置中找到,已跳过。`),y(s,!1,"未在项目配置中找到");continue}let n=(0,o.join)(P,s);if(!(0,i.existsSync)(n)){x.push(`[${s}] 失败: 项目目录不存在`),$.push(`[${s}] 项目目录不存在,已跳过。`),y(s,!1,"项目目录不存在");continue}if(!(0,i.existsSync)((0,o.join)(n,".git"))){x.push(`[${s}] 失败: 非 Git 仓库`),$.push(`[${s}] 不是有效的 Git 仓库,已跳过。`),y(s,!1,"不是有效的 Git 仓库");continue}if(h){x.push(`[${s}] ${d(["fetch","origin"])}`),x.push(`[${s}] ${d(["ls-remote","--heads","origin",f])}`),y(s,!0);continue}let a=await (0,p.createTempExecutionRepo)(n,s);if(!a.success){x.push(`[${s}] 失败: 创建临时执行仓库失败 ${a.error}`),$.push(`[${s}] 创建临时执行仓库失败: ${a.error}`),y(s,!1,"创建临时执行仓库失败");continue}let u=a.value.projectPath;r.add(a.value.tempRootPath),x.push(`[${s}] 使用临时目录执行: ${u}`),x.push(`[${s}] ${d(["fetch","origin"])}`);let m=await l(u,["fetch","origin"]);if(g(x,s,"拉取远端",m),0!==m.code){$.push(`[${s}] 拉取远端失败: ${m.stderr||m.stdout}`),y(s,!1,"拉取远端失败");continue}x.push(`[${s}] ${d(["ls-remote","--heads","origin",f])}`);let j=await l(u,["ls-remote","--heads","origin",f]);if(g(x,s,`探测 origin/${f}`,j),0!==j.code){$.push(`[${s}] 探测远端分支失败: ${j.stderr||j.stdout}`),y(s,!1,"探测远端分支失败");continue}j.stdout.trim()?y(s,!0,void 0,!0):($.push(`[${s}] origin/${f} 不存在。`),y(s,!0,`origin/${f} 不存在`,!1))}return s.NextResponse.json({success:j.every(e=>e.success),operationLogs:x,feedbacks:$,projectResults:j})}catch(e){return console.error("批量探测远端分支执行失败:",e),s.NextResponse.json({success:!1,operationLogs:[],feedbacks:[e instanceof Error?e.message:"执行失败"]},{status:500})}finally{for(let e of r)try{await (0,p.cleanupTempExecutionRepo)(e)}catch(t){console.error(`清理临时目录失败: ${e}`,t)}}}}},54461:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({patchFetch:()=>a,routeModule:()=>t,serverHooks:()=>u,workAsyncStorage:()=>r,workUnitAsyncStorage:()=>c});var s=e.i(45746),n=e.i(93828),i=e.i(18250),o=e.i(84115);let t=new s.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/admin-git-batch-probe-remote-branch/route",pathname:"/api/admin-git-batch-probe-remote-branch",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/admin-git-batch-probe-remote-branch/route.ts",nextConfigOutput:"",userland:o}),{workAsyncStorage:r,workUnitAsyncStorage:c,serverHooks:u}=t;function a(){return(0,i.patchFetch)({workAsyncStorage:r,workUnitAsyncStorage:c})}}}};
15
+
16
+ //# sourceMappingURL=%5Broot-of-the-server%5D__d3078133._.js.map