@caoruhua/open-claude-remote 0.1.0 → 0.1.3

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 (322) hide show
  1. package/README.md +285 -295
  2. package/dist/backend/src/api/auth-routes.d.ts.map +1 -0
  3. package/dist/backend/src/api/auth-routes.js.map +1 -0
  4. package/dist/backend/src/api/config-routes.d.ts +7 -0
  5. package/dist/backend/src/api/config-routes.d.ts.map +1 -0
  6. package/dist/{api → backend/src/api}/config-routes.js +125 -13
  7. package/dist/backend/src/api/config-routes.js.map +1 -0
  8. package/dist/backend/src/api/health-routes.d.ts.map +1 -0
  9. package/dist/backend/src/api/health-routes.js.map +1 -0
  10. package/dist/backend/src/api/hook-routes.d.ts.map +1 -0
  11. package/dist/backend/src/api/hook-routes.js.map +1 -0
  12. package/dist/{api → backend/src/api}/instance-routes.d.ts +5 -1
  13. package/dist/backend/src/api/instance-routes.d.ts.map +1 -0
  14. package/dist/{api → backend/src/api}/instance-routes.js +5 -1
  15. package/dist/backend/src/api/instance-routes.js.map +1 -0
  16. package/dist/backend/src/api/push-routes.d.ts.map +1 -0
  17. package/dist/backend/src/api/push-routes.js.map +1 -0
  18. package/dist/{api → backend/src/api}/router.d.ts +7 -1
  19. package/dist/backend/src/api/router.d.ts.map +1 -0
  20. package/dist/{api → backend/src/api}/router.js +1 -1
  21. package/dist/backend/src/api/router.js.map +1 -0
  22. package/dist/backend/src/api/status-routes.d.ts.map +1 -0
  23. package/dist/backend/src/api/status-routes.js.map +1 -0
  24. package/dist/backend/src/attach.d.ts.map +1 -0
  25. package/dist/{attach.js → backend/src/attach.js} +11 -11
  26. package/dist/backend/src/attach.js.map +1 -0
  27. package/dist/backend/src/auth/auth-middleware.d.ts.map +1 -0
  28. package/dist/backend/src/auth/auth-middleware.js.map +1 -0
  29. package/dist/backend/src/auth/rate-limiter.d.ts.map +1 -0
  30. package/dist/backend/src/auth/rate-limiter.js.map +1 -0
  31. package/dist/backend/src/auth/token-generator.d.ts.map +1 -0
  32. package/dist/{auth → backend/src/auth}/token-generator.js +1 -1
  33. package/dist/backend/src/auth/token-generator.js.map +1 -0
  34. package/dist/{cli-utils.d.ts → backend/src/cli-utils.d.ts} +3 -3
  35. package/dist/backend/src/cli-utils.d.ts.map +1 -0
  36. package/dist/{cli-utils.js → backend/src/cli-utils.js} +49 -36
  37. package/dist/backend/src/cli-utils.js.map +1 -0
  38. package/dist/backend/src/cli.d.ts +22 -0
  39. package/dist/backend/src/cli.d.ts.map +1 -0
  40. package/dist/{cli.js → backend/src/cli.js} +21 -16
  41. package/dist/backend/src/cli.js.map +1 -0
  42. package/dist/{config.d.ts → backend/src/config.d.ts} +29 -5
  43. package/dist/backend/src/config.d.ts.map +1 -0
  44. package/dist/{config.js → backend/src/config.js} +198 -12
  45. package/dist/backend/src/config.js.map +1 -0
  46. package/dist/backend/src/deps/detector.d.ts +18 -0
  47. package/dist/backend/src/deps/detector.d.ts.map +1 -0
  48. package/dist/backend/src/deps/detector.js +49 -0
  49. package/dist/backend/src/deps/detector.js.map +1 -0
  50. package/dist/backend/src/deps/index.d.ts +14 -0
  51. package/dist/backend/src/deps/index.d.ts.map +1 -0
  52. package/dist/backend/src/deps/index.js +219 -0
  53. package/dist/backend/src/deps/index.js.map +1 -0
  54. package/dist/backend/src/deps/installer.d.ts +13 -0
  55. package/dist/backend/src/deps/installer.d.ts.map +1 -0
  56. package/dist/backend/src/deps/installer.js +113 -0
  57. package/dist/backend/src/deps/installer.js.map +1 -0
  58. package/dist/backend/src/deps/platform.d.ts +27 -0
  59. package/dist/backend/src/deps/platform.d.ts.map +1 -0
  60. package/dist/backend/src/deps/platform.js +154 -0
  61. package/dist/backend/src/deps/platform.js.map +1 -0
  62. package/dist/backend/src/deps/prompt.d.ts +51 -0
  63. package/dist/backend/src/deps/prompt.d.ts.map +1 -0
  64. package/dist/backend/src/deps/prompt.js +128 -0
  65. package/dist/backend/src/deps/prompt.js.map +1 -0
  66. package/dist/backend/src/deps/types.d.ts +40 -0
  67. package/dist/backend/src/deps/types.d.ts.map +1 -0
  68. package/dist/backend/src/deps/types.js +54 -0
  69. package/dist/backend/src/deps/types.js.map +1 -0
  70. package/dist/backend/src/hooks/hook-receiver.d.ts +39 -0
  71. package/dist/backend/src/hooks/hook-receiver.d.ts.map +1 -0
  72. package/dist/backend/src/hooks/hook-receiver.js +96 -0
  73. package/dist/backend/src/hooks/hook-receiver.js.map +1 -0
  74. package/dist/backend/src/hooks/hook-types.d.ts +165 -0
  75. package/dist/backend/src/hooks/hook-types.d.ts.map +1 -0
  76. package/dist/backend/src/hooks/hook-types.js +16 -0
  77. package/dist/backend/src/hooks/hook-types.js.map +1 -0
  78. package/dist/backend/src/index.d.ts.map +1 -0
  79. package/dist/{index.js → backend/src/index.js} +27 -32
  80. package/dist/backend/src/index.js.map +1 -0
  81. package/dist/backend/src/logger/logger.d.ts.map +1 -0
  82. package/dist/{logger → backend/src/logger}/logger.js +3 -5
  83. package/dist/{logger → backend/src/logger}/logger.js.map +1 -1
  84. package/dist/backend/src/notification/dingtalk-service.d.ts.map +1 -0
  85. package/dist/{notification → backend/src/notification}/dingtalk-service.js +1 -1
  86. package/dist/backend/src/notification/dingtalk-service.js.map +1 -0
  87. package/dist/backend/src/notification/notification-manager.d.ts +44 -0
  88. package/dist/backend/src/notification/notification-manager.d.ts.map +1 -0
  89. package/dist/backend/src/notification/notification-manager.js +94 -0
  90. package/dist/backend/src/notification/notification-manager.js.map +1 -0
  91. package/dist/backend/src/notification/notification-service-factory.d.ts +67 -0
  92. package/dist/backend/src/notification/notification-service-factory.d.ts.map +1 -0
  93. package/dist/backend/src/notification/notification-service-factory.js +146 -0
  94. package/dist/backend/src/notification/notification-service-factory.js.map +1 -0
  95. package/dist/backend/src/notification/wechat-work-service.d.ts +24 -0
  96. package/dist/backend/src/notification/wechat-work-service.d.ts.map +1 -0
  97. package/dist/backend/src/notification/wechat-work-service.js +88 -0
  98. package/dist/backend/src/notification/wechat-work-service.js.map +1 -0
  99. package/dist/backend/src/pty/output-buffer.d.ts.map +1 -0
  100. package/dist/backend/src/pty/output-buffer.js.map +1 -0
  101. package/dist/backend/src/pty/pty-manager.d.ts.map +1 -0
  102. package/dist/backend/src/pty/pty-manager.js.map +1 -0
  103. package/dist/backend/src/pty/types.d.ts.map +1 -0
  104. package/dist/{pty → backend/src/pty}/types.js.map +1 -1
  105. package/dist/backend/src/pty/virtual-pty.d.ts.map +1 -0
  106. package/dist/backend/src/pty/virtual-pty.js.map +1 -0
  107. package/dist/backend/src/push/push-service.d.ts.map +1 -0
  108. package/dist/backend/src/push/push-service.js.map +1 -0
  109. package/dist/{registry → backend/src/registry}/instance-registry.d.ts +1 -1
  110. package/dist/backend/src/registry/instance-registry.d.ts.map +1 -0
  111. package/dist/{registry → backend/src/registry}/instance-registry.js +1 -1
  112. package/dist/backend/src/registry/instance-registry.js.map +1 -0
  113. package/dist/backend/src/registry/instance-spawner.d.ts.map +1 -0
  114. package/dist/{registry → backend/src/registry}/instance-spawner.js +17 -5
  115. package/dist/backend/src/registry/instance-spawner.js.map +1 -0
  116. package/dist/backend/src/registry/port-finder.d.ts.map +1 -0
  117. package/dist/backend/src/registry/port-finder.js.map +1 -0
  118. package/dist/backend/src/registry/shared-token.d.ts.map +1 -0
  119. package/dist/backend/src/registry/shared-token.js.map +1 -0
  120. package/dist/{registry → backend/src/registry}/stop-instances.d.ts +1 -1
  121. package/dist/backend/src/registry/stop-instances.d.ts.map +1 -0
  122. package/dist/{registry → backend/src/registry}/stop-instances.js +1 -1
  123. package/dist/backend/src/registry/stop-instances.js.map +1 -0
  124. package/dist/{session → backend/src/session}/session-controller.d.ts +21 -6
  125. package/dist/backend/src/session/session-controller.d.ts.map +1 -0
  126. package/dist/{session → backend/src/session}/session-controller.js +108 -25
  127. package/dist/backend/src/session/session-controller.js.map +1 -0
  128. package/dist/backend/src/terminal/terminal-relay.d.ts.map +1 -0
  129. package/dist/backend/src/terminal/terminal-relay.js.map +1 -0
  130. package/dist/backend/src/utils/ansi-filter.d.ts.map +1 -0
  131. package/dist/backend/src/utils/ansi-filter.js.map +1 -0
  132. package/dist/backend/src/utils/file-lock.d.ts.map +1 -0
  133. package/dist/backend/src/utils/file-lock.js.map +1 -0
  134. package/dist/backend/src/utils/ip-monitor.d.ts.map +1 -0
  135. package/dist/backend/src/utils/ip-monitor.js.map +1 -0
  136. package/dist/backend/src/utils/network.d.ts.map +1 -0
  137. package/dist/backend/src/utils/network.js.map +1 -0
  138. package/dist/backend/src/utils/qrcode-banner.d.ts.map +1 -0
  139. package/dist/backend/src/utils/qrcode-banner.js.map +1 -0
  140. package/dist/backend/src/ws/ws-handler.d.ts.map +1 -0
  141. package/dist/backend/src/ws/ws-handler.js.map +1 -0
  142. package/dist/{ws → backend/src/ws}/ws-server.d.ts +1 -1
  143. package/dist/backend/src/ws/ws-server.d.ts.map +1 -0
  144. package/dist/{ws → backend/src/ws}/ws-server.js +2 -2
  145. package/dist/backend/src/ws/ws-server.js.map +1 -0
  146. package/dist/shared/constants.d.ts.map +1 -0
  147. package/dist/shared/constants.js.map +1 -0
  148. package/dist/shared/defaults.d.ts.map +1 -0
  149. package/dist/shared/defaults.js.map +1 -0
  150. package/{shared-dist → dist/shared}/index.d.ts +1 -0
  151. package/dist/shared/index.d.ts.map +1 -0
  152. package/{shared-dist → dist/shared}/index.js +1 -0
  153. package/dist/shared/index.js.map +1 -0
  154. package/{shared-dist → dist/shared}/instance.d.ts +13 -0
  155. package/dist/shared/instance.d.ts.map +1 -0
  156. package/dist/shared/instance.js.map +1 -0
  157. package/dist/shared/notification-types.d.ts +85 -0
  158. package/dist/shared/notification-types.d.ts.map +1 -0
  159. package/dist/shared/notification-types.js +92 -0
  160. package/dist/shared/notification-types.js.map +1 -0
  161. package/{shared-dist → dist/shared}/ws-protocol.d.ts +6 -1
  162. package/dist/shared/ws-protocol.d.ts.map +1 -0
  163. package/dist/shared/ws-protocol.js.map +1 -0
  164. package/frontend-dist/assets/index-DOeBWumG.js +152 -0
  165. package/frontend-dist/index.html +2 -2
  166. package/package.json +62 -27
  167. package/scripts/build.sh +21 -0
  168. package/scripts/dev.sh +11 -0
  169. package/scripts/fix-node-pty-permissions.js +47 -0
  170. package/scripts/git-hooks/pre-commit +258 -0
  171. package/scripts/stop.sh +5 -0
  172. package/dist/api/auth-routes.d.ts.map +0 -1
  173. package/dist/api/auth-routes.js.map +0 -1
  174. package/dist/api/config-routes.d.ts +0 -4
  175. package/dist/api/config-routes.d.ts.map +0 -1
  176. package/dist/api/config-routes.js.map +0 -1
  177. package/dist/api/health-routes.d.ts.map +0 -1
  178. package/dist/api/health-routes.js.map +0 -1
  179. package/dist/api/hook-routes.d.ts.map +0 -1
  180. package/dist/api/hook-routes.js.map +0 -1
  181. package/dist/api/instance-routes.d.ts.map +0 -1
  182. package/dist/api/instance-routes.js.map +0 -1
  183. package/dist/api/push-routes.d.ts.map +0 -1
  184. package/dist/api/push-routes.js.map +0 -1
  185. package/dist/api/router.d.ts.map +0 -1
  186. package/dist/api/router.js.map +0 -1
  187. package/dist/api/status-routes.d.ts.map +0 -1
  188. package/dist/api/status-routes.js.map +0 -1
  189. package/dist/attach.d.ts.map +0 -1
  190. package/dist/attach.js.map +0 -1
  191. package/dist/auth/auth-middleware.d.ts.map +0 -1
  192. package/dist/auth/auth-middleware.js.map +0 -1
  193. package/dist/auth/rate-limiter.d.ts.map +0 -1
  194. package/dist/auth/rate-limiter.js.map +0 -1
  195. package/dist/auth/token-generator.d.ts.map +0 -1
  196. package/dist/auth/token-generator.js.map +0 -1
  197. package/dist/cli-utils.d.ts.map +0 -1
  198. package/dist/cli-utils.js.map +0 -1
  199. package/dist/cli.d.ts +0 -21
  200. package/dist/cli.d.ts.map +0 -1
  201. package/dist/cli.js.map +0 -1
  202. package/dist/config.d.ts.map +0 -1
  203. package/dist/config.js.map +0 -1
  204. package/dist/hooks/hook-receiver.d.ts +0 -39
  205. package/dist/hooks/hook-receiver.d.ts.map +0 -1
  206. package/dist/hooks/hook-receiver.js +0 -46
  207. package/dist/hooks/hook-receiver.js.map +0 -1
  208. package/dist/index.d.ts.map +0 -1
  209. package/dist/index.js.map +0 -1
  210. package/dist/logger/logger.d.ts.map +0 -1
  211. package/dist/notification/dingtalk-service.d.ts.map +0 -1
  212. package/dist/notification/dingtalk-service.js.map +0 -1
  213. package/dist/pty/output-buffer.d.ts.map +0 -1
  214. package/dist/pty/output-buffer.js.map +0 -1
  215. package/dist/pty/pty-manager.d.ts.map +0 -1
  216. package/dist/pty/pty-manager.js.map +0 -1
  217. package/dist/pty/types.d.ts.map +0 -1
  218. package/dist/pty/virtual-pty.d.ts.map +0 -1
  219. package/dist/pty/virtual-pty.js.map +0 -1
  220. package/dist/push/push-service.d.ts.map +0 -1
  221. package/dist/push/push-service.js.map +0 -1
  222. package/dist/registry/instance-registry.d.ts.map +0 -1
  223. package/dist/registry/instance-registry.js.map +0 -1
  224. package/dist/registry/instance-spawner.d.ts.map +0 -1
  225. package/dist/registry/instance-spawner.js.map +0 -1
  226. package/dist/registry/port-finder.d.ts.map +0 -1
  227. package/dist/registry/port-finder.js.map +0 -1
  228. package/dist/registry/shared-token.d.ts.map +0 -1
  229. package/dist/registry/shared-token.js.map +0 -1
  230. package/dist/registry/stop-instances.d.ts.map +0 -1
  231. package/dist/registry/stop-instances.js.map +0 -1
  232. package/dist/session/session-controller.d.ts.map +0 -1
  233. package/dist/session/session-controller.js.map +0 -1
  234. package/dist/terminal/terminal-relay.d.ts.map +0 -1
  235. package/dist/terminal/terminal-relay.js.map +0 -1
  236. package/dist/utils/ansi-filter.d.ts.map +0 -1
  237. package/dist/utils/ansi-filter.js.map +0 -1
  238. package/dist/utils/file-lock.d.ts.map +0 -1
  239. package/dist/utils/file-lock.js.map +0 -1
  240. package/dist/utils/ip-monitor.d.ts.map +0 -1
  241. package/dist/utils/ip-monitor.js.map +0 -1
  242. package/dist/utils/network.d.ts.map +0 -1
  243. package/dist/utils/network.js.map +0 -1
  244. package/dist/utils/pid-file.d.ts +0 -10
  245. package/dist/utils/pid-file.d.ts.map +0 -1
  246. package/dist/utils/pid-file.js +0 -30
  247. package/dist/utils/pid-file.js.map +0 -1
  248. package/dist/utils/qrcode-banner.d.ts.map +0 -1
  249. package/dist/utils/qrcode-banner.js.map +0 -1
  250. package/dist/ws/ws-handler.d.ts.map +0 -1
  251. package/dist/ws/ws-handler.js.map +0 -1
  252. package/dist/ws/ws-server.d.ts.map +0 -1
  253. package/dist/ws/ws-server.js.map +0 -1
  254. package/frontend-dist/assets/index-BqqB1hYe.js +0 -141
  255. package/shared-dist/constants.d.ts.map +0 -1
  256. package/shared-dist/constants.js.map +0 -1
  257. package/shared-dist/defaults.d.ts.map +0 -1
  258. package/shared-dist/defaults.js.map +0 -1
  259. package/shared-dist/index.d.ts.map +0 -1
  260. package/shared-dist/index.js.map +0 -1
  261. package/shared-dist/instance.d.ts.map +0 -1
  262. package/shared-dist/instance.js.map +0 -1
  263. package/shared-dist/question-utils.d.ts +0 -15
  264. package/shared-dist/question-utils.d.ts.map +0 -1
  265. package/shared-dist/question-utils.js +0 -24
  266. package/shared-dist/question-utils.js.map +0 -1
  267. package/shared-dist/ws-protocol.d.ts.map +0 -1
  268. package/shared-dist/ws-protocol.js.map +0 -1
  269. /package/dist/{api → backend/src/api}/auth-routes.d.ts +0 -0
  270. /package/dist/{api → backend/src/api}/auth-routes.js +0 -0
  271. /package/dist/{api → backend/src/api}/health-routes.d.ts +0 -0
  272. /package/dist/{api → backend/src/api}/health-routes.js +0 -0
  273. /package/dist/{api → backend/src/api}/hook-routes.d.ts +0 -0
  274. /package/dist/{api → backend/src/api}/hook-routes.js +0 -0
  275. /package/dist/{api → backend/src/api}/push-routes.d.ts +0 -0
  276. /package/dist/{api → backend/src/api}/push-routes.js +0 -0
  277. /package/dist/{api → backend/src/api}/status-routes.d.ts +0 -0
  278. /package/dist/{api → backend/src/api}/status-routes.js +0 -0
  279. /package/dist/{attach.d.ts → backend/src/attach.d.ts} +0 -0
  280. /package/dist/{auth → backend/src/auth}/auth-middleware.d.ts +0 -0
  281. /package/dist/{auth → backend/src/auth}/auth-middleware.js +0 -0
  282. /package/dist/{auth → backend/src/auth}/rate-limiter.d.ts +0 -0
  283. /package/dist/{auth → backend/src/auth}/rate-limiter.js +0 -0
  284. /package/dist/{auth → backend/src/auth}/token-generator.d.ts +0 -0
  285. /package/dist/{index.d.ts → backend/src/index.d.ts} +0 -0
  286. /package/dist/{logger → backend/src/logger}/logger.d.ts +0 -0
  287. /package/dist/{notification → backend/src/notification}/dingtalk-service.d.ts +0 -0
  288. /package/dist/{pty → backend/src/pty}/output-buffer.d.ts +0 -0
  289. /package/dist/{pty → backend/src/pty}/output-buffer.js +0 -0
  290. /package/dist/{pty → backend/src/pty}/pty-manager.d.ts +0 -0
  291. /package/dist/{pty → backend/src/pty}/pty-manager.js +0 -0
  292. /package/dist/{pty → backend/src/pty}/types.d.ts +0 -0
  293. /package/dist/{pty → backend/src/pty}/types.js +0 -0
  294. /package/dist/{pty → backend/src/pty}/virtual-pty.d.ts +0 -0
  295. /package/dist/{pty → backend/src/pty}/virtual-pty.js +0 -0
  296. /package/dist/{push → backend/src/push}/push-service.d.ts +0 -0
  297. /package/dist/{push → backend/src/push}/push-service.js +0 -0
  298. /package/dist/{registry → backend/src/registry}/instance-spawner.d.ts +0 -0
  299. /package/dist/{registry → backend/src/registry}/port-finder.d.ts +0 -0
  300. /package/dist/{registry → backend/src/registry}/port-finder.js +0 -0
  301. /package/dist/{registry → backend/src/registry}/shared-token.d.ts +0 -0
  302. /package/dist/{registry → backend/src/registry}/shared-token.js +0 -0
  303. /package/dist/{terminal → backend/src/terminal}/terminal-relay.d.ts +0 -0
  304. /package/dist/{terminal → backend/src/terminal}/terminal-relay.js +0 -0
  305. /package/dist/{utils → backend/src/utils}/ansi-filter.d.ts +0 -0
  306. /package/dist/{utils → backend/src/utils}/ansi-filter.js +0 -0
  307. /package/dist/{utils → backend/src/utils}/file-lock.d.ts +0 -0
  308. /package/dist/{utils → backend/src/utils}/file-lock.js +0 -0
  309. /package/dist/{utils → backend/src/utils}/ip-monitor.d.ts +0 -0
  310. /package/dist/{utils → backend/src/utils}/ip-monitor.js +0 -0
  311. /package/dist/{utils → backend/src/utils}/network.d.ts +0 -0
  312. /package/dist/{utils → backend/src/utils}/network.js +0 -0
  313. /package/dist/{utils → backend/src/utils}/qrcode-banner.d.ts +0 -0
  314. /package/dist/{utils → backend/src/utils}/qrcode-banner.js +0 -0
  315. /package/dist/{ws → backend/src/ws}/ws-handler.d.ts +0 -0
  316. /package/dist/{ws → backend/src/ws}/ws-handler.js +0 -0
  317. /package/{shared-dist → dist/shared}/constants.d.ts +0 -0
  318. /package/{shared-dist → dist/shared}/constants.js +0 -0
  319. /package/{shared-dist → dist/shared}/defaults.d.ts +0 -0
  320. /package/{shared-dist → dist/shared}/defaults.js +0 -0
  321. /package/{shared-dist → dist/shared}/instance.js +0 -0
  322. /package/{shared-dist → dist/shared}/ws-protocol.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../../backend/src/deps/detector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,YAAY,EAGZ,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAoB;IACxD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,EAAE;YACtE,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,CAAC;QAED,wBAAwB;QACxB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,UAAkB;IAClE,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC/C,OAAO,KAAK,IAAI,QAAQ,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IAGxC,MAAM,OAAO,GAAwC;QACnD,IAAI,EAAE,MAAM,eAAe,CAAC,MAAM,CAAC;QACnC,IAAI,EAAE,MAAM,eAAe,CAAC,MAAM,CAAC;QACnC,MAAM,EAAE,MAAM,eAAe,CAAC,QAAQ,CAAC;KACxC,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 依赖检测与安装入口模块
3
+ */
4
+ import { type EnsureDepsResult } from './types.js';
5
+ /**
6
+ * 确保所有依赖已安装
7
+ *
8
+ * 检测顺序:Node.js → pnpm → Claude CLI
9
+ * 如有缺失,交互式提示用户确认后自动安装
10
+ *
11
+ * 静默模式:所有依赖已安装时不打印任何日志
12
+ */
13
+ export declare function ensureDependencies(): Promise<EnsureDepsResult>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/deps/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAuCpB;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAsDpE"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * 依赖检测与安装入口模块
3
+ */
4
+ import { checkDependency, checkNodeVersion, checkAllDependencies } from './detector.js';
5
+ import { installWithProgress, tryFallbackInstall } from './installer.js';
6
+ import { promptInstall, showAllReady, showCheckStart, showCheckStatus, showManualInstallHelp, } from './prompt.js';
7
+ import { detectPackageManager, getNodeInstallCommands, getPlatformHelp, } from './platform.js';
8
+ import { DEPENDENCIES, } from './types.js';
9
+ /**
10
+ * 静默检测所有依赖(不打印任何日志)
11
+ */
12
+ async function checkAllDependenciesSilently() {
13
+ const results = await checkAllDependencies();
14
+ const missing = [];
15
+ // 检查每个依赖是否安装且版本符合要求
16
+ for (const name of ['node', 'pnpm', 'claude']) {
17
+ const result = results[name];
18
+ const dep = DEPENDENCIES[name];
19
+ if (!result.installed) {
20
+ missing.push(name);
21
+ continue;
22
+ }
23
+ // 检查版本是否满足最低要求
24
+ if (dep.minVersion) {
25
+ const version = result.version ?? 'unknown';
26
+ if (!checkNodeVersion(version, dep.minVersion)) {
27
+ missing.push(name);
28
+ }
29
+ }
30
+ }
31
+ return {
32
+ results,
33
+ allInstalled: missing.length === 0,
34
+ missing,
35
+ };
36
+ }
37
+ /**
38
+ * 确保所有依赖已安装
39
+ *
40
+ * 检测顺序:Node.js → pnpm → Claude CLI
41
+ * 如有缺失,交互式提示用户确认后自动安装
42
+ *
43
+ * 静默模式:所有依赖已安装时不打印任何日志
44
+ */
45
+ export async function ensureDependencies() {
46
+ const result = {
47
+ allInstalled: true,
48
+ installed: [],
49
+ failed: [],
50
+ };
51
+ // 1. 静默检测所有依赖
52
+ const { results, allInstalled, missing } = await checkAllDependenciesSilently();
53
+ // 2. 如果全部已安装,直接返回,不打印任何内容
54
+ if (allInstalled) {
55
+ return result;
56
+ }
57
+ // 3. 有缺失,显示检测日志并处理安装
58
+ showCheckStart();
59
+ // 重新显示已安装依赖的状态
60
+ for (const name of ['node', 'pnpm', 'claude']) {
61
+ const checkResult = results[name];
62
+ if (!missing.includes(name)) {
63
+ showCheckStatus(name, true, checkResult.version);
64
+ }
65
+ }
66
+ // 4. 按顺序处理缺失的依赖
67
+ for (const name of missing) {
68
+ let handleResult;
69
+ switch (name) {
70
+ case 'node':
71
+ handleResult = await handleNodeDependency(results.node);
72
+ break;
73
+ case 'pnpm':
74
+ handleResult = await handlePnpmDependency(results.pnpm);
75
+ break;
76
+ case 'claude':
77
+ handleResult = await handleClaudeDependency(results.claude);
78
+ break;
79
+ }
80
+ if (!handleResult.success) {
81
+ result.allInstalled = false;
82
+ result.failed.push(name);
83
+ return result;
84
+ }
85
+ if (handleResult.newlyInstalled) {
86
+ result.installed.push(name);
87
+ }
88
+ }
89
+ showAllReady();
90
+ return result;
91
+ }
92
+ /**
93
+ * 处理 Node.js 依赖
94
+ */
95
+ async function handleNodeDependency(preCheck) {
96
+ const check = preCheck ?? await checkDependency('node');
97
+ if (!check.installed) {
98
+ showCheckStatus('node', false);
99
+ return await installNode();
100
+ }
101
+ // 检查版本 - 安全地处理 version 可能为 undefined 的情况
102
+ const dep = DEPENDENCIES.node;
103
+ const version = check.version ?? 'unknown';
104
+ if (dep.minVersion && !checkNodeVersion(version, dep.minVersion)) {
105
+ showCheckStatus('node', false);
106
+ process.stderr.write(` ✗ Node.js ${version} (need >= ${dep.minVersion})\n`);
107
+ process.stderr.write(`\n[ERROR] Node.js ${dep.minVersion}+ is required. Current: ${version}\n`);
108
+ process.stderr.write(`Please upgrade: ${dep.helpUrl}\n`);
109
+ return { success: false, newlyInstalled: false };
110
+ }
111
+ // 已安装且版本符合,不打印(已在 ensureDependencies 中统一打印)
112
+ return { success: true, newlyInstalled: false };
113
+ }
114
+ /**
115
+ * 安装 Node.js
116
+ */
117
+ async function installNode() {
118
+ const pkgManager = detectPackageManager();
119
+ const installCommands = getNodeInstallCommands(pkgManager);
120
+ if (installCommands.length === 0) {
121
+ showManualInstallHelp('node', DEPENDENCIES.node.helpUrl);
122
+ process.stderr.write(`\n${getPlatformHelp()}\n`);
123
+ return { success: false, newlyInstalled: false };
124
+ }
125
+ const confirmed = await promptInstall({
126
+ name: 'node',
127
+ installCommands,
128
+ helpUrl: DEPENDENCIES.node.helpUrl,
129
+ });
130
+ if (!confirmed) {
131
+ return { success: false, newlyInstalled: false };
132
+ }
133
+ const installResult = await installWithProgress('node', installCommands);
134
+ if (!installResult.success) {
135
+ return { success: false, newlyInstalled: false };
136
+ }
137
+ return { success: true, newlyInstalled: true };
138
+ }
139
+ /**
140
+ * 处理 pnpm 依赖
141
+ */
142
+ async function handlePnpmDependency(preCheck) {
143
+ const check = preCheck ?? await checkDependency('pnpm');
144
+ if (!check.installed) {
145
+ showCheckStatus('pnpm', false);
146
+ return await installPnpm();
147
+ }
148
+ // 检查版本 - 安全地处理 version 可能为 undefined 的情况
149
+ const dep = DEPENDENCIES.pnpm;
150
+ const version = check.version ?? 'unknown';
151
+ if (dep.minVersion && !checkNodeVersion(version, dep.minVersion)) {
152
+ showCheckStatus('pnpm', false);
153
+ process.stderr.write(` ✗ pnpm ${version} (need >= ${dep.minVersion})\n`);
154
+ process.stderr.write(`\n[ERROR] pnpm ${dep.minVersion}+ is required. Current: ${version}\n`);
155
+ process.stderr.write(`Please upgrade: ${dep.helpUrl}\n`);
156
+ return { success: false, newlyInstalled: false };
157
+ }
158
+ // 已安装且版本符合,不打印(已在 ensureDependencies 中统一打印)
159
+ return { success: true, newlyInstalled: false };
160
+ }
161
+ /**
162
+ * 安装 pnpm
163
+ */
164
+ async function installPnpm() {
165
+ const dep = DEPENDENCIES.pnpm;
166
+ const installCommands = dep.installCommands;
167
+ const confirmed = await promptInstall({
168
+ name: 'pnpm',
169
+ installCommands,
170
+ helpUrl: dep.helpUrl,
171
+ });
172
+ if (!confirmed) {
173
+ return { success: false, newlyInstalled: false };
174
+ }
175
+ // 尝试主安装方式
176
+ let installResult = await installWithProgress('pnpm', installCommands);
177
+ // 如果失败,尝试备用方式(npm install -g pnpm)
178
+ if (!installResult.success) {
179
+ process.stderr.write('\n[Fallback] Trying npm install -g pnpm...\n');
180
+ installResult = await tryFallbackInstall('pnpm');
181
+ }
182
+ if (!installResult.success) {
183
+ return { success: false, newlyInstalled: false };
184
+ }
185
+ return { success: true, newlyInstalled: true };
186
+ }
187
+ /**
188
+ * 处理 Claude CLI 依赖
189
+ */
190
+ async function handleClaudeDependency(preCheck) {
191
+ const check = preCheck ?? await checkDependency('claude');
192
+ if (!check.installed) {
193
+ showCheckStatus('claude', false);
194
+ return await installClaude();
195
+ }
196
+ // 已安装,不打印(已在 ensureDependencies 中统一打印)
197
+ return { success: true, newlyInstalled: false };
198
+ }
199
+ /**
200
+ * 安装 Claude CLI
201
+ */
202
+ async function installClaude() {
203
+ const dep = DEPENDENCIES.claude;
204
+ const installCommands = dep.installCommands;
205
+ const confirmed = await promptInstall({
206
+ name: 'claude',
207
+ installCommands,
208
+ helpUrl: dep.helpUrl,
209
+ });
210
+ if (!confirmed) {
211
+ return { success: false, newlyInstalled: false };
212
+ }
213
+ const installResult = await installWithProgress('claude', installCommands);
214
+ if (!installResult.success) {
215
+ return { success: false, newlyInstalled: false };
216
+ }
217
+ return { success: true, newlyInstalled: true };
218
+ }
219
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../backend/src/deps/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 依赖安装模块 - 实时输出安装进度
3
+ */
4
+ import { type DependencyName, type InstallCommand, type InstallResult } from './types.js';
5
+ /**
6
+ * 执行安装命令,实时输出进度
7
+ */
8
+ export declare function installWithProgress(name: DependencyName, commands: InstallCommand[]): Promise<InstallResult>;
9
+ /**
10
+ * 尝试使用备用安装方法(降级)
11
+ */
12
+ export declare function tryFallbackInstall(name: DependencyName): Promise<InstallResult>;
13
+ //# sourceMappingURL=installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../../backend/src/deps/installer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,cAAc,EAAE,GACzB,OAAO,CAAC,aAAa,CAAC,CA4CxB;AA0CD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,aAAa,CAAC,CAiCxB"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * 依赖安装模块 - 实时输出安装进度
3
+ */
4
+ import { spawn } from 'node:child_process';
5
+ import { checkDependency } from './detector.js';
6
+ import { DEPENDENCIES, } from './types.js';
7
+ import { showCommand, showInstallStart, showStepFailure, showStepSuccess } from './prompt.js';
8
+ /**
9
+ * 执行安装命令,实时输出进度
10
+ */
11
+ export async function installWithProgress(name, commands) {
12
+ showInstallStart(name);
13
+ // 跟踪是否有任意一个命令成功
14
+ let anySuccess = false;
15
+ for (const cmd of commands) {
16
+ showCommand(cmd.command, cmd.args);
17
+ const result = await runCommand(cmd);
18
+ if (result.success) {
19
+ showStepSuccess();
20
+ anySuccess = true;
21
+ }
22
+ else {
23
+ showStepFailure(result.error ?? '');
24
+ // 继续尝试下一个命令(如 corepack 失败后尝试 npm install -g pnpm)
25
+ }
26
+ }
27
+ // Retry verification to allow PATH propagation after install
28
+ let check = { installed: false };
29
+ for (let attempt = 0; attempt < 3; attempt++) {
30
+ await new Promise((r) => setTimeout(r, 500));
31
+ check = await checkDependency(name);
32
+ if (check.installed)
33
+ break;
34
+ }
35
+ if (check.installed) {
36
+ showStepSuccess(`${DEPENDENCIES[name].displayName} ${check.version} installed`);
37
+ return { success: true, version: check.version };
38
+ }
39
+ if (anySuccess) {
40
+ // 命令执行成功但验证失败,可能需要重启终端
41
+ return {
42
+ success: false,
43
+ error: new Error('Installation succeeded but verification failed. You may need to restart your terminal.'),
44
+ };
45
+ }
46
+ return { success: false, error: new Error('All install commands failed') };
47
+ }
48
+ /**
49
+ * 运行单个命令
50
+ * 注意:不使用 spawn 的 timeout 选项,因为 Node.js < 20.6.0 不支持
51
+ */
52
+ async function runCommand(cmd) {
53
+ return new Promise((resolve) => {
54
+ const timeout = cmd.timeout ?? 120000;
55
+ let timedOut = false;
56
+ // Windows 上需要 shell 来找到命令(如 winget)
57
+ // 但 args 是硬编码的,不存在注入风险
58
+ const proc = spawn(cmd.command, cmd.args, {
59
+ stdio: 'inherit', // 实时输出到终端
60
+ shell: process.platform === 'win32',
61
+ });
62
+ // 手动实现超时(兼容 Node.js < 20.6.0)
63
+ const timer = setTimeout(() => {
64
+ timedOut = true;
65
+ proc.kill('SIGTERM');
66
+ }, timeout);
67
+ proc.on('close', (code) => {
68
+ clearTimeout(timer);
69
+ if (timedOut) {
70
+ resolve({ success: false, error: 'Timeout' });
71
+ }
72
+ else {
73
+ resolve({ success: code === 0 });
74
+ }
75
+ });
76
+ proc.on('error', (err) => {
77
+ clearTimeout(timer);
78
+ resolve({ success: false, error: err.message });
79
+ });
80
+ });
81
+ }
82
+ /**
83
+ * 尝试使用备用安装方法(降级)
84
+ */
85
+ export async function tryFallbackInstall(name) {
86
+ const dep = DEPENDENCIES[name];
87
+ if (name === 'pnpm') {
88
+ // pnpm 备用方案:使用 npm 安装
89
+ showInstallStart(name);
90
+ showCommand('npm', ['install', '-g', 'pnpm@latest']);
91
+ const result = await runCommand({
92
+ command: 'npm',
93
+ args: ['install', '-g', 'pnpm@latest'],
94
+ timeout: 60000,
95
+ });
96
+ if (result.success) {
97
+ showStepSuccess();
98
+ }
99
+ else {
100
+ showStepFailure(result.error);
101
+ }
102
+ // 验证安装
103
+ await new Promise((r) => setTimeout(r, 500));
104
+ const check = await checkDependency(name);
105
+ if (check.installed) {
106
+ showStepSuccess(`pnpm ${check.version} installed`);
107
+ return { success: true, version: check.version };
108
+ }
109
+ return { success: false, error: new Error('Fallback install failed') };
110
+ }
111
+ return { success: false, error: new Error('No fallback available') };
112
+ }
113
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../../backend/src/deps/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * 平台检测模块
3
+ */
4
+ import type { InstallCommand } from './types.js';
5
+ export type Platform = 'darwin' | 'linux' | 'win32';
6
+ export type PackageManager = 'brew' | 'apt' | 'dnf' | 'winget' | 'choco' | 'none';
7
+ /**
8
+ * 检测当前平台
9
+ */
10
+ export declare function detectPlatform(): Platform;
11
+ /**
12
+ * 检测 CPU 架构
13
+ */
14
+ export declare function detectArch(): string;
15
+ /**
16
+ * 检测可用的包管理器
17
+ */
18
+ export declare function detectPackageManager(): PackageManager;
19
+ /**
20
+ * 获取 Node.js 的安装命令
21
+ */
22
+ export declare function getNodeInstallCommands(pkgManager: PackageManager): InstallCommand[];
23
+ /**
24
+ * 获取平台相关的帮助信息
25
+ */
26
+ export declare function getPlatformHelp(): string;
27
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../../../backend/src/deps/platform.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AACpD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAElF;;GAEG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAEzC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAarD;AAwCD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,cAAc,EAAE,CAwDnF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAkBxC"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * 平台检测模块
3
+ */
4
+ import { execSync } from 'node:child_process';
5
+ import { arch as getArch, platform as getPlatform } from 'node:os';
6
+ /**
7
+ * 检测当前平台
8
+ */
9
+ export function detectPlatform() {
10
+ return getPlatform();
11
+ }
12
+ /**
13
+ * 检测 CPU 架构
14
+ */
15
+ export function detectArch() {
16
+ return getArch();
17
+ }
18
+ /**
19
+ * 检测可用的包管理器
20
+ */
21
+ export function detectPackageManager() {
22
+ const platform = detectPlatform();
23
+ switch (platform) {
24
+ case 'darwin':
25
+ return detectDarwinPackageManager();
26
+ case 'linux':
27
+ return detectLinuxPackageManager();
28
+ case 'win32':
29
+ return detectWindowsPackageManager();
30
+ default:
31
+ return 'none';
32
+ }
33
+ }
34
+ function detectDarwinPackageManager() {
35
+ try {
36
+ execSync('which brew', { stdio: 'ignore' });
37
+ return 'brew';
38
+ }
39
+ catch {
40
+ return 'none';
41
+ }
42
+ }
43
+ function detectLinuxPackageManager() {
44
+ try {
45
+ // 使用 apt-get 而不是 apt,因为 apt 在某些系统上不是直接可执行的
46
+ execSync('which apt-get', { stdio: 'ignore' });
47
+ return 'apt';
48
+ }
49
+ catch {
50
+ try {
51
+ execSync('which dnf', { stdio: 'ignore' });
52
+ return 'dnf';
53
+ }
54
+ catch {
55
+ return 'none';
56
+ }
57
+ }
58
+ }
59
+ function detectWindowsPackageManager() {
60
+ try {
61
+ execSync('where winget', { stdio: 'ignore' });
62
+ return 'winget';
63
+ }
64
+ catch {
65
+ try {
66
+ execSync('where choco', { stdio: 'ignore' });
67
+ return 'choco';
68
+ }
69
+ catch {
70
+ return 'none';
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * 获取 Node.js 的安装命令
76
+ */
77
+ export function getNodeInstallCommands(pkgManager) {
78
+ switch (pkgManager) {
79
+ case 'brew':
80
+ return [
81
+ {
82
+ command: 'brew',
83
+ args: ['install', 'node'],
84
+ description: 'Install Node.js via Homebrew',
85
+ timeout: 300000,
86
+ },
87
+ ];
88
+ case 'apt':
89
+ return [
90
+ {
91
+ command: 'sudo',
92
+ args: ['apt-get', 'update'],
93
+ description: 'Update package list',
94
+ timeout: 120000,
95
+ },
96
+ {
97
+ command: 'sudo',
98
+ args: ['apt-get', 'install', '-y', 'nodejs', 'npm'],
99
+ description: 'Install Node.js via apt',
100
+ timeout: 300000,
101
+ },
102
+ ];
103
+ case 'dnf':
104
+ return [
105
+ {
106
+ command: 'sudo',
107
+ args: ['dnf', 'install', '-y', 'nodejs'],
108
+ description: 'Install Node.js via dnf',
109
+ timeout: 300000,
110
+ },
111
+ ];
112
+ case 'winget':
113
+ return [
114
+ {
115
+ command: 'winget',
116
+ args: ['install', '--id', 'OpenJS.NodeJS.LTS', '-e'],
117
+ description: 'Install Node.js LTS via winget',
118
+ timeout: 300000,
119
+ },
120
+ ];
121
+ case 'choco':
122
+ return [
123
+ {
124
+ command: 'choco',
125
+ args: ['install', '-y', 'nodejs-lts'],
126
+ description: 'Install Node.js LTS via Chocolatey',
127
+ timeout: 300000,
128
+ },
129
+ ];
130
+ default:
131
+ return [];
132
+ }
133
+ }
134
+ /**
135
+ * 获取平台相关的帮助信息
136
+ */
137
+ export function getPlatformHelp() {
138
+ const platform = detectPlatform();
139
+ const pkgManager = detectPackageManager();
140
+ if (pkgManager !== 'none') {
141
+ return '';
142
+ }
143
+ switch (platform) {
144
+ case 'darwin':
145
+ return 'Install Homebrew first: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"';
146
+ case 'linux':
147
+ return 'Install a package manager (apt, dnf) or use NodeSource: https://github.com/nodesource/distributions';
148
+ case 'win32':
149
+ return 'Install winget or Chocolatey, or download Node.js from https://nodejs.org/';
150
+ default:
151
+ return 'Visit https://nodejs.org/ to install Node.js';
152
+ }
153
+ }
154
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../../backend/src/deps/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * 交互式确认模块
3
+ */
4
+ import { type DependencyName, type InstallCommand } from './types.js';
5
+ export interface PromptOptions {
6
+ name: DependencyName;
7
+ installCommands: InstallCommand[];
8
+ helpUrl: string;
9
+ }
10
+ /**
11
+ * 显示安装确认提示
12
+ * @returns true 表示用户确认安装,false 表示取消
13
+ */
14
+ export declare function promptInstall(options: PromptOptions): Promise<boolean>;
15
+ /**
16
+ * 显示安装失败提示,提供手动安装帮助
17
+ */
18
+ export declare function showManualInstallHelp(name: DependencyName, helpUrl: string): void;
19
+ /**
20
+ * 显示安装开始信息
21
+ */
22
+ export declare function showInstallStart(name: DependencyName): void;
23
+ /**
24
+ * 显示命令执行信息
25
+ */
26
+ export declare function showCommand(cmd: string, args: string[]): void;
27
+ /**
28
+ * 显示步骤成功
29
+ */
30
+ export declare function showStepSuccess(message?: string): void;
31
+ /**
32
+ * 显示步骤失败
33
+ */
34
+ export declare function showStepFailure(message?: string): void;
35
+ /**
36
+ * 显示检测状态
37
+ */
38
+ export declare function showCheckStatus(name: DependencyName, installed: boolean, version?: string): void;
39
+ /**
40
+ * 显示依赖检测开始
41
+ */
42
+ export declare function showCheckStart(): void;
43
+ /**
44
+ * 显示所有依赖就绪
45
+ */
46
+ export declare function showAllReady(): void;
47
+ /**
48
+ * 显示依赖安装失败
49
+ */
50
+ export declare function showInstallFailed(failed: DependencyName[]): void;
51
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../../backend/src/deps/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAgB,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CA+D5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAG3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAE7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAe,GAAG,IAAI,CAE9D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAiB,GAAG,IAAI,CAEhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAIhE"}