prime-dev-cli 2.0.7 → 2.0.8

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 (52) hide show
  1. package/dist/server/.next/BUILD_ID +1 -1
  2. package/dist/server/.next/app-build-manifest.json +3 -3
  3. package/dist/server/.next/build-manifest.json +2 -2
  4. package/dist/server/.next/cache/.tsbuildinfo +1 -1
  5. package/dist/server/.next/cache/eslint/.cache_1qa5vxt +1 -1
  6. package/dist/server/.next/fallback-build-manifest.json +2 -2
  7. package/dist/server/.next/next-minimal-server.js.nft.json +1 -1
  8. package/dist/server/.next/next-server.js.nft.json +1 -1
  9. package/dist/server/.next/prerender-manifest.json +9 -9
  10. package/dist/server/.next/server/app/_not-found.html +1 -1
  11. package/dist/server/.next/server/app/_not-found.rsc +1 -1
  12. package/dist/server/.next/server/app/api/batch-list-branches/route.js +1 -1
  13. package/dist/server/.next/server/app/api/batch-list-branches/route.js.nft.json +1 -1
  14. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route.js +1 -1
  15. package/dist/server/.next/server/app/api/batch-list-submodule-branches/route.js.nft.json +1 -1
  16. package/dist/server/.next/server/app/configuration/page/app-build-manifest.json +1 -1
  17. package/dist/server/.next/server/app/configuration/page_client-reference-manifest.js +1 -1
  18. package/dist/server/.next/server/app/configuration.html +1 -1
  19. package/dist/server/.next/server/app/configuration.rsc +2 -2
  20. package/dist/server/.next/server/app/index.html +1 -1
  21. package/dist/server/.next/server/app/index.rsc +1 -1
  22. package/dist/server/.next/server/app/initialization/page/app-build-manifest.json +2 -2
  23. package/dist/server/.next/server/app/initialization/page_client-reference-manifest.js +1 -1
  24. package/dist/server/.next/server/app/initialization.html +1 -1
  25. package/dist/server/.next/server/app/initialization.rsc +2 -2
  26. package/dist/server/.next/server/chunks/[root-of-the-server]__6c7b8215._.js +3 -0
  27. package/dist/server/.next/server/chunks/[root-of-the-server]__6c7b8215._.js.map +1 -0
  28. package/dist/server/.next/server/chunks/[root-of-the-server]__c52380bc._.js +3 -0
  29. package/dist/server/.next/server/chunks/[root-of-the-server]__c52380bc._.js.map +1 -0
  30. package/dist/server/.next/server/chunks/ssr/_283bdc73._.js +1 -1
  31. package/dist/server/.next/server/chunks/ssr/_283bdc73._.js.map +1 -1
  32. package/dist/server/.next/server/chunks/ssr/_c7905e3c._.js +1 -1
  33. package/dist/server/.next/server/chunks/ssr/_c7905e3c._.js.map +1 -1
  34. package/dist/server/.next/server/chunks/ssr/packages_server_src_65e3de99._.js +1 -1
  35. package/dist/server/.next/server/chunks/ssr/packages_server_src_65e3de99._.js.map +1 -1
  36. package/dist/server/.next/server/pages/404.html +1 -1
  37. package/dist/server/.next/server/pages/500.html +1 -1
  38. package/dist/server/.next/static/chunks/{227a962f4584edf8.js.map → 0e959ec3ce9fc799.js.map} +1 -1
  39. package/dist/server/.next/static/chunks/{736431eeff70b2b7.js → 45543bd9f83f509f.js} +2 -2
  40. package/dist/server/.next/static/chunks/{f9854e63365b2956.js.map → 4608598ca6cc0991.js.map} +1 -1
  41. package/dist/server/.next/static/chunks/{1ae3fa2333c12687.js → 4c54a6f1b63a5c72.js} +2 -2
  42. package/dist/server/.next/static/chunks/{51509164bafe1e57.js.map → 8e1056102ab0be45.js.map} +1 -1
  43. package/dist/server/.next/static/chunks/{6f824bb5811ceebd.js → fce82d5fa17f0367.js} +2 -2
  44. package/dist/server/.next/trace +2 -2
  45. package/package.json +1 -1
  46. package/dist/server/.next/server/chunks/[root-of-the-server]__131fe141._.js +0 -3
  47. package/dist/server/.next/server/chunks/[root-of-the-server]__131fe141._.js.map +0 -1
  48. package/dist/server/.next/server/chunks/[root-of-the-server]__36b87de0._.js +0 -3
  49. package/dist/server/.next/server/chunks/[root-of-the-server]__36b87de0._.js.map +0 -1
  50. /package/dist/server/.next/static/{Dz7Ultbv0aaqF3m4OrOHQ → TtpaZZwrnzkXloBpwEr24}/_buildManifest.js +0 -0
  51. /package/dist/server/.next/static/{Dz7Ultbv0aaqF3m4OrOHQ → TtpaZZwrnzkXloBpwEr24}/_clientMiddlewareManifest.json +0 -0
  52. /package/dist/server/.next/static/{Dz7Ultbv0aaqF3m4OrOHQ → TtpaZZwrnzkXloBpwEr24}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/1427afaf93da978b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1923d6510bea25be.js"/><script src="/_next/static/chunks/0e57f1354cda05d5.js" async=""></script><script src="/_next/static/chunks/e5e4fd3e83ab66f8.js" async=""></script><script src="/_next/static/chunks/c4c1da381d908575.js" async=""></script><script src="/_next/static/chunks/ecfccf4677b4777a.js" async=""></script><script src="/_next/static/chunks/6f824bb5811ceebd.js" async=""></script><script src="/_next/static/chunks/1ae3fa2333c12687.js" async=""></script><title>Prime Dev CLI - 项目管理工具</title><meta name="description" content="管理多个前端项目的开发环境和配置"/><link rel="icon" href="/favicon.ico?favicon.45db1c09.ico" sizes="256x256" type="image/x-icon"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/ec548c7ce307cf6d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="container mx-auto p-4 sm:p-6 md:p-8"><div class="flex justify-between items-center mb-6"><h1 class="text-2xl font-bold">项目初始化</h1><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground shadow-xs hover:bg-primary/90 h-9 px-4 py-2 has-[&gt;svg]:px-3" disabled="">检查中...</button></div><div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4"><div class="col-span-full text-center text-gray-500 py-8">正在检查项目状态...</div></div><div class="mt-8 rounded-lg border bg-white p-4 shadow-sm"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4"><h2 class="text-lg font-semibold">常用 Git 分支操作 · 批量切换分支</h2><div class="flex flex-wrap gap-2"><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground shadow-xs hover:bg-primary/90 h-9 px-4 py-2 has-[&gt;svg]:px-3">执行</button><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3">DRY RUN</button></div></div><div class="grid gap-4 md:grid-cols-2"><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-branch-projects">选择项目</label><select id="batch-switch-branch-projects" multiple="" class="w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]"><option value="" disabled="">暂无可用项目</option></select><p class="text-xs text-gray-500">按住 Command / Ctrl 可多选;未选择时下拉聚合所有项目公共分支</p></div><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-branch-name">目标分支</label><button data-slot="button" class="inline-flex items-center gap-2 whitespace-nowrap rounded-md text-sm transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3 w-full justify-between font-normal" type="button" id="radix-«R195nnb»" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="truncate">点击选择目标分支</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-4 opacity-50 shrink-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></div></div><div class="mt-6 grid gap-4 md:grid-cols-2"><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">操作记录</h3><p class="text-xs text-gray-500">暂无记录</p></div><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">反馈信息</h3><p class="text-xs text-gray-500">暂无反馈</p></div></div></div><div class="mt-8 rounded-lg border bg-white p-4 shadow-sm"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4"><h2 class="text-lg font-semibold">常用 Git 分支操作 · 批量切换子仓库(submodules/common)分支</h2><div class="flex flex-wrap gap-2"><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground shadow-xs hover:bg-primary/90 h-9 px-4 py-2 has-[&gt;svg]:px-3">执行</button><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3">DRY RUN</button></div></div><div class="grid gap-4 md:grid-cols-2"><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-sub-projects">选择项目</label><select id="batch-switch-sub-projects" multiple="" class="w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]"><option value="" disabled="">暂无可用项目</option></select><p class="text-xs text-gray-500">按住 Command / Ctrl 可多选;未选择时下拉聚合所有项目子仓库公共分支</p></div><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-sub-name">目标分支</label><button data-slot="button" class="inline-flex items-center gap-2 whitespace-nowrap rounded-md text-sm transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3 w-full justify-between font-normal" type="button" id="radix-«R1967nb»" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="truncate">点击选择目标分支</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-4 opacity-50 shrink-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></div></div><div class="mt-6 grid gap-4 md:grid-cols-2"><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">操作记录</h3><p class="text-xs text-gray-500">暂无记录</p></div><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">反馈信息</h3><p class="text-xs text-gray-500">暂无反馈</p></div></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/1923d6510bea25be.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[55889,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n3:I[54799,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n4:I[9993,[\"/_next/static/chunks/6f824bb5811ceebd.js\",\"/_next/static/chunks/1ae3fa2333c12687.js\"],\"default\"]\n5:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"OutletBoundary\"]\n8:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadataOutlet\"]\na:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"ViewportBoundary\"]\nc:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"MetadataBoundary\"]\ne:I[71163,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n:HL[\"/_next/static/chunks/1427afaf93da978b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Dz7Ultbv0aaqF3m4OrOHQ\",\"p\":\"\",\"c\":[\"\",\"initialization\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"initialization\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/1427afaf93da978b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"initialization\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/6f824bb5811ceebd.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/1ae3fa2333c12687.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L5\",null,{\"children\":[\"$L6\",\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$1\",\"sJ7eVKahtg2dCJm9wuNwev\",{\"children\":[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null]}],[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"f:\"$Sreact.suspense\"\n10:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadata\"]\nd:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":[\"$\",\"$L10\",null,{\"promise\":\"$@11\"}]}]}]\n7:null\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Prime Dev CLI - 项目管理工具\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"管理多个前端项目的开发环境和配置\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.45db1c09.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}]],\"error\":null,\"digest\":\"$undefined\"}\n11:{\"metadata\":\"$9:metadata\",\"error\":null,\"digest\":\"$undefined\"}\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/1427afaf93da978b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1923d6510bea25be.js"/><script src="/_next/static/chunks/0e57f1354cda05d5.js" async=""></script><script src="/_next/static/chunks/e5e4fd3e83ab66f8.js" async=""></script><script src="/_next/static/chunks/c4c1da381d908575.js" async=""></script><script src="/_next/static/chunks/ecfccf4677b4777a.js" async=""></script><script src="/_next/static/chunks/fce82d5fa17f0367.js" async=""></script><script src="/_next/static/chunks/4c54a6f1b63a5c72.js" async=""></script><title>Prime Dev CLI - 项目管理工具</title><meta name="description" content="管理多个前端项目的开发环境和配置"/><link rel="icon" href="/favicon.ico?favicon.45db1c09.ico" sizes="256x256" type="image/x-icon"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/ec548c7ce307cf6d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="container mx-auto p-4 sm:p-6 md:p-8"><div class="flex justify-between items-center mb-6"><h1 class="text-2xl font-bold">项目初始化</h1><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground shadow-xs hover:bg-primary/90 h-9 px-4 py-2 has-[&gt;svg]:px-3" disabled="">检查中...</button></div><div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4"><div class="col-span-full text-center text-gray-500 py-8">正在检查项目状态...</div></div><div class="mt-8 rounded-lg border bg-white p-4 shadow-sm"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4"><h2 class="text-lg font-semibold">常用 Git 分支操作 · 批量切换分支</h2><div class="flex flex-wrap gap-2"><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground shadow-xs hover:bg-primary/90 h-9 px-4 py-2 has-[&gt;svg]:px-3">执行</button><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3">DRY RUN</button></div></div><div class="grid gap-4 md:grid-cols-2"><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-branch-projects">选择项目</label><select id="batch-switch-branch-projects" multiple="" class="w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]"><option value="" disabled="">暂无可用项目</option></select><p class="text-xs text-gray-500">按住 Command / Ctrl 可多选;未选择时下拉聚合所有项目分支</p></div><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-branch-name">目标分支</label><button data-slot="button" class="inline-flex items-center gap-2 whitespace-nowrap rounded-md text-sm transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3 w-full justify-between font-normal" type="button" id="radix-«R195nnb»" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="truncate">点击选择目标分支</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-4 opacity-50 shrink-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></div></div><div class="mt-6 grid gap-4 md:grid-cols-2"><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">操作记录</h3><p class="text-xs text-gray-500">暂无记录</p></div><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">反馈信息</h3><p class="text-xs text-gray-500">暂无反馈</p></div></div></div><div class="mt-8 rounded-lg border bg-white p-4 shadow-sm"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4"><h2 class="text-lg font-semibold">常用 Git 分支操作 · 批量切换子仓库(submodules/common)分支</h2><div class="flex flex-wrap gap-2"><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground shadow-xs hover:bg-primary/90 h-9 px-4 py-2 has-[&gt;svg]:px-3">执行</button><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3">DRY RUN</button></div></div><div class="grid gap-4 md:grid-cols-2"><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-sub-projects">选择项目</label><select id="batch-switch-sub-projects" multiple="" class="w-full min-h-[140px] rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]"><option value="" disabled="">暂无可用项目</option></select><p class="text-xs text-gray-500">按住 Command / Ctrl 可多选;未选择时下拉聚合所有项目子仓库分支</p></div><div class="space-y-2"><label data-slot="label" class="flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50" for="batch-switch-sub-name">目标分支</label><button data-slot="button" class="inline-flex items-center gap-2 whitespace-nowrap rounded-md text-sm transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3 w-full justify-between font-normal" type="button" id="radix-«R1967nb»" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="truncate">点击选择目标分支</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-4 opacity-50 shrink-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></div></div><div class="mt-6 grid gap-4 md:grid-cols-2"><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">操作记录</h3><p class="text-xs text-gray-500">暂无记录</p></div><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">反馈信息</h3><p class="text-xs text-gray-500">暂无反馈</p></div></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/1923d6510bea25be.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[55889,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n3:I[54799,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n4:I[9993,[\"/_next/static/chunks/fce82d5fa17f0367.js\",\"/_next/static/chunks/4c54a6f1b63a5c72.js\"],\"default\"]\n5:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"OutletBoundary\"]\n8:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadataOutlet\"]\na:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"ViewportBoundary\"]\nc:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"MetadataBoundary\"]\ne:I[71163,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n:HL[\"/_next/static/chunks/1427afaf93da978b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"TtpaZZwrnzkXloBpwEr24\",\"p\":\"\",\"c\":[\"\",\"initialization\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"initialization\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/1427afaf93da978b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"initialization\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/fce82d5fa17f0367.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/4c54a6f1b63a5c72.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L5\",null,{\"children\":[\"$L6\",\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$1\",\"Sv9cE4_4dk0GAxexgXpHrv\",{\"children\":[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null]}],[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"f:\"$Sreact.suspense\"\n10:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadata\"]\nd:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":[\"$\",\"$L10\",null,{\"promise\":\"$@11\"}]}]}]\n7:null\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Prime Dev CLI - 项目管理工具\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"管理多个前端项目的开发环境和配置\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.45db1c09.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}]],\"error\":null,\"digest\":\"$undefined\"}\n11:{\"metadata\":\"$9:metadata\",\"error\":null,\"digest\":\"$undefined\"}\n"])</script></body></html>
@@ -1,14 +1,14 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[55889,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
3
3
  3:I[54799,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
4
- 4:I[9993,["/_next/static/chunks/6f824bb5811ceebd.js","/_next/static/chunks/1ae3fa2333c12687.js"],"default"]
4
+ 4:I[9993,["/_next/static/chunks/fce82d5fa17f0367.js","/_next/static/chunks/4c54a6f1b63a5c72.js"],"default"]
5
5
  5:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"OutletBoundary"]
6
6
  8:I[73794,["/_next/static/chunks/ecfccf4677b4777a.js"],"AsyncMetadataOutlet"]
7
7
  a:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"ViewportBoundary"]
8
8
  c:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"MetadataBoundary"]
9
9
  e:I[71163,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
10
10
  :HL["/_next/static/chunks/1427afaf93da978b.css","style"]
11
- 0:{"P":null,"b":"Dz7Ultbv0aaqF3m4OrOHQ","p":"","c":["","initialization"],"i":false,"f":[[["",{"children":["initialization",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1427afaf93da978b.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["initialization",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/6f824bb5811ceebd.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/1ae3fa2333c12687.js","async":true,"nonce":"$undefined"}]],["$","$L5",null,{"children":["$L6","$L7",["$","$L8",null,{"promise":"$@9"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","sJ7eVKahtg2dCJm9wuNwev",{"children":[["$","$La",null,{"children":"$Lb"}],null]}],["$","$Lc",null,{"children":"$Ld"}]]}],false]],"m":"$undefined","G":["$e","$undefined"],"s":false,"S":true}
11
+ 0:{"P":null,"b":"TtpaZZwrnzkXloBpwEr24","p":"","c":["","initialization"],"i":false,"f":[[["",{"children":["initialization",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1427afaf93da978b.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["initialization",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/fce82d5fa17f0367.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/4c54a6f1b63a5c72.js","async":true,"nonce":"$undefined"}]],["$","$L5",null,{"children":["$L6","$L7",["$","$L8",null,{"promise":"$@9"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","Sv9cE4_4dk0GAxexgXpHrv",{"children":[["$","$La",null,{"children":"$Lb"}],null]}],["$","$Lc",null,{"children":"$Ld"}]]}],false]],"m":"$undefined","G":["$e","$undefined"],"s":false,"S":true}
12
12
  f:"$Sreact.suspense"
13
13
  10:I[73794,["/_next/static/chunks/ecfccf4677b4777a.js"],"AsyncMetadata"]
14
14
  d:["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":["$","$L10",null,{"promise":"$@11"}]}]}]
@@ -0,0 +1,3 @@
1
+ module.exports={45935:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},30331:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("path",()=>require("path"))},29549:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},83943:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},86103:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},23430:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},52670:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js"))},13442:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("os",()=>require("os"))},88941:e=>{"use strict";var{g:r,__dirname:t}=e;{e.s({PROJECT_CONFIG_PATH:()=>t,ProjectStatus:()=>o,WORKSPACE_CONFIG:()=>r});var s=e.i(13442),n=e.i(30331);let r={WORKSPACE_ROOT:(0,n.join)((0,s.homedir)(),"Documents","prime-workspace"),GIT_TIMEOUT:3e5,MAX_CONCURRENT_CLONES:Math.max(2,Math.min((0,s.cpus)().length,8)),MAX_RETRY_ATTEMPTS:3},t=(0,n.join)((0,s.homedir)(),".prime-projects.json");var o=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e.INCOMPLETE="incomplete",e}({})}},83886:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("fs",()=>require("fs"))},87485:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("child_process",()=>require("child_process"))},69383:function(e){var{g:r,__dirname:t,m:s,e:n}=e},77814:e=>{"use strict";var{g:r,__dirname:t}=e;{e.s({POST:()=>u});var s=e.i(15494),n=e.i(87485),o=e.i(83886),i=e.i(30331),a=e.i(88941);let r="submodules/common";function c(e,r){return new Promise((t,s)=>{let o=(0,n.spawn)("git",r,{cwd:e,stdio:["ignore","pipe","pipe"]}),i="",a="";o.stdout?.on("data",e=>{i+=e.toString()}),o.stderr?.on("data",e=>{a+=e.toString()}),o.on("close",e=>{t({code:e,stdout:i,stderr:a})}),o.on("error",e=>{s(e)})})}async function u(e){try{let t=await e.json(),n=(Array.isArray(t.projects)?t.projects:[]).map(e=>String(e).trim()).filter(Boolean);if(0===n.length)return s.NextResponse.json({success:!1,error:"缺少项目列表参数"},{status:400});let u=a.WORKSPACE_CONFIG.WORKSPACE_ROOT,p=await Promise.all(n.map(async e=>{let t=(0,i.join)(u,e);if(!(0,o.existsSync)(t)||!(0,o.existsSync)((0,i.join)(t,".git")))return{projectName:e,branches:[],error:"项目不存在或不是Git仓库"};let s=(0,i.join)(t,r);if(!(0,o.existsSync)(s)||!(0,o.existsSync)((0,i.join)(s,".git")))return{projectName:e,branches:[],error:null};let n=await c(t,["ls-files","-s",r]);if(0!==n.code||!n.stdout.trim().startsWith("160000"))return{projectName:e,branches:[],error:null};try{let r=await c(s,["ls-remote","--heads","origin"]);if(0!==r.code){let t=r.stderr.trim()||r.stdout.trim();return{projectName:e,branches:[],error:t.slice(0,150)||"获取子仓库远程分支失败"}}let t=[];return r.stdout.split("\n").forEach(e=>{let r=e.trim().match(/^[0-9a-f]+\trefs\/heads\/(.+)$/);if(r){let e=r[1].trim();e&&t.push(e)}}),{projectName:e,branches:t,error:null}}catch(r){return{projectName:e,branches:[],error:r instanceof Error?r.message:"执行失败"}}})),l=new Set,d=[];return p.forEach(e=>{e.error&&d.push({projectName:e.projectName,reason:e.error}),e.branches.forEach(e=>l.add(e))}),s.NextResponse.json({success:!0,branches:Array.from(l).sort((e,r)=>e.localeCompare(r)),failedProjects:d})}catch(e){return console.error("批量获取子仓库远程分支失败:",e),s.NextResponse.json({success:!1,error:e instanceof Error?e.message:"批量获取子仓库远程分支失败"},{status:500})}}}},90472:e=>{"use strict";var{g:r,__dirname:t}=e;{e.s({patchFetch:()=>a,routeModule:()=>r,serverHooks:()=>u,workAsyncStorage:()=>t,workUnitAsyncStorage:()=>c});var s=e.i(45746),n=e.i(93828),o=e.i(18250),i=e.i(77814);let r=new s.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/batch-list-submodule-branches/route",pathname:"/api/batch-list-submodule-branches",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/batch-list-submodule-branches/route.ts",nextConfigOutput:"",userland:i}),{workAsyncStorage:t,workUnitAsyncStorage:c,serverHooks:u}=r;function a(){return(0,o.patchFetch)({workAsyncStorage:t,workUnitAsyncStorage:c})}}}};
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__6c7b8215._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["turbopack:///[project]/packages/server/src/lib/workspace-types.ts","turbopack:///[project]/packages/server/src/app/api/batch-list-submodule-branches/route.ts","turbopack:///[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/src/build/templates/app-route.ts"],"sourcesContent":["import { homedir, cpus } from 'os';\nimport { join } from 'path';\n\n/**\n * 工作空间配置常量\n */\nexport const WORKSPACE_CONFIG = {\n // 工作空间根目录路径\n WORKSPACE_ROOT: join(homedir(), 'Documents', 'prime-workspace'),\n\n // Git 操作超时时间 (毫秒)\n GIT_TIMEOUT: 300000, // 5分钟\n\n // 最大并发克隆数量(基于CPU核心数,最小2个,最大8个)\n MAX_CONCURRENT_CLONES: Math.max(2, Math.min(cpus().length, 8)),\n\n // 重试次数限制\n MAX_RETRY_ATTEMPTS: 3,\n} as const;\n\nexport const PROJECT_CONFIG_PATH = join(homedir(), '.prime-projects.json');\n\nexport interface ApiProxyRewrite {\n mode: 'none' | 'remove' | 'replace';\n targetPrefix?: string;\n}\n\nexport interface ApiProxyItem {\n prefix: string;\n proxyKey?: string;\n currentProxy: string;\n proxyEnv: {\n [key: string]: string;\n };\n rewrite?: ApiProxyRewrite;\n}\n\nexport interface ProjectConfig {\n repo: string;\n mockingIntercept?: boolean;\n mockOpen?: boolean;\n envs: {\n [envName: string]: {\n host: string;\n envFileName: string;\n apiProxies: ApiProxyItem[];\n subApps?: string[];\n startCommand?: string;\n /**\n * 微应用路径标识:用于在共享宿主(micro-app 域名)下区分兄弟子应用。\n * 插件按 micro-app 元素的 default-page / url 是否“包含”该值来选中对应本地 host。\n * 例如 micro-components 为 \"/micro/components\"、360-icrc-site 为 \"/micro/360-icrc-site\"。\n */\n microPath?: string;\n };\n };\n}\n\nexport interface ProjectsConfig {\n [projectName: string]: ProjectConfig;\n}\n\n/**\n * 项目状态枚举\n */\nexport enum ProjectStatus {\n PENDING = 'pending',\n EXISTING = 'existing',\n CLONING = 'cloning',\n SUCCESS = 'success',\n FAILED = 'failed',\n RETRYING = 'retrying',\n INCOMPLETE = 'incomplete', // 不完整的项目,需要清理\n}\n\n/**\n * 项目进度信息接口\n */\nexport interface ProjectProgress {\n projectName: string;\n status: ProjectStatus;\n progress: number; // 0-100\n message: string;\n error?: string;\n startTime?: number;\n endTime?: number;\n}\n\n/**\n * 初始化结果接口\n */\nexport interface InitializationResult {\n success: boolean;\n totalProjects: number;\n successCount: number;\n failedCount: number;\n failedProjects: string[];\n workspacePath: string;\n duration: number;\n}\n\n/**\n * Git 操作配置接口\n */\nexport interface GitOperationConfig {\n repoUrl: string;\n projectName?: string;\n targetDir: string;\n timeout: number;\n onProgress?: (progress: number, message: string) => void;\n onError?: (error: string) => void;\n onLog?: (projectName: string, logType: 'stdout' | 'stderr' | 'progress', content: string) => void;\n}\n","import { NextRequest, NextResponse } from 'next/server';\nimport { spawn } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { WORKSPACE_CONFIG } from '@/lib/workspace-types';\n\n// 子仓库固定路径:项目根目录下的 submodules/common\nconst SUB_PATH = 'submodules/common';\n\ntype GitResult = {\n code: number | null;\n stdout: string;\n stderr: string;\n};\n\nfunction runGitCommand(cwd: string, args: string[]): Promise<GitResult> {\n return new Promise((resolve, reject) => {\n const child = spawn('git', args, {\n cwd,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n resolve({ code, stdout, stderr });\n });\n\n child.on('error', (error) => {\n reject(error);\n });\n });\n}\n\n/**\n * 批量获取多个项目 submodules/common 子仓库的远程分支聚合去重列表。\n * 仅统计当前分支跟踪该子仓库(gitlink mode 160000)的项目;\n * 未跟踪的项目直接跳过(不属于失败)。\n * 每次调用都会重新执行 git ls-remote,保证分支列表最新。\n */\nexport async function POST(request: NextRequest) {\n try {\n const body = await request.json();\n const rawProjects: unknown = Array.isArray(body.projects) ? body.projects : [];\n const projects = (rawProjects as unknown[])\n .map((item) => String(item).trim())\n .filter(Boolean);\n\n if (projects.length === 0) {\n return NextResponse.json({\n success: false,\n error: '缺少项目列表参数'\n }, { status: 400 });\n }\n\n const workspacePath = WORKSPACE_CONFIG.WORKSPACE_ROOT;\n\n // 并发获取所有项目的子仓库远程分支\n const results = await Promise.all(\n projects.map(async (projectName: string) => {\n const projectPath = join(workspacePath, projectName);\n\n if (!existsSync(projectPath) || !existsSync(join(projectPath, '.git'))) {\n return { projectName, branches: [] as string[], error: '项目不存在或不是Git仓库' };\n }\n\n // 子仓库目录不存在或不是 git 仓库:跳过(不展示)\n const subPath = join(projectPath, SUB_PATH);\n if (!existsSync(subPath) || !existsSync(join(subPath, '.git'))) {\n return { projectName, branches: [] as string[], error: null };\n }\n\n // 检查主仓库当前分支是否跟踪该路径(gitlink mode 160000),未跟踪则跳过\n const trackResult = await runGitCommand(projectPath, ['ls-files', '-s', SUB_PATH]);\n if (trackResult.code !== 0 || !trackResult.stdout.trim().startsWith('160000')) {\n return { projectName, branches: [] as string[], error: null };\n }\n\n try {\n const result = await runGitCommand(subPath, ['ls-remote', '--heads', 'origin']);\n if (result.code !== 0) {\n const rawError = result.stderr.trim() || result.stdout.trim();\n return { projectName, branches: [] as string[], error: rawError.slice(0, 150) || '获取子仓库远程分支失败' };\n }\n\n const branches: string[] = [];\n result.stdout.split('\\n').forEach((line) => {\n const match = line.trim().match(/^[0-9a-f]+\\trefs\\/heads\\/(.+)$/);\n if (match) {\n const branchName = match[1].trim();\n if (branchName) branches.push(branchName);\n }\n });\n return { projectName, branches, error: null };\n } catch (err) {\n return { projectName, branches: [] as string[], error: err instanceof Error ? err.message : '执行失败' };\n }\n }),\n );\n\n // 聚合去重(未跟踪/无子仓库的项目 branches 为空,自然不贡献分支)\n const branchSet = new Set<string>();\n const failedProjects: Array<{ projectName: string; reason: string }> = [];\n results.forEach((result) => {\n if (result.error) {\n failedProjects.push({ projectName: result.projectName, reason: result.error });\n }\n result.branches.forEach((branch: string) => branchSet.add(branch));\n });\n\n return NextResponse.json({\n success: true,\n branches: Array.from(branchSet).sort((a, b) => a.localeCompare(b)),\n failedProjects,\n });\n } catch (error) {\n console.error('批量获取子仓库远程分支失败:', error);\n return NextResponse.json({\n success: false,\n error: error instanceof Error ? error.message : '批量获取子仓库远程分支失败'\n }, { status: 500 });\n }\n}\n","import {\n AppRouteRouteModule,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\n\nimport * as userland from 'VAR_USERLAND'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n userland,\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n"],"names":["AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","userland","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","resolvedPagePath","nextConfigOutput","workAsyncStorage","workUnitAsyncStorage","serverHooks"],"mappings":"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","ignoreList":[2]}
@@ -0,0 +1,3 @@
1
+ module.exports={45935:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},30331:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("path",()=>require("path"))},29549:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},83943:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},86103:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},23430:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},52670:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-route-turbo.runtime.prod.js"))},13442:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("os",()=>require("os"))},88941:e=>{"use strict";var{g:r,__dirname:t}=e;{e.s({PROJECT_CONFIG_PATH:()=>t,ProjectStatus:()=>o,WORKSPACE_CONFIG:()=>r});var s=e.i(13442),n=e.i(30331);let r={WORKSPACE_ROOT:(0,n.join)((0,s.homedir)(),"Documents","prime-workspace"),GIT_TIMEOUT:3e5,MAX_CONCURRENT_CLONES:Math.max(2,Math.min((0,s.cpus)().length,8)),MAX_RETRY_ATTEMPTS:3},t=(0,n.join)((0,s.homedir)(),".prime-projects.json");var o=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e.INCOMPLETE="incomplete",e}({})}},83886:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("fs",()=>require("fs"))},87485:function(e){var{g:r,__dirname:t,m:s,e:n}=e;s.exports=e.x("child_process",()=>require("child_process"))},47025:function(e){var{g:r,__dirname:t,m:s,e:n}=e},16020:e=>{"use strict";var{g:r,__dirname:t}=e;e.s({POST:()=>c});var s=e.i(15494),n=e.i(87485),o=e.i(83886),a=e.i(30331),i=e.i(88941);async function c(e){try{let r=await e.json(),t=(Array.isArray(r.projects)?r.projects:[]).map(e=>String(e).trim()).filter(Boolean);if(0===t.length)return s.NextResponse.json({success:!1,error:"缺少项目列表参数"},{status:400});let c=i.WORKSPACE_CONFIG.WORKSPACE_ROOT,p=await Promise.all(t.map(async e=>{let r=(0,a.join)(c,e);if(!(0,o.existsSync)(r)||!(0,o.existsSync)((0,a.join)(r,".git")))return{projectName:e,branches:[],error:"项目不存在或不是Git仓库"};try{var t;let s=await (t=["ls-remote","--heads","origin"],new Promise((e,s)=>{let o=(0,n.spawn)("git",t,{cwd:r,stdio:["ignore","pipe","pipe"]}),a="",i="";o.stdout?.on("data",e=>{a+=e.toString()}),o.stderr?.on("data",e=>{i+=e.toString()}),o.on("close",r=>{e({code:r,stdout:a,stderr:i})}),o.on("error",e=>{s(e)})}));if(0!==s.code){let r=s.stderr.trim()||s.stdout.trim();return{projectName:e,branches:[],error:r.slice(0,150)||"获取远程分支失败"}}let o=[];return s.stdout.split("\n").forEach(e=>{let r=e.trim().match(/^[0-9a-f]+\trefs\/heads\/(.+)$/);if(r){let e=r[1].trim();e&&o.push(e)}}),{projectName:e,branches:o,error:null}}catch(r){return{projectName:e,branches:[],error:r instanceof Error?r.message:"执行失败"}}})),u=new Set,d=[];return p.forEach(e=>{e.error&&d.push({projectName:e.projectName,reason:e.error}),e.branches.forEach(e=>u.add(e))}),s.NextResponse.json({success:!0,branches:Array.from(u).sort((e,r)=>e.localeCompare(r)),failedProjects:d})}catch(e){return console.error("批量获取远程分支失败:",e),s.NextResponse.json({success:!1,error:e instanceof Error?e.message:"批量获取远程分支失败"},{status:500})}}},62234:e=>{"use strict";var{g:r,__dirname:t}=e;{e.s({patchFetch:()=>i,routeModule:()=>r,serverHooks:()=>p,workAsyncStorage:()=>t,workUnitAsyncStorage:()=>c});var s=e.i(45746),n=e.i(93828),o=e.i(18250),a=e.i(16020);let r=new s.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/batch-list-branches/route",pathname:"/api/batch-list-branches",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/batch-list-branches/route.ts",nextConfigOutput:"",userland:a}),{workAsyncStorage:t,workUnitAsyncStorage:c,serverHooks:p}=r;function i(){return(0,o.patchFetch)({workAsyncStorage:t,workUnitAsyncStorage:c})}}}};
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__c52380bc._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["turbopack:///[project]/packages/server/src/lib/workspace-types.ts","turbopack:///[project]/packages/server/src/app/api/batch-list-branches/route.ts","turbopack:///[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/src/build/templates/app-route.ts"],"sourcesContent":["import { homedir, cpus } from 'os';\nimport { join } from 'path';\n\n/**\n * 工作空间配置常量\n */\nexport const WORKSPACE_CONFIG = {\n // 工作空间根目录路径\n WORKSPACE_ROOT: join(homedir(), 'Documents', 'prime-workspace'),\n\n // Git 操作超时时间 (毫秒)\n GIT_TIMEOUT: 300000, // 5分钟\n\n // 最大并发克隆数量(基于CPU核心数,最小2个,最大8个)\n MAX_CONCURRENT_CLONES: Math.max(2, Math.min(cpus().length, 8)),\n\n // 重试次数限制\n MAX_RETRY_ATTEMPTS: 3,\n} as const;\n\nexport const PROJECT_CONFIG_PATH = join(homedir(), '.prime-projects.json');\n\nexport interface ApiProxyRewrite {\n mode: 'none' | 'remove' | 'replace';\n targetPrefix?: string;\n}\n\nexport interface ApiProxyItem {\n prefix: string;\n proxyKey?: string;\n currentProxy: string;\n proxyEnv: {\n [key: string]: string;\n };\n rewrite?: ApiProxyRewrite;\n}\n\nexport interface ProjectConfig {\n repo: string;\n mockingIntercept?: boolean;\n mockOpen?: boolean;\n envs: {\n [envName: string]: {\n host: string;\n envFileName: string;\n apiProxies: ApiProxyItem[];\n subApps?: string[];\n startCommand?: string;\n /**\n * 微应用路径标识:用于在共享宿主(micro-app 域名)下区分兄弟子应用。\n * 插件按 micro-app 元素的 default-page / url 是否“包含”该值来选中对应本地 host。\n * 例如 micro-components 为 \"/micro/components\"、360-icrc-site 为 \"/micro/360-icrc-site\"。\n */\n microPath?: string;\n };\n };\n}\n\nexport interface ProjectsConfig {\n [projectName: string]: ProjectConfig;\n}\n\n/**\n * 项目状态枚举\n */\nexport enum ProjectStatus {\n PENDING = 'pending',\n EXISTING = 'existing',\n CLONING = 'cloning',\n SUCCESS = 'success',\n FAILED = 'failed',\n RETRYING = 'retrying',\n INCOMPLETE = 'incomplete', // 不完整的项目,需要清理\n}\n\n/**\n * 项目进度信息接口\n */\nexport interface ProjectProgress {\n projectName: string;\n status: ProjectStatus;\n progress: number; // 0-100\n message: string;\n error?: string;\n startTime?: number;\n endTime?: number;\n}\n\n/**\n * 初始化结果接口\n */\nexport interface InitializationResult {\n success: boolean;\n totalProjects: number;\n successCount: number;\n failedCount: number;\n failedProjects: string[];\n workspacePath: string;\n duration: number;\n}\n\n/**\n * Git 操作配置接口\n */\nexport interface GitOperationConfig {\n repoUrl: string;\n projectName?: string;\n targetDir: string;\n timeout: number;\n onProgress?: (progress: number, message: string) => void;\n onError?: (error: string) => void;\n onLog?: (projectName: string, logType: 'stdout' | 'stderr' | 'progress', content: string) => void;\n}\n","import { NextRequest, NextResponse } from 'next/server';\nimport { spawn } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { WORKSPACE_CONFIG } from '@/lib/workspace-types';\n\ntype GitResult = {\n code: number | null;\n stdout: string;\n stderr: string;\n};\n\nfunction runGitCommand(cwd: string, args: string[]): Promise<GitResult> {\n return new Promise((resolve, reject) => {\n const child = spawn('git', args, {\n cwd,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n resolve({ code, stdout, stderr });\n });\n\n child.on('error', (error) => {\n reject(error);\n });\n });\n}\n\n/**\n * 批量获取多个项目所有远程分支的聚合去重列表。\n * 每次调用都会重新执行 git ls-remote,保证分支列表最新。\n */\nexport async function POST(request: NextRequest) {\n try {\n const body = await request.json();\n const rawProjects: unknown = Array.isArray(body.projects) ? body.projects : [];\n const projects = (rawProjects as unknown[])\n .map((item) => String(item).trim())\n .filter(Boolean);\n\n if (projects.length === 0) {\n return NextResponse.json({\n success: false,\n error: '缺少项目列表参数'\n }, { status: 400 });\n }\n\n const workspacePath = WORKSPACE_CONFIG.WORKSPACE_ROOT;\n\n // 并发获取所有项目的远程分支\n const results = await Promise.all(\n projects.map(async (projectName: string) => {\n const projectPath = join(workspacePath, projectName);\n\n if (!existsSync(projectPath) || !existsSync(join(projectPath, '.git'))) {\n return { projectName, branches: [] as string[], error: '项目不存在或不是Git仓库' };\n }\n\n try {\n const result = await runGitCommand(projectPath, ['ls-remote', '--heads', 'origin']);\n if (result.code !== 0) {\n const rawError = result.stderr.trim() || result.stdout.trim();\n return { projectName, branches: [] as string[], error: rawError.slice(0, 150) || '获取远程分支失败' };\n }\n\n const branches: string[] = [];\n result.stdout.split('\\n').forEach((line) => {\n const match = line.trim().match(/^[0-9a-f]+\\trefs\\/heads\\/(.+)$/);\n if (match) {\n const branchName = match[1].trim();\n if (branchName) branches.push(branchName);\n }\n });\n return { projectName, branches, error: null };\n } catch (err) {\n return { projectName, branches: [] as string[], error: err instanceof Error ? err.message : '执行失败' };\n }\n }),\n );\n\n // 聚合去重\n const branchSet = new Set<string>();\n const failedProjects: Array<{ projectName: string; reason: string }> = [];\n results.forEach((result) => {\n if (result.error) {\n failedProjects.push({ projectName: result.projectName, reason: result.error });\n }\n result.branches.forEach((branch: string) => branchSet.add(branch));\n });\n\n return NextResponse.json({\n success: true,\n branches: Array.from(branchSet).sort((a, b) => a.localeCompare(b)),\n failedProjects,\n });\n } catch (error) {\n console.error('批量获取远程分支失败:', error);\n return NextResponse.json({\n success: false,\n error: error instanceof Error ? error.message : '批量获取远程分支失败'\n }, { status: 500 });\n }\n}\n","import {\n AppRouteRouteModule,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\n\nimport * as userland from 'VAR_USERLAND'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n userland,\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n"],"names":["AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","userland","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","resolvedPagePath","nextConfigOutput","workAsyncStorage","workUnitAsyncStorage","serverHooks"],"mappings":"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","ignoreList":[2]}
@@ -3,6 +3,6 @@ ${b}`))}function D(){if(!P)throw Object.defineProperty(Error("Invariant: React.u
3
3
 
4
4
  If you want to hide the \`${b.titleName}\`, you can wrap it with our VisuallyHidden component.
5
5
 
6
- For more information, see https://radix-ui.com/primitives/docs/components/${b.docsSlug}`;return(0,d.useEffect)(()=>{a&&(document.getElementById(a)||console.error(c))},[c,a]),null},Z=({contentRef:a,descriptionId:b})=>{let c=X("DialogDescriptionWarning"),e=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${c.contentName}}.`;return(0,d.useEffect)(()=>{let c=a.current?.getAttribute("aria-describedby");b&&c&&(document.getElementById(b)||console.warn(e))},[e,a,b]),null},$=y,_=A,aa=E,ab=G,ac=K,ad=P,ae=R,af=T},76315:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({__iconNode:()=>b,default:()=>c});var d=a.i(49756);let b=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],c=(0,d.default)("x",b)}},97231:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({XIcon:()=>d.default});var d=a.i(76315)},22529:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({Dialog:()=>h,DialogClose:()=>k,DialogContent:()=>m,DialogDescription:()=>q,DialogFooter:()=>o,DialogHeader:()=>n,DialogOverlay:()=>l,DialogPortal:()=>j,DialogTitle:()=>p,DialogTrigger:()=>i});var d=a.i(99559),e=a.i(38047),f=a.i(97231),g=a.i(61073);function h({...a}){return(0,d.jsx)(e.Root,{"data-slot":"dialog",...a})}function i({...a}){return(0,d.jsx)(e.Trigger,{"data-slot":"dialog-trigger",...a})}function j({...a}){return(0,d.jsx)(e.Portal,{"data-slot":"dialog-portal",...a})}function k({...a}){return(0,d.jsx)(e.Close,{"data-slot":"dialog-close",...a})}function l({className:a,...b}){return(0,d.jsx)(e.Overlay,{"data-slot":"dialog-overlay",className:(0,g.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",a),...b})}function m({className:a,children:b,showCloseButton:c=!0,...h}){return(0,d.jsxs)(j,{"data-slot":"dialog-portal",children:[(0,d.jsx)(l,{}),(0,d.jsxs)(e.Content,{"data-slot":"dialog-content",className:(0,g.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200",a),...h,children:[b,c&&(0,d.jsxs)(e.Close,{"data-slot":"dialog-close",className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,d.jsx)(f.XIcon,{}),(0,d.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function n({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"dialog-header",className:(0,g.cn)("flex flex-col gap-2 text-center sm:text-left",a),...b})}function o({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"dialog-footer",className:(0,g.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",a),...b})}function p({className:a,...b}){return(0,d.jsx)(e.Title,{"data-slot":"dialog-title",className:(0,g.cn)("text-lg leading-none font-semibold",a),...b})}function q({className:a,...b}){return(0,d.jsx)(e.Description,{"data-slot":"dialog-description",className:(0,g.cn)("text-muted-foreground text-sm",a),...b})}},56414:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({BRANCH_DISPLAY_LIMIT:()=>b,filterBranchOptions:()=>d,intersectBranchLists:()=>e});let b=5;function d(a,c,e=b){let f=c.trim().toLowerCase(),g=f?a.filter(a=>a.toLowerCase().includes(f)):a;return{visible:g.slice(0,e),total:g.length}}function e(a){let b=a.filter(a=>a.length>0);if(0===b.length)return[];let c=new Set(b[0]);for(let a=1;a<b.length;a++){let d=new Set(b[a]);c=new Set([...c].filter(a=>d.has(a)))}return Array.from(c).sort((a,b)=>a.localeCompare(b))}}}};
6
+ For more information, see https://radix-ui.com/primitives/docs/components/${b.docsSlug}`;return(0,d.useEffect)(()=>{a&&(document.getElementById(a)||console.error(c))},[c,a]),null},Z=({contentRef:a,descriptionId:b})=>{let c=X("DialogDescriptionWarning"),e=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${c.contentName}}.`;return(0,d.useEffect)(()=>{let c=a.current?.getAttribute("aria-describedby");b&&c&&(document.getElementById(b)||console.warn(e))},[e,a,b]),null},$=y,_=A,aa=E,ab=G,ac=K,ad=P,ae=R,af=T},76315:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({__iconNode:()=>b,default:()=>c});var d=a.i(49756);let b=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],c=(0,d.default)("x",b)}},97231:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({XIcon:()=>d.default});var d=a.i(76315)},22529:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({Dialog:()=>h,DialogClose:()=>k,DialogContent:()=>m,DialogDescription:()=>q,DialogFooter:()=>o,DialogHeader:()=>n,DialogOverlay:()=>l,DialogPortal:()=>j,DialogTitle:()=>p,DialogTrigger:()=>i});var d=a.i(99559),e=a.i(38047),f=a.i(97231),g=a.i(61073);function h({...a}){return(0,d.jsx)(e.Root,{"data-slot":"dialog",...a})}function i({...a}){return(0,d.jsx)(e.Trigger,{"data-slot":"dialog-trigger",...a})}function j({...a}){return(0,d.jsx)(e.Portal,{"data-slot":"dialog-portal",...a})}function k({...a}){return(0,d.jsx)(e.Close,{"data-slot":"dialog-close",...a})}function l({className:a,...b}){return(0,d.jsx)(e.Overlay,{"data-slot":"dialog-overlay",className:(0,g.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",a),...b})}function m({className:a,children:b,showCloseButton:c=!0,...h}){return(0,d.jsxs)(j,{"data-slot":"dialog-portal",children:[(0,d.jsx)(l,{}),(0,d.jsxs)(e.Content,{"data-slot":"dialog-content",className:(0,g.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200",a),...h,children:[b,c&&(0,d.jsxs)(e.Close,{"data-slot":"dialog-close",className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,d.jsx)(f.XIcon,{}),(0,d.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function n({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"dialog-header",className:(0,g.cn)("flex flex-col gap-2 text-center sm:text-left",a),...b})}function o({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"dialog-footer",className:(0,g.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",a),...b})}function p({className:a,...b}){return(0,d.jsx)(e.Title,{"data-slot":"dialog-title",className:(0,g.cn)("text-lg leading-none font-semibold",a),...b})}function q({className:a,...b}){return(0,d.jsx)(e.Description,{"data-slot":"dialog-description",className:(0,g.cn)("text-muted-foreground text-sm",a),...b})}},56414:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({BRANCH_DISPLAY_LIMIT:()=>b,filterBranchOptions:()=>d});let b=5;function d(a,c,e=b){let f=c.trim().toLowerCase(),g=f?a.filter(a=>a.toLowerCase().includes(f)):a;return{visible:g.slice(0,e),total:g.length}}}}};
7
7
 
8
8
  //# sourceMappingURL=_283bdc73._.js.map