@jonnyhoo/ccs 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1033) hide show
  1. package/.claude/skills/ccs-delegation/SKILL.md +7 -7
  2. package/.claude/skills/ccs-delegation/references/troubleshooting.md +20 -20
  3. package/config/base-codex.settings.json +3 -3
  4. package/dist/api/services/index.d.ts +1 -1
  5. package/dist/api/services/index.d.ts.map +1 -1
  6. package/dist/api/services/index.js.map +1 -1
  7. package/dist/api/services/profile-reader.d.ts.map +1 -1
  8. package/dist/api/services/profile-reader.js +1 -21
  9. package/dist/api/services/profile-reader.js.map +1 -1
  10. package/dist/api/services/profile-types.d.ts +0 -7
  11. package/dist/api/services/profile-types.d.ts.map +1 -1
  12. package/dist/api/services/profile-writer.d.ts +1 -1
  13. package/dist/api/services/profile-writer.d.ts.map +1 -1
  14. package/dist/api/services/profile-writer.js +14 -11
  15. package/dist/api/services/profile-writer.js.map +1 -1
  16. package/dist/api/services/validation-service.d.ts.map +1 -1
  17. package/dist/api/services/validation-service.js +44 -3
  18. package/dist/api/services/validation-service.js.map +1 -1
  19. package/dist/ccs.js +263 -451
  20. package/dist/ccs.js.map +1 -1
  21. package/dist/commands/api-command.d.ts.map +1 -1
  22. package/dist/commands/api-command.js +22 -21
  23. package/dist/commands/api-command.js.map +1 -1
  24. package/dist/config/index.d.ts +1 -3
  25. package/dist/config/index.d.ts.map +1 -1
  26. package/dist/config/index.js +2 -6
  27. package/dist/config/index.js.map +1 -1
  28. package/dist/config/profile-detector.d.ts +64 -0
  29. package/dist/config/profile-detector.d.ts.map +1 -0
  30. package/dist/config/profile-detector.js +220 -0
  31. package/dist/config/profile-detector.js.map +1 -0
  32. package/dist/config/unified-config-loader.d.ts +3 -96
  33. package/dist/config/unified-config-loader.d.ts.map +1 -1
  34. package/dist/config/unified-config-loader.js +42 -474
  35. package/dist/config/unified-config-loader.js.map +1 -1
  36. package/dist/config/unified-config-types.d.ts +21 -489
  37. package/dist/config/unified-config-types.d.ts.map +1 -1
  38. package/dist/config/unified-config-types.js +8 -172
  39. package/dist/config/unified-config-types.js.map +1 -1
  40. package/dist/delegation/background-monitor.d.ts +80 -0
  41. package/dist/delegation/background-monitor.d.ts.map +1 -0
  42. package/dist/delegation/background-monitor.js +300 -0
  43. package/dist/delegation/background-monitor.js.map +1 -0
  44. package/dist/delegation/delegation-handler.d.ts +2 -1
  45. package/dist/delegation/delegation-handler.d.ts.map +1 -1
  46. package/dist/delegation/delegation-handler.js +48 -30
  47. package/dist/delegation/delegation-handler.js.map +1 -1
  48. package/dist/delegation/executor/types.d.ts +2 -0
  49. package/dist/delegation/executor/types.d.ts.map +1 -1
  50. package/dist/delegation/headless-executor.d.ts +3 -0
  51. package/dist/delegation/headless-executor.d.ts.map +1 -1
  52. package/dist/delegation/headless-executor.js +162 -14
  53. package/dist/delegation/headless-executor.js.map +1 -1
  54. package/dist/delegation/result-formatter.d.ts +1 -29
  55. package/dist/delegation/result-formatter.d.ts.map +1 -1
  56. package/dist/delegation/result-formatter.js +3 -188
  57. package/dist/delegation/result-formatter.js.map +1 -1
  58. package/dist/{cliproxy → proxy}/anthropic-to-openai-proxy.d.ts +17 -1
  59. package/dist/proxy/anthropic-to-openai-proxy.d.ts.map +1 -0
  60. package/dist/proxy/anthropic-to-openai-proxy.js +1708 -0
  61. package/dist/proxy/anthropic-to-openai-proxy.js.map +1 -0
  62. package/dist/proxy/cliproxy-autostart.d.ts +28 -0
  63. package/dist/proxy/cliproxy-autostart.d.ts.map +1 -0
  64. package/dist/proxy/cliproxy-autostart.js +226 -0
  65. package/dist/proxy/cliproxy-autostart.js.map +1 -0
  66. package/dist/proxy/tool-name-mapper.d.ts.map +1 -0
  67. package/dist/{cliproxy → proxy}/tool-name-mapper.js +13 -6
  68. package/dist/proxy/tool-name-mapper.js.map +1 -0
  69. package/dist/{cliproxy → proxy}/tool-name-sanitizer.d.ts +17 -21
  70. package/dist/proxy/tool-name-sanitizer.d.ts.map +1 -0
  71. package/dist/{cliproxy → proxy}/tool-name-sanitizer.js +46 -33
  72. package/dist/proxy/tool-name-sanitizer.js.map +1 -0
  73. package/dist/proxy/tool-sanitization-proxy.d.ts.map +1 -0
  74. package/dist/{cliproxy → proxy}/tool-sanitization-proxy.js +22 -2
  75. package/dist/proxy/tool-sanitization-proxy.js.map +1 -0
  76. package/dist/types/config.d.ts +0 -24
  77. package/dist/types/config.d.ts.map +1 -1
  78. package/dist/types/config.js.map +1 -1
  79. package/dist/types/index.d.ts +1 -2
  80. package/dist/types/index.d.ts.map +1 -1
  81. package/dist/types/index.js.map +1 -1
  82. package/dist/utils/config-manager.d.ts +0 -27
  83. package/dist/utils/config-manager.d.ts.map +1 -1
  84. package/dist/utils/config-manager.js +4 -65
  85. package/dist/utils/config-manager.js.map +1 -1
  86. package/dist/utils/delegation-validator.d.ts.map +1 -1
  87. package/dist/utils/delegation-validator.js +0 -11
  88. package/dist/utils/delegation-validator.js.map +1 -1
  89. package/dist/utils/error-manager.d.ts +0 -28
  90. package/dist/utils/error-manager.d.ts.map +1 -1
  91. package/dist/utils/error-manager.js +6 -105
  92. package/dist/utils/error-manager.js.map +1 -1
  93. package/dist/utils/helpers.js +1 -1
  94. package/dist/utils/helpers.js.map +1 -1
  95. package/dist/utils/index.d.ts +0 -5
  96. package/dist/utils/index.d.ts.map +1 -1
  97. package/dist/utils/index.js +3 -17
  98. package/dist/utils/index.js.map +1 -1
  99. package/dist/utils/shell-executor.d.ts.map +1 -1
  100. package/dist/utils/shell-executor.js +3 -9
  101. package/dist/utils/shell-executor.js.map +1 -1
  102. package/dist/utils/ui/index.d.ts +0 -4
  103. package/dist/utils/ui/index.d.ts.map +1 -1
  104. package/dist/utils/ui/index.js +1 -5
  105. package/dist/utils/ui/index.js.map +1 -1
  106. package/dist/utils/ui/init.d.ts.map +1 -1
  107. package/dist/utils/ui/init.js +1 -3
  108. package/dist/utils/ui/init.js.map +1 -1
  109. package/dist/utils/ui.d.ts +1 -2
  110. package/dist/utils/ui.d.ts.map +1 -1
  111. package/dist/utils/ui.js +2 -2
  112. package/dist/utils/ui.js.map +1 -1
  113. package/package.json +3 -29
  114. package/scripts/background-redis-bridge.js +320 -0
  115. package/scripts/dev-install.sh +2 -1
  116. package/scripts/monitor-task.js +313 -0
  117. package/dist/auth/auth-commands.d.ts +0 -62
  118. package/dist/auth/auth-commands.d.ts.map +0 -1
  119. package/dist/auth/auth-commands.js +0 -191
  120. package/dist/auth/auth-commands.js.map +0 -1
  121. package/dist/auth/commands/create-command.d.ts +0 -11
  122. package/dist/auth/commands/create-command.d.ts.map +0 -1
  123. package/dist/auth/commands/create-command.js +0 -137
  124. package/dist/auth/commands/create-command.js.map +0 -1
  125. package/dist/auth/commands/default-command.d.ts +0 -15
  126. package/dist/auth/commands/default-command.d.ts.map +0 -1
  127. package/dist/auth/commands/default-command.js +0 -71
  128. package/dist/auth/commands/default-command.js.map +0 -1
  129. package/dist/auth/commands/index.d.ts +0 -12
  130. package/dist/auth/commands/index.d.ts.map +0 -1
  131. package/dist/auth/commands/index.js +0 -25
  132. package/dist/auth/commands/index.js.map +0 -1
  133. package/dist/auth/commands/list-command.d.ts +0 -11
  134. package/dist/auth/commands/list-command.d.ts.map +0 -1
  135. package/dist/auth/commands/list-command.js +0 -124
  136. package/dist/auth/commands/list-command.js.map +0 -1
  137. package/dist/auth/commands/remove-command.d.ts +0 -11
  138. package/dist/auth/commands/remove-command.d.ts.map +0 -1
  139. package/dist/auth/commands/remove-command.js +0 -102
  140. package/dist/auth/commands/remove-command.js.map +0 -1
  141. package/dist/auth/commands/show-command.d.ts +0 -11
  142. package/dist/auth/commands/show-command.d.ts.map +0 -1
  143. package/dist/auth/commands/show-command.js +0 -103
  144. package/dist/auth/commands/show-command.js.map +0 -1
  145. package/dist/auth/commands/types.d.ts +0 -50
  146. package/dist/auth/commands/types.d.ts.map +0 -1
  147. package/dist/auth/commands/types.js +0 -26
  148. package/dist/auth/commands/types.js.map +0 -1
  149. package/dist/auth/index.d.ts +0 -8
  150. package/dist/auth/index.d.ts.map +0 -1
  151. package/dist/auth/index.js +0 -16
  152. package/dist/auth/index.js.map +0 -1
  153. package/dist/auth/profile-detector.d.ts +0 -106
  154. package/dist/auth/profile-detector.d.ts.map +0 -1
  155. package/dist/auth/profile-detector.js +0 -431
  156. package/dist/auth/profile-detector.js.map +0 -1
  157. package/dist/auth/profile-registry.d.ts +0 -110
  158. package/dist/auth/profile-registry.d.ts.map +0 -1
  159. package/dist/auth/profile-registry.js +0 -318
  160. package/dist/auth/profile-registry.js.map +0 -1
  161. package/dist/cliproxy/account-manager.d.ts +0 -218
  162. package/dist/cliproxy/account-manager.d.ts.map +0 -1
  163. package/dist/cliproxy/account-manager.js +0 -808
  164. package/dist/cliproxy/account-manager.js.map +0 -1
  165. package/dist/cliproxy/anthropic-to-openai-proxy.d.ts.map +0 -1
  166. package/dist/cliproxy/anthropic-to-openai-proxy.js +0 -856
  167. package/dist/cliproxy/anthropic-to-openai-proxy.js.map +0 -1
  168. package/dist/cliproxy/auth/auth-types.d.ts +0 -106
  169. package/dist/cliproxy/auth/auth-types.d.ts.map +0 -1
  170. package/dist/cliproxy/auth/auth-types.js +0 -164
  171. package/dist/cliproxy/auth/auth-types.js.map +0 -1
  172. package/dist/cliproxy/auth/environment-detector.d.ts +0 -30
  173. package/dist/cliproxy/auth/environment-detector.d.ts.map +0 -1
  174. package/dist/cliproxy/auth/environment-detector.js +0 -129
  175. package/dist/cliproxy/auth/environment-detector.js.map +0 -1
  176. package/dist/cliproxy/auth/gemini-token-refresh.d.ts +0 -38
  177. package/dist/cliproxy/auth/gemini-token-refresh.d.ts.map +0 -1
  178. package/dist/cliproxy/auth/gemini-token-refresh.js +0 -327
  179. package/dist/cliproxy/auth/gemini-token-refresh.js.map +0 -1
  180. package/dist/cliproxy/auth/index.d.ts +0 -11
  181. package/dist/cliproxy/auth/index.d.ts.map +0 -1
  182. package/dist/cliproxy/auth/index.js +0 -35
  183. package/dist/cliproxy/auth/index.js.map +0 -1
  184. package/dist/cliproxy/auth/kiro-import.d.ts +0 -23
  185. package/dist/cliproxy/auth/kiro-import.d.ts.map +0 -1
  186. package/dist/cliproxy/auth/kiro-import.js +0 -140
  187. package/dist/cliproxy/auth/kiro-import.js.map +0 -1
  188. package/dist/cliproxy/auth/oauth-handler.d.ts +0 -31
  189. package/dist/cliproxy/auth/oauth-handler.d.ts.map +0 -1
  190. package/dist/cliproxy/auth/oauth-handler.js +0 -422
  191. package/dist/cliproxy/auth/oauth-handler.js.map +0 -1
  192. package/dist/cliproxy/auth/oauth-process.d.ts +0 -27
  193. package/dist/cliproxy/auth/oauth-process.d.ts.map +0 -1
  194. package/dist/cliproxy/auth/oauth-process.js +0 -386
  195. package/dist/cliproxy/auth/oauth-process.js.map +0 -1
  196. package/dist/cliproxy/auth/provider-refreshers/index.d.ts +0 -21
  197. package/dist/cliproxy/auth/provider-refreshers/index.d.ts.map +0 -1
  198. package/dist/cliproxy/auth/provider-refreshers/index.js +0 -57
  199. package/dist/cliproxy/auth/provider-refreshers/index.js.map +0 -1
  200. package/dist/cliproxy/auth/token-expiry-checker.d.ts +0 -37
  201. package/dist/cliproxy/auth/token-expiry-checker.d.ts.map +0 -1
  202. package/dist/cliproxy/auth/token-expiry-checker.js +0 -115
  203. package/dist/cliproxy/auth/token-expiry-checker.js.map +0 -1
  204. package/dist/cliproxy/auth/token-manager.d.ts +0 -66
  205. package/dist/cliproxy/auth/token-manager.d.ts.map +0 -1
  206. package/dist/cliproxy/auth/token-manager.js +0 -309
  207. package/dist/cliproxy/auth/token-manager.js.map +0 -1
  208. package/dist/cliproxy/auth/token-refresh-config.d.ts +0 -13
  209. package/dist/cliproxy/auth/token-refresh-config.d.ts.map +0 -1
  210. package/dist/cliproxy/auth/token-refresh-config.js +0 -31
  211. package/dist/cliproxy/auth/token-refresh-config.js.map +0 -1
  212. package/dist/cliproxy/auth/token-refresh-worker.d.ts +0 -83
  213. package/dist/cliproxy/auth/token-refresh-worker.d.ts.map +0 -1
  214. package/dist/cliproxy/auth/token-refresh-worker.js +0 -214
  215. package/dist/cliproxy/auth/token-refresh-worker.js.map +0 -1
  216. package/dist/cliproxy/auth-handler.d.ts +0 -31
  217. package/dist/cliproxy/auth-handler.d.ts.map +0 -1
  218. package/dist/cliproxy/auth-handler.js +0 -60
  219. package/dist/cliproxy/auth-handler.js.map +0 -1
  220. package/dist/cliproxy/auth-session-manager.d.ts +0 -51
  221. package/dist/cliproxy/auth-session-manager.d.ts.map +0 -1
  222. package/dist/cliproxy/auth-session-manager.js +0 -134
  223. package/dist/cliproxy/auth-session-manager.js.map +0 -1
  224. package/dist/cliproxy/auth-token-manager.d.ts +0 -82
  225. package/dist/cliproxy/auth-token-manager.d.ts.map +0 -1
  226. package/dist/cliproxy/auth-token-manager.js +0 -187
  227. package/dist/cliproxy/auth-token-manager.js.map +0 -1
  228. package/dist/cliproxy/auth-utils.d.ts +0 -16
  229. package/dist/cliproxy/auth-utils.d.ts.map +0 -1
  230. package/dist/cliproxy/auth-utils.js +0 -33
  231. package/dist/cliproxy/auth-utils.js.map +0 -1
  232. package/dist/cliproxy/base-config-loader.d.ts +0 -42
  233. package/dist/cliproxy/base-config-loader.d.ts.map +0 -1
  234. package/dist/cliproxy/base-config-loader.js +0 -123
  235. package/dist/cliproxy/base-config-loader.js.map +0 -1
  236. package/dist/cliproxy/binary/downloader.d.ts +0 -42
  237. package/dist/cliproxy/binary/downloader.d.ts.map +0 -1
  238. package/dist/cliproxy/binary/downloader.js +0 -407
  239. package/dist/cliproxy/binary/downloader.js.map +0 -1
  240. package/dist/cliproxy/binary/extractor.d.ts +0 -12
  241. package/dist/cliproxy/binary/extractor.d.ts.map +0 -1
  242. package/dist/cliproxy/binary/extractor.js +0 -28
  243. package/dist/cliproxy/binary/extractor.js.map +0 -1
  244. package/dist/cliproxy/binary/index.d.ts +0 -13
  245. package/dist/cliproxy/binary/index.d.ts.map +0 -1
  246. package/dist/cliproxy/binary/index.js +0 -54
  247. package/dist/cliproxy/binary/index.js.map +0 -1
  248. package/dist/cliproxy/binary/installer.d.ts +0 -25
  249. package/dist/cliproxy/binary/installer.d.ts.map +0 -1
  250. package/dist/cliproxy/binary/installer.js +0 -129
  251. package/dist/cliproxy/binary/installer.js.map +0 -1
  252. package/dist/cliproxy/binary/lifecycle.d.ts +0 -11
  253. package/dist/cliproxy/binary/lifecycle.d.ts.map +0 -1
  254. package/dist/cliproxy/binary/lifecycle.js +0 -150
  255. package/dist/cliproxy/binary/lifecycle.js.map +0 -1
  256. package/dist/cliproxy/binary/tar-extractor.d.ts +0 -10
  257. package/dist/cliproxy/binary/tar-extractor.d.ts.map +0 -1
  258. package/dist/cliproxy/binary/tar-extractor.js +0 -118
  259. package/dist/cliproxy/binary/tar-extractor.js.map +0 -1
  260. package/dist/cliproxy/binary/types.d.ts +0 -49
  261. package/dist/cliproxy/binary/types.d.ts.map +0 -1
  262. package/dist/cliproxy/binary/types.js +0 -32
  263. package/dist/cliproxy/binary/types.js.map +0 -1
  264. package/dist/cliproxy/binary/updater.d.ts +0 -7
  265. package/dist/cliproxy/binary/updater.d.ts.map +0 -1
  266. package/dist/cliproxy/binary/updater.js +0 -18
  267. package/dist/cliproxy/binary/updater.js.map +0 -1
  268. package/dist/cliproxy/binary/verifier.d.ts +0 -18
  269. package/dist/cliproxy/binary/verifier.d.ts.map +0 -1
  270. package/dist/cliproxy/binary/verifier.js +0 -82
  271. package/dist/cliproxy/binary/verifier.js.map +0 -1
  272. package/dist/cliproxy/binary/version-cache.d.ts +0 -64
  273. package/dist/cliproxy/binary/version-cache.d.ts.map +0 -1
  274. package/dist/cliproxy/binary/version-cache.js +0 -239
  275. package/dist/cliproxy/binary/version-cache.js.map +0 -1
  276. package/dist/cliproxy/binary/version-checker.d.ts +0 -36
  277. package/dist/cliproxy/binary/version-checker.d.ts.map +0 -1
  278. package/dist/cliproxy/binary/version-checker.js +0 -135
  279. package/dist/cliproxy/binary/version-checker.js.map +0 -1
  280. package/dist/cliproxy/binary/zip-extractor.d.ts +0 -10
  281. package/dist/cliproxy/binary/zip-extractor.d.ts.map +0 -1
  282. package/dist/cliproxy/binary/zip-extractor.js +0 -110
  283. package/dist/cliproxy/binary/zip-extractor.js.map +0 -1
  284. package/dist/cliproxy/binary-manager.d.ts +0 -59
  285. package/dist/cliproxy/binary-manager.d.ts.map +0 -1
  286. package/dist/cliproxy/binary-manager.js +0 -211
  287. package/dist/cliproxy/binary-manager.js.map +0 -1
  288. package/dist/cliproxy/cliproxy-executor.d.ts +0 -33
  289. package/dist/cliproxy/cliproxy-executor.d.ts.map +0 -1
  290. package/dist/cliproxy/cliproxy-executor.js +0 -1228
  291. package/dist/cliproxy/cliproxy-executor.js.map +0 -1
  292. package/dist/cliproxy/codex-reasoning-proxy.d.ts +0 -54
  293. package/dist/cliproxy/codex-reasoning-proxy.d.ts.map +0 -1
  294. package/dist/cliproxy/codex-reasoning-proxy.js +0 -373
  295. package/dist/cliproxy/codex-reasoning-proxy.js.map +0 -1
  296. package/dist/cliproxy/config-generator.d.ts +0 -236
  297. package/dist/cliproxy/config-generator.d.ts.map +0 -1
  298. package/dist/cliproxy/config-generator.js +0 -932
  299. package/dist/cliproxy/config-generator.js.map +0 -1
  300. package/dist/cliproxy/device-code-handler.d.ts +0 -28
  301. package/dist/cliproxy/device-code-handler.d.ts.map +0 -1
  302. package/dist/cliproxy/device-code-handler.js +0 -22
  303. package/dist/cliproxy/device-code-handler.js.map +0 -1
  304. package/dist/cliproxy/endpoint-setup.d.ts +0 -44
  305. package/dist/cliproxy/endpoint-setup.d.ts.map +0 -1
  306. package/dist/cliproxy/endpoint-setup.js +0 -299
  307. package/dist/cliproxy/endpoint-setup.js.map +0 -1
  308. package/dist/cliproxy/https-tunnel-proxy.d.ts +0 -44
  309. package/dist/cliproxy/https-tunnel-proxy.d.ts.map +0 -1
  310. package/dist/cliproxy/https-tunnel-proxy.js +0 -224
  311. package/dist/cliproxy/https-tunnel-proxy.js.map +0 -1
  312. package/dist/cliproxy/index.d.ts +0 -41
  313. package/dist/cliproxy/index.d.ts.map +0 -1
  314. package/dist/cliproxy/index.js +0 -152
  315. package/dist/cliproxy/index.js.map +0 -1
  316. package/dist/cliproxy/management-api-client.d.ts +0 -67
  317. package/dist/cliproxy/management-api-client.d.ts.map +0 -1
  318. package/dist/cliproxy/management-api-client.js +0 -347
  319. package/dist/cliproxy/management-api-client.js.map +0 -1
  320. package/dist/cliproxy/management-api-types.d.ts +0 -107
  321. package/dist/cliproxy/management-api-types.d.ts.map +0 -1
  322. package/dist/cliproxy/management-api-types.js +0 -9
  323. package/dist/cliproxy/management-api-types.js.map +0 -1
  324. package/dist/cliproxy/model-catalog.d.ts +0 -108
  325. package/dist/cliproxy/model-catalog.d.ts.map +0 -1
  326. package/dist/cliproxy/model-catalog.js +0 -247
  327. package/dist/cliproxy/model-catalog.js.map +0 -1
  328. package/dist/cliproxy/model-config.d.ts +0 -31
  329. package/dist/cliproxy/model-config.d.ts.map +0 -1
  330. package/dist/cliproxy/model-config.js +0 -250
  331. package/dist/cliproxy/model-config.js.map +0 -1
  332. package/dist/cliproxy/openai-compat-manager.d.ts +0 -46
  333. package/dist/cliproxy/openai-compat-manager.d.ts.map +0 -1
  334. package/dist/cliproxy/openai-compat-manager.js +0 -191
  335. package/dist/cliproxy/openai-compat-manager.js.map +0 -1
  336. package/dist/cliproxy/platform-detector.d.ts +0 -99
  337. package/dist/cliproxy/platform-detector.d.ts.map +0 -1
  338. package/dist/cliproxy/platform-detector.js +0 -174
  339. package/dist/cliproxy/platform-detector.js.map +0 -1
  340. package/dist/cliproxy/project-selection-handler.d.ts +0 -105
  341. package/dist/cliproxy/project-selection-handler.d.ts.map +0 -1
  342. package/dist/cliproxy/project-selection-handler.js +0 -167
  343. package/dist/cliproxy/project-selection-handler.js.map +0 -1
  344. package/dist/cliproxy/proxy-config-resolver.d.ts +0 -86
  345. package/dist/cliproxy/proxy-config-resolver.d.ts.map +0 -1
  346. package/dist/cliproxy/proxy-config-resolver.js +0 -253
  347. package/dist/cliproxy/proxy-config-resolver.js.map +0 -1
  348. package/dist/cliproxy/proxy-detector.d.ts +0 -72
  349. package/dist/cliproxy/proxy-detector.d.ts.map +0 -1
  350. package/dist/cliproxy/proxy-detector.js +0 -196
  351. package/dist/cliproxy/proxy-detector.js.map +0 -1
  352. package/dist/cliproxy/proxy-target-resolver.d.ts +0 -50
  353. package/dist/cliproxy/proxy-target-resolver.d.ts.map +0 -1
  354. package/dist/cliproxy/proxy-target-resolver.js +0 -105
  355. package/dist/cliproxy/proxy-target-resolver.js.map +0 -1
  356. package/dist/cliproxy/quota-fetcher-codex.d.ts +0 -66
  357. package/dist/cliproxy/quota-fetcher-codex.d.ts.map +0 -1
  358. package/dist/cliproxy/quota-fetcher-codex.js +0 -315
  359. package/dist/cliproxy/quota-fetcher-codex.js.map +0 -1
  360. package/dist/cliproxy/quota-fetcher-gemini-cli.d.ts +0 -51
  361. package/dist/cliproxy/quota-fetcher-gemini-cli.d.ts.map +0 -1
  362. package/dist/cliproxy/quota-fetcher-gemini-cli.js +0 -492
  363. package/dist/cliproxy/quota-fetcher-gemini-cli.js.map +0 -1
  364. package/dist/cliproxy/quota-fetcher.d.ts +0 -95
  365. package/dist/cliproxy/quota-fetcher.d.ts.map +0 -1
  366. package/dist/cliproxy/quota-fetcher.js +0 -589
  367. package/dist/cliproxy/quota-fetcher.js.map +0 -1
  368. package/dist/cliproxy/quota-manager.d.ts +0 -88
  369. package/dist/cliproxy/quota-manager.d.ts.map +0 -1
  370. package/dist/cliproxy/quota-manager.js +0 -278
  371. package/dist/cliproxy/quota-manager.js.map +0 -1
  372. package/dist/cliproxy/quota-response-cache.d.ts +0 -46
  373. package/dist/cliproxy/quota-response-cache.d.ts.map +0 -1
  374. package/dist/cliproxy/quota-response-cache.js +0 -98
  375. package/dist/cliproxy/quota-response-cache.js.map +0 -1
  376. package/dist/cliproxy/quota-types.d.ts +0 -84
  377. package/dist/cliproxy/quota-types.d.ts.map +0 -1
  378. package/dist/cliproxy/quota-types.js +0 -9
  379. package/dist/cliproxy/quota-types.js.map +0 -1
  380. package/dist/cliproxy/remote-auth-fetcher.d.ts +0 -28
  381. package/dist/cliproxy/remote-auth-fetcher.d.ts.map +0 -1
  382. package/dist/cliproxy/remote-auth-fetcher.js +0 -117
  383. package/dist/cliproxy/remote-auth-fetcher.js.map +0 -1
  384. package/dist/cliproxy/remote-proxy-client.d.ts +0 -59
  385. package/dist/cliproxy/remote-proxy-client.d.ts.map +0 -1
  386. package/dist/cliproxy/remote-proxy-client.js +0 -278
  387. package/dist/cliproxy/remote-proxy-client.js.map +0 -1
  388. package/dist/cliproxy/remote-token-uploader.d.ts +0 -28
  389. package/dist/cliproxy/remote-token-uploader.d.ts.map +0 -1
  390. package/dist/cliproxy/remote-token-uploader.js +0 -178
  391. package/dist/cliproxy/remote-token-uploader.js.map +0 -1
  392. package/dist/cliproxy/service-manager.d.ts +0 -55
  393. package/dist/cliproxy/service-manager.d.ts.map +0 -1
  394. package/dist/cliproxy/service-manager.js +0 -327
  395. package/dist/cliproxy/service-manager.js.map +0 -1
  396. package/dist/cliproxy/services/binary-service.d.ts +0 -67
  397. package/dist/cliproxy/services/binary-service.d.ts.map +0 -1
  398. package/dist/cliproxy/services/binary-service.js +0 -176
  399. package/dist/cliproxy/services/binary-service.js.map +0 -1
  400. package/dist/cliproxy/services/index.d.ts +0 -8
  401. package/dist/cliproxy/services/index.d.ts.map +0 -1
  402. package/dist/cliproxy/services/index.js +0 -31
  403. package/dist/cliproxy/services/index.js.map +0 -1
  404. package/dist/cliproxy/services/proxy-lifecycle-service.d.ts +0 -38
  405. package/dist/cliproxy/services/proxy-lifecycle-service.d.ts.map +0 -1
  406. package/dist/cliproxy/services/proxy-lifecycle-service.js +0 -41
  407. package/dist/cliproxy/services/proxy-lifecycle-service.js.map +0 -1
  408. package/dist/cliproxy/services/variant-config-adapter.d.ts +0 -48
  409. package/dist/cliproxy/services/variant-config-adapter.d.ts.map +0 -1
  410. package/dist/cliproxy/services/variant-config-adapter.js +0 -215
  411. package/dist/cliproxy/services/variant-config-adapter.js.map +0 -1
  412. package/dist/cliproxy/services/variant-service.d.ts +0 -52
  413. package/dist/cliproxy/services/variant-service.d.ts.map +0 -1
  414. package/dist/cliproxy/services/variant-service.js +0 -218
  415. package/dist/cliproxy/services/variant-service.js.map +0 -1
  416. package/dist/cliproxy/services/variant-settings.d.ts +0 -37
  417. package/dist/cliproxy/services/variant-settings.d.ts.map +0 -1
  418. package/dist/cliproxy/services/variant-settings.js +0 -168
  419. package/dist/cliproxy/services/variant-settings.js.map +0 -1
  420. package/dist/cliproxy/session-tracker.d.ts +0 -100
  421. package/dist/cliproxy/session-tracker.d.ts.map +0 -1
  422. package/dist/cliproxy/session-tracker.js +0 -420
  423. package/dist/cliproxy/session-tracker.js.map +0 -1
  424. package/dist/cliproxy/startup-lock.d.ts +0 -57
  425. package/dist/cliproxy/startup-lock.d.ts.map +0 -1
  426. package/dist/cliproxy/startup-lock.js +0 -216
  427. package/dist/cliproxy/startup-lock.js.map +0 -1
  428. package/dist/cliproxy/stats-fetcher.d.ts +0 -106
  429. package/dist/cliproxy/stats-fetcher.d.ts.map +0 -1
  430. package/dist/cliproxy/stats-fetcher.js +0 -267
  431. package/dist/cliproxy/stats-fetcher.js.map +0 -1
  432. package/dist/cliproxy/sync/auto-sync-watcher.d.ts +0 -37
  433. package/dist/cliproxy/sync/auto-sync-watcher.d.ts.map +0 -1
  434. package/dist/cliproxy/sync/auto-sync-watcher.js +0 -211
  435. package/dist/cliproxy/sync/auto-sync-watcher.js.map +0 -1
  436. package/dist/cliproxy/sync/index.d.ts +0 -10
  437. package/dist/cliproxy/sync/index.d.ts.map +0 -1
  438. package/dist/cliproxy/sync/index.js +0 -27
  439. package/dist/cliproxy/sync/index.js.map +0 -1
  440. package/dist/cliproxy/sync/local-config-sync.d.ts +0 -28
  441. package/dist/cliproxy/sync/local-config-sync.d.ts.map +0 -1
  442. package/dist/cliproxy/sync/local-config-sync.js +0 -223
  443. package/dist/cliproxy/sync/local-config-sync.js.map +0 -1
  444. package/dist/cliproxy/sync/profile-mapper.d.ts +0 -55
  445. package/dist/cliproxy/sync/profile-mapper.d.ts.map +0 -1
  446. package/dist/cliproxy/sync/profile-mapper.js +0 -173
  447. package/dist/cliproxy/sync/profile-mapper.js.map +0 -1
  448. package/dist/cliproxy/thinking-validator.d.ts +0 -67
  449. package/dist/cliproxy/thinking-validator.d.ts.map +0 -1
  450. package/dist/cliproxy/thinking-validator.js +0 -327
  451. package/dist/cliproxy/thinking-validator.js.map +0 -1
  452. package/dist/cliproxy/tool-name-mapper.d.ts.map +0 -1
  453. package/dist/cliproxy/tool-name-mapper.js.map +0 -1
  454. package/dist/cliproxy/tool-name-sanitizer.d.ts.map +0 -1
  455. package/dist/cliproxy/tool-name-sanitizer.js.map +0 -1
  456. package/dist/cliproxy/tool-sanitization-proxy.d.ts.map +0 -1
  457. package/dist/cliproxy/tool-sanitization-proxy.js.map +0 -1
  458. package/dist/cliproxy/types.d.ts +0 -218
  459. package/dist/cliproxy/types.d.ts.map +0 -1
  460. package/dist/cliproxy/types.js +0 -12
  461. package/dist/cliproxy/types.js.map +0 -1
  462. package/dist/commands/cleanup-command.d.ts +0 -12
  463. package/dist/commands/cleanup-command.d.ts.map +0 -1
  464. package/dist/commands/cleanup-command.js +0 -350
  465. package/dist/commands/cleanup-command.js.map +0 -1
  466. package/dist/commands/cliproxy-command.d.ts +0 -21
  467. package/dist/commands/cliproxy-command.d.ts.map +0 -1
  468. package/dist/commands/cliproxy-command.js +0 -1099
  469. package/dist/commands/cliproxy-command.js.map +0 -1
  470. package/dist/commands/cliproxy-sync-handler.d.ts +0 -19
  471. package/dist/commands/cliproxy-sync-handler.d.ts.map +0 -1
  472. package/dist/commands/cliproxy-sync-handler.js +0 -99
  473. package/dist/commands/cliproxy-sync-handler.js.map +0 -1
  474. package/dist/commands/config-auth/disable-command.d.ts +0 -10
  475. package/dist/commands/config-auth/disable-command.d.ts.map +0 -1
  476. package/dist/commands/config-auth/disable-command.js +0 -64
  477. package/dist/commands/config-auth/disable-command.js.map +0 -1
  478. package/dist/commands/config-auth/index.d.ts +0 -14
  479. package/dist/commands/config-auth/index.d.ts.map +0 -1
  480. package/dist/commands/config-auth/index.js +0 -84
  481. package/dist/commands/config-auth/index.js.map +0 -1
  482. package/dist/commands/config-auth/setup-command.d.ts +0 -13
  483. package/dist/commands/config-auth/setup-command.d.ts.map +0 -1
  484. package/dist/commands/config-auth/setup-command.js +0 -121
  485. package/dist/commands/config-auth/setup-command.js.map +0 -1
  486. package/dist/commands/config-auth/show-command.d.ts +0 -10
  487. package/dist/commands/config-auth/show-command.d.ts.map +0 -1
  488. package/dist/commands/config-auth/show-command.js +0 -79
  489. package/dist/commands/config-auth/show-command.js.map +0 -1
  490. package/dist/commands/config-auth/types.d.ts +0 -25
  491. package/dist/commands/config-auth/types.d.ts.map +0 -1
  492. package/dist/commands/config-auth/types.js +0 -8
  493. package/dist/commands/config-auth/types.js.map +0 -1
  494. package/dist/commands/config-command.d.ts +0 -12
  495. package/dist/commands/config-command.d.ts.map +0 -1
  496. package/dist/commands/config-command.js +0 -184
  497. package/dist/commands/config-command.js.map +0 -1
  498. package/dist/commands/config-image-analysis-command.d.ts +0 -8
  499. package/dist/commands/config-image-analysis-command.d.ts.map +0 -1
  500. package/dist/commands/config-image-analysis-command.js +0 -174
  501. package/dist/commands/config-image-analysis-command.js.map +0 -1
  502. package/dist/commands/copilot-command.d.ts +0 -10
  503. package/dist/commands/copilot-command.d.ts.map +0 -1
  504. package/dist/commands/copilot-command.js +0 -228
  505. package/dist/commands/copilot-command.js.map +0 -1
  506. package/dist/commands/doctor-command.d.ts +0 -11
  507. package/dist/commands/doctor-command.d.ts.map +0 -1
  508. package/dist/commands/doctor-command.js +0 -92
  509. package/dist/commands/doctor-command.js.map +0 -1
  510. package/dist/commands/help-command.d.ts +0 -5
  511. package/dist/commands/help-command.d.ts.map +0 -1
  512. package/dist/commands/help-command.js +0 -359
  513. package/dist/commands/help-command.js.map +0 -1
  514. package/dist/commands/index.d.ts +0 -18
  515. package/dist/commands/index.d.ts.map +0 -1
  516. package/dist/commands/index.js +0 -35
  517. package/dist/commands/index.js.map +0 -1
  518. package/dist/commands/install-command.d.ts +0 -14
  519. package/dist/commands/install-command.d.ts.map +0 -1
  520. package/dist/commands/install-command.js +0 -62
  521. package/dist/commands/install-command.js.map +0 -1
  522. package/dist/commands/migrate-command.d.ts +0 -17
  523. package/dist/commands/migrate-command.d.ts.map +0 -1
  524. package/dist/commands/migrate-command.js +0 -139
  525. package/dist/commands/migrate-command.js.map +0 -1
  526. package/dist/commands/persist-command.d.ts +0 -12
  527. package/dist/commands/persist-command.d.ts.map +0 -1
  528. package/dist/commands/persist-command.js +0 -565
  529. package/dist/commands/persist-command.js.map +0 -1
  530. package/dist/commands/router.d.ts +0 -41
  531. package/dist/commands/router.d.ts.map +0 -1
  532. package/dist/commands/router.js +0 -234
  533. package/dist/commands/router.js.map +0 -1
  534. package/dist/commands/setup-command.d.ts +0 -29
  535. package/dist/commands/setup-command.d.ts.map +0 -1
  536. package/dist/commands/setup-command.js +0 -426
  537. package/dist/commands/setup-command.js.map +0 -1
  538. package/dist/commands/shell-completion-command.d.ts +0 -10
  539. package/dist/commands/shell-completion-command.d.ts.map +0 -1
  540. package/dist/commands/shell-completion-command.js +0 -90
  541. package/dist/commands/shell-completion-command.js.map +0 -1
  542. package/dist/commands/sync-command.d.ts +0 -10
  543. package/dist/commands/sync-command.d.ts.map +0 -1
  544. package/dist/commands/sync-command.js +0 -67
  545. package/dist/commands/sync-command.js.map +0 -1
  546. package/dist/commands/tokens-command.d.ts +0 -19
  547. package/dist/commands/tokens-command.d.ts.map +0 -1
  548. package/dist/commands/tokens-command.js +0 -173
  549. package/dist/commands/tokens-command.js.map +0 -1
  550. package/dist/commands/update-command.d.ts +0 -19
  551. package/dist/commands/update-command.d.ts.map +0 -1
  552. package/dist/commands/update-command.js +0 -290
  553. package/dist/commands/update-command.js.map +0 -1
  554. package/dist/commands/version-command.d.ts +0 -10
  555. package/dist/commands/version-command.d.ts.map +0 -1
  556. package/dist/commands/version-command.js +0 -100
  557. package/dist/commands/version-command.js.map +0 -1
  558. package/dist/config/feature-flags.d.ts +0 -19
  559. package/dist/config/feature-flags.d.ts.map +0 -1
  560. package/dist/config/feature-flags.js +0 -31
  561. package/dist/config/feature-flags.js.map +0 -1
  562. package/dist/config/migration-manager.d.ts +0 -75
  563. package/dist/config/migration-manager.d.ts.map +0 -1
  564. package/dist/config/migration-manager.js +0 -446
  565. package/dist/config/migration-manager.js.map +0 -1
  566. package/dist/config/reserved-names.d.ts +0 -31
  567. package/dist/config/reserved-names.d.ts.map +0 -1
  568. package/dist/config/reserved-names.js +0 -80
  569. package/dist/config/reserved-names.js.map +0 -1
  570. package/dist/copilot/copilot-auth.d.ts +0 -52
  571. package/dist/copilot/copilot-auth.d.ts.map +0 -1
  572. package/dist/copilot/copilot-auth.js +0 -201
  573. package/dist/copilot/copilot-auth.js.map +0 -1
  574. package/dist/copilot/copilot-daemon.d.ts +0 -36
  575. package/dist/copilot/copilot-daemon.d.ts.map +0 -1
  576. package/dist/copilot/copilot-daemon.js +0 -237
  577. package/dist/copilot/copilot-daemon.js.map +0 -1
  578. package/dist/copilot/copilot-executor.d.ts +0 -26
  579. package/dist/copilot/copilot-executor.d.ts.map +0 -1
  580. package/dist/copilot/copilot-executor.js +0 -150
  581. package/dist/copilot/copilot-executor.js.map +0 -1
  582. package/dist/copilot/copilot-models.d.ts +0 -34
  583. package/dist/copilot/copilot-models.d.ts.map +0 -1
  584. package/dist/copilot/copilot-models.js +0 -261
  585. package/dist/copilot/copilot-models.js.map +0 -1
  586. package/dist/copilot/copilot-package-manager.d.ts +0 -93
  587. package/dist/copilot/copilot-package-manager.d.ts.map +0 -1
  588. package/dist/copilot/copilot-package-manager.js +0 -488
  589. package/dist/copilot/copilot-package-manager.js.map +0 -1
  590. package/dist/copilot/index.d.ts +0 -13
  591. package/dist/copilot/index.d.ts.map +0 -1
  592. package/dist/copilot/index.js +0 -63
  593. package/dist/copilot/index.js.map +0 -1
  594. package/dist/copilot/types.d.ts +0 -65
  595. package/dist/copilot/types.d.ts.map +0 -1
  596. package/dist/copilot/types.js +0 -8
  597. package/dist/copilot/types.js.map +0 -1
  598. package/dist/management/checks/cliproxy-check.d.ts +0 -37
  599. package/dist/management/checks/cliproxy-check.d.ts.map +0 -1
  600. package/dist/management/checks/cliproxy-check.js +0 -187
  601. package/dist/management/checks/cliproxy-check.js.map +0 -1
  602. package/dist/management/checks/config-check.d.ts +0 -38
  603. package/dist/management/checks/config-check.d.ts.map +0 -1
  604. package/dist/management/checks/config-check.js +0 -215
  605. package/dist/management/checks/config-check.js.map +0 -1
  606. package/dist/management/checks/env-check.d.ts +0 -17
  607. package/dist/management/checks/env-check.d.ts.map +0 -1
  608. package/dist/management/checks/env-check.js +0 -71
  609. package/dist/management/checks/env-check.js.map +0 -1
  610. package/dist/management/checks/image-analysis-check.d.ts +0 -16
  611. package/dist/management/checks/image-analysis-check.d.ts.map +0 -1
  612. package/dist/management/checks/image-analysis-check.js +0 -140
  613. package/dist/management/checks/image-analysis-check.js.map +0 -1
  614. package/dist/management/checks/index.d.ts +0 -13
  615. package/dist/management/checks/index.d.ts.map +0 -1
  616. package/dist/management/checks/index.js +0 -52
  617. package/dist/management/checks/index.js.map +0 -1
  618. package/dist/management/checks/oauth-check.d.ts +0 -16
  619. package/dist/management/checks/oauth-check.d.ts.map +0 -1
  620. package/dist/management/checks/oauth-check.js +0 -68
  621. package/dist/management/checks/oauth-check.js.map +0 -1
  622. package/dist/management/checks/profile-check.d.ts +0 -40
  623. package/dist/management/checks/profile-check.d.ts.map +0 -1
  624. package/dist/management/checks/profile-check.js +0 -190
  625. package/dist/management/checks/profile-check.js.map +0 -1
  626. package/dist/management/checks/symlink-check.d.ts +0 -30
  627. package/dist/management/checks/symlink-check.d.ts.map +0 -1
  628. package/dist/management/checks/symlink-check.js +0 -214
  629. package/dist/management/checks/symlink-check.js.map +0 -1
  630. package/dist/management/checks/system-check.d.ts +0 -25
  631. package/dist/management/checks/system-check.d.ts.map +0 -1
  632. package/dist/management/checks/system-check.js +0 -135
  633. package/dist/management/checks/system-check.js.map +0 -1
  634. package/dist/management/checks/types.d.ts +0 -64
  635. package/dist/management/checks/types.d.ts.map +0 -1
  636. package/dist/management/checks/types.js +0 -64
  637. package/dist/management/checks/types.js.map +0 -1
  638. package/dist/management/doctor.d.ts +0 -34
  639. package/dist/management/doctor.d.ts.map +0 -1
  640. package/dist/management/doctor.js +0 -154
  641. package/dist/management/doctor.js.map +0 -1
  642. package/dist/management/environment-diagnostics.d.ts +0 -69
  643. package/dist/management/environment-diagnostics.d.ts.map +0 -1
  644. package/dist/management/environment-diagnostics.js +0 -229
  645. package/dist/management/environment-diagnostics.js.map +0 -1
  646. package/dist/management/index.d.ts +0 -15
  647. package/dist/management/index.d.ts.map +0 -1
  648. package/dist/management/index.js +0 -56
  649. package/dist/management/index.js.map +0 -1
  650. package/dist/management/instance-manager.d.ts +0 -57
  651. package/dist/management/instance-manager.d.ts.map +0 -1
  652. package/dist/management/instance-manager.js +0 -195
  653. package/dist/management/instance-manager.js.map +0 -1
  654. package/dist/management/oauth-port-diagnostics.d.ts +0 -115
  655. package/dist/management/oauth-port-diagnostics.d.ts.map +0 -1
  656. package/dist/management/oauth-port-diagnostics.js +0 -291
  657. package/dist/management/oauth-port-diagnostics.js.map +0 -1
  658. package/dist/management/recovery-manager.d.ts +0 -56
  659. package/dist/management/recovery-manager.d.ts.map +0 -1
  660. package/dist/management/recovery-manager.js +0 -239
  661. package/dist/management/recovery-manager.js.map +0 -1
  662. package/dist/management/repair/auto-repair.d.ts +0 -13
  663. package/dist/management/repair/auto-repair.d.ts.map +0 -1
  664. package/dist/management/repair/auto-repair.js +0 -186
  665. package/dist/management/repair/auto-repair.js.map +0 -1
  666. package/dist/management/repair/index.d.ts +0 -5
  667. package/dist/management/repair/index.d.ts.map +0 -1
  668. package/dist/management/repair/index.js +0 -9
  669. package/dist/management/repair/index.js.map +0 -1
  670. package/dist/management/shared-manager.d.ts +0 -55
  671. package/dist/management/shared-manager.d.ts.map +0 -1
  672. package/dist/management/shared-manager.js +0 -424
  673. package/dist/management/shared-manager.js.map +0 -1
  674. package/dist/router/index.d.ts +0 -13
  675. package/dist/router/index.d.ts.map +0 -1
  676. package/dist/router/index.js +0 -25
  677. package/dist/router/index.js.map +0 -1
  678. package/dist/router/scenario-router.d.ts +0 -86
  679. package/dist/router/scenario-router.d.ts.map +0 -1
  680. package/dist/router/scenario-router.js +0 -178
  681. package/dist/router/scenario-router.js.map +0 -1
  682. package/dist/router/scenario-routing-proxy.d.ts +0 -138
  683. package/dist/router/scenario-routing-proxy.d.ts.map +0 -1
  684. package/dist/router/scenario-routing-proxy.js +0 -380
  685. package/dist/router/scenario-routing-proxy.js.map +0 -1
  686. package/dist/router/settings-routing-executor.d.ts +0 -21
  687. package/dist/router/settings-routing-executor.d.ts.map +0 -1
  688. package/dist/router/settings-routing-executor.js +0 -111
  689. package/dist/router/settings-routing-executor.js.map +0 -1
  690. package/dist/router/types.d.ts +0 -72
  691. package/dist/router/types.d.ts.map +0 -1
  692. package/dist/router/types.js +0 -20
  693. package/dist/router/types.js.map +0 -1
  694. package/dist/types/glmt.d.ts +0 -95
  695. package/dist/types/glmt.d.ts.map +0 -1
  696. package/dist/types/glmt.js +0 -7
  697. package/dist/types/glmt.js.map +0 -1
  698. package/dist/utils/api-key-validator.d.ts +0 -14
  699. package/dist/utils/api-key-validator.d.ts.map +0 -1
  700. package/dist/utils/api-key-validator.js +0 -143
  701. package/dist/utils/api-key-validator.js.map +0 -1
  702. package/dist/utils/claude-dir-installer.d.ts +0 -46
  703. package/dist/utils/claude-dir-installer.d.ts.map +0 -1
  704. package/dist/utils/claude-dir-installer.js +0 -289
  705. package/dist/utils/claude-dir-installer.js.map +0 -1
  706. package/dist/utils/claude-spawner.d.ts +0 -54
  707. package/dist/utils/claude-spawner.d.ts.map +0 -1
  708. package/dist/utils/claude-spawner.js +0 -118
  709. package/dist/utils/claude-spawner.js.map +0 -1
  710. package/dist/utils/claude-symlink-manager.d.ts +0 -75
  711. package/dist/utils/claude-symlink-manager.d.ts.map +0 -1
  712. package/dist/utils/claude-symlink-manager.js +0 -393
  713. package/dist/utils/claude-symlink-manager.js.map +0 -1
  714. package/dist/utils/hooks/get-image-analysis-hook-env.d.ts +0 -17
  715. package/dist/utils/hooks/get-image-analysis-hook-env.d.ts.map +0 -1
  716. package/dist/utils/hooks/get-image-analysis-hook-env.js +0 -42
  717. package/dist/utils/hooks/get-image-analysis-hook-env.js.map +0 -1
  718. package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts +0 -17
  719. package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts.map +0 -1
  720. package/dist/utils/hooks/image-analyzer-hook-configuration.js +0 -71
  721. package/dist/utils/hooks/image-analyzer-hook-configuration.js.map +0 -1
  722. package/dist/utils/hooks/image-analyzer-hook-installer.d.ts +0 -31
  723. package/dist/utils/hooks/image-analyzer-hook-installer.d.ts.map +0 -1
  724. package/dist/utils/hooks/image-analyzer-hook-installer.js +0 -149
  725. package/dist/utils/hooks/image-analyzer-hook-installer.js.map +0 -1
  726. package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts +0 -24
  727. package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts.map +0 -1
  728. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js +0 -251
  729. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +0 -1
  730. package/dist/utils/hooks/index.d.ts +0 -11
  731. package/dist/utils/hooks/index.d.ts.map +0 -1
  732. package/dist/utils/hooks/index.js +0 -21
  733. package/dist/utils/hooks/index.js.map +0 -1
  734. package/dist/utils/image-analysis/hook-installer.d.ts +0 -19
  735. package/dist/utils/image-analysis/hook-installer.d.ts.map +0 -1
  736. package/dist/utils/image-analysis/hook-installer.js +0 -112
  737. package/dist/utils/image-analysis/hook-installer.js.map +0 -1
  738. package/dist/utils/image-analysis/index.d.ts +0 -7
  739. package/dist/utils/image-analysis/index.d.ts.map +0 -1
  740. package/dist/utils/image-analysis/index.js +0 -12
  741. package/dist/utils/image-analysis/index.js.map +0 -1
  742. package/dist/utils/package-manager-detector.d.ts +0 -11
  743. package/dist/utils/package-manager-detector.d.ts.map +0 -1
  744. package/dist/utils/package-manager-detector.js +0 -103
  745. package/dist/utils/package-manager-detector.js.map +0 -1
  746. package/dist/utils/platform-commands.d.ts +0 -53
  747. package/dist/utils/platform-commands.d.ts.map +0 -1
  748. package/dist/utils/platform-commands.js +0 -189
  749. package/dist/utils/platform-commands.js.map +0 -1
  750. package/dist/utils/port-utils.d.ts +0 -55
  751. package/dist/utils/port-utils.d.ts.map +0 -1
  752. package/dist/utils/port-utils.js +0 -217
  753. package/dist/utils/port-utils.js.map +0 -1
  754. package/dist/utils/sensitive-keys.d.ts +0 -35
  755. package/dist/utils/sensitive-keys.d.ts.map +0 -1
  756. package/dist/utils/sensitive-keys.js +0 -67
  757. package/dist/utils/sensitive-keys.js.map +0 -1
  758. package/dist/utils/shell-completion.d.ts +0 -54
  759. package/dist/utils/shell-completion.d.ts.map +0 -1
  760. package/dist/utils/shell-completion.js +0 -260
  761. package/dist/utils/shell-completion.js.map +0 -1
  762. package/dist/utils/ui/tasks.d.ts +0 -26
  763. package/dist/utils/ui/tasks.d.ts.map +0 -1
  764. package/dist/utils/ui/tasks.js +0 -102
  765. package/dist/utils/ui/tasks.js.map +0 -1
  766. package/dist/utils/update-checker.d.ts +0 -71
  767. package/dist/utils/update-checker.d.ts.map +0 -1
  768. package/dist/utils/update-checker.js +0 -377
  769. package/dist/utils/update-checker.js.map +0 -1
  770. package/dist/utils/version.d.ts +0 -8
  771. package/dist/utils/version.d.ts.map +0 -1
  772. package/dist/utils/version.js +0 -51
  773. package/dist/utils/version.js.map +0 -1
  774. package/dist/utils/websearch/gemini-cli.d.ts +0 -36
  775. package/dist/utils/websearch/gemini-cli.d.ts.map +0 -1
  776. package/dist/utils/websearch/gemini-cli.js +0 -132
  777. package/dist/utils/websearch/gemini-cli.js.map +0 -1
  778. package/dist/utils/websearch/grok-cli.d.ts +0 -26
  779. package/dist/utils/websearch/grok-cli.d.ts.map +0 -1
  780. package/dist/utils/websearch/grok-cli.js +0 -81
  781. package/dist/utils/websearch/grok-cli.js.map +0 -1
  782. package/dist/utils/websearch/hook-config.d.ts +0 -27
  783. package/dist/utils/websearch/hook-config.d.ts.map +0 -1
  784. package/dist/utils/websearch/hook-config.js +0 -280
  785. package/dist/utils/websearch/hook-config.js.map +0 -1
  786. package/dist/utils/websearch/hook-env.d.ts +0 -16
  787. package/dist/utils/websearch/hook-env.d.ts.map +0 -1
  788. package/dist/utils/websearch/hook-env.js +0 -62
  789. package/dist/utils/websearch/hook-env.js.map +0 -1
  790. package/dist/utils/websearch/hook-installer.d.ts +0 -30
  791. package/dist/utils/websearch/hook-installer.d.ts.map +0 -1
  792. package/dist/utils/websearch/hook-installer.js +0 -148
  793. package/dist/utils/websearch/hook-installer.js.map +0 -1
  794. package/dist/utils/websearch/hook-utils.d.ts +0 -18
  795. package/dist/utils/websearch/hook-utils.d.ts.map +0 -1
  796. package/dist/utils/websearch/hook-utils.js +0 -59
  797. package/dist/utils/websearch/hook-utils.js.map +0 -1
  798. package/dist/utils/websearch/index.d.ts +0 -17
  799. package/dist/utils/websearch/index.d.ts.map +0 -1
  800. package/dist/utils/websearch/index.js +0 -51
  801. package/dist/utils/websearch/index.js.map +0 -1
  802. package/dist/utils/websearch/opencode-cli.d.ts +0 -26
  803. package/dist/utils/websearch/opencode-cli.d.ts.map +0 -1
  804. package/dist/utils/websearch/opencode-cli.js +0 -81
  805. package/dist/utils/websearch/opencode-cli.js.map +0 -1
  806. package/dist/utils/websearch/profile-hook-injector.d.ts +0 -20
  807. package/dist/utils/websearch/profile-hook-injector.d.ts.map +0 -1
  808. package/dist/utils/websearch/profile-hook-injector.js +0 -250
  809. package/dist/utils/websearch/profile-hook-injector.js.map +0 -1
  810. package/dist/utils/websearch/status.d.ts +0 -36
  811. package/dist/utils/websearch/status.d.ts.map +0 -1
  812. package/dist/utils/websearch/status.js +0 -192
  813. package/dist/utils/websearch/status.js.map +0 -1
  814. package/dist/utils/websearch/types.d.ts +0 -85
  815. package/dist/utils/websearch/types.d.ts.map +0 -1
  816. package/dist/utils/websearch/types.js +0 -10
  817. package/dist/utils/websearch/types.js.map +0 -1
  818. package/dist/utils/websearch-manager.d.ts +0 -31
  819. package/dist/utils/websearch-manager.d.ts.map +0 -1
  820. package/dist/utils/websearch-manager.js +0 -72
  821. package/dist/utils/websearch-manager.js.map +0 -1
  822. package/dist/web-server/data-aggregator.d.ts +0 -7
  823. package/dist/web-server/data-aggregator.d.ts.map +0 -1
  824. package/dist/web-server/data-aggregator.js +0 -23
  825. package/dist/web-server/data-aggregator.js.map +0 -1
  826. package/dist/web-server/file-watcher.d.ts +0 -15
  827. package/dist/web-server/file-watcher.d.ts.map +0 -1
  828. package/dist/web-server/file-watcher.js +0 -93
  829. package/dist/web-server/file-watcher.js.map +0 -1
  830. package/dist/web-server/health/cliproxy-checks.d.ts +0 -23
  831. package/dist/web-server/health/cliproxy-checks.d.ts.map +0 -1
  832. package/dist/web-server/health/cliproxy-checks.js +0 -171
  833. package/dist/web-server/health/cliproxy-checks.js.map +0 -1
  834. package/dist/web-server/health/config-checks.d.ts +0 -20
  835. package/dist/web-server/health/config-checks.d.ts.map +0 -1
  836. package/dist/web-server/health/config-checks.js +0 -212
  837. package/dist/web-server/health/config-checks.js.map +0 -1
  838. package/dist/web-server/health/environment-checks.d.ts +0 -11
  839. package/dist/web-server/health/environment-checks.d.ts.map +0 -1
  840. package/dist/web-server/health/environment-checks.js +0 -40
  841. package/dist/web-server/health/environment-checks.js.map +0 -1
  842. package/dist/web-server/health/index.d.ts +0 -13
  843. package/dist/web-server/health/index.d.ts.map +0 -1
  844. package/dist/web-server/health/index.js +0 -41
  845. package/dist/web-server/health/index.js.map +0 -1
  846. package/dist/web-server/health/oauth-checks.d.ts +0 -11
  847. package/dist/web-server/health/oauth-checks.d.ts.map +0 -1
  848. package/dist/web-server/health/oauth-checks.js +0 -34
  849. package/dist/web-server/health/oauth-checks.js.map +0 -1
  850. package/dist/web-server/health/profile-checks.d.ts +0 -20
  851. package/dist/web-server/health/profile-checks.d.ts.map +0 -1
  852. package/dist/web-server/health/profile-checks.js +0 -184
  853. package/dist/web-server/health/profile-checks.js.map +0 -1
  854. package/dist/web-server/health/symlink-checks.d.ts +0 -15
  855. package/dist/web-server/health/symlink-checks.d.ts.map +0 -1
  856. package/dist/web-server/health/symlink-checks.js +0 -173
  857. package/dist/web-server/health/symlink-checks.js.map +0 -1
  858. package/dist/web-server/health/system-checks.d.ts +0 -19
  859. package/dist/web-server/health/system-checks.d.ts.map +0 -1
  860. package/dist/web-server/health/system-checks.js +0 -127
  861. package/dist/web-server/health/system-checks.js.map +0 -1
  862. package/dist/web-server/health/types.d.ts +0 -34
  863. package/dist/web-server/health/types.d.ts.map +0 -1
  864. package/dist/web-server/health/types.js +0 -8
  865. package/dist/web-server/health/types.js.map +0 -1
  866. package/dist/web-server/health/websearch-checks.d.ts +0 -11
  867. package/dist/web-server/health/websearch-checks.d.ts.map +0 -1
  868. package/dist/web-server/health/websearch-checks.js +0 -53
  869. package/dist/web-server/health/websearch-checks.js.map +0 -1
  870. package/dist/web-server/health-service.d.ts +0 -20
  871. package/dist/web-server/health-service.d.ts.map +0 -1
  872. package/dist/web-server/health-service.js +0 -162
  873. package/dist/web-server/health-service.js.map +0 -1
  874. package/dist/web-server/index.d.ts +0 -25
  875. package/dist/web-server/index.d.ts.map +0 -1
  876. package/dist/web-server/index.js +0 -118
  877. package/dist/web-server/index.js.map +0 -1
  878. package/dist/web-server/jsonl-parser.d.ts +0 -68
  879. package/dist/web-server/jsonl-parser.d.ts.map +0 -1
  880. package/dist/web-server/jsonl-parser.js +0 -214
  881. package/dist/web-server/jsonl-parser.js.map +0 -1
  882. package/dist/web-server/middleware/auth-middleware.d.ts +0 -27
  883. package/dist/web-server/middleware/auth-middleware.d.ts.map +0 -1
  884. package/dist/web-server/middleware/auth-middleware.js +0 -116
  885. package/dist/web-server/middleware/auth-middleware.js.map +0 -1
  886. package/dist/web-server/model-pricing.d.ts +0 -42
  887. package/dist/web-server/model-pricing.d.ts.map +0 -1
  888. package/dist/web-server/model-pricing.js +0 -669
  889. package/dist/web-server/model-pricing.js.map +0 -1
  890. package/dist/web-server/overview-routes.d.ts +0 -7
  891. package/dist/web-server/overview-routes.d.ts.map +0 -1
  892. package/dist/web-server/overview-routes.js +0 -75
  893. package/dist/web-server/overview-routes.js.map +0 -1
  894. package/dist/web-server/routes/account-routes.d.ts +0 -9
  895. package/dist/web-server/routes/account-routes.d.ts.map +0 -1
  896. package/dist/web-server/routes/account-routes.js +0 -274
  897. package/dist/web-server/routes/account-routes.js.map +0 -1
  898. package/dist/web-server/routes/auth-routes.d.ts +0 -7
  899. package/dist/web-server/routes/auth-routes.d.ts.map +0 -1
  900. package/dist/web-server/routes/auth-routes.js +0 -108
  901. package/dist/web-server/routes/auth-routes.js.map +0 -1
  902. package/dist/web-server/routes/cliproxy-auth-routes.d.ts +0 -3
  903. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +0 -1
  904. package/dist/web-server/routes/cliproxy-auth-routes.js +0 -610
  905. package/dist/web-server/routes/cliproxy-auth-routes.js.map +0 -1
  906. package/dist/web-server/routes/cliproxy-stats-routes.d.ts +0 -6
  907. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +0 -1
  908. package/dist/web-server/routes/cliproxy-stats-routes.js +0 -681
  909. package/dist/web-server/routes/cliproxy-stats-routes.js.map +0 -1
  910. package/dist/web-server/routes/cliproxy-sync-routes.d.ts +0 -6
  911. package/dist/web-server/routes/cliproxy-sync-routes.d.ts.map +0 -1
  912. package/dist/web-server/routes/cliproxy-sync-routes.js +0 -157
  913. package/dist/web-server/routes/cliproxy-sync-routes.js.map +0 -1
  914. package/dist/web-server/routes/config-routes.d.ts +0 -6
  915. package/dist/web-server/routes/config-routes.d.ts.map +0 -1
  916. package/dist/web-server/routes/config-routes.js +0 -130
  917. package/dist/web-server/routes/config-routes.js.map +0 -1
  918. package/dist/web-server/routes/copilot-routes.d.ts +0 -6
  919. package/dist/web-server/routes/copilot-routes.d.ts.map +0 -1
  920. package/dist/web-server/routes/copilot-routes.js +0 -195
  921. package/dist/web-server/routes/copilot-routes.js.map +0 -1
  922. package/dist/web-server/routes/copilot-settings-routes.d.ts +0 -6
  923. package/dist/web-server/routes/copilot-settings-routes.d.ts.map +0 -1
  924. package/dist/web-server/routes/copilot-settings-routes.js +0 -122
  925. package/dist/web-server/routes/copilot-settings-routes.js.map +0 -1
  926. package/dist/web-server/routes/health-routes.d.ts +0 -6
  927. package/dist/web-server/routes/health-routes.d.ts.map +0 -1
  928. package/dist/web-server/routes/health-routes.js +0 -40
  929. package/dist/web-server/routes/health-routes.js.map +0 -1
  930. package/dist/web-server/routes/index.d.ts +0 -8
  931. package/dist/web-server/routes/index.d.ts.map +0 -1
  932. package/dist/web-server/routes/index.js +0 -62
  933. package/dist/web-server/routes/index.js.map +0 -1
  934. package/dist/web-server/routes/misc-routes.d.ts +0 -6
  935. package/dist/web-server/routes/misc-routes.d.ts.map +0 -1
  936. package/dist/web-server/routes/misc-routes.js +0 -396
  937. package/dist/web-server/routes/misc-routes.js.map +0 -1
  938. package/dist/web-server/routes/persist-routes.d.ts +0 -6
  939. package/dist/web-server/routes/persist-routes.d.ts.map +0 -1
  940. package/dist/web-server/routes/persist-routes.js +0 -286
  941. package/dist/web-server/routes/persist-routes.js.map +0 -1
  942. package/dist/web-server/routes/profile-routes.d.ts +0 -9
  943. package/dist/web-server/routes/profile-routes.d.ts.map +0 -1
  944. package/dist/web-server/routes/profile-routes.js +0 -116
  945. package/dist/web-server/routes/profile-routes.js.map +0 -1
  946. package/dist/web-server/routes/provider-routes.d.ts +0 -6
  947. package/dist/web-server/routes/provider-routes.d.ts.map +0 -1
  948. package/dist/web-server/routes/provider-routes.js +0 -146
  949. package/dist/web-server/routes/provider-routes.js.map +0 -1
  950. package/dist/web-server/routes/proxy-routes.d.ts +0 -11
  951. package/dist/web-server/routes/proxy-routes.d.ts.map +0 -1
  952. package/dist/web-server/routes/proxy-routes.js +0 -154
  953. package/dist/web-server/routes/proxy-routes.js.map +0 -1
  954. package/dist/web-server/routes/route-helpers.d.ts +0 -50
  955. package/dist/web-server/routes/route-helpers.d.ts.map +0 -1
  956. package/dist/web-server/routes/route-helpers.js +0 -179
  957. package/dist/web-server/routes/route-helpers.js.map +0 -1
  958. package/dist/web-server/routes/settings-routes.d.ts +0 -6
  959. package/dist/web-server/routes/settings-routes.d.ts.map +0 -1
  960. package/dist/web-server/routes/settings-routes.js +0 -413
  961. package/dist/web-server/routes/settings-routes.js.map +0 -1
  962. package/dist/web-server/routes/variant-routes.d.ts +0 -8
  963. package/dist/web-server/routes/variant-routes.d.ts.map +0 -1
  964. package/dist/web-server/routes/variant-routes.js +0 -119
  965. package/dist/web-server/routes/variant-routes.js.map +0 -1
  966. package/dist/web-server/routes/websearch-routes.d.ts +0 -6
  967. package/dist/web-server/routes/websearch-routes.d.ts.map +0 -1
  968. package/dist/web-server/routes/websearch-routes.js +0 -130
  969. package/dist/web-server/routes/websearch-routes.js.map +0 -1
  970. package/dist/web-server/services/index.d.ts +0 -7
  971. package/dist/web-server/services/index.d.ts.map +0 -1
  972. package/dist/web-server/services/index.js +0 -21
  973. package/dist/web-server/services/index.js.map +0 -1
  974. package/dist/web-server/services/usage-aggregator.d.ts +0 -7
  975. package/dist/web-server/services/usage-aggregator.d.ts.map +0 -1
  976. package/dist/web-server/services/usage-aggregator.js +0 -23
  977. package/dist/web-server/services/usage-aggregator.js.map +0 -1
  978. package/dist/web-server/shared-routes.d.ts +0 -7
  979. package/dist/web-server/shared-routes.d.ts.map +0 -1
  980. package/dist/web-server/shared-routes.js +0 -168
  981. package/dist/web-server/shared-routes.js.map +0 -1
  982. package/dist/web-server/shutdown.d.ts +0 -14
  983. package/dist/web-server/shutdown.d.ts.map +0 -1
  984. package/dist/web-server/shutdown.js +0 -29
  985. package/dist/web-server/shutdown.js.map +0 -1
  986. package/dist/web-server/usage/aggregator.d.ts +0 -54
  987. package/dist/web-server/usage/aggregator.d.ts.map +0 -1
  988. package/dist/web-server/usage/aggregator.js +0 -470
  989. package/dist/web-server/usage/aggregator.js.map +0 -1
  990. package/dist/web-server/usage/data-aggregator.d.ts +0 -55
  991. package/dist/web-server/usage/data-aggregator.d.ts.map +0 -1
  992. package/dist/web-server/usage/data-aggregator.js +0 -391
  993. package/dist/web-server/usage/data-aggregator.js.map +0 -1
  994. package/dist/web-server/usage/disk-cache.d.ts +0 -46
  995. package/dist/web-server/usage/disk-cache.d.ts.map +0 -1
  996. package/dist/web-server/usage/disk-cache.js +0 -162
  997. package/dist/web-server/usage/disk-cache.js.map +0 -1
  998. package/dist/web-server/usage/handlers.d.ts +0 -50
  999. package/dist/web-server/usage/handlers.d.ts.map +0 -1
  1000. package/dist/web-server/usage/handlers.js +0 -524
  1001. package/dist/web-server/usage/handlers.js.map +0 -1
  1002. package/dist/web-server/usage/index.d.ts +0 -12
  1003. package/dist/web-server/usage/index.d.ts.map +0 -1
  1004. package/dist/web-server/usage/index.js +0 -54
  1005. package/dist/web-server/usage/index.js.map +0 -1
  1006. package/dist/web-server/usage/routes.d.ts +0 -11
  1007. package/dist/web-server/usage/routes.d.ts.map +0 -1
  1008. package/dist/web-server/usage/routes.js +0 -37
  1009. package/dist/web-server/usage/routes.js.map +0 -1
  1010. package/dist/web-server/usage/types.d.ts +0 -119
  1011. package/dist/web-server/usage/types.d.ts.map +0 -1
  1012. package/dist/web-server/usage/types.js +0 -9
  1013. package/dist/web-server/usage/types.js.map +0 -1
  1014. package/dist/web-server/usage-disk-cache.d.ts +0 -7
  1015. package/dist/web-server/usage-disk-cache.d.ts.map +0 -1
  1016. package/dist/web-server/usage-disk-cache.js +0 -23
  1017. package/dist/web-server/usage-disk-cache.js.map +0 -1
  1018. package/dist/web-server/usage-routes.d.ts +0 -7
  1019. package/dist/web-server/usage-routes.d.ts.map +0 -1
  1020. package/dist/web-server/usage-routes.js +0 -14
  1021. package/dist/web-server/usage-routes.js.map +0 -1
  1022. package/dist/web-server/usage-types.d.ts +0 -7
  1023. package/dist/web-server/usage-types.d.ts.map +0 -1
  1024. package/dist/web-server/usage-types.js +0 -23
  1025. package/dist/web-server/usage-types.js.map +0 -1
  1026. package/dist/web-server/websocket.d.ts +0 -15
  1027. package/dist/web-server/websocket.d.ts.map +0 -1
  1028. package/dist/web-server/websocket.js +0 -162
  1029. package/dist/web-server/websocket.js.map +0 -1
  1030. package/lib/hooks/block-websearch.cjs +0 -75
  1031. package/lib/hooks/websearch-transformer.cjs +0 -632
  1032. /package/dist/{cliproxy → proxy}/tool-name-mapper.d.ts +0 -0
  1033. /package/dist/{cliproxy → proxy}/tool-sanitization-proxy.d.ts +0 -0
@@ -0,0 +1,1708 @@
1
+ "use strict";
2
+ /**
3
+ * Anthropic-to-OpenAI Protocol Translation Proxy
4
+ *
5
+ * Translates Claude CLI's Anthropic Messages API requests into OpenAI Chat Completions API format.
6
+ * Used in direct API key mode to bypass CLIProxy entirely.
7
+ *
8
+ * Request flow:
9
+ * Claude CLI (Anthropic format) → this proxy → OpenAI-compatible endpoint
10
+ *
11
+ * Response flow:
12
+ * OpenAI-compatible endpoint → this proxy (translates SSE) → Claude CLI (Anthropic format)
13
+ *
14
+ * Handles:
15
+ * - Path rewriting: /v1/messages → /v1/chat/completions
16
+ * - Auth translation: x-api-key → Authorization: Bearer
17
+ * - Request body: Anthropic messages/tools/system → OpenAI format
18
+ * - Streaming response: OpenAI SSE chunks → Anthropic SSE events
19
+ * - Non-streaming response: OpenAI completion → Anthropic message
20
+ * - Tool calls and tool results
21
+ */
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.AnthropicToOpenAIProxy = void 0;
47
+ /* eslint-disable @typescript-eslint/no-explicit-any */
48
+ const http = __importStar(require("http"));
49
+ const https = __importStar(require("https"));
50
+ const url_1 = require("url");
51
+ /** User agent matching Codex CLI for API compatibility */
52
+ const CODEX_USER_AGENT = 'codex_cli_rs/0.104.0 (Windows 10.0.19044; x86_64) WindowsTerminal';
53
+ // ─── Request Translation ─────────────────────────────────────────────────────
54
+ function translateSystemPrompt(system) {
55
+ if (!system)
56
+ return '';
57
+ if (typeof system === 'string')
58
+ return system;
59
+ // Array of content blocks - extract text
60
+ return system
61
+ .filter((b) => b.type === 'text' && b.text)
62
+ .map((b) => b.text)
63
+ .join('\n');
64
+ }
65
+ function translateMessages(messages) {
66
+ const result = [];
67
+ for (const msg of messages) {
68
+ if (typeof msg.content === 'string') {
69
+ result.push({ role: msg.role, content: msg.content });
70
+ continue;
71
+ }
72
+ if (!Array.isArray(msg.content)) {
73
+ result.push({ role: msg.role, content: String(msg.content ?? '') });
74
+ continue;
75
+ }
76
+ // Process content blocks
77
+ if (msg.role === 'assistant') {
78
+ // Assistant message may contain text + tool_use blocks
79
+ const textParts = [];
80
+ const toolCalls = [];
81
+ for (const block of msg.content) {
82
+ if (block.type === 'text' && block.text) {
83
+ textParts.push(block.text);
84
+ }
85
+ else if (block.type === 'tool_use') {
86
+ toolCalls.push({
87
+ id: block.id || `call_${Math.random().toString(36).slice(2, 10)}`,
88
+ type: 'function',
89
+ function: {
90
+ name: block.name || '',
91
+ arguments: typeof block.input === 'string' ? block.input : JSON.stringify(block.input ?? {}),
92
+ },
93
+ });
94
+ }
95
+ }
96
+ const openaiMsg = {
97
+ role: 'assistant',
98
+ content: textParts.length > 0 ? textParts.join('') : null,
99
+ };
100
+ if (toolCalls.length > 0) {
101
+ openaiMsg.tool_calls = toolCalls;
102
+ }
103
+ result.push(openaiMsg);
104
+ }
105
+ else if (msg.role === 'user') {
106
+ // User message may contain text, images, or tool_result blocks
107
+ // Split tool_results into separate OpenAI tool messages
108
+ const textParts = [];
109
+ for (const block of msg.content) {
110
+ if (block.type === 'text' && block.text) {
111
+ textParts.push(block.text);
112
+ }
113
+ else if (block.type === 'tool_result') {
114
+ // Tool results become separate messages with role: "tool"
115
+ let toolContent = '';
116
+ if (typeof block.content === 'string') {
117
+ toolContent = block.content;
118
+ }
119
+ else if (Array.isArray(block.content)) {
120
+ toolContent = block.content
121
+ .filter((b) => b.type === 'text' && b.text)
122
+ .map((b) => b.text)
123
+ .join('\n');
124
+ }
125
+ result.push({
126
+ role: 'tool',
127
+ content: toolContent,
128
+ tool_call_id: block.tool_use_id || '',
129
+ });
130
+ }
131
+ // Skip image/document blocks for now (not supported by most Chat Completions endpoints)
132
+ }
133
+ if (textParts.length > 0) {
134
+ result.push({ role: 'user', content: textParts.join('') });
135
+ }
136
+ }
137
+ else {
138
+ // Other roles - just concatenate text
139
+ const text = msg.content
140
+ .filter((b) => b.type === 'text' && b.text)
141
+ .map((b) => b.text)
142
+ .join('');
143
+ result.push({ role: msg.role, content: text || '' });
144
+ }
145
+ }
146
+ return result;
147
+ }
148
+ function translateTools(tools) {
149
+ return tools.map((tool) => ({
150
+ type: 'function',
151
+ function: {
152
+ name: tool.name,
153
+ description: tool.description,
154
+ parameters: tool.input_schema,
155
+ },
156
+ }));
157
+ }
158
+ function translateToolChoice(choice) {
159
+ switch (choice.type) {
160
+ case 'auto':
161
+ return 'auto';
162
+ case 'any':
163
+ return 'required';
164
+ case 'tool':
165
+ return { type: 'function', function: { name: choice.name || '' } };
166
+ case 'none':
167
+ return 'none';
168
+ default:
169
+ return 'auto';
170
+ }
171
+ }
172
+ function translateRequestChat(anthropicReq) {
173
+ const messages = [];
174
+ // Add system message if present
175
+ const systemText = translateSystemPrompt(anthropicReq.system);
176
+ if (systemText) {
177
+ messages.push({ role: 'system', content: systemText });
178
+ }
179
+ // Translate conversation messages
180
+ if (anthropicReq.messages) {
181
+ messages.push(...translateMessages(anthropicReq.messages));
182
+ }
183
+ const openaiReq = {
184
+ model: anthropicReq.model,
185
+ messages,
186
+ stream: anthropicReq.stream,
187
+ };
188
+ if (anthropicReq.max_tokens !== undefined) {
189
+ openaiReq.max_tokens = anthropicReq.max_tokens;
190
+ }
191
+ if (anthropicReq.temperature !== undefined) {
192
+ openaiReq.temperature = anthropicReq.temperature;
193
+ }
194
+ if (anthropicReq.top_p !== undefined) {
195
+ openaiReq.top_p = anthropicReq.top_p;
196
+ }
197
+ if (anthropicReq.stop_sequences) {
198
+ openaiReq.stop = anthropicReq.stop_sequences;
199
+ }
200
+ if (anthropicReq.tools && anthropicReq.tools.length > 0) {
201
+ openaiReq.tools = translateTools(anthropicReq.tools);
202
+ }
203
+ if (anthropicReq.tool_choice) {
204
+ openaiReq.tool_choice = translateToolChoice(anthropicReq.tool_choice);
205
+ }
206
+ // Pass through reasoning effort (already in OpenAI format from CodexReasoningProxy)
207
+ if (anthropicReq.reasoning) {
208
+ openaiReq.reasoning = anthropicReq.reasoning;
209
+ }
210
+ // Request usage info in stream for token counting
211
+ if (openaiReq.stream) {
212
+ openaiReq.stream_options = { include_usage: true };
213
+ }
214
+ return openaiReq;
215
+ }
216
+ function toResponsesMessages(messages) {
217
+ const out = [];
218
+ const toolCallIds = new Set();
219
+ // First pass: collect all tool call IDs
220
+ for (const m of messages) {
221
+ if (m.role === 'assistant' && m.tool_calls) {
222
+ for (const tc of m.tool_calls) {
223
+ if (tc.id)
224
+ toolCallIds.add(tc.id);
225
+ }
226
+ }
227
+ }
228
+ for (const m of messages) {
229
+ if (m.role === 'assistant') {
230
+ // Assistant messages: add text content as message if present
231
+ if (m.content) {
232
+ out.push({
233
+ type: 'message',
234
+ role: 'assistant',
235
+ content: [{ type: 'output_text', text: m.content }],
236
+ });
237
+ }
238
+ // Add tool calls as function_call items
239
+ if (m.tool_calls && m.tool_calls.length > 0) {
240
+ for (const tc of m.tool_calls) {
241
+ out.push({
242
+ type: 'function_call',
243
+ call_id: tc.id,
244
+ name: tc.function.name,
245
+ arguments: tc.function.arguments,
246
+ });
247
+ }
248
+ }
249
+ }
250
+ else if (m.role === 'tool') {
251
+ // Tool results: use function_call_output format
252
+ // Only add if we have a valid call_id that matches a previous function_call
253
+ const callId = m.tool_call_id || '';
254
+ if (callId && toolCallIds.has(callId)) {
255
+ out.push({
256
+ type: 'function_call_output',
257
+ call_id: callId,
258
+ output: m.content || '',
259
+ });
260
+ }
261
+ else if (callId) {
262
+ // Log warning but don't fail
263
+ console.warn(`[cliproxy] Skipping tool result with unmatched call_id: ${callId}`);
264
+ }
265
+ }
266
+ else {
267
+ // User/system/developer messages: use simplified format
268
+ const textContent = m.content ?? '';
269
+ out.push({ role: m.role, content: textContent });
270
+ }
271
+ }
272
+ return out;
273
+ }
274
+ function translateChatToResponses(chat, previousResponseId) {
275
+ // Extract system messages → instructions field (enables prompt caching)
276
+ const systemParts = [];
277
+ const nonSystemMessages = [];
278
+ for (const m of chat.messages) {
279
+ if (m.role === 'system' && m.content) {
280
+ systemParts.push(m.content);
281
+ }
282
+ else {
283
+ nonSystemMessages.push(m);
284
+ }
285
+ }
286
+ // When chaining with previous_response_id, only send new messages (after last assistant turn)
287
+ let inputMessages = nonSystemMessages;
288
+ if (previousResponseId) {
289
+ let lastAssistantIdx = -1;
290
+ for (let i = nonSystemMessages.length - 1; i >= 0; i--) {
291
+ if (nonSystemMessages[i].role === 'assistant') {
292
+ lastAssistantIdx = i;
293
+ break;
294
+ }
295
+ }
296
+ if (lastAssistantIdx >= 0) {
297
+ inputMessages = nonSystemMessages.slice(lastAssistantIdx + 1);
298
+ }
299
+ }
300
+ const req = {
301
+ model: chat.model,
302
+ input: toResponsesMessages(inputMessages),
303
+ stream: chat.stream,
304
+ temperature: chat.temperature,
305
+ top_p: chat.top_p,
306
+ stop: chat.stop,
307
+ store: false,
308
+ prompt_cache_key: 'ccs-codex-stable',
309
+ reasoning: {
310
+ ...(typeof chat.reasoning === 'object' ? chat.reasoning : {}),
311
+ effort: chat.reasoning?.effort ?? 'xhigh',
312
+ summary: 'auto',
313
+ },
314
+ include: ['reasoning.encrypted_content'],
315
+ };
316
+ if (previousResponseId) {
317
+ req.previous_response_id = previousResponseId;
318
+ // Server already has instructions + tools from the chain, skip to save tokens
319
+ }
320
+ else {
321
+ // First request: send instructions and tools
322
+ if (systemParts.length > 0) {
323
+ req.instructions = systemParts.join('\n');
324
+ }
325
+ if (chat.tools) {
326
+ req.tools = chat.tools.map((t) => ({
327
+ type: 'function',
328
+ name: t.function.name,
329
+ description: t.function.description,
330
+ parameters: t.function.parameters,
331
+ }));
332
+ }
333
+ const responsesToolChoice = translateToolChoiceForResponses(chat.tool_choice);
334
+ if (responsesToolChoice !== undefined)
335
+ req.tool_choice = responsesToolChoice;
336
+ }
337
+ return req;
338
+ }
339
+ function translateToolChoiceForResponses(toolChoice) {
340
+ if (!toolChoice)
341
+ return undefined;
342
+ if (typeof toolChoice === 'string')
343
+ return toolChoice;
344
+ if (toolChoice.type === 'function') {
345
+ const name = toolChoice.function?.name?.trim();
346
+ if (!name)
347
+ return 'auto';
348
+ return { type: 'function', name };
349
+ }
350
+ return 'auto';
351
+ }
352
+ function consumeSSEEvents(buffer) {
353
+ const normalized = buffer.replace(/\r\n/g, '\n');
354
+ const parts = normalized.split('\n\n');
355
+ const rest = parts.pop() || '';
356
+ return {
357
+ events: parts.filter((evt) => evt.trim().length > 0),
358
+ rest,
359
+ };
360
+ }
361
+ function extractSSEDataPayload(event) {
362
+ const dataLines = [];
363
+ for (const rawLine of event.split('\n')) {
364
+ const line = rawLine.trimEnd();
365
+ if (!line.startsWith('data:'))
366
+ continue;
367
+ dataLines.push(line.slice(5).trimStart());
368
+ }
369
+ if (dataLines.length === 0)
370
+ return null;
371
+ return dataLines.join('\n');
372
+ }
373
+ // ─── Streaming Response Translation ──────────────────────────────────────────
374
+ /** State tracker for translating OpenAI streaming chunks into Anthropic SSE events */
375
+ class StreamingResponseTranslator {
376
+ constructor(model) {
377
+ this.contentBlockIndex = 0;
378
+ this.inTextBlock = false;
379
+ this.inThinkingBlock = false;
380
+ this.inToolCallBlocks = new Map();
381
+ this.inputTokens = 0;
382
+ this.outputTokens = 0;
383
+ this.headersSent = false;
384
+ this.messageId = `msg_${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`;
385
+ this.model = model;
386
+ }
387
+ sse(event, data) {
388
+ return `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
389
+ }
390
+ /** Produce the initial message_start event */
391
+ emitMessageStart() {
392
+ return this.sse('message_start', {
393
+ type: 'message_start',
394
+ message: {
395
+ id: this.messageId,
396
+ type: 'message',
397
+ role: 'assistant',
398
+ content: [],
399
+ model: this.model,
400
+ stop_reason: null,
401
+ stop_sequence: null,
402
+ usage: { input_tokens: this.inputTokens, output_tokens: 0 },
403
+ },
404
+ });
405
+ }
406
+ /** Emit a thinking content block start */
407
+ emitThinkingStart() {
408
+ let events = '';
409
+ if (!this.headersSent) {
410
+ this.headersSent = true;
411
+ events += this.emitMessageStart();
412
+ }
413
+ events += this.sse('content_block_start', {
414
+ type: 'content_block_start',
415
+ index: this.contentBlockIndex,
416
+ content_block: { type: 'thinking', thinking: '' },
417
+ });
418
+ this.inThinkingBlock = true;
419
+ return events;
420
+ }
421
+ /** Emit a thinking content delta */
422
+ emitThinkingDelta(text) {
423
+ if (!text)
424
+ return '';
425
+ return this.sse('content_block_delta', {
426
+ type: 'content_block_delta',
427
+ index: this.contentBlockIndex,
428
+ delta: { type: 'thinking_delta', thinking: text },
429
+ });
430
+ }
431
+ /** Emit thinking block stop */
432
+ emitThinkingStop() {
433
+ if (!this.inThinkingBlock)
434
+ return '';
435
+ const events = this.sse('content_block_stop', {
436
+ type: 'content_block_stop',
437
+ index: this.contentBlockIndex,
438
+ });
439
+ this.contentBlockIndex++;
440
+ this.inThinkingBlock = false;
441
+ return events;
442
+ }
443
+ /** Translate a single OpenAI chunk to zero or more Anthropic SSE events */
444
+ translateChunk(chunk) {
445
+ let events = '';
446
+ // Track usage
447
+ if (chunk.usage) {
448
+ if (chunk.usage.prompt_tokens)
449
+ this.inputTokens = chunk.usage.prompt_tokens;
450
+ if (chunk.usage.completion_tokens)
451
+ this.outputTokens = chunk.usage.completion_tokens;
452
+ }
453
+ if (!chunk.choices || chunk.choices.length === 0)
454
+ return events;
455
+ const choice = chunk.choices[0];
456
+ if (!choice)
457
+ return events;
458
+ const delta = choice.delta;
459
+ // Emit message_start on first content
460
+ if (!this.headersSent && delta) {
461
+ this.headersSent = true;
462
+ events += this.emitMessageStart();
463
+ }
464
+ // Handle reasoning content (OpenAI Chat Completions returns this for reasoning models)
465
+ if (delta?.reasoning_content !== undefined && delta.reasoning_content !== null) {
466
+ if (!this.inThinkingBlock) {
467
+ events += this.emitThinkingStart();
468
+ }
469
+ if (delta.reasoning_content) {
470
+ events += this.emitThinkingDelta(delta.reasoning_content);
471
+ }
472
+ }
473
+ // Close thinking block when text content starts
474
+ if (delta?.content !== undefined && delta.content !== null && this.inThinkingBlock) {
475
+ events += this.emitThinkingStop();
476
+ }
477
+ // Handle text content
478
+ if (delta?.content !== undefined && delta.content !== null) {
479
+ if (!this.inTextBlock) {
480
+ // Start a new text content block
481
+ events += this.sse('content_block_start', {
482
+ type: 'content_block_start',
483
+ index: this.contentBlockIndex,
484
+ content_block: { type: 'text', text: '' },
485
+ });
486
+ this.inTextBlock = true;
487
+ }
488
+ if (delta.content) {
489
+ events += this.sse('content_block_delta', {
490
+ type: 'content_block_delta',
491
+ index: this.contentBlockIndex,
492
+ delta: { type: 'text_delta', text: delta.content },
493
+ });
494
+ }
495
+ }
496
+ // Handle tool calls
497
+ if (delta?.tool_calls) {
498
+ // Close text block if open
499
+ if (this.inTextBlock) {
500
+ events += this.sse('content_block_stop', {
501
+ type: 'content_block_stop',
502
+ index: this.contentBlockIndex,
503
+ });
504
+ this.contentBlockIndex++;
505
+ this.inTextBlock = false;
506
+ }
507
+ for (const tc of delta.tool_calls) {
508
+ const tcIndex = tc.index ?? 0;
509
+ let tracked = this.inToolCallBlocks.get(tcIndex);
510
+ // New tool call
511
+ if (tc.id && tc.function?.name) {
512
+ tracked = { id: tc.id, name: tc.function.name, started: false };
513
+ this.inToolCallBlocks.set(tcIndex, tracked);
514
+ }
515
+ if (!tracked)
516
+ continue;
517
+ // Emit content_block_start for new tool call
518
+ if (!tracked.started) {
519
+ events += this.sse('content_block_start', {
520
+ type: 'content_block_start',
521
+ index: this.contentBlockIndex,
522
+ content_block: { type: 'tool_use', id: tracked.id, name: tracked.name, input: {} },
523
+ });
524
+ tracked.started = true;
525
+ this.contentBlockIndex++;
526
+ }
527
+ // Emit argument deltas
528
+ if (tc.function?.arguments) {
529
+ // Use contentBlockIndex - 1 since we incremented after block start
530
+ events += this.sse('content_block_delta', {
531
+ type: 'content_block_delta',
532
+ index: this.contentBlockIndex - 1,
533
+ delta: { type: 'input_json_delta', partial_json: tc.function.arguments },
534
+ });
535
+ }
536
+ }
537
+ }
538
+ // Handle finish
539
+ if (choice.finish_reason) {
540
+ // Close any open blocks
541
+ if (this.inTextBlock) {
542
+ events += this.sse('content_block_stop', {
543
+ type: 'content_block_stop',
544
+ index: this.contentBlockIndex,
545
+ });
546
+ this.contentBlockIndex++;
547
+ this.inTextBlock = false;
548
+ }
549
+ // Close thinking block if still open
550
+ if (this.inThinkingBlock) {
551
+ events += this.emitThinkingStop();
552
+ }
553
+ // Close open tool call blocks
554
+ let tcBlockIdx = this.contentBlockIndex - this.inToolCallBlocks.size;
555
+ for (const [, tracked] of this.inToolCallBlocks) {
556
+ if (tracked.started) {
557
+ events += this.sse('content_block_stop', {
558
+ type: 'content_block_stop',
559
+ index: tcBlockIdx,
560
+ });
561
+ }
562
+ tcBlockIdx++;
563
+ }
564
+ this.inToolCallBlocks.clear();
565
+ // Map finish reason
566
+ let stopReason;
567
+ switch (choice.finish_reason) {
568
+ case 'tool_calls':
569
+ stopReason = 'tool_use';
570
+ break;
571
+ case 'length':
572
+ stopReason = 'max_tokens';
573
+ break;
574
+ default:
575
+ stopReason = 'end_turn';
576
+ }
577
+ events += this.sse('message_delta', {
578
+ type: 'message_delta',
579
+ delta: { stop_reason: stopReason, stop_sequence: null },
580
+ usage: { output_tokens: this.outputTokens },
581
+ });
582
+ events += this.sse('message_stop', { type: 'message_stop' });
583
+ }
584
+ return events;
585
+ }
586
+ /** Handle case where no chunks were received or stream ended without finish_reason */
587
+ emitFinalIfNeeded() {
588
+ let events = '';
589
+ if (!this.headersSent) {
590
+ events += this.emitMessageStart();
591
+ }
592
+ // Close thinking block if still open
593
+ if (this.inThinkingBlock) {
594
+ events += this.emitThinkingStop();
595
+ }
596
+ if (this.inTextBlock) {
597
+ events += this.sse('content_block_stop', {
598
+ type: 'content_block_stop',
599
+ index: this.contentBlockIndex,
600
+ });
601
+ }
602
+ let tcBlockIdx = this.contentBlockIndex - this.inToolCallBlocks.size;
603
+ for (const [, tracked] of this.inToolCallBlocks) {
604
+ if (tracked.started) {
605
+ events += this.sse('content_block_stop', {
606
+ type: 'content_block_stop',
607
+ index: tcBlockIdx,
608
+ });
609
+ }
610
+ tcBlockIdx++;
611
+ }
612
+ events += this.sse('message_delta', {
613
+ type: 'message_delta',
614
+ delta: { stop_reason: 'end_turn', stop_sequence: null },
615
+ usage: { output_tokens: this.outputTokens },
616
+ });
617
+ events += this.sse('message_stop', { type: 'message_stop' });
618
+ return events;
619
+ }
620
+ }
621
+ function normalizeModelCreatedAt(created) {
622
+ if (typeof created === 'number' && Number.isFinite(created) && created > 0) {
623
+ return new Date(created * 1000).toISOString();
624
+ }
625
+ return new Date().toISOString();
626
+ }
627
+ function normalizeModelsPayloadForAnthropic(rawPayload) {
628
+ let parsed;
629
+ try {
630
+ parsed = JSON.parse(rawPayload);
631
+ }
632
+ catch {
633
+ return rawPayload;
634
+ }
635
+ if (!parsed || typeof parsed !== 'object') {
636
+ return rawPayload;
637
+ }
638
+ const record = parsed;
639
+ const data = record.data;
640
+ if (Array.isArray(data)) {
641
+ const alreadyAnthropic = data.every((item) => {
642
+ if (!item || typeof item !== 'object')
643
+ return false;
644
+ const m = item;
645
+ return typeof m.id === 'string' && typeof m.created_at === 'string';
646
+ });
647
+ if (alreadyAnthropic) {
648
+ return rawPayload;
649
+ }
650
+ const models = data
651
+ .filter((item) => item && typeof item === 'object')
652
+ .map((item) => {
653
+ const m = item;
654
+ const id = typeof m.id === 'string' ? m.id : '';
655
+ if (!id)
656
+ return null;
657
+ return {
658
+ type: 'model',
659
+ id,
660
+ display_name: id,
661
+ created_at: normalizeModelCreatedAt(m.created),
662
+ };
663
+ })
664
+ .filter((item) => Boolean(item));
665
+ return JSON.stringify({
666
+ data: models,
667
+ first_id: models.length > 0 ? models[0].id : null,
668
+ last_id: models.length > 0 ? models[models.length - 1].id : null,
669
+ has_more: false,
670
+ });
671
+ }
672
+ if (typeof record.id === 'string') {
673
+ const id = record.id;
674
+ return JSON.stringify({
675
+ type: 'model',
676
+ id,
677
+ display_name: id,
678
+ created_at: normalizeModelCreatedAt(record.created),
679
+ });
680
+ }
681
+ return rawPayload;
682
+ }
683
+ // ─── Proxy Server ────────────────────────────────────────────────────────────
684
+ class AnthropicToOpenAIProxy {
685
+ constructor(config) {
686
+ this.server = null;
687
+ this.port = null;
688
+ this.maxNetworkRetries = 2;
689
+ /** Track last Responses API response ID for conversation chaining */
690
+ this.lastResponseId = null;
691
+ // Normalize base URL: strip trailing slashes and /v1 suffix
692
+ // We append /v1/chat/completions or /v1/responses ourselves
693
+ let baseUrl = config.targetBaseUrl.replace(/\/+$/, '');
694
+ baseUrl = baseUrl.replace(/\/v1$/i, '');
695
+ this.config = {
696
+ targetBaseUrl: baseUrl,
697
+ apiKey: config.apiKey,
698
+ verbose: config.verbose ?? false,
699
+ timeoutMs: config.timeoutMs ?? 120000,
700
+ useResponsesApi: config.useResponsesApi ?? true,
701
+ };
702
+ this.httpAgent = new http.Agent({
703
+ keepAlive: true,
704
+ keepAliveMsecs: 10000,
705
+ maxSockets: 64,
706
+ maxFreeSockets: 16,
707
+ });
708
+ this.httpsAgent = new https.Agent({
709
+ keepAlive: true,
710
+ keepAliveMsecs: 10000,
711
+ maxSockets: 64,
712
+ maxFreeSockets: 16,
713
+ });
714
+ }
715
+ log(msg) {
716
+ if (this.config.verbose) {
717
+ console.error(`[anthropic-to-openai] ${msg}`);
718
+ }
719
+ }
720
+ isRetryableNetworkError(error) {
721
+ const err = error;
722
+ const code = String(err.code || '');
723
+ if ([
724
+ 'ECONNRESET',
725
+ 'ETIMEDOUT',
726
+ 'EPIPE',
727
+ 'ECONNREFUSED',
728
+ 'ENOTFOUND',
729
+ 'EHOSTUNREACH',
730
+ 'ENETUNREACH',
731
+ ].includes(code)) {
732
+ return true;
733
+ }
734
+ const message = error.message.toLowerCase();
735
+ return (message.includes('socket hang up') ||
736
+ message.includes('network socket disconnected') ||
737
+ message.includes('client network socket disconnected'));
738
+ }
739
+ isRetryableStatusCode(statusCode) {
740
+ return [408, 409, 425, 429, 500, 502, 503, 504].includes(statusCode);
741
+ }
742
+ getRetryDelayMs(attempt, error) {
743
+ const code = String(error?.code || '');
744
+ const baseMs = code === 'ECONNRESET' ? 3000 : 1000;
745
+ const jitter = Math.floor(Math.random() * 250);
746
+ return Math.min(baseMs * Math.pow(2, Math.max(0, attempt - 1)) + jitter, 15000);
747
+ }
748
+ async start() {
749
+ if (this.server)
750
+ return this.port ?? 0;
751
+ return new Promise((resolve, reject) => {
752
+ this.server = http.createServer((req, res) => {
753
+ void this.handleRequest(req, res);
754
+ });
755
+ this.server.listen(0, '127.0.0.1', () => {
756
+ const addr = this.server?.address();
757
+ this.port = typeof addr === 'object' && addr ? addr.port : 0;
758
+ resolve(this.port);
759
+ });
760
+ this.server.on('error', reject);
761
+ });
762
+ }
763
+ stop() {
764
+ if (this.server) {
765
+ this.server.close();
766
+ this.server = null;
767
+ this.port = null;
768
+ }
769
+ this.httpAgent.destroy();
770
+ this.httpsAgent.destroy();
771
+ }
772
+ readBody(req) {
773
+ return new Promise((resolve, reject) => {
774
+ const chunks = [];
775
+ const maxSize = 10 * 1024 * 1024;
776
+ let total = 0;
777
+ req.on('data', (chunk) => {
778
+ total += chunk.length;
779
+ if (total > maxSize) {
780
+ req.destroy();
781
+ reject(new Error('Request body too large'));
782
+ return;
783
+ }
784
+ chunks.push(chunk);
785
+ });
786
+ req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
787
+ req.on('error', reject);
788
+ });
789
+ }
790
+ async handleModelsRequest(requestPath, clientRes) {
791
+ return new Promise((resolve) => {
792
+ const targetUrl = new url_1.URL(`${this.config.targetBaseUrl}${requestPath}`);
793
+ const requestFn = targetUrl.protocol === 'https:' ? https.request : http.request;
794
+ const upstreamReq = requestFn({
795
+ protocol: targetUrl.protocol,
796
+ hostname: targetUrl.hostname,
797
+ port: targetUrl.port,
798
+ path: targetUrl.pathname + targetUrl.search,
799
+ method: 'GET',
800
+ timeout: this.config.timeoutMs,
801
+ agent: targetUrl.protocol === 'https:' ? this.httpsAgent : this.httpAgent,
802
+ headers: {
803
+ Authorization: `Bearer ${this.config.apiKey}`,
804
+ Accept: 'application/json',
805
+ 'User-Agent': CODEX_USER_AGENT,
806
+ },
807
+ }, (upstreamRes) => {
808
+ const chunks = [];
809
+ upstreamRes.on('data', (chunk) => chunks.push(chunk));
810
+ upstreamRes.on('end', () => {
811
+ const statusCode = upstreamRes.statusCode || 502;
812
+ const rawBody = Buffer.concat(chunks).toString('utf8');
813
+ const normalizedBody = statusCode < 400 ? normalizeModelsPayloadForAnthropic(rawBody) : rawBody;
814
+ if (!clientRes.headersSent) {
815
+ clientRes.writeHead(statusCode, { 'Content-Type': 'application/json' });
816
+ }
817
+ clientRes.end(normalizedBody ||
818
+ JSON.stringify({
819
+ type: 'error',
820
+ error: {
821
+ type: 'api_error',
822
+ message: `Upstream models request failed: ${statusCode}`,
823
+ },
824
+ }));
825
+ resolve();
826
+ });
827
+ upstreamRes.on('error', (err) => {
828
+ if (!clientRes.headersSent) {
829
+ clientRes.writeHead(502, { 'Content-Type': 'application/json' });
830
+ }
831
+ clientRes.end(JSON.stringify({
832
+ type: 'error',
833
+ error: { type: 'api_error', message: err.message },
834
+ }));
835
+ resolve();
836
+ });
837
+ });
838
+ upstreamReq.on('timeout', () => {
839
+ upstreamReq.destroy(new Error('Upstream models request timeout'));
840
+ });
841
+ upstreamReq.on('error', (err) => {
842
+ if (!clientRes.headersSent) {
843
+ clientRes.writeHead(502, { 'Content-Type': 'application/json' });
844
+ }
845
+ clientRes.end(JSON.stringify({
846
+ type: 'error',
847
+ error: { type: 'api_error', message: err.message },
848
+ }));
849
+ resolve();
850
+ });
851
+ upstreamReq.end();
852
+ });
853
+ }
854
+ async handleRequest(req, res) {
855
+ const method = req.method || 'GET';
856
+ let requestPath = req.url || '/';
857
+ // Strip /api/provider/{provider} prefix if present
858
+ // Claude CLI sends to /api/provider/codex/v1/messages, we need /v1/messages
859
+ const providerPrefixMatch = requestPath.match(/^\/api\/provider\/[^/]+(.*)$/);
860
+ if (providerPrefixMatch) {
861
+ requestPath = providerPrefixMatch[1] || '/';
862
+ }
863
+ this.log(`${method} ${req.url} → path=${requestPath}`);
864
+ // Handle count_tokens endpoint - return a fake estimate since Responses API has no equivalent
865
+ if (method === 'POST' && requestPath.includes('/count_tokens')) {
866
+ this.log('count_tokens request - returning estimate');
867
+ try {
868
+ const rawBody = await this.readBody(req);
869
+ const body = rawBody.length ? JSON.parse(rawBody) : {};
870
+ // Rough estimate: ~4 chars per token
871
+ const textLen = JSON.stringify(body.messages || body).length;
872
+ const estimate = Math.ceil(textLen / 4);
873
+ res.writeHead(200, { 'Content-Type': 'application/json' });
874
+ res.end(JSON.stringify({ input_tokens: estimate }));
875
+ }
876
+ catch {
877
+ res.writeHead(200, { 'Content-Type': 'application/json' });
878
+ res.end(JSON.stringify({ input_tokens: 1000 }));
879
+ }
880
+ return;
881
+ }
882
+ if (method === 'GET' && requestPath.startsWith('/v1/models')) {
883
+ await this.handleModelsRequest(requestPath, res);
884
+ return;
885
+ }
886
+ // Only handle POST /v1/messages (the Anthropic Messages API endpoint)
887
+ if (method !== 'POST' || !requestPath.startsWith('/v1/messages')) {
888
+ // For other paths, return a simple response
889
+ if (method === 'GET' && requestPath === '/') {
890
+ res.writeHead(200, { 'Content-Type': 'application/json' });
891
+ res.end(JSON.stringify({ status: 'ok', proxy: 'anthropic-to-openai' }));
892
+ return;
893
+ }
894
+ res.writeHead(404, { 'Content-Type': 'application/json' });
895
+ res.end(JSON.stringify({ error: `Unsupported: ${method} ${requestPath}` }));
896
+ return;
897
+ }
898
+ try {
899
+ const rawBody = await this.readBody(req);
900
+ let anthropicReq;
901
+ try {
902
+ anthropicReq = rawBody.length ? JSON.parse(rawBody) : {};
903
+ }
904
+ catch {
905
+ res.writeHead(400, { 'Content-Type': 'application/json' });
906
+ res.end(JSON.stringify({ error: 'Invalid JSON' }));
907
+ return;
908
+ }
909
+ // Translate request
910
+ const openaiReq = translateRequestChat(anthropicReq);
911
+ const model = anthropicReq.model || 'unknown';
912
+ this.log(`Translated request: model=${model}, stream=${openaiReq.stream}, messages=${openaiReq.messages.length}`);
913
+ // Build target base URL (without endpoint path)
914
+ const targetBase = this.config.targetBaseUrl;
915
+ // Force streaming for upstream API (both Responses and Chat Completions)
916
+ const wantStream = !!openaiReq.stream;
917
+ openaiReq.stream = true;
918
+ if (wantStream) {
919
+ await this.handleStreaming(req, res, targetBase, openaiReq, model);
920
+ }
921
+ else {
922
+ // Non-streaming: collect streaming response, return as JSON
923
+ await this.handleNonStreamingViaStream(req, res, targetBase, openaiReq, model);
924
+ }
925
+ }
926
+ catch (error) {
927
+ const err = error;
928
+ this.log(`Error: ${err.message}`);
929
+ if (!res.headersSent) {
930
+ res.writeHead(502, { 'Content-Type': 'application/json' });
931
+ res.end(JSON.stringify({
932
+ type: 'error',
933
+ error: { type: 'api_error', message: err.message },
934
+ }));
935
+ return;
936
+ }
937
+ if (!res.writableEnded) {
938
+ res.end();
939
+ }
940
+ }
941
+ }
942
+ async handleStreaming(_req, clientRes, targetBase, openaiReqChat, model) {
943
+ let retried401 = false;
944
+ const networkRetryCount = { chat: 0, responses: 0 };
945
+ const attempt = (mode) => {
946
+ return new Promise((resolveAttempt, rejectAttempt) => {
947
+ const scheduleNetworkRetry = (err, source) => {
948
+ if (!this.isRetryableNetworkError(err) ||
949
+ clientRes.headersSent ||
950
+ clientRes.writableEnded) {
951
+ return false;
952
+ }
953
+ const next = networkRetryCount[mode] + 1;
954
+ if (next > this.maxNetworkRetries) {
955
+ return false;
956
+ }
957
+ networkRetryCount[mode] = next;
958
+ const delay = this.getRetryDelayMs(next, err);
959
+ const seconds = Math.max(1, Math.round(delay / 1000));
960
+ const errCode = String(err.code || '');
961
+ if (errCode === 'ECONNRESET') {
962
+ this.log(`Connection reset by server [retrying in ${seconds}s attempt #${next}/${this.maxNetworkRetries}] (${source}, ${mode})`);
963
+ }
964
+ else {
965
+ this.log(`Transient network error (${source}, ${mode}): ${err.message} [retrying in ${seconds}s attempt #${next}/${this.maxNetworkRetries}]`);
966
+ }
967
+ setTimeout(() => {
968
+ attempt(mode).then(resolveAttempt).catch(rejectAttempt);
969
+ }, delay);
970
+ return true;
971
+ };
972
+ const targetUrl = new url_1.URL(`${targetBase}${mode === 'chat' ? '/v1/chat/completions' : '/v1/responses'}`);
973
+ const body = mode === 'chat'
974
+ ? openaiReqChat
975
+ : translateChatToResponses(JSON.parse(JSON.stringify({ ...openaiReqChat, stream: true })), this.lastResponseId);
976
+ const bodyString = JSON.stringify(body);
977
+ const requestFn = targetUrl.protocol === 'https:' ? https.request : http.request;
978
+ // Build headers: include codex session headers only when using Responses API
979
+ const upstreamHeaders = {
980
+ 'Content-Type': 'application/json',
981
+ 'Content-Length': Buffer.byteLength(bodyString),
982
+ Authorization: `Bearer ${this.config.apiKey}`,
983
+ Accept: 'text/event-stream',
984
+ 'User-Agent': CODEX_USER_AGENT,
985
+ };
986
+ if (this.config.useResponsesApi) {
987
+ upstreamHeaders['x-session-id'] = 'ccs-codex-stable';
988
+ upstreamHeaders['conversation_id'] = 'ccs-codex-stable';
989
+ upstreamHeaders['session_id'] = 'ccs-codex-stable';
990
+ }
991
+ const upstreamReq = requestFn({
992
+ protocol: targetUrl.protocol,
993
+ hostname: targetUrl.hostname,
994
+ port: targetUrl.port,
995
+ path: targetUrl.pathname + targetUrl.search,
996
+ method: 'POST',
997
+ timeout: this.config.timeoutMs,
998
+ agent: targetUrl.protocol === 'https:' ? this.httpsAgent : this.httpAgent,
999
+ headers: upstreamHeaders,
1000
+ }, (upstreamRes) => {
1001
+ const statusCode = upstreamRes.statusCode || 200;
1002
+ if (statusCode >= 400) {
1003
+ const chunks = [];
1004
+ upstreamRes.on('data', (c) => chunks.push(c));
1005
+ upstreamRes.on('end', () => {
1006
+ const bodyErr = Buffer.concat(chunks).toString('utf8');
1007
+ this.log(`Upstream ${mode} error ${statusCode}: ${bodyErr.slice(0, 200)}`);
1008
+ // Try fallback: chat→responses (only if Responses API is enabled)
1009
+ if (mode === 'chat' && this.config.useResponsesApi) {
1010
+ attempt('responses').then(resolveAttempt).catch(rejectAttempt);
1011
+ return;
1012
+ }
1013
+ // Auto-retry once on 401 (backend intermittently returns token_revoked)
1014
+ if (statusCode === 401 && !retried401) {
1015
+ retried401 = true;
1016
+ this.log('401 received, retrying once...');
1017
+ setTimeout(() => {
1018
+ attempt(mode).then(resolveAttempt).catch(rejectAttempt);
1019
+ }, 500);
1020
+ return;
1021
+ }
1022
+ if (this.isRetryableStatusCode(statusCode) && !clientRes.headersSent) {
1023
+ const next = networkRetryCount[mode] + 1;
1024
+ if (next <= this.maxNetworkRetries) {
1025
+ networkRetryCount[mode] = next;
1026
+ const delay = this.getRetryDelayMs(next);
1027
+ const seconds = Math.max(1, Math.round(delay / 1000));
1028
+ this.log(`Transient upstream status ${statusCode} [retrying in ${seconds}s attempt #${next}/${this.maxNetworkRetries}] (${mode})`);
1029
+ setTimeout(() => {
1030
+ attempt(mode).then(resolveAttempt).catch(rejectAttempt);
1031
+ }, delay);
1032
+ return;
1033
+ }
1034
+ }
1035
+ // No fallback left: return error
1036
+ if (!clientRes.headersSent) {
1037
+ clientRes.writeHead(statusCode, { 'Content-Type': 'application/json' });
1038
+ }
1039
+ try {
1040
+ const parsed = JSON.parse(bodyErr);
1041
+ clientRes.end(JSON.stringify({
1042
+ type: 'error',
1043
+ error: {
1044
+ type: 'api_error',
1045
+ message: parsed?.error?.message || bodyErr.slice(0, 500),
1046
+ },
1047
+ }));
1048
+ }
1049
+ catch {
1050
+ clientRes.end(JSON.stringify({
1051
+ type: 'error',
1052
+ error: { type: 'api_error', message: bodyErr.slice(0, 500) },
1053
+ }));
1054
+ }
1055
+ resolveAttempt();
1056
+ });
1057
+ return;
1058
+ }
1059
+ // Set up Anthropic SSE response
1060
+ clientRes.writeHead(200, {
1061
+ 'Content-Type': 'text/event-stream',
1062
+ 'Cache-Control': 'no-cache',
1063
+ Connection: 'keep-alive',
1064
+ });
1065
+ const translator = new StreamingResponseTranslator(model);
1066
+ let buffer = '';
1067
+ let hasFinished = false;
1068
+ const activeToolCalls = new Map();
1069
+ let refusalStarted = false;
1070
+ upstreamRes.on('data', (chunk) => {
1071
+ buffer += chunk.toString('utf8');
1072
+ const parsedEvents = consumeSSEEvents(buffer);
1073
+ buffer = parsedEvents.rest;
1074
+ for (const event of parsedEvents.events) {
1075
+ if (hasFinished)
1076
+ continue;
1077
+ const jsonStr = extractSSEDataPayload(event);
1078
+ if (!jsonStr)
1079
+ continue;
1080
+ if (jsonStr.trim() === '[DONE]') {
1081
+ if (!hasFinished) {
1082
+ const final = translator.emitFinalIfNeeded();
1083
+ if (final)
1084
+ clientRes.write(final);
1085
+ hasFinished = true;
1086
+ }
1087
+ continue;
1088
+ }
1089
+ try {
1090
+ // Try Chat Completions chunk first
1091
+ const parsed = JSON.parse(jsonStr);
1092
+ if (parsed && parsed.type) {
1093
+ // Responses API event
1094
+ const evtType = parsed.type;
1095
+ if (evtType === 'keepalive') {
1096
+ // Keepalive event: silently ignore (connection heartbeat)
1097
+ }
1098
+ else if (evtType === 'response.created' ||
1099
+ evtType === 'response.in_progress') {
1100
+ // Response lifecycle events: silently ignore (informational only)
1101
+ // These indicate the response has started/is processing
1102
+ }
1103
+ else if (evtType.endsWith('.output_text.delta') &&
1104
+ typeof parsed.delta === 'string') {
1105
+ // Start block if needed, then stream text
1106
+ const start = translator.translateChunk({
1107
+ choices: [{ delta: { content: '' } }],
1108
+ });
1109
+ const textDelta = translator.translateChunk({
1110
+ choices: [{ delta: { content: parsed.delta } }],
1111
+ });
1112
+ if (start)
1113
+ clientRes.write(start);
1114
+ if (textDelta)
1115
+ clientRes.write(textDelta);
1116
+ }
1117
+ else if (evtType === 'response.output_text.done') {
1118
+ // output_text.done is informational; block close is handled by finish_reason/completed.
1119
+ }
1120
+ else if (evtType === 'response.output_item.added') {
1121
+ // Output item added: handle function_call, ignore message type (content comes via output_text.delta)
1122
+ if (parsed.item?.type === 'function_call') {
1123
+ // Tool call start: emit as Anthropic tool_use via fake chunk
1124
+ const tcId = parsed.item.call_id || parsed.item.id || `call_${Date.now()}`;
1125
+ const tcName = parsed.item.name || '';
1126
+ const outputIndex = parsed.output_index ?? 0;
1127
+ activeToolCalls.set(outputIndex, { id: tcId, name: tcName });
1128
+ const events = translator.translateChunk({
1129
+ choices: [
1130
+ {
1131
+ delta: {
1132
+ tool_calls: [
1133
+ {
1134
+ index: outputIndex,
1135
+ id: tcId,
1136
+ function: { name: tcName, arguments: '' },
1137
+ },
1138
+ ],
1139
+ },
1140
+ },
1141
+ ],
1142
+ });
1143
+ if (events)
1144
+ clientRes.write(events);
1145
+ }
1146
+ // Silently ignore message type - content is handled by output_text.delta
1147
+ }
1148
+ else if (evtType === 'response.content_part.added' ||
1149
+ evtType === 'response.content_part.done') {
1150
+ // Content part events: silently ignore (content is handled by output_text.delta)
1151
+ // These events indicate text/refusal content blocks but actual content comes via delta events
1152
+ }
1153
+ else if (evtType === 'response.function_call_arguments.delta' &&
1154
+ typeof parsed.delta === 'string') {
1155
+ // Tool call arguments delta
1156
+ const outputIndex = parsed.output_index ?? 0;
1157
+ const events = translator.translateChunk({
1158
+ choices: [
1159
+ {
1160
+ delta: {
1161
+ tool_calls: [
1162
+ { index: outputIndex, function: { arguments: parsed.delta } },
1163
+ ],
1164
+ },
1165
+ },
1166
+ ],
1167
+ });
1168
+ if (events)
1169
+ clientRes.write(events);
1170
+ }
1171
+ else if (evtType === 'response.function_call_arguments.done') {
1172
+ // Tool call arguments complete: mark as done (translator will handle on finish_reason)
1173
+ this.log('Tool call arguments completed');
1174
+ }
1175
+ else if (evtType === 'response.output_item.done') {
1176
+ // Output item done: handle function_call, ignore message type
1177
+ if (parsed.item?.type === 'function_call') {
1178
+ // Tool call item done: just log, don't finish yet (wait for response.completed)
1179
+ this.log('Tool call item completed');
1180
+ }
1181
+ // Silently ignore message type
1182
+ }
1183
+ else if (evtType === 'response.refusal.delta' &&
1184
+ typeof parsed.delta === 'string') {
1185
+ // Refusal text delta: add [refusal] prefix only on first delta
1186
+ const start = translator.translateChunk({
1187
+ choices: [{ delta: { content: '' } }],
1188
+ });
1189
+ const prefix = refusalStarted ? '' : '[refusal] ';
1190
+ const textDelta = translator.translateChunk({
1191
+ choices: [{ delta: { content: `${prefix}${parsed.delta}` } }],
1192
+ });
1193
+ if (start)
1194
+ clientRes.write(start);
1195
+ if (textDelta)
1196
+ clientRes.write(textDelta);
1197
+ refusalStarted = true;
1198
+ }
1199
+ else if (evtType === 'response.refusal.done') {
1200
+ // Refusal complete: close block and finish
1201
+ const events = translator.translateChunk({
1202
+ choices: [{ finish_reason: 'end_turn' }],
1203
+ });
1204
+ if (events)
1205
+ clientRes.write(events);
1206
+ hasFinished = true;
1207
+ }
1208
+ else if (evtType === 'error') {
1209
+ // Keep SSE protocol shape stable: emit error as assistant text, then finish.
1210
+ const errorMsg = parsed.error?.message || parsed.message || 'Unknown error';
1211
+ this.log(`Upstream SSE error event: ${errorMsg}`);
1212
+ if (!hasFinished) {
1213
+ const errorDelta = translator.translateChunk({
1214
+ choices: [{ delta: { content: `[upstream_error] ${errorMsg}` } }],
1215
+ });
1216
+ if (errorDelta)
1217
+ clientRes.write(errorDelta);
1218
+ const finishEvent = translator.translateChunk({
1219
+ choices: [{ finish_reason: 'stop' }],
1220
+ });
1221
+ if (finishEvent)
1222
+ clientRes.write(finishEvent);
1223
+ hasFinished = true;
1224
+ }
1225
+ }
1226
+ else if (evtType === 'response.completed') {
1227
+ // Extract usage info and emit final events
1228
+ if (parsed.response?.usage) {
1229
+ translator['inputTokens'] = parsed.response.usage.input_tokens ?? 0;
1230
+ translator['outputTokens'] = parsed.response.usage.output_tokens ?? 0;
1231
+ }
1232
+ // Track response ID for conversation chaining
1233
+ if (parsed.response?.id) {
1234
+ this.lastResponseId = parsed.response.id;
1235
+ this.log(`Stored response ID: ${this.lastResponseId}`);
1236
+ }
1237
+ if (!hasFinished) {
1238
+ hasFinished = true;
1239
+ // If we have active tool calls, emit tool_calls finish_reason
1240
+ if (activeToolCalls.size > 0) {
1241
+ const finishEvent = translator.translateChunk({
1242
+ choices: [{ finish_reason: 'tool_calls' }],
1243
+ });
1244
+ if (finishEvent)
1245
+ clientRes.write(finishEvent);
1246
+ }
1247
+ else {
1248
+ // Only emit final if no tool calls (translateChunk already emitted terminal events)
1249
+ const final = translator.emitFinalIfNeeded();
1250
+ if (final)
1251
+ clientRes.write(final);
1252
+ }
1253
+ }
1254
+ }
1255
+ else if (evtType.startsWith('response.web_search.')) {
1256
+ // Web search events: log for debugging, treat as informational
1257
+ this.log(`Web search event: ${evtType}`);
1258
+ // Could emit as text delta if needed: "[Searching web...]"
1259
+ if (evtType === 'response.web_search.started') {
1260
+ const searchDelta = translator.translateChunk({
1261
+ choices: [{ delta: { content: '[Searching web...]\n' } }],
1262
+ });
1263
+ if (searchDelta)
1264
+ clientRes.write(searchDelta);
1265
+ }
1266
+ }
1267
+ else if (evtType.startsWith('response.file_search.')) {
1268
+ // File search events: log for debugging
1269
+ this.log(`File search event: ${evtType}`);
1270
+ if (evtType === 'response.file_search.started') {
1271
+ const searchDelta = translator.translateChunk({
1272
+ choices: [{ delta: { content: '[Searching files...]\n' } }],
1273
+ });
1274
+ if (searchDelta)
1275
+ clientRes.write(searchDelta);
1276
+ }
1277
+ }
1278
+ else if (evtType.startsWith('response.code_interpreter.')) {
1279
+ // Code interpreter events: log for debugging
1280
+ this.log(`Code interpreter event: ${evtType}`);
1281
+ if (evtType === 'response.code_interpreter.started') {
1282
+ const codeDelta = translator.translateChunk({
1283
+ choices: [{ delta: { content: '[Running code...]\n' } }],
1284
+ });
1285
+ if (codeDelta)
1286
+ clientRes.write(codeDelta);
1287
+ }
1288
+ else if (evtType === 'response.code_interpreter.output' && parsed.output) {
1289
+ // Code output: emit as text
1290
+ const outputDelta = translator.translateChunk({
1291
+ choices: [{ delta: { content: `\`\`\`\n${parsed.output}\n\`\`\`\n` } }],
1292
+ });
1293
+ if (outputDelta)
1294
+ clientRes.write(outputDelta);
1295
+ }
1296
+ }
1297
+ else if (evtType.startsWith('response.mcp.')) {
1298
+ // MCP tool events: log for debugging
1299
+ this.log(`MCP event: ${evtType}`);
1300
+ if (evtType === 'response.mcp.started') {
1301
+ const mcpDelta = translator.translateChunk({
1302
+ choices: [{ delta: { content: '[Using MCP tool...]\n' } }],
1303
+ });
1304
+ if (mcpDelta)
1305
+ clientRes.write(mcpDelta);
1306
+ }
1307
+ }
1308
+ else if (evtType === 'response.reasoning_summary_part.added') {
1309
+ // Reasoning block start → Anthropic thinking block
1310
+ const events = translator.emitThinkingStart();
1311
+ if (events)
1312
+ clientRes.write(events);
1313
+ }
1314
+ else if (evtType === 'response.reasoning_summary_text.delta' &&
1315
+ typeof parsed.delta === 'string') {
1316
+ // Reasoning text delta → thinking_delta
1317
+ const events = translator.emitThinkingDelta(parsed.delta);
1318
+ if (events)
1319
+ clientRes.write(events);
1320
+ }
1321
+ else if (evtType === 'response.reasoning_summary_part.done') {
1322
+ // Reasoning block done → close thinking block
1323
+ const events = translator.emitThinkingStop();
1324
+ if (events)
1325
+ clientRes.write(events);
1326
+ }
1327
+ else if (evtType.includes('reasoning')) {
1328
+ // Log other reasoning events for debugging
1329
+ this.log(`[REASONING EVENT] ${evtType}: ${JSON.stringify(parsed).slice(0, 200)}`);
1330
+ }
1331
+ else {
1332
+ // Log unknown event types for debugging
1333
+ if (this.config.verbose) {
1334
+ this.log(`Unknown Responses API event type: ${evtType}`);
1335
+ }
1336
+ }
1337
+ }
1338
+ else {
1339
+ const chunkObj = parsed;
1340
+ const events = translator.translateChunk(chunkObj);
1341
+ if (events)
1342
+ clientRes.write(events);
1343
+ if (chunkObj.choices?.[0]?.finish_reason)
1344
+ hasFinished = true;
1345
+ }
1346
+ }
1347
+ catch (e) {
1348
+ this.log(`Failed to parse SSE chunk: ${jsonStr.slice(0, 100)} - ${e.message}`);
1349
+ }
1350
+ }
1351
+ });
1352
+ upstreamRes.on('end', () => {
1353
+ if (buffer.trim() && !hasFinished) {
1354
+ const trailingPayload = extractSSEDataPayload(buffer);
1355
+ if (trailingPayload && trailingPayload.trim() !== '[DONE]') {
1356
+ try {
1357
+ const parsed = JSON.parse(trailingPayload);
1358
+ if (parsed && parsed.type) {
1359
+ if (parsed.type === 'response.completed') {
1360
+ hasFinished = true;
1361
+ }
1362
+ }
1363
+ else {
1364
+ const chunk = parsed;
1365
+ const events = translator.translateChunk(chunk);
1366
+ if (events)
1367
+ clientRes.write(events);
1368
+ if (chunk.choices?.[0]?.finish_reason)
1369
+ hasFinished = true;
1370
+ }
1371
+ }
1372
+ catch (e) {
1373
+ this.log(`Failed to parse trailing SSE chunk: ${trailingPayload.slice(0, 100)} - ${e.message}`);
1374
+ }
1375
+ }
1376
+ }
1377
+ if (!hasFinished) {
1378
+ const final = translator.emitFinalIfNeeded();
1379
+ if (final)
1380
+ clientRes.write(final);
1381
+ }
1382
+ if (!clientRes.writableEnded) {
1383
+ clientRes.end();
1384
+ }
1385
+ resolveAttempt();
1386
+ });
1387
+ upstreamRes.on('error', (err) => {
1388
+ if (hasFinished || clientRes.writableEnded) {
1389
+ resolveAttempt();
1390
+ return;
1391
+ }
1392
+ if (scheduleNetworkRetry(err, 'response')) {
1393
+ return;
1394
+ }
1395
+ this.log(`Upstream response stream error (${mode}): ${err.message}`);
1396
+ if (clientRes.headersSent) {
1397
+ const errorDelta = translator.translateChunk({
1398
+ choices: [{ delta: { content: `[upstream_error] ${err.message}` } }],
1399
+ });
1400
+ if (errorDelta)
1401
+ clientRes.write(errorDelta);
1402
+ const finishEvent = translator.translateChunk({
1403
+ choices: [{ finish_reason: 'stop' }],
1404
+ });
1405
+ if (finishEvent)
1406
+ clientRes.write(finishEvent);
1407
+ hasFinished = true;
1408
+ if (!clientRes.writableEnded) {
1409
+ clientRes.end();
1410
+ }
1411
+ resolveAttempt();
1412
+ return;
1413
+ }
1414
+ rejectAttempt(err);
1415
+ });
1416
+ });
1417
+ upstreamReq.on('timeout', () => {
1418
+ upstreamReq.destroy(new Error('Upstream request timeout'));
1419
+ });
1420
+ upstreamReq.on('error', (err) => {
1421
+ // On network error for chat attempt, fallback to responses (only if Responses API enabled)
1422
+ if (mode === 'chat' && this.config.useResponsesApi && !clientRes.headersSent) {
1423
+ attempt('responses').then(resolveAttempt).catch(rejectAttempt);
1424
+ return;
1425
+ }
1426
+ if (scheduleNetworkRetry(err, 'request')) {
1427
+ return;
1428
+ }
1429
+ this.log(`Request error (${mode}): ${err.message}`);
1430
+ if (!clientRes.headersSent) {
1431
+ clientRes.writeHead(502, { 'Content-Type': 'application/json' });
1432
+ clientRes.end(JSON.stringify({
1433
+ type: 'error',
1434
+ error: { type: 'api_error', message: err.message },
1435
+ }));
1436
+ }
1437
+ rejectAttempt(err);
1438
+ });
1439
+ upstreamReq.write(bodyString);
1440
+ upstreamReq.end();
1441
+ });
1442
+ };
1443
+ // Start with Responses API for codex, Chat Completions for generic OpenAI endpoints
1444
+ await attempt(this.config.useResponsesApi ? 'responses' : 'chat');
1445
+ }
1446
+ /** For non-streaming requests: call API with stream=true, collect text, return Anthropic JSON */
1447
+ async handleNonStreamingViaStream(_req, clientRes, targetBase, openaiReqChat, model) {
1448
+ return new Promise((resolve, reject) => {
1449
+ let retried = false;
1450
+ let networkRetryCount = 0;
1451
+ const doRequest = () => {
1452
+ const scheduleNetworkRetry = (err, source) => {
1453
+ if (!this.isRetryableNetworkError(err) ||
1454
+ clientRes.headersSent ||
1455
+ clientRes.writableEnded) {
1456
+ return false;
1457
+ }
1458
+ const next = networkRetryCount + 1;
1459
+ if (next > this.maxNetworkRetries) {
1460
+ return false;
1461
+ }
1462
+ networkRetryCount = next;
1463
+ const delay = this.getRetryDelayMs(next, err);
1464
+ const seconds = Math.max(1, Math.round(delay / 1000));
1465
+ const errCode = String(err.code || '');
1466
+ if (errCode === 'ECONNRESET') {
1467
+ this.log(`Connection reset by server [retrying in ${seconds}s attempt #${next}/${this.maxNetworkRetries}] (non-stream, ${source})`);
1468
+ }
1469
+ else {
1470
+ this.log(`Transient non-stream network error (${source}): ${err.message} [retrying in ${seconds}s attempt #${next}/${this.maxNetworkRetries}]`);
1471
+ }
1472
+ setTimeout(() => doRequest(), delay);
1473
+ return true;
1474
+ };
1475
+ // Use Responses API for codex, Chat Completions for generic OpenAI endpoints
1476
+ const useResponses = this.config.useResponsesApi;
1477
+ const targetUrl = new url_1.URL(`${targetBase}${useResponses ? '/v1/responses' : '/v1/chat/completions'}`);
1478
+ const body = useResponses
1479
+ ? translateChatToResponses(JSON.parse(JSON.stringify({ ...openaiReqChat, stream: true })), this.lastResponseId)
1480
+ : { ...openaiReqChat, stream: true };
1481
+ const bodyString = JSON.stringify(body);
1482
+ const requestFn = targetUrl.protocol === 'https:' ? https.request : http.request;
1483
+ // Build headers: include codex session headers only when using Responses API
1484
+ const nonStreamHeaders = {
1485
+ 'Content-Type': 'application/json',
1486
+ 'Content-Length': Buffer.byteLength(bodyString),
1487
+ Authorization: `Bearer ${this.config.apiKey}`,
1488
+ Accept: 'text/event-stream',
1489
+ 'User-Agent': CODEX_USER_AGENT,
1490
+ };
1491
+ if (useResponses) {
1492
+ nonStreamHeaders['x-session-id'] = 'ccs-codex-stable';
1493
+ nonStreamHeaders['conversation_id'] = 'ccs-codex-stable';
1494
+ nonStreamHeaders['session_id'] = 'ccs-codex-stable';
1495
+ }
1496
+ const upstreamReq = requestFn({
1497
+ protocol: targetUrl.protocol,
1498
+ hostname: targetUrl.hostname,
1499
+ port: targetUrl.port,
1500
+ path: targetUrl.pathname + targetUrl.search,
1501
+ method: 'POST',
1502
+ timeout: this.config.timeoutMs,
1503
+ agent: targetUrl.protocol === 'https:' ? this.httpsAgent : this.httpAgent,
1504
+ headers: nonStreamHeaders,
1505
+ }, (upstreamRes) => {
1506
+ const statusCode = upstreamRes.statusCode || 200;
1507
+ if (statusCode >= 400) {
1508
+ const chunks = [];
1509
+ upstreamRes.on('data', (c) => chunks.push(c));
1510
+ upstreamRes.on('end', () => {
1511
+ const bodyErr = Buffer.concat(chunks).toString('utf8');
1512
+ this.log(`Upstream non-stream error ${statusCode}: ${bodyErr.slice(0, 200)}`);
1513
+ // Auto-retry once on 401
1514
+ if (statusCode === 401 && !retried) {
1515
+ retried = true;
1516
+ this.log('401 received (non-stream), retrying once...');
1517
+ setTimeout(() => doRequest(), 500);
1518
+ return;
1519
+ }
1520
+ if (this.isRetryableStatusCode(statusCode) && !clientRes.headersSent) {
1521
+ const next = networkRetryCount + 1;
1522
+ if (next <= this.maxNetworkRetries) {
1523
+ networkRetryCount = next;
1524
+ const delay = this.getRetryDelayMs(next);
1525
+ const seconds = Math.max(1, Math.round(delay / 1000));
1526
+ this.log(`Transient upstream status ${statusCode} [retrying in ${seconds}s attempt #${next}/${this.maxNetworkRetries}] (non-stream)`);
1527
+ setTimeout(() => doRequest(), delay);
1528
+ return;
1529
+ }
1530
+ }
1531
+ clientRes.writeHead(statusCode, { 'Content-Type': 'application/json' });
1532
+ clientRes.end(JSON.stringify({
1533
+ type: 'error',
1534
+ error: { type: 'api_error', message: bodyErr.slice(0, 500) },
1535
+ }));
1536
+ resolve();
1537
+ });
1538
+ return;
1539
+ }
1540
+ // Collect text, thinking, and tool calls from streaming events
1541
+ let buffer = '';
1542
+ let collectedText = '';
1543
+ let collectedThinking = '';
1544
+ const collectedToolCalls = [];
1545
+ const activeToolCallsMap = new Map();
1546
+ let inputTokens = 0;
1547
+ let outputTokens = 0;
1548
+ upstreamRes.on('data', (chunk) => {
1549
+ buffer += chunk.toString('utf8');
1550
+ const parsedEvents = consumeSSEEvents(buffer);
1551
+ buffer = parsedEvents.rest;
1552
+ for (const event of parsedEvents.events) {
1553
+ const payload = extractSSEDataPayload(event);
1554
+ if (!payload || payload.trim() === '[DONE]')
1555
+ continue;
1556
+ try {
1557
+ const parsed = JSON.parse(payload);
1558
+ // Chat Completions format (no .type field, has .choices)
1559
+ if (!parsed?.type && parsed?.choices) {
1560
+ const choice = parsed.choices[0];
1561
+ if (choice?.delta?.content)
1562
+ collectedText += choice.delta.content;
1563
+ if (choice?.delta?.reasoning_content)
1564
+ collectedThinking += choice.delta.reasoning_content;
1565
+ if (choice?.delta?.tool_calls) {
1566
+ for (const tc of choice.delta.tool_calls) {
1567
+ const idx = tc.index ?? 0;
1568
+ if (tc.id) {
1569
+ activeToolCallsMap.set(idx, {
1570
+ id: tc.id,
1571
+ name: tc.function?.name || '',
1572
+ arguments: '',
1573
+ });
1574
+ }
1575
+ if (tc.function?.arguments) {
1576
+ const existing = activeToolCallsMap.get(idx);
1577
+ if (existing)
1578
+ existing.arguments += tc.function.arguments;
1579
+ }
1580
+ }
1581
+ }
1582
+ if (choice?.finish_reason && choice.finish_reason !== 'stop') {
1583
+ // Tool calls finished
1584
+ for (const [idx, tc] of activeToolCallsMap) {
1585
+ collectedToolCalls.push(tc);
1586
+ activeToolCallsMap.delete(idx);
1587
+ }
1588
+ }
1589
+ if (parsed.usage) {
1590
+ inputTokens = parsed.usage.prompt_tokens ?? inputTokens;
1591
+ outputTokens = parsed.usage.completion_tokens ?? outputTokens;
1592
+ }
1593
+ continue;
1594
+ }
1595
+ // Responses API format (has .type field)
1596
+ if (!parsed?.type)
1597
+ continue;
1598
+ const evtType = parsed.type;
1599
+ if (evtType.endsWith('.output_text.delta') && typeof parsed.delta === 'string') {
1600
+ collectedText += parsed.delta;
1601
+ }
1602
+ else if (evtType === 'response.reasoning_summary_text.delta' &&
1603
+ typeof parsed.delta === 'string') {
1604
+ collectedThinking += parsed.delta;
1605
+ }
1606
+ else if (evtType === 'response.output_item.added' &&
1607
+ parsed.item?.type === 'function_call') {
1608
+ const outputIndex = parsed.output_index ?? 0;
1609
+ activeToolCallsMap.set(outputIndex, {
1610
+ id: parsed.item.call_id || parsed.item.id || `call_${Date.now()}`,
1611
+ name: parsed.item.name || '',
1612
+ arguments: '',
1613
+ });
1614
+ }
1615
+ else if (evtType === 'response.function_call_arguments.delta' &&
1616
+ typeof parsed.delta === 'string') {
1617
+ const outputIndex = parsed.output_index ?? 0;
1618
+ const toolCall = activeToolCallsMap.get(outputIndex);
1619
+ if (toolCall) {
1620
+ toolCall.arguments += parsed.delta;
1621
+ }
1622
+ }
1623
+ else if (evtType === 'response.output_item.done' &&
1624
+ parsed.item?.type === 'function_call') {
1625
+ const outputIndex = parsed.output_index ?? 0;
1626
+ const toolCall = activeToolCallsMap.get(outputIndex);
1627
+ if (toolCall) {
1628
+ collectedToolCalls.push(toolCall);
1629
+ activeToolCallsMap.delete(outputIndex);
1630
+ }
1631
+ }
1632
+ else if (evtType === 'response.completed') {
1633
+ if (parsed.response?.usage) {
1634
+ inputTokens = parsed.response.usage.input_tokens ?? 0;
1635
+ outputTokens = parsed.response.usage.output_tokens ?? 0;
1636
+ }
1637
+ if (parsed.response?.id) {
1638
+ this.lastResponseId = parsed.response.id;
1639
+ }
1640
+ }
1641
+ }
1642
+ catch (e) {
1643
+ this.log(`Failed to parse non-stream SSE chunk: ${payload.slice(0, 100)} - ${e.message}`);
1644
+ }
1645
+ }
1646
+ });
1647
+ upstreamRes.on('end', () => {
1648
+ // Build Anthropic Messages API response
1649
+ const content = [];
1650
+ if (collectedThinking) {
1651
+ content.push({ type: 'thinking', thinking: collectedThinking, signature: '' });
1652
+ }
1653
+ if (collectedText) {
1654
+ content.push({ type: 'text', text: collectedText });
1655
+ }
1656
+ for (const tc of collectedToolCalls) {
1657
+ let input = {};
1658
+ try {
1659
+ input = JSON.parse(tc.arguments);
1660
+ }
1661
+ catch {
1662
+ input = tc.arguments;
1663
+ }
1664
+ content.push({ type: 'tool_use', id: tc.id, name: tc.name, input });
1665
+ }
1666
+ const stopReason = collectedToolCalls.length > 0 ? 'tool_use' : 'end_turn';
1667
+ const anthropicResp = {
1668
+ id: `msg_${Date.now().toString(36)}`,
1669
+ type: 'message',
1670
+ role: 'assistant',
1671
+ content,
1672
+ model,
1673
+ stop_reason: stopReason,
1674
+ stop_sequence: null,
1675
+ usage: { input_tokens: inputTokens, output_tokens: outputTokens },
1676
+ };
1677
+ clientRes.writeHead(200, { 'Content-Type': 'application/json' });
1678
+ clientRes.end(JSON.stringify(anthropicResp));
1679
+ resolve();
1680
+ });
1681
+ upstreamRes.on('error', (err) => {
1682
+ if (scheduleNetworkRetry(err, 'response')) {
1683
+ return;
1684
+ }
1685
+ reject(err);
1686
+ });
1687
+ });
1688
+ upstreamReq.on('timeout', () => upstreamReq.destroy(new Error('Upstream request timeout')));
1689
+ upstreamReq.on('error', (err) => {
1690
+ if (scheduleNetworkRetry(err, 'request')) {
1691
+ return;
1692
+ }
1693
+ this.log(`Non-stream request error: ${err.message}`);
1694
+ if (!clientRes.headersSent) {
1695
+ clientRes.writeHead(502, { 'Content-Type': 'application/json' });
1696
+ clientRes.end(JSON.stringify({ type: 'error', error: { type: 'api_error', message: err.message } }));
1697
+ }
1698
+ reject(err);
1699
+ });
1700
+ upstreamReq.write(bodyString);
1701
+ upstreamReq.end();
1702
+ }; // end doRequest
1703
+ doRequest();
1704
+ });
1705
+ }
1706
+ }
1707
+ exports.AnthropicToOpenAIProxy = AnthropicToOpenAIProxy;
1708
+ //# sourceMappingURL=anthropic-to-openai-proxy.js.map