@kaitranntt/ccs 6.7.0 → 6.7.1-dev.1

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 (623) hide show
  1. package/README.md +45 -23
  2. package/dist/api/index.d.ts +7 -0
  3. package/dist/api/index.d.ts.map +1 -0
  4. package/dist/api/index.js +24 -0
  5. package/dist/api/index.js.map +1 -0
  6. package/dist/api/services/index.d.ts +10 -0
  7. package/dist/api/services/index.d.ts.map +1 -0
  8. package/dist/api/services/index.js +26 -0
  9. package/dist/api/services/index.js.map +1 -0
  10. package/dist/api/services/profile-reader.d.ts +28 -0
  11. package/dist/api/services/profile-reader.d.ts.map +1 -0
  12. package/dist/api/services/profile-reader.js +148 -0
  13. package/dist/api/services/profile-reader.js.map +1 -0
  14. package/dist/api/services/profile-types.d.ts +42 -0
  15. package/dist/api/services/profile-types.d.ts.map +1 -0
  16. package/dist/api/services/profile-types.js +8 -0
  17. package/dist/api/services/profile-types.js.map +1 -0
  18. package/dist/api/services/profile-writer.d.ts +6 -0
  19. package/dist/api/services/profile-writer.d.ts.map +1 -0
  20. package/dist/api/services/profile-writer.js +176 -0
  21. package/dist/api/services/profile-writer.js.map +1 -0
  22. package/dist/api/services/validation-service.d.ts +26 -0
  23. package/dist/api/services/validation-service.d.ts.map +1 -0
  24. package/dist/api/services/validation-service.js +77 -0
  25. package/dist/api/services/validation-service.js.map +1 -0
  26. package/dist/auth/auth-commands.d.ts +16 -22
  27. package/dist/auth/auth-commands.d.ts.map +1 -1
  28. package/dist/auth/auth-commands.js +29 -467
  29. package/dist/auth/auth-commands.js.map +1 -1
  30. package/dist/auth/commands/create-command.d.ts +11 -0
  31. package/dist/auth/commands/create-command.d.ts.map +1 -0
  32. package/dist/auth/commands/create-command.js +137 -0
  33. package/dist/auth/commands/create-command.js.map +1 -0
  34. package/dist/auth/commands/default-command.d.ts +15 -0
  35. package/dist/auth/commands/default-command.d.ts.map +1 -0
  36. package/dist/auth/commands/default-command.js +71 -0
  37. package/dist/auth/commands/default-command.js.map +1 -0
  38. package/dist/auth/commands/index.d.ts +12 -0
  39. package/dist/auth/commands/index.d.ts.map +1 -0
  40. package/dist/auth/commands/index.js +25 -0
  41. package/dist/auth/commands/index.js.map +1 -0
  42. package/dist/auth/commands/list-command.d.ts +11 -0
  43. package/dist/auth/commands/list-command.d.ts.map +1 -0
  44. package/dist/auth/commands/list-command.js +124 -0
  45. package/dist/auth/commands/list-command.js.map +1 -0
  46. package/dist/auth/commands/remove-command.d.ts +11 -0
  47. package/dist/auth/commands/remove-command.d.ts.map +1 -0
  48. package/dist/auth/commands/remove-command.js +102 -0
  49. package/dist/auth/commands/remove-command.js.map +1 -0
  50. package/dist/auth/commands/show-command.d.ts +11 -0
  51. package/dist/auth/commands/show-command.d.ts.map +1 -0
  52. package/dist/auth/commands/show-command.js +103 -0
  53. package/dist/auth/commands/show-command.js.map +1 -0
  54. package/dist/auth/commands/types.d.ts +50 -0
  55. package/dist/auth/commands/types.d.ts.map +1 -0
  56. package/dist/auth/commands/types.js +26 -0
  57. package/dist/auth/commands/types.js.map +1 -0
  58. package/dist/auth/index.d.ts +8 -0
  59. package/dist/auth/index.d.ts.map +1 -0
  60. package/dist/auth/index.js +16 -0
  61. package/dist/auth/index.js.map +1 -0
  62. package/dist/auth/profile-detector.d.ts +0 -5
  63. package/dist/auth/profile-detector.d.ts.map +1 -1
  64. package/dist/auth/profile-detector.js +1 -9
  65. package/dist/auth/profile-detector.js.map +1 -1
  66. package/dist/auth/profile-registry.d.ts +0 -4
  67. package/dist/auth/profile-registry.d.ts.map +1 -1
  68. package/dist/auth/profile-registry.js +3 -10
  69. package/dist/auth/profile-registry.js.map +1 -1
  70. package/dist/ccs.js +21 -4
  71. package/dist/ccs.js.map +1 -1
  72. package/dist/cliproxy/auth/auth-types.d.ts +85 -0
  73. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -0
  74. package/dist/cliproxy/auth/auth-types.js +100 -0
  75. package/dist/cliproxy/auth/auth-types.js.map +1 -0
  76. package/dist/cliproxy/auth/environment-detector.d.ts +30 -0
  77. package/dist/cliproxy/auth/environment-detector.d.ts.map +1 -0
  78. package/dist/cliproxy/auth/environment-detector.js +124 -0
  79. package/dist/cliproxy/auth/environment-detector.js.map +1 -0
  80. package/dist/cliproxy/auth/index.d.ts +11 -0
  81. package/dist/cliproxy/auth/index.d.ts.map +1 -0
  82. package/dist/cliproxy/auth/index.js +35 -0
  83. package/dist/cliproxy/auth/index.js.map +1 -0
  84. package/dist/cliproxy/auth/oauth-handler.d.ts +29 -0
  85. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -0
  86. package/dist/cliproxy/auth/oauth-handler.js +205 -0
  87. package/dist/cliproxy/auth/oauth-handler.js.map +1 -0
  88. package/dist/cliproxy/auth/oauth-process.d.ts +27 -0
  89. package/dist/cliproxy/auth/oauth-process.d.ts.map +1 -0
  90. package/dist/cliproxy/auth/oauth-process.js +209 -0
  91. package/dist/cliproxy/auth/oauth-process.js.map +1 -0
  92. package/dist/cliproxy/auth/token-manager.d.ts +53 -0
  93. package/dist/cliproxy/auth/token-manager.d.ts.map +1 -0
  94. package/dist/cliproxy/auth/token-manager.js +250 -0
  95. package/dist/cliproxy/auth/token-manager.js.map +1 -0
  96. package/dist/cliproxy/auth-handler.d.ts +13 -103
  97. package/dist/cliproxy/auth-handler.d.ts.map +1 -1
  98. package/dist/cliproxy/auth-handler.js +35 -766
  99. package/dist/cliproxy/auth-handler.js.map +1 -1
  100. package/dist/cliproxy/binary/downloader.d.ts +29 -0
  101. package/dist/cliproxy/binary/downloader.d.ts.map +1 -0
  102. package/dist/cliproxy/binary/downloader.js +218 -0
  103. package/dist/cliproxy/binary/downloader.js.map +1 -0
  104. package/dist/cliproxy/binary/extractor.d.ts +12 -0
  105. package/dist/cliproxy/binary/extractor.d.ts.map +1 -0
  106. package/dist/cliproxy/binary/extractor.js +27 -0
  107. package/dist/cliproxy/binary/extractor.js.map +1 -0
  108. package/dist/cliproxy/binary/index.d.ts +13 -0
  109. package/dist/cliproxy/binary/index.d.ts.map +1 -0
  110. package/dist/cliproxy/binary/index.js +53 -0
  111. package/dist/cliproxy/binary/index.js.map +1 -0
  112. package/dist/cliproxy/binary/installer.d.ts +24 -0
  113. package/dist/cliproxy/binary/installer.d.ts.map +1 -0
  114. package/dist/cliproxy/binary/installer.js +117 -0
  115. package/dist/cliproxy/binary/installer.js.map +1 -0
  116. package/dist/cliproxy/binary/lifecycle.d.ts +11 -0
  117. package/dist/cliproxy/binary/lifecycle.d.ts.map +1 -0
  118. package/dist/cliproxy/binary/lifecycle.js +106 -0
  119. package/dist/cliproxy/binary/lifecycle.js.map +1 -0
  120. package/dist/cliproxy/binary/tar-extractor.d.ts +9 -0
  121. package/dist/cliproxy/binary/tar-extractor.d.ts.map +1 -0
  122. package/dist/cliproxy/binary/tar-extractor.js +118 -0
  123. package/dist/cliproxy/binary/tar-extractor.js.map +1 -0
  124. package/dist/cliproxy/binary/types.d.ts +24 -0
  125. package/dist/cliproxy/binary/types.d.ts.map +1 -0
  126. package/dist/cliproxy/binary/types.js +14 -0
  127. package/dist/cliproxy/binary/types.js.map +1 -0
  128. package/dist/cliproxy/binary/updater.d.ts +7 -0
  129. package/dist/cliproxy/binary/updater.d.ts.map +1 -0
  130. package/dist/cliproxy/binary/updater.js +18 -0
  131. package/dist/cliproxy/binary/updater.js.map +1 -0
  132. package/dist/cliproxy/binary/verifier.d.ts +18 -0
  133. package/dist/cliproxy/binary/verifier.d.ts.map +1 -0
  134. package/dist/cliproxy/binary/verifier.js +82 -0
  135. package/dist/cliproxy/binary/verifier.js.map +1 -0
  136. package/dist/cliproxy/binary/version-cache.d.ts +46 -0
  137. package/dist/cliproxy/binary/version-cache.d.ts.map +1 -0
  138. package/dist/cliproxy/binary/version-cache.js +171 -0
  139. package/dist/cliproxy/binary/version-cache.js.map +1 -0
  140. package/dist/cliproxy/binary/version-checker.d.ts +19 -0
  141. package/dist/cliproxy/binary/version-checker.d.ts.map +1 -0
  142. package/dist/cliproxy/binary/version-checker.js +77 -0
  143. package/dist/cliproxy/binary/version-checker.js.map +1 -0
  144. package/dist/cliproxy/binary/zip-extractor.d.ts +9 -0
  145. package/dist/cliproxy/binary/zip-extractor.d.ts.map +1 -0
  146. package/dist/cliproxy/binary/zip-extractor.js +110 -0
  147. package/dist/cliproxy/binary/zip-extractor.js.map +1 -0
  148. package/dist/cliproxy/binary-manager.d.ts +16 -170
  149. package/dist/cliproxy/binary-manager.d.ts.map +1 -1
  150. package/dist/cliproxy/binary-manager.js +38 -865
  151. package/dist/cliproxy/binary-manager.js.map +1 -1
  152. package/dist/cliproxy/services/binary-service.d.ts +65 -0
  153. package/dist/cliproxy/services/binary-service.d.ts.map +1 -0
  154. package/dist/cliproxy/services/binary-service.js +140 -0
  155. package/dist/cliproxy/services/binary-service.js.map +1 -0
  156. package/dist/cliproxy/services/index.d.ts +8 -0
  157. package/dist/cliproxy/services/index.d.ts.map +1 -0
  158. package/dist/cliproxy/services/index.js +31 -0
  159. package/dist/cliproxy/services/index.js.map +1 -0
  160. package/dist/cliproxy/services/proxy-lifecycle-service.d.ts +38 -0
  161. package/dist/cliproxy/services/proxy-lifecycle-service.d.ts.map +1 -0
  162. package/dist/cliproxy/services/proxy-lifecycle-service.js +41 -0
  163. package/dist/cliproxy/services/proxy-lifecycle-service.js.map +1 -0
  164. package/dist/cliproxy/services/variant-config-adapter.d.ts +38 -0
  165. package/dist/cliproxy/services/variant-config-adapter.d.ts.map +1 -0
  166. package/dist/cliproxy/services/variant-config-adapter.js +172 -0
  167. package/dist/cliproxy/services/variant-config-adapter.js.map +1 -0
  168. package/dist/cliproxy/services/variant-service.d.ts +37 -0
  169. package/dist/cliproxy/services/variant-service.d.ts.map +1 -0
  170. package/dist/cliproxy/services/variant-service.js +128 -0
  171. package/dist/cliproxy/services/variant-service.js.map +1 -0
  172. package/dist/cliproxy/services/variant-settings.d.ts +32 -0
  173. package/dist/cliproxy/services/variant-settings.d.ts.map +1 -0
  174. package/dist/cliproxy/services/variant-settings.js +128 -0
  175. package/dist/cliproxy/services/variant-settings.js.map +1 -0
  176. package/dist/commands/api-command.d.ts +3 -6
  177. package/dist/commands/api-command.d.ts.map +1 -1
  178. package/dist/commands/api-command.js +84 -445
  179. package/dist/commands/api-command.js.map +1 -1
  180. package/dist/commands/cliproxy-command.d.ts +0 -3
  181. package/dist/commands/cliproxy-command.d.ts.map +1 -1
  182. package/dist/commands/cliproxy-command.js +182 -621
  183. package/dist/commands/cliproxy-command.js.map +1 -1
  184. package/dist/commands/index.d.ts +17 -0
  185. package/dist/commands/index.d.ts.map +1 -0
  186. package/dist/commands/index.js +33 -0
  187. package/dist/commands/index.js.map +1 -0
  188. package/dist/config/unified-config-loader.d.ts +7 -0
  189. package/dist/config/unified-config-loader.d.ts.map +1 -1
  190. package/dist/config/unified-config-loader.js +11 -1
  191. package/dist/config/unified-config-loader.js.map +1 -1
  192. package/dist/delegation/executor/index.d.ts +7 -0
  193. package/dist/delegation/executor/index.d.ts.map +1 -0
  194. package/dist/delegation/executor/index.js +28 -0
  195. package/dist/delegation/executor/index.js.map +1 -0
  196. package/dist/delegation/executor/result-aggregator.d.ts +30 -0
  197. package/dist/delegation/executor/result-aggregator.d.ts.map +1 -0
  198. package/dist/delegation/executor/result-aggregator.js +66 -0
  199. package/dist/delegation/executor/result-aggregator.js.map +1 -0
  200. package/dist/delegation/executor/stream-parser.d.ts +28 -0
  201. package/dist/delegation/executor/stream-parser.d.ts.map +1 -0
  202. package/dist/delegation/executor/stream-parser.js +140 -0
  203. package/dist/delegation/executor/stream-parser.js.map +1 -0
  204. package/dist/delegation/executor/types.d.ts +121 -0
  205. package/dist/delegation/executor/types.d.ts.map +1 -0
  206. package/dist/delegation/executor/types.js +6 -0
  207. package/dist/delegation/executor/types.js.map +1 -0
  208. package/dist/delegation/headless-executor.d.ts +13 -91
  209. package/dist/delegation/headless-executor.d.ts.map +1 -1
  210. package/dist/delegation/headless-executor.js +84 -291
  211. package/dist/delegation/headless-executor.js.map +1 -1
  212. package/dist/delegation/index.d.ts +11 -0
  213. package/dist/delegation/index.d.ts.map +1 -0
  214. package/dist/delegation/index.js +33 -0
  215. package/dist/delegation/index.js.map +1 -0
  216. package/dist/delegation/result-formatter.d.ts +1 -30
  217. package/dist/delegation/result-formatter.d.ts.map +1 -1
  218. package/dist/delegation/result-formatter.js.map +1 -1
  219. package/dist/errors/cleanup-registry.d.ts +64 -0
  220. package/dist/errors/cleanup-registry.d.ts.map +1 -0
  221. package/dist/errors/cleanup-registry.js +141 -0
  222. package/dist/errors/cleanup-registry.js.map +1 -0
  223. package/dist/errors/error-handler.d.ts +45 -0
  224. package/dist/errors/error-handler.d.ts.map +1 -0
  225. package/dist/errors/error-handler.js +150 -0
  226. package/dist/errors/error-handler.js.map +1 -0
  227. package/dist/errors/error-types.d.ts +102 -0
  228. package/dist/errors/error-types.d.ts.map +1 -0
  229. package/dist/errors/error-types.js +158 -0
  230. package/dist/errors/error-types.js.map +1 -0
  231. package/dist/errors/exit-codes.d.ts +49 -0
  232. package/dist/errors/exit-codes.d.ts.map +1 -0
  233. package/dist/errors/exit-codes.js +72 -0
  234. package/dist/errors/exit-codes.js.map +1 -0
  235. package/dist/errors/index.d.ts +29 -0
  236. package/dist/errors/index.d.ts.map +1 -0
  237. package/dist/errors/index.js +62 -0
  238. package/dist/errors/index.js.map +1 -0
  239. package/dist/glmt/glmt-transformer.d.ts +29 -248
  240. package/dist/glmt/glmt-transformer.d.ts.map +1 -1
  241. package/dist/glmt/glmt-transformer.js +63 -718
  242. package/dist/glmt/glmt-transformer.js.map +1 -1
  243. package/dist/glmt/index.d.ts +14 -0
  244. package/dist/glmt/index.d.ts.map +1 -0
  245. package/dist/glmt/index.js +41 -0
  246. package/dist/glmt/index.js.map +1 -0
  247. package/dist/glmt/pipeline/content-transformer.d.ts +39 -0
  248. package/dist/glmt/pipeline/content-transformer.d.ts.map +1 -0
  249. package/dist/glmt/pipeline/content-transformer.js +162 -0
  250. package/dist/glmt/pipeline/content-transformer.js.map +1 -0
  251. package/dist/glmt/pipeline/index.d.ts +12 -0
  252. package/dist/glmt/pipeline/index.d.ts.map +1 -0
  253. package/dist/glmt/pipeline/index.js +20 -0
  254. package/dist/glmt/pipeline/index.js.map +1 -0
  255. package/dist/glmt/pipeline/request-transformer.d.ts +31 -0
  256. package/dist/glmt/pipeline/request-transformer.d.ts.map +1 -0
  257. package/dist/glmt/pipeline/request-transformer.js +116 -0
  258. package/dist/glmt/pipeline/request-transformer.js.map +1 -0
  259. package/dist/glmt/pipeline/response-builder.d.ts +52 -0
  260. package/dist/glmt/pipeline/response-builder.d.ts.map +1 -0
  261. package/dist/glmt/pipeline/response-builder.js +205 -0
  262. package/dist/glmt/pipeline/response-builder.js.map +1 -0
  263. package/dist/glmt/pipeline/stream-parser.d.ts +59 -0
  264. package/dist/glmt/pipeline/stream-parser.d.ts.map +1 -0
  265. package/dist/glmt/pipeline/stream-parser.js +241 -0
  266. package/dist/glmt/pipeline/stream-parser.js.map +1 -0
  267. package/dist/glmt/pipeline/tool-call-handler.d.ts +22 -0
  268. package/dist/glmt/pipeline/tool-call-handler.d.ts.map +1 -0
  269. package/dist/glmt/pipeline/tool-call-handler.js +87 -0
  270. package/dist/glmt/pipeline/tool-call-handler.js.map +1 -0
  271. package/dist/glmt/pipeline/types.d.ts +159 -0
  272. package/dist/glmt/pipeline/types.d.ts.map +1 -0
  273. package/dist/glmt/pipeline/types.js +6 -0
  274. package/dist/glmt/pipeline/types.js.map +1 -0
  275. package/dist/management/checks/cliproxy-check.d.ts +37 -0
  276. package/dist/management/checks/cliproxy-check.d.ts.map +1 -0
  277. package/dist/management/checks/cliproxy-check.js +187 -0
  278. package/dist/management/checks/cliproxy-check.js.map +1 -0
  279. package/dist/management/checks/config-check.d.ts +27 -0
  280. package/dist/management/checks/config-check.d.ts.map +1 -0
  281. package/dist/management/checks/config-check.js +158 -0
  282. package/dist/management/checks/config-check.js.map +1 -0
  283. package/dist/management/checks/env-check.d.ts +17 -0
  284. package/dist/management/checks/env-check.d.ts.map +1 -0
  285. package/dist/management/checks/env-check.js +71 -0
  286. package/dist/management/checks/env-check.js.map +1 -0
  287. package/dist/management/checks/index.d.ts +12 -0
  288. package/dist/management/checks/index.d.ts.map +1 -0
  289. package/dist/management/checks/index.js +48 -0
  290. package/dist/management/checks/index.js.map +1 -0
  291. package/dist/management/checks/oauth-check.d.ts +16 -0
  292. package/dist/management/checks/oauth-check.d.ts.map +1 -0
  293. package/dist/management/checks/oauth-check.js +68 -0
  294. package/dist/management/checks/oauth-check.js.map +1 -0
  295. package/dist/management/checks/profile-check.d.ts +36 -0
  296. package/dist/management/checks/profile-check.d.ts.map +1 -0
  297. package/dist/management/checks/profile-check.js +165 -0
  298. package/dist/management/checks/profile-check.js.map +1 -0
  299. package/dist/management/checks/symlink-check.d.ts +30 -0
  300. package/dist/management/checks/symlink-check.d.ts.map +1 -0
  301. package/dist/management/checks/symlink-check.js +204 -0
  302. package/dist/management/checks/symlink-check.js.map +1 -0
  303. package/dist/management/checks/system-check.d.ts +25 -0
  304. package/dist/management/checks/system-check.d.ts.map +1 -0
  305. package/dist/management/checks/system-check.js +136 -0
  306. package/dist/management/checks/system-check.js.map +1 -0
  307. package/dist/management/checks/types.d.ts +64 -0
  308. package/dist/management/checks/types.d.ts.map +1 -0
  309. package/dist/management/checks/types.js +63 -0
  310. package/dist/management/checks/types.js.map +1 -0
  311. package/dist/management/doctor.d.ts +3 -92
  312. package/dist/management/doctor.d.ts.map +1 -1
  313. package/dist/management/doctor.js +15 -831
  314. package/dist/management/doctor.js.map +1 -1
  315. package/dist/management/index.d.ts +15 -0
  316. package/dist/management/index.d.ts.map +1 -0
  317. package/dist/management/index.js +56 -0
  318. package/dist/management/index.js.map +1 -0
  319. package/dist/management/repair/auto-repair.d.ts +13 -0
  320. package/dist/management/repair/auto-repair.d.ts.map +1 -0
  321. package/dist/management/repair/auto-repair.js +170 -0
  322. package/dist/management/repair/auto-repair.js.map +1 -0
  323. package/dist/management/repair/index.d.ts +5 -0
  324. package/dist/management/repair/index.d.ts.map +1 -0
  325. package/dist/management/repair/index.js +9 -0
  326. package/dist/management/repair/index.js.map +1 -0
  327. package/dist/types/delegation.d.ts +1 -13
  328. package/dist/types/delegation.d.ts.map +1 -1
  329. package/dist/types/utils.d.ts +27 -0
  330. package/dist/types/utils.d.ts.map +1 -1
  331. package/dist/ui/assets/{accounts-p1_nf0Jy.js → accounts-BqDNXZu4.js} +1 -1
  332. package/dist/ui/assets/analytics-DQMyOsqI.js +1 -0
  333. package/dist/ui/assets/api-Bzyq4XP7.js +1 -0
  334. package/dist/ui/assets/{card-CCDc-Mx9.js → card-CIN0KDsX.js} +1 -1
  335. package/dist/ui/assets/cliproxy-5iKdPrEG.js +3 -0
  336. package/dist/ui/assets/cliproxy-control-panel-CJ2CfYod.js +1 -0
  337. package/dist/ui/assets/{code-editor-Br9x-r-E.js → code-editor-CDmNFLQ6.js} +1 -1
  338. package/dist/ui/assets/confirm-dialog-CaiDQikc.js +1 -0
  339. package/dist/ui/assets/copilot-nS6iAyk2.js +4 -0
  340. package/dist/ui/assets/form-utils-DP6ILe7Z.js +20 -0
  341. package/dist/ui/assets/health-DYOQfC7u.js +1 -0
  342. package/dist/ui/assets/{icons-BOsxPbiD.js → icons-ZmwVoUeR.js} +1 -1
  343. package/dist/ui/assets/index-C6Dah-xh.js +46 -0
  344. package/dist/ui/assets/index-It66SkKf.css +1 -0
  345. package/dist/ui/assets/{radix-ui-DFHQr9A5.js → radix-ui-CV3R9pD6.js} +3 -3
  346. package/dist/ui/assets/settings-DABC9b5G.js +1 -0
  347. package/dist/ui/assets/{shared-BfYhSN4-.js → shared-BwU4OKQc.js} +1 -1
  348. package/dist/ui/assets/{switch-CMk95lwf.js → switch-BQ6sBBUv.js} +1 -1
  349. package/dist/ui/assets/{tanstack-C4gT2P7V.js → tanstack-Df9bCj5R.js} +1 -1
  350. package/dist/ui/index.html +6 -6
  351. package/dist/utils/claude-spawner.d.ts +54 -0
  352. package/dist/utils/claude-spawner.d.ts.map +1 -0
  353. package/dist/utils/claude-spawner.js +118 -0
  354. package/dist/utils/claude-spawner.js.map +1 -0
  355. package/dist/utils/delegation-validator.d.ts +8 -4
  356. package/dist/utils/delegation-validator.d.ts.map +1 -1
  357. package/dist/utils/delegation-validator.js.map +1 -1
  358. package/dist/utils/helpers.d.ts +0 -11
  359. package/dist/utils/helpers.d.ts.map +1 -1
  360. package/dist/utils/helpers.js +1 -57
  361. package/dist/utils/helpers.js.map +1 -1
  362. package/dist/utils/index.d.ts +15 -0
  363. package/dist/utils/index.d.ts.map +1 -0
  364. package/dist/utils/index.js +50 -0
  365. package/dist/utils/index.js.map +1 -0
  366. package/dist/utils/time.d.ts +10 -0
  367. package/dist/utils/time.d.ts.map +1 -0
  368. package/dist/utils/time.js +27 -0
  369. package/dist/utils/time.js.map +1 -0
  370. package/dist/utils/ui/boxes.d.ts +24 -0
  371. package/dist/utils/ui/boxes.d.ts.map +1 -0
  372. package/dist/utils/ui/boxes.js +108 -0
  373. package/dist/utils/ui/boxes.js.map +1 -0
  374. package/dist/utils/ui/colors.d.ts +25 -0
  375. package/dist/utils/ui/colors.d.ts.map +1 -0
  376. package/dist/utils/ui/colors.js +70 -0
  377. package/dist/utils/ui/colors.js.map +1 -0
  378. package/dist/utils/ui/index.d.ts +51 -0
  379. package/dist/utils/ui/index.d.ts.map +1 -0
  380. package/dist/utils/ui/index.js +96 -0
  381. package/dist/utils/ui/index.js.map +1 -0
  382. package/dist/utils/ui/indicators.d.ts +23 -0
  383. package/dist/utils/ui/indicators.d.ts.map +1 -0
  384. package/dist/utils/ui/indicators.js +39 -0
  385. package/dist/utils/ui/indicators.js.map +1 -0
  386. package/dist/utils/ui/init.d.ts +30 -0
  387. package/dist/utils/ui/init.d.ts.map +1 -0
  388. package/dist/utils/ui/init.js +102 -0
  389. package/dist/utils/ui/init.js.map +1 -0
  390. package/dist/utils/ui/spinner.d.ts +13 -0
  391. package/dist/utils/ui/spinner.d.ts.map +1 -0
  392. package/dist/utils/ui/spinner.js +89 -0
  393. package/dist/utils/ui/spinner.js.map +1 -0
  394. package/dist/utils/ui/tables.d.ts +12 -0
  395. package/dist/utils/ui/tables.d.ts.map +1 -0
  396. package/dist/utils/ui/tables.js +69 -0
  397. package/dist/utils/ui/tables.js.map +1 -0
  398. package/dist/utils/ui/tasks.d.ts +26 -0
  399. package/dist/utils/ui/tasks.d.ts.map +1 -0
  400. package/dist/utils/ui/tasks.js +102 -0
  401. package/dist/utils/ui/tasks.js.map +1 -0
  402. package/dist/utils/ui/text.d.ts +24 -0
  403. package/dist/utils/ui/text.d.ts.map +1 -0
  404. package/dist/utils/ui/text.js +60 -0
  405. package/dist/utils/ui/text.js.map +1 -0
  406. package/dist/utils/ui/types.d.ts +36 -0
  407. package/dist/utils/ui/types.d.ts.map +1 -0
  408. package/dist/utils/ui/types.js +33 -0
  409. package/dist/utils/ui/types.js.map +1 -0
  410. package/dist/utils/ui.d.ts +3 -138
  411. package/dist/utils/ui.d.ts.map +1 -1
  412. package/dist/utils/ui.js +40 -567
  413. package/dist/utils/ui.js.map +1 -1
  414. package/dist/utils/websearch/gemini-cli.d.ts +36 -0
  415. package/dist/utils/websearch/gemini-cli.d.ts.map +1 -0
  416. package/dist/utils/websearch/gemini-cli.js +132 -0
  417. package/dist/utils/websearch/gemini-cli.js.map +1 -0
  418. package/dist/utils/websearch/grok-cli.d.ts +26 -0
  419. package/dist/utils/websearch/grok-cli.d.ts.map +1 -0
  420. package/dist/utils/websearch/grok-cli.js +81 -0
  421. package/dist/utils/websearch/grok-cli.js.map +1 -0
  422. package/dist/utils/websearch/hook-config.d.ts +21 -0
  423. package/dist/utils/websearch/hook-config.d.ts.map +1 -0
  424. package/dist/utils/websearch/hook-config.js +183 -0
  425. package/dist/utils/websearch/hook-config.js.map +1 -0
  426. package/dist/utils/websearch/hook-env.d.ts +16 -0
  427. package/dist/utils/websearch/hook-env.d.ts.map +1 -0
  428. package/dist/utils/websearch/hook-env.js +62 -0
  429. package/dist/utils/websearch/hook-env.js.map +1 -0
  430. package/dist/utils/websearch/hook-installer.d.ts +27 -0
  431. package/dist/utils/websearch/hook-installer.d.ts.map +1 -0
  432. package/dist/utils/websearch/hook-installer.js +141 -0
  433. package/dist/utils/websearch/hook-installer.js.map +1 -0
  434. package/dist/utils/websearch/index.d.ts +15 -0
  435. package/dist/utils/websearch/index.d.ts.map +1 -0
  436. package/dist/utils/websearch/index.js +44 -0
  437. package/dist/utils/websearch/index.js.map +1 -0
  438. package/dist/utils/websearch/opencode-cli.d.ts +26 -0
  439. package/dist/utils/websearch/opencode-cli.d.ts.map +1 -0
  440. package/dist/utils/websearch/opencode-cli.js +81 -0
  441. package/dist/utils/websearch/opencode-cli.js.map +1 -0
  442. package/dist/utils/websearch/status.d.ts +35 -0
  443. package/dist/utils/websearch/status.d.ts.map +1 -0
  444. package/dist/utils/websearch/status.js +185 -0
  445. package/dist/utils/websearch/status.js.map +1 -0
  446. package/dist/utils/websearch/types.d.ts +85 -0
  447. package/dist/utils/websearch/types.d.ts.map +1 -0
  448. package/dist/utils/websearch/types.js +10 -0
  449. package/dist/utils/websearch/types.js.map +1 -0
  450. package/dist/utils/websearch-manager.d.ts +7 -186
  451. package/dist/utils/websearch-manager.d.ts.map +1 -1
  452. package/dist/utils/websearch-manager.js +37 -710
  453. package/dist/utils/websearch-manager.js.map +1 -1
  454. package/dist/web-server/data-aggregator.d.ts +3 -51
  455. package/dist/web-server/data-aggregator.d.ts.map +1 -1
  456. package/dist/web-server/data-aggregator.js +18 -386
  457. package/dist/web-server/data-aggregator.js.map +1 -1
  458. package/dist/web-server/health/cliproxy-checks.d.ts +23 -0
  459. package/dist/web-server/health/cliproxy-checks.d.ts.map +1 -0
  460. package/dist/web-server/health/cliproxy-checks.js +145 -0
  461. package/dist/web-server/health/cliproxy-checks.js.map +1 -0
  462. package/dist/web-server/health/config-checks.d.ts +19 -0
  463. package/dist/web-server/health/config-checks.d.ts.map +1 -0
  464. package/dist/web-server/health/config-checks.js +174 -0
  465. package/dist/web-server/health/config-checks.js.map +1 -0
  466. package/dist/web-server/health/environment-checks.d.ts +11 -0
  467. package/dist/web-server/health/environment-checks.d.ts.map +1 -0
  468. package/dist/web-server/health/environment-checks.js +40 -0
  469. package/dist/web-server/health/environment-checks.js.map +1 -0
  470. package/dist/web-server/health/index.d.ts +13 -0
  471. package/dist/web-server/health/index.d.ts.map +1 -0
  472. package/dist/web-server/health/index.js +41 -0
  473. package/dist/web-server/health/index.js.map +1 -0
  474. package/dist/web-server/health/oauth-checks.d.ts +11 -0
  475. package/dist/web-server/health/oauth-checks.d.ts.map +1 -0
  476. package/dist/web-server/health/oauth-checks.js +34 -0
  477. package/dist/web-server/health/oauth-checks.js.map +1 -0
  478. package/dist/web-server/health/profile-checks.d.ts +19 -0
  479. package/dist/web-server/health/profile-checks.d.ts.map +1 -0
  480. package/dist/web-server/health/profile-checks.js +152 -0
  481. package/dist/web-server/health/profile-checks.js.map +1 -0
  482. package/dist/web-server/health/symlink-checks.d.ts +15 -0
  483. package/dist/web-server/health/symlink-checks.d.ts.map +1 -0
  484. package/dist/web-server/health/symlink-checks.js +173 -0
  485. package/dist/web-server/health/symlink-checks.js.map +1 -0
  486. package/dist/web-server/health/system-checks.d.ts +19 -0
  487. package/dist/web-server/health/system-checks.d.ts.map +1 -0
  488. package/dist/web-server/health/system-checks.js +127 -0
  489. package/dist/web-server/health/system-checks.js.map +1 -0
  490. package/dist/web-server/health/types.d.ts +34 -0
  491. package/dist/web-server/health/types.d.ts.map +1 -0
  492. package/dist/web-server/health/types.js +8 -0
  493. package/dist/web-server/health/types.js.map +1 -0
  494. package/dist/web-server/health/websearch-checks.d.ts +11 -0
  495. package/dist/web-server/health/websearch-checks.d.ts.map +1 -0
  496. package/dist/web-server/health/websearch-checks.js +53 -0
  497. package/dist/web-server/health/websearch-checks.js.map +1 -0
  498. package/dist/web-server/health-service.d.ts +4 -30
  499. package/dist/web-server/health-service.d.ts.map +1 -1
  500. package/dist/web-server/health-service.js +28 -695
  501. package/dist/web-server/health-service.js.map +1 -1
  502. package/dist/web-server/index.d.ts.map +1 -1
  503. package/dist/web-server/index.js +2 -5
  504. package/dist/web-server/index.js.map +1 -1
  505. package/dist/web-server/routes/cliproxy-auth-routes.d.ts +6 -0
  506. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -0
  507. package/dist/web-server/routes/cliproxy-auth-routes.js +202 -0
  508. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -0
  509. package/dist/web-server/routes/cliproxy-stats-routes.d.ts +6 -0
  510. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -0
  511. package/dist/web-server/routes/cliproxy-stats-routes.js +253 -0
  512. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -0
  513. package/dist/web-server/routes/config-routes.d.ts +6 -0
  514. package/dist/web-server/routes/config-routes.d.ts.map +1 -0
  515. package/dist/web-server/routes/config-routes.js +145 -0
  516. package/dist/web-server/routes/config-routes.js.map +1 -0
  517. package/dist/web-server/routes/copilot-routes.d.ts +6 -0
  518. package/dist/web-server/routes/copilot-routes.d.ts.map +1 -0
  519. package/dist/web-server/routes/copilot-routes.js +195 -0
  520. package/dist/web-server/routes/copilot-routes.js.map +1 -0
  521. package/dist/web-server/routes/copilot-settings-routes.d.ts +6 -0
  522. package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -0
  523. package/dist/web-server/routes/copilot-settings-routes.js +122 -0
  524. package/dist/web-server/routes/copilot-settings-routes.js.map +1 -0
  525. package/dist/web-server/routes/health-routes.d.ts +6 -0
  526. package/dist/web-server/routes/health-routes.d.ts.map +1 -0
  527. package/dist/web-server/routes/health-routes.js +30 -0
  528. package/dist/web-server/routes/health-routes.js.map +1 -0
  529. package/dist/web-server/routes/index.d.ts +8 -0
  530. package/dist/web-server/routes/index.d.ts.map +1 -0
  531. package/dist/web-server/routes/index.js +54 -0
  532. package/dist/web-server/routes/index.js.map +1 -0
  533. package/dist/web-server/routes/misc-routes.d.ts +6 -0
  534. package/dist/web-server/routes/misc-routes.d.ts.map +1 -0
  535. package/dist/web-server/routes/misc-routes.js +219 -0
  536. package/dist/web-server/routes/misc-routes.js.map +1 -0
  537. package/dist/web-server/routes/profile-routes.d.ts +6 -0
  538. package/dist/web-server/routes/profile-routes.d.ts.map +1 -0
  539. package/dist/web-server/routes/profile-routes.js +164 -0
  540. package/dist/web-server/routes/profile-routes.js.map +1 -0
  541. package/dist/web-server/routes/provider-routes.d.ts +6 -0
  542. package/dist/web-server/routes/provider-routes.d.ts.map +1 -0
  543. package/dist/web-server/routes/provider-routes.js +146 -0
  544. package/dist/web-server/routes/provider-routes.js.map +1 -0
  545. package/dist/web-server/routes/route-helpers.d.ts +55 -0
  546. package/dist/web-server/routes/route-helpers.d.ts.map +1 -0
  547. package/dist/web-server/routes/route-helpers.js +201 -0
  548. package/dist/web-server/routes/route-helpers.js.map +1 -0
  549. package/dist/web-server/routes/settings-routes.d.ts +6 -0
  550. package/dist/web-server/routes/settings-routes.d.ts.map +1 -0
  551. package/dist/web-server/routes/settings-routes.js +207 -0
  552. package/dist/web-server/routes/settings-routes.js.map +1 -0
  553. package/dist/web-server/routes/variant-routes.d.ts +6 -0
  554. package/dist/web-server/routes/variant-routes.d.ts.map +1 -0
  555. package/dist/web-server/routes/variant-routes.js +158 -0
  556. package/dist/web-server/routes/variant-routes.js.map +1 -0
  557. package/dist/web-server/routes/websearch-routes.d.ts +6 -0
  558. package/dist/web-server/routes/websearch-routes.d.ts.map +1 -0
  559. package/dist/web-server/routes/websearch-routes.js +130 -0
  560. package/dist/web-server/routes/websearch-routes.js.map +1 -0
  561. package/dist/web-server/services/index.d.ts +7 -0
  562. package/dist/web-server/services/index.d.ts.map +1 -0
  563. package/dist/web-server/services/index.js +21 -0
  564. package/dist/web-server/services/index.js.map +1 -0
  565. package/dist/web-server/services/usage-aggregator.d.ts +7 -0
  566. package/dist/web-server/services/usage-aggregator.d.ts.map +1 -0
  567. package/dist/web-server/services/usage-aggregator.js +23 -0
  568. package/dist/web-server/services/usage-aggregator.js.map +1 -0
  569. package/dist/web-server/usage/aggregator.d.ts +54 -0
  570. package/dist/web-server/usage/aggregator.d.ts.map +1 -0
  571. package/dist/web-server/usage/aggregator.js +470 -0
  572. package/dist/web-server/usage/aggregator.js.map +1 -0
  573. package/dist/web-server/usage/data-aggregator.d.ts +55 -0
  574. package/dist/web-server/usage/data-aggregator.d.ts.map +1 -0
  575. package/dist/web-server/usage/data-aggregator.js +391 -0
  576. package/dist/web-server/usage/data-aggregator.js.map +1 -0
  577. package/dist/web-server/usage/disk-cache.d.ts +46 -0
  578. package/dist/web-server/usage/disk-cache.d.ts.map +1 -0
  579. package/dist/web-server/usage/disk-cache.js +162 -0
  580. package/dist/web-server/usage/disk-cache.js.map +1 -0
  581. package/dist/web-server/usage/handlers.d.ts +50 -0
  582. package/dist/web-server/usage/handlers.d.ts.map +1 -0
  583. package/dist/web-server/usage/handlers.js +524 -0
  584. package/dist/web-server/usage/handlers.js.map +1 -0
  585. package/dist/web-server/usage/index.d.ts +12 -0
  586. package/dist/web-server/usage/index.d.ts.map +1 -0
  587. package/dist/web-server/usage/index.js +54 -0
  588. package/dist/web-server/usage/index.js.map +1 -0
  589. package/dist/web-server/usage/routes.d.ts +11 -0
  590. package/dist/web-server/usage/routes.d.ts.map +1 -0
  591. package/dist/web-server/usage/routes.js +37 -0
  592. package/dist/web-server/usage/routes.js.map +1 -0
  593. package/dist/web-server/usage/types.d.ts +119 -0
  594. package/dist/web-server/usage/types.d.ts.map +1 -0
  595. package/dist/web-server/usage/types.js +9 -0
  596. package/dist/web-server/usage/types.js.map +1 -0
  597. package/dist/web-server/usage-disk-cache.d.ts +3 -42
  598. package/dist/web-server/usage-disk-cache.d.ts.map +1 -1
  599. package/dist/web-server/usage-disk-cache.js +5 -144
  600. package/dist/web-server/usage-disk-cache.js.map +1 -1
  601. package/dist/web-server/usage-routes.d.ts +3 -31
  602. package/dist/web-server/usage-routes.d.ts.map +1 -1
  603. package/dist/web-server/usage-routes.js +8 -1139
  604. package/dist/web-server/usage-routes.js.map +1 -1
  605. package/dist/web-server/usage-types.d.ts +3 -115
  606. package/dist/web-server/usage-types.d.ts.map +1 -1
  607. package/dist/web-server/usage-types.js +17 -3
  608. package/dist/web-server/usage-types.js.map +1 -1
  609. package/package.json +1 -1
  610. package/dist/ui/assets/analytics-D1k2nYcF.js +0 -1
  611. package/dist/ui/assets/api-D9VVmZ1j.js +0 -1
  612. package/dist/ui/assets/cliproxy-CTt_Nsft.js +0 -1
  613. package/dist/ui/assets/cliproxy-control-panel-DKMAi4_4.js +0 -1
  614. package/dist/ui/assets/copilot-C6F8PT_L.js +0 -4
  615. package/dist/ui/assets/form-utils-BuXDJb0w.js +0 -20
  616. package/dist/ui/assets/health-DiAvJaSn.js +0 -1
  617. package/dist/ui/assets/index-Brq6EBKZ.css +0 -1
  618. package/dist/ui/assets/index-ByU8ZhED.js +0 -48
  619. package/dist/ui/assets/settings-CEomZLGl.js +0 -1
  620. package/dist/web-server/routes.d.ts +0 -7
  621. package/dist/web-server/routes.d.ts.map +0 -1
  622. package/dist/web-server/routes.js +0 -1891
  623. package/dist/web-server/routes.js.map +0 -1
@@ -43,25 +43,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
43
43
  };
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.handleCliproxyCommand = void 0;
46
- const fs = __importStar(require("fs"));
47
46
  const path = __importStar(require("path"));
48
- const cliproxy_1 = require("../cliproxy");
49
47
  const auth_handler_1 = require("../cliproxy/auth-handler");
50
48
  const account_manager_1 = require("../cliproxy/account-manager");
51
49
  const platform_detector_1 = require("../cliproxy/platform-detector");
52
50
  const profile_detector_1 = require("../auth/profile-detector");
53
- const config_manager_1 = require("../utils/config-manager");
54
- const config_generator_1 = require("../cliproxy/config-generator");
55
51
  const model_catalog_1 = require("../cliproxy/model-catalog");
52
+ const unified_config_loader_1 = require("../config/unified-config-loader");
56
53
  const ui_1 = require("../utils/ui");
57
54
  const prompt_1 = require("../utils/prompt");
58
- const reserved_names_1 = require("../config/reserved-names");
59
- const unified_config_loader_1 = require("../config/unified-config-loader");
60
- const feature_flags_1 = require("../config/feature-flags");
61
- const session_tracker_1 = require("../cliproxy/session-tracker");
62
- /**
63
- * Parse command line arguments for profile commands
64
- */
55
+ // Import services
56
+ const services_1 = require("../cliproxy/services");
65
57
  function parseProfileArgs(args) {
66
58
  const result = {};
67
59
  for (let i = 0; i < args.length; i++) {
@@ -87,211 +79,13 @@ function parseProfileArgs(args) {
87
79
  }
88
80
  return result;
89
81
  }
90
- /**
91
- * Validate CLIProxy profile name
92
- */
93
- function validateProfileName(name) {
94
- if (!name) {
95
- return 'Profile name is required';
96
- }
97
- if (!/^[a-zA-Z][a-zA-Z0-9._-]*$/.test(name)) {
98
- return 'Name must start with letter, contain only letters, numbers, dot, dash, underscore';
99
- }
100
- if (name.length > 32) {
101
- return 'Name must be 32 characters or less';
102
- }
103
- // Use centralized reserved names list (includes built-in cliproxy profiles)
104
- if ((0, reserved_names_1.isReservedName)(name)) {
105
- return `'${name}' is a reserved name`;
106
- }
107
- return null;
108
- }
109
- /**
110
- * Check if unified config mode is active
111
- */
112
- function isUnifiedMode() {
113
- return (0, unified_config_loader_1.hasUnifiedConfig)() || (0, feature_flags_1.isUnifiedConfigEnabled)();
114
- }
115
- /**
116
- * Check if CLIProxy variant profile exists
117
- */
118
- function cliproxyVariantExists(name) {
119
- try {
120
- if (isUnifiedMode()) {
121
- const config = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
122
- return !!(config.cliproxy?.variants && name in config.cliproxy.variants);
123
- }
124
- const config = (0, config_manager_1.loadConfig)();
125
- return !!(config.cliproxy && name in config.cliproxy);
126
- }
127
- catch {
128
- return false;
129
- }
130
- }
131
- /**
132
- * Create settings.json file for CLIProxy variant
133
- * Includes all 6 fields for proper Claude CLI integration
134
- */
135
- function createCliproxySettingsFile(name, provider, model, _account) {
136
- const ccsDir = (0, config_manager_1.getCcsDir)();
137
- const settingsPath = path.join(ccsDir, `${provider}-${name}.settings.json`);
138
- // Get base env vars from provider config
139
- const baseEnv = (0, config_generator_1.getClaudeEnvVars)(provider, config_generator_1.CLIPROXY_DEFAULT_PORT);
140
- const settings = {
141
- env: {
142
- ANTHROPIC_BASE_URL: baseEnv.ANTHROPIC_BASE_URL || '',
143
- ANTHROPIC_AUTH_TOKEN: baseEnv.ANTHROPIC_AUTH_TOKEN || '',
144
- ANTHROPIC_MODEL: model,
145
- ANTHROPIC_DEFAULT_OPUS_MODEL: model,
146
- ANTHROPIC_DEFAULT_SONNET_MODEL: model,
147
- ANTHROPIC_DEFAULT_HAIKU_MODEL: baseEnv.ANTHROPIC_DEFAULT_HAIKU_MODEL || model,
148
- },
149
- };
150
- // Ensure directory exists
151
- if (!fs.existsSync(ccsDir)) {
152
- fs.mkdirSync(ccsDir, { recursive: true });
153
- }
154
- fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
155
- return settingsPath;
156
- }
157
- /**
158
- * Update config.json with new CLIProxy variant
159
- */
160
- function addCliproxyVariant(name, provider, settingsPath, account) {
161
- const configPath = (0, config_manager_1.getConfigPath)();
162
- // Read existing config or create new
163
- let config;
164
- try {
165
- config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
166
- }
167
- catch {
168
- config = { profiles: {} };
169
- }
170
- // Ensure cliproxy section exists
171
- if (!config.cliproxy) {
172
- config.cliproxy = {};
173
- }
174
- // Use relative path with ~ for portability
175
- const relativePath = `~/.ccs/${path.basename(settingsPath)}`;
176
- // Build variant config with optional account
177
- const variantConfig = {
178
- provider,
179
- settings: relativePath,
180
- };
181
- if (account) {
182
- variantConfig.account = account;
183
- }
184
- config.cliproxy[name] = variantConfig;
185
- // Write config atomically
186
- const tempPath = configPath + '.tmp';
187
- fs.writeFileSync(tempPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
188
- fs.renameSync(tempPath, configPath);
189
- }
190
- /**
191
- * Remove CLIProxy variant from config.json
192
- */
193
- function removeCliproxyVariant(name) {
194
- const configPath = (0, config_manager_1.getConfigPath)();
195
- let config;
196
- try {
197
- config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
198
- }
199
- catch {
200
- return null;
201
- }
202
- if (!config.cliproxy || !(name in config.cliproxy)) {
203
- return null;
204
- }
205
- const variant = config.cliproxy[name];
206
- delete config.cliproxy[name];
207
- // Clean up empty cliproxy section
208
- if (Object.keys(config.cliproxy).length === 0) {
209
- delete config.cliproxy;
210
- }
211
- // Write config atomically
212
- const tempPath = configPath + '.tmp';
213
- fs.writeFileSync(tempPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
214
- fs.renameSync(tempPath, configPath);
215
- return variant;
216
- }
217
- /**
218
- * Add CLIProxy variant to unified config (config.yaml)
219
- * Creates *.settings.json file and stores reference in config.yaml
220
- */
221
- function addCliproxyVariantUnified(name, provider, model, account) {
222
- const ccsDir = path.join(require('os').homedir(), '.ccs');
223
- const settingsFile = `${provider}-${name}.settings.json`;
224
- const settingsPath = path.join(ccsDir, settingsFile);
225
- // Get base env vars from provider config
226
- const baseEnv = (0, config_generator_1.getClaudeEnvVars)(provider, config_generator_1.CLIPROXY_DEFAULT_PORT);
227
- // Create settings file with model override
228
- const settings = {
229
- env: {
230
- ANTHROPIC_BASE_URL: baseEnv.ANTHROPIC_BASE_URL || '',
231
- ANTHROPIC_AUTH_TOKEN: baseEnv.ANTHROPIC_AUTH_TOKEN || '',
232
- ANTHROPIC_MODEL: model,
233
- ANTHROPIC_DEFAULT_OPUS_MODEL: model,
234
- ANTHROPIC_DEFAULT_SONNET_MODEL: model,
235
- ANTHROPIC_DEFAULT_HAIKU_MODEL: baseEnv.ANTHROPIC_DEFAULT_HAIKU_MODEL || model,
236
- },
237
- };
238
- // Ensure directory exists
239
- if (!fs.existsSync(ccsDir)) {
240
- fs.mkdirSync(ccsDir, { recursive: true });
241
- }
242
- // Write settings file
243
- fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
244
- // Update config.yaml with reference
245
- const config = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
246
- // Ensure cliproxy.variants section exists
247
- if (!config.cliproxy) {
248
- config.cliproxy = {
249
- oauth_accounts: {},
250
- providers: ['gemini', 'codex', 'agy', 'qwen', 'iflow'],
251
- variants: {},
252
- };
253
- }
254
- if (!config.cliproxy.variants) {
255
- config.cliproxy.variants = {};
256
- }
257
- // Add variant with settings file reference
258
- config.cliproxy.variants[name] = {
259
- provider: provider,
260
- account,
261
- settings: `~/.ccs/${settingsFile}`,
262
- };
263
- (0, unified_config_loader_1.saveUnifiedConfig)(config);
264
- }
265
- /**
266
- * Remove CLIProxy variant from unified config
267
- */
268
- function removeCliproxyVariantUnified(name) {
269
- const config = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
270
- if (!config.cliproxy?.variants || !(name in config.cliproxy.variants)) {
271
- return null;
272
- }
273
- const variant = config.cliproxy.variants[name];
274
- // Delete the settings file if it exists
275
- if (variant.settings) {
276
- const settingsPath = variant.settings.replace(/^~/, require('os').homedir());
277
- if (fs.existsSync(settingsPath)) {
278
- fs.unlinkSync(settingsPath);
279
- }
280
- }
281
- delete config.cliproxy.variants[name];
282
- (0, unified_config_loader_1.saveUnifiedConfig)(config);
283
- return { provider: variant.provider, settings: variant.settings };
284
- }
285
- /**
286
- * Format model entry for display
287
- */
288
82
  function formatModelOption(model) {
289
83
  const tierBadge = model.tier === 'paid' ? (0, ui_1.color)(' [Paid Tier]', 'warning') : '';
290
84
  return `${model.name}${tierBadge}`;
291
85
  }
292
- /**
293
- * Handle 'ccs cliproxy create' command
294
- */
86
+ // ============================================================================
87
+ // COMMAND HANDLERS
88
+ // ============================================================================
295
89
  async function handleCreate(args) {
296
90
  await (0, ui_1.initUI)();
297
91
  const parsedArgs = parseProfileArgs(args);
@@ -301,18 +95,17 @@ async function handleCreate(args) {
301
95
  let name = parsedArgs.name;
302
96
  if (!name) {
303
97
  name = await prompt_1.InteractivePrompt.input('Variant name (e.g., g3, flash, pro)', {
304
- validate: validateProfileName,
98
+ validate: services_1.validateProfileName,
305
99
  });
306
100
  }
307
101
  else {
308
- const error = validateProfileName(name);
102
+ const error = (0, services_1.validateProfileName)(name);
309
103
  if (error) {
310
104
  console.log((0, ui_1.fail)(error));
311
105
  process.exit(1);
312
106
  }
313
107
  }
314
- // Check if exists
315
- if (cliproxyVariantExists(name) && !parsedArgs.force) {
108
+ if ((0, services_1.variantExists)(name) && !parsedArgs.force) {
316
109
  console.log((0, ui_1.fail)(`Variant '${name}' already exists`));
317
110
  console.log(` Use ${(0, ui_1.color)('--force', 'command')} to overwrite`);
318
111
  process.exit(1);
@@ -336,7 +129,6 @@ async function handleCreate(args) {
336
129
  const providerAccounts = (0, account_manager_1.getProviderAccounts)(provider);
337
130
  if (!account) {
338
131
  if (providerAccounts.length === 0) {
339
- // No accounts - prompt to authenticate first
340
132
  console.log('');
341
133
  console.log((0, ui_1.warn)(`No accounts authenticated for ${provider}`));
342
134
  console.log('');
@@ -349,7 +141,6 @@ async function handleCreate(args) {
349
141
  console.log(` ${(0, ui_1.color)(`ccs ${provider} --auth`, 'command')}`);
350
142
  process.exit(0);
351
143
  }
352
- // Trigger OAuth inline
353
144
  console.log('');
354
145
  const newAccount = await (0, auth_handler_1.triggerOAuth)(provider, {
355
146
  add: true,
@@ -364,26 +155,20 @@ async function handleCreate(args) {
364
155
  console.log((0, ui_1.ok)(`Authenticated as ${newAccount.email || newAccount.id}`));
365
156
  }
366
157
  else if (providerAccounts.length === 1) {
367
- // Single account - auto-select
368
158
  account = providerAccounts[0].id;
369
159
  }
370
160
  else {
371
- // Multiple accounts - show selector with "Add new" option
372
161
  const ADD_NEW_ID = '__add_new__';
373
162
  const accountOptions = [
374
163
  ...providerAccounts.map((acc) => ({
375
164
  id: acc.id,
376
165
  label: `${acc.email || acc.id}${acc.isDefault ? ' (default)' : ''}`,
377
166
  })),
378
- {
379
- id: ADD_NEW_ID,
380
- label: (0, ui_1.color)('[+ Add new account...]', 'info'),
381
- },
167
+ { id: ADD_NEW_ID, label: (0, ui_1.color)('[+ Add new account...]', 'info') },
382
168
  ];
383
169
  const defaultIdx = providerAccounts.findIndex((a) => a.isDefault);
384
170
  const selectedAccount = await prompt_1.InteractivePrompt.selectFromList('Select account:', accountOptions, { defaultIndex: defaultIdx >= 0 ? defaultIdx : 0 });
385
171
  if (selectedAccount === ADD_NEW_ID) {
386
- // Add new account inline
387
172
  console.log('');
388
173
  const newAccount = await (0, auth_handler_1.triggerOAuth)(provider, {
389
174
  add: true,
@@ -403,195 +188,111 @@ async function handleCreate(args) {
403
188
  }
404
189
  }
405
190
  else {
406
- // Validate provided account exists
407
191
  const exists = providerAccounts.find((a) => a.id === account);
408
192
  if (!exists) {
409
193
  console.log((0, ui_1.fail)(`Account '${account}' not found for ${provider}`));
410
194
  console.log('');
411
195
  console.log('Available accounts:');
412
- providerAccounts.forEach((a) => {
413
- console.log(` - ${a.email || a.id}${a.isDefault ? ' (default)' : ''}`);
414
- });
196
+ providerAccounts.forEach((a) => console.log(` - ${a.email || a.id}${a.isDefault ? ' (default)' : ''}`));
415
197
  process.exit(1);
416
198
  }
417
199
  }
418
200
  // Step 3: Model selection
419
201
  let model = parsedArgs.model;
420
202
  if (!model) {
421
- // Check if provider has model catalog for interactive selection
422
203
  if ((0, model_catalog_1.supportsModelConfig)(provider)) {
423
204
  const catalog = (0, model_catalog_1.getProviderCatalog)(provider);
424
205
  if (catalog) {
425
- const modelOptions = catalog.models.map((m) => ({
426
- id: m.id,
427
- label: formatModelOption(m),
428
- }));
206
+ const modelOptions = catalog.models.map((m) => ({ id: m.id, label: formatModelOption(m) }));
429
207
  const defaultIdx = catalog.models.findIndex((m) => m.id === catalog.defaultModel);
430
208
  model = await prompt_1.InteractivePrompt.selectFromList('Select model:', modelOptions, {
431
209
  defaultIndex: defaultIdx >= 0 ? defaultIdx : 0,
432
210
  });
433
211
  }
434
212
  }
435
- // Fallback to manual input if no catalog
436
213
  if (!model) {
437
214
  model = await prompt_1.InteractivePrompt.input('Model name', {
438
215
  validate: (val) => (val ? null : 'Model is required'),
439
216
  });
440
217
  }
441
218
  }
442
- // Create files
219
+ // Create variant
443
220
  console.log('');
444
221
  console.log((0, ui_1.info)('Creating CLIProxy variant...'));
445
- try {
446
- if (isUnifiedMode()) {
447
- // Use unified config format (no settings file needed - env vars derived at runtime)
448
- addCliproxyVariantUnified(name, provider, model, account);
449
- console.log('');
450
- console.log((0, ui_1.infoBox)(`Variant: ${name}\n` +
451
- `Provider: ${provider}\n` +
452
- `Model: ${model}\n` +
453
- (account ? `Account: ${account}\n` : '') +
454
- `Config: ~/.ccs/config.yaml`, 'CLIProxy Variant Created (Unified Config)'));
455
- }
456
- else {
457
- // Legacy: create settings.json file
458
- const settingsPath = createCliproxySettingsFile(name, provider, model, account);
459
- addCliproxyVariant(name, provider, settingsPath, account);
460
- console.log('');
461
- console.log((0, ui_1.infoBox)(`Variant: ${name}\n` +
462
- `Provider: ${provider}\n` +
463
- `Model: ${model}\n` +
464
- (account ? `Account: ${account}\n` : '') +
465
- `Settings: ~/.ccs/${path.basename(settingsPath)}`, 'CLIProxy Variant Created'));
466
- }
467
- console.log('');
468
- console.log((0, ui_1.header)('Usage'));
469
- console.log(` ${(0, ui_1.color)(`ccs ${name} "your prompt"`, 'command')}`);
470
- console.log('');
471
- console.log((0, ui_1.dim)('To change model later:'));
472
- console.log(` ${(0, ui_1.color)(`ccs ${name} --config`, 'command')}`);
473
- console.log('');
474
- }
475
- catch (error) {
476
- console.log((0, ui_1.fail)(`Failed to create variant: ${error.message}`));
222
+ const result = (0, services_1.createVariant)(name, provider, model, account);
223
+ if (!result.success) {
224
+ console.log((0, ui_1.fail)(`Failed to create variant: ${result.error}`));
477
225
  process.exit(1);
478
226
  }
227
+ console.log('');
228
+ const configType = (0, unified_config_loader_1.isUnifiedMode)()
229
+ ? 'CLIProxy Variant Created (Unified Config)'
230
+ : 'CLIProxy Variant Created';
231
+ const settingsDisplay = (0, unified_config_loader_1.isUnifiedMode)()
232
+ ? '~/.ccs/config.yaml'
233
+ : `~/.ccs/${path.basename(result.settingsPath || '')}`;
234
+ console.log((0, ui_1.infoBox)(`Variant: ${name}\nProvider: ${provider}\nModel: ${model}\n${account ? `Account: ${account}\n` : ''}${(0, unified_config_loader_1.isUnifiedMode)() ? 'Config' : 'Settings'}: ${settingsDisplay}`, configType));
235
+ console.log('');
236
+ console.log((0, ui_1.header)('Usage'));
237
+ console.log(` ${(0, ui_1.color)(`ccs ${name} "your prompt"`, 'command')}`);
238
+ console.log('');
239
+ console.log((0, ui_1.dim)('To change model later:'));
240
+ console.log(` ${(0, ui_1.color)(`ccs ${name} --config`, 'command')}`);
241
+ console.log('');
479
242
  }
480
- /**
481
- * Handle 'ccs cliproxy list' command
482
- */
483
243
  async function handleList() {
484
244
  await (0, ui_1.initUI)();
485
245
  console.log((0, ui_1.header)('CLIProxy Profiles'));
486
246
  console.log('');
487
- try {
488
- // Show auth status for built-in profiles
489
- console.log((0, ui_1.subheader)('Built-in Profiles'));
490
- const authStatuses = (0, auth_handler_1.getAllAuthStatus)();
491
- for (const status of authStatuses) {
492
- const oauthConfig = (0, auth_handler_1.getOAuthConfig)(status.provider);
493
- const icon = status.authenticated ? (0, ui_1.ok)('') : (0, ui_1.warn)('');
494
- const authLabel = status.authenticated
495
- ? (0, ui_1.color)('authenticated', 'success')
496
- : (0, ui_1.dim)('not authenticated');
497
- const lastAuthStr = status.lastAuth ? (0, ui_1.dim)(` (${status.lastAuth.toLocaleDateString()})`) : '';
498
- console.log(` ${icon} ${(0, ui_1.color)(status.provider, 'command').padEnd(18)} ${oauthConfig.displayName.padEnd(16)} ${authLabel}${lastAuthStr}`);
499
- }
247
+ // Built-in profiles
248
+ console.log((0, ui_1.subheader)('Built-in Profiles'));
249
+ const authStatuses = (0, auth_handler_1.getAllAuthStatus)();
250
+ for (const status of authStatuses) {
251
+ const oauthConfig = (0, auth_handler_1.getOAuthConfig)(status.provider);
252
+ const icon = status.authenticated ? (0, ui_1.ok)('') : (0, ui_1.warn)('');
253
+ const authLabel = status.authenticated
254
+ ? (0, ui_1.color)('authenticated', 'success')
255
+ : (0, ui_1.dim)('not authenticated');
256
+ const lastAuthStr = status.lastAuth ? (0, ui_1.dim)(` (${status.lastAuth.toLocaleDateString()})`) : '';
257
+ console.log(` ${icon} ${(0, ui_1.color)(status.provider, 'command').padEnd(18)} ${oauthConfig.displayName.padEnd(16)} ${authLabel}${lastAuthStr}`);
258
+ }
259
+ console.log('');
260
+ console.log((0, ui_1.dim)(' To authenticate: ccs <provider> --auth'));
261
+ console.log((0, ui_1.dim)(' To logout: ccs <provider> --logout'));
262
+ console.log('');
263
+ // Custom variants
264
+ const variants = (0, services_1.listVariants)();
265
+ const variantNames = Object.keys(variants);
266
+ if (variantNames.length > 0) {
267
+ console.log((0, ui_1.subheader)('Custom Variants'));
268
+ const rows = variantNames.map((name) => {
269
+ const variant = variants[name];
270
+ return [name, variant.provider, variant.settings || '-'];
271
+ });
272
+ console.log((0, ui_1.table)(rows, { head: ['Variant', 'Provider', 'Settings'], colWidths: [15, 12, 35] }));
500
273
  console.log('');
501
- console.log((0, ui_1.dim)(' To authenticate: ccs <provider> --auth'));
502
- console.log((0, ui_1.dim)(' To logout: ccs <provider> --logout'));
503
- console.log('');
504
- // Show custom variants if any (from unified or legacy config)
505
- let variantNames;
506
- let variantData;
507
- if (isUnifiedMode()) {
508
- const unifiedConfig = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
509
- const variants = unifiedConfig.cliproxy?.variants || {};
510
- variantNames = Object.keys(variants);
511
- variantData = {};
512
- for (const name of variantNames) {
513
- const v = variants[name];
514
- variantData[name] = { provider: v.provider, settings: v.settings };
515
- }
516
- }
517
- else {
518
- const config = (0, config_manager_1.loadConfig)();
519
- const variants = config.cliproxy || {};
520
- variantNames = Object.keys(variants);
521
- variantData = {};
522
- for (const name of variantNames) {
523
- const v = variants[name];
524
- variantData[name] = { provider: v.provider, settings: v.settings };
525
- }
526
- }
527
- if (variantNames.length > 0) {
528
- console.log((0, ui_1.subheader)('Custom Variants'));
529
- // Build table data
530
- const rows = variantNames.map((name) => {
531
- const variant = variantData[name];
532
- return [name, variant.provider, variant.settings || '-'];
533
- });
534
- // Print table
535
- console.log((0, ui_1.table)(rows, {
536
- head: ['Variant', 'Provider', 'Settings'],
537
- colWidths: [15, 12, 35],
538
- }));
539
- console.log('');
540
- console.log((0, ui_1.dim)(`Total: ${variantNames.length} custom variant(s)`));
541
- console.log('');
542
- }
543
- console.log((0, ui_1.dim)('To create a custom variant:'));
544
- console.log(` ${(0, ui_1.color)('ccs cliproxy create', 'command')}`);
274
+ console.log((0, ui_1.dim)(`Total: ${variantNames.length} custom variant(s)`));
545
275
  console.log('');
546
276
  }
547
- catch (error) {
548
- console.log((0, ui_1.fail)(`Failed to list profiles: ${error.message}`));
549
- process.exit(1);
550
- }
277
+ console.log((0, ui_1.dim)('To create a custom variant:'));
278
+ console.log(` ${(0, ui_1.color)('ccs cliproxy create', 'command')}`);
279
+ console.log('');
551
280
  }
552
- /**
553
- * Handle 'ccs cliproxy remove' command
554
- */
555
281
  async function handleRemove(args) {
556
282
  await (0, ui_1.initUI)();
557
283
  const parsedArgs = parseProfileArgs(args);
558
- // Get available variants based on config mode
559
- let variantNames;
560
- let variantData;
561
- if (isUnifiedMode()) {
562
- const unifiedConfig = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
563
- const variants = unifiedConfig.cliproxy?.variants || {};
564
- variantNames = Object.keys(variants);
565
- variantData = {};
566
- for (const name of variantNames) {
567
- const v = variants[name];
568
- variantData[name] = { provider: v.provider, settings: v.settings };
569
- }
570
- }
571
- else {
572
- const config = (0, config_manager_1.loadConfig)();
573
- const variants = config.cliproxy || {};
574
- variantNames = Object.keys(variants);
575
- variantData = {};
576
- for (const name of variantNames) {
577
- const v = variants[name];
578
- variantData[name] = { provider: v.provider, settings: v.settings };
579
- }
580
- }
284
+ const variants = (0, services_1.listVariants)();
285
+ const variantNames = Object.keys(variants);
581
286
  if (variantNames.length === 0) {
582
287
  console.log((0, ui_1.warn)('No CLIProxy variants to remove'));
583
288
  process.exit(0);
584
289
  }
585
- // Interactive selection if not provided
586
290
  let name = parsedArgs.name;
587
291
  if (!name) {
588
292
  console.log((0, ui_1.header)('Remove CLIProxy Variant'));
589
293
  console.log('');
590
294
  console.log('Available variants:');
591
- variantNames.forEach((n, i) => {
592
- const v = variantData[n];
593
- console.log(` ${i + 1}. ${n} (${v.provider})`);
594
- });
295
+ variantNames.forEach((n, i) => console.log(` ${i + 1}. ${n} (${variants[n].provider})`));
595
296
  console.log('');
596
297
  name = await prompt_1.InteractivePrompt.input('Variant name to remove', {
597
298
  validate: (val) => {
@@ -610,8 +311,7 @@ async function handleRemove(args) {
610
311
  variantNames.forEach((n) => console.log(` - ${n}`));
611
312
  process.exit(1);
612
313
  }
613
- const variant = variantData[name];
614
- // Confirm deletion
314
+ const variant = variants[name];
615
315
  console.log('');
616
316
  console.log(`Variant '${(0, ui_1.color)(name, 'command')}' will be removed.`);
617
317
  console.log(` Provider: ${variant.provider}`);
@@ -622,217 +322,106 @@ async function handleRemove(args) {
622
322
  console.log((0, ui_1.info)('Cancelled'));
623
323
  process.exit(0);
624
324
  }
625
- try {
626
- if (isUnifiedMode()) {
627
- // Remove from unified config
628
- removeCliproxyVariantUnified(name);
629
- }
630
- else {
631
- // Remove from legacy config
632
- const removed = removeCliproxyVariant(name);
633
- if (!removed) {
634
- console.log((0, ui_1.fail)('Failed to remove variant from config'));
635
- process.exit(1);
636
- }
637
- // Remove settings file if it exists
638
- const settingsFile = removed.settings.replace(/^~/, process.env.HOME || '');
639
- if (fs.existsSync(settingsFile)) {
640
- fs.unlinkSync(settingsFile);
641
- }
642
- }
643
- console.log((0, ui_1.ok)(`Variant removed: ${name}`));
644
- console.log('');
645
- }
646
- catch (error) {
647
- console.log((0, ui_1.fail)(`Failed to remove variant: ${error.message}`));
325
+ const result = (0, services_1.removeVariant)(name);
326
+ if (!result.success) {
327
+ console.log((0, ui_1.fail)(`Failed to remove variant: ${result.error}`));
648
328
  process.exit(1);
649
329
  }
330
+ console.log((0, ui_1.ok)(`Variant removed: ${name}`));
331
+ console.log('');
650
332
  }
651
- // ============================================================================
652
- // BINARY MANAGEMENT
653
- // ============================================================================
654
- /**
655
- * Show cliproxy command help with styled UI
656
- */
657
- async function showHelp() {
333
+ async function handleStop() {
658
334
  await (0, ui_1.initUI)();
335
+ console.log((0, ui_1.header)('Stop CLIProxy'));
659
336
  console.log('');
660
- console.log((0, ui_1.header)('CLIProxy Management'));
661
- console.log('');
662
- // Usage
663
- console.log((0, ui_1.subheader)('Usage:'));
664
- console.log(` ${(0, ui_1.color)('ccs cliproxy', 'command')} <command> [options]`);
665
- console.log('');
666
- // Profile Commands
667
- console.log((0, ui_1.subheader)('Profile Commands:'));
668
- const profileCmds = [
669
- ['create [name]', 'Create new CLIProxy variant profile'],
670
- ['list', 'List all CLIProxy variant profiles'],
671
- ['remove <name>', 'Remove a CLIProxy variant profile'],
672
- ];
673
- const maxProfileLen = Math.max(...profileCmds.map(([cmd]) => cmd.length));
674
- for (const [cmd, desc] of profileCmds) {
675
- console.log(` ${(0, ui_1.color)(cmd.padEnd(maxProfileLen + 2), 'command')} ${desc}`);
337
+ const result = await (0, services_1.stopProxy)();
338
+ if (result.stopped) {
339
+ console.log((0, ui_1.ok)(`CLIProxy stopped (PID ${result.pid})`));
340
+ if (result.sessionCount && result.sessionCount > 0) {
341
+ console.log((0, ui_1.info)(`${result.sessionCount} active session(s) were disconnected`));
342
+ }
676
343
  }
677
- console.log('');
678
- // Proxy Lifecycle Commands
679
- console.log((0, ui_1.subheader)('Proxy Lifecycle:'));
680
- const lifecycleCmds = [
681
- ['status', 'Show running CLIProxy status'],
682
- ['stop', 'Stop running CLIProxy instance'],
683
- ];
684
- const maxLifecycleLen = Math.max(...lifecycleCmds.map(([cmd]) => cmd.length));
685
- for (const [cmd, desc] of lifecycleCmds) {
686
- console.log(` ${(0, ui_1.color)(cmd.padEnd(maxLifecycleLen + 2), 'command')} ${desc}`);
344
+ else {
345
+ console.log((0, ui_1.warn)(result.error || 'Failed to stop CLIProxy'));
687
346
  }
688
347
  console.log('');
689
- console.log((0, ui_1.dim)(' Note: CLIProxy now persists by default. Use "stop" to terminate.'));
348
+ }
349
+ async function handleProxyStatus() {
350
+ await (0, ui_1.initUI)();
351
+ console.log((0, ui_1.header)('CLIProxy Status'));
690
352
  console.log('');
691
- // Binary Commands
692
- console.log((0, ui_1.subheader)('Binary Commands:'));
693
- const binaryCmds = [
694
- ['--install <version>', 'Install and pin a specific version'],
695
- ['--latest', 'Install the latest version (no pin)'],
696
- ['--update', 'Unpin and update to latest version'],
697
- ];
698
- const maxBinaryLen = Math.max(...binaryCmds.map(([cmd]) => cmd.length));
699
- for (const [cmd, desc] of binaryCmds) {
700
- console.log(` ${(0, ui_1.color)(cmd.padEnd(maxBinaryLen + 2), 'command')} ${desc}`);
701
- }
702
- console.log('');
703
- // Multi-Account Commands
704
- console.log((0, ui_1.subheader)('Multi-Account Commands:'));
705
- const multiAcctCmds = [
706
- ['--auth', 'Authenticate with a provider (first account)'],
707
- ['--auth --add', 'Add another account to a provider'],
708
- ['--nickname <name>', 'Set friendly name for account'],
709
- ['--accounts', 'List all accounts for a provider'],
710
- ['--use <name>', 'Switch to account by nickname/email'],
711
- ];
712
- const maxMultiLen = Math.max(...multiAcctCmds.map(([cmd]) => cmd.length));
713
- for (const [cmd, desc] of multiAcctCmds) {
714
- console.log(` ${(0, ui_1.color)(cmd.padEnd(maxMultiLen + 2), 'command')} ${desc}`);
715
- }
716
- console.log('');
717
- // Create Options
718
- console.log((0, ui_1.subheader)('Create Options:'));
719
- const createOpts = [
720
- ['--provider <name>', 'Provider (gemini, codex, agy, qwen)'],
721
- ['--model <model>', 'Model name'],
722
- ['--account <id>', 'Account ID (email or default)'],
723
- ['--force', 'Overwrite existing variant'],
724
- ['--yes, -y', 'Skip confirmation prompts'],
725
- ];
726
- const maxOptLen = Math.max(...createOpts.map(([opt]) => opt.length));
727
- for (const [opt, desc] of createOpts) {
728
- console.log(` ${(0, ui_1.color)(opt.padEnd(maxOptLen + 2), 'command')} ${desc}`);
729
- }
730
- console.log('');
731
- // Examples
732
- console.log((0, ui_1.subheader)('Examples:'));
733
- console.log(` $ ${(0, ui_1.color)('ccs cliproxy create', 'command')} ${(0, ui_1.dim)('# Interactive wizard')}`);
734
- console.log(` $ ${(0, ui_1.color)('ccs cliproxy create g3 --provider gemini', 'command')}`);
735
- console.log(` ${(0, ui_1.color)('--model gemini-3-pro-preview', 'command')} ${(0, ui_1.dim)('# Non-interactive')}`);
736
- console.log(` $ ${(0, ui_1.color)('ccs cliproxy list', 'command')} ${(0, ui_1.dim)('# Show all variants')}`);
737
- console.log(` $ ${(0, ui_1.color)('ccs cliproxy remove g3', 'command')} ${(0, ui_1.dim)('# Remove variant')}`);
738
- console.log(` $ ${(0, ui_1.color)('ccs cliproxy --latest', 'command')} ${(0, ui_1.dim)('# Update binary')}`);
739
- console.log('');
740
- console.log((0, ui_1.subheader)('Multi-Account Examples:'));
741
- console.log(` $ ${(0, ui_1.color)('ccs gemini --auth', 'command')} ${(0, ui_1.dim)('# First account')}`);
742
- console.log(` $ ${(0, ui_1.color)('ccs gemini --auth --add', 'command')} ${(0, ui_1.dim)('# Add second account')}`);
743
- console.log(` $ ${(0, ui_1.color)('ccs gemini --auth --add --nickname work', 'command')} ${(0, ui_1.dim)('# With nickname')}`);
744
- console.log(` $ ${(0, ui_1.color)('ccs agy --accounts', 'command')} ${(0, ui_1.dim)('# List accounts')}`);
745
- console.log(` $ ${(0, ui_1.color)('ccs agy --use work', 'command')} ${(0, ui_1.dim)('# Switch account')}`);
746
- console.log('');
747
- // Notes
748
- console.log((0, ui_1.subheader)('Notes:'));
749
- console.log(` Default fallback version: ${(0, ui_1.color)(platform_detector_1.CLIPROXY_FALLBACK_VERSION, 'info')}`);
750
- console.log(` Releases: ${(0, ui_1.color)('https://github.com/router-for-me/CLIProxyAPI/releases', 'path')}`);
353
+ const status = (0, services_1.getProxyStatus)();
354
+ if (status.running) {
355
+ console.log(` Status: ${(0, ui_1.color)('Running', 'success')}`);
356
+ console.log(` PID: ${status.pid}`);
357
+ console.log(` Port: ${status.port}`);
358
+ console.log(` Sessions: ${status.sessionCount || 0} active`);
359
+ if (status.startedAt) {
360
+ console.log(` Started: ${new Date(status.startedAt).toLocaleString()}`);
361
+ }
362
+ console.log('');
363
+ console.log((0, ui_1.dim)('To stop: ccs cliproxy stop'));
364
+ }
365
+ else {
366
+ console.log(` Status: ${(0, ui_1.color)('Not running', 'warning')}`);
367
+ console.log('');
368
+ console.log((0, ui_1.dim)('CLIProxy starts automatically when you run ccs gemini, codex, etc.'));
369
+ }
751
370
  console.log('');
752
371
  }
753
- /**
754
- * Show current cliproxy status
755
- */
756
372
  async function showStatus(verbose) {
757
373
  await (0, ui_1.initUI)();
758
- const installed = (0, cliproxy_1.isCLIProxyInstalled)();
759
- const currentVersion = (0, cliproxy_1.getInstalledCliproxyVersion)();
760
- const binaryPath = (0, cliproxy_1.getCLIProxyPath)();
761
- const pinnedVersion = (0, cliproxy_1.getPinnedVersion)();
374
+ const status = (0, services_1.getBinaryStatus)();
762
375
  console.log('');
763
376
  console.log((0, ui_1.color)('CLIProxyAPI Status', 'primary'));
764
377
  console.log('');
765
- if (installed) {
378
+ if (status.installed) {
766
379
  console.log(` Installed: ${(0, ui_1.color)('Yes', 'success')}`);
767
- const versionLabel = pinnedVersion
768
- ? `${(0, ui_1.color)(`v${currentVersion}`, 'info')} ${(0, ui_1.color)('(pinned)', 'warning')}`
769
- : (0, ui_1.color)(`v${currentVersion}`, 'info');
380
+ const versionLabel = status.pinnedVersion
381
+ ? `${(0, ui_1.color)(`v${status.currentVersion}`, 'info')} ${(0, ui_1.color)('(pinned)', 'warning')}`
382
+ : (0, ui_1.color)(`v${status.currentVersion}`, 'info');
770
383
  console.log(` Version: ${versionLabel}`);
771
- console.log(` Binary: ${(0, ui_1.dim)(binaryPath)}`);
384
+ console.log(` Binary: ${(0, ui_1.dim)(status.binaryPath)}`);
772
385
  }
773
386
  else {
774
387
  console.log(` Installed: ${(0, ui_1.color)('No', 'error')}`);
775
- console.log(` Fallback: ${(0, ui_1.color)(`v${platform_detector_1.CLIPROXY_FALLBACK_VERSION}`, 'info')}`);
388
+ console.log(` Fallback: ${(0, ui_1.color)(`v${status.fallbackVersion}`, 'info')}`);
776
389
  console.log(` ${(0, ui_1.dim)('Run "ccs gemini" or any provider to auto-install')}`);
777
390
  }
778
- // Try to fetch latest version
779
- try {
391
+ const latestCheck = await (0, services_1.checkLatestVersion)();
392
+ if (latestCheck.success && latestCheck.latestVersion) {
780
393
  console.log('');
781
- console.log(` ${(0, ui_1.dim)('Checking for updates...')}`);
782
- const latestVersion = await (0, cliproxy_1.fetchLatestCliproxyVersion)();
783
- if (latestVersion !== currentVersion) {
784
- if (pinnedVersion) {
785
- console.log(` Latest: ${(0, ui_1.color)(`v${latestVersion}`, 'success')} ${(0, ui_1.dim)('(pinned to v' + pinnedVersion + ')')}`);
394
+ if (latestCheck.updateAvailable) {
395
+ if (status.pinnedVersion) {
396
+ console.log(` Latest: ${(0, ui_1.color)(`v${latestCheck.latestVersion}`, 'success')} ${(0, ui_1.dim)('(pinned to v' + status.pinnedVersion + ')')}`);
786
397
  console.log('');
787
398
  console.log(` ${(0, ui_1.dim)('Run "ccs cliproxy --update" to unpin and update')}`);
788
399
  }
789
400
  else {
790
- console.log(` Latest: ${(0, ui_1.color)(`v${latestVersion}`, 'success')} ${(0, ui_1.dim)('(update available)')}`);
401
+ console.log(` Latest: ${(0, ui_1.color)(`v${latestCheck.latestVersion}`, 'success')} ${(0, ui_1.dim)('(update available)')}`);
791
402
  console.log('');
792
403
  console.log(` ${(0, ui_1.dim)('Run "ccs cliproxy --latest" to update')}`);
793
404
  }
794
405
  }
795
406
  else {
796
- console.log(` Latest: ${(0, ui_1.color)(`v${latestVersion}`, 'success')} ${(0, ui_1.dim)('(up to date)')}`);
407
+ console.log(` Latest: ${(0, ui_1.color)(`v${latestCheck.latestVersion}`, 'success')} ${(0, ui_1.dim)('(up to date)')}`);
797
408
  }
798
409
  }
799
- catch (error) {
800
- if (verbose) {
801
- const err = error;
802
- console.log(` Latest: ${(0, ui_1.dim)(`Could not fetch (${err.message})`)}`);
803
- }
410
+ else if (verbose && latestCheck.error) {
411
+ console.log(` Latest: ${(0, ui_1.dim)(`Could not fetch (${latestCheck.error})`)}`);
804
412
  }
805
413
  console.log('');
806
- console.log((0, ui_1.dim)(`Run "ccs cliproxy --help" for all available commands`));
414
+ console.log((0, ui_1.dim)('Run "ccs cliproxy --help" for all available commands'));
807
415
  console.log('');
808
416
  }
809
- /**
810
- * Install a specific version (pins the version to prevent auto-update)
811
- */
812
- async function installVersion(version, verbose) {
813
- // Validate version format (basic semver check)
814
- if (!/^\d+\.\d+\.\d+$/.test(version)) {
815
- console.error((0, ui_1.fail)('Invalid version format. Expected format: X.Y.Z (e.g., 6.5.53)'));
816
- process.exit(1);
817
- }
417
+ async function handleInstallVersion(version, verbose) {
818
418
  console.log((0, ui_1.info)(`Installing CLIProxyAPI v${version}...`));
819
419
  console.log('');
820
- try {
821
- await (0, cliproxy_1.installCliproxyVersion)(version, verbose);
822
- // Pin the version to prevent auto-update
823
- (0, cliproxy_1.savePinnedVersion)(version);
824
- console.log('');
825
- console.log((0, ui_1.ok)(`CLIProxyAPI v${version} installed (pinned)`));
826
- console.log('');
827
- console.log((0, ui_1.dim)('This version will be used until you run:'));
828
- console.log(` ${(0, ui_1.color)('ccs cliproxy --update', 'command')} ${(0, ui_1.dim)('# Update to latest and unpin')}`);
829
- console.log('');
830
- }
831
- catch (error) {
832
- const err = error;
420
+ const result = await (0, services_1.installVersion)(version, verbose);
421
+ if (!result.success) {
833
422
  console.error('');
834
423
  console.error((0, ui_1.fail)(`Failed to install CLIProxyAPI v${version}`));
835
- console.error(` ${err.message}`);
424
+ console.error(` ${result.error}`);
836
425
  console.error('');
837
426
  console.error('Possible causes:');
838
427
  console.error(' 1. Version does not exist on GitHub');
@@ -843,106 +432,87 @@ async function installVersion(version, verbose) {
843
432
  console.error(' https://github.com/router-for-me/CLIProxyAPI/releases');
844
433
  process.exit(1);
845
434
  }
435
+ console.log('');
436
+ console.log((0, ui_1.ok)(`CLIProxyAPI v${version} installed (pinned)`));
437
+ console.log('');
438
+ console.log((0, ui_1.dim)('This version will be used until you run:'));
439
+ console.log(` ${(0, ui_1.color)('ccs cliproxy --update', 'command')} ${(0, ui_1.dim)('# Update to latest and unpin')}`);
440
+ console.log('');
846
441
  }
847
- /**
848
- * Install latest version (clears any version pin)
849
- */
850
- async function installLatest(verbose) {
442
+ async function handleInstallLatest(verbose) {
851
443
  console.log((0, ui_1.info)('Fetching latest CLIProxyAPI version...'));
852
- try {
853
- const latestVersion = await (0, cliproxy_1.fetchLatestCliproxyVersion)();
854
- const currentVersion = (0, cliproxy_1.getInstalledCliproxyVersion)();
855
- const wasPinned = (0, cliproxy_1.isVersionPinned)();
856
- if ((0, cliproxy_1.isCLIProxyInstalled)() && latestVersion === currentVersion && !wasPinned) {
857
- console.log((0, ui_1.ok)(`Already running latest version: v${latestVersion}`));
858
- return;
859
- }
860
- console.log((0, ui_1.info)(`Latest version: v${latestVersion}`));
861
- if ((0, cliproxy_1.isCLIProxyInstalled)()) {
862
- console.log((0, ui_1.info)(`Current version: v${currentVersion}`));
863
- }
864
- if (wasPinned) {
865
- console.log((0, ui_1.info)(`Removing version pin (was v${(0, cliproxy_1.getPinnedVersion)()})`));
866
- }
867
- console.log('');
868
- await (0, cliproxy_1.installCliproxyVersion)(latestVersion, verbose);
869
- // Clear any version pin so auto-update works again
870
- (0, cliproxy_1.clearPinnedVersion)();
871
- console.log('');
872
- console.log((0, ui_1.ok)(`CLIProxyAPI updated to v${latestVersion}`));
873
- console.log((0, ui_1.dim)('Auto-update is now enabled.'));
874
- console.log('');
875
- }
876
- catch (error) {
877
- const err = error;
878
- console.error((0, ui_1.fail)(`Failed to install latest version: ${err.message}`));
444
+ const result = await (0, services_1.installLatest)(verbose);
445
+ if (!result.success) {
446
+ console.error((0, ui_1.fail)(`Failed to install latest version: ${result.error}`));
879
447
  process.exit(1);
880
448
  }
881
- }
882
- // ============================================================================
883
- // PROXY LIFECYCLE COMMANDS
884
- // ============================================================================
885
- /**
886
- * Handle 'ccs cliproxy stop' - Stop running CLIProxy instance
887
- */
888
- async function handleStop() {
889
- await (0, ui_1.initUI)();
890
- console.log((0, ui_1.header)('Stop CLIProxy'));
891
- console.log('');
892
- const result = await (0, session_tracker_1.stopProxy)();
893
- if (result.stopped) {
894
- console.log((0, ui_1.ok)(`CLIProxy stopped (PID ${result.pid})`));
895
- if (result.sessionCount && result.sessionCount > 0) {
896
- console.log((0, ui_1.info)(`${result.sessionCount} active session(s) were disconnected`));
897
- }
898
- }
899
- else {
900
- console.log((0, ui_1.warn)(result.error || 'Failed to stop CLIProxy'));
449
+ if (result.error?.startsWith('Already')) {
450
+ console.log((0, ui_1.ok)(result.error));
451
+ return;
901
452
  }
902
453
  console.log('');
454
+ console.log((0, ui_1.ok)(`CLIProxyAPI updated to v${result.version}`));
455
+ console.log((0, ui_1.dim)('Auto-update is now enabled.'));
456
+ console.log('');
903
457
  }
904
- /**
905
- * Handle 'ccs cliproxy status' - Show running proxy status
906
- */
907
- async function handleProxyStatus() {
458
+ async function showHelp() {
908
459
  await (0, ui_1.initUI)();
909
- console.log((0, ui_1.header)('CLIProxy Status'));
910
460
  console.log('');
911
- const status = (0, session_tracker_1.getProxyStatus)();
912
- if (status.running) {
913
- console.log(` Status: ${(0, ui_1.color)('Running', 'success')}`);
914
- console.log(` PID: ${status.pid}`);
915
- console.log(` Port: ${status.port}`);
916
- console.log(` Sessions: ${status.sessionCount || 0} active`);
917
- if (status.startedAt) {
918
- const started = new Date(status.startedAt);
919
- console.log(` Started: ${started.toLocaleString()}`);
461
+ console.log((0, ui_1.header)('CLIProxy Management'));
462
+ console.log('');
463
+ console.log((0, ui_1.subheader)('Usage:'));
464
+ console.log(` ${(0, ui_1.color)('ccs cliproxy', 'command')} <command> [options]`);
465
+ console.log('');
466
+ const sections = [
467
+ [
468
+ 'Profile Commands:',
469
+ [
470
+ ['create [name]', 'Create new CLIProxy variant profile'],
471
+ ['list', 'List all CLIProxy variant profiles'],
472
+ ['remove <name>', 'Remove a CLIProxy variant profile'],
473
+ ],
474
+ ],
475
+ [
476
+ 'Proxy Lifecycle:',
477
+ [
478
+ ['status', 'Show running CLIProxy status'],
479
+ ['stop', 'Stop running CLIProxy instance'],
480
+ ],
481
+ ],
482
+ [
483
+ 'Binary Commands:',
484
+ [
485
+ ['--install <version>', 'Install and pin a specific version'],
486
+ ['--latest', 'Install the latest version (no pin)'],
487
+ ['--update', 'Unpin and update to latest version'],
488
+ ],
489
+ ],
490
+ ];
491
+ for (const [title, cmds] of sections) {
492
+ console.log((0, ui_1.subheader)(title));
493
+ const maxLen = Math.max(...cmds.map(([cmd]) => cmd.length));
494
+ for (const [cmd, desc] of cmds) {
495
+ console.log(` ${(0, ui_1.color)(cmd.padEnd(maxLen + 2), 'command')} ${desc}`);
920
496
  }
921
497
  console.log('');
922
- console.log((0, ui_1.dim)('To stop: ccs cliproxy stop'));
923
- }
924
- else {
925
- console.log(` Status: ${(0, ui_1.color)('Not running', 'warning')}`);
926
- console.log('');
927
- console.log((0, ui_1.dim)('CLIProxy starts automatically when you run ccs gemini, codex, etc.'));
928
498
  }
499
+ console.log((0, ui_1.dim)(' Note: CLIProxy now persists by default. Use "stop" to terminate.'));
500
+ console.log('');
501
+ console.log((0, ui_1.subheader)('Notes:'));
502
+ console.log(` Default fallback version: ${(0, ui_1.color)(platform_detector_1.CLIPROXY_FALLBACK_VERSION, 'info')}`);
503
+ console.log(` Releases: ${(0, ui_1.color)('https://github.com/router-for-me/CLIProxyAPI/releases', 'path')}`);
929
504
  console.log('');
930
505
  }
931
506
  // ============================================================================
932
507
  // MAIN ROUTER
933
508
  // ============================================================================
934
- /**
935
- * Main cliproxy command handler
936
- */
937
509
  async function handleCliproxyCommand(args) {
938
510
  const verbose = args.includes('--verbose') || args.includes('-v');
939
511
  const command = args[0];
940
- // Handle --help
941
512
  if (args.includes('--help') || args.includes('-h')) {
942
513
  await showHelp();
943
514
  return;
944
515
  }
945
- // Handle profile commands
946
516
  if (command === 'create') {
947
517
  await handleCreate(args.slice(1));
948
518
  return;
@@ -955,7 +525,6 @@ async function handleCliproxyCommand(args) {
955
525
  await handleRemove(args.slice(1));
956
526
  return;
957
527
  }
958
- // Handle proxy lifecycle commands
959
528
  if (command === 'stop') {
960
529
  await handleStop();
961
530
  return;
@@ -964,7 +533,6 @@ async function handleCliproxyCommand(args) {
964
533
  await handleProxyStatus();
965
534
  return;
966
535
  }
967
- // Handle --install <version>
968
536
  const installIdx = args.indexOf('--install');
969
537
  if (installIdx !== -1) {
970
538
  const version = args[installIdx + 1];
@@ -974,20 +542,13 @@ async function handleCliproxyCommand(args) {
974
542
  console.error(' Example: ccs cliproxy --install 6.5.53');
975
543
  process.exit(1);
976
544
  }
977
- await installVersion(version, verbose);
978
- return;
979
- }
980
- // Handle --latest
981
- if (args.includes('--latest')) {
982
- await installLatest(verbose);
545
+ await handleInstallVersion(version, verbose);
983
546
  return;
984
547
  }
985
- // Handle --update (unpin and update to latest)
986
- if (args.includes('--update')) {
987
- await installLatest(verbose);
548
+ if (args.includes('--latest') || args.includes('--update')) {
549
+ await handleInstallLatest(verbose);
988
550
  return;
989
551
  }
990
- // Default: show status
991
552
  await showStatus(verbose);
992
553
  }
993
554
  exports.handleCliproxyCommand = handleCliproxyCommand;