@kaitranntt/ccs 6.7.0-dev.5 → 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
@@ -11,756 +11,44 @@
11
11
  *
12
12
  * Token storage: ~/.ccs/cliproxy/auth/<provider>/
13
13
  * Each provider has its own directory to avoid conflicts.
14
+ *
15
+ * This file is a facade that re-exports from the auth/ submodule.
16
+ * The actual implementation is split across:
17
+ * - auth/auth-types.ts - Types and OAuth configurations
18
+ * - auth/token-manager.ts - Token storage/retrieval/validation
19
+ * - auth/oauth-handler.ts - OAuth flow handling
20
+ * - auth/environment-detector.ts - Headless detection and port management
14
21
  */
15
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- var desc = Object.getOwnPropertyDescriptor(m, k);
18
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
- desc = { enumerable: true, get: function() { return m[k]; } };
20
- }
21
- Object.defineProperty(o, k2, desc);
22
- }) : (function(o, m, k, k2) {
23
- if (k2 === undefined) k2 = k;
24
- o[k2] = m[k];
25
- }));
26
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
- Object.defineProperty(o, "default", { enumerable: true, value: v });
28
- }) : function(o, v) {
29
- o["default"] = v;
30
- });
31
- var __importStar = (this && this.__importStar) || function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
22
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.displayAuthStatus = exports.initializeAccounts = exports.ensureAuth = exports.triggerOAuth = exports.clearAuth = exports.getAllAuthStatus = exports.getAuthStatus = exports.isAuthenticated = exports.getProviderTokenDir = exports.getOAuthConfig = void 0;
40
- const child_process_1 = require("child_process");
41
- const fs = __importStar(require("fs"));
42
- const path = __importStar(require("path"));
43
- const ui_1 = require("../utils/ui");
44
- const binary_manager_1 = require("./binary-manager");
45
- const config_generator_1 = require("./config-generator");
23
+ exports.initializeAccounts = exports.ensureAuth = exports.triggerOAuth = exports.showStep = exports.getTimeoutTroubleshooting = exports.killProcessOnPort = exports.isHeadlessEnvironment = exports.displayAuthStatus = exports.clearAuth = exports.getAllAuthStatus = exports.getAuthStatus = exports.isAuthenticated = exports.isTokenFileForProvider = exports.getProviderTokenDir = exports.getOAuthConfig = exports.PROVIDER_TYPE_VALUES = exports.PROVIDER_AUTH_PREFIXES = exports.OAUTH_CONFIGS = exports.OAUTH_CALLBACK_PORTS = void 0;
24
+ // Re-export configurations
25
+ var auth_1 = require("./auth");
26
+ Object.defineProperty(exports, "OAUTH_CALLBACK_PORTS", { enumerable: true, get: function () { return auth_1.OAUTH_CALLBACK_PORTS; } });
27
+ Object.defineProperty(exports, "OAUTH_CONFIGS", { enumerable: true, get: function () { return auth_1.OAUTH_CONFIGS; } });
28
+ Object.defineProperty(exports, "PROVIDER_AUTH_PREFIXES", { enumerable: true, get: function () { return auth_1.PROVIDER_AUTH_PREFIXES; } });
29
+ Object.defineProperty(exports, "PROVIDER_TYPE_VALUES", { enumerable: true, get: function () { return auth_1.PROVIDER_TYPE_VALUES; } });
30
+ Object.defineProperty(exports, "getOAuthConfig", { enumerable: true, get: function () { return auth_1.getOAuthConfig; } });
31
+ // Re-export token management functions
32
+ var auth_2 = require("./auth");
33
+ Object.defineProperty(exports, "getProviderTokenDir", { enumerable: true, get: function () { return auth_2.getProviderTokenDir; } });
34
+ Object.defineProperty(exports, "isTokenFileForProvider", { enumerable: true, get: function () { return auth_2.isTokenFileForProvider; } });
35
+ Object.defineProperty(exports, "isAuthenticated", { enumerable: true, get: function () { return auth_2.isAuthenticated; } });
36
+ Object.defineProperty(exports, "getAuthStatus", { enumerable: true, get: function () { return auth_2.getAuthStatus; } });
37
+ Object.defineProperty(exports, "getAllAuthStatus", { enumerable: true, get: function () { return auth_2.getAllAuthStatus; } });
38
+ Object.defineProperty(exports, "clearAuth", { enumerable: true, get: function () { return auth_2.clearAuth; } });
39
+ Object.defineProperty(exports, "displayAuthStatus", { enumerable: true, get: function () { return auth_2.displayAuthStatus; } });
40
+ // Re-export environment detection functions
41
+ var auth_3 = require("./auth");
42
+ Object.defineProperty(exports, "isHeadlessEnvironment", { enumerable: true, get: function () { return auth_3.isHeadlessEnvironment; } });
43
+ Object.defineProperty(exports, "killProcessOnPort", { enumerable: true, get: function () { return auth_3.killProcessOnPort; } });
44
+ Object.defineProperty(exports, "getTimeoutTroubleshooting", { enumerable: true, get: function () { return auth_3.getTimeoutTroubleshooting; } });
45
+ Object.defineProperty(exports, "showStep", { enumerable: true, get: function () { return auth_3.showStep; } });
46
+ // Re-export OAuth handling functions
47
+ var auth_4 = require("./auth");
48
+ Object.defineProperty(exports, "triggerOAuth", { enumerable: true, get: function () { return auth_4.triggerOAuth; } });
49
+ Object.defineProperty(exports, "ensureAuth", { enumerable: true, get: function () { return auth_4.ensureAuth; } });
50
+ // Re-export account management initialization
46
51
  const account_manager_1 = require("./account-manager");
47
- const oauth_port_diagnostics_1 = require("../management/oauth-port-diagnostics");
48
- const project_selection_handler_1 = require("./project-selection-handler");
49
- /**
50
- * OAuth callback ports used by CLIProxyAPI (hardcoded in binary)
51
- * See: https://github.com/router-for-me/CLIProxyAPI/tree/main/internal/auth
52
- *
53
- * OAuth flow types per provider:
54
- * - Gemini: Authorization Code Flow with local callback server on port 8085
55
- * - Codex: Authorization Code Flow with local callback server on port 1455
56
- * - Agy: Authorization Code Flow with local callback server on port 51121
57
- * - Qwen: Device Code Flow (polling-based, NO callback port needed)
58
- *
59
- * We auto-kill processes on callback ports before OAuth to avoid conflicts.
60
- */
61
- const OAUTH_CALLBACK_PORTS = {
62
- gemini: 8085,
63
- // codex uses 1455
64
- // agy uses 51121
65
- // qwen uses Device Code Flow - no callback port needed
66
- };
67
- /**
68
- * Kill any process using a specific port
69
- * Used to free OAuth callback port before authentication
70
- */
71
- function killProcessOnPort(port, verbose) {
72
- try {
73
- if (process.platform === 'win32') {
74
- // Windows: use netstat + taskkill
75
- const result = (0, child_process_1.execSync)(`netstat -ano | findstr :${port}`, {
76
- encoding: 'utf-8',
77
- stdio: 'pipe',
78
- });
79
- const lines = result.trim().split('\n');
80
- for (const line of lines) {
81
- const parts = line.trim().split(/\s+/);
82
- const pid = parts[parts.length - 1];
83
- if (pid && /^\d+$/.test(pid)) {
84
- (0, child_process_1.execSync)(`taskkill /F /PID ${pid}`, { stdio: 'pipe' });
85
- if (verbose)
86
- console.error(`[auth] Killed process ${pid} on port ${port}`);
87
- }
88
- }
89
- return true;
90
- }
91
- else {
92
- // Unix: use lsof + kill
93
- const result = (0, child_process_1.execSync)(`lsof -ti:${port}`, { encoding: 'utf-8', stdio: 'pipe' });
94
- const pids = result
95
- .trim()
96
- .split('\n')
97
- .filter((p) => p);
98
- for (const pid of pids) {
99
- (0, child_process_1.execSync)(`kill -9 ${pid}`, { stdio: 'pipe' });
100
- if (verbose)
101
- console.error(`[auth] Killed process ${pid} on port ${port}`);
102
- }
103
- return pids.length > 0;
104
- }
105
- }
106
- catch {
107
- // No process on port or command failed - that's fine
108
- return false;
109
- }
110
- }
111
- /**
112
- * Detect if running in a headless environment (no browser available)
113
- *
114
- * IMPROVED: Avoids false positives on Windows desktop environments
115
- * where isTTY may be undefined due to terminal wrapper behavior.
116
- *
117
- * Case study: Vietnamese Windows users reported "command hangs" because
118
- * their terminal (PowerShell via npm) didn't set isTTY correctly.
119
- */
120
- function isHeadlessEnvironment() {
121
- // SSH session - always headless
122
- if (process.env.SSH_TTY || process.env.SSH_CLIENT || process.env.SSH_CONNECTION) {
123
- return true;
124
- }
125
- // No display on Linux (X11/Wayland) - headless
126
- if (process.platform === 'linux' && !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY) {
127
- return true;
128
- }
129
- // Windows desktop - NEVER headless unless SSH (already checked above)
130
- // This fixes false positive where Windows npm wrappers don't set isTTY correctly
131
- // Windows desktop environments always have browser capability
132
- if (process.platform === 'win32') {
133
- return false;
134
- }
135
- // macOS - check for proper terminal
136
- if (process.platform === 'darwin') {
137
- // Non-interactive stdin on macOS means likely piped/scripted
138
- if (!process.stdin.isTTY) {
139
- return true;
140
- }
141
- return false;
142
- }
143
- // Linux with display - check TTY
144
- if (process.platform === 'linux') {
145
- if (!process.stdin.isTTY) {
146
- return true;
147
- }
148
- return false;
149
- }
150
- // Default fallback for unknown platforms
151
- return !process.stdin.isTTY;
152
- }
153
- /**
154
- * OAuth configurations per provider
155
- * Note: CLIProxyAPI handles actual OAuth - these are for display/manual flow
156
- */
157
- const OAUTH_CONFIGS = {
158
- gemini: {
159
- provider: 'gemini',
160
- displayName: 'Google Gemini',
161
- authUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
162
- scopes: ['https://www.googleapis.com/auth/generative-language'],
163
- authFlag: '--login',
164
- },
165
- codex: {
166
- provider: 'codex',
167
- displayName: 'Codex',
168
- authUrl: 'https://auth.openai.com/authorize',
169
- scopes: ['openid', 'profile'],
170
- authFlag: '--codex-login',
171
- },
172
- agy: {
173
- provider: 'agy',
174
- displayName: 'Antigravity',
175
- authUrl: 'https://antigravity.ai/oauth/authorize',
176
- scopes: ['api'],
177
- authFlag: '--antigravity-login',
178
- },
179
- qwen: {
180
- provider: 'qwen',
181
- displayName: 'Qwen Code',
182
- authUrl: 'https://chat.qwen.ai/api/v1/oauth2/device/code',
183
- scopes: ['openid', 'profile', 'email', 'model.completion'],
184
- authFlag: '--qwen-login',
185
- },
186
- iflow: {
187
- provider: 'iflow',
188
- displayName: 'iFlow',
189
- authUrl: 'https://iflow.cn/oauth',
190
- scopes: ['phone', 'profile', 'email'],
191
- authFlag: '--iflow-login',
192
- },
193
- };
194
- /**
195
- * Get OAuth config for provider
196
- */
197
- function getOAuthConfig(provider) {
198
- const config = OAUTH_CONFIGS[provider];
199
- if (!config) {
200
- throw new Error(`Unknown provider: ${provider}`);
201
- }
202
- return config;
203
- }
204
- exports.getOAuthConfig = getOAuthConfig;
205
- /**
206
- * Get token directory for provider
207
- */
208
- function getProviderTokenDir(provider) {
209
- return (0, config_generator_1.getProviderAuthDir)(provider);
210
- }
211
- exports.getProviderTokenDir = getProviderTokenDir;
212
- /**
213
- * Provider-specific auth file prefixes (fallback detection)
214
- * CLIProxyAPI names auth files with provider prefix (e.g., "antigravity-user@email.json")
215
- * Note: Gemini tokens may NOT have prefix - CLIProxyAPI uses {email}-{projectID}.json format
216
- */
217
- const PROVIDER_AUTH_PREFIXES = {
218
- gemini: ['gemini-', 'google-'],
219
- codex: ['codex-', 'openai-'],
220
- agy: ['antigravity-', 'agy-'],
221
- qwen: ['qwen-'],
222
- iflow: ['iflow-'],
223
- };
224
- /**
225
- * Provider type values inside token JSON files
226
- * CLIProxyAPI sets "type" field in token JSON (e.g., {"type": "gemini"})
227
- */
228
- const PROVIDER_TYPE_VALUES = {
229
- gemini: ['gemini'],
230
- codex: ['codex'],
231
- agy: ['antigravity'],
232
- qwen: ['qwen'],
233
- iflow: ['iflow'],
234
- };
235
- /**
236
- * Check if a JSON file contains a token for the given provider
237
- * Reads the file and checks the "type" field
238
- */
239
- function isTokenFileForProvider(filePath, provider) {
240
- try {
241
- const content = fs.readFileSync(filePath, 'utf-8');
242
- const data = JSON.parse(content);
243
- const typeValue = (data.type || '').toLowerCase();
244
- const validTypes = PROVIDER_TYPE_VALUES[provider] || [];
245
- return validTypes.includes(typeValue);
246
- }
247
- catch {
248
- return false;
249
- }
250
- }
251
- /**
252
- * Check if provider has valid authentication
253
- * CLIProxyAPI stores OAuth tokens as JSON files in the auth directory.
254
- * Detection strategy:
255
- * 1. First check by filename prefix (fast path)
256
- * 2. If no match, check JSON content for "type" field (Gemini uses {email}-{projectID}.json without prefix)
257
- */
258
- function isAuthenticated(provider) {
259
- const tokenDir = getProviderTokenDir(provider);
260
- if (!fs.existsSync(tokenDir)) {
261
- return false;
262
- }
263
- const validPrefixes = PROVIDER_AUTH_PREFIXES[provider] || [];
264
- try {
265
- const files = fs.readdirSync(tokenDir);
266
- const jsonFiles = files.filter((f) => f.endsWith('.json') || f.endsWith('.token') || f === 'credentials');
267
- // Strategy 1: Check by filename prefix (fast path for antigravity, codex)
268
- const prefixMatch = jsonFiles.some((f) => {
269
- const lowerFile = f.toLowerCase();
270
- return validPrefixes.some((prefix) => lowerFile.startsWith(prefix));
271
- });
272
- if (prefixMatch)
273
- return true;
274
- // Strategy 2: Check JSON content for "type" field (needed for Gemini)
275
- for (const f of jsonFiles) {
276
- const filePath = path.join(tokenDir, f);
277
- if (isTokenFileForProvider(filePath, provider)) {
278
- return true;
279
- }
280
- }
281
- return false;
282
- }
283
- catch {
284
- return false;
285
- }
286
- }
287
- exports.isAuthenticated = isAuthenticated;
288
- /**
289
- * Get detailed auth status for provider
290
- * Uses same detection strategy as isAuthenticated: prefix first, then content
291
- */
292
- function getAuthStatus(provider) {
293
- const tokenDir = getProviderTokenDir(provider);
294
- let tokenFiles = [];
295
- let lastAuth;
296
- const validPrefixes = PROVIDER_AUTH_PREFIXES[provider] || [];
297
- if (fs.existsSync(tokenDir)) {
298
- const files = fs.readdirSync(tokenDir);
299
- const jsonFiles = files.filter((f) => f.endsWith('.json') || f.endsWith('.token') || f === 'credentials');
300
- // Check each file: by prefix OR by content
301
- tokenFiles = jsonFiles.filter((f) => {
302
- const lowerFile = f.toLowerCase();
303
- // Strategy 1: prefix match
304
- if (validPrefixes.some((prefix) => lowerFile.startsWith(prefix))) {
305
- return true;
306
- }
307
- // Strategy 2: content match (for Gemini tokens without prefix)
308
- const filePath = path.join(tokenDir, f);
309
- return isTokenFileForProvider(filePath, provider);
310
- });
311
- // Get most recent modification time
312
- for (const file of tokenFiles) {
313
- const filePath = path.join(tokenDir, file);
314
- try {
315
- const stats = fs.statSync(filePath);
316
- if (!lastAuth || stats.mtime > lastAuth) {
317
- lastAuth = stats.mtime;
318
- }
319
- }
320
- catch {
321
- // Skip if can't stat file
322
- }
323
- }
324
- }
325
- // Get registered accounts for multi-account support
326
- const accounts = (0, account_manager_1.getProviderAccounts)(provider);
327
- const defaultAccount = (0, account_manager_1.getDefaultAccount)(provider);
328
- return {
329
- provider,
330
- authenticated: tokenFiles.length > 0,
331
- tokenDir,
332
- tokenFiles,
333
- lastAuth,
334
- accounts,
335
- defaultAccount: defaultAccount?.id,
336
- };
337
- }
338
- exports.getAuthStatus = getAuthStatus;
339
- /**
340
- * Get auth status for all providers
341
- */
342
- function getAllAuthStatus() {
343
- const providers = ['gemini', 'codex', 'agy', 'qwen', 'iflow'];
344
- return providers.map(getAuthStatus);
345
- }
346
- exports.getAllAuthStatus = getAllAuthStatus;
347
- /**
348
- * Clear authentication for provider
349
- * Only removes files belonging to the specified provider (by prefix or content)
350
- * Does NOT remove the shared auth directory or other providers' files
351
- */
352
- function clearAuth(provider) {
353
- const tokenDir = getProviderTokenDir(provider);
354
- if (!fs.existsSync(tokenDir)) {
355
- return false;
356
- }
357
- const validPrefixes = PROVIDER_AUTH_PREFIXES[provider] || [];
358
- const files = fs.readdirSync(tokenDir);
359
- let removedCount = 0;
360
- // Only remove files that belong to this provider
361
- for (const file of files) {
362
- const filePath = path.join(tokenDir, file);
363
- const lowerFile = file.toLowerCase();
364
- // Check by prefix first (fast path)
365
- const matchesByPrefix = validPrefixes.some((prefix) => lowerFile.startsWith(prefix));
366
- // If no prefix match, check by content (for Gemini tokens without prefix)
367
- const matchesByContent = !matchesByPrefix && isTokenFileForProvider(filePath, provider);
368
- if (matchesByPrefix || matchesByContent) {
369
- try {
370
- fs.unlinkSync(filePath);
371
- removedCount++;
372
- }
373
- catch {
374
- // Failed to remove - skip
375
- }
376
- }
377
- }
378
- // DO NOT remove the shared auth directory - other providers may still have tokens
379
- return removedCount > 0;
380
- }
381
- exports.clearAuth = clearAuth;
382
- /**
383
- * Display a single step status line
384
- */
385
- function showStep(step, total, status, message) {
386
- const statusIcon = status === 'ok' ? '[OK]' : status === 'fail' ? '[X]' : '[..]';
387
- console.log(`${statusIcon} [${step}/${total}] ${message}`);
388
- }
389
- /**
390
- * Get platform-specific troubleshooting for OAuth timeout
391
- */
392
- function getTimeoutTroubleshooting(provider, port) {
393
- const lines = [];
394
- lines.push('');
395
- lines.push('TROUBLESHOOTING:');
396
- lines.push(' 1. Check browser completed auth (should show success page)');
397
- if (port) {
398
- lines.push(` 2. Check for port conflicts: lsof -ti:${port} or ss -tlnp | grep ${port}`);
399
- lines.push(` 3. Try: ccs ${provider} --auth --verbose`);
400
- }
401
- else {
402
- lines.push(` 2. Try: ccs ${provider} --auth --verbose`);
403
- }
404
- return lines;
405
- }
406
- /**
407
- * Trigger OAuth flow for provider
408
- * Auto-detects headless environment and uses --no-browser flag accordingly
409
- * Shows real-time step-by-step progress for better user feedback
410
- * @param provider - The CLIProxy provider to authenticate
411
- * @param options - OAuth options
412
- * @param options.add - If true, skip confirm prompt when adding another account
413
- * @returns Account info if successful, null otherwise
414
- */
415
- async function triggerOAuth(provider, options = {}) {
416
- const oauthConfig = getOAuthConfig(provider);
417
- const { verbose = false, add = false, nickname, fromUI = false } = options;
418
- const callbackPort = oauth_port_diagnostics_1.OAUTH_CALLBACK_PORTS[provider];
419
- const isCLI = !fromUI; // CLI mode = auto-select default project
420
- // Auto-detect headless if not explicitly set
421
- const headless = options.headless ?? isHeadlessEnvironment();
422
- const log = (msg) => {
423
- if (verbose) {
424
- console.error(`[auth] ${msg}`);
425
- }
426
- };
427
- // Check for existing accounts and prompt if --add not specified
428
- const existingAccounts = (0, account_manager_1.getProviderAccounts)(provider);
429
- if (existingAccounts.length > 0 && !add) {
430
- console.log('');
431
- console.log((0, ui_1.info)(`${existingAccounts.length} account(s) already authenticated for ${oauthConfig.displayName}`));
432
- // Import readline for confirm prompt
433
- const readline = await Promise.resolve().then(() => __importStar(require('readline')));
434
- const rl = readline.createInterface({
435
- input: process.stdin,
436
- output: process.stdout,
437
- });
438
- const confirmed = await new Promise((resolve) => {
439
- rl.question('[?] Add another account? (y/N): ', (answer) => {
440
- rl.close();
441
- resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
442
- });
443
- });
444
- if (!confirmed) {
445
- console.log((0, ui_1.info)('Cancelled'));
446
- return null;
447
- }
448
- }
449
- // Enhanced pre-flight check with real-time display
450
- console.log('');
451
- console.log((0, ui_1.info)(`Pre-flight OAuth check for ${oauthConfig.displayName}...`));
452
- const preflight = await (0, oauth_port_diagnostics_1.enhancedPreflightOAuthCheck)(provider);
453
- // Display each check result
454
- for (const check of preflight.checks) {
455
- const icon = check.status === 'ok' ? '[OK]' : check.status === 'warn' ? '[!]' : '[X]';
456
- console.log(` ${icon} ${check.name}: ${check.message}`);
457
- if (check.fixCommand && check.status !== 'ok') {
458
- console.log(` Fix: ${check.fixCommand}`);
459
- }
460
- }
461
- // Show firewall warning prominently on Windows
462
- if (preflight.firewallWarning) {
463
- console.log('');
464
- console.log((0, ui_1.warn)('Windows Firewall may block OAuth callback'));
465
- console.log(' If auth hangs, run as Administrator:');
466
- console.log(` ${(0, ui_1.color)(preflight.firewallFixCommand || '', 'command')}`);
467
- }
468
- if (!preflight.ready) {
469
- console.log('');
470
- console.log((0, ui_1.fail)('Pre-flight check failed. Resolve issues above and retry.'));
471
- return null;
472
- }
473
- console.log('');
474
- // Step 1: Ensure binary exists
475
- showStep(1, 4, 'progress', 'Preparing CLIProxy binary...');
476
- let binaryPath;
477
- try {
478
- binaryPath = await (0, binary_manager_1.ensureCLIProxyBinary)(verbose);
479
- // Clear and rewrite with OK
480
- process.stdout.write('\x1b[1A\x1b[2K'); // Move up and clear line
481
- showStep(1, 4, 'ok', 'CLIProxy binary ready');
482
- }
483
- catch (error) {
484
- process.stdout.write('\x1b[1A\x1b[2K');
485
- showStep(1, 4, 'fail', 'Failed to prepare CLIProxy binary');
486
- console.error((0, ui_1.fail)(error.message));
487
- throw error;
488
- }
489
- // Ensure auth directory exists
490
- const tokenDir = getProviderTokenDir(provider);
491
- fs.mkdirSync(tokenDir, { recursive: true, mode: 0o700 });
492
- // Generate config file (CLIProxyAPI requires it even for auth)
493
- const configPath = (0, config_generator_1.generateConfig)(provider);
494
- log(`Config generated: ${configPath}`);
495
- // Free OAuth callback port if needed
496
- const localCallbackPort = OAUTH_CALLBACK_PORTS[provider];
497
- if (localCallbackPort) {
498
- const killed = killProcessOnPort(localCallbackPort, verbose);
499
- if (killed) {
500
- log(`Freed port ${localCallbackPort} for OAuth callback`);
501
- }
502
- }
503
- // Build args: config + auth flag + optional --no-browser for headless
504
- const args = ['--config', configPath, oauthConfig.authFlag];
505
- if (headless) {
506
- args.push('--no-browser');
507
- }
508
- // Step 2: Starting callback server
509
- showStep(2, 4, 'progress', `Starting callback server on port ${callbackPort || 'N/A'}...`);
510
- // Show headless instructions if needed
511
- if (headless) {
512
- console.log('');
513
- console.log((0, ui_1.warn)('PORT FORWARDING REQUIRED'));
514
- console.log(` OAuth callback uses localhost:${callbackPort} which must be reachable.`);
515
- console.log(' Run this on your LOCAL machine:');
516
- console.log(` ${(0, ui_1.color)(`ssh -L ${callbackPort}:localhost:${callbackPort} <USER>@<HOST>`, 'command')}`);
517
- console.log('');
518
- }
519
- return new Promise((resolve) => {
520
- // Spawn CLIProxyAPI with auth flag
521
- // Use pipe for stdin to auto-respond to interactive prompts (e.g., project selection)
522
- const authProcess = (0, child_process_1.spawn)(binaryPath, args, {
523
- stdio: ['pipe', 'pipe', 'pipe'],
524
- env: {
525
- ...process.env,
526
- CLI_PROXY_AUTH_DIR: tokenDir,
527
- },
528
- });
529
- let stderrData = '';
530
- let urlDisplayed = false;
531
- let browserOpened = false;
532
- let projectPromptHandled = false;
533
- let accumulatedOutput = ''; // Accumulate output to parse project list
534
- let parsedProjects = [];
535
- const sessionId = (0, project_selection_handler_1.generateSessionId)(); // Unique session ID for this auth flow
536
- const startTime = Date.now();
537
- authProcess.stdout?.on('data', async (data) => {
538
- const output = data.toString();
539
- log(`stdout: ${output.trim()}`);
540
- // Accumulate output for project list parsing
541
- accumulatedOutput += output;
542
- // Parse project list when available
543
- if ((0, project_selection_handler_1.isProjectList)(accumulatedOutput) && parsedProjects.length === 0) {
544
- parsedProjects = (0, project_selection_handler_1.parseProjectList)(accumulatedOutput);
545
- log(`Parsed ${parsedProjects.length} projects`);
546
- }
547
- // Handle project selection prompt
548
- if (!projectPromptHandled && (0, project_selection_handler_1.isProjectSelectionPrompt)(output)) {
549
- projectPromptHandled = true;
550
- const defaultProjectId = (0, project_selection_handler_1.parseDefaultProject)(output) || '';
551
- // If we have projects and this is a UI-triggered flow, request selection
552
- if (parsedProjects.length > 0 && !isCLI) {
553
- log(`Requesting project selection from UI (session: ${sessionId})`);
554
- const prompt = {
555
- sessionId,
556
- provider,
557
- projects: parsedProjects,
558
- defaultProjectId,
559
- supportsAll: output.includes('ALL'),
560
- };
561
- try {
562
- // Request selection from UI (with timeout fallback to default)
563
- const selectedId = await (0, project_selection_handler_1.requestProjectSelection)(prompt);
564
- // Write selection to stdin (empty = default, else project ID or ALL)
565
- const response = selectedId || '';
566
- log(`User selected: ${response || '(default)'}`);
567
- authProcess.stdin?.write(response + '\n');
568
- }
569
- catch {
570
- // Fallback to default on error
571
- log('Project selection failed, using default');
572
- authProcess.stdin?.write('\n');
573
- }
574
- }
575
- else {
576
- // CLI mode or no projects: auto-select default
577
- log('CLI mode or no projects, auto-selecting default');
578
- authProcess.stdin?.write('\n');
579
- }
580
- }
581
- // Detect when callback server starts or browser opens
582
- if (!browserOpened && (output.includes('listening') || output.includes('http'))) {
583
- process.stdout.write('\x1b[1A\x1b[2K');
584
- showStep(2, 4, 'ok', `Callback server listening on port ${callbackPort}`);
585
- showStep(3, 4, 'progress', 'Opening browser...');
586
- browserOpened = true;
587
- }
588
- // In headless mode, display OAuth URLs prominently
589
- if (headless) {
590
- const urlMatch = output.match(/https?:\/\/[^\s]+/);
591
- if (urlMatch && !urlDisplayed) {
592
- console.log('');
593
- console.log((0, ui_1.info)(`${oauthConfig.displayName} OAuth URL:`));
594
- console.log(` ${urlMatch[0]}`);
595
- console.log('');
596
- urlDisplayed = true;
597
- }
598
- }
599
- });
600
- authProcess.stderr?.on('data', (data) => {
601
- const output = data.toString();
602
- stderrData += output;
603
- log(`stderr: ${output.trim()}`);
604
- // Also check stderr for URLs
605
- if (headless && !urlDisplayed) {
606
- const urlMatch = output.match(/https?:\/\/[^\s]+/);
607
- if (urlMatch) {
608
- console.log('');
609
- console.log((0, ui_1.info)(`${oauthConfig.displayName} OAuth URL:`));
610
- console.log(` ${urlMatch[0]}`);
611
- console.log('');
612
- urlDisplayed = true;
613
- }
614
- }
615
- });
616
- // After a short delay, assume browser opened and show waiting
617
- setTimeout(() => {
618
- if (!browserOpened) {
619
- process.stdout.write('\x1b[1A\x1b[2K');
620
- showStep(2, 4, 'ok', `Callback server ready (port ${callbackPort})`);
621
- showStep(3, 4, 'ok', 'Browser opened');
622
- browserOpened = true;
623
- }
624
- showStep(4, 4, 'progress', 'Waiting for OAuth callback...');
625
- console.log('');
626
- console.log((0, ui_1.info)('Complete the login in your browser. This page will update automatically.'));
627
- if (!verbose) {
628
- console.log((0, ui_1.info)('If stuck, try: ccs ' + provider + ' --auth --verbose'));
629
- }
630
- }, 2000);
631
- // Timeout after 5 minutes for headless, 2 minutes for normal
632
- const timeoutMs = headless ? 300000 : 120000;
633
- const timeout = setTimeout(() => {
634
- authProcess.kill();
635
- console.log('');
636
- console.log((0, ui_1.fail)(`OAuth timed out after ${headless ? 5 : 2} minutes`));
637
- // Show platform-specific troubleshooting
638
- const troubleshooting = getTimeoutTroubleshooting(provider, callbackPort);
639
- for (const line of troubleshooting) {
640
- console.log(line);
641
- }
642
- resolve(null);
643
- }, timeoutMs);
644
- authProcess.on('exit', (code) => {
645
- clearTimeout(timeout);
646
- const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
647
- if (code === 0) {
648
- // Verify token was created BEFORE showing success
649
- if (isAuthenticated(provider)) {
650
- console.log('');
651
- console.log((0, ui_1.ok)(`Authentication successful (${elapsed}s)`));
652
- // Register the account in accounts registry
653
- const account = registerAccountFromToken(provider, tokenDir, nickname);
654
- resolve(account);
655
- }
656
- else {
657
- console.log('');
658
- console.log((0, ui_1.fail)('Token not found after authentication'));
659
- console.log('');
660
- console.log('The browser showed success but callback was not received.');
661
- // Show platform-specific guidance
662
- if (process.platform === 'win32') {
663
- console.log('');
664
- console.log('On Windows, this usually means:');
665
- console.log(' 1. Windows Firewall blocked the callback');
666
- console.log(' 2. Antivirus software blocked the connection');
667
- console.log('');
668
- console.log('Try running as Administrator:');
669
- console.log(` netsh advfirewall firewall add rule name="CCS OAuth" dir=in action=allow protocol=TCP localport=${callbackPort}`);
670
- }
671
- console.log('');
672
- console.log(`Try: ccs ${provider} --auth --verbose`);
673
- resolve(null);
674
- }
675
- }
676
- else {
677
- console.log('');
678
- console.log((0, ui_1.fail)(`CLIProxyAPI auth exited with code ${code}`));
679
- if (stderrData && !urlDisplayed) {
680
- console.log(` ${stderrData.trim().split('\n')[0]}`);
681
- }
682
- if (headless && !urlDisplayed) {
683
- console.log('');
684
- console.log((0, ui_1.info)('No OAuth URL was displayed. Try with --verbose for details.'));
685
- }
686
- resolve(null);
687
- }
688
- });
689
- authProcess.on('error', (error) => {
690
- clearTimeout(timeout);
691
- console.log('');
692
- console.log((0, ui_1.fail)(`Failed to start auth process: ${error.message}`));
693
- resolve(null);
694
- });
695
- });
696
- }
697
- exports.triggerOAuth = triggerOAuth;
698
- /**
699
- * Register account from newly created token file
700
- * Scans auth directory for new token and extracts email
701
- * @param provider - The CLIProxy provider
702
- * @param tokenDir - Directory containing token files
703
- * @param nickname - Optional nickname (uses auto-generated from email if not provided)
704
- */
705
- function registerAccountFromToken(provider, tokenDir, nickname) {
706
- try {
707
- const files = fs.readdirSync(tokenDir);
708
- const jsonFiles = files.filter((f) => f.endsWith('.json'));
709
- // Find newest token file for this provider
710
- let newestFile = null;
711
- let newestMtime = 0;
712
- for (const file of jsonFiles) {
713
- const filePath = path.join(tokenDir, file);
714
- if (!isTokenFileForProvider(filePath, provider))
715
- continue;
716
- const stats = fs.statSync(filePath);
717
- if (stats.mtimeMs > newestMtime) {
718
- newestMtime = stats.mtimeMs;
719
- newestFile = file;
720
- }
721
- }
722
- if (!newestFile) {
723
- return null;
724
- }
725
- // Read token to extract email
726
- const tokenPath = path.join(tokenDir, newestFile);
727
- const content = fs.readFileSync(tokenPath, 'utf-8');
728
- const data = JSON.parse(content);
729
- const email = data.email || undefined;
730
- // Register the account (use provided nickname or auto-generate from email)
731
- return (0, account_manager_1.registerAccount)(provider, newestFile, email, nickname || (0, account_manager_1.generateNickname)(email));
732
- }
733
- catch {
734
- return null;
735
- }
736
- }
737
- /**
738
- * Ensure provider is authenticated
739
- * Triggers OAuth flow if not authenticated
740
- * @param provider - The CLIProxy provider
741
- * @param options - Auth options including optional account
742
- * @returns true if authenticated, false otherwise
743
- */
744
- async function ensureAuth(provider, options = {}) {
745
- // Check if already authenticated
746
- if (isAuthenticated(provider)) {
747
- if (options.verbose) {
748
- console.error(`[auth] ${provider} already authenticated`);
749
- }
750
- // Touch the account to update last used time
751
- const defaultAccount = (0, account_manager_1.getDefaultAccount)(provider);
752
- if (defaultAccount) {
753
- (0, account_manager_1.touchAccount)(provider, options.account || defaultAccount.id);
754
- }
755
- return true;
756
- }
757
- // Not authenticated - trigger OAuth
758
- const oauthConfig = getOAuthConfig(provider);
759
- console.log((0, ui_1.info)(`${oauthConfig.displayName} authentication required`));
760
- const account = await triggerOAuth(provider, options);
761
- return account !== null;
762
- }
763
- exports.ensureAuth = ensureAuth;
764
52
  /**
765
53
  * Initialize accounts registry from existing tokens
766
54
  * Should be called on startup to populate accounts from existing token files
@@ -769,23 +57,4 @@ function initializeAccounts() {
769
57
  (0, account_manager_1.discoverExistingAccounts)();
770
58
  }
771
59
  exports.initializeAccounts = initializeAccounts;
772
- /**
773
- * Display auth status for all providers
774
- */
775
- function displayAuthStatus() {
776
- console.log('CLIProxy Authentication Status:');
777
- console.log('');
778
- const statuses = getAllAuthStatus();
779
- for (const status of statuses) {
780
- const oauthConfig = getOAuthConfig(status.provider);
781
- const icon = status.authenticated ? '[OK]' : '[!]';
782
- const authStatus = status.authenticated ? 'Authenticated' : 'Not authenticated';
783
- const lastAuthStr = status.lastAuth ? ` (last: ${status.lastAuth.toLocaleDateString()})` : '';
784
- console.log(`${icon} ${oauthConfig.displayName}: ${authStatus}${lastAuthStr}`);
785
- }
786
- console.log('');
787
- console.log('To authenticate: ccs <provider> --auth');
788
- console.log('To logout: ccs <provider> --logout');
789
- }
790
- exports.displayAuthStatus = displayAuthStatus;
791
60
  //# sourceMappingURL=auth-handler.js.map