@downcity/city 1.1.39 → 1.1.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/README.md +4 -9
  2. package/bin/cli/Index.js +2 -0
  3. package/bin/cli/Index.js.map +1 -1
  4. package/bin/cli/agent/AgentChat.d.ts +2 -1
  5. package/bin/cli/agent/AgentChat.d.ts.map +1 -1
  6. package/bin/cli/agent/AgentChat.js +93 -214
  7. package/bin/cli/agent/AgentChat.js.map +1 -1
  8. package/bin/cli/agent/AgentChatTypes.d.ts +8 -12
  9. package/bin/cli/agent/AgentChatTypes.d.ts.map +1 -1
  10. package/bin/cli/agent/AgentHistory.js +2 -2
  11. package/bin/cli/agent/AgentHistory.js.map +1 -1
  12. package/bin/cli/agent/AgentManager.d.ts.map +1 -1
  13. package/bin/cli/agent/AgentManager.js +26 -27
  14. package/bin/cli/agent/AgentManager.js.map +1 -1
  15. package/bin/cli/agent/AgentManagerTypes.d.ts +2 -2
  16. package/bin/cli/agent/AgentManagerTypes.d.ts.map +1 -1
  17. package/bin/cli/agent/AgentReset.js +4 -4
  18. package/bin/cli/agent/AgentReset.js.map +1 -1
  19. package/bin/cli/agent/AgentSelection.js +6 -6
  20. package/bin/cli/agent/AgentSelection.js.map +1 -1
  21. package/bin/cli/agent/AgentSelectionTypes.d.ts +1 -1
  22. package/bin/cli/agent/AgentSelectionTypes.d.ts.map +1 -1
  23. package/bin/cli/agent/Init.js +10 -10
  24. package/bin/cli/agent/Init.js.map +1 -1
  25. package/bin/cli/agent/Restart.js +2 -2
  26. package/bin/cli/agent/Restart.js.map +1 -1
  27. package/bin/cli/agent/Run.d.ts +1 -1
  28. package/bin/cli/agent/Run.d.ts.map +1 -1
  29. package/bin/cli/agent/Run.js +37 -17
  30. package/bin/cli/agent/Run.js.map +1 -1
  31. package/bin/cli/agent/Start.js +2 -2
  32. package/bin/cli/agent/Start.js.map +1 -1
  33. package/bin/cli/agent/Stop.js +2 -2
  34. package/bin/cli/agent/Stop.js.map +1 -1
  35. package/bin/cli/control-plane/ControlPlaneProcess.js +5 -5
  36. package/bin/cli/control-plane/ControlPlaneProcess.js.map +1 -1
  37. package/bin/cli/model/ModelCreateCommand.js +1 -1
  38. package/bin/cli/model/ModelCreateCommand.js.map +1 -1
  39. package/bin/cli/model/ModelManageCommand.d.ts.map +1 -1
  40. package/bin/cli/model/ModelManageCommand.js +5 -3
  41. package/bin/cli/model/ModelManageCommand.js.map +1 -1
  42. package/bin/cli/model/ModelManager.js +3 -3
  43. package/bin/cli/model/ModelManager.js.map +1 -1
  44. package/bin/cli/model/ModelSupport.d.ts +0 -1
  45. package/bin/cli/model/ModelSupport.d.ts.map +1 -1
  46. package/bin/cli/model/ModelSupport.js +2 -11
  47. package/bin/cli/model/ModelSupport.js.map +1 -1
  48. package/bin/cli/shared/CliReporterTypes.d.ts +1 -1
  49. package/bin/cli/shared/Config.js +2 -2
  50. package/bin/cli/shared/Config.js.map +1 -1
  51. package/bin/cli/shared/Env.d.ts +1 -1
  52. package/bin/cli/shared/Env.d.ts.map +1 -1
  53. package/bin/cli/shared/Env.js +18 -149
  54. package/bin/cli/shared/Env.js.map +1 -1
  55. package/bin/cli/shared/IndexAgentCommand.d.ts.map +1 -1
  56. package/bin/cli/shared/IndexAgentCommand.js +3 -3
  57. package/bin/cli/shared/IndexAgentCommand.js.map +1 -1
  58. package/bin/cli/shared/IndexSupport.d.ts +3 -3
  59. package/bin/cli/shared/IndexSupport.d.ts.map +1 -1
  60. package/bin/cli/shared/IndexSupport.js +14 -8
  61. package/bin/cli/shared/IndexSupport.js.map +1 -1
  62. package/bin/cli/shared/ManagedPluginActionCommands.d.ts.map +1 -1
  63. package/bin/cli/shared/ManagedPluginActionCommands.js +5 -4
  64. package/bin/cli/shared/ManagedPluginActionCommands.js.map +1 -1
  65. package/bin/cli/shared/ManagedPluginRemote.d.ts.map +1 -1
  66. package/bin/cli/shared/ManagedPluginRemote.js +4 -4
  67. package/bin/cli/shared/ManagedPluginRemote.js.map +1 -1
  68. package/bin/cli/shared/PluginTargetSupport.d.ts +2 -2
  69. package/bin/cli/shared/PluginTargetSupport.d.ts.map +1 -1
  70. package/bin/cli/shared/PluginTargetSupport.js +19 -19
  71. package/bin/cli/shared/PluginTargetSupport.js.map +1 -1
  72. package/bin/cli/shared/Plugins.js +10 -10
  73. package/bin/cli/shared/Plugins.js.map +1 -1
  74. package/bin/cli/shared/PublicHostEnv.d.ts +1 -1
  75. package/bin/cli/shared/PublicHostEnv.js +2 -2
  76. package/bin/cli/shared/PublicHostEnv.js.map +1 -1
  77. package/bin/cli/shared/Terminal.d.ts +13 -0
  78. package/bin/cli/shared/Terminal.d.ts.map +1 -0
  79. package/bin/cli/shared/Terminal.js +22 -0
  80. package/bin/cli/shared/Terminal.js.map +1 -0
  81. package/bin/config/DowncitySchema.d.ts.map +1 -1
  82. package/bin/config/DowncitySchema.js +3 -111
  83. package/bin/config/DowncitySchema.js.map +1 -1
  84. package/bin/config/Paths.d.ts +0 -56
  85. package/bin/config/Paths.d.ts.map +1 -1
  86. package/bin/config/Paths.js +9 -51
  87. package/bin/config/Paths.js.map +1 -1
  88. package/bin/control/ControlGateway.js +1 -1
  89. package/bin/control/ControlGateway.js.map +1 -1
  90. package/bin/control/EnvApiRoutes.d.ts +1 -1
  91. package/bin/control/EnvApiRoutes.d.ts.map +1 -1
  92. package/bin/control/EnvApiRoutes.js +7 -79
  93. package/bin/control/EnvApiRoutes.js.map +1 -1
  94. package/bin/control/PlatformApiRoutes.d.ts +2 -2
  95. package/bin/control/PlatformApiRoutes.d.ts.map +1 -1
  96. package/bin/control/PlatformApiRoutes.js +2 -2
  97. package/bin/control/PlatformApiRoutes.js.map +1 -1
  98. package/bin/control/gateway/AgentActions.d.ts +2 -2
  99. package/bin/control/gateway/AgentActions.d.ts.map +1 -1
  100. package/bin/control/gateway/AgentActions.js +7 -7
  101. package/bin/control/gateway/AgentActions.js.map +1 -1
  102. package/bin/control/gateway/AgentCatalog.d.ts +3 -6
  103. package/bin/control/gateway/AgentCatalog.d.ts.map +1 -1
  104. package/bin/control/gateway/AgentCatalog.js +16 -18
  105. package/bin/control/gateway/AgentCatalog.js.map +1 -1
  106. package/bin/control/instant/InstantSessionRunner.d.ts.map +1 -1
  107. package/bin/control/instant/InstantSessionRunner.js +3 -1
  108. package/bin/control/instant/InstantSessionRunner.js.map +1 -1
  109. package/bin/env/ProcessEnv.d.ts +24 -0
  110. package/bin/env/ProcessEnv.d.ts.map +1 -0
  111. package/bin/env/ProcessEnv.js +41 -0
  112. package/bin/env/ProcessEnv.js.map +1 -0
  113. package/bin/http/auth/AuthEnv.d.ts +1 -1
  114. package/bin/http/auth/AuthEnv.js +1 -1
  115. package/bin/model/runtime/CreateRuntimeModel.d.ts +8 -0
  116. package/bin/model/runtime/CreateRuntimeModel.d.ts.map +1 -1
  117. package/bin/model/runtime/CreateRuntimeModel.js +43 -37
  118. package/bin/model/runtime/CreateRuntimeModel.js.map +1 -1
  119. package/bin/model/service/ModelPoolService.d.ts +1 -1
  120. package/bin/model/service/ModelPoolService.d.ts.map +1 -1
  121. package/bin/model/service/ModelPoolService.js +8 -6
  122. package/bin/model/service/ModelPoolService.js.map +1 -1
  123. package/bin/platform/store/StoreEnvRepository.d.ts +5 -49
  124. package/bin/platform/store/StoreEnvRepository.d.ts.map +1 -1
  125. package/bin/platform/store/StoreEnvRepository.js +31 -178
  126. package/bin/platform/store/StoreEnvRepository.js.map +1 -1
  127. package/bin/platform/store/StoreSchema.js +3 -44
  128. package/bin/platform/store/StoreSchema.js.map +1 -1
  129. package/bin/platform/store/index.d.ts +9 -45
  130. package/bin/platform/store/index.d.ts.map +1 -1
  131. package/bin/platform/store/index.js +12 -62
  132. package/bin/platform/store/index.js.map +1 -1
  133. package/bin/platform/store/schema.d.ts +2 -2
  134. package/bin/platform/store/schema.js +2 -2
  135. package/bin/process/daemon/Api.d.ts +1 -1
  136. package/bin/process/daemon/CliArgs.d.ts +1 -0
  137. package/bin/process/daemon/CliArgs.d.ts.map +1 -1
  138. package/bin/process/daemon/CliArgs.js +20 -1
  139. package/bin/process/daemon/CliArgs.js.map +1 -1
  140. package/bin/process/daemon/Client.d.ts +18 -2
  141. package/bin/process/daemon/Client.d.ts.map +1 -1
  142. package/bin/process/daemon/Client.js +70 -20
  143. package/bin/process/daemon/Client.js.map +1 -1
  144. package/bin/process/daemon/Manager.d.ts.map +1 -1
  145. package/bin/process/daemon/Manager.js +2 -1
  146. package/bin/process/daemon/Manager.js.map +1 -1
  147. package/bin/terminal/admin/auth-error.d.ts +34 -0
  148. package/bin/terminal/admin/auth-error.d.ts.map +1 -0
  149. package/bin/terminal/admin/auth-error.js +51 -0
  150. package/bin/terminal/admin/auth-error.js.map +1 -0
  151. package/bin/terminal/admin/commands/accounts.d.ts +6 -0
  152. package/bin/terminal/admin/commands/accounts.d.ts.map +1 -0
  153. package/bin/terminal/admin/commands/accounts.js +44 -0
  154. package/bin/terminal/admin/commands/accounts.js.map +1 -0
  155. package/bin/terminal/admin/commands/balance.d.ts +6 -0
  156. package/bin/terminal/admin/commands/balance.d.ts.map +1 -0
  157. package/bin/terminal/admin/commands/balance.js +153 -0
  158. package/bin/terminal/admin/commands/balance.js.map +1 -0
  159. package/bin/terminal/admin/commands/config.d.ts +10 -0
  160. package/bin/terminal/admin/commands/config.d.ts.map +1 -0
  161. package/bin/terminal/admin/commands/config.js +11 -0
  162. package/bin/terminal/admin/commands/config.js.map +1 -0
  163. package/bin/terminal/admin/commands/custom.d.ts +6 -0
  164. package/bin/terminal/admin/commands/custom.d.ts.map +1 -0
  165. package/bin/terminal/admin/commands/custom.js +47 -0
  166. package/bin/terminal/admin/commands/custom.js.map +1 -0
  167. package/bin/terminal/admin/commands/instruction.d.ts +9 -0
  168. package/bin/terminal/admin/commands/instruction.d.ts.map +1 -0
  169. package/bin/terminal/admin/commands/instruction.js +10 -0
  170. package/bin/terminal/admin/commands/instruction.js.map +1 -0
  171. package/bin/terminal/admin/commands/models.d.ts +14 -0
  172. package/bin/terminal/admin/commands/models.d.ts.map +1 -0
  173. package/bin/terminal/admin/commands/models.js +61 -0
  174. package/bin/terminal/admin/commands/models.js.map +1 -0
  175. package/bin/terminal/admin/commands/payment.d.ts +6 -0
  176. package/bin/terminal/admin/commands/payment.d.ts.map +1 -0
  177. package/bin/terminal/admin/commands/payment.js +59 -0
  178. package/bin/terminal/admin/commands/payment.js.map +1 -0
  179. package/bin/terminal/admin/commands/products.d.ts +6 -0
  180. package/bin/terminal/admin/commands/products.d.ts.map +1 -0
  181. package/bin/terminal/admin/commands/products.js +80 -0
  182. package/bin/terminal/admin/commands/products.js.map +1 -0
  183. package/bin/terminal/admin/commands/service-env.d.ts +11 -0
  184. package/bin/terminal/admin/commands/service-env.d.ts.map +1 -0
  185. package/bin/terminal/admin/commands/service-env.js +248 -0
  186. package/bin/terminal/admin/commands/service-env.js.map +1 -0
  187. package/bin/terminal/admin/commands/usage.d.ts +6 -0
  188. package/bin/terminal/admin/commands/usage.d.ts.map +1 -0
  189. package/bin/terminal/admin/commands/usage.js +44 -0
  190. package/bin/terminal/admin/commands/usage.js.map +1 -0
  191. package/bin/terminal/admin/loop.d.ts +6 -0
  192. package/bin/terminal/admin/loop.d.ts.map +1 -0
  193. package/bin/terminal/admin/loop.js +70 -0
  194. package/bin/terminal/admin/loop.js.map +1 -0
  195. package/bin/terminal/agent/pi-agent.d.ts +15 -0
  196. package/bin/terminal/agent/pi-agent.d.ts.map +1 -0
  197. package/bin/terminal/agent/pi-agent.js +136 -0
  198. package/bin/terminal/agent/pi-agent.js.map +1 -0
  199. package/bin/terminal/app.d.ts +13 -0
  200. package/bin/terminal/app.d.ts.map +1 -0
  201. package/bin/terminal/app.js +123 -0
  202. package/bin/terminal/app.js.map +1 -0
  203. package/bin/terminal/auth/admin.d.ts +8 -0
  204. package/bin/terminal/auth/admin.d.ts.map +1 -0
  205. package/bin/terminal/auth/admin.js +18 -0
  206. package/bin/terminal/auth/admin.js.map +1 -0
  207. package/bin/terminal/auth/mode-select.d.ts +11 -0
  208. package/bin/terminal/auth/mode-select.d.ts.map +1 -0
  209. package/bin/terminal/auth/mode-select.js +33 -0
  210. package/bin/terminal/auth/mode-select.js.map +1 -0
  211. package/bin/terminal/auth/server-switch.d.ts +22 -0
  212. package/bin/terminal/auth/server-switch.d.ts.map +1 -0
  213. package/bin/terminal/auth/server-switch.js +241 -0
  214. package/bin/terminal/auth/server-switch.js.map +1 -0
  215. package/bin/terminal/auth/user.d.ts +19 -0
  216. package/bin/terminal/auth/user.d.ts.map +1 -0
  217. package/bin/terminal/auth/user.js +261 -0
  218. package/bin/terminal/auth/user.js.map +1 -0
  219. package/bin/terminal/core/browser.d.ts +12 -0
  220. package/bin/terminal/core/browser.d.ts.map +1 -0
  221. package/bin/terminal/core/browser.js +29 -0
  222. package/bin/terminal/core/browser.js.map +1 -0
  223. package/bin/terminal/core/env.d.ts +15 -0
  224. package/bin/terminal/core/env.d.ts.map +1 -0
  225. package/bin/terminal/core/env.js +67 -0
  226. package/bin/terminal/core/env.js.map +1 -0
  227. package/bin/terminal/core/session.d.ts +97 -0
  228. package/bin/terminal/core/session.d.ts.map +1 -0
  229. package/bin/terminal/core/session.js +342 -0
  230. package/bin/terminal/core/session.js.map +1 -0
  231. package/bin/terminal/core/stripe.d.ts +26 -0
  232. package/bin/terminal/core/stripe.d.ts.map +1 -0
  233. package/bin/terminal/core/stripe.js +22 -0
  234. package/bin/terminal/core/stripe.js.map +1 -0
  235. package/bin/terminal/core/ui.d.ts +29 -0
  236. package/bin/terminal/core/ui.d.ts.map +1 -0
  237. package/bin/terminal/core/ui.js +60 -0
  238. package/bin/terminal/core/ui.js.map +1 -0
  239. package/bin/terminal/core/update.d.ts +20 -0
  240. package/bin/terminal/core/update.d.ts.map +1 -0
  241. package/bin/terminal/core/update.js +193 -0
  242. package/bin/terminal/core/update.js.map +1 -0
  243. package/bin/terminal/user/balance.d.ts +31 -0
  244. package/bin/terminal/user/balance.d.ts.map +1 -0
  245. package/bin/terminal/user/balance.js +131 -0
  246. package/bin/terminal/user/balance.js.map +1 -0
  247. package/bin/terminal/user/chat.d.ts +12 -0
  248. package/bin/terminal/user/chat.d.ts.map +1 -0
  249. package/bin/terminal/user/chat.js +70 -0
  250. package/bin/terminal/user/chat.js.map +1 -0
  251. package/bin/terminal/user/loop.d.ts +13 -0
  252. package/bin/terminal/user/loop.d.ts.map +1 -0
  253. package/bin/terminal/user/loop.js +93 -0
  254. package/bin/terminal/user/loop.js.map +1 -0
  255. package/bin/terminal/user/models.d.ts +10 -0
  256. package/bin/terminal/user/models.d.ts.map +1 -0
  257. package/bin/terminal/user/models.js +39 -0
  258. package/bin/terminal/user/models.js.map +1 -0
  259. package/bin/utils/storage.d.ts +0 -1
  260. package/bin/utils/storage.d.ts.map +1 -1
  261. package/bin/utils/storage.js +0 -6
  262. package/bin/utils/storage.js.map +1 -1
  263. package/package.json +7 -3
  264. package/public/app.js +3 -3
  265. package/src/cli/Index.ts +2 -0
  266. package/src/cli/agent/AgentChat.ts +113 -289
  267. package/src/cli/agent/AgentChatTypes.ts +8 -12
  268. package/src/cli/agent/AgentHistory.ts +2 -2
  269. package/src/cli/agent/AgentManager.ts +27 -28
  270. package/src/cli/agent/AgentManagerTypes.ts +2 -2
  271. package/src/cli/agent/AgentReset.ts +4 -4
  272. package/src/cli/agent/AgentSelection.ts +6 -6
  273. package/src/cli/agent/AgentSelectionTypes.ts +1 -1
  274. package/src/cli/agent/Init.ts +13 -13
  275. package/src/cli/agent/Restart.ts +2 -2
  276. package/src/cli/agent/Run.ts +38 -17
  277. package/src/cli/agent/Start.ts +2 -2
  278. package/src/cli/agent/Stop.ts +2 -2
  279. package/src/cli/control-plane/ControlPlaneProcess.ts +5 -5
  280. package/src/cli/model/ModelCreateCommand.ts +1 -1
  281. package/src/cli/model/ModelManageCommand.ts +5 -3
  282. package/src/cli/model/ModelManager.ts +3 -3
  283. package/src/cli/model/ModelSupport.ts +2 -10
  284. package/src/cli/shared/CliReporterTypes.ts +1 -1
  285. package/src/cli/shared/Config.ts +2 -2
  286. package/src/cli/shared/Env.ts +22 -230
  287. package/src/cli/shared/IndexAgentCommand.ts +3 -4
  288. package/src/cli/shared/IndexSupport.ts +16 -10
  289. package/src/cli/shared/ManagedPluginActionCommands.ts +4 -4
  290. package/src/cli/shared/ManagedPluginRemote.ts +4 -4
  291. package/src/cli/shared/PluginTargetSupport.ts +19 -19
  292. package/src/cli/shared/Plugins.ts +10 -10
  293. package/src/cli/shared/PublicHostEnv.ts +2 -2
  294. package/src/cli/shared/Terminal.ts +24 -0
  295. package/src/config/DowncitySchema.ts +3 -113
  296. package/src/config/Paths.ts +9 -90
  297. package/src/control/ControlGateway.ts +3 -3
  298. package/src/control/EnvApiRoutes.ts +7 -91
  299. package/src/control/PlatformApiRoutes.ts +6 -6
  300. package/src/control/gateway/AgentActions.ts +10 -10
  301. package/src/control/gateway/AgentCatalog.ts +17 -21
  302. package/src/control/instant/InstantSessionRunner.ts +3 -1
  303. package/src/env/ProcessEnv.ts +43 -0
  304. package/src/http/auth/AuthEnv.ts +1 -1
  305. package/src/model/runtime/CreateRuntimeModel.ts +54 -37
  306. package/src/model/service/ModelPoolService.ts +13 -11
  307. package/src/platform/store/StoreEnvRepository.ts +31 -234
  308. package/src/platform/store/StoreSchema.ts +3 -49
  309. package/src/platform/store/index.ts +11 -80
  310. package/src/platform/store/schema.ts +2 -2
  311. package/src/process/daemon/Api.ts +1 -1
  312. package/src/process/daemon/CliArgs.ts +24 -1
  313. package/src/process/daemon/Client.ts +90 -22
  314. package/src/process/daemon/Manager.ts +2 -1
  315. package/src/terminal/admin/auth-error.ts +62 -0
  316. package/src/terminal/admin/commands/accounts.ts +44 -0
  317. package/src/terminal/admin/commands/balance.ts +160 -0
  318. package/src/terminal/admin/commands/config.ts +13 -0
  319. package/src/terminal/admin/commands/custom.ts +46 -0
  320. package/src/terminal/admin/commands/instruction.ts +12 -0
  321. package/src/terminal/admin/commands/models.ts +64 -0
  322. package/src/terminal/admin/commands/payment.ts +94 -0
  323. package/src/terminal/admin/commands/products.ts +72 -0
  324. package/src/terminal/admin/commands/service-env.ts +256 -0
  325. package/src/terminal/admin/commands/usage.ts +44 -0
  326. package/src/terminal/admin/loop.ts +69 -0
  327. package/src/terminal/agent/pi-agent.ts +180 -0
  328. package/src/terminal/app.ts +120 -0
  329. package/src/terminal/auth/admin.ts +21 -0
  330. package/src/terminal/auth/mode-select.ts +38 -0
  331. package/src/terminal/auth/server-switch.ts +275 -0
  332. package/src/terminal/auth/user.ts +351 -0
  333. package/src/terminal/core/browser.ts +31 -0
  334. package/src/terminal/core/env.ts +71 -0
  335. package/src/terminal/core/session.ts +450 -0
  336. package/src/terminal/core/stripe.ts +37 -0
  337. package/src/terminal/core/ui.ts +84 -0
  338. package/src/terminal/core/update.ts +230 -0
  339. package/src/terminal/user/balance.ts +215 -0
  340. package/src/terminal/user/chat.ts +80 -0
  341. package/src/terminal/user/loop.ts +112 -0
  342. package/src/terminal/user/models.ts +43 -0
  343. package/src/utils/storage.ts +0 -7
  344. package/bin/process/rpc/Client.d.ts +0 -13
  345. package/bin/process/rpc/Client.d.ts.map +0 -1
  346. package/bin/process/rpc/Client.js +0 -98
  347. package/bin/process/rpc/Client.js.map +0 -1
  348. package/bin/process/rpc/Paths.d.ts +0 -14
  349. package/bin/process/rpc/Paths.d.ts.map +0 -1
  350. package/bin/process/rpc/Paths.js +0 -36
  351. package/bin/process/rpc/Paths.js.map +0 -1
  352. package/src/process/rpc/Client.ts +0 -113
  353. package/src/process/rpc/Paths.ts +0 -43
@@ -0,0 +1,261 @@
1
+ /**
2
+ * User 鉴权模块。
3
+ *
4
+ * 登录方式不在 CLI 里写死,而是先读取 InfraRuntime 返回的 providers:
5
+ * 1. Email Login — 邮箱 + 密码直接登录
6
+ * 2. Email Register — 邮箱 + 密码注册 → 验证码 → 完成
7
+ * 3. 任意 OAuth Provider — 浏览器授权(完全以服务端 providers 返回为准)
8
+ *
9
+ * 已有有效 session 直接返回,不重复鉴权。
10
+ */
11
+ import { UserClient } from "@downcity/conduit";
12
+ import { select, isCancel } from "@clack/prompts";
13
+ import { normalizeBaseUrl } from "../core/env.js";
14
+ import { openBrowser } from "../core/browser.js";
15
+ import { readUserSession, writeUserSession, readConfig } from "../core/session.js";
16
+ import { askText, askSecret, showError, showSuccess, show } from "../core/ui.js";
17
+ // ===========================================================================
18
+ // 入口
19
+ // ===========================================================================
20
+ export async function userAuth(baseUrl) {
21
+ const existing = readUserSession(normalizeBaseUrl(baseUrl));
22
+ if (existing)
23
+ return { session: existing, config: readConfig() };
24
+ while (true) {
25
+ const method = await selectAuthMethod(baseUrl);
26
+ if (!method)
27
+ return undefined;
28
+ const ctx = await doAuth(baseUrl, method);
29
+ if (ctx)
30
+ return ctx;
31
+ }
32
+ }
33
+ async function selectAuthMethod(baseUrl) {
34
+ const options = await loadAuthOptions(baseUrl);
35
+ if (options.length === 0) {
36
+ showError("No sign-in methods enabled on server.");
37
+ return undefined;
38
+ }
39
+ const selected = await select({
40
+ message: "Sign in",
41
+ options,
42
+ });
43
+ if (!selected || isCancel(selected))
44
+ return undefined;
45
+ return selected;
46
+ }
47
+ async function loadAuthOptions(baseUrl) {
48
+ const client = new UserClient({ base_url: normalizeBaseUrl(baseUrl) });
49
+ const accounts = client.service("accounts");
50
+ try {
51
+ const result = await accounts.get("providers");
52
+ return mapProvidersToOptions(result.items ?? []);
53
+ }
54
+ catch (e) {
55
+ showError(`Failed to load sign-in methods: ${e instanceof Error ? e.message : String(e)}`);
56
+ return [];
57
+ }
58
+ }
59
+ function mapProvidersToOptions(items) {
60
+ const options = [];
61
+ for (const item of items) {
62
+ if (!item.enabled)
63
+ continue;
64
+ if (item.id === "email" && item.type === "password") {
65
+ if (item.login_enabled !== false) {
66
+ options.push({ label: "Email Login", value: "login", hint: "Sign in with email + password" });
67
+ }
68
+ if (item.register_enabled !== false) {
69
+ options.push({ label: "Email Register", value: "register", hint: "Create a new account" });
70
+ }
71
+ continue;
72
+ }
73
+ if (item.type === "oauth" && typeof item.id === "string" && item.id.trim()) {
74
+ const provider = item.id.trim();
75
+ options.push({
76
+ label: formatOAuthProviderLabel(provider),
77
+ value: `oauth:${provider}`,
78
+ hint: `Sign in with ${formatOAuthProviderLabel(provider)} OAuth`,
79
+ });
80
+ }
81
+ }
82
+ return options;
83
+ }
84
+ // ===========================================================================
85
+ // 鉴权分发
86
+ // ===========================================================================
87
+ async function doAuth(baseUrl, method) {
88
+ if (method.startsWith("oauth:")) {
89
+ return oauthAuth(baseUrl, method.slice("oauth:".length));
90
+ }
91
+ switch (method) {
92
+ case "login": return emailLogin(baseUrl);
93
+ case "register": return emailRegister(baseUrl);
94
+ }
95
+ }
96
+ async function emailLogin(baseUrl) {
97
+ const email = await askText("email");
98
+ if (!email || !email.includes("@")) {
99
+ showError("invalid email");
100
+ return undefined;
101
+ }
102
+ const password = await askSecret("password");
103
+ if (!password)
104
+ return undefined;
105
+ const client = new UserClient({ base_url: normalizeBaseUrl(baseUrl) });
106
+ const accounts = client.service("accounts");
107
+ try {
108
+ const result = await accounts.action("login").invoke({ email, password });
109
+ if (result.error) {
110
+ showError(result.error);
111
+ return undefined;
112
+ }
113
+ if (!result.user_token) {
114
+ showError("login failed: no token");
115
+ return undefined;
116
+ }
117
+ return saveSession(baseUrl, email, result);
118
+ }
119
+ catch (e) {
120
+ showError(e instanceof Error ? e.message : String(e));
121
+ return undefined;
122
+ }
123
+ }
124
+ async function emailRegister(baseUrl) {
125
+ const email = await askText("email");
126
+ if (!email || !email.includes("@")) {
127
+ showError("invalid email");
128
+ return undefined;
129
+ }
130
+ const password = await askSecret("password (min 8 characters)");
131
+ if (!password || password.length < 8) {
132
+ showError("password must be at least 8 characters");
133
+ return undefined;
134
+ }
135
+ const client = new UserClient({ base_url: normalizeBaseUrl(baseUrl) });
136
+ const accounts = client.service("accounts");
137
+ let reg;
138
+ try {
139
+ reg = await accounts.action("register").invoke({ email, password });
140
+ }
141
+ catch (e) {
142
+ showError(e instanceof Error ? e.message : String(e));
143
+ return undefined;
144
+ }
145
+ if (reg.error) {
146
+ showError(reg.error);
147
+ return undefined;
148
+ }
149
+ if (!reg.success) {
150
+ showError("registration failed");
151
+ return undefined;
152
+ }
153
+ showSuccess("Verification code sent to your email");
154
+ show("If email delivery is unavailable, check server logs for the verification code.");
155
+ const token = await askText("verification token");
156
+ if (!token)
157
+ return undefined;
158
+ try {
159
+ const verify = await accounts.action("verify-email").invoke({ token: token.trim() });
160
+ if (verify.error) {
161
+ showError(verify.error);
162
+ return undefined;
163
+ }
164
+ if (!verify.user_token) {
165
+ showError("verification failed: no token");
166
+ return undefined;
167
+ }
168
+ return saveSession(baseUrl, email, verify);
169
+ }
170
+ catch (e) {
171
+ showError(e instanceof Error ? e.message : String(e));
172
+ return undefined;
173
+ }
174
+ }
175
+ async function oauthAuth(baseUrl, provider) {
176
+ const client = new UserClient({ base_url: normalizeBaseUrl(baseUrl) });
177
+ const accounts = client.service("accounts");
178
+ let start;
179
+ try {
180
+ start = await accounts.action("oauth/start").invoke({ provider });
181
+ }
182
+ catch (e) {
183
+ showError(e instanceof Error ? e.message : String(e));
184
+ return undefined;
185
+ }
186
+ if (start.error) {
187
+ showError(start.error);
188
+ return undefined;
189
+ }
190
+ if (!start.url || !start.state) {
191
+ showError("failed to start OAuth");
192
+ return undefined;
193
+ }
194
+ show(`Opening browser for ${provider} authorization...`);
195
+ const opened = openBrowser(start.url);
196
+ if (!opened)
197
+ showError(`Could not open browser. Please visit:\n ${start.url}`);
198
+ show("Waiting for authorization...");
199
+ const result = await pollOAuth(client, start.state);
200
+ if (!result || result.error) {
201
+ showError(result?.error ?? "OAuth failed");
202
+ return undefined;
203
+ }
204
+ if (!result.user_token) {
205
+ showError("OAuth failed: no token");
206
+ return undefined;
207
+ }
208
+ showSuccess(`${provider} login successful`);
209
+ return saveSession(baseUrl, `${provider}:`, result);
210
+ }
211
+ /** 轮询 OAuth 结果(最多 3 分钟) */
212
+ async function pollOAuth(client, state) {
213
+ const accounts = client.service("accounts");
214
+ for (let i = 0; i < 180; i++) {
215
+ try {
216
+ const result = await accounts.get("oauth/result", { state });
217
+ if (result.error)
218
+ return result;
219
+ if (result.status === "done")
220
+ return result;
221
+ }
222
+ catch { /* continue polling */ }
223
+ await sleep(1000);
224
+ }
225
+ return { error: "OAuth timed out" };
226
+ }
227
+ // ===========================================================================
228
+ // 工具函数
229
+ // ===========================================================================
230
+ function saveSession(baseUrl, email, result) {
231
+ const session = {
232
+ base_url: normalizeBaseUrl(baseUrl),
233
+ email,
234
+ user_id: result.user_id ?? "",
235
+ product_id: "prod_downcity",
236
+ user_token: result.user_token,
237
+ };
238
+ writeUserSession(session);
239
+ showSuccess(`signed in: ${email}`);
240
+ return { session, config: readConfig() };
241
+ }
242
+ function sleep(ms) {
243
+ return new Promise((resolve) => setTimeout(resolve, ms));
244
+ }
245
+ function formatOAuthProviderLabel(provider) {
246
+ const normalized = provider.trim().toLowerCase();
247
+ if (!normalized)
248
+ return "OAuth";
249
+ if (normalized === "github")
250
+ return "GitHub";
251
+ if (normalized === "google")
252
+ return "Google";
253
+ if (normalized === "wechat")
254
+ return "WeChat";
255
+ return normalized
256
+ .split(/[_-]+/)
257
+ .filter(Boolean)
258
+ .map((part) => part.slice(0, 1).toUpperCase() + part.slice(1))
259
+ .join(" ");
260
+ }
261
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/terminal/auth/user.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAoB,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAgEjF,8EAA8E;AAC9E,KAAK;AACL,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe;IAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,IAAI,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;IAEjE,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAE9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAe;IAC7C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,uCAAuC,CAAC,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;QAC5B,OAAO,EAAE,SAAS;QAClB,OAAO;KACR,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO,QAAsB,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAe;IAC5C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAqC,WAAW,CAAC,CAAC;QACnF,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS,CAAC,mCAAmC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3F,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAA6B;IAC1D,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,SAAS;QAE5B,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC,CAAC;YAChG,CAAC;YACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC;YAC7F,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC;gBACzC,KAAK,EAAE,SAAS,QAAQ,EAAE;gBAC1B,IAAI,EAAE,gBAAgB,wBAAwB,CAAC,QAAQ,CAAC,QAAQ;aACjE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,KAAK,UAAU,MAAM,CAAC,OAAe,EAAE,MAAkB;IACvD,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO,CAAC,CAAI,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5C,KAAK,UAAU,CAAC,CAAC,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAaD,KAAK,UAAU,UAAU,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAErF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;QAElF,OAAO,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,MAAkD,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAoBD,KAAK,UAAU,aAAa,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAErF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAChE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAEhH,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,GAAmB,CAAC;IACxB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAC1D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAEzE,WAAW,CAAC,sCAAsC,CAAC,CAAC;IACpD,IAAI,CAAC,gFAAgF,CAAC,CAAC;IAEvF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAe,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;QAEzF,OAAO,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,MAAkD,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAkBD,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,QAAgB;IACxD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,KAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAmB,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAEzF,IAAI,CAAC,uBAAuB,QAAQ,mBAAmB,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM;QAAE,SAAS,CAAC,4CAA4C,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAEhF,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAEpD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAAC,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,cAAc,CAAC,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAC9F,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAElF,WAAW,CAAC,GAAG,QAAQ,mBAAmB,CAAC,CAAC;IAC5C,OAAO,WAAW,CAAC,OAAO,EAAE,GAAG,QAAQ,GAAG,EAAE,MAAkD,CAAC,CAAC;AAClG,CAAC;AAED,2BAA2B;AAC3B,KAAK,UAAU,SAAS,CAAC,MAAkB,EAAE,KAAa;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAkB,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9E,IAAI,MAAM,CAAC,KAAK;gBAAE,OAAO,MAAM,CAAC;YAChC,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAClC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,SAAS,WAAW,CAAC,OAAe,EAAE,KAAa,EAAE,MAAgD;IACnG,MAAM,OAAO,GAAgB;QAC3B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACnC,KAAK;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,UAAU,EAAE,eAAe;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IACF,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,WAAW,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;IACnC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAgB;IAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,CAAC,UAAU;QAAE,OAAO,OAAO,CAAC;IAChC,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC7C,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC7C,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAO,UAAU;SACd,KAAK,CAAC,OAAO,CAAC;SACd,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC7D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 浏览器工具模块。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 统一封装跨平台打开默认浏览器
6
+ * - Stripe Checkout、OAuth 登录都复用这里,避免重复实现
7
+ */
8
+ /**
9
+ * 打开系统默认浏览器。
10
+ */
11
+ export declare function openBrowser(url: string): boolean;
12
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/terminal/core/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAiBhD"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 浏览器工具模块。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 统一封装跨平台打开默认浏览器
6
+ * - Stripe Checkout、OAuth 登录都复用这里,避免重复实现
7
+ */
8
+ import { execFileSync } from "node:child_process";
9
+ /**
10
+ * 打开系统默认浏览器。
11
+ */
12
+ export function openBrowser(url) {
13
+ try {
14
+ if (process.platform === "darwin") {
15
+ execFileSync("open", [url], { stdio: "ignore" });
16
+ return true;
17
+ }
18
+ if (process.platform === "win32") {
19
+ execFileSync("cmd", ["/c", "start", "", url], { stdio: "ignore" });
20
+ return true;
21
+ }
22
+ execFileSync("xdg-open", [url], { stdio: "ignore" });
23
+ return true;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/terminal/core/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,YAAY,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 运行时工具模块。
3
+ *
4
+ * 提供 CLI 参数解析、URL 规范化等基础设施。
5
+ */
6
+ export declare const DEFAULT_HOST = "127.0.0.1";
7
+ export declare const DEFAULT_PORT = 43127;
8
+ export declare const DEFAULT_BASE_URL = "http://127.0.0.1:43127";
9
+ export declare const DEFAULT_PRODUCT_ID = "prod_downcity";
10
+ export declare function parseArgs(argv: string[]): {
11
+ command: string;
12
+ options: Record<string, string | boolean>;
13
+ };
14
+ export declare function normalizeBaseUrl(baseUrl?: string): string;
15
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/terminal/core/env.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,YAAY,QAAQ,CAAC;AAClC,eAAO,MAAM,gBAAgB,2BAA2C,CAAC;AACzE,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAMlD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE;;;EAevC;AAMD,wBAAgB,gBAAgB,CAAC,OAAO,SAAmB,GAAG,MAAM,CAWnE"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * 运行时工具模块。
3
+ *
4
+ * 提供 CLI 参数解析、URL 规范化等基础设施。
5
+ */
6
+ // ============================================================
7
+ // 常量
8
+ // ============================================================
9
+ export const DEFAULT_HOST = "127.0.0.1";
10
+ export const DEFAULT_PORT = 43127;
11
+ export const DEFAULT_BASE_URL = `http://${DEFAULT_HOST}:${DEFAULT_PORT}`;
12
+ export const DEFAULT_PRODUCT_ID = "prod_downcity";
13
+ // ============================================================
14
+ // CLI 参数解析
15
+ // ============================================================
16
+ export function parseArgs(argv) {
17
+ const positionals = [];
18
+ const options = {};
19
+ for (let index = 0; index < argv.length; index += 1) {
20
+ const token = argv[index];
21
+ if (!token.startsWith("--")) {
22
+ positionals.push(token);
23
+ continue;
24
+ }
25
+ const key = token.slice(2).replace(/-([a-z])/g, (_, l) => l.toUpperCase());
26
+ const next = argv[index + 1];
27
+ if (!next || next.startsWith("--")) {
28
+ options[key] = true;
29
+ continue;
30
+ }
31
+ options[key] = next;
32
+ index += 1;
33
+ }
34
+ return { command: positionals[0] ?? "", options };
35
+ }
36
+ // ============================================================
37
+ // URL 规范化
38
+ // ============================================================
39
+ export function normalizeBaseUrl(baseUrl = DEFAULT_BASE_URL) {
40
+ const raw = String(baseUrl).trim();
41
+ if (!raw)
42
+ return DEFAULT_BASE_URL;
43
+ const hasProtocol = /^[a-z][a-z\d+.-]*:\/\//iu.test(raw);
44
+ const withProtocol = hasProtocol ? raw : `${defaultProtocol(raw)}://${raw}`;
45
+ const url = new URL(withProtocol);
46
+ if (!url.port && isLocalOrIp(url.hostname))
47
+ url.port = String(DEFAULT_PORT);
48
+ if (!url.pathname || url.pathname === "/")
49
+ url.pathname = "/";
50
+ return url.toString().replace(/\/+$/, "");
51
+ }
52
+ // ============================================================
53
+ // 内部辅助
54
+ // ============================================================
55
+ function defaultProtocol(value) {
56
+ const host = value.split("/")[0] ?? "";
57
+ return (isLocalOrIp(host.split(":")[0] ?? "") || host.includes(":")) ? "http" : "https";
58
+ }
59
+ function isLocalOrIp(value) {
60
+ const host = value.replace(/^\[/u, "").replace(/\]$/u, "");
61
+ return host === "localhost" || isIpv4Host(host) || host.includes(":");
62
+ }
63
+ function isIpv4Host(value) {
64
+ const parts = value.split(".");
65
+ return parts.length === 4 && parts.every((p) => /^\d+$/u.test(p) && Number(p) <= 255);
66
+ }
67
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/terminal/core/env.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+DAA+D;AAC/D,KAAK;AACL,+DAA+D;AAE/D,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,YAAY,IAAI,YAAY,EAAE,CAAC;AACzE,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD,+DAA+D;AAC/D,WAAW;AACX,+DAA+D;AAE/D,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,OAAO,GAAqC,EAAE,CAAC;IAErD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAAC,SAAS;QAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACpB,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC;AAED,+DAA+D;AAC/D,UAAU;AACV,+DAA+D;AAE/D,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAAG,gBAAgB;IACzD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,gBAAgB,CAAC;IAElC,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IAElC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5E,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG;QAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC;IAC9D,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,+DAA+D;AAC/D,OAAO;AACP,+DAA+D;AAE/D,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1F,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3D,OAAO,IAAI,KAAK,WAAW,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AACxF,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Session 与 server 配置持久化模块。
3
+ *
4
+ * 关键说明(中文)
5
+ * - server 是一等资源,必须显式配置后 CLI 才进入身份菜单
6
+ * - 不再注入默认 server;没有 server 时必须先添加
7
+ * - user session 仍然按 base_url 隔离保存
8
+ * - admin_secret_key 直接属于 server 配置,不再作为独立 session 维护
9
+ */
10
+ export interface AdminSession {
11
+ /** 当前 server 的 server URL */
12
+ base_url: string;
13
+ /** 当前 server 的 admin secret key */
14
+ admin_token: string;
15
+ }
16
+ export interface UserSession {
17
+ /** 当前登录目标的 server server URL */
18
+ base_url: string;
19
+ /** 用户邮箱 */
20
+ email: string;
21
+ /** 用户 ID */
22
+ user_id: string;
23
+ /** 当前 product ID */
24
+ product_id: string;
25
+ /** user token */
26
+ user_token: string;
27
+ }
28
+ export interface ServerProfile {
29
+ /** 展示名称 */
30
+ name: string;
31
+ /** InfraRuntime 服务地址 */
32
+ base_url: string;
33
+ /** 该 server 对应的 admin secret key */
34
+ admin_secret_key: string;
35
+ }
36
+ export interface ClientConfig {
37
+ /** 当前激活的 server URL */
38
+ active_server_url?: string;
39
+ /** 已保存的 server 列表 */
40
+ servers: ServerProfile[];
41
+ /** 当前选择的模型 ID */
42
+ model: string;
43
+ /** 上次使用的身份 */
44
+ last_identity?: "admin" | "user";
45
+ }
46
+ /**
47
+ * 从磁盘读取 config,并把旧结构迁移到新的 server 模型。
48
+ */
49
+ export declare function readConfig(): ClientConfig;
50
+ /**
51
+ * 写入 config 到磁盘。
52
+ */
53
+ export declare function writeConfig(config: ClientConfig): void;
54
+ /**
55
+ * 读取当前激活的 server。
56
+ */
57
+ export declare function readActiveServer(): ServerProfile | undefined;
58
+ /**
59
+ * 设置当前激活的 server。
60
+ */
61
+ export declare function setActiveServer(baseUrl: string): void;
62
+ /**
63
+ * 添加 server,并设为当前激活 server。
64
+ */
65
+ export declare function addServer(input: {
66
+ base_url: string;
67
+ admin_secret_key: string;
68
+ name?: string;
69
+ }): ServerProfile;
70
+ /**
71
+ * 更新已存在的 server。
72
+ *
73
+ * 关键说明(中文)
74
+ * - 如果 base_url 变化,会清除旧 URL 下的 user session
75
+ * - active server 会自动切换到新 URL
76
+ */
77
+ export declare function updateServer(currentBaseUrl: string, input: {
78
+ base_url: string;
79
+ admin_secret_key: string;
80
+ name?: string;
81
+ }): ServerProfile;
82
+ /**
83
+ * 删除 server,同时清除该 URL 下的所有 session。
84
+ */
85
+ export declare function removeServer(baseUrl: string): void;
86
+ /**
87
+ * 根据 URL 读取 server。
88
+ */
89
+ export declare function readServer(baseUrl: string): ServerProfile | undefined;
90
+ export declare function readUserSession(url: string): UserSession | undefined;
91
+ export declare function writeUserSession(session: UserSession): void;
92
+ export declare function clearUserSession(url: string): void;
93
+ /**
94
+ * 清除某个 server URL 下的所有 session。
95
+ */
96
+ export declare function clearServerSessions(url: string): void;
97
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/terminal/core/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkBH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB;IACrB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc;IACd,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAClC;AAMD;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAezC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAYtD;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAG5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAUrD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,aAAa,CAkBhB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE;IACL,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACA,aAAa,CA8Bf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAclD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAGrE;AAcD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEpE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAE3D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAelD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGrD"}