@sifxprime/krouter 0.5.168 → 0.5.169

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 (220) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +9 -9
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/prerender-manifest.json +3 -3
  5. package/app/.next-cli-build/required-server-files.json +12 -0
  6. package/app/.next-cli-build/routes-manifest.json +15 -0
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/environment/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/presidio/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  34. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  35. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  36. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  37. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  38. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  40. package/app/.next-cli-build/server/app/_not-found.rsc +2 -2
  41. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +2 -2
  42. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  43. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  44. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
  45. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  46. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  47. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +3 -3
  48. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  49. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  50. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  51. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  52. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +1 -1
  53. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  54. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  55. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +1 -1
  56. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  57. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  58. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  59. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  60. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  61. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  62. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  63. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  64. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  65. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  66. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  67. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  68. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  69. package/app/.next-cli-build/server/app/callback.html +1 -1
  70. package/app/.next-cli-build/server/app/callback.rsc +2 -2
  71. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +2 -2
  72. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  73. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +2 -2
  74. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  75. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +2 -2
  76. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  77. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +2 -2
  78. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  79. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  80. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +4 -4
  81. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +4 -4
  82. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +4 -4
  83. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  84. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  85. package/app/.next-cli-build/server/app/dashboard/combos.rsc +2 -2
  86. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  87. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +2 -2
  88. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  89. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  90. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +3 -3
  91. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
  92. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +3 -3
  93. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  94. package/app/.next-cli-build/server/app/dashboard/environment.html +1 -1
  95. package/app/.next-cli-build/server/app/dashboard/environment.rsc +2 -2
  96. package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk/dashboard/environment/__PAGE__.segment.rsc +2 -2
  97. package/app/.next-cli-build/server/app/dashboard/environment.segments/_full.segment.rsc +2 -2
  98. package/app/.next-cli-build/server/app/dashboard/environment.segments/_tree.segment.rsc +1 -1
  99. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  100. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +2 -2
  101. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  102. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +2 -2
  103. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  104. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  105. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +3 -3
  106. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +3 -3
  107. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +3 -3
  108. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  109. package/app/.next-cli-build/server/app/dashboard/presidio.html +1 -1
  110. package/app/.next-cli-build/server/app/dashboard/presidio.rsc +2 -2
  111. package/app/.next-cli-build/server/app/dashboard/presidio.segments/!KGRhc2hib2FyZCk/dashboard/presidio/__PAGE__.segment.rsc +2 -2
  112. package/app/.next-cli-build/server/app/dashboard/presidio.segments/_full.segment.rsc +2 -2
  113. package/app/.next-cli-build/server/app/dashboard/presidio.segments/_tree.segment.rsc +1 -1
  114. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  115. package/app/.next-cli-build/server/app/dashboard/profile.rsc +2 -2
  116. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  117. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +2 -2
  118. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  119. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  120. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +2 -2
  121. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  122. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +2 -2
  123. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  124. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  125. package/app/.next-cli-build/server/app/dashboard/providers.rsc +2 -2
  126. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  127. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +2 -2
  128. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  129. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  130. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +2 -2
  131. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  132. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +2 -2
  133. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  134. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  135. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +2 -2
  136. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  137. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +2 -2
  138. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  139. package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  140. package/app/.next-cli-build/server/app/dashboard/quota.rsc +2 -2
  141. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +2 -2
  142. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +2 -2
  143. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  144. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  145. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  146. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +2 -2
  147. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +2 -2
  148. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  149. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +2 -2
  150. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  151. package/app/.next-cli-build/server/app/dashboard/skills.rsc +2 -2
  152. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  153. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +2 -2
  154. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  155. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  156. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +2 -2
  157. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  158. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +2 -2
  159. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  160. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  161. package/app/.next-cli-build/server/app/dashboard/translator.rsc +2 -2
  162. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  163. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +2 -2
  164. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  165. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  166. package/app/.next-cli-build/server/app/dashboard/usage.rsc +2 -2
  167. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  168. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +2 -2
  169. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  170. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  171. package/app/.next-cli-build/server/app/dashboard.rsc +3 -3
  172. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +3 -3
  173. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +3 -3
  174. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  175. package/app/.next-cli-build/server/app/index.html +1 -1
  176. package/app/.next-cli-build/server/app/index.rsc +2 -2
  177. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  178. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +2 -2
  179. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  180. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  181. package/app/.next-cli-build/server/app/landing.html +1 -1
  182. package/app/.next-cli-build/server/app/landing.rsc +2 -2
  183. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +2 -2
  184. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  185. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  186. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  187. package/app/.next-cli-build/server/app/login.html +1 -1
  188. package/app/.next-cli-build/server/app/login.rsc +2 -2
  189. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +2 -2
  190. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  191. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  192. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  193. package/app/.next-cli-build/server/app-paths-manifest.json +9 -9
  194. package/app/.next-cli-build/server/chunks/1350.js +1 -1
  195. package/app/.next-cli-build/server/chunks/1738.js +1 -1
  196. package/app/.next-cli-build/server/chunks/2557.js +1 -1
  197. package/app/.next-cli-build/server/chunks/2722.js +1 -1
  198. package/app/.next-cli-build/server/chunks/3120.js +2 -2
  199. package/app/.next-cli-build/server/chunks/5718.js +1 -1
  200. package/app/.next-cli-build/server/chunks/6182.js +7 -5
  201. package/app/.next-cli-build/server/chunks/6200.js +1 -1
  202. package/app/.next-cli-build/server/chunks/8238.js +1 -1
  203. package/app/.next-cli-build/server/chunks/8895.js +1 -1
  204. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  205. package/app/.next-cli-build/server/middleware.js +3 -3
  206. package/app/.next-cli-build/server/pages/404.html +1 -1
  207. package/app/.next-cli-build/server/pages/500.html +1 -1
  208. package/app/.next-cli-build/server/preview-props.json +3 -3
  209. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  210. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  211. package/app/.next-cli-build/static/KF4DQC15EViS89R-ZTHoZ/_buildManifest.js +1 -0
  212. package/app/.next-cli-build/static/chunks/{1321-91a272a5139df5f2.js → 1321-2101f9adafb561f2.js} +1 -1
  213. package/app/.next-cli-build/static/chunks/{6069-31c2febe26d36d92.js → 6069-816e9c8ac21ec280.js} +1 -1
  214. package/app/cli/package.json +1 -1
  215. package/app/package.json +1 -1
  216. package/app/server.js +1 -1
  217. package/app/src/mitm/server.js +30 -30
  218. package/package.json +1 -1
  219. package/app/.next-cli-build/static/em-yyr0O7qRIA9N8Clc4I/_buildManifest.js +0 -1
  220. /package/app/.next-cli-build/static/{em-yyr0O7qRIA9N8Clc4I → KF4DQC15EViS89R-ZTHoZ}/_ssgManifest.js +0 -0
@@ -36,7 +36,7 @@
36
36
  fi
37
37
  fi
38
38
  done
39
- `;return new Promise(a=>{f(d,{shell:"/bin/bash"},()=>a())})}async function z(a,b){if(!h()){k(`🔐 Cert: cannot install to system store without sudo — trust this file on clients: ${b}`),await y(b,"add");return}let c=p(),d=`${c.dir}/krouter-root-ca.crt`,e=`${c.dir}/9router-root-ca.crt`,f=`rm -f "${e}"; cp "${b}" "${d}" && (${c.cmd} 2>/dev/null || true)`;try{await g(f,a),await y(b,"add"),k(`🔐 Cert: ✅ installed to Linux trust store (${c.dir}) and user browser databases`)}catch(a){throw Error(`Certificate install failed: ${a.message}`)}}async function A(a){if(await y(null,"delete"),!h())return;let b=p(),c=`${b.dir}/krouter-root-ca.crt`,d=`${b.dir}/9router-root-ca.crt`,e=`rm -f "${c}" "${d}" && (${b.cmd} 2>/dev/null || true)`;try{await g(e,a),k("\uD83D\uDD10 Cert: ✅ uninstalled from Linux trust store and user browser databases")}catch(a){throw Error("Failed to uninstall certificate")}}a.exports={installCert:async function a(a,b){if(!d.existsSync(b))throw Error(`Certificate file not found: ${b}`);await s(b)?k("\uD83D\uDD10 Cert: already trusted ✅"):m?await v(b):n?await u(a,b):await z(a,b)},uninstallCert:async function a(a,b){await s(b)?m?await x():n?await w(a,b):await A(a):k("\uD83D\uDD10 Cert: not found in system store")},checkCertInstalled:s,describeSudoFailure:t}},11722:(a,b,c)=>{let d=["docker","containerd","kubepods","podman","lxc","crio"];a.exports={detectContainer:function(a){let b=a||{existsSync:c(29021).existsSync,readFileSync:c(29021).readFileSync,env:process.env,platform:process.platform},e=a=>{try{return!!b.existsSync(a)}catch{return!1}},f=b.env||{};if(f.KUBERNETES_SERVICE_HOST)return{containerized:!0,kind:"kubernetes"};if("1"===String(f.KROUTER_FORCE_MITM||"")||"linux"!==b.platform)return{containerized:!1,kind:null};if(e("/.dockerenv"))return{containerized:!0,kind:"docker"};if(e("/run/.containerenv"))return{containerized:!0,kind:"podman"};let g=(a=>{try{return String(b.readFileSync(a,"utf8")??"")}catch{return""}})("/proc/1/cgroup").toLowerCase(),h=d.find(a=>g.includes(a));return h?{containerized:!0,kind:"crio"===h?"cri-o":h}:{containerized:!1,kind:null}}}},17511:(a,b,c)=>{let d=c(29021),e=(()=>{if("win32"===process.platform)return null;for(let a of["/usr/sbin/lsof","/usr/bin/lsof","/sbin/lsof"])try{return d.accessSync(a,d.constants.X_OK),a}catch{}return"lsof"})(),f={antigravity:[":generateContent",":streamGenerateContent"],copilot:["/chat/completions","/v1/messages","/responses"],kiro:["/generateAssistantResponse"],cursor:["/BidiAppend","/RunSSE","/RunPoll","/Run"],claude:["/v1/messages"]};a.exports={IS_DEV:!1,LSOF_BIN:e,TARGET_HOSTS:["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com","api.individual.githubcopilot.com","q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com","runtime.us-east-1.kiro.dev","api2.cursor.sh","api.anthropic.com"],URL_PATTERNS:f,MODEL_SYNONYMS:{antigravity:{"gemini-default":"gemini-3.8-flash-medium","gemini-3.5-flash-high":"gemini-3.8-flash-high","gemini-3.5-flash-medium":"gemini-3.8-flash-medium","gemini-3.5-flash-low":"gemini-3.8-flash-low","gemini-3.5-flash-extra-low":"gemini-3.8-flash-low","gemini-3.8-flash":"gemini-3.8-flash-medium","gemini-3.1-pro-high":"gemini-pro-agent","gemini-3-pro-high":"gemini-pro-agent","gemini-3-pro-low":"gemini-3.1-pro-low"}},MODEL_PATTERNS:{antigravity:[{match:/flash.*extra.*low|extra.*low.*flash|flash.*low|low.*flash/i,alias:"gemini-3.8-flash-low"},{match:/flash.*medium|medium.*flash/i,alias:"gemini-3.8-flash-medium"},{match:/flash.*agent|agent.*flash|flash/i,alias:"gemini-3.8-flash-high"},{match:/pro.*low|low.*pro/i,alias:"gemini-3.1-pro-low"},{match:/gemini.*pro|pro.*gemini/i,alias:"gemini-pro-agent"},{match:/opus.*5[.-]5.*high|5[.-]5.*opus.*high/i,alias:"claude-opus-5-5-high"},{match:/opus.*5[.-]5.*medium|5[.-]5.*opus.*medium/i,alias:"claude-opus-5-5-medium"},{match:/opus.*5[.-]5.*low|5[.-]5.*opus.*low/i,alias:"claude-opus-5-5-low"},{match:/opus.*5[.-]5|5[.-]5.*opus/i,alias:"claude-opus-5-5"},{match:/sonnet.*5[.-]5.*high|5[.-]5.*sonnet.*high/i,alias:"claude-sonnet-5-5-high"},{match:/sonnet.*5[.-]5.*medium|5[.-]5.*sonnet.*medium/i,alias:"claude-sonnet-5-5-medium"},{match:/sonnet.*5[.-]5.*low|5[.-]5.*sonnet.*low/i,alias:"claude-sonnet-5-5-low"},{match:/sonnet.*5[.-]5|5[.-]5.*sonnet/i,alias:"claude-sonnet-5-5"},{match:/opus/i,alias:"claude-opus-4-6-thinking"},{match:/sonnet|claude/i,alias:"claude-sonnet-4-6"},{match:/gpt.*oss|oss/i,alias:"gpt-oss-120b-medium"}]},MODEL_NO_MAP:{antigravity:[/^tab[_-]/i]},LOG_BLACKLIST_URL_PARTS:["recordCodeAssistMetrics","recordTrajectoryAnalytics","fetchAdminControls","listExperiments","fetchUserInfo"],getToolForHost:function(a){let b=(a||"").split(":")[0];return"api.individual.githubcopilot.com"===b?"copilot":"daily-cloudcode-pa.googleapis.com"===b||"cloudcode-pa.googleapis.com"===b?"antigravity":"q.us-east-1.amazonaws.com"===b||"codewhisperer.us-east-1.amazonaws.com"===b||"runtime.us-east-1.kiro.dev"===b?"kiro":"api2.cursor.sh"===b?"cursor":"api.anthropic.com"===b?"claude":null},isChatRequest:function(a,b){return!!(f[a]||[]).some(a=>(b.url||"").includes(a))||"kiro"===a&&String(b.headers?.["x-amz-target"]||"").includes("GenerateAssistantResponse")}}},26033:(a,b,c)=>{c(33873),c(29021);let{MITM_DIR:d}=c(82193),{generateRootCA:e,loadRootCA:f,generateLeafCert:g}=c(8578);a.exports={generateCert:async function a(){return await e()},getCertForDomain:function(a){try{let b=f(),c=g(a,b);return{key:c.key,cert:c.cert}}catch(b){return console.error(`Failed to generate cert for ${a}:`,b.message),null}}}},26444:(a,b,c)=>{let d=c(29021),e=c(33873),f=c(21820),{log:g}=c(87777),h="# >>> krouter NODE_EXTRA_CA_CERTS >>>",i="# <<< krouter NODE_EXTRA_CA_CERTS <<<",j=[".profile",".bash_profile",".bashrc",".zshrc"],k=".config/environment.d/95-krouter.conf",l=".pam_environment";function m(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function n(a){if(!a.includes(h))return{contents:a,changed:!1};let b=RegExp(`\\n?${m(h)}[\\s\\S]*?${m(i)}\\n?`,"g"),c=a.replace(b,"");return{contents:c,changed:c!==a}}a.exports={setLinuxNodeExtraCaCerts:function(a){if("linux"!==process.platform||!a||"string"!=typeof a)return[];let b=f.homedir(),c=`${h}
39
+ `;return new Promise(a=>{f(d,{shell:"/bin/bash"},()=>a())})}async function z(a,b){if(!h()){k(`🔐 Cert: cannot install to system store without sudo — trust this file on clients: ${b}`),await y(b,"add");return}let c=p(),d=`${c.dir}/krouter-root-ca.crt`,e=`${c.dir}/9router-root-ca.crt`,f=`rm -f "${e}"; cp "${b}" "${d}" && (${c.cmd} 2>/dev/null || true)`;try{await g(f,a),await y(b,"add"),k(`🔐 Cert: ✅ installed to Linux trust store (${c.dir}) and user browser databases`)}catch(a){throw Error(`Certificate install failed: ${a.message}`)}}async function A(a){if(await y(null,"delete"),!h())return;let b=p(),c=`${b.dir}/krouter-root-ca.crt`,d=`${b.dir}/9router-root-ca.crt`,e=`rm -f "${c}" "${d}" && (${b.cmd} 2>/dev/null || true)`;try{await g(e,a),k("\uD83D\uDD10 Cert: ✅ uninstalled from Linux trust store and user browser databases")}catch(a){throw Error("Failed to uninstall certificate")}}a.exports={installCert:async function a(a,b){if(!d.existsSync(b))throw Error(`Certificate file not found: ${b}`);await s(b)?k("\uD83D\uDD10 Cert: already trusted ✅"):m?await v(b):n?await u(a,b):await z(a,b)},uninstallCert:async function a(a,b){if(!await s(b))return void k("\uD83D\uDD10 Cert: not found in system store");m?await x():n?await w(a,b):await A(a);try{let{removeIdeCaTrust:a}=c(77715),{removed:b,failed:d}=a();for(let a of b)k(`🔐 Cert: removed ${a}`);for(let a of d)k(`🔐 Cert: ${a}`)}catch(a){k(`🔐 Cert: failed to remove IDE trust settings: ${a.message}`)}},checkCertInstalled:s,describeSudoFailure:t}},11722:(a,b,c)=>{let d=["docker","containerd","kubepods","podman","lxc","crio"];a.exports={detectContainer:function(a){let b=a||{existsSync:c(29021).existsSync,readFileSync:c(29021).readFileSync,env:process.env,platform:process.platform},e=a=>{try{return!!b.existsSync(a)}catch{return!1}},f=b.env||{};if(f.KUBERNETES_SERVICE_HOST)return{containerized:!0,kind:"kubernetes"};if("1"===String(f.KROUTER_FORCE_MITM||"")||"linux"!==b.platform)return{containerized:!1,kind:null};if(e("/.dockerenv"))return{containerized:!0,kind:"docker"};if(e("/run/.containerenv"))return{containerized:!0,kind:"podman"};let g=(a=>{try{return String(b.readFileSync(a,"utf8")??"")}catch{return""}})("/proc/1/cgroup").toLowerCase(),h=d.find(a=>g.includes(a));return h?{containerized:!0,kind:"crio"===h?"cri-o":h}:{containerized:!1,kind:null}}}},17511:(a,b,c)=>{let d=c(29021),e=(()=>{if("win32"===process.platform)return null;for(let a of["/usr/sbin/lsof","/usr/bin/lsof","/sbin/lsof"])try{return d.accessSync(a,d.constants.X_OK),a}catch{}return"lsof"})(),f={antigravity:[":generateContent",":streamGenerateContent"],copilot:["/chat/completions","/v1/messages","/responses"],kiro:["/generateAssistantResponse"],cursor:["/BidiAppend","/RunSSE","/RunPoll","/Run"],claude:["/v1/messages"]};a.exports={IS_DEV:!1,LSOF_BIN:e,TARGET_HOSTS:["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com","api.individual.githubcopilot.com","q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com","runtime.us-east-1.kiro.dev","api2.cursor.sh","api.anthropic.com"],URL_PATTERNS:f,MODEL_SYNONYMS:{antigravity:{"gemini-default":"gemini-3.8-flash-medium","gemini-3.5-flash-high":"gemini-3.8-flash-high","gemini-3.5-flash-medium":"gemini-3.8-flash-medium","gemini-3.5-flash-low":"gemini-3.8-flash-low","gemini-3.5-flash-extra-low":"gemini-3.8-flash-low","gemini-3.8-flash":"gemini-3.8-flash-medium","gemini-3.1-pro-high":"gemini-pro-agent","gemini-3-pro-high":"gemini-pro-agent","gemini-3-pro-low":"gemini-3.1-pro-low"}},MODEL_PATTERNS:{antigravity:[{match:/flash.*extra.*low|extra.*low.*flash|flash.*low|low.*flash/i,alias:"gemini-3.8-flash-low"},{match:/flash.*medium|medium.*flash/i,alias:"gemini-3.8-flash-medium"},{match:/flash.*agent|agent.*flash|flash/i,alias:"gemini-3.8-flash-high"},{match:/pro.*low|low.*pro/i,alias:"gemini-3.1-pro-low"},{match:/gemini.*pro|pro.*gemini/i,alias:"gemini-pro-agent"},{match:/opus.*5[.-]5.*high|5[.-]5.*opus.*high/i,alias:"claude-opus-5-5-high"},{match:/opus.*5[.-]5.*medium|5[.-]5.*opus.*medium/i,alias:"claude-opus-5-5-medium"},{match:/opus.*5[.-]5.*low|5[.-]5.*opus.*low/i,alias:"claude-opus-5-5-low"},{match:/opus.*5[.-]5|5[.-]5.*opus/i,alias:"claude-opus-5-5"},{match:/sonnet.*5[.-]5.*high|5[.-]5.*sonnet.*high/i,alias:"claude-sonnet-5-5-high"},{match:/sonnet.*5[.-]5.*medium|5[.-]5.*sonnet.*medium/i,alias:"claude-sonnet-5-5-medium"},{match:/sonnet.*5[.-]5.*low|5[.-]5.*sonnet.*low/i,alias:"claude-sonnet-5-5-low"},{match:/sonnet.*5[.-]5|5[.-]5.*sonnet/i,alias:"claude-sonnet-5-5"},{match:/opus/i,alias:"claude-opus-4-6-thinking",fallback:!0},{match:/sonnet|claude/i,alias:"claude-sonnet-4-6",fallback:!0},{match:/gpt.*oss|oss/i,alias:"gpt-oss-120b-medium",fallback:!0}],claude:[{match:/opus.*5[.-]5|5[.-]5.*opus/i,alias:"claude-opus-5-5"},{match:/opus.*5[.-]5|5[.-]5.*opus/i,alias:"claude-opus-4-7"},{match:/opus.*5[.-]5|5[.-]5.*opus/i,alias:"claude-opus-4-6"},{match:/sonnet.*5[.-]5|5[.-]5.*sonnet/i,alias:"claude-sonnet-5-5"},{match:/sonnet.*5[.-]5|5[.-]5.*sonnet/i,alias:"claude-sonnet-4-6"},{match:/sonnet.*5[.-]5|5[.-]5.*sonnet/i,alias:"claude-sonnet-4-5"},{match:/haiku/i,alias:"claude-haiku-5-5"},{match:/haiku/i,alias:"claude-haiku-4-5"},{match:/fable/i,alias:"claude-fable-5-1"},{match:/fable/i,alias:"claude-sonnet-4-6"},{match:/opus/i,alias:"claude-opus-5-5",fallback:!0},{match:/opus/i,alias:"claude-opus-4-7",fallback:!0},{match:/opus/i,alias:"claude-opus-4-6",fallback:!0},{match:/sonnet/i,alias:"claude-sonnet-5-5",fallback:!0},{match:/sonnet/i,alias:"claude-sonnet-4-6",fallback:!0},{match:/sonnet/i,alias:"claude-sonnet-4-5",fallback:!0},{match:/claude/i,alias:"claude-opus-4-7",fallback:!0},{match:/claude/i,alias:"claude-sonnet-4-6",fallback:!0}]},MODEL_NO_MAP:{antigravity:[/^tab[_-]/i]},LOG_BLACKLIST_URL_PARTS:["recordCodeAssistMetrics","recordTrajectoryAnalytics","fetchAdminControls","listExperiments","fetchUserInfo"],getToolForHost:function(a){let b=(a||"").split(":")[0];return"api.individual.githubcopilot.com"===b?"copilot":"daily-cloudcode-pa.googleapis.com"===b||"cloudcode-pa.googleapis.com"===b?"antigravity":"q.us-east-1.amazonaws.com"===b||"codewhisperer.us-east-1.amazonaws.com"===b||"runtime.us-east-1.kiro.dev"===b?"kiro":"api2.cursor.sh"===b?"cursor":"api.anthropic.com"===b?"claude":null},isChatRequest:function(a,b){return!!(f[a]||[]).some(a=>(b.url||"").includes(a))||"kiro"===a&&String(b.headers?.["x-amz-target"]||"").includes("GenerateAssistantResponse")}}},26033:(a,b,c)=>{c(33873),c(29021);let{MITM_DIR:d}=c(82193),{generateRootCA:e,loadRootCA:f,generateLeafCert:g}=c(8578);a.exports={generateCert:async function a(){return await e()},getCertForDomain:function(a){try{let b=f(),c=g(a,b);return{key:c.key,cert:c.cert}}catch(b){return console.error(`Failed to generate cert for ${a}:`,b.message),null}}}},26444:(a,b,c)=>{let d=c(29021),e=c(33873),f=c(21820),{log:g}=c(87777),h="# >>> krouter NODE_EXTRA_CA_CERTS >>>",i="# <<< krouter NODE_EXTRA_CA_CERTS <<<",j=[".profile",".bash_profile",".bashrc",".zshrc"],k=".config/environment.d/95-krouter.conf",l=".pam_environment";function m(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function n(a){if(!a.includes(h))return{contents:a,changed:!1};let b=RegExp(`\\n?${m(h)}[\\s\\S]*?${m(i)}\\n?`,"g"),c=a.replace(b,"");return{contents:c,changed:c!==a}}a.exports={setLinuxNodeExtraCaCerts:function(a){if("linux"!==process.platform||!a||"string"!=typeof a)return[];let b=f.homedir(),c=`${h}
40
40
  # Auto-managed by kRouter — DO NOT EDIT. Set/unset via the kRouter MITM panel.
41
41
  # Tells Node.js + Electron apps to trust the kRouter MITM root CA.
42
42
  export NODE_EXTRA_CA_CERTS="${a}"
@@ -59,11 +59,13 @@ NODE_EXTRA_CA_CERTS=${b}
59
59
  ${c}\r
60
60
  `;n(q,a,e),await l("ipconfig /flushdns | Out-Null")}else{let a=g.readFileSync(q,"utf8").replace(/[\r\n\s]+$/g,""),c=d.map(a=>`127.0.0.1 ${a}`).join("\n"),e=`${a}
61
61
  ${c}
62
- `.replace(/'/g,"'\\''");await t(`printf '%s' '${e}' | tee ${q} > /dev/null`,b),await u(b)}i(`🌐 DNS ${a}: ✅ added ${d.join(", ")}`)}catch(a){throw Error(a.message?.includes("incorrect password")?"Wrong sudo password":`Failed to add DNS entry: ${a.message}`)}}async function x(a,b){let c=k[a];if(!c)throw Error(`Unknown tool: ${a}`);let d=c.filter(a=>v(a));if(0===d.length)return void i(`🌐 DNS ${a}: already inactive`);try{if(o){let a=g.readFileSync(q,"utf8"),b=a.split(/\r?\n/).filter(a=>!d.some(b=>a.includes(b))).join("\r\n").replace(/[\r\n\s]+$/g,"")+"\r\n";n(q,a,b),await l("ipconfig /flushdns | Out-Null")}else{let a=(g.readFileSync(q,"utf8").split(/\r?\n/).filter(a=>!d.some(b=>a.includes(b))).join("\n").replace(/[\r\n\s]+$/g,"")+"\n").replace(/'/g,"'\\''");await t(`printf '%s' '${a}' | tee ${q} > /dev/null`,b),await u(b)}i(`🌐 DNS ${a}: ✅ removed ${d.join(", ")}`)}catch(a){throw Error(a.message?.includes("incorrect password")?"Wrong sudo password":`Failed to remove DNS entry: ${a.message}`)}}async function y(a){for(let b of Object.keys(k))try{await x(b,a)}catch(a){j(`DNS ${b}: failed to remove — ${a.message}`)}}a.exports={TOOL_HOSTS:k,addDNSEntry:w,removeDNSEntry:x,removeAllDNSEntries:y,removeAllDNSEntriesSync:function(){try{if(!g.existsSync(q))return;let a=Object.values(k).flat(),b=g.readFileSync(q,"utf8"),c=o?"\r\n":"\n",d=b.split(/\r?\n/).filter(b=>!a.some(a=>b.includes(a))).join(c).replace(/[\r\n\s]+$/g,"")+c;if(d===b)return;if(g.writeFileSync(q,d,"utf8"),o)try{f("ipconfig /flushdns",{windowsHide:!0,stdio:"ignore"})}catch{}else if(p)try{f("dscacheutil -flushcache && killall -HUP mDNSResponder",{stdio:"ignore"})}catch{}else try{f("resolvectl flush-caches 2>/dev/null || true",{stdio:"ignore"})}catch{}}catch{}},execWithPassword:t,isSudoAvailable:r,canRunSudoWithoutPassword:s,isSudoPasswordRequired:function(){return!o&&r()&&!s()},checkDNSEntry:v,checkAllDNSStatus:function(){try{let a=g.readFileSync(q,"utf8"),b={};for(let[c,d]of Object.entries(k))b[c]=d.every(b=>a.includes(b));return b}catch{return Object.fromEntries(Object.keys(k).map(a=>[a,!1]))}}}},82193:(a,b,c)=>{let d=c(29021),e=c(33873),f=c(21820),g="krouter";function h(){return"win32"===process.platform?e.join(process.env.APPDATA||e.join(f.homedir(),"AppData","Roaming"),g):e.join(f.homedir(),`.${g}`)}let i=function(){let a=process.env.DATA_DIR;if(!a)return h();try{return d.mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${g}`),h();throw b}}(),j=e.join(i,"mitm");a.exports={DATA_DIR:i,MITM_DIR:j,APP_NAME:g}},85341:a=>{a.exports={TOOL_HOSTS:{antigravity:["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com"],copilot:["api.individual.githubcopilot.com"],kiro:["runtime.us-east-1.kiro.dev","q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com"],cursor:["api2.cursor.sh"],claude:["api.anthropic.com"]}}},87777:(a,b,c)=>{let d=c(29021),e=c(33873),f=c(74075),{DATA_DIR:g}=c(82193),{LOG_BLACKLIST_URL_PARTS:h}=c(17511);function i(){return new Date().toLocaleTimeString("en-US",{hour12:!1})}let j=e.join(g,"logs","mitm");d.existsSync(j)||d.mkdirSync(j,{recursive:!0});let k=/^(authorization|proxy-authorization|cookie|set-cookie|x-api-key|api-key|x-goog-api-key|x-aws-.*|x-amz-.*|x-amzn-.*|x-stainless-api-key|openai-api-key|anthropic-api-key)$/i;function l(a){if(!a||"object"!=typeof a)return a;let b={};for(let[c,d]of Object.entries(a))b[c]=k.test(c)?"[REDACTED]":d;return b}let m=Number(process.env.MITM_MAX_DUMP_FILES)||1e3,n=0;function o(){if(++n%100==0)try{for(let{f:a}of d.readdirSync(j).map(a=>({f:a,t:d.statSync(e.join(j,a)).mtimeMs})).sort((a,b)=>b.t-a.t).slice(m))try{d.rmSync(e.join(j,a),{force:!0})}catch{}}catch{}}let p=/^\s*(\{\s*\}|\[\s*\]|null)?\s*$/;function q(a,b=80){return String(a).replace(/[^a-zA-Z0-9]/g,"_").substring(0,b)}function r(a){return!!a&&h.some(b=>a.includes(b))}a.exports={log:a=>console.log(`[${i()}] [MITM] ${a}`),err:a=>console.error(`[${i()}] ❌ [MITM] ${a}`),dumpRequest:function(a,b,c="raw"){if(r(a.url))return null;try{let f=new Date().toISOString().replace(/[:.]/g,"-"),g=q((a.headers.host||"")+a.url),h=e.join(j,`${f}_${c}_${g}.req.json`),i=null;try{i=JSON.parse(b.toString())}catch{}return d.writeFileSync(h,JSON.stringify({method:a.method,url:a.url,host:a.headers.host,headers:l(a.headers),body:i??b.toString("utf8")},null,2)),o(),h}catch{return null}},createResponseDumper:function(a,b="raw"){if(r(a.url))return null;let c=new Date().toISOString().replace(/[:.]/g,"-"),g=q((a.headers.host||"")+a.url),h=e.join(j,`${c}_${b}_${g}.res.txt`),i=0,k={},m=[];return{writeHeader:(a,b)=>{i=a,k=b||{}},writeChunk:a=>{null!=a&&m.push(Buffer.isBuffer(a)?a:Buffer.from(a))},end:()=>{try{let a=Buffer.concat(m),b=k["content-encoding"]||k["Content-Encoding"],c=(function(a,b){if(!a||0===a.length)return a;try{let c=(b||"").toLowerCase();if(c.includes("gzip"))return f.gunzipSync(a);if(c.includes("br"))return f.brotliDecompressSync(a);if(c.includes("deflate"))return f.inflateSync(a)}catch{}return a})(a,b).toString("utf8");if(p.test(c))return;let e=l({...k});delete e["content-encoding"],delete e["Content-Encoding"];let g=`STATUS: ${i}
62
+ `.replace(/'/g,"'\\''");await t(`printf '%s' '${e}' | tee ${q} > /dev/null`,b),await u(b)}i(`🌐 DNS ${a}: ✅ added ${d.join(", ")}`)}catch(a){throw Error(a.message?.includes("incorrect password")?"Wrong sudo password":`Failed to add DNS entry: ${a.message}`)}}async function x(a,b){let c=k[a];if(!c)throw Error(`Unknown tool: ${a}`);let d=c.filter(a=>v(a));if(0===d.length)return void i(`🌐 DNS ${a}: already inactive`);try{if(o){let a=g.readFileSync(q,"utf8"),b=a.split(/\r?\n/).filter(a=>!d.some(b=>a.includes(b))).join("\r\n").replace(/[\r\n\s]+$/g,"")+"\r\n";n(q,a,b),await l("ipconfig /flushdns | Out-Null")}else{let a=(g.readFileSync(q,"utf8").split(/\r?\n/).filter(a=>!d.some(b=>a.includes(b))).join("\n").replace(/[\r\n\s]+$/g,"")+"\n").replace(/'/g,"'\\''");await t(`printf '%s' '${a}' | tee ${q} > /dev/null`,b),await u(b)}i(`🌐 DNS ${a}: ✅ removed ${d.join(", ")}`)}catch(a){throw Error(a.message?.includes("incorrect password")?"Wrong sudo password":`Failed to remove DNS entry: ${a.message}`)}}async function y(a){for(let b of Object.keys(k))try{await x(b,a)}catch(a){j(`DNS ${b}: failed to remove — ${a.message}`)}}a.exports={TOOL_HOSTS:k,addDNSEntry:w,removeDNSEntry:x,removeAllDNSEntries:y,removeAllDNSEntriesSync:function(){try{if(!g.existsSync(q))return;let a=Object.values(k).flat(),b=g.readFileSync(q,"utf8"),c=o?"\r\n":"\n",d=b.split(/\r?\n/).filter(b=>!a.some(a=>b.includes(a))).join(c).replace(/[\r\n\s]+$/g,"")+c;if(d===b)return;if(g.writeFileSync(q,d,"utf8"),o)try{f("ipconfig /flushdns",{windowsHide:!0,stdio:"ignore"})}catch{}else if(p)try{f("dscacheutil -flushcache && killall -HUP mDNSResponder",{stdio:"ignore"})}catch{}else try{f("resolvectl flush-caches 2>/dev/null || true",{stdio:"ignore"})}catch{}}catch{}},execWithPassword:t,isSudoAvailable:r,canRunSudoWithoutPassword:s,isSudoPasswordRequired:function(){return!o&&r()&&!s()},checkDNSEntry:v,checkAllDNSStatus:function(){try{let a=g.readFileSync(q,"utf8"),b={};for(let[c,d]of Object.entries(k))b[c]=d.every(b=>a.includes(b));return b}catch{return Object.fromEntries(Object.keys(k).map(a=>[a,!1]))}}}},77715:(a,b,c)=>{let d=c(29021),e=c(33873),f=c(21820),g=[{id:"antigravity",name:"Antigravity IDE",setting:"antigravity.caCertificates",value:a=>[a],userDirs:()=>{let a=f.homedir();if("darwin"===process.platform)return[e.join(a,"Library","Application Support","Antigravity IDE","User"),e.join(a,"Library","Application Support","Antigravity","User")];if("win32"===process.platform){let b=process.env.APPDATA||e.join(a,"AppData","Roaming");return[e.join(b,"Antigravity IDE","User"),e.join(b,"Antigravity","User")]}return[e.join(a,".config","Antigravity IDE","User"),e.join(a,".config","Antigravity","User")]}}];function h(a){if(!d.existsSync(a))return{};let b=d.readFileSync(a,"utf-8");if(!b.trim())return{};try{return JSON.parse(b)}catch{let a=b.replace(/\/\*[\s\S]*?\*\//g,"").replace(/(^|[^:"'\\])\/\/.*$/gm,"$1").replace(/,(\s*[}\]])/g,"$1");try{return JSON.parse(a)}catch{return null}}}a.exports={configureIdeCaTrust:function(a){let b={written:[],skipped:[],failed:[]};if(!a||!d.existsSync(a))return b;for(let f of g)for(let g of f.userDirs()){var c;if(!d.existsSync(g))continue;let i=e.join(g,"settings.json"),j=h(i);if(null===j){b.failed.push(`${f.name}: settings.json is not parseable, left untouched`);continue}let k=f.value(a);if(c=j[f.setting],JSON.stringify(c)===JSON.stringify(k)){b.skipped.push(`${f.name}: already trusts the kRouter CA`);continue}try{let a={...j,[f.setting]:k};d.writeFileSync(i,`${JSON.stringify(a,null,4)}
63
+ `),b.written.push(`${f.name}: ${f.setting}`)}catch(a){b.failed.push(`${f.name}: ${a.message}`)}}return b},removeIdeCaTrust:function(){let a={removed:[],failed:[]};for(let b of g)for(let c of b.userDirs()){let f=e.join(c,"settings.json");if(!d.existsSync(f))continue;let g=h(f);if(null!==g&&b.setting in g)try{let c={...g};delete c[b.setting],d.writeFileSync(f,`${JSON.stringify(c,null,4)}
64
+ `),a.removed.push(`${b.name}: ${b.setting}`)}catch(c){a.failed.push(`${b.name}: ${c.message}`)}}return a},IDE_CA_SETTINGS:g,__test__:{readSettings:h}}},82193:(a,b,c)=>{let d=c(29021),e=c(33873),f=c(21820),g="krouter";function h(){return"win32"===process.platform?e.join(process.env.APPDATA||e.join(f.homedir(),"AppData","Roaming"),g):e.join(f.homedir(),`.${g}`)}let i=function(){let a=process.env.DATA_DIR;if(!a)return h();try{return d.mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${g}`),h();throw b}}(),j=e.join(i,"mitm");a.exports={DATA_DIR:i,MITM_DIR:j,APP_NAME:g}},85341:a=>{a.exports={TOOL_HOSTS:{antigravity:["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com"],copilot:["api.individual.githubcopilot.com"],kiro:["runtime.us-east-1.kiro.dev","q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com"],cursor:["api2.cursor.sh"],claude:["api.anthropic.com"]}}},87777:(a,b,c)=>{let d=c(29021),e=c(33873),f=c(74075),{DATA_DIR:g}=c(82193),{LOG_BLACKLIST_URL_PARTS:h}=c(17511);function i(){return new Date().toLocaleTimeString("en-US",{hour12:!1})}let j=e.join(g,"logs","mitm");d.existsSync(j)||d.mkdirSync(j,{recursive:!0});let k=/^(authorization|proxy-authorization|cookie|set-cookie|x-api-key|api-key|x-goog-api-key|x-aws-.*|x-amz-.*|x-amzn-.*|x-stainless-api-key|openai-api-key|anthropic-api-key)$/i;function l(a){if(!a||"object"!=typeof a)return a;let b={};for(let[c,d]of Object.entries(a))b[c]=k.test(c)?"[REDACTED]":d;return b}let m=Number(process.env.MITM_MAX_DUMP_FILES)||1e3,n=0;function o(){if(++n%100==0)try{for(let{f:a}of d.readdirSync(j).map(a=>({f:a,t:d.statSync(e.join(j,a)).mtimeMs})).sort((a,b)=>b.t-a.t).slice(m))try{d.rmSync(e.join(j,a),{force:!0})}catch{}}catch{}}let p=/^\s*(\{\s*\}|\[\s*\]|null)?\s*$/;function q(a,b=80){return String(a).replace(/[^a-zA-Z0-9]/g,"_").substring(0,b)}function r(a){return!!a&&h.some(b=>a.includes(b))}a.exports={log:a=>console.log(`[${i()}] [MITM] ${a}`),err:a=>console.error(`[${i()}] ❌ [MITM] ${a}`),dumpRequest:function(a,b,c="raw"){if(r(a.url))return null;try{let f=new Date().toISOString().replace(/[:.]/g,"-"),g=q((a.headers.host||"")+a.url),h=e.join(j,`${f}_${c}_${g}.req.json`),i=null;try{i=JSON.parse(b.toString())}catch{}return d.writeFileSync(h,JSON.stringify({method:a.method,url:a.url,host:a.headers.host,headers:l(a.headers),body:i??b.toString("utf8")},null,2)),o(),h}catch{return null}},createResponseDumper:function(a,b="raw"){if(r(a.url))return null;let c=new Date().toISOString().replace(/[:.]/g,"-"),g=q((a.headers.host||"")+a.url),h=e.join(j,`${c}_${b}_${g}.res.txt`),i=0,k={},m=[];return{writeHeader:(a,b)=>{i=a,k=b||{}},writeChunk:a=>{null!=a&&m.push(Buffer.isBuffer(a)?a:Buffer.from(a))},end:()=>{try{let a=Buffer.concat(m),b=k["content-encoding"]||k["Content-Encoding"],c=(function(a,b){if(!a||0===a.length)return a;try{let c=(b||"").toLowerCase();if(c.includes("gzip"))return f.gunzipSync(a);if(c.includes("br"))return f.brotliDecompressSync(a);if(c.includes("deflate"))return f.inflateSync(a)}catch{}return a})(a,b).toString("utf8");if(p.test(c))return;let e=l({...k});delete e["content-encoding"],delete e["Content-Encoding"];let g=`STATUS: ${i}
63
65
  HEADERS: ${JSON.stringify(e,null,2)}
64
66
  ---BODY---
65
- ${c}`;d.writeFileSync(h,g),o()}catch{}},file:h}},clearDumpDir:function(){try{if(!d.existsSync(j))return;for(let a of d.readdirSync(j))try{d.rmSync(e.join(j,a),{recursive:!0,force:!0})}catch{}}catch{}}}},96182:(a,b,c)=>{let{exec:d,spawn:e,execSync:f}=c(79646),g=c(33873),h=c(29021),i=c(21820),j=c(91645),k=c(55591),l=c(55511),{addDNSEntry:m,removeDNSEntry:n,removeAllDNSEntries:o,removeAllDNSEntriesSync:p,checkAllDNSStatus:q,TOOL_HOSTS:r,isSudoAvailable:s,isSudoPasswordRequired:t}=c(66936),{isAdmin:u}=c(64809),{detectContainer:v}=c(11722),w="win32"===process.platform,x="darwin"===process.platform,{generateCert:y}=c(26033),{installCert:z,uninstallCert:A}=c(9631),{isCertExpired:B}=c(8578),{DATA_DIR:C,MITM_DIR:D}=c(82193),{log:E,err:F}=c(87777),{LSOF_BIN:G}=c(17511),{setLinuxNodeExtraCaCerts:H,unsetLinuxNodeExtraCaCerts:I}=c(26444),J="linux"===process.platform,K="http://localhost:20128";function L(a){return null==a||""===a?"''":`'${String(a).replace(/'/g,"'\\''")}'`}async function M(){if(!ad)return K;try{let a=await ad(),b=a&&null!=a.mitmRouterBaseUrl?String(a.mitmRouterBaseUrl).trim():"";if(!b)return K;let c=new URL(b);if("http:"!==c.protocol&&"https:"!==c.protocol)return K;return b.replace(/\/+$/,"")}catch{return K}}let N=g.join(D,".mitm.pid"),O=g.join(D,".mitm.lock"),P=[5e3,1e4,2e4,3e4,6e4],Q=0,R=0,S=!1;function T(){if(process.env.MITM_SERVER_PATH)return process.env.MITM_SERVER_PATH;let a=g.join(__dirname,"server.js");if(h.existsSync(a))return a;let b=g.join(process.cwd(),"src","mitm","server.js");if(h.existsSync(b))return b;let c=g.join(process.cwd(),"..","src","mitm","server.js");return h.existsSync(c)?c:b}function U(a){try{if(!a||!h.existsSync(a)||!a.includes(`${g.sep}node_modules${g.sep}`))return a;let b=g.join(C,"runtime","mitm"),c=g.join(b,"server.js");if(h.existsSync(c))try{if(h.statSync(a).size===h.statSync(c).size)return c}catch{}return h.mkdirSync(b,{recursive:!0}),h.copyFileSync(a,c),c}catch(b){try{E(`[MITM] runtime copy failed: ${b.message}`)}catch{}return a}}let V=U(T()),W="aes-256-gcm",X="9router-mitm-pwd",Y=null,Z=null;function $(){return globalThis.__mitmSudoPassword||null}function _(a){globalThis.__mitmSudoPassword=a}function aa(a){try{return process.kill(a,0),!0}catch(a){return"EACCES"===a.code}}function ab(a,b=!1,e=null){if(w)d(`taskkill ${b?"/F ":""}/PID ${a}`,{windowsHide:!0},()=>{});else{let f=b?"SIGKILL":"SIGTERM",g=`pkill -${f} -P ${a} 2>/dev/null; kill -${f} ${a} 2>/dev/null`;if(e||s()){let{execWithPassword:a}=c(66936);a(g,e||"").catch(()=>d(g,{windowsHide:!0},()=>{}))}else d(g,{windowsHide:!0},()=>{})}}function ac(){try{let{machineIdSync:a}=c(19713),b=a();return l.createHash("sha256").update(b+X).digest()}catch{return l.createHash("sha256").update(X).digest()}}let ad=null,ae=null;async function af(a,b){if(ae)try{let c,d,e,f,g,h={mitmEnabled:a};b&&(c=ac(),d=l.randomBytes(12),e=l.createCipheriv(W,c,d),f=Buffer.concat([e.update(b,"utf8"),e.final()]),g=e.getAuthTag(),h.mitmSudoEncrypted=`${d.toString("hex")}:${g.toString("hex")}:${f.toString("hex")}`),await ae(h)}catch(a){F(`Failed to save settings: ${a.message}`)}}async function ag(){if(ae)try{await ae({mitmSudoEncrypted:null})}catch(a){F(`Failed to clear encrypted password: ${a.message}`)}}async function ah(){if(!ad)return null;try{let a=await ad();if(!a.mitmSudoEncrypted)return null;return function(a){try{let[b,c,d]=a.split(":");if(!b||!c||!d)return null;let e=ac(),f=l.createDecipheriv(W,e,Buffer.from(b,"hex"));return f.setAuthTag(Buffer.from(c,"hex")),f.update(Buffer.from(d,"hex"))+f.final("utf8")}catch{return null}}(a.mitmSudoEncrypted)}catch{return null}}async function ai(a,b){if(ae&&ad)try{let c={...(await ad()).dnsToolEnabled||{},[a]:b};await ae({dnsToolEnabled:c})}catch(a){F(`Failed to save DNS state: ${a.message}`)}}async function aj(){if(!ad)return{};try{return(await ad()).dnsToolEnabled||{}}catch{return{}}}async function ak(a){let b=await aj(),c=a||$()||await ah();for(let[a,d]of Object.entries(b))if(d&&r[a])try{await m(a,c)}catch(b){F(`DNS ${a}: restore failed — ${b.message}`)}}async function al(){return w?u():!(!u()&&t())||!!($()||await ah())}function am(a){return new Promise(a=>{w?d('powershell -NonInteractive -WindowStyle Hidden -Command "$c = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if ($c) { $c.OwningProcess } else { 0 }"',{windowsHide:!0},(b,c)=>{if(b)return a(null);let e=parseInt(c.trim(),10);if(!e||e<=4)return a(null);d(`tasklist /FI "PID eq ${e}" /FO CSV /NH`,{windowsHide:!0},(b,c)=>{let d=c?.match(/"([^"]+)"/);a({pid:e,name:d?d[1]:"unknown"})})}):d(`${G} -nP -iTCP:443 -sTCP:LISTEN -t`,{windowsHide:!0},(b,c)=>{if(b||!c?.trim())return a(null);let e=parseInt(c.trim().split("\n")[0],10);if(!e||isNaN(e))return a(null);d(`ps -p ${e} -o comm=`,{windowsHide:!0},(b,c)=>{a({pid:e,name:c?.trim()||"unknown"})})})})}async function an(a){if(Y&&!Y.killed){try{Y.kill("SIGKILL")}catch{}Y=null,Z=null}try{if(h.existsSync(N)){let b=parseInt(h.readFileSync(N,"utf-8").trim(),10);b&&aa(b)&&(ab(b,!0,a),await new Promise(a=>setTimeout(a,500))),h.unlinkSync(N)}}catch{}if(!w&&V)try{let b=V.replace(/'/g,"'\\''");if(a||s()){let{execWithPassword:d}=c(66936);await d(`pkill -SIGKILL -f "${b}" 2>/dev/null || true`,a||"").catch(()=>{})}else d(`pkill -SIGKILL -f "${b}" 2>/dev/null || true`,{windowsHide:!0},()=>{});await new Promise(a=>setTimeout(a,500))}catch{}}async function ao(){let a=null!==Y&&!Y.killed,b=Z;if(!a)try{if(h.existsSync(N)){let c=parseInt(h.readFileSync(N,"utf-8").trim(),10);c&&aa(c)?(a=!0,b=c):h.unlinkSync(N)}}catch{}let d=q(),e=g.join(D,"rootCA.crt"),f=h.existsSync(e),{checkCertInstalled:i}=c(9631),j=!!f&&await i(e),k=a?[]:Object.keys(d||{}).filter(a=>d[a]),l=k.length>0,{containerized:m,kind:n}=v();return{running:a,pid:b,certExists:f,certTrusted:j,dnsStatus:d,staleDns:l,staleDnsTools:k,containerized:m,containerKind:n}}async function ap(a){if(S)return;if(S=!0,Y&&!Y.killed){Q=0,E("MITM server already running, no restart needed");return}if(Date.now()-R>=6e4&&(Q=0),Q>=5){F("Max restart attempts reached. Giving up."),S=!1;return}let b=P[Math.min(Q,P.length-1)];Q++,E(`Restarting in ${b/1e3}s... (${Q}/5)`),await new Promise(a=>setTimeout(a,b));try{let b=ad?await ad():null;if(b&&!b.mitmEnabled){E("MITM disabled, skipping restart"),S=!1;return}let c=$()||await ah();if(!c&&!w){F("No cached password, cannot auto-restart"),S=!1;return}await ar(a,c),E("\uD83D\uDD04 Restarted successfully"),Q=0,S=!1}catch(b){F(`Restart attempt ${Q}/5 failed: ${b.message}`),S=!1,ap(a)}}async function aq(a,b){if(a&&a.pid){if(w)try{f(`powershell -NonInteractive -WindowStyle Hidden -Command "Stop-Process -Id ${a.pid} -Force -ErrorAction SilentlyContinue"`,{windowsHide:!0})}catch{}else try{let{execWithPassword:d}=c(66936);b||s()?await d(`kill -9 ${a.pid}`,b||""):f(`kill -9 ${a.pid}`,{windowsHide:!0})}catch{}await new Promise(a=>setTimeout(a,800))}}async function ar(a,b,l=!1){if(!Y||Y.killed)try{if(h.existsSync(N)){let a=parseInt(h.readFileSync(N,"utf-8").trim(),10);if(a&&aa(a))return Z=a,E(`♻️ Reusing existing process (PID: ${a})`),await af(!0,b),b&&_(b),{running:!0,pid:a};h.unlinkSync(N)}}catch{}if(Y&&!Y.killed)throw Error("MITM server is already running");try{h.writeFileSync(O,String(process.pid),{flag:"wx"})}catch(a){if("EEXIST"===a.code)throw Error("MITM server is already starting (lock contention)");throw a}try{if(await an(b),!w){let a=await new Promise(a=>{let b=j.createServer();b.once("error",b=>{"EADDRINUSE"===b.code?a("in-use"):a("no-permission")}),b.once("listening",()=>{b.close(()=>a("free"))}),b.listen(443,"127.0.0.1")});if("in-use"===a||"no-permission"===a){let a=await am(b);if(a){let c=a.name.includes("/")?a.name.split("/").filter(Boolean).pop():a.name;if(l)E(`Killing process on port 443 (PID ${a.pid}, name=${c})...`),await aq(a,b);else{let b=Error(`Port 443 is already in use by "${c}" (PID ${a.pid}).`);throw b.code="PORT_443_BUSY",b.portOwner={pid:a.pid,name:c},b}}}}let m=g.join(D,"rootCA.crt"),n=g.join(D,"rootCA.key"),o=h.existsSync(m)&&h.existsSync(n);if(!o||B(m)){if(o){E("\uD83D\uDD10 Cert expired — uninstalling old cert...");let a=b||$()||await ah();try{await A(a,m)}catch{}}E("\uD83D\uDD10 Generating Root CA..."),await y()}let{checkCertInstalled:p}=c(9631),r=await p(m),u=!w&&!x&&!s();if(r)E("\uD83D\uDD10 Cert: already trusted ✅");else{E("\uD83D\uDD10 Cert: not trusted → installing...");let a=b||$()||await ah();if(u)E(`🔐 Cert: skipping system trust (no sudo). Install ${m} as a trusted CA on machines that use this proxy.`);else{if(!a&&t())throw Error("Sudo password required to install Root CA certificate");try{await z(a,m),E("\uD83D\uDD10 Cert: ✅ trusted")}catch(a){throw Error(`Failed to trust certificate: ${a.message}`)}}}let v=V;if((!v||!h.existsSync(v))&&(E(`[MITM] server.js missing at ${v} → recopying`),!(v=U(T()))||!h.existsSync(v)))throw Error(`MITM server.js not found at ${v}. Reinstall kRouter.`);let C=await M();if(E(`🚀 Starting server... (router: ${C})`),w){let c=await am(b);if(c)if(l)E(`Killing process on port 443 (PID ${c.pid}, name=${c.name})...`),await aq(c,b);else{let a=Error(`Port 443 is already in use by "${c.name}" (PID ${c.pid}).`);throw a.code="PORT_443_BUSY",a.portOwner={pid:c.pid,name:c.name},a}Y=e(process.execPath,[v],{detached:!1,windowsHide:!0,cwd:i.tmpdir(),stdio:["ignore","pipe","pipe"],env:{...process.env,ROUTER_API_KEY:a,NODE_ENV:"production",MITM_ROUTER_BASE:C}}),ae&&await ae({mitmCertInstalled:!0}).catch(()=>{})}else if(s()){let c=[`HOME=${L(i.homedir())}`,`ROUTER_API_KEY=${L(a)}`,`MITM_ROUTER_BASE=${L(C)}`,"NODE_ENV=production",L(process.execPath),L(v)].join(" ");(Y=e("sudo",["-S","-E","sh","-c",c],{detached:!1,windowsHide:!0,stdio:["pipe","pipe","pipe"]})).stdin.write(`${b}
66
- `),Y.stdin.end()}else Y=e(process.execPath,[v],{detached:!1,windowsHide:!0,cwd:i.tmpdir(),stdio:["ignore","pipe","pipe"],env:{...process.env,ROUTER_API_KEY:a,NODE_ENV:"production",MITM_ROUTER_BASE:C}});if(Y&&(Z=Y.pid,h.writeFileSync(N,String(Z)),R=Date.now()),x){let a=g.join(D,"rootCA.crt");h.existsSync(a)&&d(`launchctl setenv NODE_EXTRA_CA_CERTS "${a}"`,{windowsHide:!0},b=>{b?E(`[launchctl] Failed to set NODE_EXTRA_CA_CERTS: ${b.message}`):E(`[launchctl] NODE_EXTRA_CA_CERTS set to ${a}`)})}else if(w){let a=g.join(D,"rootCA.crt");h.existsSync(a)&&d(`setx NODE_EXTRA_CA_CERTS "${a}"`,{windowsHide:!0},a=>{a?E(`[setx] Failed to set NODE_EXTRA_CA_CERTS: ${a.message}`):E("[setx] NODE_EXTRA_CA_CERTS set for current user")})}else if(J){let a=g.join(D,"rootCA.crt");if(h.existsSync(a))try{let b=H(a);b.length>0?(E(`[linux-node-ca] NODE_EXTRA_CA_CERTS written to ${b.length} file(s): ${b.map(a=>a.replace(i.homedir(),"~")).join(", ")}`),E("[linux-node-ca] ⚠ Terminal-launched IDE: open a NEW terminal OR run: source ~/.profile"),E("[linux-node-ca] ⚠ Menu-launched IDE (GNOME / KDE Activities, .desktop): log out + back in OR run: systemctl --user daemon-reload && systemctl --user import-environment")):E("[linux-node-ca] NODE_EXTRA_CA_CERTS already set, no changes needed")}catch(a){E(`[linux-node-ca] Failed to set NODE_EXTRA_CA_CERTS: ${a.message}`)}}let I=null;Y&&(Y.stdout.on("data",a=>{process.stdout.write(a)}),Y.stderr.on("data",a=>{let b=a.toString().trim();b&&(w||!b.includes("Password:")&&!b.includes("password for"))&&(F(b),I=b),!w&&(b.includes("incorrect password")||b.includes("no password was provided"))&&(_(null),ag(),S=!0)}),Y.on("exit",b=>{E(`Server exited (code: ${b})`),Y=null,Z=null;try{h.unlinkSync(N)}catch{}try{h.unlinkSync(O)}catch{}0===b||S||ap(a)}));let K=await function(a=443){return new Promise(b=>{let c=Date.now()+8e3,d=()=>{let e=k.request({hostname:"127.0.0.1",port:a,path:"/_mitm_health",method:"GET",rejectUnauthorized:!1},a=>{let c="";a.on("data",a=>{c+=a}),a.on("end",()=>{try{let a=JSON.parse(c);b(!0===a.ok?{ok:!0,pid:a.pid||null}:null)}catch{b(null)}})});e.on("error",()=>{Date.now()<c?setTimeout(d,500):b(null)}),e.end()};d()})}(443);if(!K){if(Y&&!Y.killed){try{Y.kill()}catch{}Y=null}let a=function(){try{if(w){let a=f('powershell -NonInteractive -WindowStyle Hidden -Command "$c = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if ($c) { $c.OwningProcess } else { 0 }"',{encoding:"utf8",windowsHide:!0}).trim(),b=parseInt(a,10);if(b&&b>4){let a=f(`tasklist /FI "PID eq ${b}" /FO CSV /NH`,{encoding:"utf8",windowsHide:!0}).match(/"([^"]+)"/);if(a)return a[1].replace(".exe","")}}else{let a=f(`${G} -i :443`,{encoding:"utf8",windowsHide:!0}).trim().split("\n");if(a.length>1)return a[1].split(/\s+/)[0]}}catch{}return null}(),b=a?` Port 443 already in use by ${a}.`:"",c=I||`Check sudo password or port 443 access.${b}`;throw Error(`MITM server failed to start. ${c}`)}ae&&await ae({mitmCertInstalled:!0}).catch(()=>{}),E(`✅ Server healthy (PID: ${Z||K.pid})`);let P=q();for(let[a,b]of Object.entries(P))E(`🌐 DNS ${a}: ${b?"✅ active":"❌ inactive"}`);await af(!0,b),b&&_(b);try{h.unlinkSync(O)}catch{}return{running:!0,pid:Z}}catch(a){try{h.unlinkSync(O)}catch{}throw a}}async function as(a){S=!0,Q=0,E("⏹ Stopping server...");let b=Y,e=b&&!b.killed?b.pid:(()=>{try{return parseInt(h.readFileSync(N,"utf-8").trim(),10)}catch{return null}})();if(e&&aa(e)&&(E(`Killing server (PID: ${e})...`),ab(e,!1,a),await new Promise(a=>setTimeout(a,1e3)),aa(e)&&ab(e,!0,a)),Y=null,Z=null,w){let a=g.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"),b=Object.values(r).flat();try{let{isAdmin:d,runElevatedPowerShell:e,quotePs:f}=c(64809);if(d()){let d=h.readFileSync(a,"utf8"),e=d.split(/\r?\n/).filter(a=>!b.some(b=>a.includes(b))).join("\r\n").replace(/[\r\n\s]+$/g,"")+"\r\n";e!==d&&h.writeFileSync(a,e,"utf8");try{c(79646).execSync("ipconfig /flushdns",{windowsHide:!0,stdio:"ignore"})}catch{}E("\uD83C\uDF10 DNS: ✅ all tool hosts removed")}else{let c=b.map(f).join(","),d=`
67
+ ${c}`;d.writeFileSync(h,g),o()}catch{}},file:h}},clearDumpDir:function(){try{if(!d.existsSync(j))return;for(let a of d.readdirSync(j))try{d.rmSync(e.join(j,a),{recursive:!0,force:!0})}catch{}}catch{}}}},96182:(a,b,c)=>{let{exec:d,spawn:e,execSync:f}=c(79646),g=c(33873),h=c(29021),i=c(21820),j=c(91645),k=c(55591),l=c(55511),{addDNSEntry:m,removeDNSEntry:n,removeAllDNSEntries:o,removeAllDNSEntriesSync:p,checkAllDNSStatus:q,TOOL_HOSTS:r,isSudoAvailable:s,isSudoPasswordRequired:t}=c(66936),{isAdmin:u}=c(64809),{detectContainer:v}=c(11722),w="win32"===process.platform,x="darwin"===process.platform,{generateCert:y}=c(26033),{installCert:z,uninstallCert:A}=c(9631),{isCertExpired:B}=c(8578),{DATA_DIR:C,MITM_DIR:D}=c(82193),{log:E,err:F}=c(87777),{LSOF_BIN:G}=c(17511),{setLinuxNodeExtraCaCerts:H}=c(26444),{configureIdeCaTrust:I}=c(77715),J="linux"===process.platform,K="http://localhost:20128";function L(a){return null==a||""===a?"''":`'${String(a).replace(/'/g,"'\\''")}'`}async function M(){if(!ad)return K;try{let a=await ad(),b=a&&null!=a.mitmRouterBaseUrl?String(a.mitmRouterBaseUrl).trim():"";if(!b)return K;let c=new URL(b);if("http:"!==c.protocol&&"https:"!==c.protocol)return K;return b.replace(/\/+$/,"")}catch{return K}}let N=g.join(D,".mitm.pid"),O=g.join(D,".mitm.lock"),P=[5e3,1e4,2e4,3e4,6e4],Q=0,R=0,S=!1;function T(){if(process.env.MITM_SERVER_PATH)return process.env.MITM_SERVER_PATH;let a=g.join(__dirname,"server.js");if(h.existsSync(a))return a;let b=g.join(process.cwd(),"src","mitm","server.js");if(h.existsSync(b))return b;let c=g.join(process.cwd(),"..","src","mitm","server.js");return h.existsSync(c)?c:b}function U(a){try{if(!a||!h.existsSync(a)||!a.includes(`${g.sep}node_modules${g.sep}`))return a;let b=g.join(C,"runtime","mitm"),c=g.join(b,"server.js");if(h.existsSync(c))try{if(h.statSync(a).size===h.statSync(c).size)return c}catch{}return h.mkdirSync(b,{recursive:!0}),h.copyFileSync(a,c),c}catch(b){try{E(`[MITM] runtime copy failed: ${b.message}`)}catch{}return a}}let V=U(T()),W="aes-256-gcm",X="9router-mitm-pwd",Y=null,Z=null;function $(){return globalThis.__mitmSudoPassword||null}function _(a){globalThis.__mitmSudoPassword=a}function aa(a){try{return process.kill(a,0),!0}catch(a){return"EACCES"===a.code}}function ab(a,b=!1,e=null){if(w)d(`taskkill ${b?"/F ":""}/PID ${a}`,{windowsHide:!0},()=>{});else{let f=b?"SIGKILL":"SIGTERM",g=`pkill -${f} -P ${a} 2>/dev/null; kill -${f} ${a} 2>/dev/null`;if(e||s()){let{execWithPassword:a}=c(66936);a(g,e||"").catch(()=>d(g,{windowsHide:!0},()=>{}))}else d(g,{windowsHide:!0},()=>{})}}function ac(){try{let{machineIdSync:a}=c(19713),b=a();return l.createHash("sha256").update(b+X).digest()}catch{return l.createHash("sha256").update(X).digest()}}let ad=null,ae=null;async function af(a,b){if(ae)try{let c,d,e,f,g,h={mitmEnabled:a};b&&(c=ac(),d=l.randomBytes(12),e=l.createCipheriv(W,c,d),f=Buffer.concat([e.update(b,"utf8"),e.final()]),g=e.getAuthTag(),h.mitmSudoEncrypted=`${d.toString("hex")}:${g.toString("hex")}:${f.toString("hex")}`),await ae(h)}catch(a){F(`Failed to save settings: ${a.message}`)}}async function ag(){if(ae)try{await ae({mitmSudoEncrypted:null})}catch(a){F(`Failed to clear encrypted password: ${a.message}`)}}async function ah(){if(!ad)return null;try{let a=await ad();if(!a.mitmSudoEncrypted)return null;return function(a){try{let[b,c,d]=a.split(":");if(!b||!c||!d)return null;let e=ac(),f=l.createDecipheriv(W,e,Buffer.from(b,"hex"));return f.setAuthTag(Buffer.from(c,"hex")),f.update(Buffer.from(d,"hex"))+f.final("utf8")}catch{return null}}(a.mitmSudoEncrypted)}catch{return null}}async function ai(a,b){if(ae&&ad)try{let c={...(await ad()).dnsToolEnabled||{},[a]:b};await ae({dnsToolEnabled:c})}catch(a){F(`Failed to save DNS state: ${a.message}`)}}async function aj(){if(!ad)return{};try{return(await ad()).dnsToolEnabled||{}}catch{return{}}}async function ak(a){let b=await aj(),c=a||$()||await ah();for(let[a,d]of Object.entries(b))if(d&&r[a])try{await m(a,c)}catch(b){F(`DNS ${a}: restore failed — ${b.message}`)}}async function al(){return w?u():!(!u()&&t())||!!($()||await ah())}function am(a){return new Promise(a=>{w?d('powershell -NonInteractive -WindowStyle Hidden -Command "$c = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if ($c) { $c.OwningProcess } else { 0 }"',{windowsHide:!0},(b,c)=>{if(b)return a(null);let e=parseInt(c.trim(),10);if(!e||e<=4)return a(null);d(`tasklist /FI "PID eq ${e}" /FO CSV /NH`,{windowsHide:!0},(b,c)=>{let d=c?.match(/"([^"]+)"/);a({pid:e,name:d?d[1]:"unknown"})})}):d(`${G} -nP -iTCP:443 -sTCP:LISTEN -t`,{windowsHide:!0},(b,c)=>{if(b||!c?.trim())return a(null);let e=parseInt(c.trim().split("\n")[0],10);if(!e||isNaN(e))return a(null);d(`ps -p ${e} -o comm=`,{windowsHide:!0},(b,c)=>{a({pid:e,name:c?.trim()||"unknown"})})})})}async function an(a){if(Y&&!Y.killed){try{Y.kill("SIGKILL")}catch{}Y=null,Z=null}try{if(h.existsSync(N)){let b=parseInt(h.readFileSync(N,"utf-8").trim(),10);b&&aa(b)&&(ab(b,!0,a),await new Promise(a=>setTimeout(a,500))),h.unlinkSync(N)}}catch{}if(!w&&V)try{let b=V.replace(/'/g,"'\\''");if(a||s()){let{execWithPassword:d}=c(66936);await d(`pkill -SIGKILL -f "${b}" 2>/dev/null || true`,a||"").catch(()=>{})}else d(`pkill -SIGKILL -f "${b}" 2>/dev/null || true`,{windowsHide:!0},()=>{});await new Promise(a=>setTimeout(a,500))}catch{}}async function ao(){let a=null!==Y&&!Y.killed,b=Z;if(!a)try{if(h.existsSync(N)){let c=parseInt(h.readFileSync(N,"utf-8").trim(),10);c&&aa(c)?(a=!0,b=c):h.unlinkSync(N)}}catch{}let d=q(),e=g.join(D,"rootCA.crt"),f=h.existsSync(e),{checkCertInstalled:i}=c(9631),j=!!f&&await i(e),k=a?[]:Object.keys(d||{}).filter(a=>d[a]),l=k.length>0,{containerized:m,kind:n}=v();return{running:a,pid:b,certExists:f,certTrusted:j,dnsStatus:d,staleDns:l,staleDnsTools:k,containerized:m,containerKind:n}}async function ap(a){if(S)return;if(S=!0,Y&&!Y.killed){Q=0,E("MITM server already running, no restart needed");return}if(Date.now()-R>=6e4&&(Q=0),Q>=5){F("Max restart attempts reached. Giving up."),S=!1;return}let b=P[Math.min(Q,P.length-1)];Q++,E(`Restarting in ${b/1e3}s... (${Q}/5)`),await new Promise(a=>setTimeout(a,b));try{let b=ad?await ad():null;if(b&&!b.mitmEnabled){E("MITM disabled, skipping restart"),S=!1;return}let c=$()||await ah();if(!c&&!w){F("No cached password, cannot auto-restart"),S=!1;return}await ar(a,c),E("\uD83D\uDD04 Restarted successfully"),Q=0,S=!1}catch(b){F(`Restart attempt ${Q}/5 failed: ${b.message}`),S=!1,ap(a)}}async function aq(a,b){if(a&&a.pid){if(w)try{f(`powershell -NonInteractive -WindowStyle Hidden -Command "Stop-Process -Id ${a.pid} -Force -ErrorAction SilentlyContinue"`,{windowsHide:!0})}catch{}else try{let{execWithPassword:d}=c(66936);b||s()?await d(`kill -9 ${a.pid}`,b||""):f(`kill -9 ${a.pid}`,{windowsHide:!0})}catch{}await new Promise(a=>setTimeout(a,800))}}async function ar(a,b,l=!1){if(!Y||Y.killed)try{if(h.existsSync(N)){let a=parseInt(h.readFileSync(N,"utf-8").trim(),10);if(a&&aa(a))return Z=a,E(`♻️ Reusing existing process (PID: ${a})`),await af(!0,b),b&&_(b),{running:!0,pid:a};h.unlinkSync(N)}}catch{}if(Y&&!Y.killed)throw Error("MITM server is already running");try{h.writeFileSync(O,String(process.pid),{flag:"wx"})}catch(a){if("EEXIST"===a.code)throw Error("MITM server is already starting (lock contention)");throw a}try{if(await an(b),!w){let a=await new Promise(a=>{let b=j.createServer();b.once("error",b=>{"EADDRINUSE"===b.code?a("in-use"):a("no-permission")}),b.once("listening",()=>{b.close(()=>a("free"))}),b.listen(443,"127.0.0.1")});if("in-use"===a||"no-permission"===a){let a=await am(b);if(a){let c=a.name.includes("/")?a.name.split("/").filter(Boolean).pop():a.name;if(l)E(`Killing process on port 443 (PID ${a.pid}, name=${c})...`),await aq(a,b);else{let b=Error(`Port 443 is already in use by "${c}" (PID ${a.pid}).`);throw b.code="PORT_443_BUSY",b.portOwner={pid:a.pid,name:c},b}}}}let m=g.join(D,"rootCA.crt"),n=g.join(D,"rootCA.key"),o=h.existsSync(m)&&h.existsSync(n);if(!o||B(m)){if(o){E("\uD83D\uDD10 Cert expired — uninstalling old cert...");let a=b||$()||await ah();try{await A(a,m)}catch{}}E("\uD83D\uDD10 Generating Root CA..."),await y()}let{checkCertInstalled:p}=c(9631),r=await p(m),u=!w&&!x&&!s();if(r)E("\uD83D\uDD10 Cert: already trusted ✅");else{E("\uD83D\uDD10 Cert: not trusted → installing...");let a=b||$()||await ah();if(u)E(`🔐 Cert: skipping system trust (no sudo). Install ${m} as a trusted CA on machines that use this proxy.`);else{if(!a&&t())throw Error("Sudo password required to install Root CA certificate");try{await z(a,m),E("\uD83D\uDD10 Cert: ✅ trusted")}catch(a){throw Error(`Failed to trust certificate: ${a.message}`)}}}let v=V;if((!v||!h.existsSync(v))&&(E(`[MITM] server.js missing at ${v} → recopying`),!(v=U(T()))||!h.existsSync(v)))throw Error(`MITM server.js not found at ${v}. Reinstall kRouter.`);let C=await M();if(E(`🚀 Starting server... (router: ${C})`),w){let c=await am(b);if(c)if(l)E(`Killing process on port 443 (PID ${c.pid}, name=${c.name})...`),await aq(c,b);else{let a=Error(`Port 443 is already in use by "${c.name}" (PID ${c.pid}).`);throw a.code="PORT_443_BUSY",a.portOwner={pid:c.pid,name:c.name},a}Y=e(process.execPath,[v],{detached:!1,windowsHide:!0,cwd:i.tmpdir(),stdio:["ignore","pipe","pipe"],env:{...process.env,ROUTER_API_KEY:a,NODE_ENV:"production",MITM_ROUTER_BASE:C}}),ae&&await ae({mitmCertInstalled:!0}).catch(()=>{})}else if(s()){let c=[`HOME=${L(i.homedir())}`,`ROUTER_API_KEY=${L(a)}`,`MITM_ROUTER_BASE=${L(C)}`,"NODE_ENV=production",L(process.execPath),L(v)].join(" ");(Y=e("sudo",["-S","-E","sh","-c",c],{detached:!1,windowsHide:!0,stdio:["pipe","pipe","pipe"]})).stdin.write(`${b}
68
+ `),Y.stdin.end()}else Y=e(process.execPath,[v],{detached:!1,windowsHide:!0,cwd:i.tmpdir(),stdio:["ignore","pipe","pipe"],env:{...process.env,ROUTER_API_KEY:a,NODE_ENV:"production",MITM_ROUTER_BASE:C}});Y&&(Z=Y.pid,h.writeFileSync(N,String(Z)),R=Date.now());try{let a=g.join(D,"rootCA.crt"),b=I(a);for(let a of b.written)E(`[ide-ca] ${a} -> kRouter root CA`);for(let a of b.failed)E(`[ide-ca] ${a}`)}catch(a){E(`[ide-ca] Failed: ${a.message}`)}if(x){let a=g.join(D,"rootCA.crt");h.existsSync(a)&&d(`launchctl setenv NODE_EXTRA_CA_CERTS "${a}"`,{windowsHide:!0},b=>{b?E(`[launchctl] Failed to set NODE_EXTRA_CA_CERTS: ${b.message}`):E(`[launchctl] NODE_EXTRA_CA_CERTS set to ${a}`)})}else if(w){let a=g.join(D,"rootCA.crt");h.existsSync(a)&&d(`setx NODE_EXTRA_CA_CERTS "${a}"`,{windowsHide:!0},a=>{a?E(`[setx] Failed to set NODE_EXTRA_CA_CERTS: ${a.message}`):E("[setx] NODE_EXTRA_CA_CERTS set for current user")})}else if(J){let a=g.join(D,"rootCA.crt");if(h.existsSync(a))try{let b=H(a);b.length>0?(E(`[linux-node-ca] NODE_EXTRA_CA_CERTS written to ${b.length} file(s): ${b.map(a=>a.replace(i.homedir(),"~")).join(", ")}`),E("[linux-node-ca] ⚠ Terminal-launched IDE: open a NEW terminal OR run: source ~/.profile"),E("[linux-node-ca] ⚠ Menu-launched IDE (GNOME / KDE Activities, .desktop): log out + back in OR run: systemctl --user daemon-reload && systemctl --user import-environment")):E("[linux-node-ca] NODE_EXTRA_CA_CERTS already set, no changes needed")}catch(a){E(`[linux-node-ca] Failed to set NODE_EXTRA_CA_CERTS: ${a.message}`)}}let K=null;Y&&(Y.stdout.on("data",a=>{process.stdout.write(a)}),Y.stderr.on("data",a=>{let b=a.toString().trim();b&&(w||!b.includes("Password:")&&!b.includes("password for"))&&(F(b),K=b),!w&&(b.includes("incorrect password")||b.includes("no password was provided"))&&(_(null),ag(),S=!0)}),Y.on("exit",b=>{E(`Server exited (code: ${b})`),Y=null,Z=null;try{h.unlinkSync(N)}catch{}try{h.unlinkSync(O)}catch{}0===b||S||ap(a)}));let P=await function(a=443){return new Promise(b=>{let c=Date.now()+8e3,d=()=>{let e=k.request({hostname:"127.0.0.1",port:a,path:"/_mitm_health",method:"GET",rejectUnauthorized:!1},a=>{let c="";a.on("data",a=>{c+=a}),a.on("end",()=>{try{let a=JSON.parse(c);b(!0===a.ok?{ok:!0,pid:a.pid||null}:null)}catch{b(null)}})});e.on("error",()=>{Date.now()<c?setTimeout(d,500):b(null)}),e.end()};d()})}(443);if(!P){if(Y&&!Y.killed){try{Y.kill()}catch{}Y=null}let a=function(){try{if(w){let a=f('powershell -NonInteractive -WindowStyle Hidden -Command "$c = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if ($c) { $c.OwningProcess } else { 0 }"',{encoding:"utf8",windowsHide:!0}).trim(),b=parseInt(a,10);if(b&&b>4){let a=f(`tasklist /FI "PID eq ${b}" /FO CSV /NH`,{encoding:"utf8",windowsHide:!0}).match(/"([^"]+)"/);if(a)return a[1].replace(".exe","")}}else{let a=f(`${G} -i :443`,{encoding:"utf8",windowsHide:!0}).trim().split("\n");if(a.length>1)return a[1].split(/\s+/)[0]}}catch{}return null}(),b=a?` Port 443 already in use by ${a}.`:"",c=K||`Check sudo password or port 443 access.${b}`;throw Error(`MITM server failed to start. ${c}`)}ae&&await ae({mitmCertInstalled:!0}).catch(()=>{}),E(`✅ Server healthy (PID: ${Z||P.pid})`);let Q=q();for(let[a,b]of Object.entries(Q))E(`🌐 DNS ${a}: ${b?"✅ active":"❌ inactive"}`);await af(!0,b),b&&_(b);try{h.unlinkSync(O)}catch{}return{running:!0,pid:Z}}catch(a){try{h.unlinkSync(O)}catch{}throw a}}async function as(a){S=!0,Q=0,E("⏹ Stopping server...");let b=Y,d=b&&!b.killed?b.pid:(()=>{try{return parseInt(h.readFileSync(N,"utf-8").trim(),10)}catch{return null}})();if(d&&aa(d)&&(E(`Killing server (PID: ${d})...`),ab(d,!1,a),await new Promise(a=>setTimeout(a,1e3)),aa(d)&&ab(d,!0,a)),Y=null,Z=null,w){let a=g.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"),b=Object.values(r).flat();try{let{isAdmin:d,runElevatedPowerShell:e,quotePs:f}=c(64809);if(d()){let d=h.readFileSync(a,"utf8"),e=d.split(/\r?\n/).filter(a=>!b.some(b=>a.includes(b))).join("\r\n").replace(/[\r\n\s]+$/g,"")+"\r\n";e!==d&&h.writeFileSync(a,e,"utf8");try{c(79646).execSync("ipconfig /flushdns",{windowsHide:!0,stdio:"ignore"})}catch{}E("\uD83C\uDF10 DNS: ✅ all tool hosts removed")}else{let c=b.map(f).join(","),d=`
67
69
  $hosts = @(${c})
68
70
  $lines = Get-Content -LiteralPath ${f(a)}
69
71
  $filtered = $lines | Where-Object {
@@ -72,4 +74,4 @@ ${c}`;d.writeFileSync(h,g),o()}catch{}},file:h}},clearDumpDir:function(){try{if(
72
74
  }
73
75
  Set-Content -LiteralPath ${f(a)} -Value $filtered
74
76
  ipconfig /flushdns | Out-Null
75
- `;await e(d)}}catch(a){F(`Failed to clean hosts: ${a.message}`)}}else await o(a);if(x)d("launchctl unsetenv NODE_EXTRA_CA_CERTS",{windowsHide:!0},a=>{a?E(`[launchctl] Failed to unset NODE_EXTRA_CA_CERTS: ${a.message}`):E("[launchctl] NODE_EXTRA_CA_CERTS unset")});else if(w)d("reg delete HKCU\\Environment /F /V NODE_EXTRA_CA_CERTS",{windowsHide:!0},a=>{a?E(`[reg] Failed to unset NODE_EXTRA_CA_CERTS: ${a.message}`):E("[reg] NODE_EXTRA_CA_CERTS unset")});else if(J)try{let a=I();a.length>0&&E(`[linux-node-ca] NODE_EXTRA_CA_CERTS removed from ${a.length} shell rc file(s)`)}catch(a){E(`[linux-node-ca] Failed to unset NODE_EXTRA_CA_CERTS: ${a.message}`)}try{h.unlinkSync(N)}catch{}try{h.unlinkSync(O)}catch{}return await af(!1,null),S=!1,{running:!1,pid:null}}async function at(a,b){if(!(await ao()).running)throw Error("MITM server is not running. Start the server first.");let c=b||$()||await ah();return await m(a,c),await ai(a,!0),{success:!0}}a.exports={getMitmStatus:ao,startServer:ar,stopServer:as,enableToolDNS:at,disableToolDNS:async function a(a,b){let c=b||$()||await ah();return await n(a,c),await ai(a,!1),{success:!0}},trustCert:async function a(a){let b=g.join(D,"rootCA.crt");if(!h.existsSync(b))throw Error("Root CA not found. Start server first to generate it.");let{installCert:d}=c(9631);if(!w&&!x&&!s())return void E(`🔐 Cert: system trust unavailable (no sudo). Use file: ${b}`);let e=a||$()||await ah();if(!e&&t())throw Error("Sudo password required to trust certificate");await d(e,b),e&&_(e)},startMitm:ar,stopMitm:as,getCachedPassword:$,setCachedPassword:_,loadEncryptedPassword:ah,clearEncryptedPassword:ag,isSudoPasswordRequired:t,initDbHooks:function(a,b){ad=a,ae=b},restoreToolDNS:ak,hasDnsPrivilege:al,removeAllDNSEntries:o,removeAllDNSEntriesSync:p}}};
77
+ `;await e(d)}}catch(a){F(`Failed to clean hosts: ${a.message}`)}}else await o(a);try{h.unlinkSync(N)}catch{}try{h.unlinkSync(O)}catch{}return await af(!1,null),S=!1,{running:!1,pid:null}}async function at(a,b){if(!(await ao()).running)throw Error("MITM server is not running. Start the server first.");let c=b||$()||await ah();return await m(a,c),await ai(a,!0),{success:!0}}a.exports={getMitmStatus:ao,startServer:ar,stopServer:as,enableToolDNS:at,disableToolDNS:async function a(a,b){let c=b||$()||await ah();return await n(a,c),await ai(a,!1),{success:!0}},trustCert:async function a(a){let b=g.join(D,"rootCA.crt");if(!h.existsSync(b))throw Error("Root CA not found. Start server first to generate it.");let{installCert:d}=c(9631);if(!w&&!x&&!s())return void E(`🔐 Cert: system trust unavailable (no sudo). Use file: ${b}`);let e=a||$()||await ah();if(!e&&t())throw Error("Sudo password required to trust certificate");await d(e,b),e&&_(e)},startMitm:ar,stopMitm:as,getCachedPassword:$,setCachedPassword:_,loadEncryptedPassword:ah,clearEncryptedPassword:ag,isSudoPasswordRequired:t,initDbHooks:function(a,b){ad=a,ae=b},restoreToolDNS:ak,hasDnsPrivilege:al,removeAllDNSEntries:o,removeAllDNSEntriesSync:p}}};
@@ -1,3 +1,3 @@
1
- "use strict";exports.id=6200,exports.ids=[6200],exports.modules={9999:(a,b,c)=>{c.d(b,{$S:()=>l,$T:()=>m,QS:()=>n,e3:()=>o});var d=c(77598),e=c.n(d);let f=globalThis;f.__krouterResponseCache||(f.__krouterResponseCache=new Map,f.__krouterResponseCacheStats={hits:0,misses:0,skipped:0,bytesSaved:0,tokensSaved:0,lastResetAt:Date.now()});let g=f.__krouterResponseCache,h=f.__krouterResponseCacheStats;function i({model:a,body:b}){let c=JSON.stringify({model:a,system:b?.system??null,instructions:b?.instructions??null,messages:b?.messages??null,input:b?.input??null,contents:b?.contents??null,temperature:b?.temperature??null,max_tokens:b?.max_tokens??b?.max_output_tokens??null,tools:b?.tools??null,tool_choice:b?.tool_choice??null,response_format:b?.response_format??null});return e().createHash("sha256").update(c).digest("hex")}let j=new Set(["antigravity","ag","gemini","gemini-cli","gc"]);function k(a,b=null){if(!a||"object"!=typeof a||!0===a.stream||"number"==typeof a.temperature&&a.temperature>.3||"required"===a.tool_choice)return!1;let c=function(a){if("string"!=typeof a)return null;let b=a.indexOf("/");return b>0?a.slice(0,b):null}(b);if(c&&j.has(c))return!1;let d=a.max_tokens??a.max_output_tokens??null;return"number"!=typeof d||!(d<32)}function l({model:a,body:b}){if(!k(b,a))return h.skipped++,null;let c=i({model:a,body:b}),d=g.get(c);return d?d.expiresAt<Date.now()?(g.delete(c),h.misses++,null):(g.delete(c),g.set(c,d),h.hits++,h.bytesSaved+=d.bodyBytes||0,h.tokensSaved+=d.estimatedTokens||0,d):(h.misses++,null)}function m({model:a,body:b,status:c,contentType:d,responseBody:e,estimatedTokens:f=0,ttlMs:h=3e5,maxEntries:j=500}){if(!k(b,a)||200!==c||!e||"string"==typeof e&&e.length<100)return!1;let l=i({model:a,body:b}),n="string"==typeof e?e:JSON.stringify(e),o={key:l,status:c,contentType:d||"application/json",body:n,bodyBytes:Buffer.byteLength(n,"utf-8"),estimatedTokens:f,expiresAt:Date.now()+h,storedAt:Date.now(),model:a};for(g.set(l,o);g.size>j;){let a=g.keys().next().value;if(void 0===a)break;g.delete(a)}return!0}function n(){let a=h.hits+h.misses;return{enabled:!0,entries:g.size,hits:h.hits,misses:h.misses,skipped:h.skipped,hitRate:a>0?h.hits/a:0,bytesSaved:h.bytesSaved,tokensSaved:h.tokensSaved,lastResetAt:h.lastResetAt}}function o(){g.clear(),h.hits=0,h.misses=0,h.skipped=0,h.bytesSaved=0,h.tokensSaved=0,h.lastResetAt=Date.now()}},24253:(a,b,c)=>{c.d(b,{I6:()=>n,Mo:()=>i,RG:()=>m,V:()=>j,Y8:()=>l,xl:()=>o});var d=c(1932),e=c(87155);let f=null,g=null,h=null;function i(){return g?{loaded:!0,version:g.version,loadedAt:g.loadedAt}:{loaded:!1}}async function j(){return g||h||(h=k().finally(()=>{h=null}))}async function k(){let a=(0,e.S1)();if(!a.installed){let a=Error("PXPIPE is not installed");throw a.code="NOT_INSTALLED",a}let b=`${(0,d.pathToFileURL)((0,e.CG)()).href}?v=${encodeURIComponent(a.version||"0")}`,c=await import(b);if("function"!=typeof c.transformAnthropicMessages)throw Error("installed pxpipe package does not export transformAnthropicMessages");return g={module:c,version:a.version,loadedAt:Date.now()}}function l(){let a=!!g;return g=null,a}async function m({autoLoad:a=!0}={}){try{if(!g&&!a)return null;let{module:b}=await j();return b.transformAnthropicMessages}catch{return null}}async function n(a){let b=Array.isArray(a)?a.map(a=>String(a).trim()).filter(Boolean):[],c=b.slice().sort().join(",");if(c!==f)try{if(!(0,e.S1)().installed)return;let a=await import((0,d.pathToFileURL)((0,e.kC)()).href);"function"==typeof a.setAllowedModelBases&&(a.setAllowedModelBases(b.length?b:null),f=c)}catch{}}async function o(){let a=Date.now(),{module:b}=await j(),c=new TextEncoder().encode(JSON.stringify({model:"claude-fable-5",max_tokens:16,messages:[{role:"user",content:"ping"}]})),d=await b.transformAnthropicMessages({body:c,model:"claude-fable-5"});if(!d||"boolean"!=typeof d.applied||!(d.body instanceof Uint8Array))throw Error("transform returned an unexpected shape");return{ok:!0,reason:d.reason,durationMs:Date.now()-a}}},25772:(a,b,c)=>{c.d(b,{Io:()=>h,WV:()=>f});let d=null,e=0;function f(a={}){let{sidecarUrl:b=process.env.SIDECAR_URL||"http://127.0.0.1:5001/redact",timeout:h=Number(process.env.REDACTION_TIMEOUT_MS)||15e3,enabled:i="false"!==process.env.REDACTION_ENABLED,failOpen:j="true"===process.env.REDACTION_FAIL_OPEN}=a;return async function(a,f){if(!i)return f(a);if(Date.now()-e>1e4)try{let{getSettings:a}=await Promise.resolve().then(c.bind(c,42655)),b=await a();d=!!(b.presidioEnabled&&b.presidioPiiRedaction),e=Date.now()}catch(b){if(console.error("[Redaction Middleware] Failed to read settings:",b),!0===d&&!j)return new Response(JSON.stringify({error:{message:"Unable to verify redaction settings",code:"SETTINGS_ERROR",type:"settings_error"}}),{status:500,headers:{"Content-Type":"application/json"}});return f(a)}if(!d||"POST"!==a.method)return f(a);try{let c=await a.clone().json(),d=[],e=[];if(Array.isArray(c.messages))for(let a=0;a<c.messages.length;a++){let b=c.messages[a],f=b?.content;if(f){if("string"==typeof f)d.push(f),e.push({type:"string",index:a});else if(Array.isArray(f))for(let b=0;b<f.length;b++){let c=f[b];c?.type==="text"&&"string"==typeof c?.text&&(d.push(c.text),e.push({type:"array",msgIndex:a,blockIndex:b}))}}}if("string"==typeof c.system)d.push(c.system),e.push({type:"system-string"});else if(Array.isArray(c.system))for(let a=0;a<c.system.length;a++){let b=c.system[a];b?.type==="text"&&"string"==typeof b?.text&&(d.push(b.text),e.push({type:"system-block",blockIndex:a}))}if("string"==typeof c.instructions&&(d.push(c.instructions),e.push({type:"instructions"})),"string"==typeof c.input)d.push(c.input),e.push({type:"input-string"});else if(Array.isArray(c.input))for(let a=0;a<c.input.length;a++){let b=c.input[a],f=b?.content;if("string"==typeof f)d.push(f),e.push({type:"input-item-string",index:a});else if(Array.isArray(f))for(let b=0;b<f.length;b++){let c=f[b];(c?.type==="input_text"||c?.type==="output_text"||c?.type==="text")&&"string"==typeof c?.text&&(d.push(c.text),e.push({type:"input-item-block",itemIndex:a,blockIndex:b}))}}if(Array.isArray(c.messages))for(let a=0;a<c.messages.length;a++){let b=c.messages[a];if(b?.role==="tool"&&"string"==typeof b.content&&(d.push(b.content),e.push({type:"tool-message",index:a})),Array.isArray(b?.tool_calls))for(let c=0;c<b.tool_calls.length;c++){let f=b.tool_calls[c]?.function?.arguments;"string"==typeof f&&f.length>0&&(d.push(f),e.push({type:"tool-call-args",msgIndex:a,callIndex:c}))}if(Array.isArray(b?.content))for(let c=0;c<b.content.length;c++){let f=b.content[c];if(f?.type==="tool_result"){if("string"==typeof f.content)d.push(f.content),e.push({type:"tool-result-string",msgIndex:a,blockIndex:c});else if(Array.isArray(f.content))for(let b=0;b<f.content.length;b++){let g=f.content[b];g?.type==="text"&&"string"==typeof g.text&&(d.push(g.text),e.push({type:"tool-result-block",msgIndex:a,blockIndex:c,innerIndex:b}))}}}}if(Array.isArray(c.tools))for(let a=0;a<c.tools.length;a++){let b=c.tools[a];"string"==typeof b?.description&&b.description.length>0?(d.push(b.description),e.push({type:"tool-desc",index:a})):"string"==typeof b?.function?.description&&b.function.description.length>0&&(d.push(b.function.description),e.push({type:"tool-fn-desc",index:a}))}if(0===d.length)return f(a);let i=await g(b,d,{timeout:h}),j=0;for(let a of e){if("string"===a.type)c.messages[a.index].content=i[j];else if("array"===a.type)c.messages[a.msgIndex].content[a.blockIndex].text=i[j];else if("system-string"===a.type)c.system=i[j];else if("system-block"===a.type)c.system[a.blockIndex].text=i[j];else if("instructions"===a.type)c.instructions=i[j];else if("input-string"===a.type)c.input=i[j];else if("input-item-string"===a.type)c.input[a.index].content=i[j];else if("input-item-block"===a.type)c.input[a.itemIndex].content[a.blockIndex].text=i[j];else if("tool-message"===a.type)c.messages[a.index].content=i[j];else if("tool-call-args"===a.type){let b=i[j],d=!1;try{JSON.parse(b),d=!0}catch{d=!1}d?c.messages[a.msgIndex].tool_calls[a.callIndex].function.arguments=b:console.warn("[Redaction Middleware] Skipped tool_call arguments: redaction produced invalid JSON")}else"tool-result-string"===a.type?c.messages[a.msgIndex].content[a.blockIndex].content=i[j]:"tool-result-block"===a.type?c.messages[a.msgIndex].content[a.blockIndex].content[a.innerIndex].text=i[j]:"tool-desc"===a.type?c.tools[a.index].description=i[j]:"tool-fn-desc"===a.type&&(c.tools[a.index].function.description=i[j]);j++}let k=new Request(a.url,{method:a.method,headers:a.headers,body:JSON.stringify(c)});return f(k)}catch(e){if(console.error(`[Redaction Middleware] Error: ${e.message}`),j)return console.warn("[Redaction Middleware] Fail-open enabled - proceeding with original request"),f(a);let b=500,c="internal_error",d="Request processing failed";return"AbortError"===e.name||e.message.includes("timeout")||e.message.includes("TIMEOUT")?(b=503,c="redaction_timeout",d="PII redaction service unavailable. Please try again later."):e.message.includes("fetch")||e.message.includes("ECONNREFUSED")||e.message.includes("ENOTFOUND")||e.message.includes("ECONNRESET")||"TypeError"===e.name&&e.message.includes("fetch")?(b=503,c="redaction_service_unavailable",d="PII redaction service unavailable. Please try again later."):e.message.includes("redact")||e.message.includes("sidecar")||e.message.includes("HTTP 5")?(b=502,c="redaction_service_error",d="PII redaction service error. Please try again later."):(e.message.includes("Invalid")||e.message.includes("format"))&&(b=400,c="invalid_request",d="Invalid request format."),console.error(JSON.stringify({timestamp:new Date().toISOString(),event:"redaction_failure",errorType:c,errorMessage:e.message,statusCode:b,path:new URL(a.url).pathname,method:a.method})),new Response(JSON.stringify({error:{message:d,code:c.toUpperCase(),type:c,requestId:a.headers.get("x-request-id")||void 0}}),{status:b,headers:{"Content-Type":"application/json","X-Redaction-Failed":"true"}})}}}async function g(a,b,{timeout:c=2e3}={}){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{let c=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({texts:b}),signal:d.signal});if(!c.ok)throw Error(`Sidecar redaction service error: HTTP ${c.status}`);let e=await c.json();if(!e.redacted_texts||!Array.isArray(e.redacted_texts))throw Error("Sidecar redaction service returned invalid response");if(e.redacted_texts.length!==b.length)throw Error("Sidecar redaction service returned wrong number of redacted texts");return e.redacted_texts}finally{clearTimeout(e)}}function h(a,b={}){let c=f(b);return async function(b,...d){return c(b,b=>a(b,...d))}}},38775:(a,b,c)=>{c.d(b,{d_:()=>k,mA:()=>j});var d=c(89718),e=c(40669),f=c(35024),g=c(44404);let h={xmtp:"xiaomi-tokenplan","xiaomi-tokenplan":"xiaomi-tokenplan"},i=new Set([...Object.keys(h),...Object.keys(f.xq),...Object.keys(g.Xg),...Object.values(g.Xg)]);async function j(a){let b,c=(b=(0,e.Xh)(a),b?.providerAlias&&h[b.providerAlias]?{...b,provider:h[b.providerAlias]}:b);if(!c.isAlias){if(!i.has(c.providerAlias)){let a=(await (0,d.Fh)({type:"openai-compatible"})).find(a=>a.prefix===c.providerAlias);if(a)return{provider:a.id,model:c.model};let b=(await (0,d.Fh)({type:"anthropic-compatible"})).find(a=>a.prefix===c.providerAlias);if(b)return{provider:b.id,model:c.model};let e=(await (0,d.Fh)({type:"custom-embedding"})).find(a=>a.prefix===c.providerAlias);if(e)return{provider:e.id,model:c.model}}return{provider:c.provider,model:c.model}}return await (0,d.Dj)(c.model)?{provider:null,model:c.model}:(0,e.js)(a,d.OM)}async function k(a){if(a.includes("/"))return null;let b=await (0,d.Dj)(a);return b&&b.models&&b.models.length>0?b.models:null}},46945:(a,b,c)=>{c.d(b,{V:()=>e});let d=/\[1m\]$/i;function e(a){if("string"!=typeof a)return{model:a,contextMarker:null};let b=a.trim(),c=b.match(d);return c?{model:b.slice(0,-c[0].length),contextMarker:c[0].slice(1,-1).toLowerCase()}:{model:a,contextMarker:null}}},54413:(a,b,c)=>{c.d(b,{D:()=>e});let d={"qwen3.6-plus-free":{replacement:"qwen3.6-plus",tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"minimax-m2.5-free":{replacement:"minimax-m2.5",tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"nemotron-3-super-free":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"trinity-large-preview-free":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"big-pickle":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"}};function e(a){if(!a||"string"!=typeof a)return null;let b=a.includes("/")?a.slice(a.lastIndexOf("/")+1):a,c=d[b];if(!c)return null;let e=c.replacement?`Use "${c.replacement}" on the ${c.tier} instead.`:`No direct replacement — pick a live model on the ${c.tier}.`;return`Model "${b}" has been retired (${c.reason}). ${e}`}},74388:(a,b,c)=>{c.d(b,{Az:()=>l,SP:()=>o,T0:()=>k});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f),h=c(87155);let i=g().join(h.XF,"events.jsonl"),j=g().join(h.XF,"events.jsonl.1");function k(a){try{e().existsSync(h.XF)||e().mkdirSync(h.XF,{recursive:!0});try{e().statSync(i).size>5242880&&e().renameSync(i,j)}catch{}e().appendFile(i,JSON.stringify({ts:Date.now(),...a})+"\n",()=>{})}catch{}}function l({sinceMs:a=null,limit:b=null}={}){let c=[];for(let b of[j,i])try{if(!e().existsSync(b))continue;for(let d of e().readFileSync(b,"utf8").split("\n"))if(d)try{let b=JSON.parse(d);if(a&&b.ts<a)continue;c.push(b)}catch{}}catch{}return c.sort((a,b)=>a.ts-b.ts),b?c.slice(-b):c}function m(){return{requests:0,compressed:0,bypassed:0,errors:0,tokensBeforeEst:0,tokensAfterEst:0,tokensSavedEst:0,savedPct:0,imagesGenerated:0,compressionTimeMs:0,avgCompressionMs:0}}function n(a,b){a.requests++,b.applied?(a.compressed++,a.tokensBeforeEst+=b.tokensBeforeEst||0,a.tokensAfterEst+=b.tokensAfterEst||0,a.tokensSavedEst+=b.tokensSavedEst||0,a.imagesGenerated+=b.imageCount||0,a.compressionTimeMs+=b.durationMs||0):"transform_error"===b.reason||"timeout"===b.reason?a.errors++:a.bypassed++}function o({timelineDays:a=30,recentLimit:b=100}={}){let c=l(),d=Date.now(),e=new Date(new Date(d).setHours(0,0,0,0)).getTime(),f={all:m(),today:m(),yesterday:m(),last7d:m(),last30d:m()},g=new Map;for(let b=a-1;b>=0;b--){let a=new Date(e-864e5*b);g.set(a.toISOString().slice(0,10),{date:a.toISOString().slice(0,10),tokensSavedEst:0,compressed:0,requests:0})}for(let a of c){n(f.all,a),a.ts>=e?n(f.today,a):a.ts>=e-864e5&&n(f.yesterday,a),a.ts>=d-6048e5&&n(f.last7d,a),a.ts>=d-2592e6&&n(f.last30d,a);let b=new Date(a.ts).toISOString().slice(0,10),c=g.get(b);c&&(c.requests++,a.applied&&(c.compressed++,c.tokensSavedEst+=a.tokensSavedEst||0))}for(let a of Object.values(f))a.savedPct=a.tokensBeforeEst>0?+(a.tokensSavedEst/a.tokensBeforeEst*100).toFixed(2):0,a.avgCompressionMs=a.compressed>0?Math.round(a.compressionTimeMs/a.compressed):0;return{windows:f,timeline:[...g.values()],recent:c.slice(-b).reverse()}}},79489:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{P:()=>C});var e=c(48895),f=c(80238),g=c(89718),h=c(38775),i=c(92500),j=c(46945),k=c(43659),l=c(54413),m=c(8864),n=c(38962),o=c(17603),p=c(27349),q=c(24253),r=c(74388),s=c(9999),t=c(41004),u=c(53258),v=c(14170),w=c(7803),x=c(67828),y=c(38160),z=c(29385),A=a([e,i]);async function B(a){return a?.pxpipeEnabled?(await (0,q.I6)(a.pxpipeModels),(0,q.RG)()):null}async function C(a,b=null){let d;try{d=await a.json()}catch{return w.warn("CHAT","Invalid JSON body"),(0,k.yj)(t.gx.BAD_REQUEST,"Invalid JSON body")}b||(b={endpoint:new URL(a.url).pathname,body:d,headers:Object.fromEntries(a.headers.entries())});let e=new URL(a.url),{model:i,contextMarker:l}=(0,j.V)(d.model);l&&(d.model=i);let m=d.messages?.length||d.input?.length||0,q=d.tools?.length||0,r=d.reasoning_effort||d.reasoning?.effort||null;w.request("POST",`${e.pathname} | ${i} | ${m} msgs${q?` | ${q} tools`:""}${r?` | effort=${r}`:""}`);let u=a.headers.get("Authorization"),v=(0,f.Tr)(a);if(u&&v){let a=w.maskKey(v);w.debug("AUTH",`API Key: ${a}`)}else w.debug("AUTH","No API key provided (local mode)");let x=await (0,g.mt)();if(x.requireApiKey){if(!v)return w.warn("AUTH","Missing API key (requireApiKey=true)"),(0,k.yj)(t.gx.UNAUTHORIZED,"Missing API key");if(!await (0,f.kI)(v))return w.warn("AUTH","Invalid API key (requireApiKey=true)"),(0,k.yj)(t.gx.UNAUTHORIZED,"Invalid API key")}if(!i)return w.warn("CHAT","Missing model"),(0,k.yj)(t.gx.BAD_REQUEST,"Missing model");try{let{classifyPromptIntent:a}=await c.e(9849).then(c.bind(c,49849)),{classifyRequestComplexity:b}=await c.e(3523).then(c.bind(c,23523)),e=(d?.messages||[]).find(a=>a?.role==="user"),f="string"==typeof e?.content?e.content:Array.isArray(e?.content)&&e.content.find(a=>a?.text)?.text||"",g=(d?.messages||[]).find(a=>a?.role==="system"),h="string"==typeof g?.content?g.content:"",i=a(f,h),j=b(d);w.debug("ROUTING",`intent=${i} | complexity=${j.level} score=${j.score} tier=${j.recommendedTier}${j.hasToolUse?" tools=yes":""}`)}catch(a){w.debug("ROUTING",`classify failed: ${a?.message}`)}let y=a?.headers?.get("user-agent")||"",z=(0,p.c)(d,i,y,!!x.ccFilterNaming);if(z)return z.response||z;if(x.responseCacheEnabled){let a=(0,s.$S)({model:i,body:d});if(a)return w.info("CHAT",`[CACHE HIT] ${i} (${a.bodyBytes}B saved)`),new Response(a.body,{status:a.status,headers:{"Content-Type":a.contentType,"X-Cache":"HIT","X-Cache-Age-Ms":String(Date.now()-a.storedAt)}})}let A=(0,n.t8)(d),B=await (0,h.d_)(i);if(B){let c=x.comboStrategies||{},e=c[i]?.fallbackStrategy||x.comboStrategy||"fallback",f=(0,o.R8)(B,A,x),g=f.filter(a=>!B.includes(a));if("fusion"===e)return w.info("CHAT",`Combo "${i}" with ${B.length} models (strategy: fusion)`),(0,n.vt)({body:d,models:B,handleSingleModel:(c,d)=>D(c,d,b,a,v,x,1),log:w,comboName:i,judgeModel:c[i]?.judgeModel,tuning:c[i]?.fusionTuning});let h=x.comboStickyRoundRobinLimit;return w.info("CHAT",`Combo "${i}" with ${f.length} models (strategy: ${e}, sticky: ${h})`),(0,n.Pr)({body:d,models:f,handleSingleModel:(0,o.ar)((c,d)=>D(c,d,b,a,v,x,1),g),log:w,comboName:i,comboStrategy:e,comboStickyLimit:h})}let E=(0,o.R8)([i],A,x);if(E.length>1){let c=E.filter(a=>a!==i);return w.info("CHAT",`Capacity adapter for [${[...A].join(",")}] on "${i}" → trying ${E.join(", ")}`),(0,n.Pr)({body:d,models:E,handleSingleModel:(0,o.ar)((c,d)=>D(c,d,b,a,v,x,1),c),log:w,comboName:i,comboStrategy:(0,o.vB)(A,x)})}return D(d,i,b,a,v,x,0)}async function D(a,b,c=null,d=null,e=null,j=null,o=0){j||(j=await (0,g.mt)());let p=await (0,h.mA)(b);if(!p.provider){let f=await (0,h.d_)(b);if(f){if(o>=3)return w.warn("CHAT",`Combo recursion limit hit for "${b}" at depth ${o} — refusing to dispatch`),(0,k.yj)(t.gx.BAD_REQUEST,`Combo recursion limit (3) exceeded for "${b}"`);let g=j.comboStrategies||{},h=g[b]?.fallbackStrategy||j.comboStrategy||"fallback";if("fusion"===h)return w.info("CHAT",`Combo "${b}" with ${f.length} models (strategy: fusion, depth: ${o})`),(0,n.vt)({body:a,models:f,handleSingleModel:(a,b)=>D(a,b,c,d,e,j,o+1),log:w,comboName:b,judgeModel:g[b]?.judgeModel,tuning:g[b]?.fusionTuning});let i=j.comboStickyRoundRobinLimit;return w.info("CHAT",`Combo "${b}" with ${f.length} models (strategy: ${h}, sticky: ${i}, depth: ${o})`),(0,n.Pr)({body:a,models:f,handleSingleModel:(a,b)=>D(a,b,c,d,e,j,o+1),log:w,comboName:b,comboStrategy:h,comboStickyLimit:i})}return w.warn("CHAT","Invalid model format",{model:b}),(0,k.yj)(t.gx.BAD_REQUEST,"Invalid model format")}let{provider:q,model:A}=p,C=(0,l.D)(A);if(C)return w.warn("CHAT",`Retired model "${A}" requested → ${C}`),(0,k.yj)(t.gx.BAD_REQUEST,C);b!==`${q}/${A}`?w.info("ROUTING",`${b} → ${q}/${A}`):w.info("ROUTING",`Provider: ${q}, Model: ${A}`);let E=d?.headers?.get("user-agent")||"",F=d?.headers?.get("x-bypass-modellock")==="1",G=new Set,H=null,I=null,J="round-robin"===(0,m.z)(j,q),K=(0,z.bI)(a,{provider:q}),L=!J&&K?(0,z.Wq)(K):null;for(;;){let g=await (0,f.c1)(q,G,A,{bypassModelLock:F,preferredConnectionId:L&&!G.has(L)?L:null});if(!g||g.allRateLimited){if(g?.allRateLimited){let a=H||g.lastError||"Unavailable",b=t.gx.SERVICE_UNAVAILABLE;return w.warn("CHAT",`[${q}/${A}] ${a} (${g.retryAfterHuman})`),(0,k.wO)(b,`[${q}/${A}] ${a}`,g.retryAfter,g.retryAfterHuman)}if(0===G.size)return w.warn("AUTH",`No active credentials for provider: ${q}`),(0,k.yj)(t.gx.SERVICE_UNAVAILABLE,`No active credentials for provider: ${q}`);return w.warn("CHAT","No more accounts available",{provider:q}),(0,k.yj)(I||t.gx.SERVICE_UNAVAILABLE,H||"All accounts unavailable")}w.info("AUTH",`\x1b[32mUsing ${q} account: ${g.connectionName}\x1b[0m`);let h=await (0,x.eU)(q,g);if(("antigravity"===q||"gemini-cli"===q)&&!h.projectId){let a=await (0,y.eG)(g.connectionId,h.accessToken,q);a&&(h.projectId=a,(0,x.vN)(g.connectionId,{projectId:a}).catch(()=>{}))}let l=(j.providerThinking||{})[q]||null,m=(j.providerModelTransports||{})[q]||null,n=Date.now(),o=await (0,i.wk)({body:{...a,model:`${q}/${A}`},modelInfo:{provider:q,model:A},credentials:m?{...h,modelTransports:m}:h,log:w,clientRawRequest:c,connectionId:g.connectionId,userAgent:E,apiKey:e,ccFilterNaming:!!j.ccFilterNaming,rtkEnabled:!!j.rtkEnabled,headroomEnabled:!!j.headroomEnabled,headroomUrl:j.headroomUrl||"http://localhost:8787",headroomCompressUserMessages:!!j.headroomCompressUserMessages,cavemanEnabled:!!j.cavemanEnabled,cavemanLevel:j.cavemanLevel||"full",ponytailEnabled:!!j.ponytailEnabled,ponytailLevel:j.ponytailLevel||"full",pxpipeEnabled:!!j.pxpipeEnabled,pxpipeMinChars:j.pxpipeMinChars,pxpipeTimeoutMs:j.pxpipeTimeoutMs,pxpipeTransform:await B(j),onPxpipeEvent:r.T0,providerThinking:l,settings:j,sourceFormatOverride:d?.url?(0,v.t)(new URL(d.url).pathname,a):null,onCredentialsRefreshed:async a=>{await (0,x.vN)(g.connectionId,{...a,existingProviderSpecificData:g.providerSpecificData,testStatus:"active"})},onRequestSuccess:async()=>{await (0,f.Pt)(g.connectionId,g,A)}});if((0,u.Up)(g.connectionId,!!o.success,Date.now()-n,{provider:q,model:A,strategy:"zenith"}),o.success){if(!J&&K&&g.connectionId&&(0,z.BO)(K,g.connectionId),j.responseCacheEnabled&&!0!==a.stream)try{let c=o.response.clone(),d=c.headers.get("content-type")||"application/json";c.text().then(e=>{(0,s.$T)({model:b,body:a,status:c.status,contentType:d,responseBody:e,estimatedTokens:Math.ceil(e.length/4),ttlMs:1e3*(j.responseCacheTtlSec||300)})}).catch(()=>{})}catch{}return o.response}if(o.emergencyFallback&&!a.__emergencyFallbackUsed){let b=o.emergencyFallback;w.info("EMERGENCY",`${q}/${A} → ${b.provider}/${b.model} (${b.reason})`);try{let g=await (0,f.c1)(b.provider,new Set,b.model);if(g&&!g.allRateLimited){let f={...a,__emergencyFallbackUsed:!0,model:`${b.provider}/${b.model}`};b.maxOutputTokens&&(f.max_tokens=Math.min(f.max_tokens||b.maxOutputTokens,b.maxOutputTokens));let h=await (0,i.wk)({body:f,modelInfo:{provider:b.provider,model:b.model},credentials:(j.providerModelTransports||{})[b.provider]?{...g,modelTransports:j.providerModelTransports[b.provider]}:g,log:w,clientRawRequest:c,userAgent:E,apiKey:e,connectionId:g.connectionId,ccFilterNaming:!!j.ccFilterNaming,rtkEnabled:!!j.rtkEnabled,headroomEnabled:!!j.headroomEnabled,headroomUrl:j.headroomUrl||"http://localhost:8787",headroomCompressUserMessages:!!j.headroomCompressUserMessages,cavemanEnabled:!!j.cavemanEnabled,cavemanLevel:j.cavemanLevel||"full",ponytailEnabled:!!j.ponytailEnabled,ponytailLevel:j.ponytailLevel||"full",pxpipeEnabled:!!j.pxpipeEnabled,pxpipeMinChars:j.pxpipeMinChars,pxpipeTimeoutMs:j.pxpipeTimeoutMs,pxpipeTransform:await B(j),onPxpipeEvent:r.T0,providerThinking:(j.providerThinking||{})[b.provider]||null,sourceFormatOverride:d?.url?(0,v.t)(new URL(d.url).pathname,a):null,settings:j});if(h.success)return h.response;w.warn("EMERGENCY",`fallback ${b.provider}/${b.model} also failed: ${h.status}`)}else w.warn("EMERGENCY",`no credentials for fallback ${b.provider}, skipping`)}catch(a){w.warn("EMERGENCY",`fallback path threw: ${a.message}`)}}let{shouldFallback:p}=await (0,f.vk)(g.connectionId,o.status,o.error,q,A,o.resetsAtMs);if(p){w.warn("AUTH",`Account ${g.connectionName} unavailable (${o.status}), trying fallback`),G.add(g.connectionId),H=o.error,I=o.status;continue}return o.response}}[e,i]=A.then?(await A)():A,d()}catch(a){d(a)}})},87155:(a,b,c)=>{c.d(b,{CG:()=>r,ED:()=>w,S1:()=>u,XF:()=>j,_g:()=>v,kC:()=>s,no:()=>t,sW:()=>y});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f),h=c(79646),i=c(49120);let j=g().join(i.n,"pxpipe"),k="pxpipe-proxy",l=g().join(j,"install.log"),m="win32"===process.platform,n=m?"npm.cmd":"npm",o=[...m?[`${process.env.ProgramFiles||""}\\nodejs`,`${process.env.APPDATA||""}\\npm`]:["/usr/local/bin","/opt/homebrew/bin",`${process.env.HOME||""}/.local/bin`,"/usr/bin","/bin"],process.env.PATH||""].filter(Boolean).join(g().delimiter),p=null;function q(){return g().join(j,"node_modules",k)}function r(){return g().join(q(),"dist","core","library.js")}function s(){return g().join(q(),"dist","core","applicability.js")}function t(){try{let a=(0,h.execSync)(`${m?"where":"which"} npm`,{stdio:["ignore","pipe","ignore"],windowsHide:!0,env:{...process.env,PATH:o}}).toString().trim();return a?a.split(/\r?\n/)[0].trim():null}catch{return null}}function u(){try{let a=g().join(q(),"package.json");if(!e().existsSync(a)||!e().existsSync(r()))return{installed:!1,version:null,path:null};let b=JSON.parse(e().readFileSync(a,"utf8"));return{installed:!0,version:b.version||null,path:q()}}catch{return{installed:!1,version:null,path:null}}}function v(){return null!==p}function w(){return p||(p=x().finally(()=>{p=null}))}async function x(){let a=t();if(!a){let a=Error("npm not found on PATH — Node.js/npm is required to install PXPIPE");throw a.code="NPM_NOT_FOUND",a}e().existsSync(j)||e().mkdirSync(j,{recursive:!0});let b=g().join(j,"package.json");e().existsSync(b)||e().writeFileSync(b,JSON.stringify({name:"9router-pxpipe-host",private:!0},null,2));let c=e().openSync(l,"a");e().writeSync(c,`
1
+ "use strict";exports.id=6200,exports.ids=[6200],exports.modules={9999:(a,b,c)=>{c.d(b,{$S:()=>l,$T:()=>m,QS:()=>n,e3:()=>o});var d=c(77598),e=c.n(d);let f=globalThis;f.__krouterResponseCache||(f.__krouterResponseCache=new Map,f.__krouterResponseCacheStats={hits:0,misses:0,skipped:0,bytesSaved:0,tokensSaved:0,lastResetAt:Date.now()});let g=f.__krouterResponseCache,h=f.__krouterResponseCacheStats;function i({model:a,body:b}){let c=JSON.stringify({model:a,system:b?.system??null,instructions:b?.instructions??null,messages:b?.messages??null,input:b?.input??null,contents:b?.contents??null,temperature:b?.temperature??null,max_tokens:b?.max_tokens??b?.max_output_tokens??null,tools:b?.tools??null,tool_choice:b?.tool_choice??null,response_format:b?.response_format??null});return e().createHash("sha256").update(c).digest("hex")}let j=new Set(["antigravity","ag","gemini","gemini-cli","gc"]);function k(a,b=null){if(!a||"object"!=typeof a||!0===a.stream||"number"==typeof a.temperature&&a.temperature>.3||"required"===a.tool_choice)return!1;let c=function(a){if("string"!=typeof a)return null;let b=a.indexOf("/");return b>0?a.slice(0,b):null}(b);if(c&&j.has(c))return!1;let d=a.max_tokens??a.max_output_tokens??null;return"number"!=typeof d||!(d<32)}function l({model:a,body:b}){if(!k(b,a))return h.skipped++,null;let c=i({model:a,body:b}),d=g.get(c);return d?d.expiresAt<Date.now()?(g.delete(c),h.misses++,null):(g.delete(c),g.set(c,d),h.hits++,h.bytesSaved+=d.bodyBytes||0,h.tokensSaved+=d.estimatedTokens||0,d):(h.misses++,null)}function m({model:a,body:b,status:c,contentType:d,responseBody:e,estimatedTokens:f=0,ttlMs:h=3e5,maxEntries:j=500}){if(!k(b,a)||200!==c||!e||"string"==typeof e&&e.length<100)return!1;let l=i({model:a,body:b}),n="string"==typeof e?e:JSON.stringify(e),o={key:l,status:c,contentType:d||"application/json",body:n,bodyBytes:Buffer.byteLength(n,"utf-8"),estimatedTokens:f,expiresAt:Date.now()+h,storedAt:Date.now(),model:a};for(g.set(l,o);g.size>j;){let a=g.keys().next().value;if(void 0===a)break;g.delete(a)}return!0}function n(){let a=h.hits+h.misses;return{enabled:!0,entries:g.size,hits:h.hits,misses:h.misses,skipped:h.skipped,hitRate:a>0?h.hits/a:0,bytesSaved:h.bytesSaved,tokensSaved:h.tokensSaved,lastResetAt:h.lastResetAt}}function o(){g.clear(),h.hits=0,h.misses=0,h.skipped=0,h.bytesSaved=0,h.tokensSaved=0,h.lastResetAt=Date.now()}},24253:(a,b,c)=>{c.d(b,{I6:()=>n,Mo:()=>i,RG:()=>m,V:()=>j,Y8:()=>l,xl:()=>o});var d=c(1932),e=c(87155);let f=null,g=null,h=null;function i(){return g?{loaded:!0,version:g.version,loadedAt:g.loadedAt}:{loaded:!1}}async function j(){return g||h||(h=k().finally(()=>{h=null}))}async function k(){let a=(0,e.S1)();if(!a.installed){let a=Error("PXPIPE is not installed");throw a.code="NOT_INSTALLED",a}let b=`${(0,d.pathToFileURL)((0,e.CG)()).href}?v=${encodeURIComponent(a.version||"0")}`,c=await import(b);if("function"!=typeof c.transformAnthropicMessages)throw Error("installed pxpipe package does not export transformAnthropicMessages");return g={module:c,version:a.version,loadedAt:Date.now()}}function l(){let a=!!g;return g=null,a}async function m({autoLoad:a=!0}={}){try{if(!g&&!a)return null;let{module:b}=await j();return b.transformAnthropicMessages}catch{return null}}async function n(a){let b=Array.isArray(a)?a.map(a=>String(a).trim()).filter(Boolean):[],c=b.slice().sort().join(",");if(c!==f)try{if(!(0,e.S1)().installed)return;let a=await import((0,d.pathToFileURL)((0,e.kC)()).href);"function"==typeof a.setAllowedModelBases&&(a.setAllowedModelBases(b.length?b:null),f=c)}catch{}}async function o(){let a=Date.now(),{module:b}=await j(),c=new TextEncoder().encode(JSON.stringify({model:"claude-fable-5",max_tokens:16,messages:[{role:"user",content:"ping"}]})),d=await b.transformAnthropicMessages({body:c,model:"claude-fable-5"});if(!d||"boolean"!=typeof d.applied||!(d.body instanceof Uint8Array))throw Error("transform returned an unexpected shape");return{ok:!0,reason:d.reason,durationMs:Date.now()-a}}},25772:(a,b,c)=>{c.d(b,{Io:()=>h,WV:()=>f});let d=null,e=0;function f(a={}){let{sidecarUrl:b=process.env.SIDECAR_URL||"http://127.0.0.1:5001/redact",timeout:h=Number(process.env.REDACTION_TIMEOUT_MS)||15e3,enabled:i="false"!==process.env.REDACTION_ENABLED,failOpen:j="true"===process.env.REDACTION_FAIL_OPEN}=a;return async function(a,f){if(!i)return f(a);if(Date.now()-e>1e4)try{let{getSettings:a}=await Promise.resolve().then(c.bind(c,42655)),b=await a();d=!!(b.presidioEnabled&&b.presidioPiiRedaction),e=Date.now()}catch(b){if(console.error("[Redaction Middleware] Failed to read settings:",b),!0===d&&!j)return new Response(JSON.stringify({error:{message:"Unable to verify redaction settings",code:"SETTINGS_ERROR",type:"settings_error"}}),{status:500,headers:{"Content-Type":"application/json"}});return f(a)}if(!d||"POST"!==a.method)return f(a);try{let c=await a.clone().json(),d=[],e=[];if(Array.isArray(c.messages))for(let a=0;a<c.messages.length;a++){let b=c.messages[a],f=b?.content;if(f){if("string"==typeof f)d.push(f),e.push({type:"string",index:a});else if(Array.isArray(f))for(let b=0;b<f.length;b++){let c=f[b];c?.type==="text"&&"string"==typeof c?.text&&(d.push(c.text),e.push({type:"array",msgIndex:a,blockIndex:b}))}}}if("string"==typeof c.system)d.push(c.system),e.push({type:"system-string"});else if(Array.isArray(c.system))for(let a=0;a<c.system.length;a++){let b=c.system[a];b?.type==="text"&&"string"==typeof b?.text&&(d.push(b.text),e.push({type:"system-block",blockIndex:a}))}if("string"==typeof c.instructions&&(d.push(c.instructions),e.push({type:"instructions"})),"string"==typeof c.input)d.push(c.input),e.push({type:"input-string"});else if(Array.isArray(c.input))for(let a=0;a<c.input.length;a++){let b=c.input[a],f=b?.content;if("string"==typeof f)d.push(f),e.push({type:"input-item-string",index:a});else if(Array.isArray(f))for(let b=0;b<f.length;b++){let c=f[b];(c?.type==="input_text"||c?.type==="output_text"||c?.type==="text")&&"string"==typeof c?.text&&(d.push(c.text),e.push({type:"input-item-block",itemIndex:a,blockIndex:b}))}}if(Array.isArray(c.messages))for(let a=0;a<c.messages.length;a++){let b=c.messages[a];if(b?.role==="tool"&&"string"==typeof b.content&&(d.push(b.content),e.push({type:"tool-message",index:a})),Array.isArray(b?.tool_calls))for(let c=0;c<b.tool_calls.length;c++){let f=b.tool_calls[c]?.function?.arguments;"string"==typeof f&&f.length>0&&(d.push(f),e.push({type:"tool-call-args",msgIndex:a,callIndex:c}))}if(Array.isArray(b?.content))for(let c=0;c<b.content.length;c++){let f=b.content[c];if(f?.type==="tool_result"){if("string"==typeof f.content)d.push(f.content),e.push({type:"tool-result-string",msgIndex:a,blockIndex:c});else if(Array.isArray(f.content))for(let b=0;b<f.content.length;b++){let g=f.content[b];g?.type==="text"&&"string"==typeof g.text&&(d.push(g.text),e.push({type:"tool-result-block",msgIndex:a,blockIndex:c,innerIndex:b}))}}}}if(Array.isArray(c.tools))for(let a=0;a<c.tools.length;a++){let b=c.tools[a];"string"==typeof b?.description&&b.description.length>0?(d.push(b.description),e.push({type:"tool-desc",index:a})):"string"==typeof b?.function?.description&&b.function.description.length>0&&(d.push(b.function.description),e.push({type:"tool-fn-desc",index:a}))}if(0===d.length)return f(a);let i=await g(b,d,{timeout:h}),j=0;for(let a of e){if("string"===a.type)c.messages[a.index].content=i[j];else if("array"===a.type)c.messages[a.msgIndex].content[a.blockIndex].text=i[j];else if("system-string"===a.type)c.system=i[j];else if("system-block"===a.type)c.system[a.blockIndex].text=i[j];else if("instructions"===a.type)c.instructions=i[j];else if("input-string"===a.type)c.input=i[j];else if("input-item-string"===a.type)c.input[a.index].content=i[j];else if("input-item-block"===a.type)c.input[a.itemIndex].content[a.blockIndex].text=i[j];else if("tool-message"===a.type)c.messages[a.index].content=i[j];else if("tool-call-args"===a.type){let b=i[j],d=!1;try{JSON.parse(b),d=!0}catch{d=!1}d?c.messages[a.msgIndex].tool_calls[a.callIndex].function.arguments=b:console.warn("[Redaction Middleware] Skipped tool_call arguments: redaction produced invalid JSON")}else"tool-result-string"===a.type?c.messages[a.msgIndex].content[a.blockIndex].content=i[j]:"tool-result-block"===a.type?c.messages[a.msgIndex].content[a.blockIndex].content[a.innerIndex].text=i[j]:"tool-desc"===a.type?c.tools[a.index].description=i[j]:"tool-fn-desc"===a.type&&(c.tools[a.index].function.description=i[j]);j++}let k=new Request(a.url,{method:a.method,headers:a.headers,body:JSON.stringify(c)});return f(k)}catch(e){if(console.error(`[Redaction Middleware] Error: ${e.message}`),j)return console.warn("[Redaction Middleware] Fail-open enabled - proceeding with original request"),f(a);let b=500,c="internal_error",d="Request processing failed";return"AbortError"===e.name||e.message.includes("timeout")||e.message.includes("TIMEOUT")?(b=503,c="redaction_timeout",d="PII redaction service unavailable. Please try again later."):e.message.includes("fetch")||e.message.includes("ECONNREFUSED")||e.message.includes("ENOTFOUND")||e.message.includes("ECONNRESET")||"TypeError"===e.name&&e.message.includes("fetch")?(b=503,c="redaction_service_unavailable",d="PII redaction service unavailable. Please try again later."):e.message.includes("redact")||e.message.includes("sidecar")||e.message.includes("HTTP 5")?(b=502,c="redaction_service_error",d="PII redaction service error. Please try again later."):(e.message.includes("Invalid")||e.message.includes("format"))&&(b=400,c="invalid_request",d="Invalid request format."),console.error(JSON.stringify({timestamp:new Date().toISOString(),event:"redaction_failure",errorType:c,errorMessage:e.message,statusCode:b,path:new URL(a.url).pathname,method:a.method})),new Response(JSON.stringify({error:{message:d,code:c.toUpperCase(),type:c,requestId:a.headers.get("x-request-id")||void 0}}),{status:b,headers:{"Content-Type":"application/json","X-Redaction-Failed":"true"}})}}}async function g(a,b,{timeout:c=2e3}={}){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{let c=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({texts:b}),signal:d.signal});if(!c.ok)throw Error(`Sidecar redaction service error: HTTP ${c.status}`);let e=await c.json();if(!e.redacted_texts||!Array.isArray(e.redacted_texts))throw Error("Sidecar redaction service returned invalid response");if(e.redacted_texts.length!==b.length)throw Error("Sidecar redaction service returned wrong number of redacted texts");return e.redacted_texts}finally{clearTimeout(e)}}function h(a,b={}){let c=f(b);return async function(b,...d){return c(b,b=>a(b,...d))}}},38775:(a,b,c)=>{c.d(b,{d_:()=>k,mA:()=>j});var d=c(89718),e=c(40669),f=c(35024),g=c(44404);let h={xmtp:"xiaomi-tokenplan","xiaomi-tokenplan":"xiaomi-tokenplan"},i=new Set([...Object.keys(h),...Object.keys(f.xq),...Object.keys(g.Xg),...Object.values(g.Xg)]);async function j(a){let b,c=(b=(0,e.Xh)(a),b?.providerAlias&&h[b.providerAlias]?{...b,provider:h[b.providerAlias]}:b);if(!c.isAlias){if(!i.has(c.providerAlias)){let a=(await (0,d.Fh)({type:"openai-compatible"})).find(a=>a.prefix===c.providerAlias);if(a)return{provider:a.id,model:c.model};let b=(await (0,d.Fh)({type:"anthropic-compatible"})).find(a=>a.prefix===c.providerAlias);if(b)return{provider:b.id,model:c.model};let e=(await (0,d.Fh)({type:"custom-embedding"})).find(a=>a.prefix===c.providerAlias);if(e)return{provider:e.id,model:c.model}}return{provider:c.provider,model:c.model}}return await (0,d.Dj)(c.model)?{provider:null,model:c.model}:(0,e.js)(a,d.OM)}async function k(a){if(a.includes("/"))return null;let b=await (0,d.Dj)(a);return b&&b.models&&b.models.length>0?b.models:null}},46945:(a,b,c)=>{c.d(b,{V:()=>e});let d=/\[1m\]$/i;function e(a){if("string"!=typeof a)return{model:a,contextMarker:null};let b=a.trim(),c=b.match(d);return c?{model:b.slice(0,-c[0].length),contextMarker:c[0].slice(1,-1).toLowerCase()}:{model:a,contextMarker:null}}},54413:(a,b,c)=>{c.d(b,{D:()=>e});let d={"qwen3.6-plus-free":{replacement:"qwen3.6-plus",tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"minimax-m2.5-free":{replacement:"minimax-m2.5",tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"nemotron-3-super-free":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"trinity-large-preview-free":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"big-pickle":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"}};function e(a){if(!a||"string"!=typeof a)return null;let b=a.includes("/")?a.slice(a.lastIndexOf("/")+1):a,c=d[b];if(!c)return null;let e=c.replacement?`Use "${c.replacement}" on the ${c.tier} instead.`:`No direct replacement — pick a live model on the ${c.tier}.`;return`Model "${b}" has been retired (${c.reason}). ${e}`}},74388:(a,b,c)=>{c.d(b,{Az:()=>l,SP:()=>o,T0:()=>k});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f),h=c(87155);let i=g().join(h.XF,"events.jsonl"),j=g().join(h.XF,"events.jsonl.1");function k(a){try{e().existsSync(h.XF)||e().mkdirSync(h.XF,{recursive:!0});try{e().statSync(i).size>5242880&&e().renameSync(i,j)}catch{}e().appendFile(i,JSON.stringify({ts:Date.now(),...a})+"\n",()=>{})}catch{}}function l({sinceMs:a=null,limit:b=null}={}){let c=[];for(let b of[j,i])try{if(!e().existsSync(b))continue;for(let d of e().readFileSync(b,"utf8").split("\n"))if(d)try{let b=JSON.parse(d);if(a&&b.ts<a)continue;c.push(b)}catch{}}catch{}return c.sort((a,b)=>a.ts-b.ts),b?c.slice(-b):c}function m(){return{requests:0,compressed:0,bypassed:0,errors:0,tokensBeforeEst:0,tokensAfterEst:0,tokensSavedEst:0,savedPct:0,imagesGenerated:0,compressionTimeMs:0,avgCompressionMs:0}}function n(a,b){a.requests++,b.applied?(a.compressed++,a.tokensBeforeEst+=b.tokensBeforeEst||0,a.tokensAfterEst+=b.tokensAfterEst||0,a.tokensSavedEst+=b.tokensSavedEst||0,a.imagesGenerated+=b.imageCount||0,a.compressionTimeMs+=b.durationMs||0):"transform_error"===b.reason||"timeout"===b.reason?a.errors++:a.bypassed++}function o({timelineDays:a=30,recentLimit:b=100}={}){let c=l(),d=Date.now(),e=new Date(new Date(d).setHours(0,0,0,0)).getTime(),f={all:m(),today:m(),yesterday:m(),last7d:m(),last30d:m()},g=new Map;for(let b=a-1;b>=0;b--){let a=new Date(e-864e5*b);g.set(a.toISOString().slice(0,10),{date:a.toISOString().slice(0,10),tokensSavedEst:0,compressed:0,requests:0})}for(let a of c){n(f.all,a),a.ts>=e?n(f.today,a):a.ts>=e-864e5&&n(f.yesterday,a),a.ts>=d-6048e5&&n(f.last7d,a),a.ts>=d-2592e6&&n(f.last30d,a);let b=new Date(a.ts).toISOString().slice(0,10),c=g.get(b);c&&(c.requests++,a.applied&&(c.compressed++,c.tokensSavedEst+=a.tokensSavedEst||0))}for(let a of Object.values(f))a.savedPct=a.tokensBeforeEst>0?+(a.tokensSavedEst/a.tokensBeforeEst*100).toFixed(2):0,a.avgCompressionMs=a.compressed>0?Math.round(a.compressionTimeMs/a.compressed):0;return{windows:f,timeline:[...g.values()],recent:c.slice(-b).reverse()}}},79489:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{P:()=>D});var e=c(48895),f=c(80238),g=c(89718),h=c(38775),i=c(92500),j=c(46945),k=c(43659),l=c(12557),m=c(54413),n=c(8864),o=c(38962),p=c(17603),q=c(27349),r=c(24253),s=c(74388),t=c(9999),u=c(41004),v=c(53258),w=c(14170),x=c(7803),y=c(67828),z=c(38160),A=c(29385),B=a([e,i]);async function C(a){return a?.pxpipeEnabled?(await (0,r.I6)(a.pxpipeModels),(0,r.RG)()):null}async function D(a,b=null){let d;try{d=await a.json()}catch{return x.warn("CHAT","Invalid JSON body"),(0,k.yj)(u.gx.BAD_REQUEST,"Invalid JSON body")}b||(b={endpoint:new URL(a.url).pathname,body:d,headers:Object.fromEntries(a.headers.entries())});let e=new URL(a.url),{model:i,contextMarker:l}=(0,j.V)(d.model);l&&(d.model=i);let m=d.messages?.length||d.input?.length||0,n=d.tools?.length||0,r=d.reasoning_effort||d.reasoning?.effort||null;x.request("POST",`${e.pathname} | ${i} | ${m} msgs${n?` | ${n} tools`:""}${r?` | effort=${r}`:""}`);let s=a.headers.get("Authorization"),v=(0,f.Tr)(a);if(s&&v){let a=x.maskKey(v);x.debug("AUTH",`API Key: ${a}`)}else x.debug("AUTH","No API key provided (local mode)");let w=await (0,g.mt)();if(w.requireApiKey){if(!v)return x.warn("AUTH","Missing API key (requireApiKey=true)"),(0,k.yj)(u.gx.UNAUTHORIZED,"Missing API key");if(!await (0,f.kI)(v))return x.warn("AUTH","Invalid API key (requireApiKey=true)"),(0,k.yj)(u.gx.UNAUTHORIZED,"Invalid API key")}if(!i)return x.warn("CHAT","Missing model"),(0,k.yj)(u.gx.BAD_REQUEST,"Missing model");try{let{classifyPromptIntent:a}=await c.e(9849).then(c.bind(c,49849)),{classifyRequestComplexity:b}=await c.e(3523).then(c.bind(c,23523)),e=(d?.messages||[]).find(a=>a?.role==="user"),f="string"==typeof e?.content?e.content:Array.isArray(e?.content)&&e.content.find(a=>a?.text)?.text||"",g=(d?.messages||[]).find(a=>a?.role==="system"),h="string"==typeof g?.content?g.content:"",i=a(f,h),j=b(d);x.debug("ROUTING",`intent=${i} | complexity=${j.level} score=${j.score} tier=${j.recommendedTier}${j.hasToolUse?" tools=yes":""}`)}catch(a){x.debug("ROUTING",`classify failed: ${a?.message}`)}let y=a?.headers?.get("user-agent")||"",z=(0,q.c)(d,i,y,!!w.ccFilterNaming);if(z)return z.response||z;if(w.responseCacheEnabled){let a=(0,t.$S)({model:i,body:d});if(a)return x.info("CHAT",`[CACHE HIT] ${i} (${a.bodyBytes}B saved)`),new Response(a.body,{status:a.status,headers:{"Content-Type":a.contentType,"X-Cache":"HIT","X-Cache-Age-Ms":String(Date.now()-a.storedAt)}})}let A=(0,o.t8)(d),B=await (0,h.d_)(i);if(B){let c=w.comboStrategies||{},e=c[i]?.fallbackStrategy||w.comboStrategy||"fallback",f=(0,p.R8)(B,A,w),g=f.filter(a=>!B.includes(a));if("fusion"===e)return x.info("CHAT",`Combo "${i}" with ${B.length} models (strategy: fusion)`),(0,o.vt)({body:d,models:B,handleSingleModel:(c,d)=>E(c,d,b,a,v,w,1),log:x,comboName:i,judgeModel:c[i]?.judgeModel,tuning:c[i]?.fusionTuning});let h=w.comboStickyRoundRobinLimit;return x.info("CHAT",`Combo "${i}" with ${f.length} models (strategy: ${e}, sticky: ${h})`),(0,o.Pr)({body:d,models:f,handleSingleModel:(0,p.ar)((c,d)=>E(c,d,b,a,v,w,1),g),log:x,comboName:i,comboStrategy:e,comboStickyLimit:h})}let C=(0,p.R8)([i],A,w);if(C.length>1){let c=C.filter(a=>a!==i);return x.info("CHAT",`Capacity adapter for [${[...A].join(",")}] on "${i}" → trying ${C.join(", ")}`),(0,o.Pr)({body:d,models:C,handleSingleModel:(0,p.ar)((c,d)=>E(c,d,b,a,v,w,1),c),log:x,comboName:i,comboStrategy:(0,p.vB)(A,w)})}return E(d,i,b,a,v,w,0)}async function E(a,b,c=null,d=null,e=null,j=null,p=0){j||(j=await (0,g.mt)());let q=await (0,h.mA)(b);if(!q.provider){let f=await (0,h.d_)(b);if(f){if(p>=3)return x.warn("CHAT",`Combo recursion limit hit for "${b}" at depth ${p} — refusing to dispatch`),(0,k.yj)(u.gx.BAD_REQUEST,`Combo recursion limit (3) exceeded for "${b}"`);let g=j.comboStrategies||{},h=g[b]?.fallbackStrategy||j.comboStrategy||"fallback";if("fusion"===h)return x.info("CHAT",`Combo "${b}" with ${f.length} models (strategy: fusion, depth: ${p})`),(0,o.vt)({body:a,models:f,handleSingleModel:(a,b)=>E(a,b,c,d,e,j,p+1),log:x,comboName:b,judgeModel:g[b]?.judgeModel,tuning:g[b]?.fusionTuning});let i=j.comboStickyRoundRobinLimit;return x.info("CHAT",`Combo "${b}" with ${f.length} models (strategy: ${h}, sticky: ${i}, depth: ${p})`),(0,o.Pr)({body:a,models:f,handleSingleModel:(a,b)=>E(a,b,c,d,e,j,p+1),log:x,comboName:b,comboStrategy:h,comboStickyLimit:i})}return x.warn("CHAT","Invalid model format",{model:b}),(0,k.yj)(u.gx.BAD_REQUEST,"Invalid model format")}let{provider:r,model:B}=q,D=(0,m.D)(B);if(D)return x.warn("CHAT",`Retired model "${B}" requested → ${D}`),(0,k.yj)(u.gx.BAD_REQUEST,D);b!==`${r}/${B}`?x.info("ROUTING",`${b} → ${r}/${B}`):x.info("ROUTING",`Provider: ${r}, Model: ${B}`);let F=d?.headers?.get("user-agent")||"",G=d?.headers?.get("x-bypass-modellock")==="1",H=new Set,I=null,J=null,K="round-robin"===(0,n.z)(j,r),L=(0,A.bI)(a,{provider:r}),M=!K&&L?(0,A.Wq)(L):null;for(;;){let g=await (0,f.c1)(r,H,B,{bypassModelLock:G,preferredConnectionId:M&&!H.has(M)?M:null});if(!g||g.allRateLimited){if(g?.allRateLimited){let a=I||g.lastError||"Unavailable",b=(0,l.z7)(g.lastErrorCode,u.gx.SERVICE_UNAVAILABLE);if(x.warn("CHAT",`[${r}/${B}] ${a} (${b===u.gx.SERVICE_UNAVAILABLE?g.retryAfterHuman:`reported as ${b}`})`),b!==u.gx.SERVICE_UNAVAILABLE)return(0,k.yj)(b,`[${r}/${B}] ${a}`);return(0,k.wO)(b,`[${r}/${B}] ${a}`,g.retryAfter,g.retryAfterHuman)}if(0===H.size)return x.warn("AUTH",`No active credentials for provider: ${r}`),(0,k.yj)(u.gx.SERVICE_UNAVAILABLE,`No active credentials for provider: ${r}`);return x.warn("CHAT","No more accounts available",{provider:r}),(0,k.yj)(J||u.gx.SERVICE_UNAVAILABLE,I||"All accounts unavailable")}x.info("AUTH",`\x1b[32mUsing ${r} account: ${g.connectionName}\x1b[0m`);let h=await (0,y.eU)(r,g);if(("antigravity"===r||"gemini-cli"===r)&&!h.projectId){let a=await (0,z.eG)(g.connectionId,h.accessToken,r);a&&(h.projectId=a,(0,y.vN)(g.connectionId,{projectId:a}).catch(()=>{}))}let m=(j.providerThinking||{})[r]||null,n=(j.providerModelTransports||{})[r]||null,o=Date.now(),p=await (0,i.wk)({body:{...a,model:`${r}/${B}`},modelInfo:{provider:r,model:B},credentials:n?{...h,modelTransports:n}:h,log:x,clientRawRequest:c,connectionId:g.connectionId,userAgent:F,apiKey:e,ccFilterNaming:!!j.ccFilterNaming,rtkEnabled:!!j.rtkEnabled,headroomEnabled:!!j.headroomEnabled,headroomUrl:j.headroomUrl||"http://localhost:8787",headroomCompressUserMessages:!!j.headroomCompressUserMessages,cavemanEnabled:!!j.cavemanEnabled,cavemanLevel:j.cavemanLevel||"full",ponytailEnabled:!!j.ponytailEnabled,ponytailLevel:j.ponytailLevel||"full",pxpipeEnabled:!!j.pxpipeEnabled,pxpipeMinChars:j.pxpipeMinChars,pxpipeTimeoutMs:j.pxpipeTimeoutMs,pxpipeTransform:await C(j),onPxpipeEvent:s.T0,providerThinking:m,settings:j,sourceFormatOverride:d?.url?(0,w.t)(new URL(d.url).pathname,a):null,onCredentialsRefreshed:async a=>{await (0,y.vN)(g.connectionId,{...a,existingProviderSpecificData:g.providerSpecificData,testStatus:"active"})},onRequestSuccess:async()=>{await (0,f.Pt)(g.connectionId,g,B)}});if((0,v.Up)(g.connectionId,!!p.success,Date.now()-o,{provider:r,model:B,strategy:"zenith"}),p.success){if(!K&&L&&g.connectionId&&(0,A.BO)(L,g.connectionId),j.responseCacheEnabled&&!0!==a.stream)try{let c=p.response.clone(),d=c.headers.get("content-type")||"application/json";c.text().then(e=>{(0,t.$T)({model:b,body:a,status:c.status,contentType:d,responseBody:e,estimatedTokens:Math.ceil(e.length/4),ttlMs:1e3*(j.responseCacheTtlSec||300)})}).catch(()=>{})}catch{}return p.response}if(p.emergencyFallback&&!a.__emergencyFallbackUsed){let b=p.emergencyFallback;x.info("EMERGENCY",`${r}/${B} → ${b.provider}/${b.model} (${b.reason})`);try{let g=await (0,f.c1)(b.provider,new Set,b.model);if(g&&!g.allRateLimited){let f={...a,__emergencyFallbackUsed:!0,model:`${b.provider}/${b.model}`};b.maxOutputTokens&&(f.max_tokens=Math.min(f.max_tokens||b.maxOutputTokens,b.maxOutputTokens));let h=await (0,i.wk)({body:f,modelInfo:{provider:b.provider,model:b.model},credentials:(j.providerModelTransports||{})[b.provider]?{...g,modelTransports:j.providerModelTransports[b.provider]}:g,log:x,clientRawRequest:c,userAgent:F,apiKey:e,connectionId:g.connectionId,ccFilterNaming:!!j.ccFilterNaming,rtkEnabled:!!j.rtkEnabled,headroomEnabled:!!j.headroomEnabled,headroomUrl:j.headroomUrl||"http://localhost:8787",headroomCompressUserMessages:!!j.headroomCompressUserMessages,cavemanEnabled:!!j.cavemanEnabled,cavemanLevel:j.cavemanLevel||"full",ponytailEnabled:!!j.ponytailEnabled,ponytailLevel:j.ponytailLevel||"full",pxpipeEnabled:!!j.pxpipeEnabled,pxpipeMinChars:j.pxpipeMinChars,pxpipeTimeoutMs:j.pxpipeTimeoutMs,pxpipeTransform:await C(j),onPxpipeEvent:s.T0,providerThinking:(j.providerThinking||{})[b.provider]||null,sourceFormatOverride:d?.url?(0,w.t)(new URL(d.url).pathname,a):null,settings:j});if(h.success)return h.response;x.warn("EMERGENCY",`fallback ${b.provider}/${b.model} also failed: ${h.status}`)}else x.warn("EMERGENCY",`no credentials for fallback ${b.provider}, skipping`)}catch(a){x.warn("EMERGENCY",`fallback path threw: ${a.message}`)}}let{shouldFallback:q}=await (0,f.vk)(g.connectionId,p.status,p.error,r,B,p.resetsAtMs);if(q){x.warn("AUTH",`Account ${g.connectionName} unavailable (${p.status}), trying fallback`),H.add(g.connectionId),I=p.error,J=p.status;continue}return p.response}}[e,i]=B.then?(await B)():B,d()}catch(a){d(a)}})},87155:(a,b,c)=>{c.d(b,{CG:()=>r,ED:()=>w,S1:()=>u,XF:()=>j,_g:()=>v,kC:()=>s,no:()=>t,sW:()=>y});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f),h=c(79646),i=c(49120);let j=g().join(i.n,"pxpipe"),k="pxpipe-proxy",l=g().join(j,"install.log"),m="win32"===process.platform,n=m?"npm.cmd":"npm",o=[...m?[`${process.env.ProgramFiles||""}\\nodejs`,`${process.env.APPDATA||""}\\npm`]:["/usr/local/bin","/opt/homebrew/bin",`${process.env.HOME||""}/.local/bin`,"/usr/bin","/bin"],process.env.PATH||""].filter(Boolean).join(g().delimiter),p=null;function q(){return g().join(j,"node_modules",k)}function r(){return g().join(q(),"dist","core","library.js")}function s(){return g().join(q(),"dist","core","applicability.js")}function t(){try{let a=(0,h.execSync)(`${m?"where":"which"} npm`,{stdio:["ignore","pipe","ignore"],windowsHide:!0,env:{...process.env,PATH:o}}).toString().trim();return a?a.split(/\r?\n/)[0].trim():null}catch{return null}}function u(){try{let a=g().join(q(),"package.json");if(!e().existsSync(a)||!e().existsSync(r()))return{installed:!1,version:null,path:null};let b=JSON.parse(e().readFileSync(a,"utf8"));return{installed:!0,version:b.version||null,path:q()}}catch{return{installed:!1,version:null,path:null}}}function v(){return null!==p}function w(){return p||(p=x().finally(()=>{p=null}))}async function x(){let a=t();if(!a){let a=Error("npm not found on PATH — Node.js/npm is required to install PXPIPE");throw a.code="NPM_NOT_FOUND",a}e().existsSync(j)||e().mkdirSync(j,{recursive:!0});let b=g().join(j,"package.json");e().existsSync(b)||e().writeFileSync(b,JSON.stringify({name:"9router-pxpipe-host",private:!0},null,2));let c=e().openSync(l,"a");e().writeSync(c,`
2
2
  [${new Date().toISOString()}] npm install ${k}@latest
3
3
  `),await new Promise((b,d)=>{let e=(0,h.spawn)(m?n:a,["install",`${k}@latest`,"--no-audit","--no-fund","--omit=dev"],{cwd:j,stdio:["ignore",c,c],windowsHide:!0,shell:m,env:{...process.env,PATH:o}}),f=setTimeout(()=>{e.kill("SIGKILL"),d(Error("npm install timed out after 5 minutes — see install.log"))},3e5);e.once("error",a=>{clearTimeout(f),d(a)}),e.once("exit",a=>{clearTimeout(f),0===a?b():d(Error(`npm install exited with code ${a} — see install.log`))})}).finally(()=>e().closeSync(c));let d=u();if(!d.installed)throw Error("install finished but package is missing — see install.log");return d}function y(a=200){try{if(!e().existsSync(l))return"";return e().readFileSync(l,"utf8").split(/\r?\n/).filter(Boolean).slice(-a).join("\n")}catch{return""}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=8238,exports.ids=[8238],exports.modules={30869:(a,b,c)=>{c.d(b,{AA:()=>h,Rg:()=>i,UY:()=>j,X3:()=>k,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g});var d=c(39006),e=c(75681),f=c(81329);d.rE;let g={npmPackageName:"@sifxprime/krouter",installCmd:"npm i -g @sifxprime/krouter",installCmdLatest:"npm i -g @sifxprime/krouter@latest --prefer-online",shutdownCountdownSec:3,exitDelayMs:500,statusPort:20129,statusPollIntervalMs:1e3,statusLogTailLines:8,installRetries:3,installRetryDelayMs:5e3,lingerAfterDoneMs:3e4,waitForExitMinMs:5e3,waitForExitMaxMs:2e4,waitForExitCheckMs:500,appPort:20128},h={settingsKey:"claudeAutoPing",tickIntervalMs:6e4,pingLeadMs:5e3,pingModel:"claude-haiku-4-5-20251001",pingText:"hi",pingMaxTokens:1,refreshAheadMs:3e5,fiveHourKey:"session (5h)"},i={settingsKey:"codexAutoPing",tickIntervalMs:6e4,pingLeadMs:5e3,pingModel:"gpt-5.6-terra",pingText:"hi",pingMaxTokens:1,refreshAheadMs:3e5,fiveHourKey:"session"},j={maxLines:200,pollIntervalMs:1e3},k={openrouter:"https://openrouter.ai/api/v1/chat/completions",glm:"https://api.z.ai/api/anthropic/v1/messages","glm-cn":"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",kimi:"https://api.kimi.com/coding/v1/messages",minimax:"https://api.minimax.io/anthropic/v1/messages","minimax-cn":"https://api.minimaxi.com/anthropic/v1/messages",alicode:"https://coding.dashscope.aliyuncs.com/v1/chat/completions","alicode-intl":"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions","volcengine-ark":"https://ark.cn-beijing.volces.com/api/coding/v3/chat/completions",byteplus:"https://ark.ap-southeast.bytepluses.com/api/coding/v3/chat/completions",openai:"https://api.openai.com/v1/chat/completions","vercel-ai-gateway":"https://ai-gateway.vercel.sh/v1/chat/completions",anthropic:"https://api.anthropic.com/v1/messages",gemini:"https://generativelanguage.googleapis.com/v1beta/models",ollama:"https://ollama.com/api/chat","ollama-local":"http://localhost:11434/api/chat"}},38238:(a,b,c)=>{c.d(b,{P:()=>h});var d=c(89718),e=c(30869),f=c(54603);async function g(){let a=null;try{let b=await (0,d.PX)();a=b.find(a=>!1!==a.isActive)?.key||null}catch{}let b={"Content-Type":"application/json"};return a&&(b.Authorization=`Bearer ${a}`),b["x-9r-cli-token"]=await (0,f.Xj)("9r-cli-auth"),b}async function h(a,b,c=`http://127.0.0.1:${process.env.PORT||e.h0.appPort}`){let d=await g(),f=Date.now();if("embedding"===b){let b=await fetch(`${c}/api/v1/embeddings`,{method:"POST",headers:d,body:JSON.stringify({model:a,input:"test"}),signal:AbortSignal.timeout(15e3)}),e=Date.now()-f,g=await b.text().catch(()=>""),h=null;try{h=g?JSON.parse(g):null}catch{}if(!b.ok){let a=h?.error?.message||h?.error||g;return{ok:!1,latencyMs:e,error:`HTTP ${b.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:b.status}}return Array.isArray(h?.data)&&h.data.length>0&&Array.isArray(h.data[0]?.embedding)?{ok:!0,latencyMs:e,error:null,status:b.status}:{ok:!1,latencyMs:e,status:b.status,error:"Provider returned no embedding data"}}if("image"===b){let b=await fetch(`${c}/api/v1/images/generations`,{method:"POST",headers:d,body:JSON.stringify({model:a,prompt:"test"}),signal:AbortSignal.timeout(15e3)}),e=Date.now()-f,g=await b.text().catch(()=>""),h=null;try{h=g?JSON.parse(g):null}catch{}if(!b.ok){let a=h?.error?.message||h?.msg||h?.message||h?.error||g;return{ok:!1,latencyMs:e,error:`HTTP ${b.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:b.status}}return Array.isArray(h?.data)&&h.data.length>0?{ok:!0,latencyMs:e,error:null,status:b.status}:{ok:!1,latencyMs:e,status:b.status,error:"Provider returned no image data for this model"}}if("stt"===b){let b,e,g,h,i=new FormData,j=(g=new DataView(e=new ArrayBuffer(44+(b=8e3))),(h=(a,b)=>{for(let c=0;c<b.length;c+=1)g.setUint8(a+c,b.charCodeAt(c))})(0,"RIFF"),g.setUint32(4,36+b,!0),h(8,"WAVE"),h(12,"fmt "),g.setUint32(16,16,!0),g.setUint16(20,1,!0),g.setUint16(22,1,!0),g.setUint32(24,16e3,!0),g.setUint32(28,32e3,!0),g.setUint16(32,2,!0),g.setUint16(34,16,!0),h(36,"data"),g.setUint32(40,b,!0),new Blob([e],{type:"audio/wav"}));i.append("file",j,"test.wav"),i.append("model",a);let k=await fetch(`${c}/api/v1/audio/transcriptions`,{method:"POST",headers:Object.fromEntries(Object.entries(d).filter(([a])=>"content-type"!==a.toLowerCase())),body:i,signal:AbortSignal.timeout(15e3)}),l=Date.now()-f,m=await k.text().catch(()=>""),n=null;try{n=m?JSON.parse(m):null}catch{}if(!k.ok){let a=n?.error?.message||n?.msg||n?.message||n?.error||m;return{ok:!1,latencyMs:l,error:`HTTP ${k.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:k.status}}return("string"==typeof n?.text?n.text:"").trim()?{ok:!0,latencyMs:l,error:null,status:k.status}:{ok:!1,latencyMs:l,status:k.status,error:"Provider returned no transcription text for this model"}}let i=await fetch(`${c}/api/v1/chat/completions`,{method:"POST",headers:{...d,"x-bypass-modellock":"1"},body:JSON.stringify({model:a,max_tokens:1024,stream:!1,messages:[{role:"user",content:"hi"}]}),signal:AbortSignal.timeout(3e4)}),j=Date.now()-f,k=await i.text().catch(()=>""),l=null;try{l=k?JSON.parse(k):null}catch{}if(!i.ok){let a=l?.error?.message||l?.msg||l?.message||l?.error||k;return{ok:!1,latencyMs:j,error:`HTTP ${i.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:i.status}}let m=l?.status,n=l?.msg||l?.message;if(null!=m&&"200"!==String(m)&&"0"!==String(m)&&n)return{ok:!1,latencyMs:j,status:i.status,error:`Provider status ${m}: ${String(n).slice(0,240)}`};if(l?.error){let a=l?.error?.message||l?.error||"Provider returned an error";return{ok:!1,latencyMs:j,status:i.status,error:String(a).slice(0,240)}}let o=Array.isArray(l?.choices)&&l.choices.length>0,p=l?.choices?.[0]||{},q=p.message?.reasoning||p.message?.reasoning_content||p.message?.thinking||p.message?.thinking_content,r=!String(p.message?.content||"").trim();return o&&"length"===p.finish_reason&&r&&q?{ok:!0,latencyMs:j,error:null,status:i.status,note:"reasoning-only response (length-limited)"}:o?{ok:!0,latencyMs:j,error:null,status:i.status}:{ok:!1,latencyMs:j,status:i.status,error:"Provider returned no completion choices for this model"}}},39006:a=>{a.exports={rE:"0.5.168"}},54603:(a,b,c)=>{c.d(b,{Xj:()=>q});var d=c(19713),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c.n(i),k=c(49120);let l=h().join(k.n,"machine-id"),m=h().join(k.n,"auth"),n=h().join(m,"cli-secret"),o=null,p=null;async function q(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt",c=function(){if(o)return o;try{if(o=f().readFileSync(l,"utf8").trim())return o}catch{}try{o=(0,d.machineIdSync)()}catch{o=j().randomUUID()}try{f().mkdirSync(k.n,{recursive:!0}),f().writeFileSync(l,o,{mode:384})}catch{}return o}(),e="9r-cli-auth"===b?function(){if(p)return p;try{if(p=f().readFileSync(n,"utf8").trim())return p}catch{}p=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0}),f().writeFileSync(n,p,{mode:384})}catch{}return p}():"";return j().createHash("sha256").update(c+b+e).digest("hex").substring(0,16)}},81329:(a,b,c)=>{c.d(b,{Xg:()=>d.Xg,eh:()=>e,vq:()=>d.vq});var d=c(44404);new Set(Object.entries(c(75681).AI_PROVIDERS).filter(([,a])=>a.passthroughModels).map(([a])=>a));let e=Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name})))},89718:(a,b,c)=>{c.d(b,{CG:()=>d.CG,Dj:()=>d.Dj,Fh:()=>d.Fh,Iq:()=>d.Iq,K1:()=>d.K1,KJ:()=>d.KJ,L:()=>d.L,L9:()=>d.L9,Lh:()=>d.Lh,Mc:()=>d.Mc,OM:()=>d.OM,PX:()=>d.PX,Pc:()=>d.Pc,Q9:()=>d.Q9,Q_:()=>d.Q_,Qu:()=>d.Qu,S8:()=>d.S8,Uv:()=>d.Uv,VT:()=>d.VT,XW:()=>d.XW,Xx:()=>d.Xx,Yd:()=>d.Yd,ZO:()=>d.ZO,bI:()=>d.bI,c:()=>d.c,ek:()=>d.ek,fK:()=>d.fK,fv:()=>d.fv,getProviderConnections:()=>d.P,ho:()=>d.ho,hr:()=>d.hr,i0:()=>d.i0,iE:()=>d.iE,jd:()=>d.jd,mt:()=>d.mt,o5:()=>d.o5,oG:()=>d.oG,op:()=>d.op,r4:()=>d.r4,uL:()=>d.uL,ui:()=>d.ui,updateProviderConnection:()=>d.rj,uv:()=>d.uv,yF:()=>d.yF,yg:()=>d.yg,zP:()=>d.zP});var d=c(9248)}};
1
+ "use strict";exports.id=8238,exports.ids=[8238],exports.modules={30869:(a,b,c)=>{c.d(b,{AA:()=>h,Rg:()=>i,UY:()=>j,X3:()=>k,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g});var d=c(39006),e=c(75681),f=c(81329);d.rE;let g={npmPackageName:"@sifxprime/krouter",installCmd:"npm i -g @sifxprime/krouter",installCmdLatest:"npm i -g @sifxprime/krouter@latest --prefer-online",shutdownCountdownSec:3,exitDelayMs:500,statusPort:20129,statusPollIntervalMs:1e3,statusLogTailLines:8,installRetries:3,installRetryDelayMs:5e3,lingerAfterDoneMs:3e4,waitForExitMinMs:5e3,waitForExitMaxMs:2e4,waitForExitCheckMs:500,appPort:20128},h={settingsKey:"claudeAutoPing",tickIntervalMs:6e4,pingLeadMs:5e3,pingModel:"claude-haiku-4-5-20251001",pingText:"hi",pingMaxTokens:1,refreshAheadMs:3e5,fiveHourKey:"session (5h)"},i={settingsKey:"codexAutoPing",tickIntervalMs:6e4,pingLeadMs:5e3,pingModel:"gpt-5.6-terra",pingText:"hi",pingMaxTokens:1,refreshAheadMs:3e5,fiveHourKey:"session"},j={maxLines:200,pollIntervalMs:1e3},k={openrouter:"https://openrouter.ai/api/v1/chat/completions",glm:"https://api.z.ai/api/anthropic/v1/messages","glm-cn":"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",kimi:"https://api.kimi.com/coding/v1/messages",minimax:"https://api.minimax.io/anthropic/v1/messages","minimax-cn":"https://api.minimaxi.com/anthropic/v1/messages",alicode:"https://coding.dashscope.aliyuncs.com/v1/chat/completions","alicode-intl":"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions","volcengine-ark":"https://ark.cn-beijing.volces.com/api/coding/v3/chat/completions",byteplus:"https://ark.ap-southeast.bytepluses.com/api/coding/v3/chat/completions",openai:"https://api.openai.com/v1/chat/completions","vercel-ai-gateway":"https://ai-gateway.vercel.sh/v1/chat/completions",anthropic:"https://api.anthropic.com/v1/messages",gemini:"https://generativelanguage.googleapis.com/v1beta/models",ollama:"https://ollama.com/api/chat","ollama-local":"http://localhost:11434/api/chat"}},38238:(a,b,c)=>{c.d(b,{P:()=>h});var d=c(89718),e=c(30869),f=c(54603);async function g(){let a=null;try{let b=await (0,d.PX)();a=b.find(a=>!1!==a.isActive)?.key||null}catch{}let b={"Content-Type":"application/json"};return a&&(b.Authorization=`Bearer ${a}`),b["x-9r-cli-token"]=await (0,f.Xj)("9r-cli-auth"),b}async function h(a,b,c=`http://127.0.0.1:${process.env.PORT||e.h0.appPort}`){let d=await g(),f=Date.now();if("embedding"===b){let b=await fetch(`${c}/api/v1/embeddings`,{method:"POST",headers:d,body:JSON.stringify({model:a,input:"test"}),signal:AbortSignal.timeout(15e3)}),e=Date.now()-f,g=await b.text().catch(()=>""),h=null;try{h=g?JSON.parse(g):null}catch{}if(!b.ok){let a=h?.error?.message||h?.error||g;return{ok:!1,latencyMs:e,error:`HTTP ${b.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:b.status}}return Array.isArray(h?.data)&&h.data.length>0&&Array.isArray(h.data[0]?.embedding)?{ok:!0,latencyMs:e,error:null,status:b.status}:{ok:!1,latencyMs:e,status:b.status,error:"Provider returned no embedding data"}}if("image"===b){let b=await fetch(`${c}/api/v1/images/generations`,{method:"POST",headers:d,body:JSON.stringify({model:a,prompt:"test"}),signal:AbortSignal.timeout(15e3)}),e=Date.now()-f,g=await b.text().catch(()=>""),h=null;try{h=g?JSON.parse(g):null}catch{}if(!b.ok){let a=h?.error?.message||h?.msg||h?.message||h?.error||g;return{ok:!1,latencyMs:e,error:`HTTP ${b.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:b.status}}return Array.isArray(h?.data)&&h.data.length>0?{ok:!0,latencyMs:e,error:null,status:b.status}:{ok:!1,latencyMs:e,status:b.status,error:"Provider returned no image data for this model"}}if("stt"===b){let b,e,g,h,i=new FormData,j=(g=new DataView(e=new ArrayBuffer(44+(b=8e3))),(h=(a,b)=>{for(let c=0;c<b.length;c+=1)g.setUint8(a+c,b.charCodeAt(c))})(0,"RIFF"),g.setUint32(4,36+b,!0),h(8,"WAVE"),h(12,"fmt "),g.setUint32(16,16,!0),g.setUint16(20,1,!0),g.setUint16(22,1,!0),g.setUint32(24,16e3,!0),g.setUint32(28,32e3,!0),g.setUint16(32,2,!0),g.setUint16(34,16,!0),h(36,"data"),g.setUint32(40,b,!0),new Blob([e],{type:"audio/wav"}));i.append("file",j,"test.wav"),i.append("model",a);let k=await fetch(`${c}/api/v1/audio/transcriptions`,{method:"POST",headers:Object.fromEntries(Object.entries(d).filter(([a])=>"content-type"!==a.toLowerCase())),body:i,signal:AbortSignal.timeout(15e3)}),l=Date.now()-f,m=await k.text().catch(()=>""),n=null;try{n=m?JSON.parse(m):null}catch{}if(!k.ok){let a=n?.error?.message||n?.msg||n?.message||n?.error||m;return{ok:!1,latencyMs:l,error:`HTTP ${k.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:k.status}}return("string"==typeof n?.text?n.text:"").trim()?{ok:!0,latencyMs:l,error:null,status:k.status}:{ok:!1,latencyMs:l,status:k.status,error:"Provider returned no transcription text for this model"}}let i=await fetch(`${c}/api/v1/chat/completions`,{method:"POST",headers:{...d,"x-bypass-modellock":"1"},body:JSON.stringify({model:a,max_tokens:1024,stream:!1,messages:[{role:"user",content:"hi"}]}),signal:AbortSignal.timeout(3e4)}),j=Date.now()-f,k=await i.text().catch(()=>""),l=null;try{l=k?JSON.parse(k):null}catch{}if(!i.ok){let a=l?.error?.message||l?.msg||l?.message||l?.error||k;return{ok:!1,latencyMs:j,error:`HTTP ${i.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:i.status}}let m=l?.status,n=l?.msg||l?.message;if(null!=m&&"200"!==String(m)&&"0"!==String(m)&&n)return{ok:!1,latencyMs:j,status:i.status,error:`Provider status ${m}: ${String(n).slice(0,240)}`};if(l?.error){let a=l?.error?.message||l?.error||"Provider returned an error";return{ok:!1,latencyMs:j,status:i.status,error:String(a).slice(0,240)}}let o=Array.isArray(l?.choices)&&l.choices.length>0,p=l?.choices?.[0]||{},q=p.message?.reasoning||p.message?.reasoning_content||p.message?.thinking||p.message?.thinking_content,r=!String(p.message?.content||"").trim();return o&&"length"===p.finish_reason&&r&&q?{ok:!0,latencyMs:j,error:null,status:i.status,note:"reasoning-only response (length-limited)"}:o?{ok:!0,latencyMs:j,error:null,status:i.status}:{ok:!1,latencyMs:j,status:i.status,error:"Provider returned no completion choices for this model"}}},39006:a=>{a.exports={rE:"0.5.169"}},54603:(a,b,c)=>{c.d(b,{Xj:()=>q});var d=c(19713),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c.n(i),k=c(49120);let l=h().join(k.n,"machine-id"),m=h().join(k.n,"auth"),n=h().join(m,"cli-secret"),o=null,p=null;async function q(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt",c=function(){if(o)return o;try{if(o=f().readFileSync(l,"utf8").trim())return o}catch{}try{o=(0,d.machineIdSync)()}catch{o=j().randomUUID()}try{f().mkdirSync(k.n,{recursive:!0}),f().writeFileSync(l,o,{mode:384})}catch{}return o}(),e="9r-cli-auth"===b?function(){if(p)return p;try{if(p=f().readFileSync(n,"utf8").trim())return p}catch{}p=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0}),f().writeFileSync(n,p,{mode:384})}catch{}return p}():"";return j().createHash("sha256").update(c+b+e).digest("hex").substring(0,16)}},81329:(a,b,c)=>{c.d(b,{Xg:()=>d.Xg,eh:()=>e,vq:()=>d.vq});var d=c(44404);new Set(Object.entries(c(75681).AI_PROVIDERS).filter(([,a])=>a.passthroughModels).map(([a])=>a));let e=Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name})))},89718:(a,b,c)=>{c.d(b,{CG:()=>d.CG,Dj:()=>d.Dj,Fh:()=>d.Fh,Iq:()=>d.Iq,K1:()=>d.K1,KJ:()=>d.KJ,L:()=>d.L,L9:()=>d.L9,Lh:()=>d.Lh,Mc:()=>d.Mc,OM:()=>d.OM,PX:()=>d.PX,Pc:()=>d.Pc,Q9:()=>d.Q9,Q_:()=>d.Q_,Qu:()=>d.Qu,S8:()=>d.S8,Uv:()=>d.Uv,VT:()=>d.VT,XW:()=>d.XW,Xx:()=>d.Xx,Yd:()=>d.Yd,ZO:()=>d.ZO,bI:()=>d.bI,c:()=>d.c,ek:()=>d.ek,fK:()=>d.fK,fv:()=>d.fv,getProviderConnections:()=>d.P,ho:()=>d.ho,hr:()=>d.hr,i0:()=>d.i0,iE:()=>d.iE,jd:()=>d.jd,mt:()=>d.mt,o5:()=>d.o5,oG:()=>d.oG,op:()=>d.op,r4:()=>d.r4,uL:()=>d.uL,ui:()=>d.ui,updateProviderConnection:()=>d.rj,uv:()=>d.uv,yF:()=>d.yF,yg:()=>d.yg,zP:()=>d.zP});var d=c(9248)}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=8895,exports.ids=[8895],exports.modules={324:(a,b,c)=>{c.d(b,{J:()=>e,Q:()=>f});let d={claude:["claude","anthropic"],"gemini-cli":["gemini-cli"],antigravity:["antigravity"],codex:["codex"]};function e(a={},b={}){let c=(a["user-agent"]||"").toLowerCase(),d=(a["x-app"]||"").toLowerCase(),f=(a["openai-intent"]||"").toLowerCase(),g=(a["x-initiator"]||a["X-Initiator"]||"").toLowerCase(),h=(a.originator||"").toLowerCase();return"antigravity"===b.userAgent?"antigravity":c.includes("githubcopilotchat")||"conversation-panel"===f||"user"===g?"github-copilot":c.includes("claude-cli")||c.includes("claude-code")||"cli"===d?"claude":c.includes("gemini-cli")?"gemini-cli":c.includes("codex-tui")||c.includes("codex-cli")||c.includes("codex_cli_rs")||c.includes("codex/")||c.includes("codex desktop")||h.startsWith("codex_")?"codex":c.includes("deepseek-tui")?"deepseek-tui":c.includes("kiro")||"kiro"===a["x-amzn-codewhisperer-source"]||a["x-amz-target"]?.toLowerCase?.().startsWith("amazoncodewhispererservice.")?"kiro":null}function f(a,b){if(!a)return!1;let c=d[a];if(!c)return!1;let e=b.startsWith("anthropic-compatible")?"anthropic":b;return c.includes(e)}},5016:(a,b,c)=>{c.d(b,{NE:()=>s});var d=c(14170),e=c(40345),f=c(8361),g=c(39551),h=c(29675),i=c(73483),j=c(43659),k=c(41004),l=c(81626),m=c(73220),n=c(86171),o=c(47370),p=c(55399),q=c(39418);let r=new Set(["cline","clinepass"]);async function s({providerResponse:a,provider:b,model:c,sourceFormat:t,targetFormat:u,body:v,stream:w,translatedBody:x,finalBody:y,requestStartTime:z,connectionId:A,apiKey:B,clientRawRequest:C,onRequestSuccess:D,reqLogger:E,toolNameMap:F,cloakActive:G,trackDone:H,appendLog:I}){let J,K,L;if(H(),(a.headers.get("content-type")||"").includes("text/event-stream")){let b=await a.text(),d=(0,l.Fe)(b,c);if(!d)return I({status:`FAILED ${k.gx.BAD_GATEWAY}`}),(0,j.A1)(k.gx.BAD_GATEWAY,"Invalid SSE response for non-streaming request");if(d.error){let a=String(d.error.code||d.error.type||""),b=(0,l.Fh)(d.error,/rate_limit|quota/i.test(a)?k.gx.RATE_LIMITED:k.gx.BAD_GATEWAY);return I({status:`FAILED ${b}`}),(0,j.A1)(b,d.error.message||"Upstream stream failed")}J=d}else try{J=await a.json()}catch(a){return I({status:`FAILED ${k.gx.BAD_GATEWAY}`}),console.error(`[ChatCore] Failed to parse JSON from ${b}:`,a.message),(0,j.A1)(k.gx.BAD_GATEWAY,`Invalid JSON response from ${b}`)}J=function(a,b){if(!r.has(b))return a;let{success:c,data:d}=a||{};return!0!==c||!d||"object"!=typeof d||Array.isArray(d)?a:d}(J,b),E.logProviderResponse(a.status,a.statusText,a.headers,J),D&&await D(),J=(0,p.kR)(J,F,!0===G);let M=(0,n.MK)(J),N=(0,q.V6)({...(0,q.Ul)(J),maxTokens:y?.max_tokens??x?.max_tokens??v?.max_tokens});N&&E.logConvertedResponse({warning:N.code,detail:N.message}),I({tokens:M,status:"200 OK"}),(0,n.qr)({provider:b,model:c,tokens:M,connectionId:A,apiKey:B,endpoint:C?.endpoint});let O=(0,f.nZ)(u,t)?function(a,b,c){if(b===c)return a;if(b===d.h.OPENAI&&c===d.h.CLAUDE||b===d.h.KIRO&&c===d.h.CLAUDE)return(0,m.F)(a);if(b===d.h.OPENAI&&c===d.h.OPENAI_RESPONSES)return(0,m.r)(a);if(b===d.h.OPENAI)return a;if(b===d.h.GEMINI||b===d.h.ANTIGRAVITY||b===d.h.GEMINI_CLI||b===d.h.VERTEX){let b=a.response||a;if(!b?.candidates?.[0])return a;let f=b.candidates[0],g=f.content,h=b.usageMetadata||a.usageMetadata,i="",j="",k=[];if(g?.parts)for(let a of g.parts)!0===a.thought&&a.text?j+=a.text:void 0!==a.text&&(i+=a.text),a.functionCall&&k.push({id:`call_${a.functionCall.name}_${Date.now()}_${k.length}`,type:"function",function:{name:a.functionCall.name,arguments:JSON.stringify(a.functionCall.args||{})}});let l={role:"assistant"};i&&(l.content=i),j&&(l.reasoning_content=j),k.length>0&&(l.tool_calls=k),l.content||l.tool_calls||(l.content="");let n=(0,e.C)(f.finishReason);"stop"===n&&k.length>0&&(n="tool_calls");let o={id:`chatcmpl-${b.responseId||Date.now()}`,object:"chat.completion",created:Math.floor(new Date(b.createTime||Date.now()).getTime()/1e3),model:b.modelVersion||"gemini",choices:[{index:0,message:l,finish_reason:n}]};return(h&&(o.usage={prompt_tokens:(h.promptTokenCount||0)+(h.thoughtsTokenCount||0),completion_tokens:h.candidatesTokenCount||0,total_tokens:h.totalTokenCount||0},h.thoughtsTokenCount>0&&(o.usage.completion_tokens_details={reasoning_tokens:h.thoughtsTokenCount})),c===d.h.CLAUDE)?(0,m.F)(o):o}if(b===d.h.CLAUDE){if(a.choices||a.content&&!Array.isArray(a.content))return a;let b="",c="",d=[];for(let e of a.content||[])"text"===e.type?b+=(e.text??"").replace(/^\s*```\s*json\s*\n?/i,"").replace(/\n?\s*```\s*$/i,""):"thinking"===e.type?c+=e.thinking||"":"tool_use"===e.type&&d.push({id:e.id,type:"function",function:{name:e.name,arguments:JSON.stringify(e.input||{})}});let e=(0,h.refusalExplanation)(a);e&&(b+=e);let f={role:"assistant"};b&&(f.content=b),c&&(f.reasoning_content=c),d.length>0&&(f.tool_calls=d),f.content||f.tool_calls||(f.content="");let g=(0,h.convertStopReason)(a.stop_reason||"end_turn"),i={id:`chatcmpl-${a.id||Date.now()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:a.model||"claude",choices:[{index:0,message:f,finish_reason:g}]};return a.usage&&(i.usage={prompt_tokens:a.usage.input_tokens||0,completion_tokens:a.usage.output_tokens||0,total_tokens:(a.usage.input_tokens||0)+(a.usage.output_tokens||0)}),i}return b===d.h.OLLAMA?(0,g.ollamaBodyToOpenAI)(a):a}(J,u,t):J,P=t===d.h.CLAUDE&&O?.type==="message",Q=O?.object==="response";if(O?.choices?.[0]){let a=O.choices[0],b=a.message;Array.isArray(b?.tool_calls)&&b.tool_calls.length>0&&"tool_calls"!==a.finish_reason&&(a.finish_reason="tool_calls")}if(!P&&!Q&&(O.object||(O.object="chat.completion"),O.created||(O.created=Math.floor(Date.now()/1e3)),delete O.prompt_filter_results,O?.choices))for(let a of O.choices)delete a.content_filter_results;if(O?.usage&&(O.usage=(0,i.WL)((0,i.O9)(O.usage),t)),!P&&O?.choices)for(let a of O.choices)a?.message?.reasoning_content&&a.message.content&&delete a.message.reasoning_content;E.logConvertedResponse(O);let R=Date.now()-z;return(0,o.ox)((0,n.$R)({provider:b,model:c,connectionId:A,latency:{ttft:R,total:R},tokens:M||{prompt_tokens:0,completion_tokens:0},request:(0,n.Fo)(v,w),providerRequest:y||x||null,providerResponse:J||null,response:Q?(L=(K=Array.isArray(O?.output)?O.output:[]).filter(a=>a?.type==="message").flatMap(a=>a.content||[]).map(a=>a?.text||"").join("")||null,{content:L,thinking:K.filter(a=>a?.type==="reasoning").flatMap(a=>a.summary||[]).map(a=>a?.text||"").join("")||null,finish_reason:O?.status==="incomplete"?"length":O?.status==="completed"?"stop":O?.status||"unknown"}):{content:O?.choices?.[0]?.message?.content||O?.content||null,thinking:O?.choices?.[0]?.message?.reasoning_content||O?.reasoning_content||null,finish_reason:O?.choices?.[0]?.finish_reason||"unknown"},status:N?"empty":"success",warning:N?.code,warningDetail:N?.message},{endpoint:C?.endpoint||null})).catch(a=>{console.error("[RequestDetail] Failed to save:",a.message)}),{success:!0,response:new Response(JSON.stringify(O),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}},14724:(a,b,c)=>{c.d(b,{F:()=>g});let d=[{triggers:["mcp__exa__web_search_exa","mcp__exa__web_fetch_exa"],strip:["WebSearch","WebFetch","mcp__workspace__web_fetch"]},{triggers:["mcp__tavily__tavily_search","mcp__tavily__tavily_extract"],strip:["WebSearch","WebFetch","mcp__workspace__web_fetch"]},{triggers:[/^mcp__browsermcp__/],strip:[/^mcp__Claude_in_Chrome__/]}];function e(a){return a?.name||a?.function?.name||""}function f(a,b){return"string"==typeof b?a===b:b instanceof RegExp&&b.test(a)}function g(a,b={}){let c,h;if(!Array.isArray(a)||0===a.length)return{tools:a,stripped:[]};let i=a.map(e),j="claude"===b.clientTool?function(a){let b=new Set;for(let c of d)if(a.some(a=>c.triggers.some(b=>f(a,b))))for(let d of a)c.strip.some(a=>f(d,a))&&b.add(d);return b}(i):new Set,k=!function(a){if("string"!=typeof a)return!1;let b=a.replace(/\([^()]+\)\s*$/,"").trim().split("/").pop()||"";return/^deepseek-/i.test(b)}(b.model)?new Set:(c=new Set,h=new Set,i.forEach((a,b)=>{a&&(c.has(a)?h.add(b):c.add(a))}),h);return 0===j.size&&0===k.size?{tools:a,stripped:[]}:{tools:a.filter((a,b)=>!k.has(b)&&!j.has(i[b])),stripped:[...k].map(a=>i[a]).concat([...j])}}},14823:(a,b,c)=>{c.d(b,{H:()=>h,_:()=>i});var d=c(14170);function e(a){try{return JSON.stringify(a)?.length||0}catch{return 0}}function f(a){return Math.round(a/4)}function g(a,b={}){return{body:null,summary:{applied:!1,reason:a,...b}}}async function h(a,{enabled:b,format:c,model:i,minChars:j,timeoutMs:k,transform:l}={}){if(!b)return g("disabled");if("function"!=typeof l)return g("not_installed");if(!a)return g("missing_body");if(c!==d.h.CLAUDE)return g("unsupported_format",{detail:c});let m=Date.now(),n=e(a),o=Number(j)>0?Number(j):25e3;if(n<o)return g("below_threshold",{originalChars:n,threshold:o});try{let b=new TextEncoder().encode(JSON.stringify(a)),c=Number(k)>0?Number(k):15e3,d=await Promise.race([l({body:b,model:i,options:{minCompressChars:o}}),new Promise(a=>setTimeout(()=>a(null),c))]);if(!d)return g("timeout",{originalChars:n,durationMs:Date.now()-m});if(!d.applied)return g(d.reason||"passthrough",{detail:d.detail,originalChars:n,durationMs:Date.now()-m});let h=JSON.parse(new TextDecoder().decode(d.body)),j=e(h),p=d.info||{},q=p.compressedChars||0,r=p.imageTokens||(p.imagePixels?Math.round(p.imagePixels/750):4761*(p.imageCount||0)),s={applied:!0,reason:"applied",originalChars:n,compressedBodyChars:j,imagedChars:q,imageCount:p.imageCount||0,imageBytes:p.imageBytes||0,tokensBeforeEst:p.baselineTokens||f(n),tokensAfterEst:f(Math.max(0,n-q))+r,durationMs:Date.now()-m,cacheOwnsControl:d.cache?.ownsCacheControl===!0};return s.tokensSavedEst=Math.max(0,s.tokensBeforeEst-s.tokensAfterEst),s.savedPct=s.tokensBeforeEst>0?+(s.tokensSavedEst/s.tokensBeforeEst*100).toFixed(2):0,{body:h,summary:s}}catch(a){return g("transform_error",{detail:a?.message||String(a),originalChars:n,durationMs:Date.now()-m})}}function i(a){return a&&a.applied?`imaged ${a.imagedChars}ch → ${a.imageCount} image(s) | est ${a.tokensBeforeEst}→${a.tokensAfterEst} tokens (-${a.savedPct}%) | ${a.durationMs}ms`:null}},20623:(a,b,c)=>{c.d(b,{$:()=>q,M:()=>p});var d=c(14170),e=c(8361),f=c(71857),g=c(59657),h=c(35024),i=c(41004),j=c(30320),k=c(9024),l=c(86171),m=c(47370),n=c(39418);let o={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","Access-Control-Allow-Origin":"*"};function p({providerResponse:a,provider:b,model:c,sourceFormat:n,targetFormat:q,userAgent:r,body:s,stream:t,translatedBody:u,finalBody:v,requestStartTime:w,connectionId:x,apiKey:y,clientRawRequest:z,onRequestSuccess:A,reqLogger:B,toolNameMap:C,streamController:D,onStreamComplete:E,pxpipe:F}){A&&A();let G=function({provider:a,sourceFormat:b,targetFormat:c,userAgent:g,reqLogger:h,toolNameMap:i,model:j,connectionId:k,body:l,onStreamComplete:m,apiKey:n,cloakActive:o}){let p=g?.toLowerCase().includes("droid")||g?.toLowerCase().includes("codex-cli");if("codex"===a&&c===d.h.OPENAI_RESPONSES&&!p){let c;return c=b===d.h.OPENAI_RESPONSES?d.h.OPENAI_RESPONSES:b===d.h.CLAUDE?d.h.CLAUDE:b===d.h.ANTIGRAVITY||b===d.h.GEMINI||b===d.h.GEMINI_CLI?d.h.ANTIGRAVITY:d.h.OPENAI,(0,f.i5)(d.h.OPENAI_RESPONSES,c,a,h,i,j,k,l,m,n,o)}return(0,e.nZ)(c,b)?(0,f.i5)(c,b,a,h,i,j,k,l,m,n,o):(0,f.l2)(a,h,j,k,l,m,n)}({provider:b,sourceFormat:n,targetFormat:q,userAgent:r,reqLogger:B,toolNameMap:C,model:c,connectionId:x,body:s,onStreamComplete:E,apiKey:y}),H=n===d.h.OPENAI_RESPONSES&&q===d.h.OPENAI_RESPONSES?j.Hr:a=>(0,k.mb)(i.gx.GATEWAY_TIMEOUT,a,n),I=h.xq[b]?.stallTimeoutMs||i.xM,J=(0,g.Jb)(a,G,D,H,I),K=`${Date.now()}-${Math.random().toString(36).slice(2,11)}`;return(0,m.ox)((0,l.$R)({provider:b,model:c,connectionId:x,latency:{ttft:0,total:Date.now()-w},tokens:{prompt_tokens:0,completion_tokens:0},request:(0,l.Fo)(s,t),providerRequest:v||u||null,providerResponse:"[Streaming - raw response not captured]",response:{content:"[Streaming in progress...]",thinking:null,type:"streaming"},pxpipe:F,status:"success"},{id:K})).catch(a=>{console.error("[RequestDetail] Failed to save streaming request:",a.message)}),{success:!0,response:new Response(J,{headers:o})}}function q({provider:a,model:b,connectionId:c,apiKey:d,requestStartTime:e,body:f,stream:g,finalBody:h,translatedBody:i,clientRawRequest:j,pxpipe:k}){let o=`${Date.now()}-${Math.random().toString(36).slice(2,11)}`;return{onStreamComplete:(p,q,r)=>{let s={ttft:r?r-e:Date.now()-e,total:Date.now()-e},t=p?.content||"[Empty streaming response]",u=p?.thinking||null,v=(0,n.V6)({text:p?.content,finishReason:p?.finish_reason??p?.finishReason??null,toolCalls:p?.tool_calls,usage:q,maxTokens:h?.max_tokens??f?.max_tokens});(0,m.ox)((0,l.$R)({provider:a,model:b,connectionId:c,latency:s,tokens:q||{prompt_tokens:0,completion_tokens:0},request:(0,l.Fo)(f,g),providerRequest:h||i||null,providerResponse:t,response:{content:t,thinking:u,type:"streaming"},pxpipe:k,status:v?"empty":"success",warning:v?.code,warningDetail:v?.message},{id:o})).catch(a=>{console.error("[RequestDetail] Failed to update streaming content:",a.message)}),(0,l.qr)({provider:a,model:b,tokens:q,connectionId:c,apiKey:d,endpoint:j?.endpoint,label:"STREAM USAGE"})},streamDetailId:o}}},20766:(a,b,c)=>{c.d(b,{U:()=>l});var d=c(14170);let e="You are a lazy senior developer. Lazy means efficient, not careless. The best code is the code never written.",f="Before writing code, stop at the first rung that holds: 1) Does this need to exist at all? (YAGNI) 2) Stdlib does it? Use it. 3) Native platform feature covers it? Use it (CSS over JS, DB constraint over app code). 4) Already-installed dependency solves it? Use it; never add a new one for what a few lines can do. 5) Can it be one line? One line. 6) Only then: the minimum code that works.",g='No unrequested abstractions (no interface with one implementation, no factory for one product, no config for a value that never changes). No boilerplate or scaffolding "for later". Deletion over addition. Boring over clever. Fewest files possible; shortest working diff wins. Two stdlib options the same size: take the edge-case-correct one. Mark deliberate simplifications with a `ponytail:` comment naming the ceiling and upgrade path.',h="Code first. Then at most three short lines: what was skipped, when to add it. No essays or design notes. Pattern: `[code] → skipped: [X], add when [Y].`",i="Never simplify away: input validation at trust boundaries, error handling that prevents data loss, security, accessibility, anything explicitly requested. Non-trivial logic leaves ONE runnable check behind (an assert-based self-check or one small test file; no frameworks). Trivial one-liners need no test.",j="ACTIVE EVERY RESPONSE. No drift back to over-building. Still active if unsure.",k={lite:[e,"Lite: build what's asked, but name the lazier alternative in one line. User picks.",f,g,h,i,j].join(" "),full:[e,"Full: the ladder enforced. Stdlib and native first. Shortest diff, shortest explanation.",f,g,h,i,j].join(" "),ultra:[e,"Ultra: YAGNI extremist. Deletion before addition. Ship the one-liner and challenge the rest of the requirement in the same response.",f,g,h,i,j].join(" ")};function l(a,b,c){!function(a,b,c){var e,f,g,h;if(a&&c&&!function(a,b){try{return JSON.stringify(a).includes(JSON.stringify(b).slice(1,-1))}catch{return!1}}(a,c))switch(b){case d.h.CLAUDE:!function(a,b){if("string"==typeof a.system&&a.system.length>0){a.system=`${a.system}
1
+ "use strict";exports.id=8895,exports.ids=[8895],exports.modules={324:(a,b,c)=>{c.d(b,{J:()=>e,Q:()=>f});let d={claude:["claude","anthropic"],"gemini-cli":["gemini-cli"],antigravity:["antigravity"],codex:["codex"]};function e(a={},b={}){let c=(a["user-agent"]||"").toLowerCase(),d=(a["x-app"]||"").toLowerCase(),f=(a["openai-intent"]||"").toLowerCase(),g=(a["x-initiator"]||a["X-Initiator"]||"").toLowerCase(),h=(a.originator||"").toLowerCase();return"antigravity"===b.userAgent?"antigravity":c.includes("githubcopilotchat")||"conversation-panel"===f||"user"===g?"github-copilot":c.includes("claude-cli")||c.includes("claude-code")||"cli"===d?"claude":c.includes("gemini-cli")?"gemini-cli":c.includes("codex-tui")||c.includes("codex-cli")||c.includes("codex_cli_rs")||c.includes("codex/")||c.includes("codex desktop")||h.startsWith("codex_")?"codex":c.includes("deepseek-tui")?"deepseek-tui":c.includes("kiro")||"kiro"===a["x-amzn-codewhisperer-source"]||a["x-amz-target"]?.toLowerCase?.().startsWith("amazoncodewhispererservice.")?"kiro":null}function f(a,b){if(!a)return!1;let c=d[a];if(!c)return!1;let e=b.startsWith("anthropic-compatible")?"anthropic":b;return c.includes(e)}},5016:(a,b,c)=>{c.d(b,{NE:()=>s});var d=c(14170),e=c(40345),f=c(8361),g=c(39551),h=c(29675),i=c(73483),j=c(43659),k=c(41004),l=c(81626),m=c(73220),n=c(86171),o=c(47370),p=c(55399),q=c(39418);let r=new Set(["cline","clinepass"]);async function s({providerResponse:a,provider:b,model:c,sourceFormat:t,targetFormat:u,body:v,stream:w,translatedBody:x,finalBody:y,requestStartTime:z,connectionId:A,apiKey:B,clientRawRequest:C,onRequestSuccess:D,reqLogger:E,toolNameMap:F,cloakActive:G,trackDone:H,appendLog:I}){let J,K,L,M;if(H(),(a.headers.get("content-type")||"").includes("text/event-stream")){let b=await a.text(),d=(0,l.Fe)(b,c);if(!d)return I({status:`FAILED ${k.gx.BAD_GATEWAY}`}),(0,j.A1)(k.gx.BAD_GATEWAY,"Invalid SSE response for non-streaming request");if(d.error){let a=String(d.error.code||d.error.type||""),b=(0,l.Fh)(d.error,/rate_limit|quota/i.test(a)?k.gx.RATE_LIMITED:k.gx.BAD_GATEWAY);return I({status:`FAILED ${b}`}),(0,j.A1)(b,d.error.message||"Upstream stream failed")}J=d}else try{J=await a.json()}catch(a){return I({status:`FAILED ${k.gx.BAD_GATEWAY}`}),console.error(`[ChatCore] Failed to parse JSON from ${b}:`,a.message),(0,j.A1)(k.gx.BAD_GATEWAY,`Invalid JSON response from ${b}`)}J=function(a,b){if(!r.has(b))return a;let{success:c,data:d}=a||{};return!0!==c||!d||"object"!=typeof d||Array.isArray(d)?a:d}(J,b),E.logProviderResponse(a.status,a.statusText,a.headers,J),D&&await D(),J=(0,p.kR)(J,F,!0===G);let N=(0,n.MK)(J),O=(0,q.V6)({...(0,q.Ul)(J),maxTokens:y?.max_tokens??x?.max_tokens??v?.max_tokens});O&&E.logConvertedResponse({warning:O.code,detail:O.message}),I({tokens:N,status:"200 OK"}),(0,n.qr)({provider:b,model:c,tokens:N,connectionId:A,apiKey:B,endpoint:C?.endpoint});let P=(0,f.nZ)(u,t)?(K=function(a,b,c){if(b===c)return a;if(b===d.h.OPENAI&&c===d.h.CLAUDE||b===d.h.KIRO&&c===d.h.CLAUDE)return(0,m.F)(a);if(b===d.h.OPENAI&&c===d.h.OPENAI_RESPONSES)return(0,m.r)(a);if(b===d.h.OPENAI)return a;if(b===d.h.GEMINI||b===d.h.ANTIGRAVITY||b===d.h.GEMINI_CLI||b===d.h.VERTEX){let b=a.response||a;if(!b?.candidates?.[0])return a;let f=b.candidates[0],g=f.content,h=b.usageMetadata||a.usageMetadata,i="",j="",k=[];if(g?.parts)for(let a of g.parts)!0===a.thought&&a.text?j+=a.text:void 0!==a.text&&(i+=a.text),a.functionCall&&k.push({id:`call_${a.functionCall.name}_${Date.now()}_${k.length}`,type:"function",function:{name:a.functionCall.name,arguments:JSON.stringify(a.functionCall.args||{})}});let l={role:"assistant"};i&&(l.content=i),j&&(l.reasoning_content=j),k.length>0&&(l.tool_calls=k),l.content||l.tool_calls||(l.content="");let n=(0,e.C)(f.finishReason);"stop"===n&&k.length>0&&(n="tool_calls");let o={id:`chatcmpl-${b.responseId||Date.now()}`,object:"chat.completion",created:Math.floor(new Date(b.createTime||Date.now()).getTime()/1e3),model:b.modelVersion||"gemini",choices:[{index:0,message:l,finish_reason:n}]};return(h&&(o.usage={prompt_tokens:(h.promptTokenCount||0)+(h.thoughtsTokenCount||0),completion_tokens:h.candidatesTokenCount||0,total_tokens:h.totalTokenCount||0},h.thoughtsTokenCount>0&&(o.usage.completion_tokens_details={reasoning_tokens:h.thoughtsTokenCount})),c===d.h.CLAUDE)?(0,m.F)(o):o}if(b===d.h.CLAUDE){if(a.choices||a.content&&!Array.isArray(a.content))return a;let b="",c="",d=[];for(let e of a.content||[])"text"===e.type?b+=(e.text??"").replace(/^\s*```\s*json\s*\n?/i,"").replace(/\n?\s*```\s*$/i,""):"thinking"===e.type?c+=e.thinking||"":"tool_use"===e.type&&d.push({id:e.id,type:"function",function:{name:e.name,arguments:JSON.stringify(e.input||{})}});let e=(0,h.refusalExplanation)(a);e&&(b+=e);let f={role:"assistant"};b&&(f.content=b),c&&(f.reasoning_content=c),d.length>0&&(f.tool_calls=d),f.content||f.tool_calls||(f.content="");let g=(0,h.convertStopReason)(a.stop_reason||"end_turn"),i={id:`chatcmpl-${a.id||Date.now()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:a.model||"claude",choices:[{index:0,message:f,finish_reason:g}]};return a.usage&&(i.usage={prompt_tokens:a.usage.input_tokens||0,completion_tokens:a.usage.output_tokens||0,total_tokens:(a.usage.input_tokens||0)+(a.usage.output_tokens||0)}),i}return b===d.h.OLLAMA?(0,g.ollamaBodyToOpenAI)(a):a}(J,u,t),t===d.h.OPENAI_RESPONSES&&K?.object==="chat.completion"?(0,m.r)(K):K):J,Q=t===d.h.CLAUDE&&P?.type==="message",R=P?.object==="response";if(P?.choices?.[0]){let a=P.choices[0],b=a.message;Array.isArray(b?.tool_calls)&&b.tool_calls.length>0&&"tool_calls"!==a.finish_reason&&(a.finish_reason="tool_calls")}if(!Q&&!R&&(P.object||(P.object="chat.completion"),P.created||(P.created=Math.floor(Date.now()/1e3)),delete P.prompt_filter_results,P?.choices))for(let a of P.choices)delete a.content_filter_results;if(P?.usage&&(P.usage=(0,i.WL)((0,i.O9)(P.usage),t)),!Q&&P?.choices)for(let a of P.choices)a?.message?.reasoning_content&&a.message.content&&delete a.message.reasoning_content;E.logConvertedResponse(P);let S=Date.now()-z;return(0,o.ox)((0,n.$R)({provider:b,model:c,connectionId:A,latency:{ttft:S,total:S},tokens:N||{prompt_tokens:0,completion_tokens:0},request:(0,n.Fo)(v,w),providerRequest:y||x||null,providerResponse:J||null,response:R?(M=(L=Array.isArray(P?.output)?P.output:[]).filter(a=>a?.type==="message").flatMap(a=>a.content||[]).map(a=>a?.text||"").join("")||null,{content:M,thinking:L.filter(a=>a?.type==="reasoning").flatMap(a=>a.summary||[]).map(a=>a?.text||"").join("")||null,finish_reason:P?.status==="incomplete"?"length":P?.status==="completed"?"stop":P?.status||"unknown"}):{content:P?.choices?.[0]?.message?.content||P?.content||null,thinking:P?.choices?.[0]?.message?.reasoning_content||P?.reasoning_content||null,finish_reason:P?.choices?.[0]?.finish_reason||"unknown"},status:O?"empty":"success",warning:O?.code,warningDetail:O?.message},{endpoint:C?.endpoint||null})).catch(a=>{console.error("[RequestDetail] Failed to save:",a.message)}),{success:!0,response:new Response(JSON.stringify(P),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}},14724:(a,b,c)=>{c.d(b,{F:()=>g});let d=[{triggers:["mcp__exa__web_search_exa","mcp__exa__web_fetch_exa"],strip:["WebSearch","WebFetch","mcp__workspace__web_fetch"]},{triggers:["mcp__tavily__tavily_search","mcp__tavily__tavily_extract"],strip:["WebSearch","WebFetch","mcp__workspace__web_fetch"]},{triggers:[/^mcp__browsermcp__/],strip:[/^mcp__Claude_in_Chrome__/]}];function e(a){return a?.name||a?.function?.name||""}function f(a,b){return"string"==typeof b?a===b:b instanceof RegExp&&b.test(a)}function g(a,b={}){let c,h;if(!Array.isArray(a)||0===a.length)return{tools:a,stripped:[]};let i=a.map(e),j="claude"===b.clientTool?function(a){let b=new Set;for(let c of d)if(a.some(a=>c.triggers.some(b=>f(a,b))))for(let d of a)c.strip.some(a=>f(d,a))&&b.add(d);return b}(i):new Set,k=!function(a){if("string"!=typeof a)return!1;let b=a.replace(/\([^()]+\)\s*$/,"").trim().split("/").pop()||"";return/^deepseek-/i.test(b)}(b.model)?new Set:(c=new Set,h=new Set,i.forEach((a,b)=>{a&&(c.has(a)?h.add(b):c.add(a))}),h);return 0===j.size&&0===k.size?{tools:a,stripped:[]}:{tools:a.filter((a,b)=>!k.has(b)&&!j.has(i[b])),stripped:[...k].map(a=>i[a]).concat([...j])}}},14823:(a,b,c)=>{c.d(b,{H:()=>h,_:()=>i});var d=c(14170);function e(a){try{return JSON.stringify(a)?.length||0}catch{return 0}}function f(a){return Math.round(a/4)}function g(a,b={}){return{body:null,summary:{applied:!1,reason:a,...b}}}async function h(a,{enabled:b,format:c,model:i,minChars:j,timeoutMs:k,transform:l}={}){if(!b)return g("disabled");if("function"!=typeof l)return g("not_installed");if(!a)return g("missing_body");if(c!==d.h.CLAUDE)return g("unsupported_format",{detail:c});let m=Date.now(),n=e(a),o=Number(j)>0?Number(j):25e3;if(n<o)return g("below_threshold",{originalChars:n,threshold:o});try{let b=new TextEncoder().encode(JSON.stringify(a)),c=Number(k)>0?Number(k):15e3,d=await Promise.race([l({body:b,model:i,options:{minCompressChars:o}}),new Promise(a=>setTimeout(()=>a(null),c))]);if(!d)return g("timeout",{originalChars:n,durationMs:Date.now()-m});if(!d.applied)return g(d.reason||"passthrough",{detail:d.detail,originalChars:n,durationMs:Date.now()-m});let h=JSON.parse(new TextDecoder().decode(d.body)),j=e(h),p=d.info||{},q=p.compressedChars||0,r=p.imageTokens||(p.imagePixels?Math.round(p.imagePixels/750):4761*(p.imageCount||0)),s={applied:!0,reason:"applied",originalChars:n,compressedBodyChars:j,imagedChars:q,imageCount:p.imageCount||0,imageBytes:p.imageBytes||0,tokensBeforeEst:p.baselineTokens||f(n),tokensAfterEst:f(Math.max(0,n-q))+r,durationMs:Date.now()-m,cacheOwnsControl:d.cache?.ownsCacheControl===!0};return s.tokensSavedEst=Math.max(0,s.tokensBeforeEst-s.tokensAfterEst),s.savedPct=s.tokensBeforeEst>0?+(s.tokensSavedEst/s.tokensBeforeEst*100).toFixed(2):0,{body:h,summary:s}}catch(a){return g("transform_error",{detail:a?.message||String(a),originalChars:n,durationMs:Date.now()-m})}}function i(a){return a&&a.applied?`imaged ${a.imagedChars}ch → ${a.imageCount} image(s) | est ${a.tokensBeforeEst}→${a.tokensAfterEst} tokens (-${a.savedPct}%) | ${a.durationMs}ms`:null}},20623:(a,b,c)=>{c.d(b,{$:()=>q,M:()=>p});var d=c(14170),e=c(8361),f=c(71857),g=c(59657),h=c(35024),i=c(41004),j=c(30320),k=c(9024),l=c(86171),m=c(47370),n=c(39418);let o={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","Access-Control-Allow-Origin":"*"};function p({providerResponse:a,provider:b,model:c,sourceFormat:n,targetFormat:q,userAgent:r,body:s,stream:t,translatedBody:u,finalBody:v,requestStartTime:w,connectionId:x,apiKey:y,clientRawRequest:z,onRequestSuccess:A,reqLogger:B,toolNameMap:C,streamController:D,onStreamComplete:E,pxpipe:F}){A&&A();let G=function({provider:a,sourceFormat:b,targetFormat:c,userAgent:g,reqLogger:h,toolNameMap:i,model:j,connectionId:k,body:l,onStreamComplete:m,apiKey:n,cloakActive:o}){let p=g?.toLowerCase().includes("droid")||g?.toLowerCase().includes("codex-cli");if("codex"===a&&c===d.h.OPENAI_RESPONSES&&!p){let c;return c=b===d.h.OPENAI_RESPONSES?d.h.OPENAI_RESPONSES:b===d.h.CLAUDE?d.h.CLAUDE:b===d.h.ANTIGRAVITY||b===d.h.GEMINI||b===d.h.GEMINI_CLI?d.h.ANTIGRAVITY:d.h.OPENAI,(0,f.i5)(d.h.OPENAI_RESPONSES,c,a,h,i,j,k,l,m,n,o)}return(0,e.nZ)(c,b)?(0,f.i5)(c,b,a,h,i,j,k,l,m,n,o):(0,f.l2)(a,h,j,k,l,m,n)}({provider:b,sourceFormat:n,targetFormat:q,userAgent:r,reqLogger:B,toolNameMap:C,model:c,connectionId:x,body:s,onStreamComplete:E,apiKey:y}),H=n===d.h.OPENAI_RESPONSES&&q===d.h.OPENAI_RESPONSES?j.Hr:a=>(0,k.mb)(i.gx.GATEWAY_TIMEOUT,a,n),I=h.xq[b]?.stallTimeoutMs||i.xM,J=(0,g.Jb)(a,G,D,H,I),K=`${Date.now()}-${Math.random().toString(36).slice(2,11)}`;return(0,m.ox)((0,l.$R)({provider:b,model:c,connectionId:x,latency:{ttft:0,total:Date.now()-w},tokens:{prompt_tokens:0,completion_tokens:0},request:(0,l.Fo)(s,t),providerRequest:v||u||null,providerResponse:"[Streaming - raw response not captured]",response:{content:"[Streaming in progress...]",thinking:null,type:"streaming"},pxpipe:F,status:"success"},{id:K})).catch(a=>{console.error("[RequestDetail] Failed to save streaming request:",a.message)}),{success:!0,response:new Response(J,{headers:o})}}function q({provider:a,model:b,connectionId:c,apiKey:d,requestStartTime:e,body:f,stream:g,finalBody:h,translatedBody:i,clientRawRequest:j,pxpipe:k}){let o=`${Date.now()}-${Math.random().toString(36).slice(2,11)}`;return{onStreamComplete:(p,q,r)=>{let s={ttft:r?r-e:Date.now()-e,total:Date.now()-e},t=p?.content||"[Empty streaming response]",u=p?.thinking||null,v=(0,n.V6)({text:p?.content,finishReason:p?.finish_reason??p?.finishReason??null,toolCalls:p?.tool_calls,usage:q,maxTokens:h?.max_tokens??f?.max_tokens});(0,m.ox)((0,l.$R)({provider:a,model:b,connectionId:c,latency:s,tokens:q||{prompt_tokens:0,completion_tokens:0},request:(0,l.Fo)(f,g),providerRequest:h||i||null,providerResponse:t,response:{content:t,thinking:u,type:"streaming"},pxpipe:k,status:v?"empty":"success",warning:v?.code,warningDetail:v?.message},{id:o})).catch(a=>{console.error("[RequestDetail] Failed to update streaming content:",a.message)}),(0,l.qr)({provider:a,model:b,tokens:q,connectionId:c,apiKey:d,endpoint:j?.endpoint,label:"STREAM USAGE"})},streamDetailId:o}}},20766:(a,b,c)=>{c.d(b,{U:()=>l});var d=c(14170);let e="You are a lazy senior developer. Lazy means efficient, not careless. The best code is the code never written.",f="Before writing code, stop at the first rung that holds: 1) Does this need to exist at all? (YAGNI) 2) Stdlib does it? Use it. 3) Native platform feature covers it? Use it (CSS over JS, DB constraint over app code). 4) Already-installed dependency solves it? Use it; never add a new one for what a few lines can do. 5) Can it be one line? One line. 6) Only then: the minimum code that works.",g='No unrequested abstractions (no interface with one implementation, no factory for one product, no config for a value that never changes). No boilerplate or scaffolding "for later". Deletion over addition. Boring over clever. Fewest files possible; shortest working diff wins. Two stdlib options the same size: take the edge-case-correct one. Mark deliberate simplifications with a `ponytail:` comment naming the ceiling and upgrade path.',h="Code first. Then at most three short lines: what was skipped, when to add it. No essays or design notes. Pattern: `[code] → skipped: [X], add when [Y].`",i="Never simplify away: input validation at trust boundaries, error handling that prevents data loss, security, accessibility, anything explicitly requested. Non-trivial logic leaves ONE runnable check behind (an assert-based self-check or one small test file; no frameworks). Trivial one-liners need no test.",j="ACTIVE EVERY RESPONSE. No drift back to over-building. Still active if unsure.",k={lite:[e,"Lite: build what's asked, but name the lazier alternative in one line. User picks.",f,g,h,i,j].join(" "),full:[e,"Full: the ladder enforced. Stdlib and native first. Shortest diff, shortest explanation.",f,g,h,i,j].join(" "),ultra:[e,"Ultra: YAGNI extremist. Deletion before addition. Ship the one-liner and challenge the rest of the requirement in the same response.",f,g,h,i,j].join(" ")};function l(a,b,c){!function(a,b,c){var e,f,g,h;if(a&&c&&!function(a,b){try{return JSON.stringify(a).includes(JSON.stringify(b).slice(1,-1))}catch{return!1}}(a,c))switch(b){case d.h.CLAUDE:!function(a,b){if("string"==typeof a.system&&a.system.length>0){a.system=`${a.system}
2
2
 
3
3
  ${b}`;return}if(Array.isArray(a.system)){let c={type:"text",text:b},d=-1;for(let b=a.system.length-1;b>=0;b--)if(a.system[b]?.cache_control){d=b;break}d>=0?a.system.splice(d,0,c):a.system.push(c);return}a.system=b}(a,c);return;case d.h.GEMINI:case d.h.GEMINI_CLI:case d.h.VERTEX:case d.h.ANTIGRAVITY:let i,j,k;e=a,f=c,i=e.request&&"object"==typeof e.request?e.request:e,j=Object.prototype.hasOwnProperty.call(i,"system_instruction")?"system_instruction":"systemInstruction",(k=i[j])&&Array.isArray(k.parts)?k.parts.push({text:f}):i[j]={parts:[{text:f}]};return;case d.h.KIRO:let l;g=a,h=c,(l=g?.conversationState?.currentMessage?.userInputMessage)&&("string"==typeof l.content?l.content=l.content?`${h}
4
4
 
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/em-yyr0O7qRIA9N8Clc4I/_buildManifest.js","static/em-yyr0O7qRIA9N8Clc4I/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-cc312041cf710f25.js","static/chunks/4bd1b696-8cd12253b448cc13.js","static/chunks/3794-39f2d5bb0d40336b.js","static/chunks/main-app-6f8e9cdd84d0eb47.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/KF4DQC15EViS89R-ZTHoZ/_buildManifest.js","static/KF4DQC15EViS89R-ZTHoZ/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-cc312041cf710f25.js","static/chunks/4bd1b696-8cd12253b448cc13.js","static/chunks/3794-39f2d5bb0d40336b.js","static/chunks/main-app-6f8e9cdd84d0eb47.js"],rootMainFilesTree:{},pages:{"/_app":[]}};