prime-dev-cli 2.0.7 → 2.0.9

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 (98) hide show
  1. package/config/projects.json +80 -24
  2. package/dist/server/.next/BUILD_ID +1 -1
  3. package/dist/server/.next/app-build-manifest.json +3 -3
  4. package/dist/server/.next/build-manifest.json +2 -2
  5. package/dist/server/.next/cache/.rscinfo +1 -1
  6. package/dist/server/.next/cache/.tsbuildinfo +1 -1
  7. package/dist/server/.next/cache/eslint/.cache_1qa5vxt +1 -1
  8. package/dist/server/.next/fallback-build-manifest.json +2 -2
  9. package/dist/server/.next/next-minimal-server.js.nft.json +1 -1
  10. package/dist/server/.next/next-server.js.nft.json +1 -1
  11. package/dist/server/.next/prerender-manifest.json +3 -3
  12. package/dist/server/.next/server/app/_not-found.html +1 -1
  13. package/dist/server/.next/server/app/_not-found.rsc +1 -1
  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-delete-branch/route.js.nft.json +1 -1
  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.js.nft.json +1 -1
  18. package/dist/server/.next/server/app/api/batch-list-branches/route.js +1 -1
  19. package/dist/server/.next/server/app/api/batch-list-branches/route.js.nft.json +1 -1
  20. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route.js +1 -1
  21. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route.js.nft.json +1 -1
  22. package/dist/server/.next/server/app/api/batch-switch-branch/route.js.nft.json +1 -1
  23. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route.js.nft.json +1 -1
  24. package/dist/server/.next/server/app/api/branch/switch/route.js.nft.json +1 -1
  25. package/dist/server/.next/server/app/api/branches/route.js.nft.json +1 -1
  26. package/dist/server/.next/server/app/api/check-workspace/route.js.nft.json +1 -1
  27. package/dist/server/.next/server/app/api/gwh-git-flow/route.js.nft.json +1 -1
  28. package/dist/server/.next/server/app/api/initialize-workspace/route.js.nft.json +1 -1
  29. package/dist/server/.next/server/app/api/microapp-proxy-config/route.js.nft.json +1 -1
  30. package/dist/server/.next/server/app/api/open-project/route.js.nft.json +1 -1
  31. package/dist/server/.next/server/app/api/project-config/route.js.nft.json +1 -1
  32. package/dist/server/.next/server/app/api/retry-project/route.js.nft.json +1 -1
  33. package/dist/server/.next/server/app/api/submodule-info/route.js.nft.json +1 -1
  34. package/dist/server/.next/server/app/api/uat-git-flow/route.js +2 -2
  35. package/dist/server/.next/server/app/api/uat-git-flow/route.js.nft.json +1 -1
  36. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js +2 -2
  37. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js.nft.json +1 -1
  38. package/dist/server/.next/server/app/configuration/page/app-build-manifest.json +1 -1
  39. package/dist/server/.next/server/app/configuration/page_client-reference-manifest.js +1 -1
  40. package/dist/server/.next/server/app/configuration.html +1 -1
  41. package/dist/server/.next/server/app/configuration.rsc +2 -2
  42. package/dist/server/.next/server/app/index.html +1 -1
  43. package/dist/server/.next/server/app/index.rsc +1 -1
  44. package/dist/server/.next/server/app/initialization/page/app-build-manifest.json +2 -2
  45. package/dist/server/.next/server/app/initialization/page.js.nft.json +1 -1
  46. package/dist/server/.next/server/app/initialization/page_client-reference-manifest.js +1 -1
  47. package/dist/server/.next/server/app/initialization.html +1 -1
  48. package/dist/server/.next/server/app/initialization.rsc +2 -2
  49. package/dist/server/.next/server/chunks/[root-of-the-server]__6c7b8215._.js +3 -0
  50. package/dist/server/.next/server/chunks/[root-of-the-server]__6c7b8215._.js.map +1 -0
  51. package/dist/server/.next/server/chunks/[root-of-the-server]__c52380bc._.js +3 -0
  52. package/dist/server/.next/server/chunks/[root-of-the-server]__c52380bc._.js.map +1 -0
  53. package/dist/server/.next/server/chunks/_24087f66._.js +1 -1
  54. package/dist/server/.next/server/chunks/_24087f66._.js.map +1 -1
  55. package/dist/server/.next/server/chunks/_61c263b3._.js +1 -1
  56. package/dist/server/.next/server/chunks/_61c263b3._.js.map +1 -1
  57. package/dist/server/.next/server/chunks/packages_server_42b02aec._.js +3 -0
  58. package/dist/server/.next/server/chunks/packages_server_42b02aec._.js.map +1 -0
  59. package/dist/server/.next/server/chunks/packages_server_854cbe00._.js +3 -0
  60. package/dist/server/.next/server/chunks/packages_server_854cbe00._.js.map +1 -0
  61. package/dist/server/.next/server/chunks/ssr/_283bdc73._.js +1 -1
  62. package/dist/server/.next/server/chunks/ssr/_283bdc73._.js.map +1 -1
  63. package/dist/server/.next/server/chunks/ssr/_c7905e3c._.js +1 -1
  64. package/dist/server/.next/server/chunks/ssr/_c7905e3c._.js.map +1 -1
  65. package/dist/server/.next/server/chunks/ssr/packages_server_src_622c27d6._.js +3 -0
  66. package/dist/server/.next/server/chunks/ssr/packages_server_src_622c27d6._.js.map +1 -0
  67. package/dist/server/.next/server/pages/404.html +1 -1
  68. package/dist/server/.next/server/pages/500.html +1 -1
  69. package/dist/server/.next/server/server-reference-manifest.js +1 -1
  70. package/dist/server/.next/server/server-reference-manifest.json +1 -1
  71. package/dist/server/.next/static/chunks/16b23f7570a551e1.js +3 -0
  72. package/dist/server/.next/static/chunks/{736431eeff70b2b7.js → 4e8de43e1f6c5336.js} +2 -2
  73. package/dist/server/.next/static/chunks/{51509164bafe1e57.js.map → 84a2f16086c26ab1.js.map} +1 -1
  74. package/dist/server/.next/static/chunks/b109f2fb91f36e31.js.map +1 -0
  75. package/dist/server/.next/static/chunks/{1ae3fa2333c12687.js → f3137530db91c282.js} +2 -2
  76. package/dist/server/.next/static/chunks/{227a962f4584edf8.js.map → fa09d2a29cc42906.js.map} +1 -1
  77. package/dist/server/.next/trace +2 -2
  78. package/package.json +1 -1
  79. package/plugin-marketplace/plugins/prime-dev-cli/skills/prime-workspace/SKILL.md +112 -22
  80. package/skills/prime-workspace/README.md +20 -2
  81. package/skills/prime-workspace/SKILL.md +510 -214
  82. package/skills/prime-workspace/references/api-contracts.md +125 -0
  83. package/skills/prime-workspace/references/microfrontend-proxy.md +155 -0
  84. package/dist/server/.next/server/chunks/[root-of-the-server]__131fe141._.js +0 -3
  85. package/dist/server/.next/server/chunks/[root-of-the-server]__131fe141._.js.map +0 -1
  86. package/dist/server/.next/server/chunks/[root-of-the-server]__36b87de0._.js +0 -3
  87. package/dist/server/.next/server/chunks/[root-of-the-server]__36b87de0._.js.map +0 -1
  88. package/dist/server/.next/server/chunks/packages_server_ccc16996._.js +0 -3
  89. package/dist/server/.next/server/chunks/packages_server_ccc16996._.js.map +0 -1
  90. package/dist/server/.next/server/chunks/packages_server_d1209331._.js +0 -3
  91. package/dist/server/.next/server/chunks/packages_server_d1209331._.js.map +0 -1
  92. package/dist/server/.next/server/chunks/ssr/packages_server_src_65e3de99._.js +0 -3
  93. package/dist/server/.next/server/chunks/ssr/packages_server_src_65e3de99._.js.map +0 -1
  94. package/dist/server/.next/static/chunks/6f824bb5811ceebd.js +0 -3
  95. package/dist/server/.next/static/chunks/f9854e63365b2956.js.map +0 -1
  96. /package/dist/server/.next/static/{Dz7Ultbv0aaqF3m4OrOHQ → zjt6jXsNQxDdU-RHF8TC7}/_buildManifest.js +0 -0
  97. /package/dist/server/.next/static/{Dz7Ultbv0aaqF3m4OrOHQ → zjt6jXsNQxDdU-RHF8TC7}/_clientMiddlewareManifest.json +0 -0
  98. /package/dist/server/.next/static/{Dz7Ultbv0aaqF3m4OrOHQ → zjt6jXsNQxDdU-RHF8TC7}/_ssgManifest.js +0 -0
@@ -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/1427afaf93da978b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Dz7Ultbv0aaqF3m4OrOHQ\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/1427afaf93da978b.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\",\"diwDPENfhbi9m_vfo5zR-v\",{\"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/1427afaf93da978b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"zjt6jXsNQxDdU-RHF8TC7\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/1427afaf93da978b.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\",\"MU5nHTn9KlgDlHpNnntyIv\",{\"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/1427afaf93da978b.css","style"]
10
- 0:{"P":null,"b":"Dz7Ultbv0aaqF3m4OrOHQ","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1427afaf93da978b.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","diwDPENfhbi9m_vfo5zR-v",{"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":"zjt6jXsNQxDdU-RHF8TC7","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1427afaf93da978b.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","MU5nHTn9KlgDlHpNnntyIv",{"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,8 +3,8 @@
3
3
  "/initialization/page": [
4
4
  "static/chunks/ecfccf4677b4777a.js",
5
5
  "static/chunks/1427afaf93da978b.css",
6
- "static/chunks/6f824bb5811ceebd.js",
7
- "static/chunks/1ae3fa2333c12687.js",
6
+ "static/chunks/16b23f7570a551e1.js",
7
+ "static/chunks/f3137530db91c282.js",
8
8
  "static/chunks/1923d6510bea25be.js",
9
9
  "static/chunks/0e57f1354cda05d5.js",
10
10
  "static/chunks/e5e4fd3e83ab66f8.js",
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../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/app-router-headers.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/clean-async-snapshot.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/trace/constants.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/package.json","../../../../../../node_modules/.pnpm/node_modules/next","../../../../../../node_modules/next","../../../../node_modules/next","../../chunks/ssr/9bf22_next_dist_0c9074c5._.js","../../chunks/ssr/9bf22_next_dist_client_components_forbidden-error_bdb9d650.js","../../chunks/ssr/9bf22_next_dist_client_components_unauthorized-error_67370d77.js","../../chunks/ssr/[root-of-the-server]__2e9964e3._.js","../../chunks/ssr/[root-of-the-server]__7b253128._.js","../../chunks/ssr/[root-of-the-server]__828c7089._.js","../../chunks/ssr/[root-of-the-server]__a085452f._.js","../../chunks/ssr/[root-of-the-server]__b0aa0fa4._.js","../../chunks/ssr/[turbopack]_runtime.js","../../chunks/ssr/_89496b8a._.js","../../chunks/ssr/_c7905e3c._.js","../../chunks/ssr/node_modules__pnpm_bde53e93._.js","../../chunks/ssr/node_modules__pnpm_da0d20e8._.js","../../chunks/ssr/packages_server_src_65e3de99._.js","../../chunks/ssr/packages_server_src_app_eb845476._.js","../../chunks/ssr/packages_server_src_eb289b89._.js","./page/react-loadable-manifest.json","./page_client-reference-manifest.js"]}
1
+ {"version":1,"files":["../../../../../../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/app-router-headers.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/clean-async-snapshot.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/trace/constants.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/package.json","../../../../../../node_modules/.pnpm/node_modules/next","../../../../../../node_modules/next","../../../../node_modules/next","../../chunks/ssr/9bf22_next_dist_0c9074c5._.js","../../chunks/ssr/9bf22_next_dist_client_components_forbidden-error_bdb9d650.js","../../chunks/ssr/9bf22_next_dist_client_components_unauthorized-error_67370d77.js","../../chunks/ssr/[root-of-the-server]__2e9964e3._.js","../../chunks/ssr/[root-of-the-server]__7b253128._.js","../../chunks/ssr/[root-of-the-server]__828c7089._.js","../../chunks/ssr/[root-of-the-server]__a085452f._.js","../../chunks/ssr/[root-of-the-server]__b0aa0fa4._.js","../../chunks/ssr/[turbopack]_runtime.js","../../chunks/ssr/_89496b8a._.js","../../chunks/ssr/_c7905e3c._.js","../../chunks/ssr/node_modules__pnpm_bde53e93._.js","../../chunks/ssr/node_modules__pnpm_da0d20e8._.js","../../chunks/ssr/packages_server_src_622c27d6._.js","../../chunks/ssr/packages_server_src_app_eb845476._.js","../../chunks/ssr/packages_server_src_eb289b89._.js","./page/react-loadable-manifest.json","./page_client-reference-manifest.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/6f824bb5811ceebd.js","/_next/static/chunks/1ae3fa2333c12687.js"],"async":false},"[project]/packages/server/src/components/project-initializer.tsx":{"id":9993,"name":"*","chunks":["/_next/static/chunks/6f824bb5811ceebd.js","/_next/static/chunks/1ae3fa2333c12687.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/_c7905e3c._.js","server/chunks/ssr/packages_server_src_65e3de99._.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/1427afaf93da978b.css","inlined":false}],"[project]/packages/server/src/app/initialization/page":[{"path":"static/chunks/1427afaf93da978b.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/6f824bb5811ceebd.js","static/chunks/1ae3fa2333c12687.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/16b23f7570a551e1.js","/_next/static/chunks/f3137530db91c282.js"],"async":false},"[project]/packages/server/src/components/project-initializer.tsx":{"id":9993,"name":"*","chunks":["/_next/static/chunks/16b23f7570a551e1.js","/_next/static/chunks/f3137530db91c282.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/_c7905e3c._.js","server/chunks/ssr/packages_server_src_622c27d6._.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/1427afaf93da978b.css","inlined":false}],"[project]/packages/server/src/app/initialization/page":[{"path":"static/chunks/1427afaf93da978b.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/16b23f7570a551e1.js","static/chunks/f3137530db91c282.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/1427afaf93da978b.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/6f824bb5811ceebd.js" async=""></script><script src="/_next/static/chunks/1ae3fa2333c12687.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 class="mt-8 rounded-lg border bg-white p-4 shadow-sm"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4"><h2 class="text-lg font-semibold">常用 Git 分支操作 · 批量切换分支</h2><div class="flex flex-wrap gap-2"><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">执行</button><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 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3">DRY RUN</button></div></div><div class="grid gap-4 md:grid-cols-2"><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-branch-projects">选择项目</label><select id="batch-switch-branch-projects" multiple="" class="w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]"><option value="" disabled="">暂无可用项目</option></select><p class="text-xs text-gray-500">按住 Command / Ctrl 可多选;未选择时下拉聚合所有项目公共分支</p></div><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-branch-name">目标分支</label><button data-slot="button" class="inline-flex items-center gap-2 whitespace-nowrap rounded-md text-sm 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 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3 w-full justify-between font-normal" type="button" id="radix-«R195nnb»" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="truncate">点击选择目标分支</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-4 opacity-50 shrink-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></div></div><div class="mt-6 grid gap-4 md:grid-cols-2"><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">操作记录</h3><p class="text-xs text-gray-500">暂无记录</p></div><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">反馈信息</h3><p class="text-xs text-gray-500">暂无反馈</p></div></div></div><div class="mt-8 rounded-lg border bg-white p-4 shadow-sm"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4"><h2 class="text-lg font-semibold">常用 Git 分支操作 · 批量切换子仓库(submodules/common)分支</h2><div class="flex flex-wrap gap-2"><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">执行</button><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 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3">DRY RUN</button></div></div><div class="grid gap-4 md:grid-cols-2"><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-sub-projects">选择项目</label><select id="batch-switch-sub-projects" multiple="" class="w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]"><option value="" disabled="">暂无可用项目</option></select><p class="text-xs text-gray-500">按住 Command / Ctrl 可多选;未选择时下拉聚合所有项目子仓库公共分支</p></div><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-sub-name">目标分支</label><button data-slot="button" class="inline-flex items-center gap-2 whitespace-nowrap rounded-md text-sm 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 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3 w-full justify-between font-normal" type="button" id="radix-«R1967nb»" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="truncate">点击选择目标分支</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-4 opacity-50 shrink-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></div></div><div class="mt-6 grid gap-4 md:grid-cols-2"><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">操作记录</h3><p class="text-xs text-gray-500">暂无记录</p></div><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">反馈信息</h3><p class="text-xs text-gray-500">暂无反馈</p></div></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/6f824bb5811ceebd.js\",\"/_next/static/chunks/1ae3fa2333c12687.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/1427afaf93da978b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Dz7Ultbv0aaqF3m4OrOHQ\",\"p\":\"\",\"c\":[\"\",\"initialization\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"initialization\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/1427afaf93da978b.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/6f824bb5811ceebd.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/1ae3fa2333c12687.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\",\"sJ7eVKahtg2dCJm9wuNwev\",{\"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/1427afaf93da978b.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/16b23f7570a551e1.js" async=""></script><script src="/_next/static/chunks/f3137530db91c282.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 class="mt-8 rounded-lg border bg-white p-4 shadow-sm"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4"><h2 class="text-lg font-semibold">常用 Git 分支操作 · 批量切换分支</h2><div class="flex flex-wrap gap-2"><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">执行</button><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 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3">DRY RUN</button></div></div><div class="grid gap-4 md:grid-cols-2"><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-branch-projects">选择项目</label><select id="batch-switch-branch-projects" multiple="" class="w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]"><option value="" disabled="">暂无可用项目</option></select><p class="text-xs text-gray-500">按住 Command / Ctrl 可多选;未选择时下拉聚合所有项目分支</p></div><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-branch-name">目标分支</label><button data-slot="button" class="inline-flex items-center gap-2 whitespace-nowrap rounded-md text-sm 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 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3 w-full justify-between font-normal" type="button" id="radix-«R195nnb»" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="truncate">点击选择目标分支</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-4 opacity-50 shrink-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></div></div><div class="mt-6 grid gap-4 md:grid-cols-2"><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">操作记录</h3><p class="text-xs text-gray-500">暂无记录</p></div><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">反馈信息</h3><p class="text-xs text-gray-500">暂无反馈</p></div></div></div><div class="mt-8 rounded-lg border bg-white p-4 shadow-sm"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4"><h2 class="text-lg font-semibold">常用 Git 分支操作 · 批量切换子仓库(submodules/common)分支</h2><div class="flex flex-wrap gap-2"><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">执行</button><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 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3">DRY RUN</button></div></div><div class="grid gap-4 md:grid-cols-2"><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-sub-projects">选择项目</label><select id="batch-switch-sub-projects" multiple="" class="w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]"><option value="" disabled="">暂无可用项目</option></select><p class="text-xs text-gray-500">按住 Command / Ctrl 可多选;未选择时下拉聚合所有项目子仓库分支</p></div><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-sub-name">目标分支</label><button data-slot="button" class="inline-flex items-center gap-2 whitespace-nowrap rounded-md text-sm 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 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3 w-full justify-between font-normal" type="button" id="radix-«R1967nb»" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="truncate">点击选择目标分支</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-4 opacity-50 shrink-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></div></div><div class="mt-6 grid gap-4 md:grid-cols-2"><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">操作记录</h3><p class="text-xs text-gray-500">暂无记录</p></div><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">反馈信息</h3><p class="text-xs text-gray-500">暂无反馈</p></div></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/16b23f7570a551e1.js\",\"/_next/static/chunks/f3137530db91c282.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/1427afaf93da978b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"zjt6jXsNQxDdU-RHF8TC7\",\"p\":\"\",\"c\":[\"\",\"initialization\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"initialization\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/1427afaf93da978b.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/16b23f7570a551e1.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/f3137530db91c282.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\",\"DnwVBE_PHiyx9IY6kbW7av\",{\"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/6f824bb5811ceebd.js","/_next/static/chunks/1ae3fa2333c12687.js"],"default"]
4
+ 4:I[9993,["/_next/static/chunks/16b23f7570a551e1.js","/_next/static/chunks/f3137530db91c282.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/1427afaf93da978b.css","style"]
11
- 0:{"P":null,"b":"Dz7Ultbv0aaqF3m4OrOHQ","p":"","c":["","initialization"],"i":false,"f":[[["",{"children":["initialization",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1427afaf93da978b.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/6f824bb5811ceebd.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/1ae3fa2333c12687.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","sJ7eVKahtg2dCJm9wuNwev",{"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":"zjt6jXsNQxDdU-RHF8TC7","p":"","c":["","initialization"],"i":false,"f":[[["",{"children":["initialization",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1427afaf93da978b.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/16b23f7570a551e1.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/f3137530db91c282.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","DnwVBE_PHiyx9IY6kbW7av",{"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"}]}]}]
@@ -0,0 +1,3 @@
1
+ module.exports={45935:function(e){var{g:r,__dirname:t,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"))},30331:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("path",()=>require("path"))},29549:function(e){var{g:r,__dirname:t,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:r,__dirname:t,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:r,__dirname:t,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:r,__dirname:t,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:r,__dirname:t,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:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("os",()=>require("os"))},88941:e=>{"use strict";var{g:r,__dirname:t}=e;{e.s({PROJECT_CONFIG_PATH:()=>t,ProjectStatus:()=>o,WORKSPACE_CONFIG:()=>r});var s=e.i(13442),n=e.i(30331);let r={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},t=(0,n.join)((0,s.homedir)(),".prime-projects.json");var o=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}({})}},83886:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("fs",()=>require("fs"))},87485:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("child_process",()=>require("child_process"))},69383:function(e){var{g:r,__dirname:t,m:s,e:n}=e},77814:e=>{"use strict";var{g:r,__dirname:t}=e;{e.s({POST:()=>u});var s=e.i(15494),n=e.i(87485),o=e.i(83886),i=e.i(30331),a=e.i(88941);let r="submodules/common";function c(e,r){return new Promise((t,s)=>{let o=(0,n.spawn)("git",r,{cwd:e,stdio:["ignore","pipe","pipe"]}),i="",a="";o.stdout?.on("data",e=>{i+=e.toString()}),o.stderr?.on("data",e=>{a+=e.toString()}),o.on("close",e=>{t({code:e,stdout:i,stderr:a})}),o.on("error",e=>{s(e)})})}async function u(e){try{let t=await e.json(),n=(Array.isArray(t.projects)?t.projects:[]).map(e=>String(e).trim()).filter(Boolean);if(0===n.length)return s.NextResponse.json({success:!1,error:"缺少项目列表参数"},{status:400});let u=a.WORKSPACE_CONFIG.WORKSPACE_ROOT,p=await Promise.all(n.map(async e=>{let t=(0,i.join)(u,e);if(!(0,o.existsSync)(t)||!(0,o.existsSync)((0,i.join)(t,".git")))return{projectName:e,branches:[],error:"项目不存在或不是Git仓库"};let s=(0,i.join)(t,r);if(!(0,o.existsSync)(s)||!(0,o.existsSync)((0,i.join)(s,".git")))return{projectName:e,branches:[],error:null};let n=await c(t,["ls-files","-s",r]);if(0!==n.code||!n.stdout.trim().startsWith("160000"))return{projectName:e,branches:[],error:null};try{let r=await c(s,["ls-remote","--heads","origin"]);if(0!==r.code){let t=r.stderr.trim()||r.stdout.trim();return{projectName:e,branches:[],error:t.slice(0,150)||"获取子仓库远程分支失败"}}let t=[];return r.stdout.split("\n").forEach(e=>{let r=e.trim().match(/^[0-9a-f]+\trefs\/heads\/(.+)$/);if(r){let e=r[1].trim();e&&t.push(e)}}),{projectName:e,branches:t,error:null}}catch(r){return{projectName:e,branches:[],error:r instanceof Error?r.message:"执行失败"}}})),l=new Set,d=[];return p.forEach(e=>{e.error&&d.push({projectName:e.projectName,reason:e.error}),e.branches.forEach(e=>l.add(e))}),s.NextResponse.json({success:!0,branches:Array.from(l).sort((e,r)=>e.localeCompare(r)),failedProjects:d})}catch(e){return console.error("批量获取子仓库远程分支失败:",e),s.NextResponse.json({success:!1,error:e instanceof Error?e.message:"批量获取子仓库远程分支失败"},{status:500})}}}},90472:e=>{"use strict";var{g:r,__dirname:t}=e;{e.s({patchFetch:()=>a,routeModule:()=>r,serverHooks:()=>u,workAsyncStorage:()=>t,workUnitAsyncStorage:()=>c});var s=e.i(45746),n=e.i(93828),o=e.i(18250),i=e.i(77814);let r=new s.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/batch-list-submodule-branches/route",pathname:"/api/batch-list-submodule-branches",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/batch-list-submodule-branches/route.ts",nextConfigOutput:"",userland:i}),{workAsyncStorage:t,workUnitAsyncStorage:c,serverHooks:u}=r;function a(){return(0,o.patchFetch)({workAsyncStorage:t,workUnitAsyncStorage:c})}}}};
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__6c7b8215._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["turbopack:///[project]/packages/server/src/lib/workspace-types.ts","turbopack:///[project]/packages/server/src/app/api/batch-list-submodule-branches/route.ts","turbopack:///[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/src/build/templates/app-route.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 * 微应用路径标识:用于在共享宿主(micro-app 域名)下区分兄弟子应用。\n * 插件按 micro-app 元素的 default-page / url 是否“包含”该值来选中对应本地 host。\n * 例如 micro-components 为 \"/micro/components\"、360-icrc-site 为 \"/micro/360-icrc-site\"。\n */\n microPath?: 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 { NextRequest, NextResponse } from 'next/server';\nimport { spawn } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { WORKSPACE_CONFIG } from '@/lib/workspace-types';\n\n// 子仓库固定路径:项目根目录下的 submodules/common\nconst SUB_PATH = 'submodules/common';\n\ntype GitResult = {\n code: number | null;\n stdout: string;\n stderr: string;\n};\n\nfunction 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\n/**\n * 批量获取多个项目 submodules/common 子仓库的远程分支聚合去重列表。\n * 仅统计当前分支跟踪该子仓库(gitlink mode 160000)的项目;\n * 未跟踪的项目直接跳过(不属于失败)。\n * 每次调用都会重新执行 git ls-remote,保证分支列表最新。\n */\nexport async function POST(request: NextRequest) {\n try {\n const body = await request.json();\n const rawProjects: unknown = Array.isArray(body.projects) ? body.projects : [];\n const projects = (rawProjects as unknown[])\n .map((item) => String(item).trim())\n .filter(Boolean);\n\n if (projects.length === 0) {\n return NextResponse.json({\n success: false,\n error: '缺少项目列表参数'\n }, { status: 400 });\n }\n\n const workspacePath = WORKSPACE_CONFIG.WORKSPACE_ROOT;\n\n // 并发获取所有项目的子仓库远程分支\n const results = await Promise.all(\n projects.map(async (projectName: string) => {\n const projectPath = join(workspacePath, projectName);\n\n if (!existsSync(projectPath) || !existsSync(join(projectPath, '.git'))) {\n return { projectName, branches: [] as string[], error: '项目不存在或不是Git仓库' };\n }\n\n // 子仓库目录不存在或不是 git 仓库:跳过(不展示)\n const subPath = join(projectPath, SUB_PATH);\n if (!existsSync(subPath) || !existsSync(join(subPath, '.git'))) {\n return { projectName, branches: [] as string[], error: null };\n }\n\n // 检查主仓库当前分支是否跟踪该路径(gitlink mode 160000),未跟踪则跳过\n const trackResult = await runGitCommand(projectPath, ['ls-files', '-s', SUB_PATH]);\n if (trackResult.code !== 0 || !trackResult.stdout.trim().startsWith('160000')) {\n return { projectName, branches: [] as string[], error: null };\n }\n\n try {\n const result = await runGitCommand(subPath, ['ls-remote', '--heads', 'origin']);\n if (result.code !== 0) {\n const rawError = result.stderr.trim() || result.stdout.trim();\n return { projectName, branches: [] as string[], error: rawError.slice(0, 150) || '获取子仓库远程分支失败' };\n }\n\n const branches: string[] = [];\n result.stdout.split('\\n').forEach((line) => {\n const match = line.trim().match(/^[0-9a-f]+\\trefs\\/heads\\/(.+)$/);\n if (match) {\n const branchName = match[1].trim();\n if (branchName) branches.push(branchName);\n }\n });\n return { projectName, branches, error: null };\n } catch (err) {\n return { projectName, branches: [] as string[], error: err instanceof Error ? err.message : '执行失败' };\n }\n }),\n );\n\n // 聚合去重(未跟踪/无子仓库的项目 branches 为空,自然不贡献分支)\n const branchSet = new Set<string>();\n const failedProjects: Array<{ projectName: string; reason: string }> = [];\n results.forEach((result) => {\n if (result.error) {\n failedProjects.push({ projectName: result.projectName, reason: result.error });\n }\n result.branches.forEach((branch: string) => branchSet.add(branch));\n });\n\n return NextResponse.json({\n success: true,\n branches: Array.from(branchSet).sort((a, b) => a.localeCompare(b)),\n failedProjects,\n });\n } catch (error) {\n console.error('批量获取子仓库远程分支失败:', error);\n return NextResponse.json({\n success: false,\n error: error instanceof Error ? error.message : '批量获取子仓库远程分支失败'\n }, { status: 500 });\n }\n}\n","import {\n AppRouteRouteModule,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\n\nimport * as userland from 'VAR_USERLAND'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n userland,\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n"],"names":["AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","userland","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","resolvedPagePath","nextConfigOutput","workAsyncStorage","workUnitAsyncStorage","serverHooks"],"mappings":"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","ignoreList":[2]}
@@ -0,0 +1,3 @@
1
+ module.exports={45935:function(e){var{g:r,__dirname:t,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"))},30331:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("path",()=>require("path"))},29549:function(e){var{g:r,__dirname:t,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:r,__dirname:t,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:r,__dirname:t,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:r,__dirname:t,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:r,__dirname:t,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:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("os",()=>require("os"))},88941:e=>{"use strict";var{g:r,__dirname:t}=e;{e.s({PROJECT_CONFIG_PATH:()=>t,ProjectStatus:()=>o,WORKSPACE_CONFIG:()=>r});var s=e.i(13442),n=e.i(30331);let r={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},t=(0,n.join)((0,s.homedir)(),".prime-projects.json");var o=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}({})}},83886:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("fs",()=>require("fs"))},87485:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("child_process",()=>require("child_process"))},47025:function(e){var{g:r,__dirname:t,m:s,e:n}=e},16020:e=>{"use strict";var{g:r,__dirname:t}=e;e.s({POST:()=>c});var s=e.i(15494),n=e.i(87485),o=e.i(83886),a=e.i(30331),i=e.i(88941);async function c(e){try{let r=await e.json(),t=(Array.isArray(r.projects)?r.projects:[]).map(e=>String(e).trim()).filter(Boolean);if(0===t.length)return s.NextResponse.json({success:!1,error:"缺少项目列表参数"},{status:400});let c=i.WORKSPACE_CONFIG.WORKSPACE_ROOT,p=await Promise.all(t.map(async e=>{let r=(0,a.join)(c,e);if(!(0,o.existsSync)(r)||!(0,o.existsSync)((0,a.join)(r,".git")))return{projectName:e,branches:[],error:"项目不存在或不是Git仓库"};try{var t;let s=await (t=["ls-remote","--heads","origin"],new Promise((e,s)=>{let o=(0,n.spawn)("git",t,{cwd:r,stdio:["ignore","pipe","pipe"]}),a="",i="";o.stdout?.on("data",e=>{a+=e.toString()}),o.stderr?.on("data",e=>{i+=e.toString()}),o.on("close",r=>{e({code:r,stdout:a,stderr:i})}),o.on("error",e=>{s(e)})}));if(0!==s.code){let r=s.stderr.trim()||s.stdout.trim();return{projectName:e,branches:[],error:r.slice(0,150)||"获取远程分支失败"}}let o=[];return s.stdout.split("\n").forEach(e=>{let r=e.trim().match(/^[0-9a-f]+\trefs\/heads\/(.+)$/);if(r){let e=r[1].trim();e&&o.push(e)}}),{projectName:e,branches:o,error:null}}catch(r){return{projectName:e,branches:[],error:r instanceof Error?r.message:"执行失败"}}})),u=new Set,d=[];return p.forEach(e=>{e.error&&d.push({projectName:e.projectName,reason:e.error}),e.branches.forEach(e=>u.add(e))}),s.NextResponse.json({success:!0,branches:Array.from(u).sort((e,r)=>e.localeCompare(r)),failedProjects:d})}catch(e){return console.error("批量获取远程分支失败:",e),s.NextResponse.json({success:!1,error:e instanceof Error?e.message:"批量获取远程分支失败"},{status:500})}}},62234:e=>{"use strict";var{g:r,__dirname:t}=e;{e.s({patchFetch:()=>i,routeModule:()=>r,serverHooks:()=>p,workAsyncStorage:()=>t,workUnitAsyncStorage:()=>c});var s=e.i(45746),n=e.i(93828),o=e.i(18250),a=e.i(16020);let r=new s.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/batch-list-branches/route",pathname:"/api/batch-list-branches",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/batch-list-branches/route.ts",nextConfigOutput:"",userland:a}),{workAsyncStorage:t,workUnitAsyncStorage:c,serverHooks:p}=r;function i(){return(0,o.patchFetch)({workAsyncStorage:t,workUnitAsyncStorage:c})}}}};
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__c52380bc._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["turbopack:///[project]/packages/server/src/lib/workspace-types.ts","turbopack:///[project]/packages/server/src/app/api/batch-list-branches/route.ts","turbopack:///[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/src/build/templates/app-route.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 * 微应用路径标识:用于在共享宿主(micro-app 域名)下区分兄弟子应用。\n * 插件按 micro-app 元素的 default-page / url 是否“包含”该值来选中对应本地 host。\n * 例如 micro-components 为 \"/micro/components\"、360-icrc-site 为 \"/micro/360-icrc-site\"。\n */\n microPath?: 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 { NextRequest, NextResponse } from 'next/server';\nimport { spawn } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { WORKSPACE_CONFIG } from '@/lib/workspace-types';\n\ntype GitResult = {\n code: number | null;\n stdout: string;\n stderr: string;\n};\n\nfunction 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\n/**\n * 批量获取多个项目所有远程分支的聚合去重列表。\n * 每次调用都会重新执行 git ls-remote,保证分支列表最新。\n */\nexport async function POST(request: NextRequest) {\n try {\n const body = await request.json();\n const rawProjects: unknown = Array.isArray(body.projects) ? body.projects : [];\n const projects = (rawProjects as unknown[])\n .map((item) => String(item).trim())\n .filter(Boolean);\n\n if (projects.length === 0) {\n return NextResponse.json({\n success: false,\n error: '缺少项目列表参数'\n }, { status: 400 });\n }\n\n const workspacePath = WORKSPACE_CONFIG.WORKSPACE_ROOT;\n\n // 并发获取所有项目的远程分支\n const results = await Promise.all(\n projects.map(async (projectName: string) => {\n const projectPath = join(workspacePath, projectName);\n\n if (!existsSync(projectPath) || !existsSync(join(projectPath, '.git'))) {\n return { projectName, branches: [] as string[], error: '项目不存在或不是Git仓库' };\n }\n\n try {\n const result = await runGitCommand(projectPath, ['ls-remote', '--heads', 'origin']);\n if (result.code !== 0) {\n const rawError = result.stderr.trim() || result.stdout.trim();\n return { projectName, branches: [] as string[], error: rawError.slice(0, 150) || '获取远程分支失败' };\n }\n\n const branches: string[] = [];\n result.stdout.split('\\n').forEach((line) => {\n const match = line.trim().match(/^[0-9a-f]+\\trefs\\/heads\\/(.+)$/);\n if (match) {\n const branchName = match[1].trim();\n if (branchName) branches.push(branchName);\n }\n });\n return { projectName, branches, error: null };\n } catch (err) {\n return { projectName, branches: [] as string[], error: err instanceof Error ? err.message : '执行失败' };\n }\n }),\n );\n\n // 聚合去重\n const branchSet = new Set<string>();\n const failedProjects: Array<{ projectName: string; reason: string }> = [];\n results.forEach((result) => {\n if (result.error) {\n failedProjects.push({ projectName: result.projectName, reason: result.error });\n }\n result.branches.forEach((branch: string) => branchSet.add(branch));\n });\n\n return NextResponse.json({\n success: true,\n branches: Array.from(branchSet).sort((a, b) => a.localeCompare(b)),\n failedProjects,\n });\n } catch (error) {\n console.error('批量获取远程分支失败:', error);\n return NextResponse.json({\n success: false,\n error: error instanceof Error ? error.message : '批量获取远程分支失败'\n }, { status: 500 });\n }\n}\n","import {\n AppRouteRouteModule,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\n\nimport * as userland from 'VAR_USERLAND'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n userland,\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n"],"names":["AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","userland","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","resolvedPagePath","nextConfigOutput","workAsyncStorage","workUnitAsyncStorage","serverHooks"],"mappings":"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","ignoreList":[2]}
@@ -1,3 +1,3 @@
1
- module.exports={75405:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({clearStepRun:()=>c,createStepRun:()=>s,getStepRun:()=>r,updateStepRun:()=>i});let a=new Map;function n(){let e=Date.now();for(let[t,n]of a.entries())e-n.updatedAt>36e5&&a.delete(t)}function s(e){n(),a.set(e.runId,{...e,updatedAt:Date.now()})}function r(e){n();let t=a.get(e);return t||null}function i(e){a.set(e.runId,{...e,updatedAt:Date.now()})}function c(e){a.delete(e)}}},9967:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({POST:()=>j});var n=e.i(15494),s=e.i(87485),r=e.i(83886),i=e.i(30331),c=e.i(88941),o=e.i(35692),d=e.i(77159),u=e.i(79810),m=e.i(34926),p=e.i(33808),h=e.i(75405);let a=/\\s/,t="main";function f(e){return!(!e||a.test(e)||e.startsWith("-"))}function g(e,a){return new Promise((t,n)=>{let r=(0,s.spawn)("git",a,{cwd:e,stdio:["ignore","pipe","pipe"]}),i="",c="";r.stdout?.on("data",e=>{i+=e.toString()}),r.stderr?.on("data",e=>{c+=e.toString()}),r.on("close",e=>{t({code:e,stdout:i,stderr:c})}),r.on("error",e=>{n(e)})})}function k(e){return`git ${e.join(" ")}`}function l(e,a,t,n){0===n.code?e.push(`[${a}] 完成: ${t}`):e.push(`[${a}] 失败: ${t} ${n.stderr||n.stdout}`)}function $(e){for(let a=e.currentIndex;a<e.projects.length;a+=1){let t=e.projects[a];if("pending"!==t.status){e.currentIndex=a+1;continue}let n=function(e,a){if("pending"!==a.status)return null;let{createBranch:t,baseBranch:n,mergeBranch:s}=e;switch(a.phase){case"need-current-branch":return{id:`${a.name}-current-branch-${Date.now()}`,projectName:a.name,description:"检查当前分支",args:["branch","--show-current"],kind:"need-current-branch"};case"need-fetch":return{id:`${a.name}-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fetch"};case"need-base-check":return{id:`${a.name}-base-check-${Date.now()}`,projectName:a.name,description:`检查 origin/${n}`,args:["ls-remote","--heads","origin",n],kind:"need-base-check"};case"need-remote-create-check":return{id:`${a.name}-remote-create-check-${Date.now()}`,projectName:a.name,description:`检查远端分支 ${t}`,args:["ls-remote","--heads","origin",t],kind:"need-remote-create-check"};case"need-local-create-check":return{id:`${a.name}-local-create-check-${Date.now()}`,projectName:a.name,description:`检查本地分支 ${t}`,args:["show-ref","--verify",`refs/heads/${t}`],kind:"need-local-create-check"};case"need-checkout-remote-create":return{id:`${a.name}-checkout-remote-${Date.now()}`,projectName:a.name,description:`切换到远端分支 ${t}`,args:["checkout","-B",t,`origin/${t}`],kind:"need-checkout-remote-create"};case"need-create-branch":return{id:`${a.name}-create-branch-${Date.now()}`,projectName:a.name,description:`创建分支 ${t}`,args:["checkout","-B",t,`origin/${n}`],kind:"need-create-branch"};case"need-push-branch":return{id:`${a.name}-push-branch-${Date.now()}`,projectName:a.name,description:`推送分支 ${t}`,args:["push","-u","origin",t],kind:"need-push-branch"};case"need-merge-check":return{id:`${a.name}-merge-check-${Date.now()}`,projectName:a.name,description:`检查 origin/${s}`,args:["ls-remote","--heads","origin",s],kind:"need-merge-check"};case"need-status":return{id:`${a.name}-status-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status"};case"need-checkout-create":return{id:`${a.name}-checkout-create-${Date.now()}`,projectName:a.name,description:`切换到分支 ${t}`,args:["checkout",t],kind:"need-checkout-create"};case"need-fetch-after-checkout":return{id:`${a.name}-fetch-after-checkout-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fetch-after-checkout"};case"need-merge":return{id:`${a.name}-merge-${Date.now()}`,projectName:a.name,description:`合并 origin/${s}`,args:["merge","--no-ff","--no-edit",`origin/${s}`],kind:"need-merge"};case"need-merge-abort":return{id:`${a.name}-merge-abort-${Date.now()}`,projectName:a.name,description:"终止合并",args:["merge","--abort"],kind:"need-merge-abort"};case"need-push-merge":return{id:`${a.name}-push-merge-${Date.now()}`,projectName:a.name,description:`推送合并结果 ${t}`,args:["push","origin",t],kind:"need-push-merge"};case"need-main-fetch":return{id:`${a.name}-main-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-main-fetch"};case"need-main-check":return{id:`${a.name}-main-check-${Date.now()}`,projectName:a.name,description:"检查 origin/main",args:["ls-remote","--heads","origin","main"],kind:"need-main-check"};case"need-status-main":return{id:`${a.name}-status-main-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status-main"};case"need-checkout-main":return{id:`${a.name}-checkout-main-${Date.now()}`,projectName:a.name,description:"切换到 main",args:["checkout","main"],kind:"need-checkout-main"};case"need-merge-into-main":return{id:`${a.name}-merge-into-main-${Date.now()}`,projectName:a.name,description:`合并 origin/${t} 到 main`,args:["merge","--no-ff","--no-edit",`origin/${t}`],kind:"need-merge-into-main"};case"need-merge-into-main-abort":return{id:`${a.name}-merge-into-main-abort-${Date.now()}`,projectName:a.name,description:"终止合并到 main",args:["merge","--abort"],kind:"need-merge-into-main-abort"};case"need-push-main":return{id:`${a.name}-push-main-${Date.now()}`,projectName:a.name,description:"推送 main",args:["push","origin","main"],kind:"need-push-main"};case"need-fix-main-fetch":return{id:`${a.name}-fix-main-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fix-main-fetch"};case"need-fix-main-check":return{id:`${a.name}-fix-main-check-${Date.now()}`,projectName:a.name,description:"检查 origin/fix/main",args:["ls-remote","--heads","origin","fix/main"],kind:"need-fix-main-check"};case"need-status-fix-main":return{id:`${a.name}-status-fix-main-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status-fix-main"};case"need-checkout-fix-main":return{id:`${a.name}-checkout-fix-main-${Date.now()}`,projectName:a.name,description:"切换到 fix/main",args:["checkout","fix/main"],kind:"need-checkout-fix-main"};case"need-merge-into-fix-main":return{id:`${a.name}-merge-into-fix-main-${Date.now()}`,projectName:a.name,description:`合并 origin/${t} 到 fix/main`,args:["merge","--no-ff","--no-edit",`origin/${t}`],kind:"need-merge-into-fix-main"};case"need-merge-into-fix-main-abort":return{id:`${a.name}-merge-into-fix-main-abort-${Date.now()}`,projectName:a.name,description:"终止合并到 fix/main",args:["merge","--abort"],kind:"need-merge-into-fix-main-abort"};case"need-push-fix-main":return{id:`${a.name}-push-fix-main-${Date.now()}`,projectName:a.name,description:"推送 fix/main",args:["push","origin","fix/main"],kind:"need-push-fix-main"};default:return null}}(e,t);if(n)return e.currentIndex=a,e.currentStep=n,n;e.currentIndex=a+1}return e.currentStep=null,null}async function b(e){let{createBranch:a}=e;for(let t of[...e.projects].reverse()){if(!t.originalBranch)continue;e.operationLogs.push(`[${t.name}] 回滚: ${k(["checkout",t.originalBranch])}`);let n=await g(t.path,["checkout",t.originalBranch]);if(l(e.operationLogs,t.name,`回滚切换分支 ${t.originalBranch}`,n),t.createdLocalBranch&&!t.hadLocalBranch){e.operationLogs.push(`[${t.name}] 回滚: ${k(["branch","-D",a])}`);let n=await g(t.path,["branch","-D",a]);l(e.operationLogs,t.name,`回滚删除本地分支 ${a}`,n)}}}async function x(e,a){let t=e.projects.find(e=>e.name===a.projectName);if(!t)return void e.feedbacks.push(`[${a.projectName}] 项目不存在,跳过。`);e.operationLogs.push(`[${t.name}] ${k(a.args)}`);let n=await g(t.path,a.args);switch(l(e.operationLogs,t.name,a.description,n),("need-checkout-remote-create"===a.kind||"need-create-branch"===a.kind||"need-checkout-create"===a.kind||"need-checkout-main"===a.kind||"need-checkout-fix-main"===a.kind)&&function(e,a,t){let n=new Set(a.ignoredUntrackedPaths??[]),s=(0,m.appendIgnoredPathsFromCheckoutWarning)(t.stderr,n);s.length>0&&(a.ignoredUntrackedPaths=[...n],e.operationLogs.push(`[${a.name}] 提示: 检测到子模块残留目录 ${s.join(", ")},状态检查将忽略对应未跟踪路径`))}(e,t,n),a.kind){case"need-current-branch":t.originalBranch=n.stdout.replace(/\s+/g," ").trim()||"HEAD",0===n.code?t.phase="need-fetch":(t.status="failed",e.feedbacks.push(`[${t.name}] 获取当前分支失败。`));break;case"need-fetch":0===n.code?t.phase="need-base-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-base-check":t.baseExists=!!n.stdout.trim(),t.baseExists?t.phase="need-remote-create-check":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/${e.baseBranch} 不存在,无法创建分支。`));break;case"need-remote-create-check":t.remoteCreateExists=!!n.stdout.trim(),t.phase="need-local-create-check";break;case"need-local-create-check":t.localCreateExists=0===n.code,t.localCreateExists?t.phase="need-checkout-create":t.remoteCreateExists?(t.hadLocalBranch=!1,t.phase="need-checkout-remote-create"):(t.hadLocalBranch=!1,t.phase="need-create-branch");break;case"need-checkout-remote-create":0===n.code?t.phase="need-merge-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到远端分支失败: ${n.stderr||n.stdout}`));break;case"need-create-branch":0===n.code?(t.createdLocalBranch=!0,t.phase="need-push-branch"):(t.status="failed",e.feedbacks.push(`[${t.name}] 创建分支失败: ${n.stderr||n.stdout}`));break;case"need-push-branch":0===n.code?t.phase="need-merge-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 推送新分支失败: ${n.stderr||n.stdout}`));break;case"need-merge-check":t.mergeExists=!!n.stdout.trim(),t.mergeExists?t.phase="need-status":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/${e.mergeBranch} 不存在,无法合并。`));break;case"need-status":t.statusClean=!(0,m.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths),t.statusClean?t.phase="need-checkout-create":(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再执行合并。`));break;case"need-checkout-create":0===n.code?t.phase="need-fetch-after-checkout":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到分支失败: ${n.stderr||n.stdout}`));break;case"need-fetch-after-checkout":0===n.code?t.phase="need-merge":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-merge":0===n.code?t.phase="need-push-merge":(t.phase="need-merge-abort",e.feedbacks.push(`[${t.name}] 合并冲突,准备终止合并。`));break;case"need-merge-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并冲突,已终止合并,请手动处理。`);break;case"need-push-merge":0===n.code?t.phase="need-main-fetch":(t.status="failed",e.feedbacks.push(`[${t.name}] 推送合并结果失败: ${n.stderr||n.stdout}`));break;case"need-main-fetch":0===n.code?t.phase="need-main-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-main-check":n.stdout.trim()?t.phase="need-status-main":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/main 不存在,无法合并。`));break;case"need-status-main":(0,m.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths)?(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再合并 main。`)):t.phase="need-checkout-main";break;case"need-checkout-main":0===n.code?t.phase="need-merge-into-main":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到 main 失败: ${n.stderr||n.stdout}`));break;case"need-merge-into-main":0===n.code?t.phase="need-push-main":(t.phase="need-merge-into-main-abort",e.feedbacks.push(`[${t.name}] 合并到 main 冲突,准备终止合并。`));break;case"need-merge-into-main-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并到 main 失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并到 main 冲突,已终止合并,请手动处理。`);break;case"need-push-main":0===n.code?t.phase="need-fix-main-fetch":(t.status="failed",e.feedbacks.push(`[${t.name}] 推送 main 失败: ${n.stderr||n.stdout}`));break;case"need-fix-main-fetch":0===n.code?t.phase="need-fix-main-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-fix-main-check":n.stdout.trim()?t.phase="need-status-fix-main":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/fix/main 不存在,无法合并。`));break;case"need-status-fix-main":(0,m.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths)?(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再合并 fix/main。`)):t.phase="need-checkout-fix-main";break;case"need-checkout-fix-main":0===n.code?t.phase="need-merge-into-fix-main":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到 fix/main 失败: ${n.stderr||n.stdout}`));break;case"need-merge-into-fix-main":0===n.code?t.phase="need-push-fix-main":(t.phase="need-merge-into-fix-main-abort",e.feedbacks.push(`[${t.name}] 合并到 fix/main 冲突,准备终止合并。`));break;case"need-merge-into-fix-main-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并到 fix/main 失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并到 fix/main 冲突,已终止合并,请手动处理。`);break;case"need-push-fix-main":0===n.code?(t.status="done",t.phase="done"):(t.status="failed",e.feedbacks.push(`[${t.name}] 推送 fix/main 失败: ${n.stderr||n.stdout}`))}}async function w(e){for(let a of new Set(e.projects.map(e=>e.tempRootPath).filter(Boolean)))try{await (0,p.cleanupTempExecutionRepo)(a)}catch(e){console.error(`清理临时目录失败: ${a}`,e)}}async function j(e){try{let m=await e.json(),g="string"==typeof m.action?m.action:"";if("start"===g){let e=Array.isArray(m.projects)?m.projects:[],g="string"==typeof m.createBranch?m.createBranch.trim():"",l="string"==typeof m.baseBranch?m.baseBranch.trim():"",b="string"==typeof m.mergeBranch?m.mergeBranch.trim():"",x="string"==typeof m.runId?m.runId:"",j=[],N=[],S=new Set;if(0===e.length||!g||!l||!b)return n.NextResponse.json({success:!1,operationLogs:j,feedbacks:["缺少必要参数,请填写完整后重试。"]},{status:400});if(l!==t)return n.NextResponse.json({success:!1,operationLogs:j,feedbacks:[`UAT 操作流从 origin 分支创建固定为 ${t}。`]},{status:400});if(!f(g)||!f(l)||!f(b))return n.NextResponse.json({success:!1,operationLogs:j,feedbacks:["分支名称不合法,请避免空格或以 - 开头。"]},{status:400});if(!x)return n.NextResponse.json({success:!1,operationLogs:j,feedbacks:["缺少 runId,请刷新页面后重试。"]},{status:400});(0,u.createUatGitFlowState)(x);let R=await (0,o.getProjectsConfig)(),D=c.WORKSPACE_CONFIG.WORKSPACE_ROOT,L=[];try{for(let t of e){var a,s;let e=String(t),n=(0,d.sanitizeProjectName)(e);if(!n||n!==e){j.push(`[${e}] 失败: 项目名称包含无效字符`),N.push(`[${e}] 项目名称包含无效字符,已跳过。`);continue}if(!R[n]){j.push(`[${n}] 失败: 未在项目配置中找到`),N.push(`[${n}] 未在项目配置中找到,已跳过。`);continue}let c=(0,i.join)(D,n);if(!(0,r.existsSync)(c)){j.push(`[${n}] 失败: 项目目录不存在`),N.push(`[${n}] 项目目录不存在,已跳过。`);continue}if(!(0,r.existsSync)((0,i.join)(c,".git"))){j.push(`[${n}] 失败: 非 Git 仓库`),N.push(`[${n}] 不是有效的 Git 仓库,已跳过。`);continue}let o=await (0,p.createTempExecutionRepo)(c,n);if(!o.success){j.push(`[${n}] 失败: 创建临时执行仓库失败 ${o.error}`),N.push(`[${n}] 创建临时执行仓库失败: ${o.error}`);continue}S.add(o.value.tempRootPath),j.push(`[${n}] 使用临时目录执行: ${o.value.projectPath}`),L.push((a=o.value.projectPath,s=o.value.tempRootPath,{name:n,path:a,tempRootPath:s,phase:"need-current-branch",status:"pending",originalBranch:"",createdLocalBranch:!1,hadLocalBranch:!0,ignoredUntrackedPaths:[],baseExists:null,remoteCreateExists:null,localCreateExists:null,mergeExists:null,statusClean:null}))}}catch(e){for(let e of S)try{await (0,p.cleanupTempExecutionRepo)(e)}catch(a){console.error(`清理临时目录失败: ${e}`,a)}throw(0,u.clearUatGitFlowState)(x),e}let B={runId:x,createBranch:g,baseBranch:l,mergeBranch:b,projects:L,currentIndex:0,operationLogs:j,feedbacks:N,currentStep:null,updatedAt:Date.now()},y=$(B);return y?(0,h.createStepRun)(B):(await w(B),(0,u.clearUatGitFlowState)(x)),n.NextResponse.json({success:!0,runId:x,nextStep:y?{stepId:y.id,projectName:y.projectName,description:y.description,command:k(y.args)}:null,operationLogs:B.operationLogs,feedbacks:B.feedbacks,isComplete:null===y})}if("execute"===g){let e="string"==typeof m.runId?m.runId:"",a="string"==typeof m.stepId?m.stepId:"",t=(0,h.getStepRun)(e);if(!t)return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未找到执行上下文,请重新开始。"]},{status:404});if((0,u.isUatGitFlowAborted)(e))return t.operationLogs.push("已收到中断请求,开始回滚已执行的本地操作。"),await b(t),await w(t),(0,h.clearStepRun)(e),(0,u.clearUatGitFlowState)(e),n.NextResponse.json({success:!0,runId:e,nextStep:null,operationLogs:t.operationLogs,feedbacks:t.feedbacks,isComplete:!0,aborted:!0});if(!t.currentStep||t.currentStep.id!==a)return n.NextResponse.json({success:!1,operationLogs:t.operationLogs,feedbacks:["步骤已更新,请重新确认。"]},{status:409});await x(t,t.currentStep);let s=$(t);return(0,h.updateStepRun)(t),s||(await w(t),(0,h.clearStepRun)(e),(0,u.clearUatGitFlowState)(e)),n.NextResponse.json({success:!0,runId:e,nextStep:s?{stepId:s.id,projectName:s.projectName,description:s.description,command:k(s.args)}:null,operationLogs:t.operationLogs,feedbacks:t.feedbacks,isComplete:null===s})}if("abort"===g){let e="string"==typeof m.runId?m.runId:"",a=(0,h.getStepRun)(e);if(!a)return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未找到执行上下文,请重新开始。"]},{status:404});return a.operationLogs.push("已收到中断请求,开始回滚已执行的本地操作。"),await b(a),await w(a),(0,h.clearStepRun)(e),(0,u.clearUatGitFlowState)(e),n.NextResponse.json({success:!0,runId:e,nextStep:null,operationLogs:a.operationLogs,feedbacks:a.feedbacks,isComplete:!0,aborted:!0})}return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未知操作类型。"]},{status:400})}catch(e){return console.error("UAT git 分步执行失败:",e),n.NextResponse.json({success:!1,operationLogs:[],feedbacks:[e instanceof Error?e.message:"执行失败"]},{status:500})}}}},3301:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({patchFetch:()=>c,routeModule:()=>a,serverHooks:()=>d,workAsyncStorage:()=>t,workUnitAsyncStorage:()=>o});var n=e.i(45746),s=e.i(93828),r=e.i(18250),i=e.i(9967);let a=new n.AppRouteRouteModule({definition:{kind:s.RouteKind.APP_ROUTE,page:"/api/uat-git-flow/step/route",pathname:"/api/uat-git-flow/step",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/uat-git-flow/step/route.ts",nextConfigOutput:"",userland:i}),{workAsyncStorage:t,workUnitAsyncStorage:o,serverHooks:d}=a;function c(){return(0,r.patchFetch)({workAsyncStorage:t,workUnitAsyncStorage:o})}}}};
1
+ module.exports={75405:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({clearStepRun:()=>c,createStepRun:()=>s,getStepRun:()=>r,updateStepRun:()=>i});let a=new Map;function n(){let e=Date.now();for(let[t,n]of a.entries())e-n.updatedAt>36e5&&a.delete(t)}function s(e){n(),a.set(e.runId,{...e,updatedAt:Date.now()})}function r(e){n();let t=a.get(e);return t||null}function i(e){a.set(e.runId,{...e,updatedAt:Date.now()})}function c(e){a.delete(e)}}},9967:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({POST:()=>N});var n=e.i(15494),s=e.i(87485),r=e.i(83886),i=e.i(30331),c=e.i(88941),o=e.i(35692),d=e.i(77159),u=e.i(90926),m=e.i(79810),p=e.i(34926),h=e.i(33808),f=e.i(75405);let a=/\\s/;function g(e){return!(!e||a.test(e)||e.startsWith("-"))}function k(e,a){return new Promise((t,n)=>{let r=(0,s.spawn)("git",a,{cwd:e,stdio:["ignore","pipe","pipe"]}),i="",c="";r.stdout?.on("data",e=>{i+=e.toString()}),r.stderr?.on("data",e=>{c+=e.toString()}),r.on("close",e=>{t({code:e,stdout:i,stderr:c})}),r.on("error",e=>{n(e)})})}function l(e){return`git ${e.join(" ")}`}function $(e,a,t,n){0===n.code?e.push(`[${a}] 完成: ${t}`):e.push(`[${a}] 失败: ${t} ${n.stderr||n.stdout}`)}function b(e){for(let a=e.currentIndex;a<e.projects.length;a+=1){let t=e.projects[a];if("pending"!==t.status){e.currentIndex=a+1;continue}let n=function(e,a){if("pending"!==a.status)return null;let{createBranch:t,baseBranch:n,mergeBranch:s}=e;switch(a.phase){case"need-current-branch":return{id:`${a.name}-current-branch-${Date.now()}`,projectName:a.name,description:"检查当前分支",args:["branch","--show-current"],kind:"need-current-branch"};case"need-fetch":return{id:`${a.name}-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fetch"};case"need-base-check":return{id:`${a.name}-base-check-${Date.now()}`,projectName:a.name,description:`检查 origin/${n}`,args:["ls-remote","--heads","origin",n],kind:"need-base-check"};case"need-remote-create-check":return{id:`${a.name}-remote-create-check-${Date.now()}`,projectName:a.name,description:`检查远端分支 ${t}`,args:["ls-remote","--heads","origin",t],kind:"need-remote-create-check"};case"need-local-create-check":return{id:`${a.name}-local-create-check-${Date.now()}`,projectName:a.name,description:`检查本地分支 ${t}`,args:["show-ref","--verify",`refs/heads/${t}`],kind:"need-local-create-check"};case"need-checkout-remote-create":return{id:`${a.name}-checkout-remote-${Date.now()}`,projectName:a.name,description:`切换到远端分支 ${t}`,args:["checkout","-B",t,`origin/${t}`],kind:"need-checkout-remote-create"};case"need-create-branch":return{id:`${a.name}-create-branch-${Date.now()}`,projectName:a.name,description:`创建分支 ${t}`,args:["checkout","-B",t,`origin/${n}`],kind:"need-create-branch"};case"need-push-branch":return{id:`${a.name}-push-branch-${Date.now()}`,projectName:a.name,description:`推送分支 ${t}`,args:["push","-u","origin",t],kind:"need-push-branch"};case"need-merge-check":return{id:`${a.name}-merge-check-${Date.now()}`,projectName:a.name,description:`检查 origin/${s}`,args:["ls-remote","--heads","origin",s],kind:"need-merge-check"};case"need-status":return{id:`${a.name}-status-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status"};case"need-checkout-create":return{id:`${a.name}-checkout-create-${Date.now()}`,projectName:a.name,description:`切换到分支 ${t}`,args:["checkout",t],kind:"need-checkout-create"};case"need-fetch-after-checkout":return{id:`${a.name}-fetch-after-checkout-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fetch-after-checkout"};case"need-merge":return{id:`${a.name}-merge-${Date.now()}`,projectName:a.name,description:`合并 origin/${s}`,args:["merge","--no-ff","--no-edit",`origin/${s}`],kind:"need-merge"};case"need-merge-abort":return{id:`${a.name}-merge-abort-${Date.now()}`,projectName:a.name,description:"终止合并",args:["merge","--abort"],kind:"need-merge-abort"};case"need-push-merge":return{id:`${a.name}-push-merge-${Date.now()}`,projectName:a.name,description:`推送合并结果 ${t}`,args:["push","origin",t],kind:"need-push-merge"};case"need-main-fetch":return{id:`${a.name}-main-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-main-fetch"};case"need-main-check":return{id:`${a.name}-main-check-${Date.now()}`,projectName:a.name,description:`检查 origin/${n}`,args:["ls-remote","--heads","origin",n],kind:"need-main-check"};case"need-status-main":return{id:`${a.name}-status-main-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status-main"};case"need-checkout-main":return{id:`${a.name}-checkout-main-${Date.now()}`,projectName:a.name,description:`切换到 ${n}`,args:["checkout",n],kind:"need-checkout-main"};case"need-merge-into-main":return{id:`${a.name}-merge-into-main-${Date.now()}`,projectName:a.name,description:`合并 origin/${t} 到 ${n}`,args:["merge","--no-ff","--no-edit",`origin/${t}`],kind:"need-merge-into-main"};case"need-merge-into-main-abort":return{id:`${a.name}-merge-into-main-abort-${Date.now()}`,projectName:a.name,description:`终止合并到 ${n}`,args:["merge","--abort"],kind:"need-merge-into-main-abort"};case"need-push-main":return{id:`${a.name}-push-main-${Date.now()}`,projectName:a.name,description:`推送 ${n}`,args:["push","origin",n],kind:"need-push-main"};case"need-fix-main-fetch":return{id:`${a.name}-fix-main-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fix-main-fetch"};case"need-fix-main-check":return{id:`${a.name}-fix-main-check-${Date.now()}`,projectName:a.name,description:"检查 origin/fix/main",args:["ls-remote","--heads","origin","fix/main"],kind:"need-fix-main-check"};case"need-status-fix-main":return{id:`${a.name}-status-fix-main-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status-fix-main"};case"need-checkout-fix-main":return{id:`${a.name}-checkout-fix-main-${Date.now()}`,projectName:a.name,description:"切换到 fix/main",args:["checkout","fix/main"],kind:"need-checkout-fix-main"};case"need-merge-into-fix-main":return{id:`${a.name}-merge-into-fix-main-${Date.now()}`,projectName:a.name,description:`合并 origin/${t} 到 fix/main`,args:["merge","--no-ff","--no-edit",`origin/${t}`],kind:"need-merge-into-fix-main"};case"need-merge-into-fix-main-abort":return{id:`${a.name}-merge-into-fix-main-abort-${Date.now()}`,projectName:a.name,description:"终止合并到 fix/main",args:["merge","--abort"],kind:"need-merge-into-fix-main-abort"};case"need-push-fix-main":return{id:`${a.name}-push-fix-main-${Date.now()}`,projectName:a.name,description:"推送 fix/main",args:["push","origin","fix/main"],kind:"need-push-fix-main"};default:return null}}(e,t);if(n)return e.currentIndex=a,e.currentStep=n,n;e.currentIndex=a+1}return e.currentStep=null,null}async function x(e){let{createBranch:a}=e;for(let t of[...e.projects].reverse()){if(!t.originalBranch)continue;e.operationLogs.push(`[${t.name}] 回滚: ${l(["checkout",t.originalBranch])}`);let n=await k(t.path,["checkout",t.originalBranch]);if($(e.operationLogs,t.name,`回滚切换分支 ${t.originalBranch}`,n),t.createdLocalBranch&&!t.hadLocalBranch){e.operationLogs.push(`[${t.name}] 回滚: ${l(["branch","-D",a])}`);let n=await k(t.path,["branch","-D",a]);$(e.operationLogs,t.name,`回滚删除本地分支 ${a}`,n)}}}async function w(e,a){let t=e.projects.find(e=>e.name===a.projectName);if(!t)return void e.feedbacks.push(`[${a.projectName}] 项目不存在,跳过。`);e.operationLogs.push(`[${t.name}] ${l(a.args)}`);let n=await k(t.path,a.args);switch($(e.operationLogs,t.name,a.description,n),("need-checkout-remote-create"===a.kind||"need-create-branch"===a.kind||"need-checkout-create"===a.kind||"need-checkout-main"===a.kind||"need-checkout-fix-main"===a.kind)&&function(e,a,t){let n=new Set(a.ignoredUntrackedPaths??[]),s=(0,p.appendIgnoredPathsFromCheckoutWarning)(t.stderr,n);s.length>0&&(a.ignoredUntrackedPaths=[...n],e.operationLogs.push(`[${a.name}] 提示: 检测到子模块残留目录 ${s.join(", ")},状态检查将忽略对应未跟踪路径`))}(e,t,n),a.kind){case"need-current-branch":t.originalBranch=n.stdout.replace(/\s+/g," ").trim()||"HEAD",0===n.code?t.phase="need-fetch":(t.status="failed",e.feedbacks.push(`[${t.name}] 获取当前分支失败。`));break;case"need-fetch":0===n.code?t.phase="need-base-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-base-check":t.baseExists=!!n.stdout.trim(),t.baseExists?t.phase="need-remote-create-check":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/${e.baseBranch} 不存在,无法创建分支。`));break;case"need-remote-create-check":t.remoteCreateExists=!!n.stdout.trim(),t.phase="need-local-create-check";break;case"need-local-create-check":t.localCreateExists=0===n.code,t.localCreateExists?t.phase="need-checkout-create":t.remoteCreateExists?(t.hadLocalBranch=!1,t.phase="need-checkout-remote-create"):(t.hadLocalBranch=!1,t.phase="need-create-branch");break;case"need-checkout-remote-create":0===n.code?t.phase="need-merge-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到远端分支失败: ${n.stderr||n.stdout}`));break;case"need-create-branch":0===n.code?(t.createdLocalBranch=!0,t.phase="need-push-branch"):(t.status="failed",e.feedbacks.push(`[${t.name}] 创建分支失败: ${n.stderr||n.stdout}`));break;case"need-push-branch":0===n.code?t.phase="need-merge-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 推送新分支失败: ${n.stderr||n.stdout}`));break;case"need-merge-check":t.mergeExists=!!n.stdout.trim(),t.mergeExists?t.phase="need-status":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/${e.mergeBranch} 不存在,无法合并。`));break;case"need-status":t.statusClean=!(0,p.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths),t.statusClean?t.phase="need-checkout-create":(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再执行合并。`));break;case"need-checkout-create":0===n.code?t.phase="need-fetch-after-checkout":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到分支失败: ${n.stderr||n.stdout}`));break;case"need-fetch-after-checkout":0===n.code?t.phase="need-merge":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-merge":0===n.code?t.phase="need-push-merge":(t.phase="need-merge-abort",e.feedbacks.push(`[${t.name}] 合并冲突,准备终止合并。`));break;case"need-merge-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并冲突,已终止合并,请手动处理。`);break;case"need-push-merge":0===n.code?t.phase="need-main-fetch":(t.status="failed",e.feedbacks.push(`[${t.name}] 推送合并结果失败: ${n.stderr||n.stdout}`));break;case"need-main-fetch":0===n.code?t.phase="need-main-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-main-check":n.stdout.trim()?t.phase="need-status-main":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/${e.baseBranch} 不存在,无法合并。`));break;case"need-status-main":(0,p.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths)?(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再合并 ${e.baseBranch}。`)):t.phase="need-checkout-main";break;case"need-checkout-main":0===n.code?t.phase="need-merge-into-main":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到 ${e.baseBranch} 失败: ${n.stderr||n.stdout}`));break;case"need-merge-into-main":0===n.code?t.phase="need-push-main":(t.phase="need-merge-into-main-abort",e.feedbacks.push(`[${t.name}] 合并到 ${e.baseBranch} 冲突,准备终止合并。`));break;case"need-merge-into-main-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并到 ${e.baseBranch} 失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并到 ${e.baseBranch} 冲突,已终止合并,请手动处理。`);break;case"need-push-main":0===n.code?(0,u.getUatFinalMergeTargets)(e.baseBranch).includes("fix/main")?t.phase="need-fix-main-fetch":(t.status="done",t.phase="done"):(t.status="failed",e.feedbacks.push(`[${t.name}] 推送 ${e.baseBranch} 失败: ${n.stderr||n.stdout}`));break;case"need-fix-main-fetch":0===n.code?t.phase="need-fix-main-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-fix-main-check":n.stdout.trim()?t.phase="need-status-fix-main":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/fix/main 不存在,无法合并。`));break;case"need-status-fix-main":(0,p.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths)?(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再合并 fix/main。`)):t.phase="need-checkout-fix-main";break;case"need-checkout-fix-main":0===n.code?t.phase="need-merge-into-fix-main":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到 fix/main 失败: ${n.stderr||n.stdout}`));break;case"need-merge-into-fix-main":0===n.code?t.phase="need-push-fix-main":(t.phase="need-merge-into-fix-main-abort",e.feedbacks.push(`[${t.name}] 合并到 fix/main 冲突,准备终止合并。`));break;case"need-merge-into-fix-main-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并到 fix/main 失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并到 fix/main 冲突,已终止合并,请手动处理。`);break;case"need-push-fix-main":0===n.code?(t.status="done",t.phase="done"):(t.status="failed",e.feedbacks.push(`[${t.name}] 推送 fix/main 失败: ${n.stderr||n.stdout}`))}}async function j(e){for(let a of new Set(e.projects.map(e=>e.tempRootPath).filter(Boolean)))try{await (0,h.cleanupTempExecutionRepo)(a)}catch(e){console.error(`清理临时目录失败: ${a}`,e)}}async function N(e){try{let s=await e.json(),p="string"==typeof s.action?s.action:"";if("start"===p){let e=Array.isArray(s.projects)?s.projects:[],p="string"==typeof s.createBranch?s.createBranch.trim():"",k="string"==typeof s.baseBranch?s.baseBranch.trim():"",$="string"==typeof s.mergeBranch?s.mergeBranch.trim():"",x="string"==typeof s.runId?s.runId:"",w=[],N=[],S=new Set;if(0===e.length||!p||!k||!$)return n.NextResponse.json({success:!1,operationLogs:w,feedbacks:["缺少必要参数,请填写完整后重试。"]},{status:400});if(!(0,u.isAllowedUatBaseBranch)(k))return n.NextResponse.json({success:!1,operationLogs:w,feedbacks:[`UAT 操作流从 origin 分支创建仅支持:${u.UAT_BASE_BRANCH_OPTIONS.join("、")}。`]},{status:400});if(!g(p)||!g(k)||!g($))return n.NextResponse.json({success:!1,operationLogs:w,feedbacks:["分支名称不合法,请避免空格或以 - 开头。"]},{status:400});if(!x)return n.NextResponse.json({success:!1,operationLogs:w,feedbacks:["缺少 runId,请刷新页面后重试。"]},{status:400});(0,m.createUatGitFlowState)(x);let B=await (0,o.getProjectsConfig)(),R=c.WORKSPACE_CONFIG.WORKSPACE_ROOT,D=[];try{for(let n of e){var a,t;let e=String(n),s=(0,d.sanitizeProjectName)(e);if(!s||s!==e){w.push(`[${e}] 失败: 项目名称包含无效字符`),N.push(`[${e}] 项目名称包含无效字符,已跳过。`);continue}if(!B[s]){w.push(`[${s}] 失败: 未在项目配置中找到`),N.push(`[${s}] 未在项目配置中找到,已跳过。`);continue}let c=(0,i.join)(R,s);if(!(0,r.existsSync)(c)){w.push(`[${s}] 失败: 项目目录不存在`),N.push(`[${s}] 项目目录不存在,已跳过。`);continue}if(!(0,r.existsSync)((0,i.join)(c,".git"))){w.push(`[${s}] 失败: 非 Git 仓库`),N.push(`[${s}] 不是有效的 Git 仓库,已跳过。`);continue}let o=await (0,h.createTempExecutionRepo)(c,s);if(!o.success){w.push(`[${s}] 失败: 创建临时执行仓库失败 ${o.error}`),N.push(`[${s}] 创建临时执行仓库失败: ${o.error}`);continue}S.add(o.value.tempRootPath),w.push(`[${s}] 使用临时目录执行: ${o.value.projectPath}`),D.push((a=o.value.projectPath,t=o.value.tempRootPath,{name:s,path:a,tempRootPath:t,phase:"need-current-branch",status:"pending",originalBranch:"",createdLocalBranch:!1,hadLocalBranch:!0,ignoredUntrackedPaths:[],baseExists:null,remoteCreateExists:null,localCreateExists:null,mergeExists:null,statusClean:null}))}}catch(e){for(let e of S)try{await (0,h.cleanupTempExecutionRepo)(e)}catch(a){console.error(`清理临时目录失败: ${e}`,a)}throw(0,m.clearUatGitFlowState)(x),e}let L={runId:x,createBranch:p,baseBranch:k,mergeBranch:$,projects:D,currentIndex:0,operationLogs:w,feedbacks:N,currentStep:null,updatedAt:Date.now()},P=b(L);return P?(0,f.createStepRun)(L):(await j(L),(0,m.clearUatGitFlowState)(x)),n.NextResponse.json({success:!0,runId:x,nextStep:P?{stepId:P.id,projectName:P.projectName,description:P.description,command:l(P.args)}:null,operationLogs:L.operationLogs,feedbacks:L.feedbacks,isComplete:null===P})}if("execute"===p){let e="string"==typeof s.runId?s.runId:"",a="string"==typeof s.stepId?s.stepId:"",t=(0,f.getStepRun)(e);if(!t)return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未找到执行上下文,请重新开始。"]},{status:404});if((0,m.isUatGitFlowAborted)(e))return t.operationLogs.push("已收到中断请求,开始回滚已执行的本地操作。"),await x(t),await j(t),(0,f.clearStepRun)(e),(0,m.clearUatGitFlowState)(e),n.NextResponse.json({success:!0,runId:e,nextStep:null,operationLogs:t.operationLogs,feedbacks:t.feedbacks,isComplete:!0,aborted:!0});if(!t.currentStep||t.currentStep.id!==a)return n.NextResponse.json({success:!1,operationLogs:t.operationLogs,feedbacks:["步骤已更新,请重新确认。"]},{status:409});await w(t,t.currentStep);let r=b(t);return(0,f.updateStepRun)(t),r||(await j(t),(0,f.clearStepRun)(e),(0,m.clearUatGitFlowState)(e)),n.NextResponse.json({success:!0,runId:e,nextStep:r?{stepId:r.id,projectName:r.projectName,description:r.description,command:l(r.args)}:null,operationLogs:t.operationLogs,feedbacks:t.feedbacks,isComplete:null===r})}if("abort"===p){let e="string"==typeof s.runId?s.runId:"",a=(0,f.getStepRun)(e);if(!a)return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未找到执行上下文,请重新开始。"]},{status:404});return a.operationLogs.push("已收到中断请求,开始回滚已执行的本地操作。"),await x(a),await j(a),(0,f.clearStepRun)(e),(0,m.clearUatGitFlowState)(e),n.NextResponse.json({success:!0,runId:e,nextStep:null,operationLogs:a.operationLogs,feedbacks:a.feedbacks,isComplete:!0,aborted:!0})}return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未知操作类型。"]},{status:400})}catch(e){return console.error("UAT git 分步执行失败:",e),n.NextResponse.json({success:!1,operationLogs:[],feedbacks:[e instanceof Error?e.message:"执行失败"]},{status:500})}}}},3301:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({patchFetch:()=>c,routeModule:()=>a,serverHooks:()=>d,workAsyncStorage:()=>t,workUnitAsyncStorage:()=>o});var n=e.i(45746),s=e.i(93828),r=e.i(18250),i=e.i(9967);let a=new n.AppRouteRouteModule({definition:{kind:s.RouteKind.APP_ROUTE,page:"/api/uat-git-flow/step/route",pathname:"/api/uat-git-flow/step",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/uat-git-flow/step/route.ts",nextConfigOutput:"",userland:i}),{workAsyncStorage:t,workUnitAsyncStorage:o,serverHooks:d}=a;function c(){return(0,r.patchFetch)({workAsyncStorage:t,workUnitAsyncStorage:o})}}}};
2
2
 
3
3
  //# sourceMappingURL=_24087f66._.js.map