prime-dev-cli 2.0.8 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/projects.json +80 -24
- package/dist/server/.next/BUILD_ID +1 -1
- package/dist/server/.next/app-build-manifest.json +3 -3
- package/dist/server/.next/build-manifest.json +2 -2
- package/dist/server/.next/cache/.rscinfo +1 -1
- package/dist/server/.next/cache/.tsbuildinfo +1 -1
- package/dist/server/.next/cache/eslint/.cache_1qa5vxt +1 -1
- package/dist/server/.next/fallback-build-manifest.json +2 -2
- package/dist/server/.next/next-minimal-server.js.nft.json +1 -1
- package/dist/server/.next/next-server.js.nft.json +1 -1
- package/dist/server/.next/prerender-manifest.json +9 -9
- package/dist/server/.next/server/app/_not-found.html +1 -1
- package/dist/server/.next/server/app/_not-found.rsc +1 -1
- package/dist/server/.next/server/app/api/admin-git-batch-create-branch/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/admin-git-batch-merge/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/admin-git-batch-probe-remote-branch/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/batch-switch-branch/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/batch-switch-submodule-branch/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/branch/switch/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/branches/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/check-workspace/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/gwh-git-flow/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/initialize-workspace/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/microapp-proxy-config/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/open-project/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/project-config/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/retry-project/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/submodule-info/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/uat-git-flow/route.js +2 -2
- package/dist/server/.next/server/app/api/uat-git-flow/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/uat-git-flow/step/route.js +2 -2
- package/dist/server/.next/server/app/api/uat-git-flow/step/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/configuration/page/app-build-manifest.json +1 -1
- package/dist/server/.next/server/app/configuration/page_client-reference-manifest.js +1 -1
- package/dist/server/.next/server/app/configuration.html +1 -1
- package/dist/server/.next/server/app/configuration.rsc +2 -2
- package/dist/server/.next/server/app/index.html +1 -1
- package/dist/server/.next/server/app/index.rsc +1 -1
- package/dist/server/.next/server/app/initialization/page/app-build-manifest.json +2 -2
- package/dist/server/.next/server/app/initialization/page.js.nft.json +1 -1
- package/dist/server/.next/server/app/initialization/page_client-reference-manifest.js +1 -1
- package/dist/server/.next/server/app/initialization.html +1 -1
- package/dist/server/.next/server/app/initialization.rsc +2 -2
- package/dist/server/.next/server/chunks/_24087f66._.js +1 -1
- package/dist/server/.next/server/chunks/_24087f66._.js.map +1 -1
- package/dist/server/.next/server/chunks/_61c263b3._.js +1 -1
- package/dist/server/.next/server/chunks/_61c263b3._.js.map +1 -1
- package/dist/server/.next/server/chunks/packages_server_42b02aec._.js +3 -0
- package/dist/server/.next/server/chunks/packages_server_42b02aec._.js.map +1 -0
- package/dist/server/.next/server/chunks/packages_server_854cbe00._.js +3 -0
- package/dist/server/.next/server/chunks/packages_server_854cbe00._.js.map +1 -0
- package/dist/server/.next/server/chunks/ssr/_283bdc73._.js +1 -1
- package/dist/server/.next/server/chunks/ssr/_283bdc73._.js.map +1 -1
- package/dist/server/.next/server/chunks/ssr/_c7905e3c._.js +1 -1
- package/dist/server/.next/server/chunks/ssr/_c7905e3c._.js.map +1 -1
- package/dist/server/.next/server/chunks/ssr/packages_server_src_622c27d6._.js +3 -0
- package/dist/server/.next/server/chunks/ssr/packages_server_src_622c27d6._.js.map +1 -0
- package/dist/server/.next/server/pages/404.html +1 -1
- package/dist/server/.next/server/pages/500.html +1 -1
- package/dist/server/.next/server/server-reference-manifest.js +1 -1
- package/dist/server/.next/server/server-reference-manifest.json +1 -1
- package/dist/server/.next/static/chunks/16b23f7570a551e1.js +3 -0
- package/dist/server/.next/static/chunks/{45543bd9f83f509f.js → 4e8de43e1f6c5336.js} +2 -2
- package/dist/server/.next/static/chunks/{8e1056102ab0be45.js.map → 84a2f16086c26ab1.js.map} +1 -1
- package/dist/server/.next/static/chunks/b109f2fb91f36e31.js.map +1 -0
- package/dist/server/.next/static/chunks/{4c54a6f1b63a5c72.js → f3137530db91c282.js} +2 -2
- package/dist/server/.next/static/chunks/{0e959ec3ce9fc799.js.map → fa09d2a29cc42906.js.map} +1 -1
- package/dist/server/.next/trace +2 -2
- package/package.json +1 -1
- package/plugin-marketplace/plugins/prime-dev-cli/skills/prime-workspace/SKILL.md +112 -22
- package/skills/prime-workspace/README.md +20 -2
- package/skills/prime-workspace/SKILL.md +510 -214
- package/skills/prime-workspace/references/api-contracts.md +125 -0
- package/skills/prime-workspace/references/microfrontend-proxy.md +155 -0
- package/dist/server/.next/server/chunks/packages_server_ccc16996._.js +0 -3
- package/dist/server/.next/server/chunks/packages_server_ccc16996._.js.map +0 -1
- package/dist/server/.next/server/chunks/packages_server_d1209331._.js +0 -3
- package/dist/server/.next/server/chunks/packages_server_d1209331._.js.map +0 -1
- package/dist/server/.next/server/chunks/ssr/packages_server_src_65e3de99._.js +0 -3
- package/dist/server/.next/server/chunks/ssr/packages_server_src_65e3de99._.js.map +0 -1
- package/dist/server/.next/static/chunks/4608598ca6cc0991.js.map +0 -1
- package/dist/server/.next/static/chunks/fce82d5fa17f0367.js +0 -3
- /package/dist/server/.next/static/{TtpaZZwrnzkXloBpwEr24 → zjt6jXsNQxDdU-RHF8TC7}/_buildManifest.js +0 -0
- /package/dist/server/.next/static/{TtpaZZwrnzkXloBpwEr24 → zjt6jXsNQxDdU-RHF8TC7}/_clientMiddlewareManifest.json +0 -0
- /package/dist/server/.next/static/{TtpaZZwrnzkXloBpwEr24 → zjt6jXsNQxDdU-RHF8TC7}/_ssgManifest.js +0 -0
|
@@ -7,7 +7,7 @@ a:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"ViewportBoundary"]
|
|
|
7
7
|
c:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"MetadataBoundary"]
|
|
8
8
|
e:I[71163,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
|
|
9
9
|
:HL["/_next/static/chunks/1427afaf93da978b.css","style"]
|
|
10
|
-
0:{"P":null,"b":"
|
|
10
|
+
0:{"P":null,"b":"zjt6jXsNQxDdU-RHF8TC7","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1427afaf93da978b.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":["$L4",null,["$","$L5",null,{"children":["$L6","$L7",["$","$L8",null,{"promise":"$@9"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","MU5nHTn9KlgDlHpNnntyIv",{"children":[["$","$La",null,{"children":"$Lb"}],null]}],["$","$Lc",null,{"children":"$Ld"}]]}],false]],"m":"$undefined","G":["$e","$undefined"],"s":false,"S":true}
|
|
11
11
|
4:E{"digest":"NEXT_REDIRECT;replace;/initialization;307;"}
|
|
12
12
|
f:"$Sreact.suspense"
|
|
13
13
|
10:I[73794,["/_next/static/chunks/ecfccf4677b4777a.js"],"AsyncMetadata"]
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"/initialization/page": [
|
|
4
4
|
"static/chunks/ecfccf4677b4777a.js",
|
|
5
5
|
"static/chunks/1427afaf93da978b.css",
|
|
6
|
-
"static/chunks/
|
|
7
|
-
"static/chunks/
|
|
6
|
+
"static/chunks/16b23f7570a551e1.js",
|
|
7
|
+
"static/chunks/f3137530db91c282.js",
|
|
8
8
|
"static/chunks/1923d6510bea25be.js",
|
|
9
9
|
"static/chunks/0e57f1354cda05d5.js",
|
|
10
10
|
"static/chunks/e5e4fd3e83ab66f8.js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":1,"files":["../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/app-router-headers.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/clean-async-snapshot.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/trace/constants.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/package.json","../../../../../../node_modules/.pnpm/node_modules/next","../../../../../../node_modules/next","../../../../node_modules/next","../../chunks/ssr/9bf22_next_dist_0c9074c5._.js","../../chunks/ssr/9bf22_next_dist_client_components_forbidden-error_bdb9d650.js","../../chunks/ssr/9bf22_next_dist_client_components_unauthorized-error_67370d77.js","../../chunks/ssr/[root-of-the-server]__2e9964e3._.js","../../chunks/ssr/[root-of-the-server]__7b253128._.js","../../chunks/ssr/[root-of-the-server]__828c7089._.js","../../chunks/ssr/[root-of-the-server]__a085452f._.js","../../chunks/ssr/[root-of-the-server]__b0aa0fa4._.js","../../chunks/ssr/[turbopack]_runtime.js","../../chunks/ssr/_89496b8a._.js","../../chunks/ssr/_c7905e3c._.js","../../chunks/ssr/node_modules__pnpm_bde53e93._.js","../../chunks/ssr/node_modules__pnpm_da0d20e8._.js","../../chunks/ssr/
|
|
1
|
+
{"version":1,"files":["../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/app-router-headers.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/clean-async-snapshot.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/trace/constants.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/package.json","../../../../../../node_modules/.pnpm/node_modules/next","../../../../../../node_modules/next","../../../../node_modules/next","../../chunks/ssr/9bf22_next_dist_0c9074c5._.js","../../chunks/ssr/9bf22_next_dist_client_components_forbidden-error_bdb9d650.js","../../chunks/ssr/9bf22_next_dist_client_components_unauthorized-error_67370d77.js","../../chunks/ssr/[root-of-the-server]__2e9964e3._.js","../../chunks/ssr/[root-of-the-server]__7b253128._.js","../../chunks/ssr/[root-of-the-server]__828c7089._.js","../../chunks/ssr/[root-of-the-server]__a085452f._.js","../../chunks/ssr/[root-of-the-server]__b0aa0fa4._.js","../../chunks/ssr/[turbopack]_runtime.js","../../chunks/ssr/_89496b8a._.js","../../chunks/ssr/_c7905e3c._.js","../../chunks/ssr/node_modules__pnpm_bde53e93._.js","../../chunks/ssr/node_modules__pnpm_da0d20e8._.js","../../chunks/ssr/packages_server_src_622c27d6._.js","../../chunks/ssr/packages_server_src_app_eb845476._.js","../../chunks/ssr/packages_server_src_eb289b89._.js","./page/react-loadable-manifest.json","./page_client-reference-manifest.js"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {};
|
|
2
|
-
globalThis.__RSC_MANIFEST["/initialization/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/packages/server/src/components/project-initializer.tsx <module evaluation>":{"id":9993,"name":"*","chunks":["/_next/static/chunks/
|
|
2
|
+
globalThis.__RSC_MANIFEST["/initialization/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/packages/server/src/components/project-initializer.tsx <module evaluation>":{"id":9993,"name":"*","chunks":["/_next/static/chunks/16b23f7570a551e1.js","/_next/static/chunks/f3137530db91c282.js"],"async":false},"[project]/packages/server/src/components/project-initializer.tsx":{"id":9993,"name":"*","chunks":["/_next/static/chunks/16b23f7570a551e1.js","/_next/static/chunks/f3137530db91c282.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/error-boundary.js <module evaluation>":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/error-boundary.js":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/layout-router.js <module evaluation>":{"id":55889,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/layout-router.js":{"id":55889,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/render-from-template-context.js <module evaluation>":{"id":54799,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":54799,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/client-page.js <module evaluation>":{"id":4962,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/client-page.js":{"id":4962,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/client-segment.js <module evaluation>":{"id":60374,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/client-segment.js":{"id":60374,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js <module evaluation>":{"id":94238,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":94238,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/metadata/async-metadata.js <module evaluation>":{"id":73794,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/metadata/async-metadata.js":{"id":73794,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/error-boundary.js <module evaluation>":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":71163,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/metadata/metadata-boundary.js <module evaluation>":{"id":67903,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false},"[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/esm/client/components/metadata/metadata-boundary.js":{"id":67903,"name":"*","chunks":["/_next/static/chunks/ecfccf4677b4777a.js"],"async":false}},"ssrModuleMapping":{"9993":{"*":{"id":90250,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__a085452f._.js","server/chunks/ssr/_c7905e3c._.js","server/chunks/ssr/packages_server_src_622c27d6._.js"],"async":false}},"71163":{"*":{"id":77342,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"55889":{"*":{"id":60752,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"54799":{"*":{"id":98696,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"4962":{"*":{"id":18263,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"60374":{"*":{"id":29996,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"94238":{"*":{"id":16477,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"73794":{"*":{"id":15890,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}},"67903":{"*":{"id":17423,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__7b253128._.js","server/chunks/ssr/node_modules__pnpm_da0d20e8._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"9993":{"*":{"id":23352,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"71163":{"*":{"id":61928,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"55889":{"*":{"id":47058,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"54799":{"*":{"id":10287,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"4962":{"*":{"id":23309,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"60374":{"*":{"id":21696,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"94238":{"*":{"id":46950,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"73794":{"*":{"id":35824,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}},"67903":{"*":{"id":79641,"name":"*","chunks":["server/app/initialization/page.js"],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/packages/server/src/app/favicon.ico":[],"[project]/packages/server/src/app/layout":[{"path":"static/chunks/1427afaf93da978b.css","inlined":false}],"[project]/packages/server/src/app/initialization/page":[{"path":"static/chunks/1427afaf93da978b.css","inlined":false}]},"entryJSFiles":{"[project]/packages/server/src/app/favicon.ico":["static/chunks/ecfccf4677b4777a.js"],"[project]/packages/server/src/app/layout":[],"[project]/packages/server/src/app/initialization/page":["static/chunks/16b23f7570a551e1.js","static/chunks/f3137530db91c282.js"]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/1427afaf93da978b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1923d6510bea25be.js"/><script src="/_next/static/chunks/0e57f1354cda05d5.js" async=""></script><script src="/_next/static/chunks/e5e4fd3e83ab66f8.js" async=""></script><script src="/_next/static/chunks/c4c1da381d908575.js" async=""></script><script src="/_next/static/chunks/ecfccf4677b4777a.js" async=""></script><script src="/_next/static/chunks/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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/1427afaf93da978b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1923d6510bea25be.js"/><script src="/_next/static/chunks/0e57f1354cda05d5.js" async=""></script><script src="/_next/static/chunks/e5e4fd3e83ab66f8.js" async=""></script><script src="/_next/static/chunks/c4c1da381d908575.js" async=""></script><script src="/_next/static/chunks/ecfccf4677b4777a.js" async=""></script><script src="/_next/static/chunks/16b23f7570a551e1.js" async=""></script><script src="/_next/static/chunks/f3137530db91c282.js" async=""></script><title>Prime Dev CLI - 项目管理工具</title><meta name="description" content="管理多个前端项目的开发环境和配置"/><link rel="icon" href="/favicon.ico?favicon.45db1c09.ico" sizes="256x256" type="image/x-icon"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/ec548c7ce307cf6d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="container mx-auto p-4 sm:p-6 md:p-8"><div class="flex justify-between items-center mb-6"><h1 class="text-2xl font-bold">项目初始化</h1><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>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 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_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-[>svg]:px-3 w-full justify-between font-normal" type="button" id="radix-«R1967nb»" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="truncate">点击选择目标分支</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-4 opacity-50 shrink-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></div></div><div class="mt-6 grid gap-4 md:grid-cols-2"><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">操作记录</h3><p class="text-xs text-gray-500">暂无记录</p></div><div class="rounded-lg border p-3"><h3 class="text-sm font-semibold mb-2">反馈信息</h3><p class="text-xs text-gray-500">暂无反馈</p></div></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/1923d6510bea25be.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[55889,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n3:I[54799,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n4:I[9993,[\"/_next/static/chunks/16b23f7570a551e1.js\",\"/_next/static/chunks/f3137530db91c282.js\"],\"default\"]\n5:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"OutletBoundary\"]\n8:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadataOutlet\"]\na:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"ViewportBoundary\"]\nc:I[67903,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"MetadataBoundary\"]\ne:I[71163,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"default\"]\n:HL[\"/_next/static/chunks/1427afaf93da978b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"zjt6jXsNQxDdU-RHF8TC7\",\"p\":\"\",\"c\":[\"\",\"initialization\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"initialization\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/1427afaf93da978b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"initialization\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/16b23f7570a551e1.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/f3137530db91c282.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L5\",null,{\"children\":[\"$L6\",\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$1\",\"DnwVBE_PHiyx9IY6kbW7av\",{\"children\":[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null]}],[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"f:\"$Sreact.suspense\"\n10:I[73794,[\"/_next/static/chunks/ecfccf4677b4777a.js\"],\"AsyncMetadata\"]\nd:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":[\"$\",\"$L10\",null,{\"promise\":\"$@11\"}]}]}]\n7:null\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Prime Dev CLI - 项目管理工具\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"管理多个前端项目的开发环境和配置\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.45db1c09.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}]],\"error\":null,\"digest\":\"$undefined\"}\n11:{\"metadata\":\"$9:metadata\",\"error\":null,\"digest\":\"$undefined\"}\n"])</script></body></html>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[55889,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
|
|
3
3
|
3:I[54799,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
|
|
4
|
-
4:I[9993,["/_next/static/chunks/
|
|
4
|
+
4:I[9993,["/_next/static/chunks/16b23f7570a551e1.js","/_next/static/chunks/f3137530db91c282.js"],"default"]
|
|
5
5
|
5:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"OutletBoundary"]
|
|
6
6
|
8:I[73794,["/_next/static/chunks/ecfccf4677b4777a.js"],"AsyncMetadataOutlet"]
|
|
7
7
|
a:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"ViewportBoundary"]
|
|
8
8
|
c:I[67903,["/_next/static/chunks/ecfccf4677b4777a.js"],"MetadataBoundary"]
|
|
9
9
|
e:I[71163,["/_next/static/chunks/ecfccf4677b4777a.js"],"default"]
|
|
10
10
|
:HL["/_next/static/chunks/1427afaf93da978b.css","style"]
|
|
11
|
-
0:{"P":null,"b":"
|
|
11
|
+
0:{"P":null,"b":"zjt6jXsNQxDdU-RHF8TC7","p":"","c":["","initialization"],"i":false,"f":[[["",{"children":["initialization",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1427afaf93da978b.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["initialization",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/16b23f7570a551e1.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/f3137530db91c282.js","async":true,"nonce":"$undefined"}]],["$","$L5",null,{"children":["$L6","$L7",["$","$L8",null,{"promise":"$@9"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","DnwVBE_PHiyx9IY6kbW7av",{"children":[["$","$La",null,{"children":"$Lb"}],null]}],["$","$Lc",null,{"children":"$Ld"}]]}],false]],"m":"$undefined","G":["$e","$undefined"],"s":false,"S":true}
|
|
12
12
|
f:"$Sreact.suspense"
|
|
13
13
|
10:I[73794,["/_next/static/chunks/ecfccf4677b4777a.js"],"AsyncMetadata"]
|
|
14
14
|
d:["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":["$","$L10",null,{"promise":"$@11"}]}]}]
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports={75405:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({clearStepRun:()=>c,createStepRun:()=>s,getStepRun:()=>r,updateStepRun:()=>i});let a=new Map;function n(){let e=Date.now();for(let[t,n]of a.entries())e-n.updatedAt>36e5&&a.delete(t)}function s(e){n(),a.set(e.runId,{...e,updatedAt:Date.now()})}function r(e){n();let t=a.get(e);return t||null}function i(e){a.set(e.runId,{...e,updatedAt:Date.now()})}function c(e){a.delete(e)}}},9967:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({POST:()=>j});var n=e.i(15494),s=e.i(87485),r=e.i(83886),i=e.i(30331),c=e.i(88941),o=e.i(35692),d=e.i(77159),u=e.i(79810),m=e.i(34926),p=e.i(33808),h=e.i(75405);let a=/\\s/,t="main";function f(e){return!(!e||a.test(e)||e.startsWith("-"))}function g(e,a){return new Promise((t,n)=>{let r=(0,s.spawn)("git",a,{cwd:e,stdio:["ignore","pipe","pipe"]}),i="",c="";r.stdout?.on("data",e=>{i+=e.toString()}),r.stderr?.on("data",e=>{c+=e.toString()}),r.on("close",e=>{t({code:e,stdout:i,stderr:c})}),r.on("error",e=>{n(e)})})}function k(e){return`git ${e.join(" ")}`}function l(e,a,t,n){0===n.code?e.push(`[${a}] 完成: ${t}`):e.push(`[${a}] 失败: ${t} ${n.stderr||n.stdout}`)}function $(e){for(let a=e.currentIndex;a<e.projects.length;a+=1){let t=e.projects[a];if("pending"!==t.status){e.currentIndex=a+1;continue}let n=function(e,a){if("pending"!==a.status)return null;let{createBranch:t,baseBranch:n,mergeBranch:s}=e;switch(a.phase){case"need-current-branch":return{id:`${a.name}-current-branch-${Date.now()}`,projectName:a.name,description:"检查当前分支",args:["branch","--show-current"],kind:"need-current-branch"};case"need-fetch":return{id:`${a.name}-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fetch"};case"need-base-check":return{id:`${a.name}-base-check-${Date.now()}`,projectName:a.name,description:`检查 origin/${n}`,args:["ls-remote","--heads","origin",n],kind:"need-base-check"};case"need-remote-create-check":return{id:`${a.name}-remote-create-check-${Date.now()}`,projectName:a.name,description:`检查远端分支 ${t}`,args:["ls-remote","--heads","origin",t],kind:"need-remote-create-check"};case"need-local-create-check":return{id:`${a.name}-local-create-check-${Date.now()}`,projectName:a.name,description:`检查本地分支 ${t}`,args:["show-ref","--verify",`refs/heads/${t}`],kind:"need-local-create-check"};case"need-checkout-remote-create":return{id:`${a.name}-checkout-remote-${Date.now()}`,projectName:a.name,description:`切换到远端分支 ${t}`,args:["checkout","-B",t,`origin/${t}`],kind:"need-checkout-remote-create"};case"need-create-branch":return{id:`${a.name}-create-branch-${Date.now()}`,projectName:a.name,description:`创建分支 ${t}`,args:["checkout","-B",t,`origin/${n}`],kind:"need-create-branch"};case"need-push-branch":return{id:`${a.name}-push-branch-${Date.now()}`,projectName:a.name,description:`推送分支 ${t}`,args:["push","-u","origin",t],kind:"need-push-branch"};case"need-merge-check":return{id:`${a.name}-merge-check-${Date.now()}`,projectName:a.name,description:`检查 origin/${s}`,args:["ls-remote","--heads","origin",s],kind:"need-merge-check"};case"need-status":return{id:`${a.name}-status-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status"};case"need-checkout-create":return{id:`${a.name}-checkout-create-${Date.now()}`,projectName:a.name,description:`切换到分支 ${t}`,args:["checkout",t],kind:"need-checkout-create"};case"need-fetch-after-checkout":return{id:`${a.name}-fetch-after-checkout-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fetch-after-checkout"};case"need-merge":return{id:`${a.name}-merge-${Date.now()}`,projectName:a.name,description:`合并 origin/${s}`,args:["merge","--no-ff","--no-edit",`origin/${s}`],kind:"need-merge"};case"need-merge-abort":return{id:`${a.name}-merge-abort-${Date.now()}`,projectName:a.name,description:"终止合并",args:["merge","--abort"],kind:"need-merge-abort"};case"need-push-merge":return{id:`${a.name}-push-merge-${Date.now()}`,projectName:a.name,description:`推送合并结果 ${t}`,args:["push","origin",t],kind:"need-push-merge"};case"need-main-fetch":return{id:`${a.name}-main-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-main-fetch"};case"need-main-check":return{id:`${a.name}-main-check-${Date.now()}`,projectName:a.name,description:"检查 origin/main",args:["ls-remote","--heads","origin","main"],kind:"need-main-check"};case"need-status-main":return{id:`${a.name}-status-main-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status-main"};case"need-checkout-main":return{id:`${a.name}-checkout-main-${Date.now()}`,projectName:a.name,description:"切换到 main",args:["checkout","main"],kind:"need-checkout-main"};case"need-merge-into-main":return{id:`${a.name}-merge-into-main-${Date.now()}`,projectName:a.name,description:`合并 origin/${t} 到 main`,args:["merge","--no-ff","--no-edit",`origin/${t}`],kind:"need-merge-into-main"};case"need-merge-into-main-abort":return{id:`${a.name}-merge-into-main-abort-${Date.now()}`,projectName:a.name,description:"终止合并到 main",args:["merge","--abort"],kind:"need-merge-into-main-abort"};case"need-push-main":return{id:`${a.name}-push-main-${Date.now()}`,projectName:a.name,description:"推送 main",args:["push","origin","main"],kind:"need-push-main"};case"need-fix-main-fetch":return{id:`${a.name}-fix-main-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fix-main-fetch"};case"need-fix-main-check":return{id:`${a.name}-fix-main-check-${Date.now()}`,projectName:a.name,description:"检查 origin/fix/main",args:["ls-remote","--heads","origin","fix/main"],kind:"need-fix-main-check"};case"need-status-fix-main":return{id:`${a.name}-status-fix-main-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status-fix-main"};case"need-checkout-fix-main":return{id:`${a.name}-checkout-fix-main-${Date.now()}`,projectName:a.name,description:"切换到 fix/main",args:["checkout","fix/main"],kind:"need-checkout-fix-main"};case"need-merge-into-fix-main":return{id:`${a.name}-merge-into-fix-main-${Date.now()}`,projectName:a.name,description:`合并 origin/${t} 到 fix/main`,args:["merge","--no-ff","--no-edit",`origin/${t}`],kind:"need-merge-into-fix-main"};case"need-merge-into-fix-main-abort":return{id:`${a.name}-merge-into-fix-main-abort-${Date.now()}`,projectName:a.name,description:"终止合并到 fix/main",args:["merge","--abort"],kind:"need-merge-into-fix-main-abort"};case"need-push-fix-main":return{id:`${a.name}-push-fix-main-${Date.now()}`,projectName:a.name,description:"推送 fix/main",args:["push","origin","fix/main"],kind:"need-push-fix-main"};default:return null}}(e,t);if(n)return e.currentIndex=a,e.currentStep=n,n;e.currentIndex=a+1}return e.currentStep=null,null}async function b(e){let{createBranch:a}=e;for(let t of[...e.projects].reverse()){if(!t.originalBranch)continue;e.operationLogs.push(`[${t.name}] 回滚: ${k(["checkout",t.originalBranch])}`);let n=await g(t.path,["checkout",t.originalBranch]);if(l(e.operationLogs,t.name,`回滚切换分支 ${t.originalBranch}`,n),t.createdLocalBranch&&!t.hadLocalBranch){e.operationLogs.push(`[${t.name}] 回滚: ${k(["branch","-D",a])}`);let n=await g(t.path,["branch","-D",a]);l(e.operationLogs,t.name,`回滚删除本地分支 ${a}`,n)}}}async function x(e,a){let t=e.projects.find(e=>e.name===a.projectName);if(!t)return void e.feedbacks.push(`[${a.projectName}] 项目不存在,跳过。`);e.operationLogs.push(`[${t.name}] ${k(a.args)}`);let n=await g(t.path,a.args);switch(l(e.operationLogs,t.name,a.description,n),("need-checkout-remote-create"===a.kind||"need-create-branch"===a.kind||"need-checkout-create"===a.kind||"need-checkout-main"===a.kind||"need-checkout-fix-main"===a.kind)&&function(e,a,t){let n=new Set(a.ignoredUntrackedPaths??[]),s=(0,m.appendIgnoredPathsFromCheckoutWarning)(t.stderr,n);s.length>0&&(a.ignoredUntrackedPaths=[...n],e.operationLogs.push(`[${a.name}] 提示: 检测到子模块残留目录 ${s.join(", ")},状态检查将忽略对应未跟踪路径`))}(e,t,n),a.kind){case"need-current-branch":t.originalBranch=n.stdout.replace(/\s+/g," ").trim()||"HEAD",0===n.code?t.phase="need-fetch":(t.status="failed",e.feedbacks.push(`[${t.name}] 获取当前分支失败。`));break;case"need-fetch":0===n.code?t.phase="need-base-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-base-check":t.baseExists=!!n.stdout.trim(),t.baseExists?t.phase="need-remote-create-check":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/${e.baseBranch} 不存在,无法创建分支。`));break;case"need-remote-create-check":t.remoteCreateExists=!!n.stdout.trim(),t.phase="need-local-create-check";break;case"need-local-create-check":t.localCreateExists=0===n.code,t.localCreateExists?t.phase="need-checkout-create":t.remoteCreateExists?(t.hadLocalBranch=!1,t.phase="need-checkout-remote-create"):(t.hadLocalBranch=!1,t.phase="need-create-branch");break;case"need-checkout-remote-create":0===n.code?t.phase="need-merge-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到远端分支失败: ${n.stderr||n.stdout}`));break;case"need-create-branch":0===n.code?(t.createdLocalBranch=!0,t.phase="need-push-branch"):(t.status="failed",e.feedbacks.push(`[${t.name}] 创建分支失败: ${n.stderr||n.stdout}`));break;case"need-push-branch":0===n.code?t.phase="need-merge-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 推送新分支失败: ${n.stderr||n.stdout}`));break;case"need-merge-check":t.mergeExists=!!n.stdout.trim(),t.mergeExists?t.phase="need-status":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/${e.mergeBranch} 不存在,无法合并。`));break;case"need-status":t.statusClean=!(0,m.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths),t.statusClean?t.phase="need-checkout-create":(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再执行合并。`));break;case"need-checkout-create":0===n.code?t.phase="need-fetch-after-checkout":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到分支失败: ${n.stderr||n.stdout}`));break;case"need-fetch-after-checkout":0===n.code?t.phase="need-merge":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-merge":0===n.code?t.phase="need-push-merge":(t.phase="need-merge-abort",e.feedbacks.push(`[${t.name}] 合并冲突,准备终止合并。`));break;case"need-merge-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并冲突,已终止合并,请手动处理。`);break;case"need-push-merge":0===n.code?t.phase="need-main-fetch":(t.status="failed",e.feedbacks.push(`[${t.name}] 推送合并结果失败: ${n.stderr||n.stdout}`));break;case"need-main-fetch":0===n.code?t.phase="need-main-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-main-check":n.stdout.trim()?t.phase="need-status-main":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/main 不存在,无法合并。`));break;case"need-status-main":(0,m.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths)?(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再合并 main。`)):t.phase="need-checkout-main";break;case"need-checkout-main":0===n.code?t.phase="need-merge-into-main":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到 main 失败: ${n.stderr||n.stdout}`));break;case"need-merge-into-main":0===n.code?t.phase="need-push-main":(t.phase="need-merge-into-main-abort",e.feedbacks.push(`[${t.name}] 合并到 main 冲突,准备终止合并。`));break;case"need-merge-into-main-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并到 main 失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并到 main 冲突,已终止合并,请手动处理。`);break;case"need-push-main":0===n.code?t.phase="need-fix-main-fetch":(t.status="failed",e.feedbacks.push(`[${t.name}] 推送 main 失败: ${n.stderr||n.stdout}`));break;case"need-fix-main-fetch":0===n.code?t.phase="need-fix-main-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-fix-main-check":n.stdout.trim()?t.phase="need-status-fix-main":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/fix/main 不存在,无法合并。`));break;case"need-status-fix-main":(0,m.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths)?(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再合并 fix/main。`)):t.phase="need-checkout-fix-main";break;case"need-checkout-fix-main":0===n.code?t.phase="need-merge-into-fix-main":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到 fix/main 失败: ${n.stderr||n.stdout}`));break;case"need-merge-into-fix-main":0===n.code?t.phase="need-push-fix-main":(t.phase="need-merge-into-fix-main-abort",e.feedbacks.push(`[${t.name}] 合并到 fix/main 冲突,准备终止合并。`));break;case"need-merge-into-fix-main-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并到 fix/main 失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并到 fix/main 冲突,已终止合并,请手动处理。`);break;case"need-push-fix-main":0===n.code?(t.status="done",t.phase="done"):(t.status="failed",e.feedbacks.push(`[${t.name}] 推送 fix/main 失败: ${n.stderr||n.stdout}`))}}async function w(e){for(let a of new Set(e.projects.map(e=>e.tempRootPath).filter(Boolean)))try{await (0,p.cleanupTempExecutionRepo)(a)}catch(e){console.error(`清理临时目录失败: ${a}`,e)}}async function j(e){try{let m=await e.json(),g="string"==typeof m.action?m.action:"";if("start"===g){let e=Array.isArray(m.projects)?m.projects:[],g="string"==typeof m.createBranch?m.createBranch.trim():"",l="string"==typeof m.baseBranch?m.baseBranch.trim():"",b="string"==typeof m.mergeBranch?m.mergeBranch.trim():"",x="string"==typeof m.runId?m.runId:"",j=[],N=[],S=new Set;if(0===e.length||!g||!l||!b)return n.NextResponse.json({success:!1,operationLogs:j,feedbacks:["缺少必要参数,请填写完整后重试。"]},{status:400});if(l!==t)return n.NextResponse.json({success:!1,operationLogs:j,feedbacks:[`UAT 操作流从 origin 分支创建固定为 ${t}。`]},{status:400});if(!f(g)||!f(l)||!f(b))return n.NextResponse.json({success:!1,operationLogs:j,feedbacks:["分支名称不合法,请避免空格或以 - 开头。"]},{status:400});if(!x)return n.NextResponse.json({success:!1,operationLogs:j,feedbacks:["缺少 runId,请刷新页面后重试。"]},{status:400});(0,u.createUatGitFlowState)(x);let R=await (0,o.getProjectsConfig)(),D=c.WORKSPACE_CONFIG.WORKSPACE_ROOT,L=[];try{for(let t of e){var a,s;let e=String(t),n=(0,d.sanitizeProjectName)(e);if(!n||n!==e){j.push(`[${e}] 失败: 项目名称包含无效字符`),N.push(`[${e}] 项目名称包含无效字符,已跳过。`);continue}if(!R[n]){j.push(`[${n}] 失败: 未在项目配置中找到`),N.push(`[${n}] 未在项目配置中找到,已跳过。`);continue}let c=(0,i.join)(D,n);if(!(0,r.existsSync)(c)){j.push(`[${n}] 失败: 项目目录不存在`),N.push(`[${n}] 项目目录不存在,已跳过。`);continue}if(!(0,r.existsSync)((0,i.join)(c,".git"))){j.push(`[${n}] 失败: 非 Git 仓库`),N.push(`[${n}] 不是有效的 Git 仓库,已跳过。`);continue}let o=await (0,p.createTempExecutionRepo)(c,n);if(!o.success){j.push(`[${n}] 失败: 创建临时执行仓库失败 ${o.error}`),N.push(`[${n}] 创建临时执行仓库失败: ${o.error}`);continue}S.add(o.value.tempRootPath),j.push(`[${n}] 使用临时目录执行: ${o.value.projectPath}`),L.push((a=o.value.projectPath,s=o.value.tempRootPath,{name:n,path:a,tempRootPath:s,phase:"need-current-branch",status:"pending",originalBranch:"",createdLocalBranch:!1,hadLocalBranch:!0,ignoredUntrackedPaths:[],baseExists:null,remoteCreateExists:null,localCreateExists:null,mergeExists:null,statusClean:null}))}}catch(e){for(let e of S)try{await (0,p.cleanupTempExecutionRepo)(e)}catch(a){console.error(`清理临时目录失败: ${e}`,a)}throw(0,u.clearUatGitFlowState)(x),e}let B={runId:x,createBranch:g,baseBranch:l,mergeBranch:b,projects:L,currentIndex:0,operationLogs:j,feedbacks:N,currentStep:null,updatedAt:Date.now()},y=$(B);return y?(0,h.createStepRun)(B):(await w(B),(0,u.clearUatGitFlowState)(x)),n.NextResponse.json({success:!0,runId:x,nextStep:y?{stepId:y.id,projectName:y.projectName,description:y.description,command:k(y.args)}:null,operationLogs:B.operationLogs,feedbacks:B.feedbacks,isComplete:null===y})}if("execute"===g){let e="string"==typeof m.runId?m.runId:"",a="string"==typeof m.stepId?m.stepId:"",t=(0,h.getStepRun)(e);if(!t)return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未找到执行上下文,请重新开始。"]},{status:404});if((0,u.isUatGitFlowAborted)(e))return t.operationLogs.push("已收到中断请求,开始回滚已执行的本地操作。"),await b(t),await w(t),(0,h.clearStepRun)(e),(0,u.clearUatGitFlowState)(e),n.NextResponse.json({success:!0,runId:e,nextStep:null,operationLogs:t.operationLogs,feedbacks:t.feedbacks,isComplete:!0,aborted:!0});if(!t.currentStep||t.currentStep.id!==a)return n.NextResponse.json({success:!1,operationLogs:t.operationLogs,feedbacks:["步骤已更新,请重新确认。"]},{status:409});await x(t,t.currentStep);let s=$(t);return(0,h.updateStepRun)(t),s||(await w(t),(0,h.clearStepRun)(e),(0,u.clearUatGitFlowState)(e)),n.NextResponse.json({success:!0,runId:e,nextStep:s?{stepId:s.id,projectName:s.projectName,description:s.description,command:k(s.args)}:null,operationLogs:t.operationLogs,feedbacks:t.feedbacks,isComplete:null===s})}if("abort"===g){let e="string"==typeof m.runId?m.runId:"",a=(0,h.getStepRun)(e);if(!a)return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未找到执行上下文,请重新开始。"]},{status:404});return a.operationLogs.push("已收到中断请求,开始回滚已执行的本地操作。"),await b(a),await w(a),(0,h.clearStepRun)(e),(0,u.clearUatGitFlowState)(e),n.NextResponse.json({success:!0,runId:e,nextStep:null,operationLogs:a.operationLogs,feedbacks:a.feedbacks,isComplete:!0,aborted:!0})}return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未知操作类型。"]},{status:400})}catch(e){return console.error("UAT git 分步执行失败:",e),n.NextResponse.json({success:!1,operationLogs:[],feedbacks:[e instanceof Error?e.message:"执行失败"]},{status:500})}}}},3301:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({patchFetch:()=>c,routeModule:()=>a,serverHooks:()=>d,workAsyncStorage:()=>t,workUnitAsyncStorage:()=>o});var n=e.i(45746),s=e.i(93828),r=e.i(18250),i=e.i(9967);let a=new n.AppRouteRouteModule({definition:{kind:s.RouteKind.APP_ROUTE,page:"/api/uat-git-flow/step/route",pathname:"/api/uat-git-flow/step",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/uat-git-flow/step/route.ts",nextConfigOutput:"",userland:i}),{workAsyncStorage:t,workUnitAsyncStorage:o,serverHooks:d}=a;function c(){return(0,r.patchFetch)({workAsyncStorage:t,workUnitAsyncStorage:o})}}}};
|
|
1
|
+
module.exports={75405:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({clearStepRun:()=>c,createStepRun:()=>s,getStepRun:()=>r,updateStepRun:()=>i});let a=new Map;function n(){let e=Date.now();for(let[t,n]of a.entries())e-n.updatedAt>36e5&&a.delete(t)}function s(e){n(),a.set(e.runId,{...e,updatedAt:Date.now()})}function r(e){n();let t=a.get(e);return t||null}function i(e){a.set(e.runId,{...e,updatedAt:Date.now()})}function c(e){a.delete(e)}}},9967:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({POST:()=>N});var n=e.i(15494),s=e.i(87485),r=e.i(83886),i=e.i(30331),c=e.i(88941),o=e.i(35692),d=e.i(77159),u=e.i(90926),m=e.i(79810),p=e.i(34926),h=e.i(33808),f=e.i(75405);let a=/\\s/;function g(e){return!(!e||a.test(e)||e.startsWith("-"))}function k(e,a){return new Promise((t,n)=>{let r=(0,s.spawn)("git",a,{cwd:e,stdio:["ignore","pipe","pipe"]}),i="",c="";r.stdout?.on("data",e=>{i+=e.toString()}),r.stderr?.on("data",e=>{c+=e.toString()}),r.on("close",e=>{t({code:e,stdout:i,stderr:c})}),r.on("error",e=>{n(e)})})}function l(e){return`git ${e.join(" ")}`}function $(e,a,t,n){0===n.code?e.push(`[${a}] 完成: ${t}`):e.push(`[${a}] 失败: ${t} ${n.stderr||n.stdout}`)}function b(e){for(let a=e.currentIndex;a<e.projects.length;a+=1){let t=e.projects[a];if("pending"!==t.status){e.currentIndex=a+1;continue}let n=function(e,a){if("pending"!==a.status)return null;let{createBranch:t,baseBranch:n,mergeBranch:s}=e;switch(a.phase){case"need-current-branch":return{id:`${a.name}-current-branch-${Date.now()}`,projectName:a.name,description:"检查当前分支",args:["branch","--show-current"],kind:"need-current-branch"};case"need-fetch":return{id:`${a.name}-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fetch"};case"need-base-check":return{id:`${a.name}-base-check-${Date.now()}`,projectName:a.name,description:`检查 origin/${n}`,args:["ls-remote","--heads","origin",n],kind:"need-base-check"};case"need-remote-create-check":return{id:`${a.name}-remote-create-check-${Date.now()}`,projectName:a.name,description:`检查远端分支 ${t}`,args:["ls-remote","--heads","origin",t],kind:"need-remote-create-check"};case"need-local-create-check":return{id:`${a.name}-local-create-check-${Date.now()}`,projectName:a.name,description:`检查本地分支 ${t}`,args:["show-ref","--verify",`refs/heads/${t}`],kind:"need-local-create-check"};case"need-checkout-remote-create":return{id:`${a.name}-checkout-remote-${Date.now()}`,projectName:a.name,description:`切换到远端分支 ${t}`,args:["checkout","-B",t,`origin/${t}`],kind:"need-checkout-remote-create"};case"need-create-branch":return{id:`${a.name}-create-branch-${Date.now()}`,projectName:a.name,description:`创建分支 ${t}`,args:["checkout","-B",t,`origin/${n}`],kind:"need-create-branch"};case"need-push-branch":return{id:`${a.name}-push-branch-${Date.now()}`,projectName:a.name,description:`推送分支 ${t}`,args:["push","-u","origin",t],kind:"need-push-branch"};case"need-merge-check":return{id:`${a.name}-merge-check-${Date.now()}`,projectName:a.name,description:`检查 origin/${s}`,args:["ls-remote","--heads","origin",s],kind:"need-merge-check"};case"need-status":return{id:`${a.name}-status-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status"};case"need-checkout-create":return{id:`${a.name}-checkout-create-${Date.now()}`,projectName:a.name,description:`切换到分支 ${t}`,args:["checkout",t],kind:"need-checkout-create"};case"need-fetch-after-checkout":return{id:`${a.name}-fetch-after-checkout-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fetch-after-checkout"};case"need-merge":return{id:`${a.name}-merge-${Date.now()}`,projectName:a.name,description:`合并 origin/${s}`,args:["merge","--no-ff","--no-edit",`origin/${s}`],kind:"need-merge"};case"need-merge-abort":return{id:`${a.name}-merge-abort-${Date.now()}`,projectName:a.name,description:"终止合并",args:["merge","--abort"],kind:"need-merge-abort"};case"need-push-merge":return{id:`${a.name}-push-merge-${Date.now()}`,projectName:a.name,description:`推送合并结果 ${t}`,args:["push","origin",t],kind:"need-push-merge"};case"need-main-fetch":return{id:`${a.name}-main-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-main-fetch"};case"need-main-check":return{id:`${a.name}-main-check-${Date.now()}`,projectName:a.name,description:`检查 origin/${n}`,args:["ls-remote","--heads","origin",n],kind:"need-main-check"};case"need-status-main":return{id:`${a.name}-status-main-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status-main"};case"need-checkout-main":return{id:`${a.name}-checkout-main-${Date.now()}`,projectName:a.name,description:`切换到 ${n}`,args:["checkout",n],kind:"need-checkout-main"};case"need-merge-into-main":return{id:`${a.name}-merge-into-main-${Date.now()}`,projectName:a.name,description:`合并 origin/${t} 到 ${n}`,args:["merge","--no-ff","--no-edit",`origin/${t}`],kind:"need-merge-into-main"};case"need-merge-into-main-abort":return{id:`${a.name}-merge-into-main-abort-${Date.now()}`,projectName:a.name,description:`终止合并到 ${n}`,args:["merge","--abort"],kind:"need-merge-into-main-abort"};case"need-push-main":return{id:`${a.name}-push-main-${Date.now()}`,projectName:a.name,description:`推送 ${n}`,args:["push","origin",n],kind:"need-push-main"};case"need-fix-main-fetch":return{id:`${a.name}-fix-main-fetch-${Date.now()}`,projectName:a.name,description:"拉取远端",args:["fetch","origin"],kind:"need-fix-main-fetch"};case"need-fix-main-check":return{id:`${a.name}-fix-main-check-${Date.now()}`,projectName:a.name,description:"检查 origin/fix/main",args:["ls-remote","--heads","origin","fix/main"],kind:"need-fix-main-check"};case"need-status-fix-main":return{id:`${a.name}-status-fix-main-${Date.now()}`,projectName:a.name,description:"检查工作区",args:["status","--porcelain","--untracked-files=all"],kind:"need-status-fix-main"};case"need-checkout-fix-main":return{id:`${a.name}-checkout-fix-main-${Date.now()}`,projectName:a.name,description:"切换到 fix/main",args:["checkout","fix/main"],kind:"need-checkout-fix-main"};case"need-merge-into-fix-main":return{id:`${a.name}-merge-into-fix-main-${Date.now()}`,projectName:a.name,description:`合并 origin/${t} 到 fix/main`,args:["merge","--no-ff","--no-edit",`origin/${t}`],kind:"need-merge-into-fix-main"};case"need-merge-into-fix-main-abort":return{id:`${a.name}-merge-into-fix-main-abort-${Date.now()}`,projectName:a.name,description:"终止合并到 fix/main",args:["merge","--abort"],kind:"need-merge-into-fix-main-abort"};case"need-push-fix-main":return{id:`${a.name}-push-fix-main-${Date.now()}`,projectName:a.name,description:"推送 fix/main",args:["push","origin","fix/main"],kind:"need-push-fix-main"};default:return null}}(e,t);if(n)return e.currentIndex=a,e.currentStep=n,n;e.currentIndex=a+1}return e.currentStep=null,null}async function x(e){let{createBranch:a}=e;for(let t of[...e.projects].reverse()){if(!t.originalBranch)continue;e.operationLogs.push(`[${t.name}] 回滚: ${l(["checkout",t.originalBranch])}`);let n=await k(t.path,["checkout",t.originalBranch]);if($(e.operationLogs,t.name,`回滚切换分支 ${t.originalBranch}`,n),t.createdLocalBranch&&!t.hadLocalBranch){e.operationLogs.push(`[${t.name}] 回滚: ${l(["branch","-D",a])}`);let n=await k(t.path,["branch","-D",a]);$(e.operationLogs,t.name,`回滚删除本地分支 ${a}`,n)}}}async function w(e,a){let t=e.projects.find(e=>e.name===a.projectName);if(!t)return void e.feedbacks.push(`[${a.projectName}] 项目不存在,跳过。`);e.operationLogs.push(`[${t.name}] ${l(a.args)}`);let n=await k(t.path,a.args);switch($(e.operationLogs,t.name,a.description,n),("need-checkout-remote-create"===a.kind||"need-create-branch"===a.kind||"need-checkout-create"===a.kind||"need-checkout-main"===a.kind||"need-checkout-fix-main"===a.kind)&&function(e,a,t){let n=new Set(a.ignoredUntrackedPaths??[]),s=(0,p.appendIgnoredPathsFromCheckoutWarning)(t.stderr,n);s.length>0&&(a.ignoredUntrackedPaths=[...n],e.operationLogs.push(`[${a.name}] 提示: 检测到子模块残留目录 ${s.join(", ")},状态检查将忽略对应未跟踪路径`))}(e,t,n),a.kind){case"need-current-branch":t.originalBranch=n.stdout.replace(/\s+/g," ").trim()||"HEAD",0===n.code?t.phase="need-fetch":(t.status="failed",e.feedbacks.push(`[${t.name}] 获取当前分支失败。`));break;case"need-fetch":0===n.code?t.phase="need-base-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-base-check":t.baseExists=!!n.stdout.trim(),t.baseExists?t.phase="need-remote-create-check":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/${e.baseBranch} 不存在,无法创建分支。`));break;case"need-remote-create-check":t.remoteCreateExists=!!n.stdout.trim(),t.phase="need-local-create-check";break;case"need-local-create-check":t.localCreateExists=0===n.code,t.localCreateExists?t.phase="need-checkout-create":t.remoteCreateExists?(t.hadLocalBranch=!1,t.phase="need-checkout-remote-create"):(t.hadLocalBranch=!1,t.phase="need-create-branch");break;case"need-checkout-remote-create":0===n.code?t.phase="need-merge-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到远端分支失败: ${n.stderr||n.stdout}`));break;case"need-create-branch":0===n.code?(t.createdLocalBranch=!0,t.phase="need-push-branch"):(t.status="failed",e.feedbacks.push(`[${t.name}] 创建分支失败: ${n.stderr||n.stdout}`));break;case"need-push-branch":0===n.code?t.phase="need-merge-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 推送新分支失败: ${n.stderr||n.stdout}`));break;case"need-merge-check":t.mergeExists=!!n.stdout.trim(),t.mergeExists?t.phase="need-status":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/${e.mergeBranch} 不存在,无法合并。`));break;case"need-status":t.statusClean=!(0,p.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths),t.statusClean?t.phase="need-checkout-create":(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再执行合并。`));break;case"need-checkout-create":0===n.code?t.phase="need-fetch-after-checkout":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到分支失败: ${n.stderr||n.stdout}`));break;case"need-fetch-after-checkout":0===n.code?t.phase="need-merge":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-merge":0===n.code?t.phase="need-push-merge":(t.phase="need-merge-abort",e.feedbacks.push(`[${t.name}] 合并冲突,准备终止合并。`));break;case"need-merge-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并冲突,已终止合并,请手动处理。`);break;case"need-push-merge":0===n.code?t.phase="need-main-fetch":(t.status="failed",e.feedbacks.push(`[${t.name}] 推送合并结果失败: ${n.stderr||n.stdout}`));break;case"need-main-fetch":0===n.code?t.phase="need-main-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-main-check":n.stdout.trim()?t.phase="need-status-main":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/${e.baseBranch} 不存在,无法合并。`));break;case"need-status-main":(0,p.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths)?(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再合并 ${e.baseBranch}。`)):t.phase="need-checkout-main";break;case"need-checkout-main":0===n.code?t.phase="need-merge-into-main":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到 ${e.baseBranch} 失败: ${n.stderr||n.stdout}`));break;case"need-merge-into-main":0===n.code?t.phase="need-push-main":(t.phase="need-merge-into-main-abort",e.feedbacks.push(`[${t.name}] 合并到 ${e.baseBranch} 冲突,准备终止合并。`));break;case"need-merge-into-main-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并到 ${e.baseBranch} 失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并到 ${e.baseBranch} 冲突,已终止合并,请手动处理。`);break;case"need-push-main":0===n.code?(0,u.getUatFinalMergeTargets)(e.baseBranch).includes("fix/main")?t.phase="need-fix-main-fetch":(t.status="done",t.phase="done"):(t.status="failed",e.feedbacks.push(`[${t.name}] 推送 ${e.baseBranch} 失败: ${n.stderr||n.stdout}`));break;case"need-fix-main-fetch":0===n.code?t.phase="need-fix-main-check":(t.status="failed",e.feedbacks.push(`[${t.name}] 拉取远端失败: ${n.stderr||n.stdout}`));break;case"need-fix-main-check":n.stdout.trim()?t.phase="need-status-fix-main":(t.status="failed",e.feedbacks.push(`[${t.name}] origin/fix/main 不存在,无法合并。`));break;case"need-status-fix-main":(0,p.hasBlockingWorkspaceChanges)(n.stdout,t.ignoredUntrackedPaths)?(t.status="failed",e.feedbacks.push(`[${t.name}] 工作区有未提交改动,请先处理后再合并 fix/main。`)):t.phase="need-checkout-fix-main";break;case"need-checkout-fix-main":0===n.code?t.phase="need-merge-into-fix-main":(t.status="failed",e.feedbacks.push(`[${t.name}] 切换到 fix/main 失败: ${n.stderr||n.stdout}`));break;case"need-merge-into-fix-main":0===n.code?t.phase="need-push-fix-main":(t.phase="need-merge-into-fix-main-abort",e.feedbacks.push(`[${t.name}] 合并到 fix/main 冲突,准备终止合并。`));break;case"need-merge-into-fix-main-abort":0!==n.code&&e.feedbacks.push(`[${t.name}] 终止合并到 fix/main 失败: ${n.stderr||n.stdout}`),t.status="failed",e.feedbacks.push(`[${t.name}] 合并到 fix/main 冲突,已终止合并,请手动处理。`);break;case"need-push-fix-main":0===n.code?(t.status="done",t.phase="done"):(t.status="failed",e.feedbacks.push(`[${t.name}] 推送 fix/main 失败: ${n.stderr||n.stdout}`))}}async function j(e){for(let a of new Set(e.projects.map(e=>e.tempRootPath).filter(Boolean)))try{await (0,h.cleanupTempExecutionRepo)(a)}catch(e){console.error(`清理临时目录失败: ${a}`,e)}}async function N(e){try{let s=await e.json(),p="string"==typeof s.action?s.action:"";if("start"===p){let e=Array.isArray(s.projects)?s.projects:[],p="string"==typeof s.createBranch?s.createBranch.trim():"",k="string"==typeof s.baseBranch?s.baseBranch.trim():"",$="string"==typeof s.mergeBranch?s.mergeBranch.trim():"",x="string"==typeof s.runId?s.runId:"",w=[],N=[],S=new Set;if(0===e.length||!p||!k||!$)return n.NextResponse.json({success:!1,operationLogs:w,feedbacks:["缺少必要参数,请填写完整后重试。"]},{status:400});if(!(0,u.isAllowedUatBaseBranch)(k))return n.NextResponse.json({success:!1,operationLogs:w,feedbacks:[`UAT 操作流从 origin 分支创建仅支持:${u.UAT_BASE_BRANCH_OPTIONS.join("、")}。`]},{status:400});if(!g(p)||!g(k)||!g($))return n.NextResponse.json({success:!1,operationLogs:w,feedbacks:["分支名称不合法,请避免空格或以 - 开头。"]},{status:400});if(!x)return n.NextResponse.json({success:!1,operationLogs:w,feedbacks:["缺少 runId,请刷新页面后重试。"]},{status:400});(0,m.createUatGitFlowState)(x);let B=await (0,o.getProjectsConfig)(),R=c.WORKSPACE_CONFIG.WORKSPACE_ROOT,D=[];try{for(let n of e){var a,t;let e=String(n),s=(0,d.sanitizeProjectName)(e);if(!s||s!==e){w.push(`[${e}] 失败: 项目名称包含无效字符`),N.push(`[${e}] 项目名称包含无效字符,已跳过。`);continue}if(!B[s]){w.push(`[${s}] 失败: 未在项目配置中找到`),N.push(`[${s}] 未在项目配置中找到,已跳过。`);continue}let c=(0,i.join)(R,s);if(!(0,r.existsSync)(c)){w.push(`[${s}] 失败: 项目目录不存在`),N.push(`[${s}] 项目目录不存在,已跳过。`);continue}if(!(0,r.existsSync)((0,i.join)(c,".git"))){w.push(`[${s}] 失败: 非 Git 仓库`),N.push(`[${s}] 不是有效的 Git 仓库,已跳过。`);continue}let o=await (0,h.createTempExecutionRepo)(c,s);if(!o.success){w.push(`[${s}] 失败: 创建临时执行仓库失败 ${o.error}`),N.push(`[${s}] 创建临时执行仓库失败: ${o.error}`);continue}S.add(o.value.tempRootPath),w.push(`[${s}] 使用临时目录执行: ${o.value.projectPath}`),D.push((a=o.value.projectPath,t=o.value.tempRootPath,{name:s,path:a,tempRootPath:t,phase:"need-current-branch",status:"pending",originalBranch:"",createdLocalBranch:!1,hadLocalBranch:!0,ignoredUntrackedPaths:[],baseExists:null,remoteCreateExists:null,localCreateExists:null,mergeExists:null,statusClean:null}))}}catch(e){for(let e of S)try{await (0,h.cleanupTempExecutionRepo)(e)}catch(a){console.error(`清理临时目录失败: ${e}`,a)}throw(0,m.clearUatGitFlowState)(x),e}let L={runId:x,createBranch:p,baseBranch:k,mergeBranch:$,projects:D,currentIndex:0,operationLogs:w,feedbacks:N,currentStep:null,updatedAt:Date.now()},P=b(L);return P?(0,f.createStepRun)(L):(await j(L),(0,m.clearUatGitFlowState)(x)),n.NextResponse.json({success:!0,runId:x,nextStep:P?{stepId:P.id,projectName:P.projectName,description:P.description,command:l(P.args)}:null,operationLogs:L.operationLogs,feedbacks:L.feedbacks,isComplete:null===P})}if("execute"===p){let e="string"==typeof s.runId?s.runId:"",a="string"==typeof s.stepId?s.stepId:"",t=(0,f.getStepRun)(e);if(!t)return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未找到执行上下文,请重新开始。"]},{status:404});if((0,m.isUatGitFlowAborted)(e))return t.operationLogs.push("已收到中断请求,开始回滚已执行的本地操作。"),await x(t),await j(t),(0,f.clearStepRun)(e),(0,m.clearUatGitFlowState)(e),n.NextResponse.json({success:!0,runId:e,nextStep:null,operationLogs:t.operationLogs,feedbacks:t.feedbacks,isComplete:!0,aborted:!0});if(!t.currentStep||t.currentStep.id!==a)return n.NextResponse.json({success:!1,operationLogs:t.operationLogs,feedbacks:["步骤已更新,请重新确认。"]},{status:409});await w(t,t.currentStep);let r=b(t);return(0,f.updateStepRun)(t),r||(await j(t),(0,f.clearStepRun)(e),(0,m.clearUatGitFlowState)(e)),n.NextResponse.json({success:!0,runId:e,nextStep:r?{stepId:r.id,projectName:r.projectName,description:r.description,command:l(r.args)}:null,operationLogs:t.operationLogs,feedbacks:t.feedbacks,isComplete:null===r})}if("abort"===p){let e="string"==typeof s.runId?s.runId:"",a=(0,f.getStepRun)(e);if(!a)return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未找到执行上下文,请重新开始。"]},{status:404});return a.operationLogs.push("已收到中断请求,开始回滚已执行的本地操作。"),await x(a),await j(a),(0,f.clearStepRun)(e),(0,m.clearUatGitFlowState)(e),n.NextResponse.json({success:!0,runId:e,nextStep:null,operationLogs:a.operationLogs,feedbacks:a.feedbacks,isComplete:!0,aborted:!0})}return n.NextResponse.json({success:!1,operationLogs:[],feedbacks:["未知操作类型。"]},{status:400})}catch(e){return console.error("UAT git 分步执行失败:",e),n.NextResponse.json({success:!1,operationLogs:[],feedbacks:[e instanceof Error?e.message:"执行失败"]},{status:500})}}}},3301:e=>{"use strict";var{g:a,__dirname:t}=e;{e.s({patchFetch:()=>c,routeModule:()=>a,serverHooks:()=>d,workAsyncStorage:()=>t,workUnitAsyncStorage:()=>o});var n=e.i(45746),s=e.i(93828),r=e.i(18250),i=e.i(9967);let a=new n.AppRouteRouteModule({definition:{kind:s.RouteKind.APP_ROUTE,page:"/api/uat-git-flow/step/route",pathname:"/api/uat-git-flow/step",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/uat-git-flow/step/route.ts",nextConfigOutput:"",userland:i}),{workAsyncStorage:t,workUnitAsyncStorage:o,serverHooks:d}=a;function c(){return(0,r.patchFetch)({workAsyncStorage:t,workUnitAsyncStorage:o})}}}};
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=_24087f66._.js.map
|