prime-dev-cli 2.0.5 → 2.0.7

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 (267) hide show
  1. package/dist/server/.next/BUILD_ID +1 -1
  2. package/dist/server/.next/app-build-manifest.json +8 -8
  3. package/dist/server/.next/app-path-routes-manifest.json +7 -0
  4. package/dist/server/.next/build-manifest.json +6 -6
  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 +6 -6
  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 +12 -12
  12. package/dist/server/.next/server/app/_not-found/page/app-build-manifest.json +1 -1
  13. package/dist/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/dist/server/.next/server/app/_not-found.html +1 -1
  15. package/dist/server/.next/server/app/_not-found.rsc +2 -2
  16. package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route.js +1 -1
  17. package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route.js.nft.json +1 -1
  18. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route.js +1 -1
  19. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route.js.nft.json +1 -1
  20. package/dist/server/.next/server/app/api/admin-git-batch-merge/route.js +1 -1
  21. package/dist/server/.next/server/app/api/admin-git-batch-merge/route.js.nft.json +1 -1
  22. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route.js +1 -1
  23. package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route.js.nft.json +1 -1
  24. package/dist/server/.next/server/app/api/all-projects-envs/route.js +1 -1
  25. package/dist/server/.next/server/app/api/all-projects-envs/route.js.nft.json +1 -1
  26. package/dist/server/.next/server/app/api/batch-list-branches/route/app-build-manifest.json +10 -0
  27. package/dist/server/.next/server/app/api/batch-list-branches/route/app-paths-manifest.json +3 -0
  28. package/dist/server/.next/server/app/api/batch-list-branches/route/build-manifest.json +16 -0
  29. package/dist/server/.next/server/app/api/batch-list-branches/route/next-font-manifest.json +6 -0
  30. package/dist/server/.next/server/app/api/batch-list-branches/route/react-loadable-manifest.json +1 -0
  31. package/dist/server/.next/server/app/api/batch-list-branches/route/server-reference-manifest.json +4 -0
  32. package/dist/server/.next/server/app/api/batch-list-branches/route.js +8 -0
  33. package/dist/server/.next/server/app/api/batch-list-branches/route.js.map +5 -0
  34. package/dist/server/.next/server/app/api/batch-list-branches/route.js.nft.json +1 -0
  35. package/dist/server/.next/server/app/api/batch-list-branches/route_client-reference-manifest.js +2 -0
  36. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route/app-build-manifest.json +10 -0
  37. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route/app-paths-manifest.json +3 -0
  38. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route/build-manifest.json +16 -0
  39. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route/next-font-manifest.json +6 -0
  40. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route/react-loadable-manifest.json +1 -0
  41. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route/server-reference-manifest.json +4 -0
  42. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route.js +8 -0
  43. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route.js.map +5 -0
  44. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route.js.nft.json +1 -0
  45. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route_client-reference-manifest.js +2 -0
  46. package/dist/server/.next/server/app/api/batch-switch-branch/route/app-build-manifest.json +10 -0
  47. package/dist/server/.next/server/app/api/batch-switch-branch/route/app-paths-manifest.json +3 -0
  48. package/dist/server/.next/server/app/api/batch-switch-branch/route/build-manifest.json +16 -0
  49. package/dist/server/.next/server/app/api/batch-switch-branch/route/next-font-manifest.json +6 -0
  50. package/dist/server/.next/server/app/api/batch-switch-branch/route/react-loadable-manifest.json +1 -0
  51. package/dist/server/.next/server/app/api/batch-switch-branch/route/server-reference-manifest.json +4 -0
  52. package/dist/server/.next/server/app/api/batch-switch-branch/route.js +8 -0
  53. package/dist/server/.next/server/app/api/batch-switch-branch/route.js.map +5 -0
  54. package/dist/server/.next/server/app/api/batch-switch-branch/route.js.nft.json +1 -0
  55. package/dist/server/.next/server/app/api/batch-switch-branch/route_client-reference-manifest.js +2 -0
  56. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route/app-build-manifest.json +10 -0
  57. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route/app-paths-manifest.json +3 -0
  58. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route/build-manifest.json +16 -0
  59. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route/next-font-manifest.json +6 -0
  60. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route/react-loadable-manifest.json +1 -0
  61. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route/server-reference-manifest.json +4 -0
  62. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route.js +8 -0
  63. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route.js.map +5 -0
  64. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route.js.nft.json +1 -0
  65. package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route_client-reference-manifest.js +2 -0
  66. package/dist/server/.next/server/app/api/branch/switch/route/app-build-manifest.json +10 -0
  67. package/dist/server/.next/server/app/api/branch/switch/route/app-paths-manifest.json +3 -0
  68. package/dist/server/.next/server/app/api/branch/switch/route/build-manifest.json +16 -0
  69. package/dist/server/.next/server/app/api/branch/switch/route/next-font-manifest.json +6 -0
  70. package/dist/server/.next/server/app/api/branch/switch/route/react-loadable-manifest.json +1 -0
  71. package/dist/server/.next/server/app/api/branch/switch/route/server-reference-manifest.json +4 -0
  72. package/dist/server/.next/server/app/api/branch/switch/route.js +8 -0
  73. package/dist/server/.next/server/app/api/branch/switch/route.js.map +5 -0
  74. package/dist/server/.next/server/app/api/branch/switch/route.js.nft.json +1 -0
  75. package/dist/server/.next/server/app/api/branch/switch/route_client-reference-manifest.js +2 -0
  76. package/dist/server/.next/server/app/api/branches/route/app-build-manifest.json +10 -0
  77. package/dist/server/.next/server/app/api/branches/route/app-paths-manifest.json +3 -0
  78. package/dist/server/.next/server/app/api/branches/route/build-manifest.json +16 -0
  79. package/dist/server/.next/server/app/api/branches/route/next-font-manifest.json +6 -0
  80. package/dist/server/.next/server/app/api/branches/route/react-loadable-manifest.json +1 -0
  81. package/dist/server/.next/server/app/api/branches/route/server-reference-manifest.json +4 -0
  82. package/dist/server/.next/server/app/api/branches/route.js +8 -0
  83. package/dist/server/.next/server/app/api/branches/route.js.map +5 -0
  84. package/dist/server/.next/server/app/api/branches/route.js.nft.json +1 -0
  85. package/dist/server/.next/server/app/api/branches/route_client-reference-manifest.js +2 -0
  86. package/dist/server/.next/server/app/api/check-mock-intercept/route.js +1 -1
  87. package/dist/server/.next/server/app/api/check-mock-intercept/route.js.nft.json +1 -1
  88. package/dist/server/.next/server/app/api/check-workspace/route.js +1 -1
  89. package/dist/server/.next/server/app/api/check-workspace/route.js.nft.json +1 -1
  90. package/dist/server/.next/server/app/api/cleanup-mock/route.js +1 -1
  91. package/dist/server/.next/server/app/api/cleanup-mock/route.js.nft.json +1 -1
  92. package/dist/server/.next/server/app/api/delete-mock-api/route.js +1 -1
  93. package/dist/server/.next/server/app/api/delete-mock-api/route.js.nft.json +1 -1
  94. package/dist/server/.next/server/app/api/get-mock-data/route.js +1 -1
  95. package/dist/server/.next/server/app/api/get-mock-data/route.js.nft.json +1 -1
  96. package/dist/server/.next/server/app/api/gwh-git-flow/route.js +1 -1
  97. package/dist/server/.next/server/app/api/gwh-git-flow/route.js.nft.json +1 -1
  98. package/dist/server/.next/server/app/api/initialize-workspace/route.js +1 -1
  99. package/dist/server/.next/server/app/api/initialize-workspace/route.js.nft.json +1 -1
  100. package/dist/server/.next/server/app/api/memory-status/route.js +1 -1
  101. package/dist/server/.next/server/app/api/memory-status/route.js.nft.json +1 -1
  102. package/dist/server/.next/server/app/api/microapp-proxy-change-stream/route.js +1 -1
  103. package/dist/server/.next/server/app/api/microapp-proxy-change-stream/route.js.nft.json +1 -1
  104. package/dist/server/.next/server/app/api/microapp-proxy-config/route.js +1 -1
  105. package/dist/server/.next/server/app/api/microapp-proxy-config/route.js.nft.json +1 -1
  106. package/dist/server/.next/server/app/api/mock-file/route.js +1 -1
  107. package/dist/server/.next/server/app/api/mock-file/route.js.nft.json +1 -1
  108. package/dist/server/.next/server/app/api/mock-file-content/route.js +1 -1
  109. package/dist/server/.next/server/app/api/mock-file-content/route.js.nft.json +1 -1
  110. package/dist/server/.next/server/app/api/mock-open-status/route.js +1 -1
  111. package/dist/server/.next/server/app/api/mock-open-status/route.js.nft.json +1 -1
  112. package/dist/server/.next/server/app/api/mock-setting/route.js +1 -1
  113. package/dist/server/.next/server/app/api/mock-setting/route.js.nft.json +1 -1
  114. package/dist/server/.next/server/app/api/open-all-mock/route.js +1 -1
  115. package/dist/server/.next/server/app/api/open-all-mock/route.js.nft.json +1 -1
  116. package/dist/server/.next/server/app/api/open-project/route.js.nft.json +1 -1
  117. package/dist/server/.next/server/app/api/process/start/route.js +1 -1
  118. package/dist/server/.next/server/app/api/process/start/route.js.nft.json +1 -1
  119. package/dist/server/.next/server/app/api/process/status/route.js +1 -1
  120. package/dist/server/.next/server/app/api/process/status/route.js.nft.json +1 -1
  121. package/dist/server/.next/server/app/api/project-config/route.js +1 -1
  122. package/dist/server/.next/server/app/api/project-config/route.js.nft.json +1 -1
  123. package/dist/server/.next/server/app/api/retry-project/route.js +1 -1
  124. package/dist/server/.next/server/app/api/retry-project/route.js.nft.json +1 -1
  125. package/dist/server/.next/server/app/api/submodule-info/route/app-build-manifest.json +10 -0
  126. package/dist/server/.next/server/app/api/submodule-info/route/app-paths-manifest.json +3 -0
  127. package/dist/server/.next/server/app/api/submodule-info/route/build-manifest.json +16 -0
  128. package/dist/server/.next/server/app/api/submodule-info/route/next-font-manifest.json +6 -0
  129. package/dist/server/.next/server/app/api/submodule-info/route/react-loadable-manifest.json +1 -0
  130. package/dist/server/.next/server/app/api/submodule-info/route/server-reference-manifest.json +4 -0
  131. package/dist/server/.next/server/app/api/submodule-info/route.js +8 -0
  132. package/dist/server/.next/server/app/api/submodule-info/route.js.map +5 -0
  133. package/dist/server/.next/server/app/api/submodule-info/route.js.nft.json +1 -0
  134. package/dist/server/.next/server/app/api/submodule-info/route_client-reference-manifest.js +2 -0
  135. package/dist/server/.next/server/app/api/uat-git-flow/route.js +1 -1
  136. package/dist/server/.next/server/app/api/uat-git-flow/route.js.nft.json +1 -1
  137. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js +1 -1
  138. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js.nft.json +1 -1
  139. package/dist/server/.next/server/app/api/workspace/create/route.js +1 -1
  140. package/dist/server/.next/server/app/api/workspace/create/route.js.nft.json +1 -1
  141. package/dist/server/.next/server/app/configuration/page/app-build-manifest.json +3 -3
  142. package/dist/server/.next/server/app/configuration/page.js.nft.json +1 -1
  143. package/dist/server/.next/server/app/configuration/page_client-reference-manifest.js +1 -1
  144. package/dist/server/.next/server/app/configuration.html +1 -1
  145. package/dist/server/.next/server/app/configuration.rsc +3 -3
  146. package/dist/server/.next/server/app/index.html +1 -1
  147. package/dist/server/.next/server/app/index.rsc +2 -2
  148. package/dist/server/.next/server/app/initialization/page/app-build-manifest.json +3 -3
  149. package/dist/server/.next/server/app/initialization/page.js.nft.json +1 -1
  150. package/dist/server/.next/server/app/initialization/page_client-reference-manifest.js +1 -1
  151. package/dist/server/.next/server/app/initialization.html +1 -1
  152. package/dist/server/.next/server/app/initialization.rsc +3 -3
  153. package/dist/server/.next/server/app/page/app-build-manifest.json +1 -1
  154. package/dist/server/.next/server/app/page_client-reference-manifest.js +1 -1
  155. package/dist/server/.next/server/app-paths-manifest.json +7 -0
  156. package/dist/server/.next/server/chunks/{[root-of-the-server]__dda45cac._.js → [root-of-the-server]__061fab1d._.js} +2 -2
  157. package/dist/server/.next/server/chunks/{[root-of-the-server]__dda45cac._.js.map → [root-of-the-server]__061fab1d._.js.map} +1 -1
  158. package/dist/server/.next/server/chunks/{[root-of-the-server]__4ec3205b._.js → [root-of-the-server]__09313e5e._.js} +2 -2
  159. package/dist/server/.next/server/chunks/{[root-of-the-server]__4ec3205b._.js.map → [root-of-the-server]__09313e5e._.js.map} +1 -1
  160. package/dist/server/.next/server/chunks/[root-of-the-server]__0c170d21._.js +3 -0
  161. package/dist/server/.next/server/chunks/[root-of-the-server]__0c170d21._.js.map +1 -0
  162. package/dist/server/.next/server/chunks/[root-of-the-server]__131fe141._.js +3 -0
  163. package/dist/server/.next/server/chunks/[root-of-the-server]__131fe141._.js.map +1 -0
  164. package/dist/server/.next/server/chunks/[root-of-the-server]__139ed483._.js +3 -0
  165. package/dist/server/.next/server/chunks/[root-of-the-server]__139ed483._.js.map +1 -0
  166. package/dist/server/.next/server/chunks/{[root-of-the-server]__37bfbf6b._.js → [root-of-the-server]__1ebda8c2._.js} +2 -2
  167. package/dist/server/.next/server/chunks/{[root-of-the-server]__37bfbf6b._.js.map → [root-of-the-server]__1ebda8c2._.js.map} +1 -1
  168. package/dist/server/.next/server/chunks/[root-of-the-server]__326fc423._.js +3 -0
  169. package/dist/server/.next/server/chunks/[root-of-the-server]__326fc423._.js.map +1 -0
  170. package/dist/server/.next/server/chunks/{[root-of-the-server]__ec681197._.js → [root-of-the-server]__32f4379a._.js} +2 -2
  171. package/dist/server/.next/server/chunks/{[root-of-the-server]__ec681197._.js.map → [root-of-the-server]__32f4379a._.js.map} +1 -1
  172. package/dist/server/.next/server/chunks/{[root-of-the-server]__e0b7050d._.js → [root-of-the-server]__36b796c6._.js} +2 -2
  173. package/dist/server/.next/server/chunks/{[root-of-the-server]__e0b7050d._.js.map → [root-of-the-server]__36b796c6._.js.map} +1 -1
  174. package/dist/server/.next/server/chunks/[root-of-the-server]__36b87de0._.js +3 -0
  175. package/dist/server/.next/server/chunks/[root-of-the-server]__36b87de0._.js.map +1 -0
  176. package/dist/server/.next/server/chunks/{[root-of-the-server]__2f8b52da._.js → [root-of-the-server]__3987d53e._.js} +2 -2
  177. package/dist/server/.next/server/chunks/{[root-of-the-server]__2f8b52da._.js.map → [root-of-the-server]__3987d53e._.js.map} +1 -1
  178. package/dist/server/.next/server/chunks/{[root-of-the-server]__9e44bbc8._.js → [root-of-the-server]__3f941970._.js} +2 -2
  179. package/dist/server/.next/server/chunks/{[root-of-the-server]__9e44bbc8._.js.map → [root-of-the-server]__3f941970._.js.map} +1 -1
  180. package/dist/server/.next/server/chunks/{[root-of-the-server]__d3078133._.js → [root-of-the-server]__5a926dad._.js} +2 -2
  181. package/dist/server/.next/server/chunks/{[root-of-the-server]__d3078133._.js.map → [root-of-the-server]__5a926dad._.js.map} +1 -1
  182. package/dist/server/.next/server/chunks/{[root-of-the-server]__0d56f35b._.js → [root-of-the-server]__5d6739e4._.js} +2 -2
  183. package/dist/server/.next/server/chunks/{[root-of-the-server]__0d56f35b._.js.map → [root-of-the-server]__5d6739e4._.js.map} +1 -1
  184. package/dist/server/.next/server/chunks/{[root-of-the-server]__3952b86e._.js → [root-of-the-server]__6004758a._.js} +2 -2
  185. package/dist/server/.next/server/chunks/{[root-of-the-server]__3952b86e._.js.map → [root-of-the-server]__6004758a._.js.map} +1 -1
  186. package/dist/server/.next/server/chunks/{[root-of-the-server]__54f2f032._.js → [root-of-the-server]__6496ee9b._.js} +2 -2
  187. package/dist/server/.next/server/chunks/{[root-of-the-server]__54f2f032._.js.map → [root-of-the-server]__6496ee9b._.js.map} +1 -1
  188. package/dist/server/.next/server/chunks/{[root-of-the-server]__c18498ef._.js → [root-of-the-server]__66952f53._.js} +2 -2
  189. package/dist/server/.next/server/chunks/{[root-of-the-server]__c18498ef._.js.map → [root-of-the-server]__66952f53._.js.map} +1 -1
  190. package/dist/server/.next/server/chunks/[root-of-the-server]__6bf6dd19._.js +3 -0
  191. package/dist/server/.next/server/chunks/[root-of-the-server]__6bf6dd19._.js.map +1 -0
  192. package/dist/server/.next/server/chunks/{[root-of-the-server]__4fd52ac1._.js → [root-of-the-server]__72882dad._.js} +2 -2
  193. package/dist/server/.next/server/chunks/{[root-of-the-server]__4fd52ac1._.js.map → [root-of-the-server]__72882dad._.js.map} +1 -1
  194. package/dist/server/.next/server/chunks/[root-of-the-server]__77a38b01._.js +16 -0
  195. package/dist/server/.next/server/chunks/[root-of-the-server]__77a38b01._.js.map +1 -0
  196. package/dist/server/.next/server/chunks/{[root-of-the-server]__5c9f62f9._.js → [root-of-the-server]__7f6ec3b4._.js} +2 -2
  197. package/dist/server/.next/server/chunks/{[root-of-the-server]__5c9f62f9._.js.map → [root-of-the-server]__7f6ec3b4._.js.map} +1 -1
  198. package/dist/server/.next/server/chunks/{[root-of-the-server]__2ffbf0d3._.js → [root-of-the-server]__86c123b3._.js} +2 -2
  199. package/dist/server/.next/server/chunks/{[root-of-the-server]__2ffbf0d3._.js.map → [root-of-the-server]__86c123b3._.js.map} +1 -1
  200. package/dist/server/.next/server/chunks/[root-of-the-server]__8713ccda._.js +16 -0
  201. package/dist/server/.next/server/chunks/[root-of-the-server]__8713ccda._.js.map +1 -0
  202. package/dist/server/.next/server/chunks/{[root-of-the-server]__0e8a08fc._.js → [root-of-the-server]__9d9f55dd._.js} +2 -2
  203. package/dist/server/.next/server/chunks/{[root-of-the-server]__0e8a08fc._.js.map → [root-of-the-server]__9d9f55dd._.js.map} +1 -1
  204. package/dist/server/.next/server/chunks/{[root-of-the-server]__452b5f9c._.js → [root-of-the-server]__a75af746._.js} +2 -2
  205. package/dist/server/.next/server/chunks/{[root-of-the-server]__452b5f9c._.js.map → [root-of-the-server]__a75af746._.js.map} +1 -1
  206. package/dist/server/.next/server/chunks/[root-of-the-server]__ae9fe9b7._.js +3 -0
  207. package/dist/server/.next/server/chunks/[root-of-the-server]__ae9fe9b7._.js.map +1 -0
  208. package/dist/server/.next/server/chunks/{[root-of-the-server]__2a29597f._.js → [root-of-the-server]__b49d8c86._.js} +2 -2
  209. package/dist/server/.next/server/chunks/{[root-of-the-server]__2a29597f._.js.map → [root-of-the-server]__b49d8c86._.js.map} +1 -1
  210. package/dist/server/.next/server/chunks/{[root-of-the-server]__c43cf810._.js → [root-of-the-server]__b96ce42e._.js} +2 -2
  211. package/dist/server/.next/server/chunks/{[root-of-the-server]__c43cf810._.js.map → [root-of-the-server]__b96ce42e._.js.map} +1 -1
  212. package/dist/server/.next/server/chunks/{[root-of-the-server]__8637b7f1._.js → [root-of-the-server]__e2654a76._.js} +2 -2
  213. package/dist/server/.next/server/chunks/{[root-of-the-server]__8637b7f1._.js.map → [root-of-the-server]__e2654a76._.js.map} +1 -1
  214. package/dist/server/.next/server/chunks/{[root-of-the-server]__4b595942._.js → [root-of-the-server]__e96f0857._.js} +2 -2
  215. package/dist/server/.next/server/chunks/ssr/{_a1ab1c09._.js → _283bdc73._.js} +2 -2
  216. package/dist/server/.next/server/chunks/ssr/_283bdc73._.js.map +1 -0
  217. package/dist/server/.next/server/chunks/ssr/_89496b8a._.js +1 -1
  218. package/dist/server/.next/server/chunks/ssr/_89496b8a._.js.map +1 -1
  219. package/dist/server/.next/server/chunks/ssr/_9f432559._.js +2 -2
  220. package/dist/server/.next/server/chunks/ssr/_9f432559._.js.map +1 -1
  221. package/dist/server/.next/server/chunks/ssr/{_ee0c9da0._.js → _c7905e3c._.js} +2 -2
  222. package/dist/server/.next/server/chunks/ssr/_c7905e3c._.js.map +1 -0
  223. package/dist/server/.next/server/chunks/ssr/packages_server_src_65e3de99._.js +3 -0
  224. package/dist/server/.next/server/chunks/ssr/packages_server_src_65e3de99._.js.map +1 -0
  225. package/dist/server/.next/server/middleware-build-manifest.js +4 -4
  226. package/dist/server/.next/server/pages/404.html +1 -1
  227. package/dist/server/.next/server/pages/500.html +1 -1
  228. package/dist/server/.next/server/pages/_app/build-manifest.json +2 -2
  229. package/dist/server/.next/server/pages/_error/build-manifest.json +2 -2
  230. package/dist/server/.next/server/server-reference-manifest.js +1 -1
  231. package/dist/server/.next/server/server-reference-manifest.json +1 -1
  232. package/dist/server/.next/static/chunks/063f4e9959195b1d.js +57 -0
  233. package/dist/server/.next/static/chunks/09cba5d1f6b48977.js.map +1 -0
  234. package/dist/server/.next/static/chunks/{cf8cd3228a692db3.js → 0c6009607901038e.js} +2 -2
  235. package/dist/server/.next/static/chunks/1427afaf93da978b.css +3 -0
  236. package/dist/server/.next/static/chunks/{43c514797c454939.js → 1ae3fa2333c12687.js} +2 -2
  237. package/dist/server/.next/{server/chunks/ssr/_ee0c9da0._.js.map → static/chunks/227a962f4584edf8.js.map} +1 -1
  238. package/dist/server/.next/{server/chunks/ssr/_a1ab1c09._.js.map → static/chunks/51509164bafe1e57.js.map} +1 -1
  239. package/dist/server/.next/static/chunks/{b18e8b227375accd.js.map → 6a92a3cb924fd124.js.map} +1 -1
  240. package/dist/server/.next/static/chunks/6f824bb5811ceebd.js +3 -0
  241. package/dist/server/.next/static/chunks/{9148331cad3a934e.js → 736431eeff70b2b7.js} +2 -2
  242. package/dist/server/.next/static/chunks/{8ade09a4b436cb9d.js → 9793bc87a71ec278.js} +2 -2
  243. package/dist/server/.next/static/chunks/{aa6cbf0011bc69d5.js → dad6616f7b6f4060.js} +1 -1
  244. package/dist/server/.next/static/chunks/e0fb1a1f78246e35.css.map +1 -0
  245. package/dist/server/.next/static/chunks/f9854e63365b2956.js.map +1 -0
  246. package/dist/server/.next/static/chunks/pages/_app.js +2 -2
  247. package/dist/server/.next/static/chunks/pages/_error.js +2 -2
  248. package/dist/server/.next/trace +2 -2
  249. package/package.json +1 -1
  250. package/dist/server/.next/server/chunks/[root-of-the-server]__0879b2d6._.js +0 -3
  251. package/dist/server/.next/server/chunks/[root-of-the-server]__0879b2d6._.js.map +0 -1
  252. package/dist/server/.next/server/chunks/[root-of-the-server]__2a78acef._.js +0 -3
  253. package/dist/server/.next/server/chunks/[root-of-the-server]__2a78acef._.js.map +0 -1
  254. package/dist/server/.next/server/chunks/ssr/packages_server_src_7cef6dbd._.js +0 -3
  255. package/dist/server/.next/server/chunks/ssr/packages_server_src_7cef6dbd._.js.map +0 -1
  256. package/dist/server/.next/static/chunks/0e37440325dbbf50.js.map +0 -1
  257. package/dist/server/.next/static/chunks/3dc9d6a79fb35214.js.map +0 -1
  258. package/dist/server/.next/static/chunks/45e30917848bc72f.js +0 -3
  259. package/dist/server/.next/static/chunks/813ed5c3558fc63e.css +0 -3
  260. package/dist/server/.next/static/chunks/888146b3e75fe817.js.map +0 -1
  261. package/dist/server/.next/static/chunks/8ccce022eadc0aa8.js +0 -57
  262. package/dist/server/.next/static/chunks/d1dc973f55175a52.css.map +0 -1
  263. package/dist/server/.next/static/chunks/e70508cc9f59709d.js.map +0 -1
  264. /package/dist/server/.next/server/chunks/{[root-of-the-server]__4b595942._.js.map → [root-of-the-server]__e96f0857._.js.map} +0 -0
  265. /package/dist/server/.next/static/{KXkoiu11_AYB_0w9kpOdD → Dz7Ultbv0aaqF3m4OrOHQ}/_buildManifest.js +0 -0
  266. /package/dist/server/.next/static/{KXkoiu11_AYB_0w9kpOdD → Dz7Ultbv0aaqF3m4OrOHQ}/_clientMiddlewareManifest.json +0 -0
  267. /package/dist/server/.next/static/{KXkoiu11_AYB_0w9kpOdD → Dz7Ultbv0aaqF3m4OrOHQ}/_ssgManifest.js +0 -0
@@ -1,5 +1,5 @@
1
1
  __turbopack_load_page_chunks__("/_app", [
2
2
  "static/chunks/7d7379cdf8fe9ec5.js",
3
- "static/chunks/8ade09a4b436cb9d.js",
4
- "static/chunks/aa6cbf0011bc69d5.js"
3
+ "static/chunks/9793bc87a71ec278.js",
4
+ "static/chunks/0c6009607901038e.js"
5
5
  ])
@@ -1,5 +1,5 @@
1
1
  __turbopack_load_page_chunks__("/_error", [
2
2
  "static/chunks/cf6e515377591a1f.js",
3
- "static/chunks/8ade09a4b436cb9d.js",
4
- "static/chunks/cf8cd3228a692db3.js"
3
+ "static/chunks/9793bc87a71ec278.js",
4
+ "static/chunks/dad6616f7b6f4060.js"
5
5
  ])
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":128,"timestamp":197126023285,"id":4,"parentId":1,"tags":{},"startTime":1784103218741,"traceId":"7576fb1f67c9004c"},{"name":"load-custom-routes","duration":1018,"timestamp":197126023465,"id":5,"parentId":1,"tags":{},"startTime":1784103218741,"traceId":"7576fb1f67c9004c"},{"name":"create-dist-dir","duration":134,"timestamp":197126055215,"id":6,"parentId":1,"tags":{},"startTime":1784103218773,"traceId":"7576fb1f67c9004c"},{"name":"create-pages-mapping","duration":129,"timestamp":197126150764,"id":7,"parentId":1,"tags":{},"startTime":1784103218868,"traceId":"7576fb1f67c9004c"},{"name":"collect-app-paths","duration":2341,"timestamp":197126150919,"id":8,"parentId":1,"tags":{},"startTime":1784103218868,"traceId":"7576fb1f67c9004c"},{"name":"create-app-mapping","duration":2338,"timestamp":197126153272,"id":9,"parentId":1,"tags":{},"startTime":1784103218871,"traceId":"7576fb1f67c9004c"},{"name":"public-dir-conflict-check","duration":215,"timestamp":197126155940,"id":10,"parentId":1,"tags":{},"startTime":1784103218874,"traceId":"7576fb1f67c9004c"},{"name":"generate-routes-manifest","duration":1219,"timestamp":197126156248,"id":11,"parentId":1,"tags":{},"startTime":1784103218874,"traceId":"7576fb1f67c9004c"},{"name":"verify-and-lint","duration":1650473,"timestamp":197130226122,"id":15,"parentId":1,"tags":{},"startTime":1784103222944,"traceId":"7576fb1f67c9004c"},{"name":"verify-typescript-setup","duration":2958218,"timestamp":197130224494,"id":14,"parentId":1,"tags":{},"startTime":1784103222942,"traceId":"7576fb1f67c9004c"},{"name":"check-static-error-page","duration":6887,"timestamp":197133191864,"id":18,"parentId":17,"tags":{},"startTime":1784103225909,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":4883,"timestamp":197133238786,"id":19,"parentId":17,"tags":{"page":"/_app"},"startTime":1784103225956,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":1950,"timestamp":197133241730,"id":21,"parentId":17,"tags":{"page":"/_document"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":2054,"timestamp":197133241666,"id":20,"parentId":17,"tags":{"page":"/_error"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":328220,"timestamp":197133251900,"id":65,"parentId":26,"tags":{},"startTime":1784103225969,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":338444,"timestamp":197133241897,"id":26,"parentId":17,"tags":{"page":"/api/admin-git-batch-probe-remote-branch"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":330672,"timestamp":197133252397,"id":69,"parentId":31,"tags":{},"startTime":1784103225970,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":341124,"timestamp":197133241970,"id":31,"parentId":17,"tags":{"page":"/api/cleanup-mock"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":332580,"timestamp":197133252450,"id":70,"parentId":29,"tags":{},"startTime":1784103225970,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":343096,"timestamp":197133241949,"id":29,"parentId":17,"tags":{"page":"/api/check-mock-intercept"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":334840,"timestamp":197133252896,"id":71,"parentId":32,"tags":{},"startTime":1784103225970,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":345780,"timestamp":197133241976,"id":32,"parentId":17,"tags":{"page":"/api/cleanup-project"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":337778,"timestamp":197133252184,"id":66,"parentId":27,"tags":{},"startTime":1784103225970,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":348085,"timestamp":197133241906,"id":27,"parentId":17,"tags":{"page":"/api/admin-status"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":338919,"timestamp":197133252974,"id":72,"parentId":33,"tags":{},"startTime":1784103225971,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":349928,"timestamp":197133241989,"id":33,"parentId":17,"tags":{"page":"/api/current-branch"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":351366,"timestamp":197133253008,"id":73,"parentId":34,"tags":{},"startTime":1784103225971,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":362406,"timestamp":197133241995,"id":34,"parentId":17,"tags":{"page":"/api/delete-mock-api"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":357454,"timestamp":197133253077,"id":75,"parentId":36,"tags":{},"startTime":1784103225971,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":368543,"timestamp":197133242016,"id":36,"parentId":17,"tags":{"page":"/api/gwh-git-flow/abort"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":359041,"timestamp":197133251574,"id":63,"parentId":24,"tags":{},"startTime":1784103225969,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":368759,"timestamp":197133241864,"id":24,"parentId":17,"tags":{"page":"/api/admin-git-batch-delete-branch"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":358946,"timestamp":197133253051,"id":74,"parentId":35,"tags":{},"startTime":1784103225971,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":370023,"timestamp":197133242009,"id":35,"parentId":17,"tags":{"page":"/api/get-mock-data"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":362328,"timestamp":197133253155,"id":76,"parentId":37,"tags":{},"startTime":1784103225971,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":373492,"timestamp":197133242025,"id":37,"parentId":17,"tags":{"page":"/api/gwh-git-flow"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":362918,"timestamp":197133253209,"id":77,"parentId":38,"tags":{},"startTime":1784103225971,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":374106,"timestamp":197133242031,"id":38,"parentId":17,"tags":{"page":"/api/initialize-workspace"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":365676,"timestamp":197133251043,"id":62,"parentId":23,"tags":{},"startTime":1784103225969,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":374953,"timestamp":197133241836,"id":23,"parentId":17,"tags":{"page":"/api/admin-git-batch-create-branch"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":364548,"timestamp":197133253244,"id":78,"parentId":39,"tags":{},"startTime":1784103225971,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":375795,"timestamp":197133242041,"id":39,"parentId":17,"tags":{"page":"/api/memory-status"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":367437,"timestamp":197133251767,"id":64,"parentId":25,"tags":{},"startTime":1784103225969,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":377381,"timestamp":197133241885,"id":25,"parentId":17,"tags":{"page":"/api/admin-git-batch-merge"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":366779,"timestamp":197133253272,"id":79,"parentId":40,"tags":{},"startTime":1784103225971,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":378015,"timestamp":197133242048,"id":40,"parentId":17,"tags":{"page":"/api/microapp-proxy-change-stream"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":367347,"timestamp":197133253300,"id":80,"parentId":42,"tags":{},"startTime":1784103225971,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":378795,"timestamp":197133242063,"id":42,"parentId":17,"tags":{"page":"/api/mock-file-content"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":364775,"timestamp":197133256529,"id":82,"parentId":43,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":379240,"timestamp":197133242073,"id":43,"parentId":17,"tags":{"page":"/api/mock-file"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":368281,"timestamp":197133256604,"id":85,"parentId":46,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":382812,"timestamp":197133242097,"id":46,"parentId":17,"tags":{"page":"/api/open-all-mock"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":368363,"timestamp":197133256578,"id":84,"parentId":45,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":382860,"timestamp":197133242086,"id":45,"parentId":17,"tags":{"page":"/api/mock-setting"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":368405,"timestamp":197133256567,"id":83,"parentId":44,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":382896,"timestamp":197133242080,"id":44,"parentId":17,"tags":{"page":"/api/mock-open-status"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":368742,"timestamp":197133256615,"id":86,"parentId":47,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":383264,"timestamp":197133242103,"id":47,"parentId":17,"tags":{"page":"/api/open-project"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":371669,"timestamp":197133256677,"id":90,"parentId":51,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":386231,"timestamp":197133242136,"id":51,"parentId":17,"tags":{"page":"/api/process/status"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":372974,"timestamp":197133255424,"id":81,"parentId":41,"tags":{},"startTime":1784103225973,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":386348,"timestamp":197133242057,"id":41,"parentId":17,"tags":{"page":"/api/microapp-proxy-config"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":372142,"timestamp":197133256625,"id":87,"parentId":48,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":386670,"timestamp":197133242114,"id":48,"parentId":17,"tags":{"page":"/api/process/logs"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":372168,"timestamp":197133256644,"id":88,"parentId":49,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":386697,"timestamp":197133242121,"id":49,"parentId":17,"tags":{"page":"/api/process/logs/stream"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":372703,"timestamp":197133256663,"id":89,"parentId":50,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":387292,"timestamp":197133242130,"id":50,"parentId":17,"tags":{"page":"/api/process/start"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":373473,"timestamp":197133256704,"id":92,"parentId":53,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":388047,"timestamp":197133242153,"id":53,"parentId":17,"tags":{"page":"/api/retry-project"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":374468,"timestamp":197133256750,"id":94,"parentId":55,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":389082,"timestamp":197133242169,"id":55,"parentId":17,"tags":{"page":"/api/uat-git-flow"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":374636,"timestamp":197133256711,"id":93,"parentId":54,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":389203,"timestamp":197133242162,"id":54,"parentId":17,"tags":{"page":"/api/uat-git-flow/abort"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":375020,"timestamp":197133256690,"id":91,"parentId":52,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":389579,"timestamp":197133242147,"id":52,"parentId":17,"tags":{"page":"/api/project-config"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":375228,"timestamp":197133256799,"id":95,"parentId":56,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":389867,"timestamp":197133242178,"id":56,"parentId":17,"tags":{"page":"/api/uat-git-flow/step"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":377387,"timestamp":197133256818,"id":96,"parentId":57,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":392051,"timestamp":197133242185,"id":57,"parentId":17,"tags":{"page":"/api/workspace/create"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":387058,"timestamp":197133256830,"id":97,"parentId":61,"tags":{},"startTime":1784103225974,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":401716,"timestamp":197133242236,"id":61,"parentId":17,"tags":{"page":"/favicon.ico"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":404055,"timestamp":197133252289,"id":67,"parentId":28,"tags":{},"startTime":1784103225970,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":414446,"timestamp":197133241924,"id":28,"parentId":17,"tags":{"page":"/api/all-projects-envs"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":410033,"timestamp":197133252342,"id":68,"parentId":30,"tags":{},"startTime":1784103225970,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":420441,"timestamp":197133241961,"id":30,"parentId":17,"tags":{"page":"/api/check-workspace"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":370511,"timestamp":197133292674,"id":101,"parentId":59,"tags":{},"startTime":1784103226010,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":420986,"timestamp":197133242207,"id":59,"parentId":17,"tags":{"page":"/initialization"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":408806,"timestamp":197133257249,"id":98,"parentId":22,"tags":{},"startTime":1784103225975,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":424320,"timestamp":197133241752,"id":22,"parentId":17,"tags":{"page":"/_not-found"},"startTime":1784103225959,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":375393,"timestamp":197133292654,"id":99,"parentId":60,"tags":{},"startTime":1784103226010,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":425840,"timestamp":197133242224,"id":60,"parentId":17,"tags":{"page":"/"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"is-page-static","duration":375773,"timestamp":197133292671,"id":100,"parentId":58,"tags":{},"startTime":1784103226010,"traceId":"7576fb1f67c9004c"},{"name":"check-page","duration":426258,"timestamp":197133242194,"id":58,"parentId":17,"tags":{"page":"/configuration"},"startTime":1784103225960,"traceId":"7576fb1f67c9004c"},{"name":"static-check","duration":477200,"timestamp":197133191297,"id":17,"parentId":1,"tags":{},"startTime":1784103225909,"traceId":"7576fb1f67c9004c"},{"name":"generate-required-server-files","duration":242,"timestamp":197133668714,"id":103,"parentId":1,"tags":{},"startTime":1784103226386,"traceId":"7576fb1f67c9004c"},{"name":"write-routes-manifest","duration":718,"timestamp":197133676077,"id":105,"parentId":1,"tags":{},"startTime":1784103226394,"traceId":"7576fb1f67c9004c"},{"name":"load-dotenv","duration":27,"timestamp":197133696438,"id":108,"parentId":107,"tags":{},"startTime":1784103226414,"traceId":"7576fb1f67c9004c"},{"name":"run-export-path-map","duration":1028,"timestamp":197133826798,"id":109,"parentId":107,"tags":{},"startTime":1784103226544,"traceId":"7576fb1f67c9004c"},{"name":"next-export","duration":901779,"timestamp":197133695811,"id":107,"parentId":1,"tags":{},"startTime":1784103226413,"traceId":"7576fb1f67c9004c"},{"name":"move-exported-app-not-found-","duration":3635,"timestamp":197134598771,"id":110,"parentId":106,"tags":{},"startTime":1784103227316,"traceId":"7576fb1f67c9004c"}]
2
- [{"name":"move-exported-page","duration":9579,"timestamp":197134602525,"id":111,"parentId":106,"tags":{},"startTime":1784103227320,"traceId":"7576fb1f67c9004c"},{"name":"static-generation","duration":962173,"timestamp":197133691075,"id":106,"parentId":1,"tags":{},"startTime":1784103226409,"traceId":"7576fb1f67c9004c"},{"name":"write-routes-manifest","duration":12150,"timestamp":197134653264,"id":112,"parentId":1,"tags":{},"startTime":1784103227371,"traceId":"7576fb1f67c9004c"},{"name":"node-file-trace-build","duration":4718255,"timestamp":197133670416,"id":104,"parentId":1,"tags":{"isTurbotrace":"false"},"startTime":1784103226388,"traceId":"7576fb1f67c9004c"},{"name":"apply-include-excludes","duration":417,"timestamp":197138388730,"id":113,"parentId":1,"tags":{},"startTime":1784103231106,"traceId":"7576fb1f67c9004c"},{"name":"print-tree-view","duration":2570,"timestamp":197138389783,"id":114,"parentId":1,"tags":{},"startTime":1784103231107,"traceId":"7576fb1f67c9004c"},{"name":"telemetry-flush","duration":43,"timestamp":197138392361,"id":115,"parentId":1,"tags":{},"startTime":1784103231110,"traceId":"7576fb1f67c9004c"},{"name":"next-build","duration":12986786,"timestamp":197125405621,"id":1,"tags":{"buildMode":"default","isTurboBuild":"true","version":"15.3.4","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1784103218123,"traceId":"7576fb1f67c9004c"}]
1
+ [{"name":"generate-buildid","duration":129,"timestamp":97170962208,"id":4,"parentId":1,"tags":{},"startTime":1786446976963,"traceId":"24a11ca4e4cc2a09"},{"name":"load-custom-routes","duration":912,"timestamp":97170962381,"id":5,"parentId":1,"tags":{},"startTime":1786446976963,"traceId":"24a11ca4e4cc2a09"},{"name":"create-dist-dir","duration":160,"timestamp":97171010197,"id":6,"parentId":1,"tags":{},"startTime":1786446977011,"traceId":"24a11ca4e4cc2a09"},{"name":"create-pages-mapping","duration":110,"timestamp":97171058413,"id":7,"parentId":1,"tags":{},"startTime":1786446977059,"traceId":"24a11ca4e4cc2a09"},{"name":"collect-app-paths","duration":2855,"timestamp":97171058548,"id":8,"parentId":1,"tags":{},"startTime":1786446977060,"traceId":"24a11ca4e4cc2a09"},{"name":"create-app-mapping","duration":1850,"timestamp":97171061416,"id":9,"parentId":1,"tags":{},"startTime":1786446977062,"traceId":"24a11ca4e4cc2a09"},{"name":"public-dir-conflict-check","duration":241,"timestamp":97171063587,"id":10,"parentId":1,"tags":{},"startTime":1786446977065,"traceId":"24a11ca4e4cc2a09"},{"name":"generate-routes-manifest","duration":1182,"timestamp":97171063922,"id":11,"parentId":1,"tags":{},"startTime":1786446977065,"traceId":"24a11ca4e4cc2a09"},{"name":"verify-and-lint","duration":1490293,"timestamp":97175762847,"id":15,"parentId":1,"tags":{},"startTime":1786446981764,"traceId":"24a11ca4e4cc2a09"},{"name":"verify-typescript-setup","duration":3108899,"timestamp":97175760881,"id":14,"parentId":1,"tags":{},"startTime":1786446981762,"traceId":"24a11ca4e4cc2a09"},{"name":"check-static-error-page","duration":2127,"timestamp":97178878853,"id":18,"parentId":17,"tags":{},"startTime":1786446984880,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":2721,"timestamp":97178916136,"id":19,"parentId":17,"tags":{"page":"/_app"},"startTime":1786446984917,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":2115,"timestamp":97178916753,"id":21,"parentId":17,"tags":{"page":"/_document"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":2228,"timestamp":97178916682,"id":20,"parentId":17,"tags":{"page":"/_error"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":205183,"timestamp":97178923264,"id":73,"parentId":28,"tags":{},"startTime":1786446984924,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":211662,"timestamp":97178916923,"id":28,"parentId":17,"tags":{"page":"/api/all-projects-envs"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":209573,"timestamp":97178923097,"id":71,"parentId":26,"tags":{},"startTime":1786446984924,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":215804,"timestamp":97178916899,"id":26,"parentId":17,"tags":{"page":"/api/admin-git-batch-probe-remote-branch"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":209408,"timestamp":97178923351,"id":76,"parentId":31,"tags":{},"startTime":1786446984924,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":215797,"timestamp":97178916967,"id":31,"parentId":17,"tags":{"page":"/api/batch-switch-branch"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":211844,"timestamp":97178923377,"id":77,"parentId":32,"tags":{},"startTime":1786446984924,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":218271,"timestamp":97178916987,"id":32,"parentId":17,"tags":{"page":"/api/batch-switch-submodule-branch"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":215928,"timestamp":97178923043,"id":70,"parentId":25,"tags":{},"startTime":1786446984924,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":222124,"timestamp":97178916891,"id":25,"parentId":17,"tags":{"page":"/api/admin-git-batch-merge"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":217058,"timestamp":97178923220,"id":72,"parentId":27,"tags":{},"startTime":1786446984924,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":223412,"timestamp":97178916911,"id":27,"parentId":17,"tags":{"page":"/api/admin-status"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":218703,"timestamp":97178923444,"id":80,"parentId":33,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":225176,"timestamp":97178916997,"id":33,"parentId":17,"tags":{"page":"/api/branch/switch"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":219351,"timestamp":97178923457,"id":81,"parentId":36,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":225821,"timestamp":97178917022,"id":36,"parentId":17,"tags":{"page":"/api/check-workspace"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":220442,"timestamp":97178923401,"id":78,"parentId":30,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":226916,"timestamp":97178916950,"id":30,"parentId":17,"tags":{"page":"/api/batch-list-submodule-branches"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":221105,"timestamp":97178923476,"id":83,"parentId":37,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":227570,"timestamp":97178917029,"id":37,"parentId":17,"tags":{"page":"/api/cleanup-mock"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":222171,"timestamp":97178923488,"id":84,"parentId":38,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":228632,"timestamp":97178917039,"id":38,"parentId":17,"tags":{"page":"/api/cleanup-project"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":222700,"timestamp":97178923424,"id":79,"parentId":34,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":229128,"timestamp":97178917004,"id":34,"parentId":17,"tags":{"page":"/api/branches"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":224734,"timestamp":97178923522,"id":87,"parentId":42,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":231227,"timestamp":97178917071,"id":42,"parentId":17,"tags":{"page":"/api/gwh-git-flow/abort"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":228364,"timestamp":97178923496,"id":85,"parentId":40,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":234981,"timestamp":97178917056,"id":40,"parentId":17,"tags":{"page":"/api/delete-mock-api"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":229323,"timestamp":97178922837,"id":69,"parentId":23,"tags":{},"startTime":1786446984924,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":235327,"timestamp":97178916847,"id":23,"parentId":17,"tags":{"page":"/api/admin-git-batch-create-branch"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":228704,"timestamp":97178923537,"id":88,"parentId":39,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":235308,"timestamp":97178917045,"id":39,"parentId":17,"tags":{"page":"/api/current-branch"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":231189,"timestamp":97178923330,"id":75,"parentId":29,"tags":{},"startTime":1786446984924,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":237600,"timestamp":97178916941,"id":29,"parentId":17,"tags":{"page":"/api/batch-list-branches"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":232413,"timestamp":97178923611,"id":91,"parentId":46,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":238938,"timestamp":97178917103,"id":46,"parentId":17,"tags":{"page":"/api/microapp-proxy-change-stream"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":235111,"timestamp":97178923597,"id":90,"parentId":44,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":241660,"timestamp":97178917087,"id":44,"parentId":17,"tags":{"page":"/api/initialize-workspace"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":235320,"timestamp":97178923509,"id":86,"parentId":41,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":241778,"timestamp":97178917062,"id":41,"parentId":17,"tags":{"page":"/api/get-mock-data"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":235434,"timestamp":97178923466,"id":82,"parentId":35,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":241897,"timestamp":97178917015,"id":35,"parentId":17,"tags":{"page":"/api/check-mock-intercept"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":235461,"timestamp":97178923634,"id":93,"parentId":45,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":242059,"timestamp":97178917094,"id":45,"parentId":17,"tags":{"page":"/api/memory-status"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":237355,"timestamp":97178923685,"id":96,"parentId":53,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":243893,"timestamp":97178917163,"id":53,"parentId":17,"tags":{"page":"/api/open-project"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":237408,"timestamp":97178923676,"id":95,"parentId":50,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":243953,"timestamp":97178917136,"id":50,"parentId":17,"tags":{"page":"/api/mock-open-status"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":237428,"timestamp":97178923697,"id":97,"parentId":51,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":243981,"timestamp":97178917148,"id":51,"parentId":17,"tags":{"page":"/api/mock-setting"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":238741,"timestamp":97178923572,"id":89,"parentId":43,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":245271,"timestamp":97178917078,"id":43,"parentId":17,"tags":{"page":"/api/gwh-git-flow"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":239492,"timestamp":97178923666,"id":94,"parentId":49,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":246043,"timestamp":97178917130,"id":49,"parentId":17,"tags":{"page":"/api/mock-file"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":239821,"timestamp":97178923717,"id":99,"parentId":48,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":246443,"timestamp":97178917123,"id":48,"parentId":17,"tags":{"page":"/api/mock-file-content"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":241237,"timestamp":97178923625,"id":92,"parentId":47,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":247767,"timestamp":97178917110,"id":47,"parentId":17,"tags":{"page":"/api/microapp-proxy-config"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":241149,"timestamp":97178923754,"id":101,"parentId":56,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":247723,"timestamp":97178917186,"id":56,"parentId":17,"tags":{"page":"/api/process/start"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":241233,"timestamp":97178923708,"id":98,"parentId":52,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":247792,"timestamp":97178917154,"id":52,"parentId":17,"tags":{"page":"/api/open-all-mock"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":241204,"timestamp":97178923763,"id":102,"parentId":54,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":247801,"timestamp":97178917169,"id":54,"parentId":17,"tags":{"page":"/api/process/logs"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":241260,"timestamp":97178923728,"id":100,"parentId":55,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":247819,"timestamp":97178917180,"id":55,"parentId":17,"tags":{"page":"/api/process/logs/stream"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":242753,"timestamp":97178923786,"id":103,"parentId":57,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":249355,"timestamp":97178917195,"id":57,"parentId":17,"tags":{"page":"/api/process/status"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":243123,"timestamp":97178923821,"id":106,"parentId":60,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":249789,"timestamp":97178917223,"id":60,"parentId":17,"tags":{"page":"/api/submodule-info"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":243365,"timestamp":97178923802,"id":104,"parentId":58,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":249981,"timestamp":97178917202,"id":58,"parentId":17,"tags":{"page":"/api/project-config"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":243429,"timestamp":97178923828,"id":107,"parentId":61,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":250024,"timestamp":97178917244,"id":61,"parentId":17,"tags":{"page":"/api/uat-git-flow/abort"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":244271,"timestamp":97178923310,"id":74,"parentId":24,"tags":{},"startTime":1786446984924,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":250725,"timestamp":97178916873,"id":24,"parentId":17,"tags":{"page":"/api/admin-git-batch-delete-branch"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":243935,"timestamp":97178923811,"id":105,"parentId":59,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":250558,"timestamp":97178917212,"id":59,"parentId":17,"tags":{"page":"/api/retry-project"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":244283,"timestamp":97178923881,"id":109,"parentId":64,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":250903,"timestamp":97178917268,"id":64,"parentId":17,"tags":{"page":"/api/workspace/create"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":244744,"timestamp":97178923924,"id":110,"parentId":63,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":251491,"timestamp":97178917261,"id":63,"parentId":17,"tags":{"page":"/api/uat-git-flow/step"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":245213,"timestamp":97178923869,"id":108,"parentId":62,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":251847,"timestamp":97178917251,"id":62,"parentId":17,"tags":{"page":"/api/uat-git-flow"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":251372,"timestamp":97178923938,"id":111,"parentId":68,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":258036,"timestamp":97178917318,"id":68,"parentId":17,"tags":{"page":"/favicon.ico"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":258678,"timestamp":97178923962,"id":112,"parentId":22,"tags":{},"startTime":1786446984925,"traceId":"24a11ca4e4cc2a09"}]
2
+ [{"name":"check-page","duration":265971,"timestamp":97178916768,"id":22,"parentId":17,"tags":{"page":"/_not-found"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":239664,"timestamp":97178943683,"id":113,"parentId":65,"tags":{},"startTime":1786446984945,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":266087,"timestamp":97178917274,"id":65,"parentId":17,"tags":{"page":"/configuration"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":239745,"timestamp":97178943703,"id":115,"parentId":66,"tags":{},"startTime":1786446984945,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":266163,"timestamp":97178917290,"id":66,"parentId":17,"tags":{"page":"/initialization"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"is-page-static","duration":240624,"timestamp":97178943701,"id":114,"parentId":67,"tags":{},"startTime":1786446984945,"traceId":"24a11ca4e4cc2a09"},{"name":"check-page","duration":267027,"timestamp":97178917305,"id":67,"parentId":17,"tags":{"page":"/"},"startTime":1786446984918,"traceId":"24a11ca4e4cc2a09"},{"name":"static-check","duration":305944,"timestamp":97178878409,"id":17,"parentId":1,"tags":{},"startTime":1786446984880,"traceId":"24a11ca4e4cc2a09"},{"name":"generate-required-server-files","duration":229,"timestamp":97179184554,"id":117,"parentId":1,"tags":{},"startTime":1786446985186,"traceId":"24a11ca4e4cc2a09"},{"name":"write-routes-manifest","duration":779,"timestamp":97179190887,"id":119,"parentId":1,"tags":{},"startTime":1786446985192,"traceId":"24a11ca4e4cc2a09"},{"name":"load-dotenv","duration":20,"timestamp":97179204070,"id":122,"parentId":121,"tags":{},"startTime":1786446985205,"traceId":"24a11ca4e4cc2a09"},{"name":"run-export-path-map","duration":268,"timestamp":97179304550,"id":123,"parentId":121,"tags":{},"startTime":1786446985306,"traceId":"24a11ca4e4cc2a09"},{"name":"next-export","duration":537527,"timestamp":97179203519,"id":121,"parentId":1,"tags":{},"startTime":1786446985205,"traceId":"24a11ca4e4cc2a09"},{"name":"move-exported-app-not-found-","duration":3770,"timestamp":97179742063,"id":124,"parentId":120,"tags":{},"startTime":1786446985743,"traceId":"24a11ca4e4cc2a09"},{"name":"move-exported-page","duration":8646,"timestamp":97179745925,"id":125,"parentId":120,"tags":{},"startTime":1786446985747,"traceId":"24a11ca4e4cc2a09"},{"name":"static-generation","duration":590073,"timestamp":97179199373,"id":120,"parentId":1,"tags":{},"startTime":1786446985201,"traceId":"24a11ca4e4cc2a09"},{"name":"write-routes-manifest","duration":8888,"timestamp":97179789464,"id":126,"parentId":1,"tags":{},"startTime":1786446985791,"traceId":"24a11ca4e4cc2a09"},{"name":"node-file-trace-build","duration":4071639,"timestamp":97179186583,"id":118,"parentId":1,"tags":{"isTurbotrace":"false"},"startTime":1786446985188,"traceId":"24a11ca4e4cc2a09"},{"name":"apply-include-excludes","duration":401,"timestamp":97183258299,"id":127,"parentId":1,"tags":{},"startTime":1786446989260,"traceId":"24a11ca4e4cc2a09"},{"name":"print-tree-view","duration":2566,"timestamp":97183259212,"id":128,"parentId":1,"tags":{},"startTime":1786446989260,"traceId":"24a11ca4e4cc2a09"},{"name":"telemetry-flush","duration":40,"timestamp":97183261784,"id":129,"parentId":1,"tags":{},"startTime":1786446989263,"traceId":"24a11ca4e4cc2a09"},{"name":"next-build","duration":12788332,"timestamp":97170473500,"id":1,"tags":{"buildMode":"default","isTurboBuild":"true","version":"15.3.4","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1786446976475,"traceId":"24a11ca4e4cc2a09"}]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prime-dev-cli",
3
- "version": "2.0.5",
3
+ "version": "2.0.7",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "refresh:config": "node ./bin/cli.mjs init",
@@ -1,3 +0,0 @@
1
- module.exports={45935:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},88941:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({PROJECT_CONFIG_PATH:()=>r,ProjectStatus:()=>n,WORKSPACE_CONFIG:()=>t});var s=e.i(13442),a=e.i(30331);let t={WORKSPACE_ROOT:(0,a.join)((0,s.homedir)(),"Documents","prime-workspace"),GIT_TIMEOUT:3e5,MAX_CONCURRENT_CLONES:Math.max(2,Math.min((0,s.cpus)().length,8)),MAX_RETRY_ATTEMPTS:3},r=(0,a.join)((0,s.homedir)(),".prime-projects.json");var n=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e.INCOMPLETE="incomplete",e}({})}},30331:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("path",()=>require("path"))},29549:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},83943:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},86103:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},23430:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},52670:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js"))},13442:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("os",()=>require("os"))},9892:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("fs/promises",()=>require("fs/promises"))},35692:e=>{"use strict";var{g:t,__dirname:r}=e;e.s({ProjectStatus:()=>i,getProjectsConfig:()=>n,saveProjectsConfig:()=>o});var s=e.i(9892),a=e.i(88941);async function n(){try{await (0,s.access)(a.PROJECT_CONFIG_PATH,s.constants.F_OK)}catch{return await o({}),{}}try{let e=await (0,s.readFile)(a.PROJECT_CONFIG_PATH,"utf-8");if(!e)return{};return JSON.parse(e)}catch(e){throw console.error("读取或解析项目配置文件失败:",e),Error("无法加载项目配置")}}async function o(e){let t=a.PROJECT_CONFIG_PATH+".tmp";try{await (0,s.writeFile)(t,JSON.stringify(e,null,2),"utf-8"),await (0,s.rename)(t,a.PROJECT_CONFIG_PATH)}catch(e){throw console.error("保存项目配置文件失败:",e),Error("无法保存项目配置")}}var i=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e}({})},87485:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("child_process",()=>require("child_process"))},4713:function(e){var{g:t,__dirname:r,m:s,e:a}=e;s.exports=e.x("util",()=>require("util"))},70967:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({appendLog:()=>p,cleanupOldLogs:()=>g,deleteProcessLogs:()=>m,getLogsDirSize:()=>w,getProcessLogPath:()=>i,readLastNLines:()=>f,rotateLogFile:()=>u,startLogCleanupTask:()=>N,stopLogCleanupTask:()=>E,truncateLogLine:()=>c,writeLogsSync:()=>d});var s=e.i(9892),a=e.i(30331),n=e.i(13442);let t={MAX_FILE_SIZE:5242880,MAX_LOG_FILES:3,MAX_LOG_AGE_DAYS:7,MAX_LINE_LENGTH:1e3,CLEANUP_INTERVAL:18e5};function o(){return a.default.join(n.default.homedir(),".prime-process-logs")}function i(e){return a.default.join(o(),`${e}.log`)}function c(e){return e.length<=t.MAX_LINE_LENGTH?e:e.substring(0,t.MAX_LINE_LENGTH)+"... [truncated]"}async function l(e){try{return(await s.default.stat(e)).size}catch{return 0}}async function u(e){let r=i(e),a=await l(r);if(!(a<t.MAX_FILE_SIZE)){console.log(`[日志管理] 轮转日志文件: ${e}, 大小: ${(a/1024/1024).toFixed(2)}MB`);try{let a=`${r}.${t.MAX_LOG_FILES}`;try{await s.default.unlink(a)}catch{}for(let e=t.MAX_LOG_FILES-1;e>=1;e--){let t=1===e?r:`${r}.${e}`,a=`${r}.${e+1}`;try{await s.default.rename(t,a)}catch{}}await s.default.rename(r,`${r}.1`),await s.default.writeFile(r,"","utf-8"),console.log(`[日志管理] 日志轮转完成: ${e}`)}catch(t){console.error(`[日志管理] 轮转日志文件失败: ${e}`,t)}}}async function p(e,t){await u(e);let r=i(e),a=c(t);try{await s.default.mkdir(o(),{recursive:!0}),await s.default.appendFile(r,a+"\n","utf-8")}catch(t){console.error(`[日志管理] 追加日志失败: ${e}`,t)}}async function d(e,t){await u(e);let r=i(e),a=t.map(e=>c(e));try{await s.default.mkdir(o(),{recursive:!0}),await s.default.writeFile(r,a.join("\n")+"\n","utf-8")}catch(t){console.error(`[日志管理] 写入日志失败: ${e}`,t)}}async function f(e,t=100){let r=i(e);try{return(await s.default.readFile(r,"utf-8")).split("\n").filter(e=>e.trim()).slice(-t)}catch{return[]}}async function g(){console.log("[日志管理] 开始清理旧日志...");try{let e=o();try{await s.default.access(e)}catch{console.log("[日志管理] 日志目录不存在,无需清理");return}let r=await s.default.readdir(e),n=Date.now(),i=24*t.MAX_LOG_AGE_DAYS*36e5,c=0,l=0;for(let t of r){let r=a.default.join(e,t);try{let e=await s.default.stat(r);if(n-e.mtime.getTime()>i){l+=e.size;try{await s.default.unlink(r),c++,console.log(`[日志管理] 删除过期日志: ${t}`)}catch(e){e?.code!=="ENOENT"&&console.error(`[日志管理] 删除文件失败: ${t}`,e)}}}catch(e){e?.code!=="ENOENT"&&console.error(`[日志管理] 处理文件失败: ${t}`,e)}}console.log(`[日志管理] 清理完成: 删除 ${c} 个文件, 释放 ${(l/1024/1024).toFixed(2)}MB`)}catch(e){console.error("[日志管理] 清理日志失败:",e)}}async function m(e){let r=i(e);try{await s.default.unlink(r)}catch(t){t?.code!=="ENOENT"&&console.error(`[日志管理] 删除主日志文件失败: ${e}`,t)}for(let a=1;a<=t.MAX_LOG_FILES;a++)try{await s.default.unlink(`${r}.${a}`)}catch(t){t?.code!=="ENOENT"&&console.error(`[日志管理] 删除轮转日志文件失败: ${e}.${a}`,t)}console.log(`[日志管理] 删除进程日志: ${e}`)}async function w(){try{let e=o(),t=await s.default.readdir(e),r=0,n=0;for(let o of t)try{let t=await s.default.stat(a.default.join(e,o));r+=t.size,n++}catch{}return{totalSize:r,fileCount:n}}catch{return{totalSize:0,fileCount:0}}}let r=null;function N(){r||(console.log("[日志管理] 启动定期清理任务"),g(),r=setInterval(()=>{g()},t.CLEANUP_INTERVAL))}function E(){r&&(clearInterval(r),r=null,console.log("[日志管理] 停止定期清理任务"))}process.on("SIGINT",()=>{E()}),process.on("SIGTERM",()=>{E()})}},30646:function(e){var{g:t,__dirname:r,m:s,e:a}=e},47814:e=>{"use strict";var{g:t,__dirname:r}=e;e.s({initializeProcessMonitoring:()=>u,loadAndCleanProcesses:()=>l});var s=e.i(9892),a=e.i(30331),n=e.i(13442),o=e.i(87485);function i(){return a.default.join(n.default.homedir(),".prime-processes.json")}async function c(e){try{return process.kill(e,0),!0}catch{return!1}}async function l(){try{let e=await s.default.readFile(i(),"utf-8"),t=JSON.parse(e),r=[];for(let e of t)await c(e.pid)&&r.push(e);return r.length!==t.length&&await s.default.writeFile(i(),JSON.stringify(r,null,2)),r}catch{return[]}}async function u(){console.log("初始化进程监控...");let e=await l();return console.log(`发现 ${e.length} 个正在运行的进程`),e}(0,e.i(4713).promisify)(o.exec)},91359:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({DELETE:()=>w,POST:()=>m});var s=e.i(15494),a=e.i(87485),n=e.i(30331),o=e.i(9892),i=e.i(13442),c=e.i(47814),l=e.i(35692),u=e.i(88941),p=e.i(70967);let t=new Map;async function d(e,t,r){let s=(0,p.truncateLogLine)(t);await (0,p.appendLog)(e,s),r.recentLogs.push(s),r.recentLogs.length>50&&r.recentLogs.shift()}async function f(){let e=[];t.forEach((t,r)=>{e.push({key:r,projectName:t.projectName,envName:t.envName,startTime:t.startTime,port:t.port,pid:t.process.pid})});try{await o.default.writeFile(n.default.join(i.default.homedir(),".prime-processes.json"),JSON.stringify(e,null,2))}catch(e){console.error("保存进程信息失败:",e)}}let r=!1;async function g(){if(!r){for(let e of((0,p.startLogCleanupTask)(),await (0,c.loadAndCleanProcesses)())){let r=await (0,p.readLastNLines)(e.key,50);t.set(e.key,{process:{pid:e.pid,killed:!1},projectName:e.projectName,envName:e.envName,startTime:new Date(e.startTime),port:e.port,recentLogs:r})}r=!0}}async function m(e){await g();try{let{projectName:r,envName:i,startCommand:c}=await e.json();if(!r||!i||!c)return s.NextResponse.json({success:!1,error:"缺少必要参数"},{status:400});let g=`${r}-${i}`;if(t.has(g)){let e=t.get(g);if(e&&e.process&&!e.process.killed)return s.NextResponse.json({success:!1,error:"该环境已经在运行中"},{status:400})}let m=await (0,l.getProjectsConfig)(),w=u.WORKSPACE_CONFIG.WORKSPACE_ROOT,N=n.default.join(w,r);try{await o.default.access(N)}catch{return s.NextResponse.json({success:!1,error:"项目目录不存在"},{status:404})}let[E,...x]=c.split(" "),y=(0,a.spawn)(E,x,{cwd:N,shell:!0,detached:!1,stdio:["ignore","pipe","pipe"],env:{...process.env,NODE_ENV:"development",FORCE_COLOR:"1"}}),h=m[r],L=h?.envs?.[i],T=L?.host?.split(":").pop()||"",O={process:{pid:y.pid||0,killed:!1,kill:()=>y.kill(),on:(e,t)=>{y.on(e,t)}},projectName:r,envName:i,startTime:new Date,port:T,recentLogs:[]};if(t.set(g,O),y.stdout&&y.stdout.on("data",async e=>{for(let t of e.toString().split("\n"))if(t.replace(/\x1b\[[0-9;]*m/g,"").replace(/\x1b\[[0-9]*[A-Z]/g,"").replace(/\[\d+[A-Z]/g,"").trim()){let e=`[${new Date().toISOString()}] [STDOUT] ${t}`;await d(g,e,O)}}),y.stderr&&y.stderr.on("data",async e=>{for(let t of e.toString().split("\n"))if(t.replace(/\x1b\[[0-9;]*m/g,"").replace(/\x1b\[[0-9]*[A-Z]/g,"").replace(/\[\d+[A-Z]/g,"").trim()){let e=`[${new Date().toISOString()}] [STDERR] ${t}`;await d(g,e,O)}}),await f(),y.on("exit",async e=>{console.log(`进程 ${g} 退出,退出码: ${e}`);let r=`[${new Date().toISOString()}] [SYSTEM] 进程退出,退出码: ${e}`;await (0,p.appendLog)(g,r),t.delete(g),await f()}),y.on("error",e=>{console.error(`进程 ${g} 错误:`,e),t.delete(g),f()}),await new Promise(e=>setTimeout(e,2e3)),y.killed)return t.delete(g),await f(),s.NextResponse.json({success:!1,error:"进程启动失败"},{status:500});return s.NextResponse.json({success:!0,data:{pid:y.pid,startTime:new Date,port:T}})}catch(e){return console.error("启动进程失败:",e),s.NextResponse.json({success:!1,error:e instanceof Error?e.message:"启动进程失败"},{status:500})}}async function w(e){await g();try{let{searchParams:r}=new URL(e.url),a=r.get("projectName"),n=r.get("envName");if(!a||!n)return s.NextResponse.json({success:!1,error:"缺少必要参数"},{status:400});let o=`${a}-${n}`,i=t.get(o);if(!i)return s.NextResponse.json({success:!1,error:"进程未找到"},{status:404});try{process.kill(i.process.pid,"SIGTERM"),await new Promise(e=>setTimeout(e,1e3));try{process.kill(i.process.pid,0),process.kill(i.process.pid,"SIGKILL")}catch{}}catch(e){console.error("终止进程失败:",e)}return t.delete(o),await f(),await (0,p.deleteProcessLogs)(o),s.NextResponse.json({success:!0,message:"进程已停止"})}catch(e){return console.error("停止进程失败:",e),s.NextResponse.json({success:!1,error:e instanceof Error?e.message:"停止进程失败"},{status:500})}}}},93992:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({patchFetch:()=>i,routeModule:()=>t,serverHooks:()=>l,workAsyncStorage:()=>r,workUnitAsyncStorage:()=>c});var s=e.i(45746),a=e.i(93828),n=e.i(18250),o=e.i(91359);let t=new s.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/process/start/route",pathname:"/api/process/start",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/process/start/route.ts",nextConfigOutput:"",userland:o}),{workAsyncStorage:r,workUnitAsyncStorage:c,serverHooks:l}=t;function i(){return(0,n.patchFetch)({workAsyncStorage:r,workUnitAsyncStorage:c})}}}};
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0879b2d6._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["turbopack:///[project]/packages/server/src/lib/workspace-types.ts","turbopack:///[project]/packages/server/src/lib/workspace-config.ts","turbopack:///[project]/packages/server/src/lib/log-manager.ts","turbopack:///[project]/packages/server/src/lib/process-monitor.ts","turbopack:///[project]/packages/server/src/app/api/process/start/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 { readFile, writeFile, access, constants, rename } from 'fs/promises';\nimport type { ProjectsConfig } from './workspace-types';\nimport { PROJECT_CONFIG_PATH } from './workspace-types';\n\n/**\n * 读取并解析项目配置文件\n * @returns {Promise<ProjectsConfig>} 项目配置对象\n */\nexport async function getProjectsConfig(): Promise<ProjectsConfig> {\n try {\n await access(PROJECT_CONFIG_PATH, constants.F_OK);\n } catch {\n // 文件不存在,创建并写入空对象\n await saveProjectsConfig({});\n return {};\n }\n\n try {\n const configContent = await readFile(PROJECT_CONFIG_PATH, 'utf-8');\n // 如果文件为空,返回空对象\n if (!configContent) {\n return {};\n }\n return JSON.parse(configContent);\n } catch (error) {\n console.error('读取或解析项目配置文件失败:', error);\n // 在出错时返回空对象或抛出错误,这里选择抛出以通知调用者\n throw new Error('无法加载项目配置');\n }\n}\n\n/**\n * 将项目配置写入文件(原子操作)\n * @param {ProjectsConfig} config - 要保存的配置对象\n */\nexport async function saveProjectsConfig(config: ProjectsConfig): Promise<void> {\n const tempConfigPath = PROJECT_CONFIG_PATH + '.tmp';\n try {\n await writeFile(tempConfigPath, JSON.stringify(config, null, 2), 'utf-8');\n await rename(tempConfigPath, PROJECT_CONFIG_PATH);\n } catch (error) {\n console.error('保存项目配置文件失败:', error);\n throw new Error('无法保存项目配置');\n }\n}\n\n/**\n * 项目状态枚举\n */\nexport enum ProjectStatus {\n PENDING = 'pending',\n EXISTING = 'existing',\n CLONING = 'cloning',\n SUCCESS = 'success',\n FAILED = 'failed',\n RETRYING = 'retrying',\n}\n\n/**\n * 项目进度信息接口\n */\nexport interface ProjectProgress {\n projectName: string;\n status: ProjectStatus;\n progress: number; // 0-100\n message: string;\n error?: string;\n startTime?: number;\n endTime?: number;\n}\n\n/**\n * 初始化结果接口\n */\nexport interface InitializationResult {\n success: boolean;\n totalProjects: number;\n successCount: number;\n failedCount: number;\n failedProjects: string[];\n workspacePath: string;\n duration: number;\n}\n\n/**\n * Git 操作配置接口\n */\nexport interface GitOperationConfig {\n repoUrl: string;\n projectName?: string;\n targetDir: string;\n timeout: number;\n onProgress?: (progress: number, message: string) => void;\n onError?: (error: string) => void;\n}\n","/**\n * 日志管理器 - 处理日志文件的轮转、清理和大小限制\n */\nimport fs from 'fs/promises';\nimport path from 'path';\nimport os from 'os';\n\n// 日志配置\nconst LOG_CONFIG = {\n MAX_FILE_SIZE: 5 * 1024 * 1024, // 5MB\n MAX_LOG_FILES: 3, // 保留最多 3 个日志文件\n MAX_LOG_AGE_DAYS: 7, // 日志保留 7 天\n MAX_LINE_LENGTH: 1000, // 单行最大长度\n CLEANUP_INTERVAL: 30 * 60 * 1000, // 30 分钟清理一次\n};\n\n// 获取日志目录\nfunction getLogDir(): string {\n return path.join(os.homedir(), '.prime-process-logs');\n}\n\n// 获取进程日志文件路径\nexport function getProcessLogPath(processKey: string): string {\n return path.join(getLogDir(), `${processKey}.log`);\n}\n\n// 截断过长的日志行\nexport function truncateLogLine(line: string): string {\n if (line.length <= LOG_CONFIG.MAX_LINE_LENGTH) {\n return line;\n }\n return line.substring(0, LOG_CONFIG.MAX_LINE_LENGTH) + '... [truncated]';\n}\n\n/**\n * 获取文件大小\n */\nasync function getFileSize(filePath: string): Promise<number> {\n try {\n const stats = await fs.stat(filePath);\n return stats.size;\n } catch {\n return 0;\n }\n}\n\n/**\n * 轮转日志文件\n * 当日志文件超过大小限制时,将其重命名并创建新文件\n */\nexport async function rotateLogFile(processKey: string): Promise<void> {\n const logPath = getProcessLogPath(processKey);\n const fileSize = await getFileSize(logPath);\n\n // 如果文件大小未超过限制,不需要轮转\n if (fileSize < LOG_CONFIG.MAX_FILE_SIZE) {\n return;\n }\n\n console.log(`[日志管理] 轮转日志文件: ${processKey}, 大小: ${(fileSize / 1024 / 1024).toFixed(2)}MB`);\n\n try {\n // 删除最旧的日志文件\n const oldestLogPath = `${logPath}.${LOG_CONFIG.MAX_LOG_FILES}`;\n try {\n await fs.unlink(oldestLogPath);\n } catch {\n // 文件不存在,忽略\n }\n\n // 轮转现有的日志文件\n for (let i = LOG_CONFIG.MAX_LOG_FILES - 1; i >= 1; i--) {\n const oldPath = i === 1 ? logPath : `${logPath}.${i}`;\n const newPath = `${logPath}.${i + 1}`;\n\n try {\n await fs.rename(oldPath, newPath);\n } catch {\n // 文件不存在,继续\n }\n }\n\n // 重命名当前日志文件\n await fs.rename(logPath, `${logPath}.1`);\n\n // 创建新的空日志文件\n await fs.writeFile(logPath, '', 'utf-8');\n\n console.log(`[日志管理] 日志轮转完成: ${processKey}`);\n } catch (error) {\n console.error(`[日志管理] 轮转日志文件失败: ${processKey}`, error);\n }\n}\n\n/**\n * 追加日志到文件\n * 如果文件过大,先进行轮转\n */\nexport async function appendLog(processKey: string, logLine: string): Promise<void> {\n // 先检查是否需要轮转\n await rotateLogFile(processKey);\n\n const logPath = getProcessLogPath(processKey);\n const truncatedLine = truncateLogLine(logLine);\n\n try {\n // 确保日志目录存在\n await fs.mkdir(getLogDir(), { recursive: true });\n\n // 追加日志\n await fs.appendFile(logPath, truncatedLine + '\\n', 'utf-8');\n } catch (error) {\n console.error(`[日志管理] 追加日志失败: ${processKey}`, error);\n }\n}\n\n/**\n * 批量写入日志(用于初始写入或同步)\n */\nexport async function writeLogsSync(processKey: string, logs: string[]): Promise<void> {\n await rotateLogFile(processKey);\n\n const logPath = getProcessLogPath(processKey);\n const truncatedLogs = logs.map(line => truncateLogLine(line));\n\n try {\n await fs.mkdir(getLogDir(), { recursive: true });\n await fs.writeFile(logPath, truncatedLogs.join('\\n') + '\\n', 'utf-8');\n } catch (error) {\n console.error(`[日志管理] 写入日志失败: ${processKey}`, error);\n }\n}\n\n/**\n * 读取日志文件的最后 N 行\n */\nexport async function readLastNLines(processKey: string, n: number = 100): Promise<string[]> {\n const logPath = getProcessLogPath(processKey);\n\n try {\n const content = await fs.readFile(logPath, 'utf-8');\n const lines = content.split('\\n').filter(line => line.trim());\n return lines.slice(-n);\n } catch {\n return [];\n }\n}\n\n/**\n * 清理旧的日志文件\n * 删除超过保留期限的日志文件\n */\nexport async function cleanupOldLogs(): Promise<void> {\n console.log('[日志管理] 开始清理旧日志...');\n\n try {\n const logDir = getLogDir();\n\n // 确保目录存在\n try {\n await fs.access(logDir);\n } catch {\n console.log('[日志管理] 日志目录不存在,无需清理');\n return;\n }\n\n const files = await fs.readdir(logDir);\n const now = Date.now();\n const maxAge = LOG_CONFIG.MAX_LOG_AGE_DAYS * 24 * 60 * 60 * 1000;\n\n let deletedCount = 0;\n let freedSpace = 0;\n\n for (const file of files) {\n const filePath = path.join(logDir, file);\n\n try {\n const stats = await fs.stat(filePath);\n\n // 删除超过保留期的文件\n if (now - stats.mtime.getTime() > maxAge) {\n freedSpace += stats.size;\n try {\n await fs.unlink(filePath);\n deletedCount++;\n console.log(`[日志管理] 删除过期日志: ${file}`);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (unlinkError: any) {\n // 如果文件已经不存在,忽略错误\n if (unlinkError?.code !== 'ENOENT') {\n console.error(`[日志管理] 删除文件失败: ${file}`, unlinkError);\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n // 如果文件不存在,跳过(可能已被删除)\n if (error?.code !== 'ENOENT') {\n console.error(`[日志管理] 处理文件失败: ${file}`, error);\n }\n }\n }\n\n console.log(`[日志管理] 清理完成: 删除 ${deletedCount} 个文件, 释放 ${(freedSpace / 1024 / 1024).toFixed(2)}MB`);\n } catch (error) {\n console.error('[日志管理] 清理日志失败:', error);\n }\n}\n\n/**\n * 删除指定进程的所有日志文件\n */\nexport async function deleteProcessLogs(processKey: string): Promise<void> {\n const logPath = getProcessLogPath(processKey);\n\n try {\n // 删除主日志文件\n await fs.unlink(logPath);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n // 文件不存在,忽略\n if (error?.code !== 'ENOENT') {\n console.error(`[日志管理] 删除主日志文件失败: ${processKey}`, error);\n }\n }\n\n // 删除轮转的日志文件\n for (let i = 1; i <= LOG_CONFIG.MAX_LOG_FILES; i++) {\n try {\n await fs.unlink(`${logPath}.${i}`);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n // 文件不存在,忽略\n if (error?.code !== 'ENOENT') {\n console.error(`[日志管理] 删除轮转日志文件失败: ${processKey}.${i}`, error);\n }\n }\n }\n\n console.log(`[日志管理] 删除进程日志: ${processKey}`);\n}\n\n/**\n * 获取日志目录的总大小\n */\nexport async function getLogsDirSize(): Promise<{ totalSize: number; fileCount: number }> {\n try {\n const logDir = getLogDir();\n const files = await fs.readdir(logDir);\n\n let totalSize = 0;\n let fileCount = 0;\n\n for (const file of files) {\n try {\n const stats = await fs.stat(path.join(logDir, file));\n totalSize += stats.size;\n fileCount++;\n } catch {\n // 忽略错误\n }\n }\n\n return { totalSize, fileCount };\n } catch {\n return { totalSize: 0, fileCount: 0 };\n }\n}\n\n// 定期清理任务\nlet cleanupTimer: NodeJS.Timeout | null = null;\n\n/**\n * 启动定期清理任务\n */\nexport function startLogCleanupTask(): void {\n if (cleanupTimer) {\n return; // 已经启动\n }\n\n console.log('[日志管理] 启动定期清理任务');\n\n // 立即执行一次\n cleanupOldLogs();\n\n // 设置定期清理\n cleanupTimer = setInterval(() => {\n cleanupOldLogs();\n }, LOG_CONFIG.CLEANUP_INTERVAL);\n}\n\n/**\n * 停止定期清理任务\n */\nexport function stopLogCleanupTask(): void {\n if (cleanupTimer) {\n clearInterval(cleanupTimer);\n cleanupTimer = null;\n console.log('[日志管理] 停止定期清理任务');\n }\n}\n\n// 进程退出时停止清理任务\nprocess.on('SIGINT', () => {\n stopLogCleanupTask();\n});\n\nprocess.on('SIGTERM', () => {\n stopLogCleanupTask();\n});\n\n","import fs from 'fs/promises';\nimport path from 'path';\nimport os from 'os';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\n// 进程信息接口\ninterface ProcessInfo {\n key: string;\n projectName: string;\n envName: string;\n pid: number;\n startTime: Date;\n port: string;\n}\n\n// 获取进程存储文件路径\nfunction getProcessStorePath() {\n return path.join(os.homedir(), '.prime-processes.json');\n}\n\n// 检查进程是否仍在运行\nasync function isProcessRunning(pid: number): Promise<boolean> {\n try {\n if (process.platform !== 'win32') {\n process.kill(pid, 0);\n return true;\n } else {\n const { stdout } = await execAsync(`tasklist /FI \"PID eq ${pid}\"`);\n return stdout.includes(pid.toString());\n }\n } catch {\n return false;\n }\n}\n\n// 加载并清理过期的进程信息\nexport async function loadAndCleanProcesses(): Promise<ProcessInfo[]> {\n try {\n const processInfoContent = await fs.readFile(getProcessStorePath(), 'utf-8');\n const processInfoList: ProcessInfo[] = JSON.parse(processInfoContent);\n \n // 过滤出仍在运行的进程\n const runningProcesses: ProcessInfo[] = [];\n \n for (const processInfo of processInfoList) {\n const isRunning = await isProcessRunning(processInfo.pid);\n if (isRunning) {\n runningProcesses.push(processInfo);\n }\n }\n \n // 如果有进程被清理,更新文件\n if (runningProcesses.length !== processInfoList.length) {\n await fs.writeFile(getProcessStorePath(), JSON.stringify(runningProcesses, null, 2));\n }\n \n return runningProcesses;\n } catch {\n // 文件不存在或解析错误,返回空数组\n return [];\n }\n}\n\n// 初始化进程监控 - 在应用启动时调用\nexport async function initializeProcessMonitoring() {\n console.log('初始化进程监控...');\n const processes = await loadAndCleanProcesses();\n console.log(`发现 ${processes.length} 个正在运行的进程`);\n return processes;\n}","import { NextRequest, NextResponse } from 'next/server';\nimport { spawn } from 'child_process';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport os from 'os';\nimport { loadAndCleanProcesses } from '@/lib/process-monitor';\nimport { getProjectsConfig } from '@/lib/workspace-config';\nimport { WORKSPACE_CONFIG } from '@/lib/workspace-types';\nimport { \n appendLog, \n readLastNLines, \n deleteProcessLogs,\n startLogCleanupTask,\n truncateLogLine \n} from '@/lib/log-manager';\n\n// 存储进程信息的Map\ninterface ProcessData {\n process: {\n pid: number;\n killed: boolean;\n kill?: () => void;\n on?: (event: string, callback: (code?: number) => void) => void;\n };\n projectName: string;\n envName: string;\n startTime: Date;\n port: string;\n recentLogs: string[]; // 只保留最近的少量日志在内存中\n}\n\nconst processes = new Map<string, ProcessData>();\nconst MAX_MEMORY_LOG_LINES = 50; // 内存中只保留最近 50 行\n\n// 获取进程存储文件路径\nfunction getProcessStorePath() {\n return path.join(os.homedir(), '.prime-processes.json');\n}\n\n// 追加日志到文件和内存\nasync function logToFileAndMemory(processKey: string, logLine: string, processData: ProcessData) {\n // 截断过长的日志行\n const truncated = truncateLogLine(logLine);\n \n // 追加到文件(使用日志管理器,自动处理轮转)\n await appendLog(processKey, truncated);\n \n // 只在内存中保留最近的几条\n processData.recentLogs.push(truncated);\n if (processData.recentLogs.length > MAX_MEMORY_LOG_LINES) {\n processData.recentLogs.shift();\n }\n}\n\n// 保存进程信息到文件\nasync function saveProcessInfo() {\n const processInfo: {\n key: string;\n projectName: string;\n envName: string;\n startTime: Date;\n port: string;\n pid: number;\n }[] = [];\n processes.forEach((value, key) => {\n processInfo.push({\n key,\n projectName: value.projectName,\n envName: value.envName,\n startTime: value.startTime,\n port: value.port,\n pid: value.process.pid\n });\n });\n \n try {\n await fs.writeFile(getProcessStorePath(), JSON.stringify(processInfo, null, 2));\n } catch (error) {\n console.error('保存进程信息失败:', error);\n }\n}\n\n// 在启动时加载现有进程信息\nlet processesInitialized = false;\nasync function ensureProcessesLoaded() {\n if (!processesInitialized) {\n // 启动日志清理任务\n startLogCleanupTask();\n \n const existingProcesses = await loadAndCleanProcesses();\n for (const processInfo of existingProcesses) {\n // 恢复进程信息到内存,但不恢复实际的进程对象\n // 因为我们只需要知道进程存在,状态查询会检查实际的PID\n // 只加载最近的日志到内存\n const recentLogs = await readLastNLines(processInfo.key, MAX_MEMORY_LOG_LINES);\n \n processes.set(processInfo.key, {\n process: { pid: processInfo.pid, killed: false },\n projectName: processInfo.projectName,\n envName: processInfo.envName,\n startTime: new Date(processInfo.startTime),\n port: processInfo.port,\n recentLogs\n });\n }\n processesInitialized = true;\n }\n}\n\nexport async function POST(request: NextRequest) {\n await ensureProcessesLoaded();\n try {\n const { projectName, envName, startCommand } = await request.json();\n\n if (!projectName || !envName || !startCommand) {\n return NextResponse.json({\n success: false,\n error: '缺少必要参数'\n }, { status: 400 });\n }\n\n // 生成进程的唯一标识\n const processKey = `${projectName}-${envName}`;\n\n // 检查进程是否已经在运行\n if (processes.has(processKey)) {\n const existingProcess = processes.get(processKey);\n if (existingProcess && existingProcess.process && !existingProcess.process.killed) {\n return NextResponse.json({\n success: false,\n error: '该环境已经在运行中'\n }, { status: 400 });\n }\n }\n\n // 读取配置文件获取工作区路径\n const config = await getProjectsConfig();\n \n // 使用工作区常量路径\n const workspacePath = WORKSPACE_CONFIG.WORKSPACE_ROOT;\n \n // 构建项目路径\n const projectPath = path.join(workspacePath, projectName);\n\n // 检查项目目录是否存在\n try {\n await fs.access(projectPath);\n } catch {\n return NextResponse.json({\n success: false,\n error: '项目目录不存在'\n }, { status: 404 });\n }\n\n // 解析命令\n const [command, ...args] = startCommand.split(' ');\n\n // 启动进程 - 不传递 env 参数,让子进程继承父进程环境变量\n // 但通过环境变量覆盖确保开发模式\n const childProcess = spawn(command, args, {\n cwd: projectPath,\n shell: true,\n detached: false,\n stdio: ['ignore', 'pipe', 'pipe'],\n env: {\n ...process.env,\n NODE_ENV: 'development', // 强制设置为开发模式\n FORCE_COLOR: '1', // 保留颜色输出\n }\n });\n\n // 获取项目配置中的端口信息\n const projectConfig = config[projectName];\n const envConfig = projectConfig?.envs?.[envName];\n const port = envConfig?.host?.split(':').pop() || '';\n \n // 存储进程信息\n const processData: ProcessData = {\n process: {\n pid: childProcess.pid || 0,\n killed: false,\n kill: () => childProcess.kill(),\n on: (event: string, callback: (code?: number) => void) => {\n childProcess.on(event, callback);\n }\n },\n projectName,\n envName,\n startTime: new Date(),\n port,\n recentLogs: [] // 只在内存中保留最近的日志\n };\n \n processes.set(processKey, processData);\n \n // 捕获标准输出\n if (childProcess.stdout) {\n childProcess.stdout.on('data', async (data: Buffer) => {\n const text = data.toString();\n const lines = text.split('\\n');\n \n for (const line of lines) {\n // 过滤掉只包含控制序列的行\n const cleanedLine = line\n .replace(/\\x1b\\[[0-9;]*m/g, '') // 移除颜色代码\n .replace(/\\x1b\\[[0-9]*[A-Z]/g, '') // 移除光标控制\n .replace(/\\[\\d+[A-Z]/g, '') // 移除其他控制序列\n .trim();\n \n // 如果清理后的行不为空,则记录\n if (cleanedLine) {\n const logEntry = `[${new Date().toISOString()}] [STDOUT] ${line}`;\n await logToFileAndMemory(processKey, logEntry, processData);\n }\n }\n });\n }\n \n // 捕获标准错误\n if (childProcess.stderr) {\n childProcess.stderr.on('data', async (data: Buffer) => {\n const text = data.toString();\n const lines = text.split('\\n');\n \n for (const line of lines) {\n // 过滤掉只包含控制序列的行\n const cleanedLine = line\n .replace(/\\x1b\\[[0-9;]*m/g, '')\n .replace(/\\x1b\\[[0-9]*[A-Z]/g, '')\n .replace(/\\[\\d+[A-Z]/g, '')\n .trim();\n \n if (cleanedLine) {\n const logEntry = `[${new Date().toISOString()}] [STDERR] ${line}`;\n await logToFileAndMemory(processKey, logEntry, processData);\n }\n }\n });\n }\n\n // 保存进程信息到文件\n await saveProcessInfo();\n \n // 监听进程退出\n childProcess.on('exit', async (code) => {\n console.log(`进程 ${processKey} 退出,退出码: ${code}`);\n const logEntry = `[${new Date().toISOString()}] [SYSTEM] 进程退出,退出码: ${code}`;\n await appendLog(processKey, logEntry);\n \n processes.delete(processKey);\n await saveProcessInfo();\n });\n\n childProcess.on('error', (error) => {\n console.error(`进程 ${processKey} 错误:`, error);\n processes.delete(processKey);\n saveProcessInfo();\n });\n\n // 等待一小段时间确保进程启动\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n // 检查进程是否仍在运行\n if (childProcess.killed) {\n processes.delete(processKey);\n await saveProcessInfo();\n return NextResponse.json({\n success: false,\n error: '进程启动失败'\n }, { status: 500 });\n }\n\n return NextResponse.json({\n success: true,\n data: {\n pid: childProcess.pid,\n startTime: new Date(),\n port\n }\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\n// 停止进程\nexport async function DELETE(request: NextRequest) {\n await ensureProcessesLoaded();\n try {\n const { searchParams } = new URL(request.url);\n const projectName = searchParams.get('projectName');\n const envName = searchParams.get('envName');\n\n if (!projectName || !envName) {\n return NextResponse.json({\n success: false,\n error: '缺少必要参数'\n }, { status: 400 });\n }\n\n const processKey = `${projectName}-${envName}`;\n const processInfo = processes.get(processKey);\n\n if (!processInfo) {\n return NextResponse.json({\n success: false,\n error: '进程未找到'\n }, { status: 404 });\n }\n\n try {\n // 尝试优雅地终止进程\n process.kill(processInfo.process.pid, 'SIGTERM');\n \n // 给进程一些时间来清理\n await new Promise(resolve => setTimeout(resolve, 1000));\n \n // 如果进程仍在运行,强制终止\n try {\n process.kill(processInfo.process.pid, 0); // 检查进程是否存在\n process.kill(processInfo.process.pid, 'SIGKILL');\n } catch {\n // 进程已经退出\n }\n } catch (error) {\n console.error('终止进程失败:', error);\n }\n\n processes.delete(processKey);\n await saveProcessInfo();\n \n // 清理日志文件(使用日志管理器)\n await deleteProcessLogs(processKey);\n\n return NextResponse.json({\n success: true,\n message: '进程已停止'\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}","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":[5]}
@@ -1,3 +0,0 @@
1
- module.exports={45935:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},88941:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({PROJECT_CONFIG_PATH:()=>r,ProjectStatus:()=>i,WORKSPACE_CONFIG:()=>t});var s=e.i(13442),n=e.i(30331);let t={WORKSPACE_ROOT:(0,n.join)((0,s.homedir)(),"Documents","prime-workspace"),GIT_TIMEOUT:3e5,MAX_CONCURRENT_CLONES:Math.max(2,Math.min((0,s.cpus)().length,8)),MAX_RETRY_ATTEMPTS:3},r=(0,n.join)((0,s.homedir)(),".prime-projects.json");var i=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e.INCOMPLETE="incomplete",e}({})}},30331:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("path",()=>require("path"))},29549:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},83943:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},86103:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},23430:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},52670:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js"))},13442:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("os",()=>require("os"))},9892:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("fs/promises",()=>require("fs/promises"))},35692:e=>{"use strict";var{g:t,__dirname:r}=e;e.s({ProjectStatus:()=>o,getProjectsConfig:()=>i,saveProjectsConfig:()=>a});var s=e.i(9892),n=e.i(88941);async function i(){try{await (0,s.access)(n.PROJECT_CONFIG_PATH,s.constants.F_OK)}catch{return await a({}),{}}try{let e=await (0,s.readFile)(n.PROJECT_CONFIG_PATH,"utf-8");if(!e)return{};return JSON.parse(e)}catch(e){throw console.error("读取或解析项目配置文件失败:",e),Error("无法加载项目配置")}}async function a(e){let t=n.PROJECT_CONFIG_PATH+".tmp";try{await (0,s.writeFile)(t,JSON.stringify(e,null,2),"utf-8"),await (0,s.rename)(t,n.PROJECT_CONFIG_PATH)}catch(e){throw console.error("保存项目配置文件失败:",e),Error("无法保存项目配置")}}var o=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e}({})},87485:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("child_process",()=>require("child_process"))},4713:function(e){var{g:t,__dirname:r,m:s,e:n}=e;s.exports=e.x("util",()=>require("util"))},56305:function(e){var{g:t,__dirname:r,m:s,e:n}=e},1411:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({GET:()=>x});var s=e.i(15494),n=e.i(30331),i=e.i(9892),a=e.i(13442),o=e.i(87485),c=e.i(4713),p=e.i(35692);let t=(0,c.promisify)(o.exec);function u(){return n.default.join(a.default.homedir(),".prime-processes.json")}async function l(e){try{return process.kill(e,0),!0}catch{return!1}}async function d(e){try{let r=parseInt(e);if(isNaN(r))return!1;try{let{stdout:r}=await t(`lsof -i :${e} -t`);return r.trim().length>0}catch{return!1}}catch{return!1}}async function x(e){try{let{searchParams:t}=new URL(e.url),r=t.get("projectName"),n=t.get("envName");if(r&&n){let e=`${r}-${n}`;try{let t=await i.default.readFile(u(),"utf-8"),r=JSON.parse(t).find(t=>t.key===e);if(r){let e=await l(r.pid),t=!!r.port&&await d(r.port);return s.NextResponse.json({success:!0,data:{running:e,pid:r.pid,startTime:r.startTime,port:r.port,portInUse:t}})}}catch{}try{let e=(await (0,p.getProjectsConfig)())[r];if(e&&e.envs&&e.envs[n]){let t=e.envs[n].host?.split(":").pop();if(t){let e=await d(t);return s.NextResponse.json({success:!0,data:{running:e,portInUse:e,port:t}})}}}catch{}return s.NextResponse.json({success:!0,data:{running:!1}})}let a=[];try{let e=await i.default.readFile(u(),"utf-8");for(let t of JSON.parse(e)){let e=await l(t.pid),r=!!t.port&&await d(t.port);a.push({key:t.key,projectName:t.projectName,envName:t.envName,running:e,pid:t.pid,startTime:t.startTime,port:t.port,portInUse:r})}}catch{}return s.NextResponse.json({success:!0,data:a})}catch(e){return console.error("获取进程状态失败:",e),s.NextResponse.json({success:!1,error:e instanceof Error?e.message:"获取进程状态失败"},{status:500})}}}},81656:e=>{"use strict";var{g:t,__dirname:r}=e;{e.s({patchFetch:()=>o,routeModule:()=>t,serverHooks:()=>p,workAsyncStorage:()=>r,workUnitAsyncStorage:()=>c});var s=e.i(45746),n=e.i(93828),i=e.i(18250),a=e.i(1411);let t=new s.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/process/status/route",pathname:"/api/process/status",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/process/status/route.ts",nextConfigOutput:"",userland:a}),{workAsyncStorage:r,workUnitAsyncStorage:c,serverHooks:p}=t;function o(){return(0,i.patchFetch)({workAsyncStorage:r,workUnitAsyncStorage:c})}}}};
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__2a78acef._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["turbopack:///[project]/packages/server/src/lib/workspace-types.ts","turbopack:///[project]/packages/server/src/lib/workspace-config.ts","turbopack:///[project]/packages/server/src/app/api/process/status/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 { readFile, writeFile, access, constants, rename } from 'fs/promises';\nimport type { ProjectsConfig } from './workspace-types';\nimport { PROJECT_CONFIG_PATH } from './workspace-types';\n\n/**\n * 读取并解析项目配置文件\n * @returns {Promise<ProjectsConfig>} 项目配置对象\n */\nexport async function getProjectsConfig(): Promise<ProjectsConfig> {\n try {\n await access(PROJECT_CONFIG_PATH, constants.F_OK);\n } catch {\n // 文件不存在,创建并写入空对象\n await saveProjectsConfig({});\n return {};\n }\n\n try {\n const configContent = await readFile(PROJECT_CONFIG_PATH, 'utf-8');\n // 如果文件为空,返回空对象\n if (!configContent) {\n return {};\n }\n return JSON.parse(configContent);\n } catch (error) {\n console.error('读取或解析项目配置文件失败:', error);\n // 在出错时返回空对象或抛出错误,这里选择抛出以通知调用者\n throw new Error('无法加载项目配置');\n }\n}\n\n/**\n * 将项目配置写入文件(原子操作)\n * @param {ProjectsConfig} config - 要保存的配置对象\n */\nexport async function saveProjectsConfig(config: ProjectsConfig): Promise<void> {\n const tempConfigPath = PROJECT_CONFIG_PATH + '.tmp';\n try {\n await writeFile(tempConfigPath, JSON.stringify(config, null, 2), 'utf-8');\n await rename(tempConfigPath, PROJECT_CONFIG_PATH);\n } catch (error) {\n console.error('保存项目配置文件失败:', error);\n throw new Error('无法保存项目配置');\n }\n}\n\n/**\n * 项目状态枚举\n */\nexport enum ProjectStatus {\n PENDING = 'pending',\n EXISTING = 'existing',\n CLONING = 'cloning',\n SUCCESS = 'success',\n FAILED = 'failed',\n RETRYING = 'retrying',\n}\n\n/**\n * 项目进度信息接口\n */\nexport interface ProjectProgress {\n projectName: string;\n status: ProjectStatus;\n progress: number; // 0-100\n message: string;\n error?: string;\n startTime?: number;\n endTime?: number;\n}\n\n/**\n * 初始化结果接口\n */\nexport interface InitializationResult {\n success: boolean;\n totalProjects: number;\n successCount: number;\n failedCount: number;\n failedProjects: string[];\n workspacePath: string;\n duration: number;\n}\n\n/**\n * Git 操作配置接口\n */\nexport interface GitOperationConfig {\n repoUrl: string;\n projectName?: string;\n targetDir: string;\n timeout: number;\n onProgress?: (progress: number, message: string) => void;\n onError?: (error: string) => void;\n}\n","import { NextRequest, NextResponse } from 'next/server';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport os from 'os';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { getProjectsConfig } from '@/lib/workspace-config';\n\nconst execAsync = promisify(exec);\n\n// 获取进程存储文件路径\nfunction getProcessStorePath() {\n return path.join(os.homedir(), '.prime-processes.json');\n}\n\n// 检查进程是否仍在运行\nasync function isProcessRunning(pid: number): Promise<boolean> {\n try {\n // 在Unix系统上,使用kill -0来检查进程是否存在\n if (process.platform !== 'win32') {\n process.kill(pid, 0);\n return true;\n } else {\n // 在Windows上使用tasklist命令\n const { stdout } = await execAsync(`tasklist /FI \"PID eq ${pid}\"`);\n return stdout.includes(pid.toString());\n }\n } catch {\n return false;\n }\n}\n\n// 检查端口是否被占用\nasync function isPortInUse(port: string): Promise<boolean> {\n try {\n const portNum = parseInt(port);\n if (isNaN(portNum)) return false;\n\n if (process.platform !== 'win32') {\n // Unix系统使用lsof\n try {\n const { stdout } = await execAsync(`lsof -i :${port} -t`);\n return stdout.trim().length > 0;\n } catch {\n return false;\n }\n } else {\n // Windows系统使用netstat\n const { stdout } = await execAsync(`netstat -ano | findstr :${port}`);\n return stdout.includes(`:${port}`);\n }\n } catch {\n return false;\n }\n}\n\nexport async function GET(request: NextRequest) {\n try {\n const { searchParams } = new URL(request.url);\n const projectName = searchParams.get('projectName');\n const envName = searchParams.get('envName');\n\n // 如果提供了项目名和环境名,返回特定进程状态\n if (projectName && envName) {\n const processKey = `${projectName}-${envName}`;\n \n // 尝试从存储的进程信息中读取\n try {\n const processInfoContent = await fs.readFile(getProcessStorePath(), 'utf-8');\n const processInfoList = JSON.parse(processInfoContent);\n const processInfo = processInfoList.find((p: { key: string; pid: number; port: string; startTime: string }) => p.key === processKey);\n\n if (processInfo) {\n // 检查进程是否仍在运行\n const isRunning = await isProcessRunning(processInfo.pid);\n const portInUse = processInfo.port ? await isPortInUse(processInfo.port) : false;\n\n return NextResponse.json({\n success: true,\n data: {\n running: isRunning,\n pid: processInfo.pid,\n startTime: processInfo.startTime,\n port: processInfo.port,\n portInUse\n }\n });\n }\n } catch {\n // 文件不存在或读取失败\n }\n\n // 如果没有找到进程信息,检查端口是否被占用\n // 读取项目配置获取端口信息\n try {\n const config = await getProjectsConfig();\n const project = config[projectName];\n if (project && project.envs && project.envs[envName]) {\n const port = project.envs[envName].host?.split(':').pop();\n if (port) {\n const portInUse = await isPortInUse(port);\n return NextResponse.json({\n success: true,\n data: {\n running: portInUse,\n portInUse,\n port\n }\n });\n }\n }\n } catch {\n // 配置文件读取失败\n }\n\n return NextResponse.json({\n success: true,\n data: {\n running: false\n }\n });\n }\n\n // 如果没有提供参数,返回所有进程状态\n const allProcesses: {\n key: string;\n projectName: string;\n envName: string;\n running: boolean;\n pid: number;\n startTime: string;\n port: string;\n portInUse: boolean;\n }[] = [];\n \n try {\n const processInfoContent = await fs.readFile(getProcessStorePath(), 'utf-8');\n const processInfoList = JSON.parse(processInfoContent);\n\n for (const processInfo of processInfoList) {\n const isRunning = await isProcessRunning(processInfo.pid);\n const portInUse = processInfo.port ? await isPortInUse(processInfo.port) : false;\n \n allProcesses.push({\n key: processInfo.key,\n projectName: processInfo.projectName,\n envName: processInfo.envName,\n running: isRunning,\n pid: processInfo.pid,\n startTime: processInfo.startTime,\n port: processInfo.port,\n portInUse\n });\n }\n } catch {\n // 文件不存在或读取失败,返回空数组\n }\n\n return NextResponse.json({\n success: true,\n data: allProcesses\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}","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":[3]}
@@ -1,3 +0,0 @@
1
- module.exports={67450:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({PROJECT_CONFIG_PATH:()=>c,ProjectStatus:()=>f,WORKSPACE_CONFIG:()=>b});var d=a.i(13442),e=a.i(30331);let b={WORKSPACE_ROOT:(0,e.join)((0,d.homedir)(),"Documents","prime-workspace"),GIT_TIMEOUT:3e5,MAX_CONCURRENT_CLONES:Math.max(2,Math.min((0,d.cpus)().length,8)),MAX_RETRY_ATTEMPTS:3},c=(0,e.join)((0,d.homedir)(),".prime-projects.json");var f=function(a){return a.PENDING="pending",a.EXISTING="existing",a.CLONING="cloning",a.SUCCESS="success",a.FAILED="failed",a.RETRYING="retrying",a.INCOMPLETE="incomplete",a}({})}},90250:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({buildBatchProbeRemoteBranchPayload:()=>n,default:()=>b,mapProbeRemoteBranchResultText:()=>o,validateBatchProbeRemoteBranchForm:()=>m});var d=a.i(99559),e=a.i(57560),f=a.i(40490),g=a.i(50923),h=a.i(2031),i=a.i(94688),j=a.i(58413),k=a.i(22529),l=a.i(67450);function m(a,b){let c=[];return 0===a.length&&c.push("请先选择至少一个项目。"),b.trim()||c.push("请填写远端分支名称。"),c}function n(a,b,c){return{projects:[a],branchName:b.trim(),dryRun:c}}function o(a){return!0===a.exists?"存在":!1===a.exists?"不存在":a.success?"成功":"执行失败"}let b=()=>{let a=(0,f.useRouter)(),[b,c]=(0,e.useState)({isInitializing:!1,isCompleted:!1,isLoading:!0,hasCompleted:!1,globalProgress:0,globalMessage:"正在检查工作空间状态...",projects:{}}),[p,q]=(0,e.useState)({selectedProjects:[],createBranch:"release/",baseBranch:"main",mergeBranch:"feature/"}),[r,s]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],runId:""}),[t,u]=(0,e.useState)({selectedProjects:[],createBranch:"release/",baseBranch:"GWH",mergeBranch:"feature/"}),[v,w]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],runId:""}),[x,y]=(0,e.useState)({selectedProjects:[],targetBranch:"main",sourceBranch:""}),[z,A]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[B,C]=(0,e.useState)({selectedProjects:[],createBranch:"",baseBranch:"main"}),[D,E]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[F,G]=(0,e.useState)({selectedProjects:[],branchName:""}),[H,I]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[J,K]=(0,e.useState)({selectedProjects:[],branchName:""}),[L,M]=(0,e.useState)({isRunning:!1,operationLogs:[],feedbacks:[],progress:0,totalProjects:0,completedProjects:0,currentProject:""}),[N,O]=(0,e.useState)(!1),[P,Q]=(0,e.useState)(null),[R,S]=(0,e.useState)(!1),[T,U]=(0,e.useState)(!1),[V,W]=(0,e.useState)([]),[X,Y]=(0,e.useState)({});(0,e.useEffect)(()=>{Z()},[]),(0,e.useEffect)(()=>{(async()=>{try{let a=await fetch("/api/admin-status"),b=await a.json();O(!!b?.isAdmin)}catch(a){console.error("获取管理员状态失败:",a),O(!1)}})()},[]);let Z=async()=>{try{c(a=>({...a,isLoading:!0,globalMessage:"正在检查工作空间状态..."}));let a=await fetch("/api/check-workspace"),b=await a.json();if(b.success){let a={};b.projects.forEach(b=>{a[b.name]={name:b.name,status:b.status,progress:100*(b.status===l.ProjectStatus.EXISTING),message:b.message,canRetry:!1,needsCleanup:b.needsCleanup||!1}}),c(c=>({...c,isLoading:!1,projects:a,globalMessage:b.message||"检查完成"}))}else c(a=>({...a,isLoading:!1,globalMessage:b.error||"检查工作空间状态失败"}))}catch(a){c(a=>({...a,isLoading:!1,globalMessage:"无法连接到服务器,请刷新页面重试"})),console.error("检查工作空间状态失败:",a)}},$=a=>{switch(a.type){case"initialization":case"workspace_created":case"projects_loaded":if(c(b=>({...b,globalProgress:a.progress||0,globalMessage:a.message||""})),a.projects&&Array.isArray(a.projects)){let b={};a.projects.forEach(a=>{b[a]={name:a,status:l.ProjectStatus.PENDING,progress:0,message:"等待开始...",canRetry:!1}}),c(a=>({...a,projects:b}))}break;case"project_existing":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,globalMessage:a.message??"",projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.EXISTING,message:"项目已存在",progress:100,canRetry:!1}}}))}break;case"project_start":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,globalMessage:a.message??"",projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.CLONING,message:"开始克隆...",progress:0}}}))}break;case"project_progress":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,projects:{...c.projects,[b]:{...c.projects[b],message:a.message??"",progress:Math.min(a.progress??0,100)}}}))}break;case"project_success":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.SUCCESS,message:"克隆成功",progress:100,canRetry:!1}}}))}break;case"project_failed":if(a.projectName){let b=a.projectName;c(c=>({...c,globalProgress:a.progress??c.globalProgress,projects:{...c.projects,[b]:{...c.projects[b],status:l.ProjectStatus.FAILED,message:"克隆失败",error:a.error,canRetry:!0}}}))}break;case"command_log":if(a.projectName&&a.logType&&void 0!==a.content&&a.timestamp){let b=a.projectName,d=a.logType,e=a.content,f=a.timestamp;c(a=>({...a,projects:{...a.projects,[b]:{...a.projects[b],logs:[...a.projects[b]?.logs||[],{type:d,content:e,timestamp:f}].slice(-1e3)}}}))}break;case"completion":c(b=>({...b,isInitializing:!1,isCompleted:!0,hasCompleted:!0,globalProgress:100,globalMessage:a.message??"初始化完成",completionSummary:a.result?{success:a.result.success,totalProjects:a.result.totalProjects,successCount:a.result.successCount,failedCount:a.result.failedCount,duration:a.result.duration}:void 0}));break;case"error":c(b=>({...b,isInitializing:!1,hasCompleted:!0,globalMessage:a.message??"发生错误",globalProgress:a.progress??b.globalProgress}))}},_=async(a,b="cursor")=>{c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isOpening:!0}}}));try{let d=await fetch("/api/open-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:a,editor:b})}),e=await d.json();if(e.success&&e.editorUrl){let a=document.createElement("a");a.href=e.editorUrl,a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)}else console.error("打开项目失败:",e.error);c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isOpening:!1}}}))}catch(b){c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isOpening:!1}}})),console.error("打开项目失败:",b)}},aa=async a=>{c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isCleaningUp:!0}}}));try{let b=await fetch("/api/cleanup-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:a})}),d=await b.json();d.success?c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],status:l.ProjectStatus.PENDING,message:"已清理,待克隆",isCleaningUp:!1,needsCleanup:!1}}})):c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],isCleaningUp:!1,error:d.error}}}))}catch(b){c(c=>({...c,projects:{...c.projects,[a]:{...c.projects[a],isCleaningUp:!1,error:b instanceof Error?b.message:String(b)}}}))}},ab=async a=>{c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],status:l.ProjectStatus.RETRYING,message:"正在重试...",progress:0,canRetry:!1}}}));try{let b=await fetch("/api/retry-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:a})}),d=await b.json();c(b=>({...b,projects:{...b.projects,[a]:{...b.projects[a],status:d.success?l.ProjectStatus.SUCCESS:l.ProjectStatus.FAILED,message:d.message,error:d.error,progress:d.success?100:b.projects[a].progress,canRetry:!d.success}}}))}catch(b){c(c=>({...c,projects:{...c.projects,[a]:{...c.projects[a],status:l.ProjectStatus.FAILED,message:"重试失败",error:b instanceof Error?b.message:String(b),canRetry:!0}}}))}},ac=a=>{switch(a){case l.ProjectStatus.EXISTING:case l.ProjectStatus.SUCCESS:return"text-green-600 bg-green-50 border-green-200";case l.ProjectStatus.FAILED:return"text-red-600 bg-red-50 border-red-200";case l.ProjectStatus.INCOMPLETE:return"text-orange-600 bg-orange-50 border-orange-200";case l.ProjectStatus.CLONING:case l.ProjectStatus.RETRYING:return"text-blue-600 bg-blue-50 border-blue-200";case l.ProjectStatus.PENDING:default:return"text-gray-600 bg-gray-50 border-gray-200"}},ad=a=>{switch(a){case l.ProjectStatus.PENDING:return"待克隆";case l.ProjectStatus.EXISTING:return"已存在";case l.ProjectStatus.CLONING:return"克隆中";case l.ProjectStatus.SUCCESS:return"成功";case l.ProjectStatus.FAILED:return"失败";case l.ProjectStatus.INCOMPLETE:return"不完整";case l.ProjectStatus.RETRYING:return"重试中";default:return"未知"}},ae=()=>{let a=Object.values(b.projects);return a.length>0&&a.every(a=>a.status===l.ProjectStatus.EXISTING)},af=b=>{a.push(`/configuration?project=${encodeURIComponent(b)}`)},ag=(a,b)=>{q(c=>({...c,[a]:b}))},ah=(a,b)=>{u(c=>({...c,[a]:b}))},ai=(a,b)=>{y(c=>({...c,[a]:b}))},aj=(a,b)=>{C(c=>({...c,[a]:b}))},ak=a=>{G(b=>({...b,branchName:a}))},al=a=>{K(b=>({...b,branchName:a}))},am=async a=>{let b=[];if(0===x.selectedProjects.length&&b.push("请先选择至少一个项目。"),x.targetBranch.trim()||b.push("请填写合入分支名称。"),x.sourceBranch.trim()||b.push("请填写被合入分支名称。"),b.length>0)return void A({isRunning:!1,operationLogs:[],feedbacks:b,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let c=x.selectedProjects.length;A({isRunning:!0,operationLogs:[`开始批量分支合并,共 ${c} 个项目...`],feedbacks:[],progress:0,totalProjects:c,completedProjects:0,currentProject:""});let d=[],e=[];for(let b=0;b<x.selectedProjects.length;b++){let f=x.selectedProjects[b];A(a=>({...a,currentProject:f,completedProjects:b,progress:Math.round(b/c*100),operationLogs:[...a.operationLogs,`[进度] ${b+1}/${c} 开始处理项目 ${f}`]}));try{let b=await fetch("/api/admin-git-batch-merge",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:[f],targetBranch:x.targetBranch.trim(),sourceBranch:x.sourceBranch.trim(),dryRun:a})}),c=await b.json(),g=Array.isArray(c.operationLogs)?c.operationLogs:[],h=Array.isArray(c.feedbacks)?c.feedbacks:[c.error||"执行失败"];A(a=>({...a,operationLogs:[...a.operationLogs,...g],feedbacks:[...a.feedbacks,...h]})),e.push(...h),Array.isArray(c.projectResults)&&d.push(...c.projectResults)}catch(b){let a=b instanceof Error?b.message:"执行失败";A(b=>({...b,operationLogs:[...b.operationLogs,`[${f}] 请求失败: ${a}`],feedbacks:[...b.feedbacks,`[${f}] ${a}`]})),e.push(`[${f}] ${a}`),d.push({projectName:f,success:!1,reason:a})}}A(a=>({...a,isRunning:!1,progress:100,completedProjects:c,currentProject:"",operationLogs:[...a.operationLogs,"批量分支合并执行完成。"],feedbacks:e.length>0?e:a.feedbacks})),d.length>0?(W(d),U(!0)):(W([]),U(!1))},an=async a=>{let b=[];if(0===B.selectedProjects.length&&b.push("请先选择至少一个项目。"),B.createBranch.trim()||b.push("请填写新分支名称。"),B.baseBranch.trim()||b.push("请填写来源分支名称。"),b.length>0)return void E({isRunning:!1,operationLogs:[],feedbacks:b,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let c=B.selectedProjects.length;E({isRunning:!0,operationLogs:[`开始批量新建分支,共 ${c} 个项目...`],feedbacks:[],progress:0,totalProjects:c,completedProjects:0,currentProject:""});let d=[],e=[];for(let b=0;b<B.selectedProjects.length;b++){let f=B.selectedProjects[b];E(a=>({...a,currentProject:f,completedProjects:b,progress:Math.round(b/c*100),operationLogs:[...a.operationLogs,`[进度] ${b+1}/${c} 开始处理项目 ${f}`]}));try{let b=await fetch("/api/admin-git-batch-create-branch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:[f],createBranch:B.createBranch.trim(),baseBranch:B.baseBranch.trim(),dryRun:a})}),c=await b.json(),g=Array.isArray(c.operationLogs)?c.operationLogs:[],h=Array.isArray(c.feedbacks)?c.feedbacks:[c.error||"执行失败"];E(a=>({...a,operationLogs:[...a.operationLogs,...g],feedbacks:[...a.feedbacks,...h]})),e.push(...h),Array.isArray(c.projectResults)&&d.push(...c.projectResults)}catch(b){let a=b instanceof Error?b.message:"执行失败";E(b=>({...b,operationLogs:[...b.operationLogs,`[${f}] 请求失败: ${a}`],feedbacks:[...b.feedbacks,`[${f}] ${a}`]})),e.push(`[${f}] ${a}`),d.push({projectName:f,success:!1,reason:a})}}E(a=>({...a,isRunning:!1,progress:100,completedProjects:c,currentProject:"",operationLogs:[...a.operationLogs,"批量新建分支执行完成。"],feedbacks:e.length>0?e:a.feedbacks})),d.length>0?(W(d),U(!0)):(W([]),U(!1))},ao=async a=>{let b=[];if(0===F.selectedProjects.length&&b.push("请先选择至少一个项目。"),F.branchName.trim()||b.push("请填写远端分支名称。"),b.length>0)return void I({isRunning:!1,operationLogs:[],feedbacks:b,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let c=F.selectedProjects.length;I({isRunning:!0,operationLogs:[`开始批量删除远端分支,共 ${c} 个项目...`],feedbacks:[],progress:0,totalProjects:c,completedProjects:0,currentProject:""});let d=[],e=[];for(let b=0;b<F.selectedProjects.length;b++){let f=F.selectedProjects[b];I(a=>({...a,currentProject:f,completedProjects:b,progress:Math.round(b/c*100),operationLogs:[...a.operationLogs,`[进度] ${b+1}/${c} 开始处理项目 ${f}`]}));try{let b=await fetch("/api/admin-git-batch-delete-branch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:[f],branchName:F.branchName.trim(),dryRun:a})}),c=await b.json(),g=Array.isArray(c.operationLogs)?c.operationLogs:[],h=Array.isArray(c.feedbacks)?c.feedbacks:[c.error||"执行失败"];I(a=>({...a,operationLogs:[...a.operationLogs,...g],feedbacks:[...a.feedbacks,...h]})),e.push(...h),Array.isArray(c.projectResults)&&d.push(...c.projectResults)}catch(b){let a=b instanceof Error?b.message:"执行失败";I(b=>({...b,operationLogs:[...b.operationLogs,`[${f}] 请求失败: ${a}`],feedbacks:[...b.feedbacks,`[${f}] ${a}`]})),e.push(`[${f}] ${a}`),d.push({projectName:f,success:!1,reason:a})}}I(a=>({...a,isRunning:!1,progress:100,completedProjects:c,currentProject:"",operationLogs:[...a.operationLogs,"批量删除远端分支执行完成。"],feedbacks:e.length>0?e:a.feedbacks})),d.length>0?(W(d),U(!0)):(W([]),U(!1))},ap=async a=>{let b=m(J.selectedProjects,J.branchName);if(b.length>0)return void M({isRunning:!1,operationLogs:[],feedbacks:b,progress:0,totalProjects:0,completedProjects:0,currentProject:""});let c=J.selectedProjects.length;M({isRunning:!0,operationLogs:[`开始批量探测远端分支,共 ${c} 个项目...`],feedbacks:[],progress:0,totalProjects:c,completedProjects:0,currentProject:""});let d=[],e=[];for(let b=0;b<J.selectedProjects.length;b++){let f=J.selectedProjects[b];M(a=>({...a,currentProject:f,completedProjects:b,progress:Math.round(b/c*100),operationLogs:[...a.operationLogs,`[进度] ${b+1}/${c} 开始处理项目 ${f}`]}));try{let b=await fetch("/api/admin-git-batch-probe-remote-branch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n(f,J.branchName,a))}),c=await b.json(),g=Array.isArray(c.operationLogs)?c.operationLogs:[],h=Array.isArray(c.feedbacks)?c.feedbacks:[c.error||"执行失败"];M(a=>({...a,operationLogs:[...a.operationLogs,...g],feedbacks:[...a.feedbacks,...h]})),e.push(...h),Array.isArray(c.projectResults)&&d.push(...c.projectResults)}catch(b){let a=b instanceof Error?b.message:"执行失败";M(b=>({...b,operationLogs:[...b.operationLogs,`[${f}] 请求失败: ${a}`],feedbacks:[...b.feedbacks,`[${f}] ${a}`]})),e.push(`[${f}] ${a}`),d.push({projectName:f,success:!1,reason:a})}}M(a=>({...a,isRunning:!1,progress:100,completedProjects:c,currentProject:"",operationLogs:[...a.operationLogs,"批量探测远端分支执行完成。"],feedbacks:e.length>0?e:a.feedbacks})),d.length>0?(W(d),U(!0)):(W([]),U(!1))},aq=async a=>{let b=[];if(0===p.selectedProjects.length&&b.push("请先选择至少一个项目。"),p.createBranch.trim()||b.push("请填写创建分支名。"),p.baseBranch.trim()||b.push("请填写从 origin 哪个分支创建。"),p.mergeBranch.trim()||b.push("请填写被合并分支名称。"),b.length>0)return void s({isRunning:!1,operationLogs:[],feedbacks:b,runId:""});let c=`uat-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;s({isRunning:!0,operationLogs:[],feedbacks:[],runId:c});try{let b=await fetch("/api/uat-git-flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:p.selectedProjects,createBranch:p.createBranch.trim(),baseBranch:"main",mergeBranch:p.mergeBranch.trim(),dryRun:a,runId:c})}),d=await b.json();s({isRunning:!1,operationLogs:Array.isArray(d.operationLogs)?d.operationLogs:[],feedbacks:Array.isArray(d.feedbacks)?d.feedbacks:[d.error||"执行失败"],runId:""}),Array.isArray(d.projectResults)&&(W(d.projectResults),U(!0))}catch(a){s({isRunning:!1,operationLogs:[],feedbacks:[a instanceof Error?a.message:"执行失败"],runId:""}),W([]),U(!1)}},ar=async a=>{let b=[];if(0===t.selectedProjects.length&&b.push("请先选择至少一个项目。"),t.createBranch.trim()||b.push("请填写创建分支名。"),t.baseBranch.trim()||b.push("请填写从 origin 哪个分支创建。"),t.mergeBranch.trim()||b.push("请填写被合并分支名称。"),b.length>0)return void w({isRunning:!1,operationLogs:[],feedbacks:b,runId:""});let c=`gwh-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;w({isRunning:!0,operationLogs:[],feedbacks:[],runId:c});try{let b=await fetch("/api/gwh-git-flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projects:t.selectedProjects,createBranch:t.createBranch.trim(),baseBranch:"GWH",mergeBranch:t.mergeBranch.trim(),dryRun:a,runId:c})}),d=await b.json();w({isRunning:!1,operationLogs:Array.isArray(d.operationLogs)?d.operationLogs:[],feedbacks:Array.isArray(d.feedbacks)?d.feedbacks:[d.error||"执行失败"],runId:""}),Array.isArray(d.projectResults)&&(W(d.projectResults),U(!0))}catch(a){w({isRunning:!1,operationLogs:[],feedbacks:[a instanceof Error?a.message:"执行失败"],runId:""}),W([]),U(!1)}},as=async()=>{if(P&&r.runId)try{let a=await fetch("/api/uat-git-flow/step",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"execute",runId:r.runId,stepId:P.stepId})}),b=await a.json(),c=Array.isArray(b.operationLogs)?b.operationLogs:[],d=Array.isArray(b.feedbacks)?b.feedbacks:[b.error||"执行失败"];if(!b.success){s(a=>({...a,isRunning:!1,operationLogs:c,feedbacks:d,runId:""})),Q(null),S(!1);return}s(a=>({...a,operationLogs:c,feedbacks:d,isRunning:!b.isComplete,runId:b.isComplete?"":a.runId})),b.nextStep?(Q(b.nextStep),S(!0)):(Q(null),S(!1),Array.isArray(b.projectResults)&&(W(b.projectResults),U(!0)))}catch(a){s(b=>({...b,isRunning:!1,operationLogs:b.operationLogs,feedbacks:[...b.feedbacks,a instanceof Error?a.message:"执行失败"],runId:""})),Q(null),S(!1)}},at=async()=>{if(r.runId)try{let a=await fetch("/api/uat-git-flow/abort",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({runId:r.runId})}),b=await a.json();b&&Array.isArray(b.operationLogs)?s(a=>({...a,isRunning:!1,operationLogs:b.operationLogs,feedbacks:Array.isArray(b.feedbacks)?b.feedbacks:a.feedbacks,runId:""})):s(a=>({...a,isRunning:!1,runId:""})),Array.isArray(b.projectResults)&&(W(b.projectResults),U(!0)),Q(null),S(!1)}catch(a){s(b=>({...b,feedbacks:[...b.feedbacks,a instanceof Error?a.message:"中断失败"]}))}},au=async()=>{if(v.runId)try{let a=await fetch("/api/gwh-git-flow/abort",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({runId:v.runId})}),b=await a.json();b&&Array.isArray(b.operationLogs)?w(a=>({...a,isRunning:!1,operationLogs:b.operationLogs,feedbacks:Array.isArray(b.feedbacks)?b.feedbacks:a.feedbacks,runId:""})):w(a=>({...a,isRunning:!1,runId:""})),Array.isArray(b.projectResults)&&(W(b.projectResults),U(!0))}catch(a){w(b=>({...b,feedbacks:[...b.feedbacks,a instanceof Error?a.message:"中断失败"]}))}};return(0,d.jsxs)("div",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold",children:"项目初始化"}),b.isLoading?(0,d.jsx)(g.Button,{disabled:!0,children:"检查中..."}):(0,d.jsx)(g.Button,{onClick:()=>{c(a=>({...a,isInitializing:!0,isCompleted:!1,hasCompleted:!1,globalProgress:0,globalMessage:"正在连接服务器...",projects:{},completionSummary:void 0}));let a=new EventSource("/api/initialize-workspace");a.onmessage=a=>{try{let b=JSON.parse(a.data);$(b)}catch(a){console.error("解析 SSE 消息失败:",a)}},a.onerror=()=>{c(a=>a.hasCompleted?a:{...a,isInitializing:!1,globalMessage:"连接服务器失败,请重试"}),a.close()},a.addEventListener("error",()=>{a.close()})},disabled:b.isInitializing,children:b.isInitializing?"初始化中...":"创建项目空间"})]}),(b.isInitializing||b.isCompleted)&&!ae()&&(0,d.jsxs)("div",{className:"mb-6 p-4 bg-gray-50 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2",children:[(0,d.jsx)("span",{className:"text-sm font-medium",children:b.globalMessage}),(0,d.jsxs)("span",{className:"text-sm text-gray-600",children:[b.globalProgress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${b.globalProgress}%`}})})]}),b.completionSummary&&!ae()&&(0,d.jsxs)("div",{className:`mb-6 p-4 rounded-lg border ${b.completionSummary.success?"bg-green-50 border-green-200":"bg-yellow-50 border-yellow-200"}`,children:[(0,d.jsx)("h3",{className:"font-semibold mb-2",children:"初始化完成"}),(0,d.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm",children:[(0,d.jsxs)("div",{children:["总项目数: ",b.completionSummary.totalProjects]}),(0,d.jsxs)("div",{className:"text-green-600",children:["成功: ",b.completionSummary.successCount]}),(0,d.jsxs)("div",{className:"text-red-600",children:["失败: ",b.completionSummary.failedCount]}),(0,d.jsxs)("div",{children:["耗时: ",Math.round(b.completionSummary.duration/1e3),"s"]})]})]}),(0,d.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4",children:Object.keys(b.projects).length>0?Object.values(b.projects).map(a=>(0,d.jsxs)("div",{className:`border rounded-lg p-4 ${ac(a.status)}`,children:[(0,d.jsxs)("div",{className:"flex justify-between items-start mb-2",children:[(0,d.jsx)("h2",{className:"font-semibold cursor-pointer hover:text-blue-600 transition-colors",onClick:()=>af(a.name),title:"点击进入项目配置",children:a.name}),(0,d.jsx)("span",{className:"text-xs px-2 py-1 rounded-full bg-white",children:ad(a.status)})]}),(0,d.jsx)("p",{className:"text-sm mb-2",children:a.message}),a.status===l.ProjectStatus.CLONING||a.status===l.ProjectStatus.RETRYING?(0,d.jsxs)("div",{className:"mb-2",children:[(0,d.jsx)("div",{className:"w-full bg-white rounded-full h-1",children:(0,d.jsx)("div",{className:"bg-current h-1 rounded-full transition-all duration-300",style:{width:`${a.progress}%`}})}),(0,d.jsxs)("span",{className:"text-xs",children:[a.progress,"%"]})]}):null,a.error&&(0,d.jsx)("p",{className:"text-xs text-red-600 mb-2",children:a.error}),(0,d.jsxs)("div",{className:"space-y-2",children:[a.canRetry&&(0,d.jsx)(g.Button,{size:"sm",variant:"outline",onClick:()=>ab(a.name),className:"w-full",children:"重试"}),a.needsCleanup&&a.status===l.ProjectStatus.INCOMPLETE&&(0,d.jsx)(g.Button,{size:"sm",variant:"destructive",onClick:()=>aa(a.name),disabled:a.isCleaningUp,className:"w-full",children:a.isCleaningUp?"清理中...":"清理项目"}),(a.status===l.ProjectStatus.EXISTING||a.status===l.ProjectStatus.SUCCESS)&&(0,d.jsx)(h.EditorSplitButton,{onOpen:b=>_(a.name,b),loading:a.isOpening,loadingText:"打开中...",size:"sm",variant:"default",className:"w-full"}),a.logs&&a.logs.length>0&&(0,d.jsx)(g.Button,{size:"sm",variant:"outline",onClick:()=>Y(b=>({...b,[a.name]:!b[a.name]})),className:"w-full",children:X[a.name]?"隐藏日志":`查看日志 (${a.logs.length})`})]}),X[a.name]&&a.logs&&a.logs.length>0&&(0,d.jsx)("div",{className:"mt-3 border-t pt-3",children:(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:a.logs.map((a,b)=>(0,d.jsxs)("div",{className:`mb-1 ${"stderr"===a.type?"text-red-400":"progress"===a.type?"text-yellow-400":"text-green-400"}`,children:[(0,d.jsx)("span",{className:"text-gray-500 mr-2",children:new Date(a.timestamp).toLocaleTimeString()}),(0,d.jsxs)("span",{className:"text-blue-400 mr-2",children:["[",a.type,"]"]}),(0,d.jsx)("span",{className:"whitespace-pre-wrap",children:a.content})]},b))})})]},a.name)):(0,d.jsx)("div",{className:"col-span-full text-center text-gray-500 py-8",children:b.isLoading?"正在检查项目状态...":b.isInitializing?"正在加载项目...":'点击"创建项目空间"开始初始化'})}),N&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"UAT上线前 Git 操作流"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>aq(!1),disabled:r.isRunning,children:r.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>aq(!0),disabled:r.isRunning,children:"DRY RUN"}),(0,d.jsx)(g.Button,{variant:"destructive",onClick:at,disabled:!r.isRunning,children:"中断"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"uat-projects",multiple:!0,value:p.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);q(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-create-branch",children:"创建分支名"}),(0,d.jsx)(i.Input,{id:"uat-create-branch",value:p.createBranch,onChange:a=>ag("createBranch",a.target.value),placeholder:"例如: release/uat-2026-01"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-base-branch",children:"从 origin 哪个分支创建(固定)"}),(0,d.jsx)(i.Input,{id:"uat-base-branch",value:p.baseBranch,disabled:!0,placeholder:"main"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"uat-merge-branch",children:"被合并分支名称"}),(0,d.jsx)(i.Input,{id:"uat-merge-branch",value:p.mergeBranch,onChange:a=>ag("mergeBranch",a.target.value),placeholder:"例如: feature/xxx"})]})]})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===r.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:r.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===r.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:r.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),N&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"武汉协和版本上线前 Git 操作流"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>ar(!1),disabled:v.isRunning,children:v.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>ar(!0),disabled:v.isRunning,children:"DRY RUN"}),(0,d.jsx)(g.Button,{variant:"destructive",onClick:au,disabled:!v.isRunning,children:"中断"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"gwh-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"gwh-projects",multiple:!0,value:t.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);u(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"gwh-create-branch",children:"创建分支名"}),(0,d.jsx)(i.Input,{id:"gwh-create-branch",value:t.createBranch,onChange:a=>ah("createBranch",a.target.value),placeholder:"例如: release/whxh-2026-03"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"gwh-base-branch",children:"从 origin 哪个分支创建(固定)"}),(0,d.jsx)(i.Input,{id:"gwh-base-branch",value:t.baseBranch,disabled:!0,placeholder:"GWH"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"gwh-merge-branch",children:"被合并分支名称"}),(0,d.jsx)(i.Input,{id:"gwh-merge-branch",value:t.mergeBranch,onChange:a=>ah("mergeBranch",a.target.value),placeholder:"例如: feature/xxx"})]})]})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===v.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:v.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===v.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:v.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),N&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量分支合并"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>am(!1),disabled:z.isRunning,children:z.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>am(!0),disabled:z.isRunning,children:"DRY RUN"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-merge-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"batch-merge-projects",multiple:!0,value:x.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);y(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-merge-target-branch",children:"合入分支名称"}),(0,d.jsx)(i.Input,{id:"batch-merge-target-branch",value:x.targetBranch,onChange:a=>ai("targetBranch",a.target.value),placeholder:"例如: main"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-merge-source-branch",children:"被合入分支名称"}),(0,d.jsx)(i.Input,{id:"batch-merge-source-branch",value:x.sourceBranch,onChange:a=>ai("sourceBranch",a.target.value),placeholder:"例如: release/candidate"})]})]})]}),(z.isRunning||z.progress>0)&&(0,d.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,d.jsxs)("span",{children:["进度: ",z.completedProjects,"/",z.totalProjects,z.currentProject?` \xb7 当前项目: ${z.currentProject}`:""]}),(0,d.jsxs)("span",{children:[z.progress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${z.progress}%`}})})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===z.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:z.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===z.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:z.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),N&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量新建分支"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>an(!1),disabled:D.isRunning,children:D.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>an(!0),disabled:D.isRunning,children:"DRY RUN"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-create-branch-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"batch-create-branch-projects",multiple:!0,value:B.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);C(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsxs)("div",{className:"grid gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-create-branch-name",children:"新分支名称"}),(0,d.jsx)(i.Input,{id:"batch-create-branch-name",value:B.createBranch,onChange:a=>aj("createBranch",a.target.value),placeholder:"例如: release/2026-03"})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-create-branch-base",children:"来源分支名称"}),(0,d.jsx)(i.Input,{id:"batch-create-branch-base",value:B.baseBranch,onChange:a=>aj("baseBranch",a.target.value),placeholder:"例如: main"})]})]})]}),(D.isRunning||D.progress>0)&&(0,d.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,d.jsxs)("span",{children:["进度: ",D.completedProjects,"/",D.totalProjects,D.currentProject?` \xb7 当前项目: ${D.currentProject}`:""]}),(0,d.jsxs)("span",{children:[D.progress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${D.progress}%`}})})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===D.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:D.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===D.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:D.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),N&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量删除远端分支"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>ao(!1),disabled:H.isRunning,children:H.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>ao(!0),disabled:H.isRunning,children:"DRY RUN"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-delete-branch-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"batch-delete-branch-projects",multiple:!0,value:F.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);G(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsx)("div",{className:"grid gap-4",children:(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-delete-branch-name",children:"远端分支名称"}),(0,d.jsx)(i.Input,{id:"batch-delete-branch-name",value:F.branchName,onChange:a=>ak(a.target.value),placeholder:"例如: release/2026-03"})]})})]}),(H.isRunning||H.progress>0)&&(0,d.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,d.jsxs)("span",{children:["进度: ",H.completedProjects,"/",H.totalProjects,H.currentProject?` \xb7 当前项目: ${H.currentProject}`:""]}),(0,d.jsxs)("span",{children:[H.progress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${H.progress}%`}})})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===H.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:H.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===H.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:H.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),N&&(0,d.jsxs)("div",{className:"mt-8 rounded-lg border bg-white p-4 shadow-sm",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"常用 Git 分支操作 · 批量探测远端分支"}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>ap(!1),disabled:L.isRunning,children:L.isRunning?"执行中...":"执行"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>ap(!0),disabled:L.isRunning,children:"DRY RUN"})]})]}),(0,d.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-probe-branch-projects",children:"选择项目"}),(0,d.jsx)("select",{id:"batch-probe-branch-projects",multiple:!0,value:J.selectedProjects,onChange:a=>{let b=Array.from(a.target.selectedOptions).map(a=>a.value);K(a=>({...a,selectedProjects:b}))},className:"w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",children:0===Object.keys(b.projects).length?(0,d.jsx)("option",{value:"",disabled:!0,children:"暂无可用项目"}):Object.keys(b.projects).map(a=>(0,d.jsx)("option",{value:a,children:a},a))}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"按住 Command / Ctrl 可多选"})]}),(0,d.jsx)("div",{className:"grid gap-4",children:(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(j.Label,{htmlFor:"batch-probe-branch-name",children:"远端分支名称"}),(0,d.jsx)(i.Input,{id:"batch-probe-branch-name",value:J.branchName,onChange:a=>al(a.target.value),placeholder:"例如: release/2026-03"})]})})]}),(L.isRunning||L.progress>0)&&(0,d.jsxs)("div",{className:"mt-4 rounded-lg border p-3",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-2 text-sm",children:[(0,d.jsxs)("span",{children:["进度: ",L.completedProjects,"/",L.totalProjects,L.currentProject?` \xb7 当前项目: ${L.currentProject}`:""]}),(0,d.jsxs)("span",{children:[L.progress,"%"]})]}),(0,d.jsx)("div",{className:"w-full bg-gray-200 rounded-full h-2",children:(0,d.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all duration-300",style:{width:`${L.progress}%`}})})]}),(0,d.jsxs)("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"操作记录"}),0===L.operationLogs.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无记录"}):(0,d.jsx)("div",{className:"bg-black text-white rounded text-xs font-mono p-2 max-h-48 overflow-y-auto",children:L.operationLogs.map((a,b)=>(0,d.jsx)("div",{className:"mb-1 whitespace-pre-wrap",children:a},b))})]}),(0,d.jsxs)("div",{className:"rounded-lg border p-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold mb-2",children:"反馈信息"}),0===L.feedbacks.length?(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"暂无反馈"}):(0,d.jsx)("div",{className:"space-y-1 text-sm",children:L.feedbacks.map((a,b)=>(0,d.jsx)("div",{className:"rounded bg-gray-50 px-2 py-1 text-gray-700",children:a},b))})]})]})]}),(0,d.jsx)(k.Dialog,{open:!1,onOpenChange:a=>{!a&&P&&r.isRunning||S(a)},children:(0,d.jsxs)(k.DialogContent,{showCloseButton:!1,children:[(0,d.jsxs)(k.DialogHeader,{children:[(0,d.jsx)(k.DialogTitle,{children:"确认执行下一步"}),(0,d.jsx)(k.DialogDescription,{children:P?`${P.projectName} \xb7 ${P.description}`:"准备下一步执行"})]}),(0,d.jsx)("div",{className:"rounded-md border bg-gray-50 p-3 text-sm font-mono text-gray-700",children:P?P.command:""}),(0,d.jsxs)(k.DialogFooter,{children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:at,children:"取消执行"}),(0,d.jsx)(g.Button,{onClick:as,disabled:!P,children:"确认并执行"})]})]})}),(0,d.jsx)(k.Dialog,{open:N&&T,onOpenChange:U,children:(0,d.jsxs)(k.DialogContent,{children:[(0,d.jsxs)(k.DialogHeader,{children:[(0,d.jsx)(k.DialogTitle,{children:"操作结果"}),(0,d.jsx)(k.DialogDescription,{children:"查看所有项目执行结果"})]}),(0,d.jsx)("div",{className:"space-y-2",children:0===V.length?(0,d.jsx)("p",{className:"text-sm text-gray-500",children:"暂无结果"}):V.map(a=>(0,d.jsxs)("div",{className:`rounded-md border px-3 py-2 text-sm ${a.success?"bg-green-50 text-green-700":"bg-red-50 text-red-700"}`,children:[(0,d.jsxs)("div",{className:"flex items-start justify-between",children:[(0,d.jsx)("span",{className:"font-medium",children:a.projectName}),(0,d.jsx)("span",{className:"ml-4 text-right",children:!0===a.exists||!1===a.exists?o(a):a.success?"成功":a.reason||"失败"})]}),!a.success&&a.rollbackActions&&a.rollbackActions.length>0&&(0,d.jsxs)("div",{className:"mt-2 text-xs text-gray-600",children:[(0,d.jsx)("div",{className:"font-semibold text-gray-700",children:"已回滚操作:"}),(0,d.jsx)("ul",{className:"mt-1 list-disc pl-4",children:a.rollbackActions.map((b,c)=>(0,d.jsx)("li",{children:b},`${a.projectName}-rollback-${c}`))})]})]},a.projectName))}),(0,d.jsx)(k.DialogFooter,{children:(0,d.jsx)(g.Button,{onClick:()=>U(!1),children:"关闭"})})]})})]})}}}};
2
-
3
- //# sourceMappingURL=packages_server_src_7cef6dbd._.js.map