@kaitranntt/ccs 7.76.0-dev.1 → 7.76.0-dev.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/dist/api/services/cliproxy-profile-bridge.d.ts.map +1 -1
  2. package/dist/api/services/cliproxy-profile-bridge.js +5 -6
  3. package/dist/api/services/cliproxy-profile-bridge.js.map +1 -1
  4. package/dist/api/services/openrouter-catalog.js +2 -2
  5. package/dist/api/services/openrouter-catalog.js.map +1 -1
  6. package/dist/api/services/profile-lifecycle-service.d.ts.map +1 -1
  7. package/dist/api/services/profile-lifecycle-service.js +6 -6
  8. package/dist/api/services/profile-lifecycle-service.js.map +1 -1
  9. package/dist/api/services/profile-reader.d.ts.map +1 -1
  10. package/dist/api/services/profile-reader.js +14 -15
  11. package/dist/api/services/profile-reader.js.map +1 -1
  12. package/dist/api/services/profile-writer.d.ts.map +1 -1
  13. package/dist/api/services/profile-writer.js +13 -13
  14. package/dist/api/services/profile-writer.js.map +1 -1
  15. package/dist/auth/commands/create-command.d.ts.map +1 -1
  16. package/dist/auth/commands/create-command.js +2 -2
  17. package/dist/auth/commands/create-command.js.map +1 -1
  18. package/dist/auth/commands/default-command.d.ts.map +1 -1
  19. package/dist/auth/commands/default-command.js +3 -3
  20. package/dist/auth/commands/default-command.js.map +1 -1
  21. package/dist/auth/commands/remove-command.d.ts.map +1 -1
  22. package/dist/auth/commands/remove-command.js +2 -2
  23. package/dist/auth/commands/remove-command.js.map +1 -1
  24. package/dist/auth/profile-continuity-inheritance.d.ts.map +1 -1
  25. package/dist/auth/profile-continuity-inheritance.js +4 -4
  26. package/dist/auth/profile-continuity-inheritance.js.map +1 -1
  27. package/dist/auth/profile-detector.d.ts.map +1 -1
  28. package/dist/auth/profile-detector.js +5 -6
  29. package/dist/auth/profile-detector.js.map +1 -1
  30. package/dist/auth/profile-registry.d.ts.map +1 -1
  31. package/dist/auth/profile-registry.js +14 -15
  32. package/dist/auth/profile-registry.js.map +1 -1
  33. package/dist/auth/resume-lane-diagnostics.d.ts.map +1 -1
  34. package/dist/auth/resume-lane-diagnostics.js +2 -2
  35. package/dist/auth/resume-lane-diagnostics.js.map +1 -1
  36. package/dist/ccs.js +30 -1257
  37. package/dist/ccs.js.map +1 -1
  38. package/dist/channels/official-channels-ids.d.ts +21 -0
  39. package/dist/channels/official-channels-ids.d.ts.map +1 -0
  40. package/dist/channels/official-channels-ids.js +46 -0
  41. package/dist/channels/official-channels-ids.js.map +1 -0
  42. package/dist/channels/official-channels-runtime.d.ts +2 -5
  43. package/dist/channels/official-channels-runtime.d.ts.map +1 -1
  44. package/dist/channels/official-channels-runtime.js +14 -29
  45. package/dist/channels/official-channels-runtime.js.map +1 -1
  46. package/dist/channels/official-channels-store.d.ts.map +1 -1
  47. package/dist/channels/official-channels-store.js +2 -2
  48. package/dist/channels/official-channels-store.js.map +1 -1
  49. package/dist/cliproxy/accounts/account-safety.js +4 -4
  50. package/dist/cliproxy/accounts/account-safety.js.map +1 -1
  51. package/dist/cliproxy/auth/antigravity-responsibility.js +2 -2
  52. package/dist/cliproxy/auth/antigravity-responsibility.js.map +1 -1
  53. package/dist/cliproxy/auth/auth-token-manager.d.ts.map +1 -1
  54. package/dist/cliproxy/auth/auth-token-manager.js +8 -8
  55. package/dist/cliproxy/auth/auth-token-manager.js.map +1 -1
  56. package/dist/cliproxy/auth/token-refresh-config.d.ts.map +1 -1
  57. package/dist/cliproxy/auth/token-refresh-config.js +2 -2
  58. package/dist/cliproxy/auth/token-refresh-config.js.map +1 -1
  59. package/dist/cliproxy/binary-manager.d.ts.map +1 -1
  60. package/dist/cliproxy/binary-manager.js +2 -2
  61. package/dist/cliproxy/binary-manager.js.map +1 -1
  62. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  63. package/dist/cliproxy/config/env-builder.js +2 -2
  64. package/dist/cliproxy/config/env-builder.js.map +1 -1
  65. package/dist/cliproxy/config/generator.d.ts.map +1 -1
  66. package/dist/cliproxy/config/generator.js +5 -5
  67. package/dist/cliproxy/config/generator.js.map +1 -1
  68. package/dist/cliproxy/config/model-config.d.ts.map +1 -1
  69. package/dist/cliproxy/config/model-config.js +2 -2
  70. package/dist/cliproxy/config/model-config.js.map +1 -1
  71. package/dist/cliproxy/config/path-resolver.d.ts.map +1 -1
  72. package/dist/cliproxy/config/path-resolver.js +4 -4
  73. package/dist/cliproxy/config/path-resolver.js.map +1 -1
  74. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  75. package/dist/cliproxy/config/thinking-config.js +2 -2
  76. package/dist/cliproxy/config/thinking-config.js.map +1 -1
  77. package/dist/cliproxy/executor/account-resolution.d.ts +52 -0
  78. package/dist/cliproxy/executor/account-resolution.d.ts.map +1 -0
  79. package/dist/cliproxy/executor/account-resolution.js +154 -0
  80. package/dist/cliproxy/executor/account-resolution.js.map +1 -0
  81. package/dist/cliproxy/executor/arg-parser.d.ts +96 -0
  82. package/dist/cliproxy/executor/arg-parser.d.ts.map +1 -0
  83. package/dist/cliproxy/executor/arg-parser.js +529 -0
  84. package/dist/cliproxy/executor/arg-parser.js.map +1 -0
  85. package/dist/cliproxy/executor/auth-coordinator.d.ts +96 -0
  86. package/dist/cliproxy/executor/auth-coordinator.d.ts.map +1 -0
  87. package/dist/cliproxy/executor/auth-coordinator.js +342 -0
  88. package/dist/cliproxy/executor/auth-coordinator.js.map +1 -0
  89. package/dist/cliproxy/executor/browser-launch-setup.d.ts +36 -0
  90. package/dist/cliproxy/executor/browser-launch-setup.d.ts.map +1 -0
  91. package/dist/cliproxy/executor/browser-launch-setup.js +80 -0
  92. package/dist/cliproxy/executor/browser-launch-setup.js.map +1 -0
  93. package/dist/cliproxy/executor/claude-launcher.d.ts +55 -0
  94. package/dist/cliproxy/executor/claude-launcher.d.ts.map +1 -0
  95. package/dist/cliproxy/executor/claude-launcher.js +112 -0
  96. package/dist/cliproxy/executor/claude-launcher.js.map +1 -0
  97. package/dist/cliproxy/executor/index.d.ts +4 -9
  98. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  99. package/dist/cliproxy/executor/index.js +110 -866
  100. package/dist/cliproxy/executor/index.js.map +1 -1
  101. package/dist/cliproxy/executor/model-warnings.d.ts +22 -0
  102. package/dist/cliproxy/executor/model-warnings.d.ts.map +1 -0
  103. package/dist/cliproxy/executor/model-warnings.js +67 -0
  104. package/dist/cliproxy/executor/model-warnings.js.map +1 -0
  105. package/dist/cliproxy/executor/proxy-chain-builder.d.ts +71 -0
  106. package/dist/cliproxy/executor/proxy-chain-builder.d.ts.map +1 -0
  107. package/dist/cliproxy/executor/proxy-chain-builder.js +143 -0
  108. package/dist/cliproxy/executor/proxy-chain-builder.js.map +1 -0
  109. package/dist/cliproxy/executor/proxy-resolver.d.ts +44 -0
  110. package/dist/cliproxy/executor/proxy-resolver.d.ts.map +1 -0
  111. package/dist/cliproxy/executor/proxy-resolver.js +173 -0
  112. package/dist/cliproxy/executor/proxy-resolver.js.map +1 -0
  113. package/dist/cliproxy/proxy/proxy-target-resolver.js +2 -2
  114. package/dist/cliproxy/proxy/proxy-target-resolver.js.map +1 -1
  115. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
  116. package/dist/cliproxy/proxy/tool-sanitization-proxy.js +2 -2
  117. package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
  118. package/dist/cliproxy/quota/quota-manager.d.ts.map +1 -1
  119. package/dist/cliproxy/quota/quota-manager.js +4 -4
  120. package/dist/cliproxy/quota/quota-manager.js.map +1 -1
  121. package/dist/cliproxy/routing/routing-strategy.d.ts.map +1 -1
  122. package/dist/cliproxy/routing/routing-strategy.js +5 -5
  123. package/dist/cliproxy/routing/routing-strategy.js.map +1 -1
  124. package/dist/cliproxy/services/binary-service.js +8 -8
  125. package/dist/cliproxy/services/binary-service.js.map +1 -1
  126. package/dist/cliproxy/services/catalog-cache.d.ts.map +1 -1
  127. package/dist/cliproxy/services/catalog-cache.js +2 -2
  128. package/dist/cliproxy/services/catalog-cache.js.map +1 -1
  129. package/dist/cliproxy/services/variant-config-adapter.d.ts.map +1 -1
  130. package/dist/cliproxy/services/variant-config-adapter.js +10 -10
  131. package/dist/cliproxy/services/variant-config-adapter.js.map +1 -1
  132. package/dist/cliproxy/services/variant-service.d.ts.map +1 -1
  133. package/dist/cliproxy/services/variant-service.js +7 -8
  134. package/dist/cliproxy/services/variant-service.js.map +1 -1
  135. package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
  136. package/dist/cliproxy/services/variant-settings.js +5 -5
  137. package/dist/cliproxy/services/variant-settings.js.map +1 -1
  138. package/dist/cliproxy/sync/auto-sync-watcher.js +3 -4
  139. package/dist/cliproxy/sync/auto-sync-watcher.js.map +1 -1
  140. package/dist/cliproxy/sync/profile-mapper.d.ts.map +1 -1
  141. package/dist/cliproxy/sync/profile-mapper.js +2 -2
  142. package/dist/cliproxy/sync/profile-mapper.js.map +1 -1
  143. package/dist/commands/browser-command.d.ts.map +1 -1
  144. package/dist/commands/browser-command.js +7 -7
  145. package/dist/commands/browser-command.js.map +1 -1
  146. package/dist/commands/cliproxy/resolve-lifecycle-port.d.ts.map +1 -1
  147. package/dist/commands/cliproxy/resolve-lifecycle-port.js +2 -2
  148. package/dist/commands/cliproxy/resolve-lifecycle-port.js.map +1 -1
  149. package/dist/commands/cliproxy/variant-subcommand.d.ts.map +1 -1
  150. package/dist/commands/cliproxy/variant-subcommand.js +4 -4
  151. package/dist/commands/cliproxy/variant-subcommand.js.map +1 -1
  152. package/dist/commands/config-auth/disable-command.d.ts.map +1 -1
  153. package/dist/commands/config-auth/disable-command.js +3 -3
  154. package/dist/commands/config-auth/disable-command.js.map +1 -1
  155. package/dist/commands/config-auth/setup-command.d.ts.map +1 -1
  156. package/dist/commands/config-auth/setup-command.js +2 -2
  157. package/dist/commands/config-auth/setup-command.js.map +1 -1
  158. package/dist/commands/config-auth/show-command.js +2 -2
  159. package/dist/commands/config-auth/show-command.js.map +1 -1
  160. package/dist/commands/config-channels-command.d.ts.map +1 -1
  161. package/dist/commands/config-channels-command.js +4 -4
  162. package/dist/commands/config-channels-command.js.map +1 -1
  163. package/dist/commands/config-command.d.ts +1 -1
  164. package/dist/commands/config-command.d.ts.map +1 -1
  165. package/dist/commands/config-command.js +2 -2
  166. package/dist/commands/config-command.js.map +1 -1
  167. package/dist/commands/config-image-analysis-command.d.ts.map +1 -1
  168. package/dist/commands/config-image-analysis-command.js +4 -4
  169. package/dist/commands/config-image-analysis-command.js.map +1 -1
  170. package/dist/commands/config-thinking-command.d.ts.map +1 -1
  171. package/dist/commands/config-thinking-command.js +4 -4
  172. package/dist/commands/config-thinking-command.js.map +1 -1
  173. package/dist/commands/copilot-command.d.ts.map +1 -1
  174. package/dist/commands/copilot-command.js +4 -4
  175. package/dist/commands/copilot-command.js.map +1 -1
  176. package/dist/commands/cursor-command.d.ts.map +1 -1
  177. package/dist/commands/cursor-command.js +7 -7
  178. package/dist/commands/cursor-command.js.map +1 -1
  179. package/dist/commands/env-command.d.ts.map +1 -1
  180. package/dist/commands/env-command.js +2 -2
  181. package/dist/commands/env-command.js.map +1 -1
  182. package/dist/commands/migrate-command.d.ts.map +1 -1
  183. package/dist/commands/migrate-command.js +2 -2
  184. package/dist/commands/migrate-command.js.map +1 -1
  185. package/dist/commands/proxy-command.d.ts.map +1 -1
  186. package/dist/commands/proxy-command.js +2 -1
  187. package/dist/commands/proxy-command.js.map +1 -1
  188. package/dist/commands/setup-command.d.ts.map +1 -1
  189. package/dist/commands/setup-command.js +6 -7
  190. package/dist/commands/setup-command.js.map +1 -1
  191. package/dist/commands/version-command.d.ts.map +1 -1
  192. package/dist/commands/version-command.js +2 -1
  193. package/dist/commands/version-command.js.map +1 -1
  194. package/dist/config/loader/config-getters.d.ts +121 -0
  195. package/dist/config/loader/config-getters.d.ts.map +1 -0
  196. package/dist/config/loader/config-getters.js +260 -0
  197. package/dist/config/loader/config-getters.js.map +1 -0
  198. package/dist/config/loader/defaults-merger.d.ts +21 -0
  199. package/dist/config/loader/defaults-merger.d.ts.map +1 -0
  200. package/dist/config/loader/defaults-merger.js +270 -0
  201. package/dist/config/loader/defaults-merger.js.map +1 -0
  202. package/dist/config/loader/io-locks.d.ts +76 -0
  203. package/dist/config/loader/io-locks.d.ts.map +1 -0
  204. package/dist/config/loader/io-locks.js +297 -0
  205. package/dist/config/loader/io-locks.js.map +1 -0
  206. package/dist/config/loader/normalizers.d.ts +40 -0
  207. package/dist/config/loader/normalizers.d.ts.map +1 -0
  208. package/dist/config/loader/normalizers.js +172 -0
  209. package/dist/config/loader/normalizers.js.map +1 -0
  210. package/dist/config/loader/yaml-serializer.d.ts +19 -0
  211. package/dist/config/loader/yaml-serializer.d.ts.map +1 -0
  212. package/dist/config/loader/yaml-serializer.js +299 -0
  213. package/dist/config/loader/yaml-serializer.js.map +1 -0
  214. package/dist/config/unified-config-loader.d.ts +21 -124
  215. package/dist/config/unified-config-loader.d.ts.map +1 -1
  216. package/dist/config/unified-config-loader.js +100 -1098
  217. package/dist/config/unified-config-loader.js.map +1 -1
  218. package/dist/copilot/copilot-daemon.d.ts.map +1 -1
  219. package/dist/copilot/copilot-daemon.js +2 -2
  220. package/dist/copilot/copilot-daemon.js.map +1 -1
  221. package/dist/copilot/copilot-executor.d.ts.map +1 -1
  222. package/dist/copilot/copilot-executor.js +2 -2
  223. package/dist/copilot/copilot-executor.js.map +1 -1
  224. package/dist/copilot/copilot-package-manager.js +2 -2
  225. package/dist/copilot/copilot-package-manager.js.map +1 -1
  226. package/dist/cursor/cursor-auth.js +2 -2
  227. package/dist/cursor/cursor-auth.js.map +1 -1
  228. package/dist/cursor/cursor-daemon-pid.js +2 -2
  229. package/dist/cursor/cursor-daemon-pid.js.map +1 -1
  230. package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
  231. package/dist/cursor/cursor-profile-executor.js +2 -2
  232. package/dist/cursor/cursor-profile-executor.js.map +1 -1
  233. package/dist/delegation/delegation-handler.js +2 -2
  234. package/dist/delegation/delegation-handler.js.map +1 -1
  235. package/dist/delegation/headless-executor.d.ts.map +1 -1
  236. package/dist/delegation/headless-executor.js +4 -4
  237. package/dist/delegation/headless-executor.js.map +1 -1
  238. package/dist/delegation/session-manager.js +2 -2
  239. package/dist/delegation/session-manager.js.map +1 -1
  240. package/dist/dispatcher/cli-argument-parser.d.ts +70 -0
  241. package/dist/dispatcher/cli-argument-parser.d.ts.map +1 -0
  242. package/dist/dispatcher/cli-argument-parser.js +285 -0
  243. package/dist/dispatcher/cli-argument-parser.js.map +1 -0
  244. package/dist/dispatcher/dispatcher-context.d.ts +24 -0
  245. package/dist/dispatcher/dispatcher-context.d.ts.map +1 -0
  246. package/dist/dispatcher/dispatcher-context.js +11 -0
  247. package/dist/dispatcher/dispatcher-context.js.map +1 -0
  248. package/dist/dispatcher/environment-builder.d.ts +20 -0
  249. package/dist/dispatcher/environment-builder.d.ts.map +1 -0
  250. package/dist/dispatcher/environment-builder.js +95 -0
  251. package/dist/dispatcher/environment-builder.js.map +1 -0
  252. package/dist/dispatcher/flows/account-flow.d.ts +9 -0
  253. package/dist/dispatcher/flows/account-flow.d.ts.map +1 -0
  254. package/dist/dispatcher/flows/account-flow.js +49 -0
  255. package/dist/dispatcher/flows/account-flow.js.map +1 -0
  256. package/dist/dispatcher/flows/cliproxy-flow.d.ts +8 -0
  257. package/dist/dispatcher/flows/cliproxy-flow.d.ts.map +1 -0
  258. package/dist/dispatcher/flows/cliproxy-flow.js +165 -0
  259. package/dist/dispatcher/flows/cliproxy-flow.js.map +1 -0
  260. package/dist/dispatcher/flows/copilot-flow.d.ts +8 -0
  261. package/dist/dispatcher/flows/copilot-flow.d.ts.map +1 -0
  262. package/dist/dispatcher/flows/copilot-flow.js +72 -0
  263. package/dist/dispatcher/flows/copilot-flow.js.map +1 -0
  264. package/dist/dispatcher/flows/cursor-flow.d.ts +8 -0
  265. package/dist/dispatcher/flows/cursor-flow.d.ts.map +1 -0
  266. package/dist/dispatcher/flows/cursor-flow.js +62 -0
  267. package/dist/dispatcher/flows/cursor-flow.js.map +1 -0
  268. package/dist/dispatcher/flows/default-flow.d.ts +10 -0
  269. package/dist/dispatcher/flows/default-flow.d.ts.map +1 -0
  270. package/dist/dispatcher/flows/default-flow.js +99 -0
  271. package/dist/dispatcher/flows/default-flow.js.map +1 -0
  272. package/dist/dispatcher/flows/settings-flow.d.ts +9 -0
  273. package/dist/dispatcher/flows/settings-flow.d.ts.map +1 -0
  274. package/dist/dispatcher/flows/settings-flow.js +318 -0
  275. package/dist/dispatcher/flows/settings-flow.js.map +1 -0
  276. package/dist/dispatcher/flows/settings-image-analysis-prep.d.ts +28 -0
  277. package/dist/dispatcher/flows/settings-image-analysis-prep.d.ts.map +1 -0
  278. package/dist/dispatcher/flows/settings-image-analysis-prep.js +81 -0
  279. package/dist/dispatcher/flows/settings-image-analysis-prep.js.map +1 -0
  280. package/dist/dispatcher/pre-dispatch.d.ts +23 -0
  281. package/dist/dispatcher/pre-dispatch.d.ts.map +1 -0
  282. package/dist/dispatcher/pre-dispatch.js +156 -0
  283. package/dist/dispatcher/pre-dispatch.js.map +1 -0
  284. package/dist/dispatcher/profile-resolver.d.ts +65 -0
  285. package/dist/dispatcher/profile-resolver.d.ts.map +1 -0
  286. package/dist/dispatcher/profile-resolver.js +290 -0
  287. package/dist/dispatcher/profile-resolver.js.map +1 -0
  288. package/dist/dispatcher/target-executor.d.ts +26 -0
  289. package/dist/dispatcher/target-executor.d.ts.map +1 -0
  290. package/dist/dispatcher/target-executor.js +81 -0
  291. package/dist/dispatcher/target-executor.js.map +1 -0
  292. package/dist/docker/docker-assets.d.ts.map +1 -1
  293. package/dist/docker/docker-assets.js +2 -2
  294. package/dist/docker/docker-assets.js.map +1 -1
  295. package/dist/glmt/glmt-transformer.d.ts.map +1 -1
  296. package/dist/glmt/glmt-transformer.js +2 -2
  297. package/dist/glmt/glmt-transformer.js.map +1 -1
  298. package/dist/management/checks/config-check.d.ts.map +1 -1
  299. package/dist/management/checks/config-check.js +2 -2
  300. package/dist/management/checks/config-check.js.map +1 -1
  301. package/dist/management/checks/env-check.d.ts.map +1 -1
  302. package/dist/management/checks/env-check.js +2 -1
  303. package/dist/management/checks/env-check.js.map +1 -1
  304. package/dist/management/checks/image-analysis-check.d.ts.map +1 -1
  305. package/dist/management/checks/image-analysis-check.js +4 -4
  306. package/dist/management/checks/image-analysis-check.js.map +1 -1
  307. package/dist/management/checks/profile-check.js +4 -4
  308. package/dist/management/checks/profile-check.js.map +1 -1
  309. package/dist/management/checks/symlink-check.js +2 -2
  310. package/dist/management/checks/symlink-check.js.map +1 -1
  311. package/dist/management/checks/system-check.js +2 -2
  312. package/dist/management/checks/system-check.js.map +1 -1
  313. package/dist/management/instance-manager.d.ts.map +1 -1
  314. package/dist/management/instance-manager.js +2 -1
  315. package/dist/management/instance-manager.js.map +1 -1
  316. package/dist/management/recovery-manager.d.ts.map +1 -1
  317. package/dist/management/recovery-manager.js +5 -5
  318. package/dist/management/recovery-manager.js.map +1 -1
  319. package/dist/management/repair/auto-repair.d.ts.map +1 -1
  320. package/dist/management/repair/auto-repair.js +2 -2
  321. package/dist/management/repair/auto-repair.js.map +1 -1
  322. package/dist/management/shared-manager.d.ts.map +1 -1
  323. package/dist/management/shared-manager.js +2 -2
  324. package/dist/management/shared-manager.js.map +1 -1
  325. package/dist/proxy/proxy-daemon-entry.js +2 -2
  326. package/dist/proxy/proxy-daemon-entry.js.map +1 -1
  327. package/dist/proxy/proxy-daemon-paths.js +2 -2
  328. package/dist/proxy/proxy-daemon-paths.js.map +1 -1
  329. package/dist/proxy/proxy-port-resolver.js +2 -2
  330. package/dist/proxy/proxy-port-resolver.js.map +1 -1
  331. package/dist/proxy/request-router.d.ts.map +1 -1
  332. package/dist/proxy/request-router.js +3 -3
  333. package/dist/proxy/request-router.js.map +1 -1
  334. package/dist/services/logging/log-config.d.ts.map +1 -1
  335. package/dist/services/logging/log-config.js +3 -3
  336. package/dist/services/logging/log-config.js.map +1 -1
  337. package/dist/services/logging/log-paths.js +3 -3
  338. package/dist/services/logging/log-paths.js.map +1 -1
  339. package/dist/utils/browser/browser-setup.d.ts +2 -2
  340. package/dist/utils/browser/browser-setup.d.ts.map +1 -1
  341. package/dist/utils/browser/browser-setup.js +4 -4
  342. package/dist/utils/browser/browser-setup.js.map +1 -1
  343. package/dist/utils/browser/browser-status.d.ts.map +1 -1
  344. package/dist/utils/browser/browser-status.js +3 -3
  345. package/dist/utils/browser/browser-status.js.map +1 -1
  346. package/dist/utils/hooks/get-image-analysis-hook-env.d.ts.map +1 -1
  347. package/dist/utils/hooks/get-image-analysis-hook-env.js +2 -2
  348. package/dist/utils/hooks/get-image-analysis-hook-env.js.map +1 -1
  349. package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts.map +1 -1
  350. package/dist/utils/hooks/image-analyzer-hook-configuration.js +2 -2
  351. package/dist/utils/hooks/image-analyzer-hook-configuration.js.map +1 -1
  352. package/dist/utils/hooks/image-analyzer-hook-installer.d.ts.map +1 -1
  353. package/dist/utils/hooks/image-analyzer-hook-installer.js +2 -2
  354. package/dist/utils/hooks/image-analyzer-hook-installer.js.map +1 -1
  355. package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts.map +1 -1
  356. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js +2 -2
  357. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +1 -1
  358. package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -1
  359. package/dist/utils/image-analysis/mcp-installer.js +5 -5
  360. package/dist/utils/image-analysis/mcp-installer.js.map +1 -1
  361. package/dist/utils/shell-executor.d.ts.map +1 -1
  362. package/dist/utils/shell-executor.js +2 -2
  363. package/dist/utils/shell-executor.js.map +1 -1
  364. package/dist/utils/websearch/hook-config.d.ts.map +1 -1
  365. package/dist/utils/websearch/hook-config.js +3 -3
  366. package/dist/utils/websearch/hook-config.js.map +1 -1
  367. package/dist/utils/websearch/hook-env.js +2 -2
  368. package/dist/utils/websearch/hook-env.js.map +1 -1
  369. package/dist/utils/websearch/hook-installer.d.ts.map +1 -1
  370. package/dist/utils/websearch/hook-installer.js +2 -2
  371. package/dist/utils/websearch/hook-installer.js.map +1 -1
  372. package/dist/utils/websearch/mcp-installer.d.ts.map +1 -1
  373. package/dist/utils/websearch/mcp-installer.js +5 -5
  374. package/dist/utils/websearch/mcp-installer.js.map +1 -1
  375. package/dist/utils/websearch/profile-hook-injector.d.ts.map +1 -1
  376. package/dist/utils/websearch/profile-hook-injector.js +3 -3
  377. package/dist/utils/websearch/profile-hook-injector.js.map +1 -1
  378. package/dist/utils/websearch/provider-secrets.js +2 -2
  379. package/dist/utils/websearch/provider-secrets.js.map +1 -1
  380. package/dist/utils/websearch/status.d.ts.map +1 -1
  381. package/dist/utils/websearch/status.js +4 -4
  382. package/dist/utils/websearch/status.js.map +1 -1
  383. package/dist/web-server/file-watcher.js +2 -2
  384. package/dist/web-server/file-watcher.js.map +1 -1
  385. package/dist/web-server/health/config-checks.d.ts.map +1 -1
  386. package/dist/web-server/health/config-checks.js +3 -3
  387. package/dist/web-server/health/config-checks.js.map +1 -1
  388. package/dist/web-server/health/profile-checks.d.ts.map +1 -1
  389. package/dist/web-server/health/profile-checks.js +3 -3
  390. package/dist/web-server/health/profile-checks.js.map +1 -1
  391. package/dist/web-server/health-service.d.ts.map +1 -1
  392. package/dist/web-server/health-service.js +7 -6
  393. package/dist/web-server/health-service.js.map +1 -1
  394. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  395. package/dist/web-server/middleware/auth-middleware.js +6 -7
  396. package/dist/web-server/middleware/auth-middleware.js.map +1 -1
  397. package/dist/web-server/models-dev/registry-cache.d.ts.map +1 -1
  398. package/dist/web-server/models-dev/registry-cache.js +2 -2
  399. package/dist/web-server/models-dev/registry-cache.js.map +1 -1
  400. package/dist/web-server/overview-routes.d.ts.map +1 -1
  401. package/dist/web-server/overview-routes.js +2 -2
  402. package/dist/web-server/overview-routes.js.map +1 -1
  403. package/dist/web-server/routes/account-routes.d.ts.map +1 -1
  404. package/dist/web-server/routes/account-routes.js +7 -7
  405. package/dist/web-server/routes/account-routes.js.map +1 -1
  406. package/dist/web-server/routes/auth-routes.d.ts.map +1 -1
  407. package/dist/web-server/routes/auth-routes.js +4 -4
  408. package/dist/web-server/routes/auth-routes.js.map +1 -1
  409. package/dist/web-server/routes/browser-routes.d.ts.map +1 -1
  410. package/dist/web-server/routes/browser-routes.js +2 -2
  411. package/dist/web-server/routes/browser-routes.js.map +1 -1
  412. package/dist/web-server/routes/channels-routes.d.ts.map +1 -1
  413. package/dist/web-server/routes/channels-routes.js +4 -4
  414. package/dist/web-server/routes/channels-routes.js.map +1 -1
  415. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  416. package/dist/web-server/routes/cliproxy-auth-routes.js +2 -2
  417. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  418. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
  419. package/dist/web-server/routes/cliproxy-local-proxy.js +2 -2
  420. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
  421. package/dist/web-server/routes/cliproxy-sync-routes.d.ts.map +1 -1
  422. package/dist/web-server/routes/cliproxy-sync-routes.js +2 -2
  423. package/dist/web-server/routes/cliproxy-sync-routes.js.map +1 -1
  424. package/dist/web-server/routes/config-routes.d.ts.map +1 -1
  425. package/dist/web-server/routes/config-routes.js +6 -6
  426. package/dist/web-server/routes/config-routes.js.map +1 -1
  427. package/dist/web-server/routes/copilot-routes.d.ts.map +1 -1
  428. package/dist/web-server/routes/copilot-routes.js +3 -3
  429. package/dist/web-server/routes/copilot-routes.js.map +1 -1
  430. package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -1
  431. package/dist/web-server/routes/copilot-settings-routes.js +6 -7
  432. package/dist/web-server/routes/copilot-settings-routes.js.map +1 -1
  433. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  434. package/dist/web-server/routes/cursor-routes.js +5 -5
  435. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  436. package/dist/web-server/routes/cursor-settings-routes.d.ts.map +1 -1
  437. package/dist/web-server/routes/cursor-settings-routes.js +8 -9
  438. package/dist/web-server/routes/cursor-settings-routes.js.map +1 -1
  439. package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
  440. package/dist/web-server/routes/image-analysis-routes.js +5 -6
  441. package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
  442. package/dist/web-server/routes/misc-routes.d.ts.map +1 -1
  443. package/dist/web-server/routes/misc-routes.js +10 -11
  444. package/dist/web-server/routes/misc-routes.js.map +1 -1
  445. package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
  446. package/dist/web-server/routes/proxy-routes.js +6 -6
  447. package/dist/web-server/routes/proxy-routes.js.map +1 -1
  448. package/dist/web-server/routes/route-helpers.d.ts.map +1 -1
  449. package/dist/web-server/routes/route-helpers.js +7 -6
  450. package/dist/web-server/routes/route-helpers.js.map +1 -1
  451. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  452. package/dist/web-server/routes/settings-routes.js +8 -9
  453. package/dist/web-server/routes/settings-routes.js.map +1 -1
  454. package/dist/web-server/routes/websearch-routes.d.ts.map +1 -1
  455. package/dist/web-server/routes/websearch-routes.js +4 -4
  456. package/dist/web-server/routes/websearch-routes.js.map +1 -1
  457. package/dist/web-server/services/claude-extension-binding-service.js +2 -2
  458. package/dist/web-server/services/claude-extension-binding-service.js.map +1 -1
  459. package/dist/web-server/services/logs-dashboard-service.d.ts.map +1 -1
  460. package/dist/web-server/services/logs-dashboard-service.js +2 -2
  461. package/dist/web-server/services/logs-dashboard-service.js.map +1 -1
  462. package/dist/web-server/shared-routes.d.ts.map +1 -1
  463. package/dist/web-server/shared-routes.js +4 -4
  464. package/dist/web-server/shared-routes.js.map +1 -1
  465. package/dist/web-server/usage/aggregator.d.ts.map +1 -1
  466. package/dist/web-server/usage/aggregator.js +2 -2
  467. package/dist/web-server/usage/aggregator.js.map +1 -1
  468. package/dist/web-server/usage/cliproxy-usage-syncer.d.ts.map +1 -1
  469. package/dist/web-server/usage/cliproxy-usage-syncer.js +2 -2
  470. package/dist/web-server/usage/cliproxy-usage-syncer.js.map +1 -1
  471. package/dist/web-server/usage/codex-native-usage-collector.d.ts +2 -0
  472. package/dist/web-server/usage/codex-native-usage-collector.d.ts.map +1 -1
  473. package/dist/web-server/usage/codex-native-usage-collector.js +99 -1
  474. package/dist/web-server/usage/codex-native-usage-collector.js.map +1 -1
  475. package/dist/web-server/usage/disk-cache.js +2 -2
  476. package/dist/web-server/usage/disk-cache.js.map +1 -1
  477. package/package.json +1 -1
@@ -34,58 +34,34 @@ var __importStar = (this && this.__importStar) || function (mod) {
34
34
  return result;
35
35
  };
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.__testExports = exports.findAvailablePort = exports.isPortAvailable = exports.execClaudeWithCLIProxy = exports.hasGitLabTokenLoginFlag = exports.readOptionValue = void 0;
38
- const child_process_1 = require("child_process");
37
+ exports.__testExports = exports._resolveRuntimeQuotaMonitorProviders = exports.filterCcsFlags = exports.CCS_FLAGS = exports.hasGitLabTokenLoginFlag = exports.readOptionValue = exports.findAvailablePort = exports.isPortAvailable = exports.execClaudeWithCLIProxy = void 0;
39
38
  const fs = __importStar(require("fs"));
40
- const os = __importStar(require("os"));
41
- const path = __importStar(require("path"));
42
- const progress_indicator_1 = require("../../utils/progress-indicator");
43
39
  const ui_1 = require("../../utils/ui");
44
- const config_manager_1 = require("../../utils/config-manager");
45
- const shell_executor_1 = require("../../utils/shell-executor");
46
- const binary_manager_1 = require("../binary-manager");
47
40
  const config_generator_1 = require("../config/config-generator");
48
- const remote_proxy_client_1 = require("../services/remote-proxy-client");
49
- const auth_handler_1 = require("../auth/auth-handler");
50
- const types_1 = require("../types");
51
41
  const model_config_1 = require("../config/model-config");
52
- const codex_plan_compatibility_1 = require("../ai-providers/codex-plan-compatibility");
53
- const proxy_config_resolver_1 = require("../proxy/proxy-config-resolver");
54
42
  const model_catalog_1 = require("../model-catalog");
55
- const codex_reasoning_proxy_1 = require("../ai-providers/codex-reasoning-proxy");
56
- const tool_sanitization_proxy_1 = require("../proxy/tool-sanitization-proxy");
57
- const account_manager_1 = require("../accounts/account-manager");
58
- const email_account_identity_1 = require("../accounts/email-account-identity");
59
43
  const websearch_manager_1 = require("../../utils/websearch-manager");
60
44
  const image_analysis_1 = require("../../utils/image-analysis");
61
- const browser_1 = require("../../utils/browser");
62
- const unified_config_loader_1 = require("../../config/unified-config-loader");
45
+ const config_loader_facade_1 = require("../../config/config-loader-facade");
63
46
  const https_tunnel_proxy_1 = require("../proxy/https-tunnel-proxy");
64
- const auth_types_1 = require("../auth/auth-types");
65
47
  const profile_continuity_inheritance_1 = require("../../auth/profile-continuity-inheritance");
66
48
  // Import modular components
49
+ const browser_launch_setup_1 = require("./browser-launch-setup");
50
+ const account_resolution_1 = require("./account-resolution");
67
51
  const lifecycle_manager_1 = require("./lifecycle-manager");
68
52
  const env_resolver_1 = require("./env-resolver");
69
- const retry_handler_1 = require("./retry-handler");
70
- const quota_manager_1 = require("../quota/quota-manager");
71
53
  const session_bridge_1 = require("./session-bridge");
72
- const thinking_arg_parser_1 = require("./thinking-arg-parser");
73
- const account_safety_1 = require("../accounts/account-safety");
74
- const antigravity_responsibility_1 = require("../auth/antigravity-responsibility");
75
54
  const websearch_manager_2 = require("../../utils/websearch-manager");
55
+ const auth_coordinator_1 = require("./auth-coordinator");
76
56
  const thinking_override_resolver_1 = require("./thinking-override-resolver");
77
57
  const https_tunnel_policy_1 = require("./https-tunnel-policy");
78
- function resolveRuntimeQuotaMonitorProviders(provider, compositeProviders) {
79
- const candidates = compositeProviders.length > 0 ? compositeProviders : [provider];
80
- const resolved = [];
81
- for (const candidate of candidates) {
82
- if (quota_manager_1.MANAGED_QUOTA_PROVIDERS.includes(candidate) &&
83
- !resolved.includes(candidate)) {
84
- resolved.push(candidate);
85
- }
86
- }
87
- return resolved;
88
- }
58
+ const arg_parser_1 = require("./arg-parser");
59
+ const proxy_resolver_1 = require("./proxy-resolver");
60
+ const proxy_chain_builder_1 = require("./proxy-chain-builder");
61
+ const model_warnings_1 = require("./model-warnings");
62
+ const claude_launcher_1 = require("./claude-launcher");
63
+ /** Local alias so internal call sites need no change */
64
+ const resolveRuntimeQuotaMonitorProviders = account_resolution_1.resolveRuntimeQuotaMonitorProviders;
89
65
  /** Default executor configuration */
90
66
  const DEFAULT_CONFIG = {
91
67
  port: config_generator_1.CLIPROXY_DEFAULT_PORT,
@@ -93,35 +69,9 @@ const DEFAULT_CONFIG = {
93
69
  verbose: false,
94
70
  pollInterval: 100,
95
71
  };
96
- function readOptionValue(args, flag) {
97
- const inlinePrefix = `${flag}=`;
98
- const inlineArg = args.find((arg) => arg.startsWith(inlinePrefix));
99
- if (inlineArg !== undefined) {
100
- const value = inlineArg.slice(inlinePrefix.length).trim();
101
- return {
102
- present: true,
103
- value: value.length > 0 ? value : undefined,
104
- missingValue: value.length === 0,
105
- };
106
- }
107
- const index = args.indexOf(flag);
108
- if (index === -1) {
109
- return { present: false, missingValue: false };
110
- }
111
- const next = args[index + 1];
112
- if (!next || next.startsWith('-')) {
113
- return { present: true, missingValue: true };
114
- }
115
- return { present: true, value: next.trim(), missingValue: false };
116
- }
117
- exports.readOptionValue = readOptionValue;
118
- function hasGitLabTokenLoginFlag(args) {
119
- return args.includes('--gitlab-token-login') || args.includes('--token-login');
120
- }
121
- exports.hasGitLabTokenLoginFlag = hasGitLabTokenLoginFlag;
122
- function getGitLabTokenLoginFlagName(args) {
123
- return args.includes('--gitlab-token-login') ? '--gitlab-token-login' : '--token-login';
124
- }
72
+ // readOptionValue, hasGitLabTokenLoginFlag, CCS_FLAGS, filterCcsFlags are
73
+ // re-exported from ./arg-parser via the export block at the bottom of this file
74
+ // for backwards compatibility with external callers.
125
75
  /**
126
76
  * Execute Claude CLI with CLIProxy (main entry point)
127
77
  *
@@ -151,405 +101,48 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
151
101
  ? [...new Set(Object.values(cfg.compositeTiers).map((t) => t.provider))]
152
102
  : [];
153
103
  // 0. Resolve proxy configuration (CLI > ENV > config.yaml > defaults)
154
- const unifiedConfig = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
104
+ const unifiedConfig = (0, config_loader_facade_1.loadOrCreateUnifiedConfig)();
155
105
  // Collect all providers to validate (default + composite tiers)
156
106
  const allProviders = [provider, ...compositeProviders];
157
- const cliproxyServerConfig = unifiedConfig.cliproxy_server;
158
- const { config: proxyConfig, remainingArgs: argsWithoutProxy } = (0, proxy_config_resolver_1.resolveProxyConfig)(args, {
159
- remote: cliproxyServerConfig?.remote
160
- ? {
161
- enabled: cliproxyServerConfig.remote.enabled,
162
- host: cliproxyServerConfig.remote.host,
163
- port: cliproxyServerConfig.remote.port,
164
- protocol: cliproxyServerConfig.remote.protocol,
165
- auth_token: cliproxyServerConfig.remote.auth_token,
166
- management_key: cliproxyServerConfig.remote.management_key,
167
- timeout: cliproxyServerConfig.remote.timeout,
168
- }
169
- : undefined,
170
- local: cliproxyServerConfig?.local
171
- ? {
172
- port: cliproxyServerConfig.local.port,
173
- auto_start: cliproxyServerConfig.local.auto_start,
174
- }
175
- : undefined,
107
+ const { proxyConfig, useRemoteProxy, localBackend, binaryPath, argsWithoutProxy } = await (0, proxy_resolver_1.resolveExecutorProxy)(args, {
108
+ unifiedConfig,
109
+ allProviders,
110
+ verbose,
111
+ cfg,
112
+ log,
176
113
  });
177
- let browserLaunchOverride;
178
- let argsWithoutBrowserFlags = argsWithoutProxy;
179
- try {
180
- const browserLaunchFlags = (0, browser_1.resolveBrowserLaunchFlagResolution)(argsWithoutProxy);
181
- browserLaunchOverride = browserLaunchFlags.override;
182
- argsWithoutBrowserFlags = browserLaunchFlags.argsWithoutFlags;
183
- }
184
- catch (error) {
185
- console.error((0, ui_1.fail)(error.message));
186
- process.exit(1);
187
- return;
188
- }
189
- const browserConfig = (0, unified_config_loader_1.getBrowserConfig)();
190
- const browserAttachConfig = (0, browser_1.getEffectiveClaudeBrowserAttachConfig)(browserConfig);
191
- const claudeBrowserExposure = (0, browser_1.resolveBrowserExposure)({
192
- enabled: browserAttachConfig.enabled,
193
- policy: browserConfig.claude.policy,
194
- }, browserLaunchOverride);
195
- const blockedBrowserOverrideWarning = (0, browser_1.getBlockedBrowserOverrideWarning)('Claude Browser Attach', claudeBrowserExposure);
196
- if (blockedBrowserOverrideWarning) {
197
- console.error((0, ui_1.warn)(blockedBrowserOverrideWarning));
198
- }
199
- // Port resolution and validation
200
- if (cfg.port && cfg.port !== config_generator_1.CLIPROXY_DEFAULT_PORT) {
201
- if (proxyConfig.port !== config_generator_1.CLIPROXY_DEFAULT_PORT) {
202
- cfg.port = proxyConfig.port;
203
- }
204
- }
205
- else if (proxyConfig.port !== config_generator_1.CLIPROXY_DEFAULT_PORT) {
206
- cfg.port = proxyConfig.port;
207
- }
208
- cfg.port = (0, config_generator_1.validatePort)(cfg.port);
209
- log(`Proxy mode: ${proxyConfig.mode}`);
210
- if (proxyConfig.mode === 'remote') {
211
- log(`Remote host: ${proxyConfig.host}:${proxyConfig.port} (${proxyConfig.protocol})`);
212
- }
114
+ const { browserLaunchOverride, argsWithoutBrowserFlags } = (0, browser_launch_setup_1.resolveBrowserLaunchFlags)(argsWithoutProxy);
213
115
  // Setup first-class CCS WebSearch runtime
214
116
  (0, websearch_manager_1.ensureWebSearchMcpOrThrow)();
215
117
  const imageAnalysisMcpReady = (0, image_analysis_1.ensureImageAnalysisMcpOrThrow)();
216
- const browserAttachRuntime = browserAttachConfig.enabled && claudeBrowserExposure.exposeForLaunch
217
- ? await (0, browser_1.resolveOptionalBrowserAttachRuntime)(browserAttachConfig)
218
- : undefined;
219
- const browserRuntimeEnv = browserAttachRuntime?.runtimeEnv;
220
- if (browserAttachRuntime?.warning) {
221
- process.stderr.write(`${(0, ui_1.warn)(browserAttachRuntime.warning)}\n`);
222
- }
223
- if (browserRuntimeEnv) {
224
- (0, browser_1.ensureBrowserMcpOrThrow)();
225
- }
226
118
  (0, websearch_manager_1.displayWebSearchStatus)();
227
119
  const providerConfig = (0, config_generator_1.getProviderConfig)(provider);
228
120
  log(`Provider: ${providerConfig.displayName}`);
229
- (0, account_safety_1.warnOAuthBanRisk)(provider);
230
- // Check remote proxy if configured
231
- let useRemoteProxy = false;
232
- let localBackend = 'original';
233
- if (proxyConfig.mode === 'remote' && proxyConfig.host) {
234
- const status = await (0, remote_proxy_client_1.checkRemoteProxy)({
235
- host: proxyConfig.host,
236
- port: proxyConfig.port,
237
- protocol: proxyConfig.protocol,
238
- authToken: proxyConfig.authToken,
239
- timeout: proxyConfig.timeout ?? 2000,
240
- allowSelfSigned: proxyConfig.allowSelfSigned ?? false,
241
- });
242
- if (status.reachable) {
243
- useRemoteProxy = true;
244
- console.log((0, ui_1.ok)(`Connected to remote proxy at ${proxyConfig.host}:${proxyConfig.port} (${status.latencyMs}ms)`));
245
- }
246
- else {
247
- console.error((0, ui_1.warn)(`Remote proxy unreachable: ${status.error}`));
248
- if (proxyConfig.remoteOnly) {
249
- throw new Error('Remote proxy unreachable and --remote-only specified');
250
- }
251
- if (proxyConfig.fallbackEnabled) {
252
- if (proxyConfig.autoStartLocal) {
253
- console.log((0, ui_1.info)('Falling back to local proxy...'));
254
- }
255
- else {
256
- if (process.stdin.isTTY) {
257
- const readline = await Promise.resolve().then(() => __importStar(require('readline')));
258
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
259
- const answer = await new Promise((resolve) => {
260
- rl.question('Start local proxy instead? [Y/n] ', resolve);
261
- });
262
- rl.close();
263
- if (answer.toLowerCase() === 'n') {
264
- throw new Error('Remote proxy unreachable and user declined fallback');
265
- }
266
- }
267
- console.log((0, ui_1.info)('Starting local proxy...'));
268
- }
269
- }
270
- else {
271
- throw new Error('Remote proxy unreachable and fallback disabled');
272
- }
273
- }
274
- }
275
- if (!useRemoteProxy) {
276
- localBackend = (0, binary_manager_1.getConfiguredBackend)({ notifyOnPlus: true });
277
- for (const p of allProviders) {
278
- if (localBackend === 'original' && types_1.PLUS_ONLY_PROVIDERS.includes(p)) {
279
- console.error('');
280
- console.error((0, ui_1.fail)((0, binary_manager_1.getPlusBackendUnavailableMessage)(p)));
281
- console.error('');
282
- throw new Error(`Provider ${p} requires local CLIProxy Plus backend`);
283
- }
284
- }
285
- }
286
121
  // Variables for local proxy mode
287
- let binaryPath;
288
122
  let sessionId;
289
- // 1. Ensure binary exists (downloads if needed) - SKIP for remote mode
290
- if (!useRemoteProxy) {
291
- const spinner = new progress_indicator_1.ProgressIndicator('Preparing CLIProxy');
292
- spinner.start();
293
- try {
294
- binaryPath = await (0, binary_manager_1.ensureCLIProxyBinary)(verbose, { skipAutoUpdate: true });
295
- spinner.succeed('CLIProxy binary ready');
296
- }
297
- catch (error) {
298
- spinner.fail('Failed to prepare CLIProxy');
299
- const err = error;
300
- if ((0, retry_handler_1.isNetworkError)(err)) {
301
- (0, retry_handler_1.handleNetworkError)(err);
302
- }
303
- throw error;
304
- }
305
- }
306
- // 2. Handle special flags (simplified flag parsing - full implementation continues below)
307
- const forceAuth = argsWithoutProxy.includes('--auth');
308
- const pasteCallback = argsWithoutProxy.includes('--paste-callback');
309
- const portForward = argsWithoutProxy.includes('--port-forward');
310
- const forceHeadless = argsWithoutProxy.includes('--headless');
311
- if (pasteCallback && portForward) {
312
- console.error((0, ui_1.fail)('Cannot use --paste-callback with --port-forward'));
313
- console.error(' --paste-callback: Manually paste OAuth redirect URL');
314
- console.error(' --port-forward: Use SSH port forwarding for callback');
315
- process.exit(1);
316
- }
317
- const forceLogout = argsWithoutProxy.includes('--logout');
318
- const forceConfig = argsWithoutProxy.includes('--config');
319
- const addAccount = argsWithoutProxy.includes('--add');
320
- const showAccounts = argsWithoutProxy.includes('--accounts');
321
- const forceImport = argsWithoutProxy.includes('--import');
322
- const gitlabTokenLogin = hasGitLabTokenLoginFlag(argsWithoutProxy);
323
- const acceptAgyRisk = (0, antigravity_responsibility_1.hasAntigravityRiskAcceptanceFlag)(argsWithoutProxy);
324
- const incognitoFlag = argsWithoutProxy.includes('--incognito');
325
- const noIncognitoFlag = argsWithoutProxy.includes('--no-incognito');
326
- const kiroNoIncognitoConfig = provider === 'kiro' ? (unifiedConfig.cliproxy?.kiro_no_incognito ?? true) : false;
327
- const noIncognito = incognitoFlag ? false : noIncognitoFlag || kiroNoIncognitoConfig;
328
- // Parse --use flag
329
- let useAccount;
330
- const useIdx = argsWithoutProxy.indexOf('--use');
331
- if (useIdx !== -1 &&
332
- argsWithoutProxy[useIdx + 1] &&
333
- !argsWithoutProxy[useIdx + 1].startsWith('-')) {
334
- useAccount = argsWithoutProxy[useIdx + 1];
335
- }
336
- // Parse --nickname flag
337
- let setNickname;
338
- const nicknameIdx = argsWithoutProxy.indexOf('--nickname');
339
- if (nicknameIdx !== -1 &&
340
- argsWithoutProxy[nicknameIdx + 1] &&
341
- !argsWithoutProxy[nicknameIdx + 1].startsWith('-')) {
342
- setNickname = argsWithoutProxy[nicknameIdx + 1];
343
- }
344
- // Parse --kiro-auth-method flag
345
- let kiroAuthMethod;
346
- const kiroMethodValue = readOptionValue(argsWithoutProxy, '--kiro-auth-method');
347
- if (kiroMethodValue.present) {
348
- const rawMethod = kiroMethodValue.value;
349
- if (kiroMethodValue.missingValue || !rawMethod) {
350
- console.error((0, ui_1.fail)('--kiro-auth-method requires a value'));
351
- console.error(' Supported values: aws, aws-authcode, google, github, idc');
352
- process.exitCode = 1;
353
- return;
354
- }
355
- const normalized = rawMethod.trim().toLowerCase();
356
- if (!(0, auth_types_1.isKiroAuthMethod)(normalized)) {
357
- console.error((0, ui_1.fail)(`Invalid --kiro-auth-method value: ${rawMethod}`));
358
- console.error(' Supported values: aws, aws-authcode, google, github, idc');
359
- process.exitCode = 1;
360
- return;
361
- }
362
- kiroAuthMethod = (0, auth_types_1.normalizeKiroAuthMethod)(normalized);
363
- }
364
- let kiroIDCStartUrl;
365
- const kiroIDCStartUrlValue = readOptionValue(argsWithoutProxy, '--kiro-idc-start-url');
366
- if (kiroIDCStartUrlValue.present && kiroIDCStartUrlValue.value) {
367
- kiroIDCStartUrl = kiroIDCStartUrlValue.value;
368
- }
369
- else if (kiroIDCStartUrlValue.present) {
370
- console.error((0, ui_1.fail)('--kiro-idc-start-url requires a value'));
371
- process.exitCode = 1;
372
- return;
373
- }
374
- let kiroIDCRegion;
375
- const kiroIDCRegionValue = readOptionValue(argsWithoutProxy, '--kiro-idc-region');
376
- if (kiroIDCRegionValue.present && kiroIDCRegionValue.value) {
377
- kiroIDCRegion = kiroIDCRegionValue.value;
378
- }
379
- else if (kiroIDCRegionValue.present) {
380
- console.error((0, ui_1.fail)('--kiro-idc-region requires a value'));
381
- process.exitCode = 1;
382
- return;
383
- }
384
- let kiroIDCFlow;
385
- const kiroIDCFlowValue = readOptionValue(argsWithoutProxy, '--kiro-idc-flow');
386
- if (kiroIDCFlowValue.present) {
387
- const rawFlow = kiroIDCFlowValue.value;
388
- if (kiroIDCFlowValue.missingValue || !rawFlow) {
389
- console.error((0, ui_1.fail)('--kiro-idc-flow requires a value'));
390
- console.error(' Supported values: authcode, device');
391
- process.exitCode = 1;
392
- return;
393
- }
394
- const normalized = rawFlow.trim().toLowerCase();
395
- if (!(0, auth_types_1.isKiroIDCFlow)(normalized)) {
396
- console.error((0, ui_1.fail)(`Invalid --kiro-idc-flow value: ${rawFlow}`));
397
- console.error(' Supported values: authcode, device');
398
- process.exitCode = 1;
399
- return;
400
- }
401
- kiroIDCFlow = (0, auth_types_1.normalizeKiroIDCFlow)(normalized);
402
- }
403
- let gitlabBaseUrl;
404
- const gitlabBaseUrlValue = readOptionValue(argsWithoutProxy, '--gitlab-url');
405
- if (gitlabBaseUrlValue.present && gitlabBaseUrlValue.value) {
406
- gitlabBaseUrl = gitlabBaseUrlValue.value.trim();
407
- }
408
- else if (gitlabBaseUrlValue.present) {
409
- console.error((0, ui_1.fail)('--gitlab-url requires a value'));
410
- process.exitCode = 1;
411
- return;
412
- }
413
- if (kiroAuthMethod && provider !== 'kiro' && !compositeProviders.includes('kiro')) {
414
- console.error((0, ui_1.fail)('--kiro-auth-method is only valid for ccs kiro'));
415
- process.exitCode = 1;
416
- return;
417
- }
418
- if ((kiroIDCStartUrl || kiroIDCRegion || kiroIDCFlow) &&
419
- provider !== 'kiro' &&
420
- !compositeProviders.includes('kiro')) {
421
- console.error((0, ui_1.fail)('--kiro-idc-start-url, --kiro-idc-region, and --kiro-idc-flow are only valid for ccs kiro'));
422
- process.exitCode = 1;
423
- return;
424
- }
425
- if (!kiroAuthMethod && (kiroIDCStartUrl || kiroIDCRegion || kiroIDCFlow)) {
426
- kiroAuthMethod = 'idc';
427
- }
428
- if (kiroAuthMethod === 'idc' && !kiroIDCStartUrl) {
429
- console.error((0, ui_1.fail)('Kiro IDC login requires --kiro-idc-start-url'));
430
- console.error(' Example: ccs kiro --auth --kiro-auth-method idc --kiro-idc-start-url https://d-xxx.awsapps.com/start');
431
- process.exitCode = 1;
432
- return;
433
- }
434
- if (kiroAuthMethod &&
435
- kiroAuthMethod !== 'idc' &&
436
- (kiroIDCStartUrl || kiroIDCRegion || kiroIDCFlow)) {
437
- console.error((0, ui_1.fail)('--kiro-idc-start-url, --kiro-idc-region, and --kiro-idc-flow require --kiro-auth-method idc'));
438
- process.exitCode = 1;
123
+ // 2. Parse all CCS executor flags (extracted to arg-parser.ts)
124
+ const parsedFlags = (0, arg_parser_1.parseExecutorFlags)(argsWithoutProxy, {
125
+ provider,
126
+ compositeProviders,
127
+ unifiedConfig,
128
+ });
129
+ if (process.exitCode === 1)
439
130
  return;
440
- }
441
- if ((gitlabTokenLogin || gitlabBaseUrl) && provider !== 'gitlab') {
442
- const flagName = gitlabTokenLogin
443
- ? getGitLabTokenLoginFlagName(argsWithoutProxy)
444
- : '--gitlab-url';
445
- console.error((0, ui_1.fail)(`${flagName} is only valid for ccs gitlab`));
446
- process.exitCode = 1;
131
+ // Validate cross-flag combinations (exits with code 1 on violation)
132
+ (0, arg_parser_1.validateFlagCombinations)(parsedFlags, { provider, compositeProviders }, argsWithoutProxy);
133
+ if (process.exitCode === 1)
447
134
  return;
448
- }
449
- // Parse --thinking / --effort flags (aliases; first occurrence wins)
450
- const thinkingParse = (0, thinking_arg_parser_1.parseThinkingOverride)(argsWithoutProxy);
451
- if (thinkingParse.error) {
452
- const { flag } = thinkingParse.error;
453
- console.error((0, ui_1.fail)(`${flag} requires a value`));
454
- if (provider === 'codex') {
455
- console.error(' Codex examples: --effort xhigh, --effort high, --effort medium');
456
- console.error(' Alias: --thinking xhigh (same behavior)');
457
- }
458
- else {
459
- console.error(' Examples: --thinking low, --thinking 8192, --thinking off');
460
- console.error(' Levels: minimal, low, medium, high, xhigh, max, auto');
461
- }
462
- process.exit(1);
463
- }
135
+ const { forceConfig, addAccount, showAccounts, useAccount, setNickname, extendedContextOverride, thinkingParse, } = parsedFlags;
464
136
  const { thinkingOverride, thinkingSource } = (0, thinking_override_resolver_1.resolveRuntimeThinkingOverride)(thinkingParse.value, process.env.CCS_THINKING);
465
- const thinkingCfg = (0, unified_config_loader_1.getThinkingConfig)();
137
+ const thinkingCfg = (0, config_loader_facade_1.getThinkingConfig)();
466
138
  if (thinkingParse.duplicateDisplays.length > 0) {
467
139
  console.warn(`[!] Multiple reasoning flags detected. Using first occurrence: ${thinkingParse.sourceDisplay}`);
468
140
  }
469
141
  if (thinkingParse.sourceFlag === '--effort' && provider !== 'codex') {
470
142
  console.warn((0, ui_1.warn)('`--effort` is primarily for codex. Continuing as alias of `--thinking` for compatibility.'));
471
143
  }
472
- // Parse --1m / --no-1m flags for extended context (1M token window)
473
- let extendedContextOverride;
474
- const has1mFlag = argsWithoutProxy.includes('--1m') || argsWithoutProxy.some((arg) => arg.startsWith('--1m='));
475
- const hasNo1mFlag = argsWithoutProxy.includes('--no-1m') ||
476
- argsWithoutProxy.some((arg) => arg.startsWith('--no-1m='));
477
- if (has1mFlag && hasNo1mFlag) {
478
- console.error((0, ui_1.fail)('Cannot use both --1m and --no-1m flags'));
479
- process.exit(1);
480
- }
481
- else if (has1mFlag) {
482
- extendedContextOverride = true;
483
- }
484
- else if (hasNo1mFlag) {
485
- extendedContextOverride = false;
486
- }
487
- // undefined = auto behavior (Gemini: on, others: off)
488
- // Handle --accounts
489
- if (showAccounts) {
490
- const accounts = (0, account_manager_1.getProviderAccounts)(provider);
491
- if (accounts.length === 0) {
492
- console.log((0, ui_1.info)(`No accounts registered for ${providerConfig.displayName}`));
493
- console.log(` Run "ccs ${provider} --auth" to add an account`);
494
- }
495
- else {
496
- console.log(`\n${providerConfig.displayName} Accounts:\n`);
497
- for (const acct of accounts) {
498
- const defaultMark = acct.isDefault ? ' (default)' : '';
499
- const nickname = acct.nickname ? `[${acct.nickname}]` : '';
500
- console.log(` ${nickname.padEnd(12)} ${(0, email_account_identity_1.formatAccountDisplayName)(acct)}${defaultMark}`);
501
- }
502
- console.log(`\n Use "ccs ${provider} --use <nickname-or-id>" to switch accounts`);
503
- }
504
- process.exit(0);
505
- }
506
- // Handle --use
507
- if (useAccount) {
508
- const account = (0, account_manager_1.findAccountByQuery)(provider, useAccount);
509
- if (!account) {
510
- console.error((0, ui_1.fail)(`Account not found: "${useAccount}"`));
511
- const accounts = (0, account_manager_1.getProviderAccounts)(provider);
512
- if (accounts.length > 0) {
513
- console.error(` Available accounts:`);
514
- for (const acct of accounts) {
515
- const displayName = (0, email_account_identity_1.formatAccountDisplayName)(acct);
516
- const label = acct.nickname ? `${acct.nickname} (${displayName})` : displayName;
517
- console.error(` - ${label}`);
518
- }
519
- }
520
- process.exit(1);
521
- }
522
- (0, account_manager_1.setDefaultAccount)(provider, account.id);
523
- (0, account_manager_1.touchAccount)(provider, account.id);
524
- const switchedLabel = account.nickname
525
- ? `${account.nickname} (${(0, email_account_identity_1.formatAccountDisplayName)(account)})`
526
- : (0, email_account_identity_1.formatAccountDisplayName)(account);
527
- console.log((0, ui_1.ok)(`Switched to account: ${switchedLabel}`));
528
- }
529
- // Handle --nickname (rename account)
530
- if (setNickname && !addAccount) {
531
- const defaultAccount = (0, account_manager_1.getDefaultAccount)(provider);
532
- if (!defaultAccount) {
533
- console.error((0, ui_1.fail)(`No account found for ${providerConfig.displayName}`));
534
- console.error(` Run "ccs ${provider} --auth" to add an account first`);
535
- process.exit(1);
536
- }
537
- try {
538
- const success = (0, account_manager_1.renameAccount)(provider, defaultAccount.id, setNickname);
539
- if (success) {
540
- console.log((0, ui_1.ok)(`Renamed account to: ${setNickname}`));
541
- }
542
- else {
543
- console.error((0, ui_1.fail)('Failed to rename account'));
544
- process.exit(1);
545
- }
546
- }
547
- catch (err) {
548
- console.error((0, ui_1.fail)(err instanceof Error ? err.message : 'Failed to rename account'));
549
- process.exit(1);
550
- }
551
- process.exit(0);
552
- }
144
+ // Handle --accounts / --use / --nickname (warnOAuthBanRisk emitted inside)
145
+ await (0, account_resolution_1.resolveAccounts)({ provider, showAccounts, useAccount, setNickname, addAccount });
553
146
  // Handle --config
554
147
  if (forceConfig && (0, model_catalog_1.supportsModelConfig)(provider)) {
555
148
  // Block --config for composite variants (per-tier models in config.yaml)
@@ -564,264 +157,49 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
564
157
  process.exit(0);
565
158
  }
566
159
  }
567
- // Handle --logout
568
- if (forceLogout) {
569
- const { clearAuth } = await Promise.resolve().then(() => __importStar(require('../auth/auth-handler')));
570
- if (clearAuth(provider)) {
571
- console.log((0, ui_1.ok)(`Logged out from ${providerConfig.displayName}`));
572
- }
573
- else {
574
- console.log((0, ui_1.info)(`No authentication found for ${providerConfig.displayName}`));
575
- }
576
- process.exit(0);
577
- }
578
- // Handle --import (Kiro only)
579
- if (forceImport) {
580
- if (provider !== 'kiro') {
581
- console.error((0, ui_1.fail)('--import is only available for Kiro'));
582
- console.error(` Run "ccs ${provider} --auth" to authenticate`);
583
- process.exit(1);
584
- }
585
- if (forceAuth) {
586
- console.error((0, ui_1.fail)('Cannot use --import with --auth'));
587
- console.error(' --import: Import existing token from Kiro IDE');
588
- console.error(' --auth: Trigger new OAuth flow in browser');
589
- process.exit(1);
590
- }
591
- if (forceLogout) {
592
- console.error((0, ui_1.fail)('Cannot use --import with --logout'));
593
- process.exit(1);
594
- }
595
- const { triggerOAuth } = await Promise.resolve().then(() => __importStar(require('../auth/auth-handler')));
596
- const authSuccess = await triggerOAuth(provider, {
597
- verbose,
598
- import: true,
599
- ...(kiroAuthMethod ? { kiroMethod: kiroAuthMethod } : {}),
600
- ...(kiroIDCStartUrl ? { kiroIDCStartUrl } : {}),
601
- ...(kiroIDCRegion ? { kiroIDCRegion } : {}),
602
- ...(kiroIDCFlow ? { kiroIDCFlow } : {}),
603
- ...(setNickname ? { nickname: setNickname } : {}),
604
- });
605
- if (!authSuccess) {
606
- console.error((0, ui_1.fail)('Failed to import Kiro token from IDE'));
607
- console.error(' Make sure you are logged into Kiro IDE first');
608
- process.exit(1);
609
- }
610
- process.exit(0);
611
- }
160
+ // Build auth coordination context (used for logout/import/antigravity/oauth)
161
+ const authCtx = {
162
+ provider,
163
+ compositeProviders,
164
+ parsedFlags,
165
+ cfg,
166
+ unifiedConfig,
167
+ verbose,
168
+ log,
169
+ };
170
+ // Handle --logout (early exit)
171
+ await (0, auth_coordinator_1.handleLogout)(authCtx);
172
+ // Handle --import (early exit, Kiro only)
173
+ await (0, auth_coordinator_1.handleImport)(authCtx);
612
174
  // 3. Ensure OAuth completed (if provider requires it)
613
175
  const remoteAuthToken = proxyConfig.authToken?.trim();
614
- const skipLocalAuth = useRemoteProxy && !!remoteAuthToken;
176
+ const skipLocalAuth = (0, auth_coordinator_1.resolveSkipLocalAuth)(remoteAuthToken, useRemoteProxy);
615
177
  if (skipLocalAuth) {
616
178
  log(`Using remote proxy authentication (skipping local OAuth)`);
617
179
  }
618
- if (provider === 'agy' && forceAuth && skipLocalAuth) {
619
- const acknowledged = await (0, antigravity_responsibility_1.ensureCliAntigravityResponsibility)({
620
- context: 'oauth',
621
- acceptedByFlag: acceptAgyRisk,
622
- });
623
- if (!acknowledged) {
624
- throw new Error(`Antigravity auth blocked. Re-run after completing confirmation or pass ${antigravity_responsibility_1.ANTIGRAVITY_ACCEPT_RISK_FLAGS[0]}.`);
625
- }
626
- console.error((0, ui_1.info)('Remote proxy mode is active; local OAuth flow is skipped in --auth mode.'));
180
+ // Antigravity gate (runs before OAuth check)
181
+ const { earlyReturn: agyEarlyReturn } = await (0, auth_coordinator_1.runAntigravityGate)(authCtx, skipLocalAuth);
182
+ if (agyEarlyReturn)
627
183
  return;
628
- }
629
- if (provider === 'agy' && !forceAuth) {
630
- const requiresAuthNow = providerConfig.requiresOAuth && !(0, auth_handler_1.isAuthenticated)(provider);
631
- if (skipLocalAuth || !requiresAuthNow) {
632
- const acknowledged = await (0, antigravity_responsibility_1.ensureCliAntigravityResponsibility)({
633
- context: 'run',
634
- acceptedByFlag: acceptAgyRisk,
635
- });
636
- if (!acknowledged) {
637
- console.error((0, ui_1.fail)(`Antigravity session blocked. Re-run after completing confirmation or pass ${antigravity_responsibility_1.ANTIGRAVITY_ACCEPT_RISK_FLAGS[0]}.`));
638
- process.exit(1);
639
- }
640
- }
641
- }
642
184
  if (providerConfig.requiresOAuth && !skipLocalAuth) {
643
- log(`Checking authentication for ${provider}`);
644
- // Multi-provider auth check for composite variants
645
- if (compositeProviders.length > 0) {
646
- // Handle forceAuth for composite providers
647
- if (forceAuth) {
648
- const { triggerOAuth } = await Promise.resolve().then(() => __importStar(require('../auth/auth-handler')));
649
- const failures = [];
650
- for (const p of compositeProviders) {
651
- const authSuccess = await triggerOAuth(p, {
652
- verbose,
653
- add: addAccount,
654
- ...(acceptAgyRisk ? { acceptAgyRisk: true } : {}),
655
- ...(kiroAuthMethod && p === 'kiro' ? { kiroMethod: kiroAuthMethod } : {}),
656
- ...(kiroIDCStartUrl && p === 'kiro' ? { kiroIDCStartUrl } : {}),
657
- ...(kiroIDCRegion && p === 'kiro' ? { kiroIDCRegion } : {}),
658
- ...(kiroIDCFlow && p === 'kiro' ? { kiroIDCFlow } : {}),
659
- ...(gitlabTokenLogin && p === 'gitlab' ? { gitlabAuthMode: 'pat' } : {}),
660
- ...(gitlabBaseUrl && p === 'gitlab' ? { gitlabBaseUrl } : {}),
661
- ...(forceHeadless ? { headless: true } : {}),
662
- ...(setNickname ? { nickname: setNickname } : {}),
663
- ...(noIncognito ? { noIncognito: true } : {}),
664
- ...(pasteCallback ? { pasteCallback: true } : {}),
665
- ...(portForward ? { portForward: true } : {}),
666
- });
667
- if (!authSuccess) {
668
- failures.push(p);
669
- }
670
- }
671
- if (failures.length > 0) {
672
- const succeeded = compositeProviders.filter((p) => !failures.includes(p));
673
- console.error((0, ui_1.fail)(`Auth failed for: ${failures.join(', ')}`));
674
- if (succeeded.length > 0) {
675
- console.error((0, ui_1.info)(`Succeeded: ${succeeded.join(', ')}`));
676
- }
677
- process.exit(1);
678
- }
679
- process.exit(0);
680
- }
681
- // Check for unauthenticated providers
682
- const unauthenticatedProviders = [];
683
- for (const p of compositeProviders) {
684
- if (!(0, auth_handler_1.isAuthenticated)(p)) {
685
- unauthenticatedProviders.push(p);
686
- }
687
- }
688
- if (unauthenticatedProviders.length > 0) {
689
- console.error((0, ui_1.fail)('Composite variant requires authentication for multiple providers:'));
690
- for (const p of unauthenticatedProviders) {
691
- console.error(` - ${p} (run "ccs ${p} --auth")`);
692
- }
693
- process.exit(1);
694
- }
695
- }
696
- else if (forceAuth || !(0, auth_handler_1.isAuthenticated)(provider)) {
697
- const { triggerOAuth } = await Promise.resolve().then(() => __importStar(require('../auth/auth-handler')));
698
- const authSuccess = await triggerOAuth(provider, {
699
- verbose,
700
- add: addAccount,
701
- ...(acceptAgyRisk ? { acceptAgyRisk: true } : {}),
702
- ...(kiroAuthMethod ? { kiroMethod: kiroAuthMethod } : {}),
703
- ...(kiroIDCStartUrl ? { kiroIDCStartUrl } : {}),
704
- ...(kiroIDCRegion ? { kiroIDCRegion } : {}),
705
- ...(kiroIDCFlow ? { kiroIDCFlow } : {}),
706
- ...(gitlabTokenLogin ? { gitlabAuthMode: 'pat' } : {}),
707
- ...(gitlabBaseUrl ? { gitlabBaseUrl } : {}),
708
- ...(forceHeadless ? { headless: true } : {}),
709
- ...(setNickname ? { nickname: setNickname } : {}),
710
- ...(noIncognito ? { noIncognito: true } : {}),
711
- ...(pasteCallback ? { pasteCallback: true } : {}),
712
- ...(portForward ? { portForward: true } : {}),
713
- });
714
- if (!authSuccess) {
715
- throw new Error(`Authentication required for ${providerConfig.displayName}`);
716
- }
717
- if (forceAuth) {
718
- process.exit(0);
719
- }
720
- }
721
- else {
722
- log(`${provider} already authenticated`);
723
- }
724
- // 3a. Proactive token refresh (multi-provider for composite)
725
- if (compositeProviders.length > 0) {
726
- for (const p of compositeProviders) {
727
- await (0, retry_handler_1.handleTokenExpiration)(p, verbose);
728
- }
729
- }
730
- else {
731
- await (0, retry_handler_1.handleTokenExpiration)(provider, verbose);
732
- }
733
- // 3a-1. Update lastUsedAt
734
- const usedAccount = (0, account_manager_1.getDefaultAccount)(provider);
735
- if (usedAccount) {
736
- (0, account_manager_1.touchAccount)(provider, usedAccount.id);
737
- }
185
+ await (0, auth_coordinator_1.ensureProviderAuthentication)(authCtx);
738
186
  }
739
187
  // 3b. Preflight quota check (providers with quota-based rotation)
740
188
  if (!skipLocalAuth) {
741
- // Multi-tier quota check for composite variants (check if any tier uses a managed provider)
742
- if (compositeProviders.length > 0) {
743
- for (const managedProvider of quota_manager_1.MANAGED_QUOTA_PROVIDERS) {
744
- if (compositeProviders.includes(managedProvider)) {
745
- await (0, retry_handler_1.handleQuotaCheck)(managedProvider);
746
- }
747
- }
748
- }
749
- else {
750
- await (0, retry_handler_1.handleQuotaCheck)(provider);
751
- }
189
+ await (0, auth_coordinator_1.runPreflightQuotaCheck)(provider, compositeProviders);
752
190
  }
753
191
  // 3c. Account safety: enforce cross-provider isolation
754
192
  if (!skipLocalAuth) {
755
- (0, account_safety_1.cleanupStaleAutoPauses)();
756
- const isolated = (0, account_safety_1.enforceProviderIsolation)(provider);
757
- if (isolated === 0) {
758
- // No enforcement — still warn about duplicates for awareness
759
- (0, account_safety_1.warnCrossProviderDuplicates)(provider);
760
- }
761
- else {
762
- // 'exit' handlers must be synchronous — restoreAutoPausedAccounts uses sync fs APIs
763
- process.on('exit', () => {
764
- (0, account_safety_1.restoreAutoPausedAccounts)(provider);
765
- });
766
- }
193
+ (0, auth_coordinator_1.runAccountSafetyGuards)(provider, compositeProviders);
767
194
  }
768
- // 4. First-run model configuration
769
- if (!cfg.isComposite && (0, model_catalog_1.supportsModelConfig)(provider) && !skipLocalAuth) {
770
- await (0, model_config_1.configureProviderModel)(provider, false, cfg.customSettingsPath);
195
+ // 4. First-run model configuration + codex plan reconcile
196
+ if (!skipLocalAuth) {
197
+ await (0, auth_coordinator_1.ensureModelConfiguration)(provider, cfg, verbose);
771
198
  }
772
199
  // 5. Check for broken models (multi-tier for composite)
773
- if (compositeProviders.length > 0 && cfg.compositeTiers) {
774
- // Check all tier models in composite variant
775
- const tiers = ['opus', 'sonnet', 'haiku'];
776
- for (const tier of tiers) {
777
- const tierConfig = cfg.compositeTiers[tier];
778
- if (tierConfig && (0, model_catalog_1.isModelBroken)(tierConfig.provider, tierConfig.model)) {
779
- const modelEntry = (0, model_catalog_1.findModel)(tierConfig.provider, tierConfig.model);
780
- const issueUrl = (0, model_catalog_1.getModelIssueUrl)(tierConfig.provider, tierConfig.model);
781
- console.error('');
782
- console.error((0, ui_1.warn)(`${tier} tier: ${modelEntry?.name || tierConfig.model} has known issues with Claude Code`));
783
- console.error(' Tool calls will fail. Consider changing the model in config.yaml.');
784
- if (issueUrl) {
785
- console.error(` Tracking: ${issueUrl}`);
786
- }
787
- console.error('');
788
- }
789
- }
790
- }
791
- else {
792
- const currentModel = (0, model_config_1.getCurrentModel)(provider, cfg.customSettingsPath);
793
- if (currentModel && (0, model_catalog_1.isModelBroken)(provider, currentModel)) {
794
- const modelEntry = (0, model_catalog_1.findModel)(provider, currentModel);
795
- const issueUrl = (0, model_catalog_1.getModelIssueUrl)(provider, currentModel);
796
- const replacementModel = (0, model_catalog_1.getSuggestedReplacementModel)(provider, currentModel);
797
- console.error('');
798
- console.error((0, ui_1.warn)(`${modelEntry?.name || currentModel} has known issues with Claude Code`));
799
- if (replacementModel) {
800
- console.error(` Tool calls will fail. Use "${replacementModel}" instead.`);
801
- }
802
- else {
803
- console.error(' Tool calls will fail. Consider changing the model in config.yaml.');
804
- }
805
- if (issueUrl) {
806
- console.error(` Tracking: ${issueUrl}`);
807
- }
808
- if (skipLocalAuth) {
809
- console.error(' Note: Model may be overridden by remote proxy configuration.');
810
- }
811
- else {
812
- console.error(` Run "ccs ${provider} --config" to change model.`);
813
- }
814
- console.error('');
815
- }
816
- }
200
+ (0, model_warnings_1.warnBrokenModels)({ provider, cfg, compositeProviders, skipLocalAuth });
817
201
  // 6. Ensure user settings file exists
818
- (0, config_generator_1.ensureProviderSettings)(provider);
819
- if (provider === 'codex' && !cfg.isComposite && !skipLocalAuth) {
820
- await (0, codex_plan_compatibility_1.reconcileCodexModelForActivePlan)({
821
- currentModel: (0, model_config_1.getCurrentModel)(provider, cfg.customSettingsPath),
822
- verbose,
823
- });
824
- }
202
+ (0, auth_coordinator_1.ensureProviderSettingsFile)(provider);
825
203
  // Local proxy mode: generate config, spawn/join proxy, track session
826
204
  let proxy = null;
827
205
  let configPath;
@@ -843,7 +221,7 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
843
221
  }
844
222
  }
845
223
  }
846
- // 8. Setup HTTPS tunnel if needed
224
+ // 8. Setup HTTPS tunnel if needed (tunnelPort used by imageAnalysisProxyTarget below)
847
225
  let httpsTunnel = null;
848
226
  let tunnelPort = null;
849
227
  const useHttpsTunnel = (0, https_tunnel_policy_1.shouldStartHttpsTunnel)({
@@ -907,9 +285,11 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
907
285
  const imageAnalysisWarning = imageAnalysisProvisioningFailed
908
286
  ? 'ImageAnalysis MCP provisioning failed. This session will use compatibility fallback when available.'
909
287
  : imageAnalysisResolution.warning;
910
- // 9. Setup tool sanitization proxy
288
+ // 9. Resolve config dir + browser runtime (needed before proxy chain)
911
289
  let toolSanitizationProxy = null;
912
290
  let toolSanitizationPort = null;
291
+ let codexReasoningProxy = null;
292
+ let codexReasoningPort = null;
913
293
  let inheritedClaudeConfigDir = cfg.claudeConfigDir;
914
294
  if (!inheritedClaudeConfigDir && cfg.profileName) {
915
295
  const continuityInheritance = await (0, profile_continuity_inheritance_1.resolveProfileContinuityInheritance)({
@@ -923,11 +303,8 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
923
303
  }
924
304
  }
925
305
  (0, image_analysis_1.syncImageAnalysisMcpToConfigDir)(inheritedClaudeConfigDir);
926
- if (browserRuntimeEnv &&
927
- inheritedClaudeConfigDir &&
928
- !(0, browser_1.syncBrowserMcpToConfigDir)(inheritedClaudeConfigDir)) {
929
- throw new Error('Browser MCP is enabled, but CCS could not sync the browser MCP config into the inherited Claude instance.');
930
- }
306
+ // Resolve browser attach runtime and sync browser MCP (needs inheritedClaudeConfigDir)
307
+ const { browserRuntimeEnv } = await (0, browser_launch_setup_1.resolveBrowserRuntime)(browserLaunchOverride, inheritedClaudeConfigDir);
931
308
  // Build initial env vars to get ANTHROPIC_BASE_URL
932
309
  const initialEnvVars = (0, env_resolver_1.buildClaudeEnvironment)({
933
310
  provider,
@@ -953,71 +330,19 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
953
330
  claudeConfigDir: inheritedClaudeConfigDir,
954
331
  imageAnalysisEnv,
955
332
  });
956
- if (initialEnvVars.ANTHROPIC_BASE_URL) {
957
- try {
958
- toolSanitizationProxy = new tool_sanitization_proxy_1.ToolSanitizationProxy({
959
- upstreamBaseUrl: initialEnvVars.ANTHROPIC_BASE_URL,
960
- verbose,
961
- warnOnSanitize: true,
962
- allowSelfSigned: useRemoteProxy ? (proxyConfig.allowSelfSigned ?? false) : false,
963
- });
964
- toolSanitizationPort = await toolSanitizationProxy.start();
965
- log(`Tool sanitization proxy active on port ${toolSanitizationPort}`);
966
- }
967
- catch (error) {
968
- const err = error;
969
- toolSanitizationProxy = null;
970
- toolSanitizationPort = null;
971
- if (verbose) {
972
- console.error((0, ui_1.warn)(`Tool sanitization proxy disabled: ${err.message}`));
973
- }
974
- }
975
- }
976
- const postSanitizationBaseUrl = toolSanitizationPort
977
- ? `http://127.0.0.1:${toolSanitizationPort}`
978
- : initialEnvVars.ANTHROPIC_BASE_URL;
979
- // 10. Setup Codex reasoning proxy (single-provider Codex only)
980
- let codexReasoningProxy = null;
981
- let codexReasoningPort = null;
982
- // Composite variants require root model-routed endpoints, never provider-pinned codex endpoints.
983
- if (provider === 'codex' && !cfg.isComposite) {
984
- if (!postSanitizationBaseUrl) {
985
- log('ANTHROPIC_BASE_URL not set for Codex, reasoning proxy disabled');
986
- }
987
- else {
988
- try {
989
- const traceEnabled = process.env.CCS_CODEX_REASONING_TRACE === '1' ||
990
- process.env.CCS_CODEX_REASONING_TRACE === 'true';
991
- const stripPathPrefix = useRemoteProxy ? '/api/provider/codex' : undefined;
992
- const codexThinkingOff = (0, thinking_override_resolver_1.shouldDisableCodexReasoning)(thinkingCfg, thinkingOverride);
993
- codexReasoningProxy = new codex_reasoning_proxy_1.CodexReasoningProxy({
994
- upstreamBaseUrl: postSanitizationBaseUrl,
995
- verbose,
996
- defaultEffort: 'medium',
997
- disableEffort: codexThinkingOff,
998
- traceFilePath: traceEnabled ? path.join((0, config_manager_1.getCcsDir)(), 'codex-reasoning-proxy.log') : '',
999
- allowSelfSigned: useRemoteProxy ? (proxyConfig.allowSelfSigned ?? false) : false,
1000
- modelMap: {
1001
- defaultModel: initialEnvVars.ANTHROPIC_MODEL,
1002
- opusModel: initialEnvVars.ANTHROPIC_DEFAULT_OPUS_MODEL,
1003
- sonnetModel: initialEnvVars.ANTHROPIC_DEFAULT_SONNET_MODEL,
1004
- haikuModel: initialEnvVars.ANTHROPIC_DEFAULT_HAIKU_MODEL,
1005
- },
1006
- stripPathPrefix,
1007
- });
1008
- codexReasoningPort = await codexReasoningProxy.start();
1009
- log(`Codex reasoning proxy active: http://127.0.0.1:${codexReasoningPort}/api/provider/codex`);
1010
- }
1011
- catch (error) {
1012
- const err = error;
1013
- codexReasoningProxy = null;
1014
- codexReasoningPort = null;
1015
- if (verbose) {
1016
- console.error((0, ui_1.warn)(`Codex reasoning proxy disabled: ${err.message}`));
1017
- }
1018
- }
1019
- }
1020
- }
333
+ // 9b. Build env-dependent proxy chain (tool-sanitization + codex-reasoning)
334
+ ({ toolSanitizationProxy, toolSanitizationPort, codexReasoningProxy, codexReasoningPort } =
335
+ await (0, proxy_chain_builder_1.buildProxyChain)({
336
+ provider,
337
+ useRemoteProxy,
338
+ proxyConfig,
339
+ cfg,
340
+ initialEnvVars,
341
+ thinkingOverride,
342
+ thinkingCfg,
343
+ verbose,
344
+ log,
345
+ }));
1021
346
  // 11. Build final environment with all proxy chains
1022
347
  const env = (0, env_resolver_1.buildClaudeEnvironment)({
1023
348
  provider,
@@ -1073,122 +398,41 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
1073
398
  const { thinkingLabel, sourceLabel } = (0, thinking_override_resolver_1.buildThinkingStartupStatus)(thinkingCfg, thinkingOverride, thinkingSource, thinkingParse.sourceDisplay);
1074
399
  console.error(`[i] Thinking: ${thinkingLabel} (${sourceLabel})`);
1075
400
  }
1076
- // 12. Filter CCS-specific flags before passing to Claude CLI
1077
- const ccsFlags = [
1078
- '--auth',
1079
- '--paste-callback',
1080
- '--port-forward',
1081
- '--headless',
1082
- '--logout',
1083
- '--config',
1084
- '--add',
1085
- '--accounts',
1086
- '--use',
1087
- '--nickname',
1088
- '--kiro-auth-method',
1089
- '--kiro-idc-start-url',
1090
- '--kiro-idc-region',
1091
- '--kiro-idc-flow',
1092
- '--thinking',
1093
- '--effort',
1094
- '--1m',
1095
- '--no-1m',
1096
- '--incognito',
1097
- '--no-incognito',
1098
- '--import',
1099
- '--accept-agr-risk',
1100
- '--accept-antigravity-risk',
1101
- '--settings',
1102
- ...proxy_config_resolver_1.PROXY_CLI_FLAGS,
1103
- ];
1104
- const claudeArgs = argsWithoutBrowserFlags.filter((arg, idx) => {
1105
- if (ccsFlags.includes(arg))
1106
- return false;
1107
- if (arg.startsWith('--kiro-auth-method='))
1108
- return false;
1109
- if (arg.startsWith('--kiro-idc-start-url='))
1110
- return false;
1111
- if (arg.startsWith('--kiro-idc-region='))
1112
- return false;
1113
- if (arg.startsWith('--kiro-idc-flow='))
1114
- return false;
1115
- if (arg.startsWith('--thinking='))
1116
- return false;
1117
- if (arg.startsWith('--effort='))
1118
- return false;
1119
- if (arg.startsWith('--1m=') || arg.startsWith('--no-1m='))
1120
- return false;
1121
- if (argsWithoutBrowserFlags[idx - 1] === '--use' ||
1122
- argsWithoutBrowserFlags[idx - 1] === '--nickname' ||
1123
- argsWithoutBrowserFlags[idx - 1] === '--kiro-auth-method' ||
1124
- argsWithoutBrowserFlags[idx - 1] === '--kiro-idc-start-url' ||
1125
- argsWithoutBrowserFlags[idx - 1] === '--kiro-idc-region' ||
1126
- argsWithoutBrowserFlags[idx - 1] === '--kiro-idc-flow' ||
1127
- argsWithoutBrowserFlags[idx - 1] === '--thinking' ||
1128
- argsWithoutBrowserFlags[idx - 1] === '--effort')
1129
- return false;
1130
- return true;
1131
- });
1132
- const isWindows = process.platform === 'win32';
1133
- const needsShell = isWindows && /\.(cmd|bat|ps1)$/i.test(claudeCli);
1134
- const settingsPath = cfg.customSettingsPath
1135
- ? cfg.customSettingsPath.replace(/^~/, os.homedir())
1136
- : (0, config_generator_1.getProviderSettingsPath)(provider);
1137
- let claude;
1138
- const imageAnalysisArgs = imageAnalysisMcpReady
1139
- ? (0, image_analysis_1.appendThirdPartyImageAnalysisToolArgs)(claudeArgs)
1140
- : claudeArgs;
1141
- const browserArgs = browserRuntimeEnv
1142
- ? (0, browser_1.appendBrowserToolArgs)(imageAnalysisArgs)
1143
- : imageAnalysisArgs;
1144
- const launchArgs = [
1145
- '--settings',
1146
- settingsPath,
1147
- ...(0, websearch_manager_1.appendThirdPartyWebSearchToolArgs)(browserArgs),
1148
- ];
1149
- const traceEnv = (0, websearch_manager_1.createWebSearchTraceContext)({
1150
- launcher: 'cliproxy.executor',
1151
- args: launchArgs,
1152
- profile: cfg.profileName || provider,
1153
- profileType: 'cliproxy',
1154
- settingsPath,
1155
- claudeConfigDir: inheritedClaudeConfigDir,
401
+ // 12. Filter CCS flags, spawn Claude CLI, start quota monitor, wire cleanup
402
+ const claudeArgs = (0, arg_parser_1.filterCcsFlags)(argsWithoutBrowserFlags);
403
+ await (0, claude_launcher_1.launchClaude)({
404
+ claudeCli,
405
+ claudeArgs,
406
+ env,
407
+ cfg,
408
+ provider,
409
+ compositeProviders,
410
+ skipLocalAuth,
411
+ sessionId,
412
+ imageAnalysisMcpReady,
413
+ browserRuntimeEnv,
414
+ inheritedClaudeConfigDir,
415
+ codexReasoningProxy,
416
+ toolSanitizationProxy,
417
+ httpsTunnel,
418
+ verbose,
1156
419
  });
1157
- const tracedEnv = { ...env, ...traceEnv };
1158
- if (needsShell) {
1159
- const cmdString = [claudeCli, ...launchArgs].map(shell_executor_1.escapeShellArg).join(' ');
1160
- claude = (0, child_process_1.spawn)(cmdString, {
1161
- stdio: 'inherit',
1162
- windowsHide: true,
1163
- shell: (0, shell_executor_1.getWindowsEscapedCommandShell)(),
1164
- env: tracedEnv,
1165
- });
1166
- }
1167
- else {
1168
- claude = (0, child_process_1.spawn)(claudeCli, launchArgs, {
1169
- stdio: 'inherit',
1170
- windowsHide: true,
1171
- env: tracedEnv,
1172
- });
1173
- }
1174
- // 12b. Start runtime quota monitor (adaptive polling during session)
1175
- if (!skipLocalAuth) {
1176
- const { startQuotaMonitor } = await Promise.resolve().then(() => __importStar(require('../quota/quota-manager')));
1177
- for (const monitorProvider of resolveRuntimeQuotaMonitorProviders(provider, compositeProviders)) {
1178
- const monitorAccount = (0, account_manager_1.getDefaultAccount)(monitorProvider);
1179
- if (monitorAccount) {
1180
- startQuotaMonitor(monitorProvider, monitorAccount.id);
1181
- }
1182
- }
1183
- }
1184
- // 13. Setup cleanup handlers
1185
- (0, session_bridge_1.setupCleanupHandlers)(claude, sessionId, cfg.port, codexReasoningProxy, toolSanitizationProxy, httpsTunnel, verbose);
1186
420
  }
1187
421
  exports.execClaudeWithCLIProxy = execClaudeWithCLIProxy;
1188
422
  // Re-export utility functions for backwards compatibility
1189
423
  var lifecycle_manager_2 = require("./lifecycle-manager");
1190
424
  Object.defineProperty(exports, "isPortAvailable", { enumerable: true, get: function () { return lifecycle_manager_2.isPortAvailable; } });
1191
425
  Object.defineProperty(exports, "findAvailablePort", { enumerable: true, get: function () { return lifecycle_manager_2.findAvailablePort; } });
426
+ // Re-export arg-parser helpers (previously inlined here; external callers can
427
+ // import from index or directly from ./arg-parser)
428
+ var arg_parser_2 = require("./arg-parser");
429
+ Object.defineProperty(exports, "readOptionValue", { enumerable: true, get: function () { return arg_parser_2.readOptionValue; } });
430
+ Object.defineProperty(exports, "hasGitLabTokenLoginFlag", { enumerable: true, get: function () { return arg_parser_2.hasGitLabTokenLoginFlag; } });
431
+ Object.defineProperty(exports, "CCS_FLAGS", { enumerable: true, get: function () { return arg_parser_2.CCS_FLAGS; } });
432
+ Object.defineProperty(exports, "filterCcsFlags", { enumerable: true, get: function () { return arg_parser_2.filterCcsFlags; } });
433
+ // Re-export account-resolution helpers for backwards compat with __testExports consumers
434
+ var account_resolution_2 = require("./account-resolution");
435
+ Object.defineProperty(exports, "_resolveRuntimeQuotaMonitorProviders", { enumerable: true, get: function () { return account_resolution_2.resolveRuntimeQuotaMonitorProviders; } });
1192
436
  exports.__testExports = {
1193
437
  resolveRuntimeQuotaMonitorProviders,
1194
438
  };