n9router 0.4.51 → 0.4.52

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 (321) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +20 -20
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/prerender-manifest.json +3 -3
  5. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/_global-error.html +1 -1
  31. package/app/.next/server/app/_global-error.rsc +1 -1
  32. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  33. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  34. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  35. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  36. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  37. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  38. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/_not-found.html +1 -1
  40. package/app/.next/server/app/_not-found.rsc +3 -3
  41. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  42. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  43. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  44. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  45. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  46. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  47. package/app/.next/server/app/api/cli-tools/all-statuses/route.js +6 -5
  48. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  49. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  50. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
  51. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  52. package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  53. package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  54. package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  55. package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  56. package/app/.next/server/app/api/cli-tools/cursor-byok/route.js +2 -1
  57. package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  58. package/app/.next/server/app/api/cli-tools/devin-settings/route.js +2 -2
  59. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
  60. package/app/.next/server/app/api/cli-tools/grok-build-settings/route.js +2 -2
  61. package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  62. package/app/.next/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  63. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  64. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  65. package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  66. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  67. package/app/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  68. package/app/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
  69. package/app/.next/server/app/api/providers/client/route.js +1 -1
  70. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  71. package/app/.next/server/app/api/translator/send/route.js +1 -1
  72. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  73. package/app/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
  74. package/app/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  75. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  76. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  77. package/app/.next/server/app/api/v1/images/generations/route.js +1 -1
  78. package/app/.next/server/app/api/v1/search/route.js +1 -1
  79. package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
  80. package/app/.next/server/app/api/version/route.js +1 -1
  81. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/callback.html +1 -1
  83. package/app/.next/server/app/callback.rsc +3 -3
  84. package/app/.next/server/app/callback.segments/_full.segment.rsc +3 -3
  85. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  86. package/app/.next/server/app/callback.segments/_index.segment.rsc +3 -3
  87. package/app/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  88. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  89. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  90. package/app/.next/server/app/dashboard/basic-chat.html +1 -1
  91. package/app/.next/server/app/dashboard/basic-chat.rsc +5 -5
  92. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  93. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  94. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  95. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  96. package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  97. package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  98. package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  99. package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  100. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  101. package/app/.next/server/app/dashboard/cli-tools.rsc +5 -5
  102. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  103. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  104. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  105. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  106. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  107. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  108. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  109. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  110. package/app/.next/server/app/dashboard/combos.html +1 -1
  111. package/app/.next/server/app/dashboard/combos.rsc +5 -5
  112. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  113. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  114. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  115. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  116. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  117. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  118. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  119. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  120. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  121. package/app/.next/server/app/dashboard/endpoint.rsc +5 -5
  122. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  123. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  124. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  125. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  126. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  127. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  128. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  129. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  130. package/app/.next/server/app/dashboard/media-providers/web.html +1 -1
  131. package/app/.next/server/app/dashboard/media-providers/web.rsc +5 -5
  132. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  133. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  134. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  135. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  136. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  137. package/app/.next/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  138. package/app/.next/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  139. package/app/.next/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  140. package/app/.next/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  141. package/app/.next/server/app/dashboard/mitm.html +1 -1
  142. package/app/.next/server/app/dashboard/mitm.rsc +5 -5
  143. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  144. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  145. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  146. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  147. package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  148. package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  149. package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  150. package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  151. package/app/.next/server/app/dashboard/profile.html +1 -1
  152. package/app/.next/server/app/dashboard/profile.rsc +5 -5
  153. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  154. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  155. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  156. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  157. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  158. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  159. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  160. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  161. package/app/.next/server/app/dashboard/providers/new.html +1 -1
  162. package/app/.next/server/app/dashboard/providers/new.rsc +5 -5
  163. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  164. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  165. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  166. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  167. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  168. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  169. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  170. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  171. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  172. package/app/.next/server/app/dashboard/providers.html +1 -1
  173. package/app/.next/server/app/dashboard/providers.rsc +5 -5
  174. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  175. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  176. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  177. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  178. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  179. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  180. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  181. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  182. package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
  183. package/app/.next/server/app/dashboard/proxy-pools.rsc +5 -5
  184. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  185. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  186. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  187. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  188. package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  189. package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  190. package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  191. package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  192. package/app/.next/server/app/dashboard/pxpipe.html +1 -1
  193. package/app/.next/server/app/dashboard/pxpipe.rsc +5 -5
  194. package/app/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  195. package/app/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  196. package/app/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  197. package/app/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  198. package/app/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  199. package/app/.next/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  200. package/app/.next/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  201. package/app/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  202. package/app/.next/server/app/dashboard/quota.html +2 -2
  203. package/app/.next/server/app/dashboard/quota.rsc +6 -6
  204. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  205. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  206. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  207. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  208. package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  209. package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  210. package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  211. package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  212. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  213. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  214. package/app/.next/server/app/dashboard/settings/pricing.rsc +3 -3
  215. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  216. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  217. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  218. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  219. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  220. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  221. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  222. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  223. package/app/.next/server/app/dashboard/skills.html +1 -1
  224. package/app/.next/server/app/dashboard/skills.rsc +5 -5
  225. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  226. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  227. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  228. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  229. package/app/.next/server/app/dashboard/skills.segments/_full.segment.rsc +5 -5
  230. package/app/.next/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  231. package/app/.next/server/app/dashboard/skills.segments/_index.segment.rsc +3 -3
  232. package/app/.next/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  233. package/app/.next/server/app/dashboard/token-saver.html +1 -1
  234. package/app/.next/server/app/dashboard/token-saver.rsc +5 -5
  235. package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  236. package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  237. package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  238. package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  239. package/app/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  240. package/app/.next/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  241. package/app/.next/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  242. package/app/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  243. package/app/.next/server/app/dashboard/translator.html +1 -1
  244. package/app/.next/server/app/dashboard/translator.rsc +5 -5
  245. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  246. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  247. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  248. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  249. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  250. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  251. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  252. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  253. package/app/.next/server/app/dashboard/usage.html +1 -1
  254. package/app/.next/server/app/dashboard/usage.rsc +5 -5
  255. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  256. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  257. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  258. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  259. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  260. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  261. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  262. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  263. package/app/.next/server/app/dashboard.html +1 -1
  264. package/app/.next/server/app/dashboard.rsc +5 -5
  265. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  266. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  267. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  268. package/app/.next/server/app/dashboard.segments/_full.segment.rsc +5 -5
  269. package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  270. package/app/.next/server/app/dashboard.segments/_index.segment.rsc +3 -3
  271. package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  272. package/app/.next/server/app/index.html +1 -1
  273. package/app/.next/server/app/index.rsc +3 -3
  274. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  275. package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
  276. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  277. package/app/.next/server/app/index.segments/_index.segment.rsc +3 -3
  278. package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  279. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  280. package/app/.next/server/app/landing.html +1 -1
  281. package/app/.next/server/app/landing.rsc +3 -3
  282. package/app/.next/server/app/landing.segments/_full.segment.rsc +3 -3
  283. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  284. package/app/.next/server/app/landing.segments/_index.segment.rsc +3 -3
  285. package/app/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  286. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  287. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  288. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  289. package/app/.next/server/app/login.html +1 -1
  290. package/app/.next/server/app/login.rsc +4 -4
  291. package/app/.next/server/app/login.segments/_full.segment.rsc +4 -4
  292. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  293. package/app/.next/server/app/login.segments/_index.segment.rsc +3 -3
  294. package/app/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  295. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  296. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  297. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  298. package/app/.next/server/app-paths-manifest.json +20 -20
  299. package/app/.next/server/chunks/112.js +1 -1
  300. package/app/.next/server/chunks/1975.js +7 -6
  301. package/app/.next/server/chunks/3913.js +1 -1
  302. package/app/.next/server/chunks/4037.js +1 -1
  303. package/app/.next/server/chunks/4705.js +1 -1
  304. package/app/.next/server/chunks/6671.js +1 -1
  305. package/app/.next/server/chunks/7137.js +1 -1
  306. package/app/.next/server/chunks/8145.js +1 -1
  307. package/app/.next/server/chunks/8301.js +1 -1
  308. package/app/.next/server/chunks/869.js +1 -1
  309. package/app/.next/server/middleware-build-manifest.js +1 -1
  310. package/app/.next/server/middleware.js +3 -3
  311. package/app/.next/server/pages/404.html +1 -1
  312. package/app/.next/server/pages/500.html +1 -1
  313. package/app/.next/server/server-reference-manifest.js +1 -1
  314. package/app/.next/server/server-reference-manifest.json +1 -1
  315. package/app/.next/static/chunks/{1321-fbaaa3c33f83ea85.js → 1321-f70183ecee5bedb5.js} +1 -1
  316. package/app/.next/static/chunks/{4028-33d2ebbce3016284.js → 4028-dd9deab6b8261f02.js} +1 -1
  317. package/app/package.json +1 -1
  318. package/app/src/shared/constants/cliTools.js +12 -0
  319. package/package.json +1 -1
  320. /package/app/.next/static/{zErBl-HUgBtz1iz9LeFt5 → q96GO6bFy0GB26MaN-AFa}/_buildManifest.js +0 -0
  321. /package/app/.next/static/{zErBl-HUgBtz1iz9LeFt5 → q96GO6bFy0GB26MaN-AFa}/_ssgManifest.js +0 -0
@@ -1,4 +1,5 @@
1
- exports.id=1975,exports.ids=[1975],exports.modules={24776:(a,b,c)=>{"use strict";c.d(b,{DN:()=>f,Tb:()=>e});let d="__n9routerCursorByokSudoPassword";function e(){return globalThis[d]||null}function f(a){globalThis[d]=a||null}},42154:(a,b,c)=>{"use strict";c.d(b,{R:()=>j});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(93696);async function i(a){try{return await e().access(a),!0}catch{return!1}}async function j({byokHomeDir:a=h.tZ}={}){let b=g().join(a,"workbench-hook-state.json"),c=g().join(a,"workbench-backups"),d=0;try{d=(await e().readdir(c,{withFileTypes:!0})).filter(a=>a.isFile()).length}catch{d=0}let f=await i(b),k=null,l=null;if(f)try{k=JSON.parse(await e().readFile(b,"utf8"))}catch(a){l=a?.message||"Invalid JSON"}let m=[k?.workbench,k?.extHost].filter(a=>"string"==typeof a?.backupPath&&a.backupPath),n=[];for(let a of m)n.push({targetPath:a.targetPath,backupPath:a.backupPath,exists:await i(a.backupPath)});let o=n.filter(a=>a.exists).length,p=d>0,q=!l&&o>0,r=null;return q||(r=!f&&p?"Backup files exist, but the saved restore mapping state is missing":l?`Saved restore mapping state is invalid: ${l}`:f&&0===m.length?"Saved restore mapping state does not contain backup entries":f&&0===o?"Saved restore mapping state points to missing mapped backup files":"No saved Cursor workbench backup is available"),{statePath:b,backupDir:c,stateExists:f,backupFileCount:d,backupFilesAvailable:p,mappedBackupCount:o,mappedBackups:n,restoreAvailable:q,restoreStateMissing:p&&!f,restoreReason:r}}},78335:()=>{},81411:(a,b,c)=>{"use strict";c.d(b,{$O:()=>W,Ag:()=>Y,dQ:()=>X});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(44708),i=c.n(h),j=c(31421),k=c(77598),l=c.n(k),m=c(73024),n=c.n(m),o=c(93696),p=c(24776),q=c(86246);let r=String.raw`
1
+ exports.id=1975,exports.ids=[1975],exports.modules={24776:(a,b,c)=>{"use strict";c.d(b,{DN:()=>f,Tb:()=>e});let d="__n9routerCursorByokSudoPassword";function e(){return globalThis[d]||null}function f(a){globalThis[d]=a||null}},42154:(a,b,c)=>{"use strict";c.d(b,{R:()=>j});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(93696);async function i(a){try{return await e().access(a),!0}catch{return!1}}async function j({byokHomeDir:a=h.tZ}={}){let b=g().join(a,"workbench-hook-state.json"),c=g().join(a,"workbench-backups"),d=0;try{d=(await e().readdir(c,{withFileTypes:!0})).filter(a=>a.isFile()).length}catch{d=0}let f=await i(b),k=null,l=null;if(f)try{k=JSON.parse(await e().readFile(b,"utf8"))}catch(a){l=a?.message||"Invalid JSON"}let m=[k?.workbench,k?.extHost].filter(a=>"string"==typeof a?.backupPath&&a.backupPath),n=[];for(let a of m)n.push({targetPath:a.targetPath,backupPath:a.backupPath,exists:await i(a.backupPath)});let o=n.filter(a=>a.exists).length,p=d>0,q=!l&&o>0,r=null;return q||(r=!f&&p?"Backup files exist, but the saved restore mapping state is missing":l?`Saved restore mapping state is invalid: ${l}`:f&&0===m.length?"Saved restore mapping state does not contain backup entries":f&&0===o?"Saved restore mapping state points to missing mapped backup files":"No saved Cursor workbench backup is available"),{statePath:b,backupDir:c,stateExists:f,backupFileCount:d,backupFilesAvailable:p,mappedBackupCount:o,mappedBackups:n,restoreAvailable:q,restoreStateMissing:p&&!f,restoreReason:r}}},72980:(a,b,c)=>{"use strict";c.d(b,{U5:()=>n,kx:()=>m,x6:()=>o});var d=c(51455),e=c.n(d),f=c(44708),g=c.n(f),h=c(76760),i=c.n(h),j=c(93696);let k=/^[0-9a-f]{40}$/i;function l(a){return new Promise((b,c)=>{g().get(a,{headers:{Accept:"application/vnd.github+json","User-Agent":"n9router-cursor-byok-installer"}},a=>{let d="";a.setEncoding("utf8"),a.on("data",a=>{d+=a}),a.on("error",c),a.on("end",()=>{if(200!==a.statusCode)return void c(Error(`Latest Cursor BYOK lookup failed with HTTP ${a.statusCode}`));try{b(JSON.parse(d))}catch{c(Error("Latest Cursor BYOK lookup returned invalid JSON"))}})}).on("error",c)})}async function m({request:a=l}={}){let b=await a(j.CU),c=String(b?.sha||"").toLowerCase();if(!k.test(c))throw Error("Latest Cursor BYOK lookup did not return a valid commit SHA");return{branch:j.cb,ref:c,tarballUrl:(0,j.Js)(c)}}async function n({metadataPath:a=j.z1}={}){try{let b=JSON.parse(await e().readFile(a,"utf8"));return k.test(b?.ref||"")?b:null}catch{return null}}async function o(a,{metadataPath:b=j.z1}={}){await e().mkdir(i().dirname(b),{recursive:!0});let c=`${b}.tmp`;await e().writeFile(c,`${JSON.stringify({...a,resolvedAt:new Date().toISOString()},null,2)}
2
+ `),await e().rename(c,b)}},78335:()=>{},81411:(a,b,c)=>{"use strict";c.d(b,{$O:()=>X,Ag:()=>Z,dQ:()=>Y});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(44708),i=c.n(h),j=c(31421),k=c(77598),l=c.n(k),m=c(73024),n=c.n(m),o=c(93696),p=c(72980),q=c(24776),r=c(86246);let s=String.raw`
2
3
  "use strict";
3
4
 
4
5
  const fs = require("node:fs");
@@ -109,15 +110,15 @@ try {
109
110
  log(error?.stack || error?.message || error);
110
111
  fail(error?.message || error, error?.code || "WINDOWS_ACTION_FAILED");
111
112
  }
112
- `;function s(a){return`'${String(a).replace(/'/g,"''")}'`}function t(a){return Buffer.from(a,"utf16le").toString("base64")}function u(a,b,c={}){return new Promise((d,e)=>{let f=(0,j.spawn)(a,b,{cwd:c.cwd,env:c.env||process.env,windowsHide:!0,shell:!1}),g="",h="";f.stdout?.on("data",a=>{g+=a.toString()}),f.stderr?.on("data",a=>{h+=a.toString()}),f.on("error",e),f.on("close",a=>d({code:a,stdout:g,stderr:h}))})}async function v(a,b,c){let d=0,f=!1,g=!1,h=async()=>{if(!g){g=!0;try{let g=await e().readFile(a,"utf8");if(g.length>d){let a=g.slice(d);d=g.length,f||(f=!0,c?.()),b?.(a)}}catch(a){if(a?.code!=="ENOENT")throw a}finally{g=!1}}},i=setInterval(()=>{h().catch(()=>{})},250);return async()=>{clearInterval(i),await h()}}async function w(a,b,c,d){let e=t([`& ${s(process.execPath)}`,s(a),s(b),s(c),s(d)].join(" ")+"; exit $LASTEXITCODE");return u("powershell.exe",["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",t(`
113
+ `;function t(a){return`'${String(a).replace(/'/g,"''")}'`}function u(a){return Buffer.from(a,"utf16le").toString("base64")}function v(a,b,c={}){return new Promise((d,e)=>{let f=(0,j.spawn)(a,b,{cwd:c.cwd,env:c.env||process.env,windowsHide:!0,shell:!1}),g="",h="";f.stdout?.on("data",a=>{g+=a.toString()}),f.stderr?.on("data",a=>{h+=a.toString()}),f.on("error",e),f.on("close",a=>d({code:a,stdout:g,stderr:h}))})}async function w(a,b,c){let d=0,f=!1,g=!1,h=async()=>{if(!g){g=!0;try{let g=await e().readFile(a,"utf8");if(g.length>d){let a=g.slice(d);d=g.length,f||(f=!0,c?.()),b?.(a)}}catch(a){if(a?.code!=="ENOENT")throw a}finally{g=!1}}},i=setInterval(()=>{h().catch(()=>{})},250);return async()=>{clearInterval(i),await h()}}async function x(a,b,c,d){let e=u([`& ${t(process.execPath)}`,t(a),t(b),t(c),t(d)].join(" ")+"; exit $LASTEXITCODE");return v("powershell.exe",["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",u(`
113
114
  $process = Start-Process -FilePath 'powershell.exe' -ArgumentList @(
114
115
  '-NoProfile','-NonInteractive','-ExecutionPolicy','Bypass',
115
116
  '-EncodedCommand','${e}'
116
117
  ) -Verb RunAs -Wait -PassThru -WindowStyle Hidden
117
118
  exit $process.ExitCode
118
- `)])}async function x({jobId:a,action:b,sourceDir:c,installation:d,extensionsDir:f,npmInvocation:h,needsElevation:i,onLog:j,onUacRequested:k,onElevatedStart:l}){let m,n;if("win32"!==process.platform)throw Error("Windows Cursor runner can only run on Windows");let p=g().join(o.mw,"jobs",a),q=g().join(p,"windows-worker.cjs"),s=g().join(p,"request.json"),t=g().join(p,"result.json"),y=g().join(p,"windows.log"),z=JSON.parse(await e().readFile(g().join(c,"package.json"),"utf8")),A=g().join(f,`${z.publisher}.${z.name}-${z.version}`);await e().mkdir(p,{recursive:!0}),await Promise.all([e().writeFile(q,r,{mode:448}),e().writeFile(s,JSON.stringify({action:b,sourceDir:c,installation:d,extensionsDir:f,expectedExtensionRoot:A,npmInvocation:h}),{mode:384}),e().writeFile(y,"",{mode:384})]);let B=await v(y,j,i?l:null);try{i?(k?.(),m=await w(q,s,t,y)):m=await u(process.execPath,[q,s,t,y],{cwd:p})}finally{await B(),await Promise.allSettled([e().rm(q,{force:!0}),e().rm(s,{force:!0})])}try{n=JSON.parse(await e().readFile(t,"utf8"))}catch{let a=m?.stderr?.trim()||m?.stdout?.trim(),b=/canceled|cancelled|1223/i.test(a||""),c=Error(b?"User canceled Windows UAC confirmation":a||"Elevated Cursor BYOK action failed");throw c.code=b?"UAC_CANCELED":"WINDOWS_ACTION_FAILED",c}if(!n.ok){let a=Error(n.error||"Windows Cursor BYOK action failed");throw a.code=n.code||"WINDOWS_ACTION_FAILED",a}return n.result}var y=c(42154);async function z(a){let b=l().createHash("sha256");for await(let c of n().createReadStream(a))b.update(c);return b.digest("hex")}async function A(a,b){let c;if("darwin"!==process.platform)return;let d=function(a){let b=g().join(a,"Contents","_CodeSignature","CodeResources"),c=(0,j.spawnSync)("plutil",["-convert","xml1","-o","-",b],{encoding:"utf8",maxBuffer:0x4000000});if(0!==c.status||!c.stdout)throw Error(c.stderr?.trim()||"Unable to read Cursor code-signature manifest");return c.stdout}(a.cursorRoot),e=[];for(let c of b.mappedBackups){if(!c.exists)continue;let b=function(a,b){let c=g().join(a,"Contents"),d=g().relative(c,b);if(!d||d.startsWith("..")||g().isAbsolute(d))throw Error(`Restore target is outside Cursor.app: ${b}`);return d.split(g().sep).join("/")}(a.cursorRoot,c.targetPath);e.push({targetPath:c.targetPath,backupPath:c.backupPath,expectedHash:function(a,b){let c=`<key>${String(b).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}</key>`,d=0;for(;d<a.length;){let b=a.indexOf(c,d);if(b<0)break;let e=a.slice(b+c.length,b+c.length+1200).match(/<key>hash2<\/key>\s*<data>\s*([^<]+?)\s*<\/data>/);if(e)return Buffer.from(e[1].replace(/\s+/g,""),"base64").toString("hex");d=b+c.length}return null}(d,b),backupHash:await z(c.backupPath)})}let f={ok:0===(c=e.filter(a=>!a.expectedHash||!a.backupHash||a.expectedHash.toLowerCase()!==a.backupHash.toLowerCase())).length,mismatches:c};if(!f.ok){let b=f.mismatches.map(a=>g().basename(a.targetPath)).join(", "),c=Error(`Saved backup does not match the current signed Cursor bundle (${b}). Reinstall Cursor ${await C(a.cursorRoot)} instead of restoring this stale backup.`);throw c.code="STALE_CURSOR_BACKUP",c}}function B(a){if("darwin"===process.platform&&0!==(0,j.spawnSync)("codesign",["--verify","--deep","--strict","--verbose=2",a.cursorRoot],{encoding:"utf8"}).status){let a=Error("Cursor.app code signature is invalid. Reinstall Cursor before installing or restoring Cursor BYOK.");throw a.code="CURSOR_SIGNATURE_INVALID",a}}async function C(a){try{let b=g().join(a,"Contents","Info.plist"),c=(0,j.spawnSync)("defaults",["read",b,"CFBundleShortVersionString"],{encoding:"utf8"});return 0===c.status&&c.stdout.trim()?`version ${c.stdout.trim()}`:"from the official installer"}catch{return"from the official installer"}}let D="__n9routerCursorByokJobs";function E(){return globalThis[D]||(globalThis[D]={jobs:new Map,listeners:new Map}),globalThis[D]}function F(a){return{id:a.id,action:a.action,status:a.status,error:a.error,logs:a.logs.slice(-300),steps:a.steps,createdAt:a.createdAt,updatedAt:a.updatedAt}}function G(a,b,c,d){a.steps=a.steps.map(a=>a.id===b?{...a,status:c,detail:d||a.detail}:a),H(a)}function H(a){a.updatedAt=new Date().toISOString()}function I(a,b,c="info"){for(let d of String(b||"").replace(/sudoPassword["']?\s*[:=]\s*["'][^"']+["']/gi,'sudoPassword:"[redacted]"').replace(/\bsk-[A-Za-z0-9_-]{12,}\b/g,"sk-[redacted]").split(/\r?\n/).filter(Boolean))a.logs.push({ts:new Date().toISOString(),stream:c,message:d});a.logs.length>500&&(a.logs=a.logs.slice(-500)),H(a),J(a)}function J(a){let b=E().listeners.get(a.id);if(!b)return;let c=`data: ${JSON.stringify(F(a))}
119
+ `)])}async function y({jobId:a,action:b,sourceDir:c,installation:d,extensionsDir:f,npmInvocation:h,needsElevation:i,onLog:j,onUacRequested:k,onElevatedStart:l}){let m,n;if("win32"!==process.platform)throw Error("Windows Cursor runner can only run on Windows");let p=g().join(o.mw,"jobs",a),q=g().join(p,"windows-worker.cjs"),r=g().join(p,"request.json"),t=g().join(p,"result.json"),u=g().join(p,"windows.log"),z=JSON.parse(await e().readFile(g().join(c,"package.json"),"utf8")),A=g().join(f,`${z.publisher}.${z.name}-${z.version}`);await e().mkdir(p,{recursive:!0}),await Promise.all([e().writeFile(q,s,{mode:448}),e().writeFile(r,JSON.stringify({action:b,sourceDir:c,installation:d,extensionsDir:f,expectedExtensionRoot:A,npmInvocation:h}),{mode:384}),e().writeFile(u,"",{mode:384})]);let B=await w(u,j,i?l:null);try{i?(k?.(),m=await x(q,r,t,u)):m=await v(process.execPath,[q,r,t,u],{cwd:p})}finally{await B(),await Promise.allSettled([e().rm(q,{force:!0}),e().rm(r,{force:!0})])}try{n=JSON.parse(await e().readFile(t,"utf8"))}catch{let a=m?.stderr?.trim()||m?.stdout?.trim(),b=/canceled|cancelled|1223/i.test(a||""),c=Error(b?"User canceled Windows UAC confirmation":a||"Elevated Cursor BYOK action failed");throw c.code=b?"UAC_CANCELED":"WINDOWS_ACTION_FAILED",c}if(!n.ok){let a=Error(n.error||"Windows Cursor BYOK action failed");throw a.code=n.code||"WINDOWS_ACTION_FAILED",a}return n.result}var z=c(42154);async function A(a){let b=l().createHash("sha256");for await(let c of n().createReadStream(a))b.update(c);return b.digest("hex")}async function B(a,b){let c;if("darwin"!==process.platform)return;let d=function(a){let b=g().join(a,"Contents","_CodeSignature","CodeResources"),c=(0,j.spawnSync)("plutil",["-convert","xml1","-o","-",b],{encoding:"utf8",maxBuffer:0x4000000});if(0!==c.status||!c.stdout)throw Error(c.stderr?.trim()||"Unable to read Cursor code-signature manifest");return c.stdout}(a.cursorRoot),e=[];for(let c of b.mappedBackups){if(!c.exists)continue;let b=function(a,b){let c=g().join(a,"Contents"),d=g().relative(c,b);if(!d||d.startsWith("..")||g().isAbsolute(d))throw Error(`Restore target is outside Cursor.app: ${b}`);return d.split(g().sep).join("/")}(a.cursorRoot,c.targetPath);e.push({targetPath:c.targetPath,backupPath:c.backupPath,expectedHash:function(a,b){let c=`<key>${String(b).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}</key>`,d=0;for(;d<a.length;){let b=a.indexOf(c,d);if(b<0)break;let e=a.slice(b+c.length,b+c.length+1200).match(/<key>hash2<\/key>\s*<data>\s*([^<]+?)\s*<\/data>/);if(e)return Buffer.from(e[1].replace(/\s+/g,""),"base64").toString("hex");d=b+c.length}return null}(d,b),backupHash:await A(c.backupPath)})}let f={ok:0===(c=e.filter(a=>!a.expectedHash||!a.backupHash||a.expectedHash.toLowerCase()!==a.backupHash.toLowerCase())).length,mismatches:c};if(!f.ok){let b=f.mismatches.map(a=>g().basename(a.targetPath)).join(", "),c=Error(`Saved backup does not match the current signed Cursor bundle (${b}). Reinstall Cursor ${await D(a.cursorRoot)} instead of restoring this stale backup.`);throw c.code="STALE_CURSOR_BACKUP",c}}function C(a){if("darwin"===process.platform&&0!==(0,j.spawnSync)("codesign",["--verify","--deep","--strict","--verbose=2",a.cursorRoot],{encoding:"utf8"}).status){let a=Error("Cursor.app code signature is invalid. Reinstall Cursor before installing or restoring Cursor BYOK.");throw a.code="CURSOR_SIGNATURE_INVALID",a}}async function D(a){try{let b=g().join(a,"Contents","Info.plist"),c=(0,j.spawnSync)("defaults",["read",b,"CFBundleShortVersionString"],{encoding:"utf8"});return 0===c.status&&c.stdout.trim()?`version ${c.stdout.trim()}`:"from the official installer"}catch{return"from the official installer"}}let E="__n9routerCursorByokJobs";function F(){return globalThis[E]||(globalThis[E]={jobs:new Map,listeners:new Map}),globalThis[E]}function G(a){return{id:a.id,action:a.action,status:a.status,error:a.error,logs:a.logs.slice(-300),steps:a.steps,createdAt:a.createdAt,updatedAt:a.updatedAt}}function H(a,b,c,d){a.steps=a.steps.map(a=>a.id===b?{...a,status:c,detail:d||a.detail}:a),I(a)}function I(a){a.updatedAt=new Date().toISOString()}function J(a,b,c="info"){for(let d of String(b||"").replace(/sudoPassword["']?\s*[:=]\s*["'][^"']+["']/gi,'sudoPassword:"[redacted]"').replace(/\bsk-[A-Za-z0-9_-]{12,}\b/g,"sk-[redacted]").split(/\r?\n/).filter(Boolean))a.logs.push({ts:new Date().toISOString(),stream:c,message:d});a.logs.length>500&&(a.logs=a.logs.slice(-500)),I(a),K(a)}function K(a){let b=F().listeners.get(a.id);if(!b)return;let c=`data: ${JSON.stringify(G(a))}
119
120
 
120
- `;for(let a of b)a(c)}function K(a,b,c=null){a.status=b,a.error=c,H(a),J(a)}async function L(a){try{return await e().access(a),!0}catch{return!1}}async function M(a,b){await e().mkdir(o.mw,{recursive:!0}),await new Promise((c,d)=>{let f=(0,m.createWriteStream)(b);i().get(a,a=>{if(a.statusCode>=300&&a.statusCode<400&&a.headers.location){f.close(),e().unlink(b).catch(()=>{}),M(a.headers.location,b).then(c,d);return}if(200!==a.statusCode){f.close(),e().unlink(b).catch(()=>{}),d(Error(`Download failed with HTTP ${a.statusCode}`));return}a.pipe(f),f.on("finish",()=>f.close(c))}).on("error",a=>{f.close(),e().unlink(b).catch(()=>{}),d(a)})})}function N(a,b,c,d={}){return new Promise((e,f)=>{let g=d.displayArgs||c;I(a,`$ ${[b,...g].join(" ")}`);let h=(0,j.spawn)(b,c,{cwd:d.cwd||o.LB,env:{...process.env,...d.env||{}},shell:!1}),i="";d.stdin&&(h.stdin.write(d.stdin),h.stdin.end()),h.stdout.on("data",b=>I(a,b.toString(),"stdout")),h.stderr.on("data",b=>{i+=b.toString(),I(a,b.toString(),"stderr")}),h.on("error",f),h.on("close",a=>{0===a?e():f(Error(`${b} ${c.join(" ")} failed with exit code ${a}${i?`: ${i.trim()}`:""}`))})})}function O(a,b,c,d={}){return N(a,b.command,[...b.prefixArgs,...c],d)}async function P(a){if(G(a,"download","running"),await L(g().join(o.LB,"package.json"))){I(a,`Using cached cursor-byok source at ${o.LB}`),G(a,"download","success",o.$F.slice(0,12));return}if(I(a,`Downloading ${o._U}`),await e().rm(o.LB,{recursive:!0,force:!0}),await M(o._U,o.Q9),await e().mkdir(o.LB,{recursive:!0}),await O(a,(0,q.sZ)(),["-xzf",o.Q9,"-C",o.LB,"--strip-components=1"],{cwd:o.mw}),!await L(g().join(o.LB,"package.json")))throw Error("Downloaded cursor-byok archive did not contain package.json");G(a,"download","success",o.$F.slice(0,12))}async function Q(){let a=g().join(o.LB,"package.json"),b=JSON.parse(await e().readFile(a,"utf8"));if("starduster"!==b.publisher||"cursor-byok"!==b.name)throw Error("Downloaded package identity does not match starduster.cursor-byok");for(let a of[g().join("scripts","install-cursor.js"),g().join("scripts","install-workbench-hook.js")])if(!await L(g().join(o.LB,a)))throw Error(`Downloaded cursor-byok source is missing ${a}`)}async function R(a){G(a,"dependencies","running");let b=(0,q.QM)();try{await O(a,b,["ci","--ignore-scripts"],{cwd:o.LB})}catch(c){I(a,`npm ci failed, retrying with npm install: ${c.message}`,"stderr"),await O(a,b,["install","--ignore-scripts"],{cwd:o.LB})}G(a,"dependencies","success")}async function S(a,b){G(a,"preflight","running"),"win32"===process.platform?await N(a,process.execPath,[g().join(o.LB,"scripts","install-workbench-hook.js"),"--dry-run"],{cwd:o.LB,env:{CURSOR_WORKBENCH:b.workbench,CURSOR_EXT_HOST:b.extensionHost}}):await O(a,(0,q.QM)(),["run","preflight:cursor"],{cwd:o.LB}),G(a,"preflight","success")}async function T(a,b,c,d){G(a,b,"running"),a.status="running",J(a),await N(a,"sh",["-c",`sudo -S -p "" env HOME="$HOME" PATH="$PATH" npm run ${c}`],{cwd:o.LB,stdin:`${d}
121
- `}),d&&(0,p.DN)(d),G(a,b,"success")}async function U(a,b){if((0,q.Od)()){let a=Error("Cursor is running. Fully quit Cursor, including background processes, and retry.");throw a.code="CURSOR_RUNNING",a}let c=!b.targetWritable&&!(0,q.bp)(),d="install"===a.action?"install":"restore";G(a,"permission",c?"waiting":"success",c?"Waiting for Windows UAC confirmation":"Target is writable without elevation"),G(a,d,"running"),J(a),await x({jobId:a.id,action:a.action,sourceDir:o.LB,installation:b,extensionsDir:o.q$,npmInvocation:(0,q.QM)(),needsElevation:c,onLog:b=>I(a,b,"stdout"),onUacRequested:()=>{a.status="waiting_uac",G(a,"permission","waiting","Approve the Windows UAC dialog"),J(a)},onElevatedStart:()=>{a.status="running_elevated",G(a,"permission","success","Windows administrator approval granted"),J(a)}}),G(a,"permission","success"),G(a,d,"success")}async function V(a){try{a.status="running",J(a);let b=await (0,q.NQ)();if(!b)throw Error("Cursor installation or required workbench files were not found");let c=null;if("restore"===a.action&&!(c=await (0,y.R)()).restoreAvailable){let b=`Restore unavailable: ${c.restoreReason}. Backup files alone cannot be safely restored without their target mapping.`;G(a,"restore","error",b);let d=Error(b);throw d.code="RESTORE_STATE_UNAVAILABLE",d}if("darwin"===process.platform){if("restore"===a.action)await A(b,c);else if("install"===a.action){let a=await (0,y.R)();try{B(b)}catch(c){if(!a.restoreAvailable)throw c;await A(b,a)}}}if(await P(a),await Q(),await R(a),("prepare"===a.action||"install"===a.action)&&await S(a,b),"prepare"===a.action)return void K(a,"success");if("win32"===process.platform)await U(a,b);else{let c,d=await ((c=(0,p.Tb)())?(G(a,"permission","success","Using cached password for this session"),Promise.resolve(c)):(G(a,"permission","waiting","Waiting for sudo password"),a.status="waiting_sudo",J(a),new Promise(b=>{a.sudoResolver=b})));"install"===a.action?await T(a,"install","install:cursor",d):(await T(a,"restore","restore:cursor",d),B(b))}K(a,"success")}catch(c){let b=c?.message||"Cursor BYOK job failed";for(let c of(I(a,b,"stderr"),a.steps))("running"===c.status||"waiting"===c.status)&&G(a,c.id,"error",b);K(a,"error",b)}}function W(a){let b;if(!o.hl.has(a))throw Error("Unsupported Cursor BYOK action");let c=E(),d=Array.from(c.jobs.values()).find(a=>"queued"===a.status||"running"===a.status||"waiting_sudo"===a.status);if(d){let a=Error(`Cursor BYOK job already running: ${d.id}`);throw a.statusCode=409,a}let e={id:(0,k.randomUUID)(),action:a,status:"queued",error:null,logs:[],steps:(b=[{id:"download",label:"Download pinned cursor-byok tarball",status:"pending"},{id:"dependencies",label:"Install package dependencies",status:"pending"}],("prepare"===a||"install"===a)&&b.push({id:"preflight",label:"Run Cursor preflight check",status:"pending"}),"prepare"!==a&&b.push({id:"permission",label:"Confirm system permission",status:"pending"}),"install"===a&&b.push({id:"install",label:"Install Cursor BYOK extension",status:"pending"}),"restore"===a&&b.push({id:"restore",label:"Restore original Cursor files from backup",status:"pending"}),b),createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),sudoResolver:null};return c.jobs.set(e.id,e),queueMicrotask(()=>V(e)),F(e)}function X(a,b){let c=E(),d=c.jobs.get(a);if(!d)return null;c.listeners.has(a)||c.listeners.set(a,new Set);let e=c.listeners.get(a);return e.add(b),b(`data: ${JSON.stringify(F(d))}
121
+ `;for(let a of b)a(c)}function L(a,b,c=null){a.status=b,a.error=c,I(a),K(a)}async function M(a){try{return await e().access(a),!0}catch{return!1}}async function N(a,b){await e().mkdir(o.mw,{recursive:!0}),await new Promise((c,d)=>{let f=(0,m.createWriteStream)(b);i().get(a,a=>{if(a.statusCode>=300&&a.statusCode<400&&a.headers.location){f.close(),e().unlink(b).catch(()=>{}),N(a.headers.location,b).then(c,d);return}if(200!==a.statusCode){f.close(),e().unlink(b).catch(()=>{}),d(Error(`Download failed with HTTP ${a.statusCode}`));return}a.pipe(f),f.on("finish",()=>f.close(c))}).on("error",a=>{f.close(),e().unlink(b).catch(()=>{}),d(a)})})}function O(a,b,c,d={}){return new Promise((e,f)=>{let g=d.displayArgs||c;J(a,`$ ${[b,...g].join(" ")}`);let h=(0,j.spawn)(b,c,{cwd:d.cwd||o.LB,env:{...process.env,...d.env||{}},shell:!1}),i="";d.stdin&&(h.stdin.write(d.stdin),h.stdin.end()),h.stdout.on("data",b=>J(a,b.toString(),"stdout")),h.stderr.on("data",b=>{i+=b.toString(),J(a,b.toString(),"stderr")}),h.on("error",f),h.on("close",a=>{0===a?e():f(Error(`${b} ${c.join(" ")} failed with exit code ${a}${i?`: ${i.trim()}`:""}`))})})}function P(a,b,c,d={}){return O(a,b.command,[...b.prefixArgs,...c],d)}async function Q(a){H(a,"download","running");let b=await (0,p.kx)(),c=await (0,p.U5)(),d=g().join(o.LB,"package.json");if(c?.ref===b.ref&&await M(d))return J(a,`Using current Cursor BYOK source ${b.ref.slice(0,12)} from ${o.LB}`),H(a,"download","success",b.ref.slice(0,12)),b;J(a,`Downloading latest Cursor BYOK source ${b.ref.slice(0,12)} from ${b.tarballUrl}`);let f=g().join(o.mw,`${b.ref}.tar.gz`),h=`${o.LB}.staging-${b.ref}`;await e().rm(h,{recursive:!0,force:!0}),await N(b.tarballUrl,f);try{await e().mkdir(h,{recursive:!0}),await P(a,(0,r.sZ)(),["-xzf",f,"-C",h,"--strip-components=1"],{cwd:o.mw}),await R(h),await e().rm(o.LB,{recursive:!0,force:!0}),await e().rename(h,o.LB),await (0,p.x6)(b)}finally{await e().rm(h,{recursive:!0,force:!0})}return H(a,"download","success",b.ref.slice(0,12)),b}async function R(a=o.LB){let b=g().join(a,"package.json"),c=JSON.parse(await e().readFile(b,"utf8"));if("starduster"!==c.publisher||"cursor-byok"!==c.name)throw Error("Downloaded package identity does not match starduster.cursor-byok");for(let b of[g().join("scripts","install-cursor.js"),g().join("scripts","install-workbench-hook.js")])if(!await M(g().join(a,b)))throw Error(`Downloaded cursor-byok source is missing ${b}`)}async function S(a){H(a,"dependencies","running");let b=(0,r.QM)();try{await P(a,b,["ci","--ignore-scripts"],{cwd:o.LB})}catch(c){J(a,`npm ci failed, retrying with npm install: ${c.message}`,"stderr"),await P(a,b,["install","--ignore-scripts"],{cwd:o.LB})}H(a,"dependencies","success")}async function T(a,b){H(a,"preflight","running"),"win32"===process.platform?await O(a,process.execPath,[g().join(o.LB,"scripts","install-workbench-hook.js"),"--dry-run"],{cwd:o.LB,env:{CURSOR_WORKBENCH:b.workbench,CURSOR_EXT_HOST:b.extensionHost}}):await P(a,(0,r.QM)(),["run","preflight:cursor"],{cwd:o.LB}),H(a,"preflight","success")}async function U(a,b,c,d){H(a,b,"running"),a.status="running",K(a),await (!d?P(a,(0,r.QM)(),["run",c]):O(a,"sh",["-c",`sudo -S -p "" env HOME="$HOME" PATH="$PATH" npm run ${c}`],{cwd:o.LB,stdin:`${d}
122
+ `})),d&&(0,q.DN)(d),H(a,b,"success")}async function V(a,b){if((0,r.Od)()){let a=Error("Cursor is running. Fully quit Cursor, including background processes, and retry.");throw a.code="CURSOR_RUNNING",a}let c=!b.targetWritable&&!(0,r.bp)(),d="install"===a.action?"install":"restore";H(a,"permission",c?"waiting":"success",c?"Waiting for Windows UAC confirmation":"Target is writable without elevation"),H(a,d,"running"),K(a),await y({jobId:a.id,action:a.action,sourceDir:o.LB,installation:b,extensionsDir:o.q$,npmInvocation:(0,r.QM)(),needsElevation:c,onLog:b=>J(a,b,"stdout"),onUacRequested:()=>{a.status="waiting_uac",H(a,"permission","waiting","Approve the Windows UAC dialog"),K(a)},onElevatedStart:()=>{a.status="running_elevated",H(a,"permission","success","Windows administrator approval granted"),K(a)}}),H(a,"permission","success"),H(a,d,"success")}async function W(a){try{a.status="running",K(a);let b=await (0,r.NQ)();if(!b)throw Error("Cursor installation or required workbench files were not found");let c=null;if("restore"===a.action&&!(c=await (0,z.R)()).restoreAvailable){let b=`Restore unavailable: ${c.restoreReason}. Backup files alone cannot be safely restored without their target mapping.`;H(a,"restore","error",b);let d=Error(b);throw d.code="RESTORE_STATE_UNAVAILABLE",d}if("darwin"===process.platform){if("restore"===a.action)await B(b,c);else if("install"===a.action){let a=await (0,z.R)();try{C(b)}catch(c){if(!a.restoreAvailable)throw c;await B(b,a)}}}if(await Q(a),await R(),await S(a),("prepare"===a.action||"install"===a.action)&&await T(a,b),"prepare"===a.action)return void L(a,"success");if("win32"===process.platform)await V(a,b);else{let c,d=b.targetWritable?null:await ((c=(0,q.Tb)())?(H(a,"permission","success","Using cached password for this session"),Promise.resolve(c)):(H(a,"permission","waiting","Waiting for sudo password"),a.status="waiting_sudo",K(a),new Promise(b=>{a.sudoResolver=b})));d||H(a,"permission","success","Cursor files are writable without sudo"),"install"===a.action?await U(a,"install","install:cursor",d):(await U(a,"restore","restore:cursor",d),C(b))}L(a,"success")}catch(c){let b=c?.message||"Cursor BYOK job failed";for(let c of(J(a,b,"stderr"),a.steps))("running"===c.status||"waiting"===c.status)&&H(a,c.id,"error",b);L(a,"error",b)}}function X(a){let b;if(!o.hl.has(a))throw Error("Unsupported Cursor BYOK action");let c=F(),d=Array.from(c.jobs.values()).find(a=>"queued"===a.status||"running"===a.status||"waiting_sudo"===a.status);if(d){let a=Error(`Cursor BYOK job already running: ${d.id}`);throw a.statusCode=409,a}let e={id:(0,k.randomUUID)(),action:a,status:"queued",error:null,logs:[],steps:(b=[{id:"download",label:"Check for and download the latest Cursor BYOK source",status:"pending"},{id:"dependencies",label:"Install package dependencies",status:"pending"}],("prepare"===a||"install"===a)&&b.push({id:"preflight",label:"Run Cursor preflight check",status:"pending"}),"prepare"!==a&&b.push({id:"permission",label:"Confirm system permission",status:"pending"}),"install"===a&&b.push({id:"install",label:"Install Cursor BYOK extension",status:"pending"}),"restore"===a&&b.push({id:"restore",label:"Restore original Cursor files from backup",status:"pending"}),b),createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),sudoResolver:null};return c.jobs.set(e.id,e),queueMicrotask(()=>W(e)),G(e)}function Y(a,b){let c=F(),d=c.jobs.get(a);if(!d)return null;c.listeners.has(a)||c.listeners.set(a,new Set);let e=c.listeners.get(a);return e.add(b),b(`data: ${JSON.stringify(G(d))}
122
123
 
123
- `),()=>{e.delete(b),0===e.size&&c.listeners.delete(a)}}function Y(a,b){let c=E().jobs.get(a);if(!c){let a=Error("Cursor BYOK job not found");throw a.statusCode=404,a}if("waiting_sudo"!==c.status||!c.sudoResolver){let a=Error("Cursor BYOK job is not waiting for sudo password");throw a.statusCode=409,a}if(!b||!String(b).trim()){let a=Error("Sudo password is required");throw a.statusCode=400,a}let d=c.sudoResolver;return c.sudoResolver=null,G(c,"permission","success","Password received"),c.status="running",J(c),d(String(b)),F(c)}},86246:(a,b,c)=>{"use strict";c.d(b,{NQ:()=>o,Od:()=>q,QM:()=>r,bp:()=>p,sZ:()=>s});var d=c(51455),e=c.n(d),f=c(73024),g=c(48161),h=c.n(g),i=c(76760),j=c.n(i),k=c(31421);function l(a){let b=new Set;return a.filter(a=>{if(!a)return!1;let c=j().resolve(a).toLowerCase();return!b.has(c)&&(b.add(c),!0)})}async function m(a){try{return await e().access(a),!0}catch{return!1}}async function n(a){try{return await e().access(a,f.constants.W_OK),!0}catch{return!1}}async function o(a={}){let b=a.platform||process.platform,c=a.env||process.env;for(let d of a.candidates||function({platform:a=process.platform,env:b=process.env,homeDir:c=h().homedir()}={}){let d=b.N9ROUTER_CURSOR_ROOT;if("darwin"===a)return l([d,"/Applications/Cursor.app",j().join(c,"Applications","Cursor.app")]);if("win32"===a){let a=[d,b.LOCALAPPDATA&&j().join(b.LOCALAPPDATA,"Programs","cursor"),b.LOCALAPPDATA&&j().join(b.LOCALAPPDATA,"Programs","Cursor")];if(b.LOCALAPPDATA&&b.LOCALAPPDATA.length>1&&":"===b.LOCALAPPDATA[1]){let c=j().resolve(".").slice(0,2),d=b.LOCALAPPDATA.slice(0,2);if(c.toLowerCase()!==d.toLowerCase()){let d=c+b.LOCALAPPDATA.slice(2);a.push(j().join(d,"Programs","cursor")),a.push(j().join(d,"Programs","Cursor"))}}if(a.push(b.ProgramW6432&&j().join(b.ProgramW6432,"Cursor"),b.ProgramFiles&&j().join(b.ProgramFiles,"Cursor"),b["ProgramFiles(x86)"]&&j().join(b["ProgramFiles(x86)"],"Cursor")),b.PATH)for(let c of b.PATH.split(j().delimiter)){if(!c)continue;let b=c.replace(/\\/g,"/").toLowerCase();b.endsWith("/resources/app/bin")&&b.includes("cursor")&&a.push(j().resolve(c,"../../.."))}return l(a)}return[]}({...a,platform:b,env:c})){let a=function(a,{platform:b=process.platform,env:c=process.env}={}){if(!a)return null;let d=j().resolve(a),e="darwin"===b,f=e?j().join(d,"Contents","Resources","app"):j().join(d,"resources","app"),g=e?j().join(d,"Contents","MacOS","Cursor"):j().join(d,"Cursor.exe"),i=c.LOCALAPPDATA?j().resolve(c.LOCALAPPDATA):null,k="win32"===b&&i?d.toLowerCase().startsWith(`${i.toLowerCase()}${j().sep}`):e&&d.startsWith(j().join(h().homedir(),"Applications"));return{cursorRoot:d,executable:g,resourcesRoot:f,workbench:j().join(f,"out","vs","workbench","workbench.desktop.main.js"),extensionHost:j().join(f,"out","vs","workbench","api","node","extensionHostProcess.js"),appExtensions:j().join(f,"extensions"),installScope:k?"user":"system"}}(d,{platform:b,env:c});if(await m(a.executable)&&await m(a.workbench)){let b=await m(a.extensionHost),c=await n(await m(a.appExtensions)?a.appExtensions:a.resourcesRoot);return{...a,extensionHostExists:b,targetWritable:await n(a.workbench)&&(!b||await n(a.extensionHost))&&c}}}return null}function p({platform:a=process.platform,spawn:b=k.spawnSync}={}){return"win32"===a&&0===b("net.exe",["session"],{windowsHide:!0,stdio:"ignore"}).status}function q({platform:a=process.platform,spawn:b=k.spawnSync}={}){if("win32"!==a)return!1;let c=b("tasklist.exe",["/FI","IMAGENAME eq Cursor.exe","/FO","CSV","/NH"],{windowsHide:!0,encoding:"utf8"});return 0===c.status&&/"Cursor\.exe"/i.test(c.stdout||"")}function r({platform:a=process.platform,env:b=process.env}={}){if(b.npm_execpath&&/\.(?:c?js|mjs)$/i.test(b.npm_execpath))return{command:process.execPath,prefixArgs:[b.npm_execpath]};if("win32"===a){let a=b.npm_execpath||"npm.cmd";return{command:b.ComSpec||"cmd.exe",prefixArgs:["/d","/s","/c",a]}}return{command:"npm",prefixArgs:[]}}function s({platform:a=process.platform}={}){return{command:"win32"===a?"tar.exe":"tar",prefixArgs:[]}}},93696:(a,b,c)=>{"use strict";c.d(b,{$F:()=>j,Bt:()=>h,LB:()=>n,Q9:()=>o,_U:()=>k,hl:()=>r,mw:()=>m,q$:()=>q,tZ:()=>p,yo:()=>i});var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);let h="nightwalker89",i="cursor-byok",j="e0dfcf6b7b4c798e5a535d6cd6e131ced5f24d6f",k=`https://codeload.github.com/${h}/${i}/tar.gz/${j}`,l=process.env.DATA_DIR||g().join(e().homedir(),".n9router"),m=g().join(l,"tools","cursor-byok"),n=g().join(m,j),o=g().join(m,`${j}.tar.gz`),p=g().join(e().homedir(),".cursor-byok"),q=g().join(e().homedir(),".cursor","extensions"),r=new Set(["prepare","install","restore"])},96487:()=>{}};
124
+ `),()=>{e.delete(b),0===e.size&&c.listeners.delete(a)}}function Z(a,b){let c=F().jobs.get(a);if(!c){let a=Error("Cursor BYOK job not found");throw a.statusCode=404,a}if("waiting_sudo"!==c.status||!c.sudoResolver){let a=Error("Cursor BYOK job is not waiting for sudo password");throw a.statusCode=409,a}if(!b||!String(b).trim()){let a=Error("Sudo password is required");throw a.statusCode=400,a}let d=c.sudoResolver;return c.sudoResolver=null,H(c,"permission","success","Password received"),c.status="running",K(c),d(String(b)),G(c)}},86246:(a,b,c)=>{"use strict";c.d(b,{NQ:()=>p,Od:()=>r,QM:()=>s,bp:()=>q,sZ:()=>t});var d=c(51455),e=c.n(d),f=c(73024),g=c(48161),h=c.n(g),i=c(76760),j=c.n(i),k=c(31421);function l(a){let b=new Set;return a.filter(a=>{if(!a)return!1;let c=j().resolve(a).toLowerCase();return!b.has(c)&&(b.add(c),!0)})}async function m(a){try{return await e().access(a),!0}catch{return!1}}async function n(a){try{return await e().access(a,f.constants.W_OK),!0}catch{return!1}}async function o(a){return n(j().dirname(a))}async function p(a={}){let b=a.platform||process.platform,c=a.env||process.env;for(let d of a.candidates||function({platform:a=process.platform,env:b=process.env,homeDir:c=h().homedir()}={}){let d=b.N9ROUTER_CURSOR_ROOT;if("darwin"===a)return l([d,"/Applications/Cursor.app",j().join(c,"Applications","Cursor.app")]);if("win32"===a){let a=[d,b.LOCALAPPDATA&&j().join(b.LOCALAPPDATA,"Programs","cursor"),b.LOCALAPPDATA&&j().join(b.LOCALAPPDATA,"Programs","Cursor")];if(b.LOCALAPPDATA&&b.LOCALAPPDATA.length>1&&":"===b.LOCALAPPDATA[1]){let c=j().resolve(".").slice(0,2),d=b.LOCALAPPDATA.slice(0,2);if(c.toLowerCase()!==d.toLowerCase()){let d=c+b.LOCALAPPDATA.slice(2);a.push(j().join(d,"Programs","cursor")),a.push(j().join(d,"Programs","Cursor"))}}if(a.push(b.ProgramW6432&&j().join(b.ProgramW6432,"Cursor"),b.ProgramFiles&&j().join(b.ProgramFiles,"Cursor"),b["ProgramFiles(x86)"]&&j().join(b["ProgramFiles(x86)"],"Cursor")),b.PATH)for(let c of b.PATH.split(j().delimiter)){if(!c)continue;let b=c.replace(/\\/g,"/").toLowerCase();b.endsWith("/resources/app/bin")&&b.includes("cursor")&&a.push(j().resolve(c,"../../.."))}return l(a)}return[]}({...a,platform:b,env:c})){let a=function(a,{platform:b=process.platform,env:c=process.env}={}){if(!a)return null;let d=j().resolve(a),e="darwin"===b,f=e?j().join(d,"Contents","Resources","app"):j().join(d,"resources","app"),g=e?j().join(d,"Contents","MacOS","Cursor"):j().join(d,"Cursor.exe"),i=c.LOCALAPPDATA?j().resolve(c.LOCALAPPDATA):null,k="win32"===b&&i?d.toLowerCase().startsWith(`${i.toLowerCase()}${j().sep}`):e&&d.startsWith(j().join(h().homedir(),"Applications"));return{cursorRoot:d,executable:g,resourcesRoot:f,workbench:j().join(f,"out","vs","workbench","workbench.desktop.main.js"),extensionHost:j().join(f,"out","vs","workbench","api","node","extensionHostProcess.js"),appExtensions:j().join(f,"extensions"),installScope:k?"user":"system"}}(d,{platform:b,env:c});if(await m(a.executable)&&await m(a.workbench)){let b=await m(a.extensionHost),c=await n(await m(a.appExtensions)?a.appExtensions:a.resourcesRoot);return{...a,extensionHostExists:b,targetWritable:await o(a.workbench)&&(!b||await o(a.extensionHost))&&c}}}return null}function q({platform:a=process.platform,spawn:b=k.spawnSync}={}){return"win32"===a&&0===b("net.exe",["session"],{windowsHide:!0,stdio:"ignore"}).status}function r({platform:a=process.platform,spawn:b=k.spawnSync}={}){if("win32"!==a)return!1;let c=b("tasklist.exe",["/FI","IMAGENAME eq Cursor.exe","/FO","CSV","/NH"],{windowsHide:!0,encoding:"utf8"});return 0===c.status&&/"Cursor\.exe"/i.test(c.stdout||"")}function s({platform:a=process.platform,env:b=process.env}={}){if(b.npm_execpath&&/\.(?:c?js|mjs)$/i.test(b.npm_execpath))return{command:process.execPath,prefixArgs:[b.npm_execpath]};if("win32"===a){let a=b.npm_execpath||"npm.cmd";return{command:b.ComSpec||"cmd.exe",prefixArgs:["/d","/s","/c",a]}}return{command:"npm",prefixArgs:[]}}function t({platform:a=process.platform}={}){return{command:"win32"===a?"tar.exe":"tar",prefixArgs:[]}}},93696:(a,b,c)=>{"use strict";c.d(b,{Bt:()=>h,CU:()=>k,Js:()=>l,LB:()=>o,cb:()=>j,hl:()=>s,mw:()=>n,q$:()=>r,tZ:()=>q,yo:()=>i,z1:()=>p});var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);let h="nightwalker89",i="cursor-byok",j="main",k=`https://api.github.com/repos/${h}/${i}/commits/${j}`;function l(a){return`https://codeload.github.com/${h}/${i}/tar.gz/${a}`}let m=process.env.DATA_DIR||g().join(e().homedir(),".n9router"),n=g().join(m,"tools","cursor-byok"),o=g().join(n,"current"),p=g().join(n,"source.json"),q=g().join(e().homedir(),".cursor-byok"),r=g().join(e().homedir(),".cursor","extensions"),s=new Set(["prepare","install","restore"])},96487:()=>{}};