@amir83nasr/10router 0.1.11 → 0.1.14

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 (396) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +5 -6
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +22 -50
  5. package/.next/routes-manifest.json +0 -6
  6. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
  7. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  9. package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  11. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  13. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  15. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js +2 -2
  17. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js +1 -1
  19. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(dashboard)/dashboard/page.js +1 -1
  21. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  23. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  25. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  27. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  28. package/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  29. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  30. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  31. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  32. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  33. package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  35. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  37. package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  39. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/_global-error/page.js +2 -2
  41. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/_global-error.html +1 -1
  43. package/.next/server/app/_global-error.rsc +1 -1
  44. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  45. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  46. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  47. package/.next/server/app/_not-found/page.js +1 -1
  48. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app/_not-found.html +1 -1
  50. package/.next/server/app/_not-found.rsc +6 -6
  51. package/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
  52. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
  53. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  54. package/.next/server/app/api/auth/login/route.js +1 -1
  55. package/.next/server/app/api/auth/logout/route.js +1 -1
  56. package/.next/server/app/api/auth/oidc/callback/route.js +1 -1
  57. package/.next/server/app/api/auth/oidc/start/route.js +1 -1
  58. package/.next/server/app/api/auth/oidc/test/route.js +1 -1
  59. package/.next/server/app/api/auth/reset-password/route.js +1 -1
  60. package/.next/server/app/api/auth/saml/acs/route.js +1 -1
  61. package/.next/server/app/api/auth/saml/metadata/route.js +2 -2
  62. package/.next/server/app/api/auth/saml/start/route.js +2 -2
  63. package/.next/server/app/api/auth/saml/test/route.js +1 -1
  64. package/.next/server/app/api/auth/status/route.js +1 -1
  65. package/.next/server/app/api/changelog/route.js +1 -1
  66. package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -1
  67. package/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  68. package/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  69. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  70. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  71. package/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  72. package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
  73. package/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  74. package/.next/server/app/api/combos/[id]/route.js +1 -1
  75. package/.next/server/app/api/combos/route.js +1 -1
  76. package/.next/server/app/api/headroom/extras/route.js +1 -1
  77. package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  78. package/.next/server/app/api/headroom/restart/route.js +1 -1
  79. package/.next/server/app/api/headroom/start/route.js +1 -1
  80. package/.next/server/app/api/headroom/status/route.js +1 -1
  81. package/.next/server/app/api/headroom/stop/route.js +1 -1
  82. package/.next/server/app/api/health/route.js +1 -1
  83. package/.next/server/app/api/init/route.js +1 -1
  84. package/.next/server/app/api/keys/[id]/route.js +1 -1
  85. package/.next/server/app/api/keys/route.js +1 -1
  86. package/.next/server/app/api/locale/route.js +1 -1
  87. package/.next/server/app/api/mcp/[plugin]/message/route.js +1 -1
  88. package/.next/server/app/api/mcp/[plugin]/sse/route.js +1 -1
  89. package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  90. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  91. package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  92. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  93. package/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  94. package/.next/server/app/api/models/alias/route.js +1 -1
  95. package/.next/server/app/api/models/availability/route.js +1 -1
  96. package/.next/server/app/api/models/catalog-sync/route.js +1 -1
  97. package/.next/server/app/api/models/custom/route.js +1 -1
  98. package/.next/server/app/api/models/disabled/route.js +1 -1
  99. package/.next/server/app/api/models/route.js +1 -1
  100. package/.next/server/app/api/models/test/route.js +1 -1
  101. package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  102. package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  103. package/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
  104. package/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  105. package/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  106. package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  107. package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -1
  108. package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  109. package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
  110. package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +2 -2
  111. package/.next/server/app/api/pricing/route.js +1 -1
  112. package/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  113. package/.next/server/app/api/provider-nodes/route.js +1 -1
  114. package/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  115. package/.next/server/app/api/providers/[id]/models/route.js +1 -1
  116. package/.next/server/app/api/providers/[id]/route.js +1 -1
  117. package/.next/server/app/api/providers/[id]/test/route.js +1 -1
  118. package/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  119. package/.next/server/app/api/providers/client/route.js +1 -1
  120. package/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  121. package/.next/server/app/api/providers/route.js +1 -1
  122. package/.next/server/app/api/providers/suggested-models/route.js +1 -1
  123. package/.next/server/app/api/providers/test-batch/route.js +1 -1
  124. package/.next/server/app/api/providers/validate/route.js +1 -1
  125. package/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  126. package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  127. package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  128. package/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  129. package/.next/server/app/api/proxy-pools/route.js +1 -1
  130. package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  131. package/.next/server/app/api/pxpipe/health/route.js +2 -2
  132. package/.next/server/app/api/pxpipe/install/route.js +1 -1
  133. package/.next/server/app/api/pxpipe/logs/route.js +1 -1
  134. package/.next/server/app/api/pxpipe/restart/route.js +1 -1
  135. package/.next/server/app/api/pxpipe/start/route.js +1 -1
  136. package/.next/server/app/api/pxpipe/stats/route.js +1 -1
  137. package/.next/server/app/api/pxpipe/status/route.js +1 -1
  138. package/.next/server/app/api/pxpipe/stop/route.js +1 -1
  139. package/.next/server/app/api/settings/database/route.js +1 -1
  140. package/.next/server/app/api/settings/proxy-test/route.js +1 -1
  141. package/.next/server/app/api/settings/require-login/route.js +1 -1
  142. package/.next/server/app/api/settings/route.js +1 -1
  143. package/.next/server/app/api/shutdown/route.js +1 -1
  144. package/.next/server/app/api/tags/route.js +1 -1
  145. package/.next/server/app/api/translator/console-logs/route.js +1 -1
  146. package/.next/server/app/api/translator/console-logs/stream/route.js +1 -1
  147. package/.next/server/app/api/translator/load/route.js +1 -1
  148. package/.next/server/app/api/translator/save/route.js +1 -1
  149. package/.next/server/app/api/translator/send/route.js +1 -1
  150. package/.next/server/app/api/translator/translate/route.js +1 -1
  151. package/.next/server/app/api/tunnel/disable/route.js +1 -1
  152. package/.next/server/app/api/tunnel/enable/route.js +1 -1
  153. package/.next/server/app/api/tunnel/status/route.js +1 -1
  154. package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  155. package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  156. package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  157. package/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
  158. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  159. package/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  160. package/.next/server/app/api/usage/chart/route.js +1 -1
  161. package/.next/server/app/api/usage/health/route.js +1 -1
  162. package/.next/server/app/api/usage/history/route.js +1 -1
  163. package/.next/server/app/api/usage/logs/route.js +1 -1
  164. package/.next/server/app/api/usage/providers/route.js +1 -1
  165. package/.next/server/app/api/usage/request-details/route.js +1 -1
  166. package/.next/server/app/api/usage/request-logs/route.js +1 -1
  167. package/.next/server/app/api/usage/stats/route.js +1 -1
  168. package/.next/server/app/api/usage/stream/route.js +2 -2
  169. package/.next/server/app/api/v1/api/chat/route.js +1 -1
  170. package/.next/server/app/api/v1/audio/speech/route.js +1 -1
  171. package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  172. package/.next/server/app/api/v1/audio/voices/route.js +1 -1
  173. package/.next/server/app/api/v1/chat/completions/route.js +1 -1
  174. package/.next/server/app/api/v1/embeddings/route.js +1 -1
  175. package/.next/server/app/api/v1/images/generations/route.js +2 -2
  176. package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  177. package/.next/server/app/api/v1/messages/route.js +1 -1
  178. package/.next/server/app/api/v1/models/[...model]/route.js +1 -1
  179. package/.next/server/app/api/v1/models/info/route.js +1 -1
  180. package/.next/server/app/api/v1/models/route.js +1 -1
  181. package/.next/server/app/api/v1/responses/compact/route.js +1 -1
  182. package/.next/server/app/api/v1/responses/route.js +1 -1
  183. package/.next/server/app/api/v1/route.js +1 -1
  184. package/.next/server/app/api/v1/search/route.js +1 -1
  185. package/.next/server/app/api/v1/systemone/route.js +1 -1
  186. package/.next/server/app/api/v1/videos/[id]/route.js +1 -1
  187. package/.next/server/app/api/v1/videos/edits/route.js +1 -1
  188. package/.next/server/app/api/v1/videos/extensions/route.js +1 -1
  189. package/.next/server/app/api/v1/videos/generations/route.js +1 -1
  190. package/.next/server/app/api/v1/web/fetch/route.js +1 -1
  191. package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  192. package/.next/server/app/api/v1beta/models/route.js +1 -1
  193. package/.next/server/app/api/version/route.js +1 -1
  194. package/.next/server/app/api/version/shutdown/route.js +1 -1
  195. package/.next/server/app/api/version/update/route.js +1 -1
  196. package/.next/server/app/callback/page.js +1 -1
  197. package/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  198. package/.next/server/app/callback.html +1 -1
  199. package/.next/server/app/callback.rsc +7 -7
  200. package/.next/server/app/callback.segments/_full.segment.rsc +7 -7
  201. package/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  202. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +7 -7
  203. package/.next/server/app/dashboard/cli-tools.html +1 -1
  204. package/.next/server/app/dashboard/cli-tools.rsc +9 -9
  205. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
  206. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +9 -9
  207. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  208. package/.next/server/app/dashboard/combos.html +1 -1
  209. package/.next/server/app/dashboard/combos.rsc +8 -8
  210. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
  211. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  212. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  213. package/.next/server/app/dashboard/endpoint.html +1 -1
  214. package/.next/server/app/dashboard/endpoint.rsc +9 -9
  215. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  216. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +9 -9
  217. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  218. package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
  219. package/.next/server/app/dashboard/media-providers/systemone.rsc +8 -8
  220. package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +8 -8
  221. package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +8 -8
  222. package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +2 -2
  223. package/.next/server/app/dashboard/profile.html +1 -1
  224. package/.next/server/app/dashboard/profile.rsc +8 -8
  225. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
  226. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
  227. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  228. package/.next/server/app/dashboard/providers/new.html +1 -1
  229. package/.next/server/app/dashboard/providers/new.rsc +8 -8
  230. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
  231. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  232. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  233. package/.next/server/app/dashboard/providers.html +1 -1
  234. package/.next/server/app/dashboard/providers.rsc +8 -8
  235. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
  236. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  237. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  238. package/.next/server/app/dashboard/proxy-pools.html +1 -1
  239. package/.next/server/app/dashboard/proxy-pools.rsc +8 -8
  240. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
  241. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  242. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  243. package/.next/server/app/dashboard/pxpipe.html +1 -1
  244. package/.next/server/app/dashboard/pxpipe.rsc +7 -7
  245. package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +7 -7
  246. package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +7 -7
  247. package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  248. package/.next/server/app/dashboard/quota.html +2 -2
  249. package/.next/server/app/dashboard/quota.rsc +9 -9
  250. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
  251. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  252. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  253. package/.next/server/app/dashboard/settings/pricing/page.js +1 -1
  254. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  255. package/.next/server/app/dashboard/settings/pricing.html +1 -1
  256. package/.next/server/app/dashboard/settings/pricing.rsc +7 -7
  257. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +7 -7
  258. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  259. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +7 -7
  260. package/.next/server/app/dashboard/token-saver.html +1 -1
  261. package/.next/server/app/dashboard/token-saver.rsc +8 -8
  262. package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +8 -8
  263. package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +8 -8
  264. package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  265. package/.next/server/app/dashboard/usage.html +2 -2
  266. package/.next/server/app/dashboard/usage.rsc +8 -8
  267. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
  268. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  269. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  270. package/.next/server/app/dashboard.html +1 -1
  271. package/.next/server/app/dashboard.rsc +9 -9
  272. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
  273. package/.next/server/app/dashboard.segments/_full.segment.rsc +9 -9
  274. package/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  275. package/.next/server/app/index.html +1 -1
  276. package/.next/server/app/index.rsc +6 -6
  277. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  278. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  279. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  280. package/.next/server/app/landing/page.js +1 -1
  281. package/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  282. package/.next/server/app/landing.html +1 -1
  283. package/.next/server/app/landing.rsc +7 -7
  284. package/.next/server/app/landing.segments/_full.segment.rsc +7 -7
  285. package/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  286. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +7 -7
  287. package/.next/server/app/login/page.js +1 -1
  288. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  289. package/.next/server/app/login.html +1 -1
  290. package/.next/server/app/login.rsc +6 -6
  291. package/.next/server/app/login.segments/_full.segment.rsc +6 -6
  292. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  293. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
  294. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  295. package/.next/server/app/page.js +1 -1
  296. package/.next/server/app/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app-paths-manifest.json +5 -6
  298. package/.next/server/chunks/1011.js +1 -1
  299. package/.next/server/chunks/1194.js +1 -1
  300. package/.next/server/chunks/1289.js +1 -1
  301. package/.next/server/chunks/1633.js +1 -1
  302. package/.next/server/chunks/2282.js +7 -7
  303. package/.next/server/chunks/2339.js +1 -1
  304. package/.next/server/chunks/2706.js +1 -1
  305. package/.next/server/chunks/2801.js +1 -1
  306. package/.next/server/chunks/3425.js +1 -1
  307. package/.next/server/chunks/4129.js +1 -1
  308. package/.next/server/chunks/6056.js +1 -1
  309. package/.next/server/chunks/7816.js +1 -1
  310. package/.next/server/chunks/9429.js +1 -1
  311. package/.next/server/middleware-build-manifest.js +1 -1
  312. package/.next/server/pages/404.html +1 -1
  313. package/.next/server/pages/500.html +1 -1
  314. package/.next/server/prefetch-hints.json +0 -24
  315. package/.next/server/server-reference-manifest.js +1 -1
  316. package/.next/server/server-reference-manifest.json +1 -1
  317. package/.next/static/chunks/1278-1bef1ffb32ea7f41.js +1 -0
  318. package/.next/static/chunks/1660-25564899e7912146.js +1 -0
  319. package/.next/static/chunks/{1699-13ee6864a8a31a96.js → 1699-49be310981e2759e.js} +2 -2
  320. package/.next/static/chunks/{3577-cd98d40e3099e1b0.js → 3577-1f02993330d7fba7.js} +1 -1
  321. package/.next/static/chunks/5148-7d67073becfaf162.js +1 -0
  322. package/.next/static/chunks/{5862-f98c2f3d480b80d2.js → 5862-6f3a3a6d4c00100d.js} +1 -1
  323. package/.next/static/chunks/6428-5a5f71440049a4e6.js +1 -0
  324. package/.next/static/chunks/7128-78b41798c1177008.js +1 -0
  325. package/.next/static/chunks/7835-06b436358f3395f6.js +1 -0
  326. package/.next/static/chunks/9150-32b4247b1af5e206.js +1 -0
  327. package/.next/static/chunks/{9ce8c186-3c7d7dbc5d428052.js → 9ce8c186-6cd204e9c27ecee1.js} +1 -1
  328. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-e8bceccb95695755.js → page-c913b130003c1672.js} +3 -3
  329. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-adee408d9de02423.js → page-3bab0c661f222ea3.js} +1 -1
  330. package/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-d4c1e29e8d038f09.js → page-76cc2c386af12738.js} +1 -1
  331. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-58a29f3cb409597a.js +1 -0
  332. package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-d5f693c646ae044b.js +1 -0
  333. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/{page-b751d9603cb82e62.js → page-7340dad2b87640cf.js} +1 -1
  334. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/{page-49b3b4867d06cbe0.js → page-32e3e07a8f54ec11.js} +1 -1
  335. package/.next/static/chunks/app/(dashboard)/dashboard/page-a7f59da8c0db5cf1.js +1 -0
  336. package/.next/static/chunks/app/(dashboard)/dashboard/profile/{page-65b2c7989dbe2663.js → page-7123127fd841cfa5.js} +1 -1
  337. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-d5d480e209fdc55a.js → page-fab6f4b4cccc1a6f.js} +1 -1
  338. package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/{page-9b68243ab9555702.js → page-819e98f53bf2f4f7.js} +1 -1
  339. package/.next/static/chunks/app/(dashboard)/dashboard/providers/{page-2396571281d02804.js → page-9054f870a5e0f5c6.js} +1 -1
  340. package/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-cfd6bcb7e55d7d18.js → page-3e4657b108582404.js} +1 -1
  341. package/.next/static/chunks/app/(dashboard)/dashboard/quota/{page-fef6edb7aafd8bd0.js → page-61780f0a2b494680.js} +1 -1
  342. package/.next/static/chunks/app/(dashboard)/dashboard/token-saver/{page-bcc37fc2b4089f2f.js → page-4e366abb76514be7.js} +1 -1
  343. package/.next/static/chunks/app/(dashboard)/dashboard/usage/{page-697f46461825d7fc.js → page-2d71fa2936b16f45.js} +1 -1
  344. package/.next/static/chunks/app/(dashboard)/{layout-5039502fc12707c9.js → layout-91f41c68685ed739.js} +1 -1
  345. package/.next/static/chunks/app/callback/page-8b6862b2e58a129e.js +1 -0
  346. package/.next/static/chunks/app/dashboard/settings/pricing/page-c1dfa7608ff710d1.js +1 -0
  347. package/.next/static/chunks/app/landing/page-a76ba2642bd02bf5.js +1 -0
  348. package/.next/static/chunks/app/layout-cc98f6c7473b86a3.js +1 -0
  349. package/.next/static/css/efaf98e3b295f727.css +1 -0
  350. package/.next/static/wBARQPScPhD6SLn7WQvI9/_buildManifest.js +1 -0
  351. package/CHANGELOG.md +19 -0
  352. package/open-sse/providers/registry/opencode-go.js +4 -0
  353. package/open-sse/providers/registry/opencode-zen.js +4 -0
  354. package/open-sse/providers/registry/opencode.js +3 -0
  355. package/open-sse/translator/concerns/thinkingUnified.js +16 -1
  356. package/open-sse/translator/concerns/toolCall.js +2 -1
  357. package/open-sse/translator/formats/openai.js +10 -2
  358. package/open-sse/translator/request/claude-to-openai.js +9 -5
  359. package/open-sse/translator/response/openai-to-claude.js +66 -32
  360. package/open-sse/translator/schema/defaults.js +6 -0
  361. package/open-sse/translator/schema/index.js +1 -1
  362. package/package.json +1 -1
  363. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/ClaudeToolCard.tsx +10 -0
  364. package/src/app/api/cli-tools/claude-settings/route.js +10 -0
  365. package/src/app/globals.css +21 -1
  366. package/src/shared/components/layouts/DashboardLayout.tsx +2 -8
  367. package/src/shared/constants/cliTools.js +5 -0
  368. package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +0 -1
  369. package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +0 -1
  370. package/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +0 -1
  371. package/.next/server/app/dashboard/basic-chat.html +0 -1
  372. package/.next/server/app/dashboard/basic-chat.meta +0 -36
  373. package/.next/server/app/dashboard/basic-chat.rsc +0 -26
  374. package/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +0 -31
  375. package/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +0 -26
  376. package/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +0 -6
  377. package/.next/static/Xxof6vr5MvX0-6oReU23d/_buildManifest.js +0 -1
  378. package/.next/static/chunks/1278-f11c7d84c52342fc.js +0 -1
  379. package/.next/static/chunks/1471-10f225f62f7469cc.js +0 -1
  380. package/.next/static/chunks/159-ec207a220d7d5c16.js +0 -1
  381. package/.next/static/chunks/5113-5c4f5181388aab72.js +0 -1
  382. package/.next/static/chunks/5778-9d97ce04f2ac118c.js +0 -1
  383. package/.next/static/chunks/6920-e2b533c1eafa9521.js +0 -1
  384. package/.next/static/chunks/7835-c1ef8f5cdaaad483.js +0 -1
  385. package/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-ce1364b2b9589785.js +0 -1
  386. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-3cc58622294c8c8a.js +0 -1
  387. package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-67516b120adbc4d7.js +0 -1
  388. package/.next/static/chunks/app/(dashboard)/dashboard/page-315c9f52c472a700.js +0 -1
  389. package/.next/static/chunks/app/callback/page-f714c2306a1e9004.js +0 -1
  390. package/.next/static/chunks/app/dashboard/settings/pricing/page-86197107690a0580.js +0 -1
  391. package/.next/static/chunks/app/landing/page-7a83d1be493ddc8c.js +0 -1
  392. package/.next/static/chunks/app/layout-dc929483cad9f77f.js +0 -1
  393. package/.next/static/css/c66cbd684164cacf.css +0 -1
  394. package/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.tsx +0 -1140
  395. package/src/app/(dashboard)/dashboard/basic-chat/page.tsx +0 -5
  396. /package/.next/static/{Xxof6vr5MvX0-6oReU23d → wBARQPScPhD6SLn7WQvI9}/_ssgManifest.js +0 -0
@@ -31,6 +31,9 @@ export default {
31
31
  format: "openai",
32
32
  baseUrl: "https://opencode.ai/inference/openai/v1/chat/completions",
33
33
  auth: { combined: true, header: "Authorization", scheme: "bearer" },
34
+ // OpenAI dialect only: the gateway rejects `thinking`/`enable_thinking`
35
+ // (400 unknown field "thinking"), so normalize reasoning to reasoning_effort.
36
+ thinkingFormat: "openai",
34
37
  },
35
38
  {
36
39
  format: "claude",
@@ -41,6 +44,7 @@ export default {
41
44
  format: "openai-responses",
42
45
  baseUrl: "https://opencode.ai/inference/openai/v1/responses",
43
46
  auth: { combined: true, header: "Authorization", scheme: "bearer" },
47
+ thinkingFormat: "openai",
44
48
  },
45
49
  ],
46
50
  // supportedFormats follow the per-model API families (chat completions /
@@ -19,6 +19,9 @@ export default {
19
19
  },
20
20
  forceStream: true,
21
21
  noAuth: true,
22
+ // OpenAI dialect only: the gateway rejects `thinking`/`enable_thinking`
23
+ // (400 unknown field "thinking"), so normalize reasoning to reasoning_effort.
24
+ thinkingFormat: "openai",
22
25
  quirks: {
23
26
  forceAutoToolChoiceModels: [
24
27
  "muse-spark-1.2-contributor-free",
@@ -124,9 +124,24 @@ const NATIVE_ONLY_FORMATS = new Set([
124
124
  "kiro",
125
125
  ]); // "kiro" legacy (provider removed)
126
126
 
127
+ // Provider/transport-level wire override. Multi-endpoint providers declare one
128
+ // entry per endpoint format, so prefer the entry matching targetFormat; fall back
129
+ // to the provider's default transport. The override describes an OpenAI-dialect
130
+ // endpoint, so it only applies on OpenAI-family wires — a Claude/Gemini endpoint
131
+ // keeps deriving its native thinking shape from the capabilities below.
132
+ function providerThinkingFormat(provider, targetFormat) {
133
+ if (targetFormat !== "openai" && targetFormat !== "openai-responses") return null;
134
+ const cfg = provider ? PROVIDERS[provider] : null;
135
+ if (!cfg) return null;
136
+ const entry = Array.isArray(cfg.transports)
137
+ ? cfg.transports.find((t) => (t.format || "openai") === targetFormat) || cfg
138
+ : cfg;
139
+ return entry.thinkingFormat || null;
140
+ }
141
+
127
142
  function resolveFormat(targetFormat, model, provider) {
128
143
  if (targetFormat === "commandcode") return "commandcode";
129
- const providerFmt = provider ? PROVIDERS[provider]?.thinkingFormat : null;
144
+ const providerFmt = providerThinkingFormat(provider, targetFormat);
130
145
  if (providerFmt) return providerFmt;
131
146
  const caps = getCapabilitiesForModel(provider, model);
132
147
  const isOpenAIWire = targetFormat === "openai" || targetFormat === "openai-responses";
@@ -1,6 +1,7 @@
1
1
  // Tool call helper functions for translator
2
2
 
3
3
  import { FORMATS } from "../formats.js";
4
+ import { EMPTY_TOOL_RESULT } from "../schema/index.js";
4
5
 
5
6
  // Anthropic tool_use.id must match: ^[a-zA-Z0-9_-]+$
6
7
  const TOOL_ID_PATTERN = /^[a-zA-Z0-9_-]+$/;
@@ -147,7 +148,7 @@ export function fixMissingToolResponses(body) {
147
148
  newMessages.push({
148
149
  role: "tool",
149
150
  tool_call_id: id,
150
- content: "",
151
+ content: EMPTY_TOOL_RESULT,
151
152
  });
152
153
  }
153
154
  }
@@ -5,6 +5,7 @@ import {
5
5
  CLAUDE_BLOCK,
6
6
  VALID_OPENAI_CONTENT_TYPES,
7
7
  VALID_OPENAI_MESSAGE_TYPES,
8
+ EMPTY_TOOL_RESULT,
8
9
  } from "../schema/index.js";
9
10
 
10
11
  // Re-export valid-type lists (moved to schema/blocks.js) to keep existing importers working.
@@ -26,8 +27,15 @@ export function filterToOpenAIFormat(body, opts = {}) {
26
27
  // Normalize developer role to system (many providers don't support developer)
27
28
  if (msg.role === ROLE.DEVELOPER) msg = { ...msg, role: ROLE.SYSTEM };
28
29
 
29
- // Keep tool messages as-is (OpenAI format)
30
- if (msg.role === ROLE.TOOL) return msg;
30
+ // Keep tool messages as-is (OpenAI format) — but an empty one is a 400 on
31
+ // several OpenAI-dialect upstreams ("Message content must contain text").
32
+ if (msg.role === ROLE.TOOL) {
33
+ const empty =
34
+ msg.content === "" ||
35
+ msg.content == null ||
36
+ (Array.isArray(msg.content) && msg.content.length === 0);
37
+ return empty ? { ...msg, content: EMPTY_TOOL_RESULT } : msg;
38
+ }
31
39
 
32
40
  // Keep assistant messages with tool_calls as-is
33
41
  if (msg.role === ROLE.ASSISTANT && msg.tool_calls) return msg;
@@ -2,7 +2,7 @@ import { register } from "../index.js";
2
2
  import { FORMATS } from "../formats.js";
3
3
  import { adjustMaxTokens } from "../formats/maxTokens.js";
4
4
  import { encodeDataUri } from "../concerns/image.js";
5
- import { ROLE, OPENAI_BLOCK, CLAUDE_BLOCK } from "../schema/index.js";
5
+ import { ROLE, OPENAI_BLOCK, CLAUDE_BLOCK, EMPTY_TOOL_RESULT } from "../schema/index.js";
6
6
  import { collapseTextParts } from "../concerns/message.js";
7
7
 
8
8
  function stripAnthropicBillingHeader(text) {
@@ -62,7 +62,7 @@ export function claudeToOpenAIRequest(model, body, stream) {
62
62
  }
63
63
 
64
64
  // Fix missing tool responses - OpenAI requires every tool_call to have a response.
65
- // Local variant: scans contiguous tool replies + inserts "[No response received]"
65
+ // Local variant: scans contiguous tool replies + inserts EMPTY_TOOL_RESULT
66
66
  // (distinct from the global immediate-next check in concerns/toolCall, runs on the openai leg).
67
67
  fixMissingToolResponsesOpenAI(result.messages);
68
68
 
@@ -123,7 +123,7 @@ function fixMissingToolResponsesOpenAI(messages) {
123
123
  const missingResponses = missingIds.map((id) => ({
124
124
  role: ROLE.TOOL,
125
125
  tool_call_id: id,
126
- content: "[No response received]",
126
+ content: EMPTY_TOOL_RESULT,
127
127
  }));
128
128
  messages.splice(insertPosition, 0, ...missingResponses);
129
129
  i = insertPosition + missingResponses.length - 1;
@@ -216,7 +216,9 @@ function convertClaudeMessage(msg) {
216
216
  const textOnly = block.content.filter((c) => c?.type === CLAUDE_BLOCK.TEXT);
217
217
  resultContent =
218
218
  textOnly.map((c) => c.text).join("\n") ||
219
- (resultImages.length ? "" : JSON.stringify(block.content));
219
+ (resultImages.length || block.content.length === 0
220
+ ? ""
221
+ : JSON.stringify(block.content));
220
222
  } else if (block.content) {
221
223
  resultContent = JSON.stringify(block.content);
222
224
  }
@@ -224,7 +226,9 @@ function convertClaudeMessage(msg) {
224
226
  toolResults.push({
225
227
  role: ROLE.TOOL,
226
228
  tool_call_id: block.tool_use_id,
227
- content: resultContent,
229
+ // Empty content is a 400 on several OpenAI-dialect upstreams
230
+ // ("Message content must contain text"); keep a placeholder.
231
+ content: resultContent || EMPTY_TOOL_RESULT,
228
232
  });
229
233
  // The OpenAI tool role is text-only, so a screenshot or any other image a
230
234
  // tool returned would otherwise vanish. Hand it to the model in the user
@@ -70,9 +70,73 @@ function stopTextBlock(state, results) {
70
70
  state.textBlockStarted = false;
71
71
  }
72
72
 
73
+ // Buffered tool args parse as JSON → safe to hand the client a tool_use finish.
74
+ function bufferedArgsComplete(state) {
75
+ for (const [idx] of state.toolCalls) {
76
+ const buffered = state.toolArgBuffers?.get(idx);
77
+ if (!buffered) continue;
78
+ try {
79
+ JSON.parse(buffered);
80
+ } catch {
81
+ return false;
82
+ }
83
+ }
84
+ return true;
85
+ }
86
+
87
+ // Close every open block, flush tool args, then message_delta + message_stop.
88
+ // Shared by the finish_reason path and the end-of-stream flush so a stream that
89
+ // dies without a finish chunk still terminates instead of truncating the turn.
90
+ function emitMessageFinish(state, results, reason) {
91
+ if (state.claudeFinishEmitted) return;
92
+ state.claudeFinishEmitted = true;
93
+
94
+ stopThinkingBlock(state, results);
95
+ stopTextBlock(state, results);
96
+
97
+ for (const [idx, toolInfo] of state.toolCalls) {
98
+ // Emit buffered + sanitized args as single delta before stop
99
+ const buffered = state.toolArgBuffers?.get(idx);
100
+ if (buffered) {
101
+ const sanitized = sanitizeToolArgs(toolInfo.name, buffered);
102
+ results.push({
103
+ type: "content_block_delta",
104
+ index: toolInfo.blockIndex,
105
+ delta: { type: "input_json_delta", partial_json: sanitized },
106
+ });
107
+ }
108
+ results.push({
109
+ type: "content_block_stop",
110
+ index: toolInfo.blockIndex,
111
+ });
112
+ }
113
+
114
+ // Mark finish for later usage injection in stream.js
115
+ state.finishReason = reason;
116
+
117
+ // Use tracked usage (will be estimated in stream.js if not valid)
118
+ const finalUsage = state.usage || { input_tokens: 0, output_tokens: 0 };
119
+ results.push({
120
+ type: "message_delta",
121
+ delta: { stop_reason: convertFinishReason(reason) },
122
+ usage: finalUsage,
123
+ });
124
+ results.push({ type: "message_stop" });
125
+ }
126
+
73
127
  // Convert OpenAI stream chunk to Claude format
74
128
  export function openaiToClaudeResponse(chunk, state) {
75
- if (!chunk || !chunk.choices?.[0]) return null;
129
+ // End-of-stream flush (stream.js calls the translator with chunk=null): the
130
+ // upstream can close right after a tool-call delta without ever sending
131
+ // finish_reason, which used to leave the client with an unterminated message.
132
+ if (!chunk) {
133
+ if (!state.messageStartSent || state.claudeFinishEmitted) return null;
134
+ const results = [];
135
+ const reason = state.toolCalls.size > 0 && bufferedArgsComplete(state) ? "tool_calls" : "stop";
136
+ emitMessageFinish(state, results, reason);
137
+ return results;
138
+ }
139
+ if (!chunk.choices?.[0]) return null;
76
140
 
77
141
  const results = [];
78
142
  const choice = chunk.choices[0];
@@ -234,37 +298,7 @@ export function openaiToClaudeResponse(chunk, state) {
234
298
 
235
299
  // Finish
236
300
  if (choice.finish_reason) {
237
- stopThinkingBlock(state, results);
238
- stopTextBlock(state, results);
239
-
240
- for (const [idx, toolInfo] of state.toolCalls) {
241
- // Emit buffered + sanitized args as single delta before stop
242
- const buffered = state.toolArgBuffers?.get(idx);
243
- if (buffered) {
244
- const sanitized = sanitizeToolArgs(toolInfo.name, buffered);
245
- results.push({
246
- type: "content_block_delta",
247
- index: toolInfo.blockIndex,
248
- delta: { type: "input_json_delta", partial_json: sanitized },
249
- });
250
- }
251
- results.push({
252
- type: "content_block_stop",
253
- index: toolInfo.blockIndex,
254
- });
255
- }
256
-
257
- // Mark finish for later usage injection in stream.js
258
- state.finishReason = choice.finish_reason;
259
-
260
- // Use tracked usage (will be estimated in stream.js if not valid)
261
- const finalUsage = state.usage || { input_tokens: 0, output_tokens: 0 };
262
- results.push({
263
- type: "message_delta",
264
- delta: { stop_reason: convertFinishReason(choice.finish_reason) },
265
- usage: finalUsage,
266
- });
267
- results.push({ type: "message_stop" });
301
+ emitMessageFinish(state, results, choice.finish_reason);
268
302
  }
269
303
 
270
304
  return results.length > 0 ? results : null;
@@ -5,3 +5,9 @@ export const MODEL_FALLBACK = "unknown";
5
5
 
6
6
  // Default image mime when source omits it (base64 blobs without a declared type).
7
7
  export const DEFAULT_IMAGE_MIME = "image/png";
8
+
9
+ // Placeholder for a tool result with no text (image-only, empty array, or a
10
+ // missing response). OpenAI-dialect wires reject `role:"tool"` with empty
11
+ // content. Deliberately not JSON-shaped: a leading "[" reads as a raw-JSON
12
+ // stringification bug to callers inspecting the bridge.
13
+ export const EMPTY_TOOL_RESULT = "(no output)";
@@ -8,4 +8,4 @@ export {
8
8
  VALID_OPENAI_MESSAGE_TYPES,
9
9
  } from "./blocks.js";
10
10
  export { OPENAI_FINISH, CLAUDE_STOP, GEMINI_FINISH } from "./finishReasons.js";
11
- export { MODEL_FALLBACK, DEFAULT_IMAGE_MIME } from "./defaults.js";
11
+ export { MODEL_FALLBACK, DEFAULT_IMAGE_MIME, EMPTY_TOOL_RESULT } from "./defaults.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amir83nasr/10router",
3
- "version": "0.1.11",
3
+ "version": "0.1.14",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/Amir83Nasr/10Router.git"
@@ -245,6 +245,11 @@ export default function ClaudeToolCard({
245
245
  if (autoCompactWindow) {
246
246
  env.CLAUDE_CODE_AUTO_COMPACT_WINDOW = autoCompactWindow;
247
247
  }
248
+ if (tool.envVars?.todoTools) {
249
+ // Claude Code hides TodoWrite behind an Anthropic-model allowlist; routed
250
+ // model ids never match, so the escape-hatch flag must ride along.
251
+ env[tool.envVars.todoTools] = "1";
252
+ }
248
253
  const res = await fetch("/api/cli-tools/claude-settings", {
249
254
  method: "POST",
250
255
  headers: { "Content-Type": "application/json" },
@@ -321,6 +326,11 @@ export default function ClaudeToolCard({
321
326
  if (autoCompactWindow) {
322
327
  env.CLAUDE_CODE_AUTO_COMPACT_WINDOW = autoCompactWindow;
323
328
  }
329
+ if (tool.envVars?.todoTools) {
330
+ // Claude Code hides TodoWrite behind an Anthropic-model allowlist; routed
331
+ // model ids never match, so the escape-hatch flag must ride along.
332
+ env[tool.envVars.todoTools] = "1";
333
+ }
324
334
 
325
335
  return [
326
336
  {
@@ -7,6 +7,7 @@ import fs from "fs/promises";
7
7
  import path from "path";
8
8
  import os from "os";
9
9
  import { DEFAULT_PLUGINS } from "@/shared/constants/coworkPlugins";
10
+ import { CLI_TOOLS } from "@/shared/constants/cliTools.js";
10
11
  import { isContainer, hostHome, hasHostHome } from "@/lib/isContainer";
11
12
 
12
13
  const execAsync = promisify(exec);
@@ -182,6 +183,14 @@ export async function POST(request) {
182
183
  delete newSettings.env.CLAUDE_CODE_AUTO_COMPACT_WINDOW;
183
184
  }
184
185
 
186
+ // CLAUDE_CODE_ENABLE_TODO_TOOLS — Claude Code only offers TodoWrite/TodoRead
187
+ // when the model id is one of Anthropic's own (internal allowlist). Every
188
+ // model routed through this gateway is a custom id, so without the flag the
189
+ // task list never appears and Claude plans without visible progress. Set it
190
+ // alongside the routed model rather than leaving it to the user.
191
+ const todoToolsKey = CLI_TOOLS.claude.envVars.todoTools;
192
+ if (todoToolsKey) newSettings.env[todoToolsKey] = "1";
193
+
185
194
  // Write new settings
186
195
  await fs.writeFile(settingsPath, JSON.stringify(newSettings, null, 2));
187
196
 
@@ -209,6 +218,7 @@ const RESET_ENV_KEYS = [
209
218
  "ANTHROPIC_DEFAULT_HAIKU_MODEL",
210
219
  "API_TIMEOUT_MS",
211
220
  "CLAUDE_CODE_AUTO_COMPACT_WINDOW",
221
+ "CLAUDE_CODE_ENABLE_TODO_TOOLS",
212
222
  ];
213
223
 
214
224
  // DELETE - Reset settings (remove env fields)
@@ -300,7 +300,7 @@
300
300
  }
301
301
 
302
302
  /* ── MARKDOWN BODY ─────────────────────────────────────── */
303
- /* Changelog modal markdown. Scoped to ChangelogModal. */
303
+ /* Changelog modal body. */
304
304
  .changelog-body h1 {
305
305
  font-size: 1.4rem;
306
306
  font-weight: 700;
@@ -330,6 +330,11 @@
330
330
  padding-left: 1.5rem;
331
331
  margin: 0.5rem 0;
332
332
  }
333
+ .changelog-body ol {
334
+ list-style: decimal;
335
+ padding-left: 1.5rem;
336
+ margin: 0.5rem 0;
337
+ }
333
338
  .changelog-body li {
334
339
  margin: 0.25rem 0;
335
340
  line-height: 1.6;
@@ -345,6 +350,21 @@
345
350
  font-size: 0.875em;
346
351
  font-family: ui-monospace, monospace;
347
352
  }
353
+ .changelog-body pre {
354
+ background: var(--muted);
355
+ border: 1px solid var(--border);
356
+ border-radius: 10px;
357
+ padding: 0.75rem 1rem;
358
+ margin: 0.75rem 0;
359
+ overflow-x: auto;
360
+ }
361
+ .changelog-body pre code {
362
+ background: none;
363
+ padding: 0;
364
+ border-radius: 0;
365
+ font-size: 0.85em;
366
+ line-height: 1.55;
367
+ }
348
368
  .changelog-body a {
349
369
  color: var(--primary);
350
370
  text-decoration: underline;
@@ -80,14 +80,8 @@ function DashboardShell({ children }: { children: ReactNode }) {
80
80
  {/* Main content */}
81
81
  <SidebarInset className="flex flex-col h-full min-w-0 relative transition-colors duration-300 isolate">
82
82
  <Header key={pathname} onMenuClick={toggleSidebar} />
83
- <div
84
- className={`dashboard-grid-bg flex-1 overflow-y-auto ${pathname === "/dashboard/basic-chat" ? "" : "p-6 lg:p-10"} ${pathname === "/dashboard/basic-chat" ? "flex flex-col overflow-hidden" : ""}`}
85
- >
86
- <div
87
- className={`${pathname === "/dashboard/basic-chat" ? "flex-1 w-full h-full flex flex-col" : "max-w-7xl mx-auto"}`}
88
- >
89
- {children}
90
- </div>
83
+ <div className="dashboard-grid-bg flex-1 overflow-y-auto p-6 lg:p-10">
84
+ <div className="max-w-7xl mx-auto">{children}</div>
91
85
  </div>
92
86
  </SidebarInset>
93
87
  </>
@@ -14,6 +14,11 @@ export const CLI_TOOLS = {
14
14
  sonnetModel: "ANTHROPIC_DEFAULT_SONNET_MODEL",
15
15
  fableModel: "ANTHROPIC_DEFAULT_FABLE_MODEL",
16
16
  haikuModel: "ANTHROPIC_DEFAULT_HAIKU_MODEL",
17
+ // Claude Code only exposes TodoWrite/TodoRead when the model id is one of
18
+ // Anthropic's own (an internal allowlist in the CLI); routed models such
19
+ // as `oc/...` or a combo name never match, so the task list disappears.
20
+ // This flag is the CLI's documented escape hatch for that gate.
21
+ todoTools: "CLAUDE_CODE_ENABLE_TODO_TOOLS",
17
22
  },
18
23
  modelAliases: ["default", "sonnet", "opus", "fable", "haiku", "opusplan"],
19
24
  settingsFile: "~/.claude/settings.json",
@@ -1 +0,0 @@
1
- (()=>{var a={};a.id=4465,a.ids=[4465],a.modules={643:a=>{"use strict";a.exports=require("node:perf_hooks")},1708:a=>{"use strict";a.exports=require("node:process")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{"use strict";a.exports=require("node:buffer")},5583:(a,b,c)=>{"use strict";c.r(b),c.d(b,{__next_app__:()=>w,handler:()=>y,routeModule:()=>x});var d=c(26720),e=c(29966),f=c(36243),g=c(70310),h={};for(let a in g)0>["default","__next_app__","routeModule","handler"].indexOf(a)&&(h[a]=()=>g[a]);c.d(b,h);let i=(0,d.p)(()=>Promise.resolve().then(c.bind(c,79452))),j=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),k=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,2808,23))),l=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,8329,23))),m=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,41580,23))),n=(0,d.p)(()=>Promise.resolve().then(c.bind(c,11089))),o=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),p=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,2808,23))),q=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,8329,23))),r=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,41580,23))),s=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),t=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),u={children:["",{children:["(dashboard)",{children:["dashboard",{children:["basic-chat",{children:["__PAGE__",{},{page:[(0,d.p)(()=>Promise.resolve().then(c.bind(c,67919))),"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/basic-chat/page.tsx"]}]},{"global-error":[t,"next/dist/client/components/builtin/global-error.js"]},[]]},{"global-error":[s,"next/dist/client/components/builtin/global-error.js"]},[]]},{layout:[n,"/home/runner/work/10Router/10Router/src/app/(dashboard)/layout.tsx"],"global-error":[o,"next/dist/client/components/builtin/global-error.js"],"not-found":[p,"next/dist/client/components/builtin/not-found.js"],forbidden:[q,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[r,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]},{layout:[i,"/home/runner/work/10Router/10Router/src/app/layout.tsx"],"global-error":[j,"next/dist/client/components/builtin/global-error.js"],"not-found":[k,"next/dist/client/components/builtin/not-found.js"],forbidden:[l,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[m,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]}.children,v=(0,e.H)({tree:u,page:"/(dashboard)/dashboard/basic-chat/page",pathname:"/dashboard/basic-chat",require:c,loadChunk:()=>Promise.resolve(),interopDefault:f.T}),w=v.__next_app__,x=v.routeModule,y=v.handler},7066:a=>{"use strict";a.exports=require("node:tty")},8128:a=>{"use strict";a.exports=require("next/dist/server/runtime-reacts.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},13527:(a,b,c)=>{Promise.resolve().then(c.bind(c,88330))},14985:a=>{"use strict";a.exports=require("dns")},16698:a=>{"use strict";a.exports=require("node:async_hooks")},19103:(a,b,c)=>{Promise.resolve().then(c.bind(c,64620))},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},21820:a=>{"use strict";a.exports=require("os")},27910:a=>{"use strict";a.exports=require("stream")},28354:a=>{"use strict";a.exports=require("util")},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},32467:a=>{"use strict";a.exports=require("node:http2")},33873:a=>{"use strict";a.exports=require("path")},34589:a=>{"use strict";a.exports=require("node:assert")},37067:a=>{"use strict";a.exports=require("node:http")},37540:a=>{"use strict";a.exports=require("node:console")},38522:a=>{"use strict";a.exports=require("node:zlib")},40610:a=>{"use strict";a.exports=require("node:dns")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},41692:a=>{"use strict";a.exports=require("node:tls")},41792:a=>{"use strict";a.exports=require("node:querystring")},46060:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external.js")},46293:a=>{"use strict";a.exports=require("sql.js")},48161:a=>{"use strict";a.exports=require("node:os")},51455:a=>{"use strict";a.exports=require("node:fs/promises")},53053:a=>{"use strict";a.exports=require("node:diagnostics_channel")},55511:a=>{"use strict";a.exports=require("crypto")},55591:a=>{"use strict";a.exports=require("https")},57075:a=>{"use strict";a.exports=require("node:stream")},57975:a=>{"use strict";a.exports=require("node:util")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},64620:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.tsx","default")},67919:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(25966),e=c(64620);function f(){return(0,d.jsx)(e.default,{})}},71553:a=>{"use strict";a.exports=require("node:dns/promises")},71622:a=>{"use strict";a.exports=import("open")},73024:a=>{"use strict";a.exports=require("node:fs")},73136:a=>{"use strict";a.exports=require("node:url")},73429:a=>{"use strict";a.exports=require("node:util/types")},73496:a=>{"use strict";a.exports=require("http2")},74075:a=>{"use strict";a.exports=require("zlib")},75919:a=>{"use strict";a.exports=require("node:worker_threads")},76760:a=>{"use strict";a.exports=require("node:path")},77030:a=>{"use strict";a.exports=require("node:net")},77598:a=>{"use strict";a.exports=require("node:crypto")},78474:a=>{"use strict";a.exports=require("node:events")},79551:a=>{"use strict";a.exports=require("url")},79646:a=>{"use strict";a.exports=require("child_process")},79868:a=>{"use strict";a.exports=require("node:sqlite")},81630:a=>{"use strict";a.exports=require("http")},81787:a=>{"use strict";a.exports=require("bun:sqlite")},87997:a=>{"use strict";a.exports=require("node:timers")},88330:(a,b,c)=>{"use strict";c.d(b,{default:()=>m});var d=c(86240),e=c(28907),f=c(70433),g=c(29184),h=c(63265);function i(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`chat_${Date.now()}_${Math.random().toString(16).slice(2)}`}function j(a){if("string"==typeof a)return a;if(null==a)return"";if(Array.isArray(a))return a.map(j).filter(Boolean).join(" ");if("object"==typeof a){if("string"==typeof a.message)return a.message;if("string"==typeof a.error)return a.error;try{return JSON.stringify(a)}catch{}}return String(a)}function k(a=""){let b=j(a).replace(/\s+/g," ").trim();return b?b.length>52?`${b.slice(0,52).trimEnd()}…`:b:"New chat"}async function l(a){return await new Promise((b,c)=>{let d=new FileReader;d.onload=()=>b(String(d.result||"")),d.onerror=()=>c(d.error||Error("Failed to read file")),d.readAsDataURL(a)})}function m(){let[a,b]=(0,f.useState)([]),[c,m]=(0,f.useState)(!0),[n,o]=(0,f.useState)(""),[p,q]=(0,f.useState)(()=>[]),[r,s]=(0,f.useState)(()=>""),[t,u]=(0,f.useState)(()=>""),[v,w]=(0,f.useState)(""),[x,y]=(0,f.useState)(()=>""),[z,A]=(0,f.useState)([]),[B,C]=(0,f.useState)(!1),[D,E]=(0,f.useState)(""),[F,G]=(0,f.useState)(""),[H,I]=(0,f.useState)(!1),[J,K]=(0,f.useState)(!1),[L,M]=(0,f.useState)(!1),N=(0,f.useRef)(null),O=(0,f.useRef)(null);(0,f.useRef)(!1);let P=(0,f.useRef)(null),Q=(0,f.useRef)(null),R=(0,f.useMemo)(()=>{let b=new Map;for(let c of a)for(let a of c.models)b.set(a.id,{...a,providerId:c.providerId,providerName:c.providerName});return b},[a]),S=(0,f.useMemo)(()=>a.find(a=>a.providerId===t)||a[0]||null,[a,t]),T=(0,f.useMemo)(()=>{if(v&&R.has(v))return R.get(v);if(r){let a=p.find(a=>a.id===r);if(a?.modelId&&R.has(a.modelId))return R.get(a.modelId)}return S?.models?.[0]||null},[v,R,S,p,r]),U=(0,f.useMemo)(()=>p.find(a=>a.id===r)||null,[p,r]),V=U?.messages||[],W=(0,f.useMemo)(()=>[...p].sort((a,b)=>new Date(b.updatedAt).getTime()-new Date(a.updatedAt).getTime()),[p]),X=!B&&!!T&&(x.trim().length>0||z.length>0),Y=(a,b)=>{q(c=>c.map(c=>c.id===a?b({...c,messages:Array.isArray(c.messages)?c.messages.map(a=>({...a})):[]}):c))},Z=a=>a?{id:i(),title:"New chat",providerId:a.providerId,providerName:a.providerName,modelId:a.id,modelName:a.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]}:null,$=async a=>{let b=Array.from(a.target.files||[]);if(0===b.length)return;let c=b.filter(a=>a.type.startsWith("image/"));if(0===c.length){a.target.value="";return}let d=await Promise.all(c.map(async a=>({id:i(),name:a.name,type:a.type,size:a.size,dataUrl:await l(a)})));A(a=>[...a,...d]),a.target.value=""},_=async()=>{let a=T||S?.models?.[0]||null;if(!a)return;let b=x.trim();if(!b&&0===z.length)return;let c=r,d=p.find(a=>a.id===c);if(!d){if(!(d=Z(a)))return;c=d.id,q(a=>[d,...a]),s(c)}let e={id:i(),role:"user",content:b,attachments:z.map(a=>({id:a.id,name:a.name,type:a.type,dataUrl:a.dataUrl})),createdAt:new Date().toISOString()},f=i(),g={id:f,role:"assistant",content:"",createdAt:new Date().toISOString(),status:"streaming"},h=[...d.messages||[],e,g];q(d=>d.map(d=>d.id===c?{...d,providerId:a.providerId,providerName:a.providerName,modelId:a.id,modelName:a.name,messages:h,updatedAt:new Date().toISOString(),title:"New chat"===d.title?k(b):d.title}:d)),y(""),A([]),C(!0),E(f),G(""),O.current?.abort(),O.current=new AbortController;let l=h.filter(a=>"assistant"!==a.role||a.id!==f).map(a=>({role:a.role,content:"user"===a.role?function(a){let b=j(a.content).trim(),c=Array.isArray(a.attachments)?a.attachments:[];if(0===c.length)return b;let d=[];for(let a of(b&&d.push({type:"text",text:b}),c))a?.dataUrl&&d.push({type:"image_url",image_url:{url:a.dataUrl}});return d.length>0?d:b}(a):a.content}));try{var m;let d,e=await fetch("/api/dashboard/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({model:a.requestModel||a.id,messages:l,stream:!0}),signal:O.current.signal});if(!e.ok){let a=await e.json().catch(()=>({}));throw Error(j(a.error||a.message||`Request failed (${e.status})`))}let g=e.body?.getReader();if(!g){let a=await e.json().catch(()=>({})),b=j(a?.choices?.[0]?.message?.content||a?.output_text||a?.error||a?.message||"");Y(c,a=>({...a,messages:a.messages.map(a=>a.id===f?{...a,content:b,status:"done"}:a),updatedAt:new Date().toISOString()}));return}let h=new TextDecoder,i="",n="";for(;;){let{value:a,done:b}=await g.read();if(b)break;let d=(i+=h.decode(a,{stream:!0})).split(/\r?\n/);for(let a of(i=d.pop()||"",d)){let b=a.trim();if(!b.startsWith("data:"))continue;let d=b.slice(5).trim();if(d&&"[DONE]"!==d)try{let a=JSON.parse(d),b=function(a){if(!a||"object"!=typeof a)return"";let b=a.choices?.[0];return[(b?.delta||{}).content,b?.message?.content,a.output_text,a.text].map(j).filter(Boolean)[0]||""}(a);if(!b)continue;n+=b,G(n),Y(c,a=>({...a,messages:a.messages.map(a=>a.id===f?{...a,content:n,status:"streaming"}:a),updatedAt:new Date().toISOString()}))}catch{}}}Y(c,a=>({...a,messages:a.messages.map(a=>a.id===f?{...a,content:n||a.content,status:"done"}:a),updatedAt:new Date().toISOString()})),m=c,d=k(b),Y(m,a=>({...a,title:"New chat"===a.title?d:a.title,updatedAt:new Date().toISOString()}))}catch(a){if("AbortError"!==a.name){let b=j(a?.message||a);Y(c,a=>({...a,messages:a.messages.map(a=>a.id===f?{...a,content:a.content||`Error: ${b}`,status:"error"}:a),updatedAt:new Date().toISOString()})),o(b||"Failed to send message.")}}finally{C(!1),E(""),G(""),O.current=null}},aa=T?`${T.name}`:"Select model",ab=T?T.requestModel:"Choose from connected providers";return(0,d.jsx)("div",{className:"relative flex-1 flex flex-col h-full min-h-0 min-w-0 bg-[#212121] text-white overflow-hidden",children:(0,d.jsxs)("div",{className:"relative mx-auto flex flex-1 h-full min-h-0 w-full max-w-4xl flex-col",children:[(0,d.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 px-4 py-3 lg:px-6",children:[(0,d.jsxs)("div",{ref:P,className:"relative",children:[(0,d.jsx)("button",{type:"button",onClick:()=>K(a=>!a),className:"flex items-center gap-3 rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-left transition hover:bg-white/8",children:(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"text-sm font-semibold text-white",children:aa}),(0,d.jsx)(e.default,{name:"expand_more",className:"text-[18px] text-white/70"})]}),(0,d.jsx)("p",{className:"truncate text-xs text-white/55",children:ab})]})}),J?(0,d.jsxs)("div",{className:"absolute left-0 top-[calc(100%+10px)] z-30 w-[min(520px,calc(100vw-2rem))] overflow-hidden rounded-[20px] border border-white/10 bg-[#262626] shadow-2xl shadow-black/50",children:[(0,d.jsxs)("div",{className:"border-b border-white/10 px-4 py-3",children:[(0,d.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Models"}),(0,d.jsx)("p",{className:"text-sm text-white/75",children:"Only from connected providers"})]}),(0,d.jsx)("div",{className:"max-h-[60vh] overflow-y-auto p-2",children:a.map(a=>(0,d.jsxs)("div",{className:"mb-2 rounded-[16px] border border-white/10 bg-black/20 p-2",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between px-2 py-2",children:[(0,d.jsx)("p",{className:"text-sm font-semibold text-white",children:a.providerName}),(0,d.jsx)(g.E,{children:a.models.length})]}),(0,d.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:a.models.map(a=>{let b=a.id===v;return(0,d.jsx)("button",{type:"button",onClick:()=>(a=>{let b=R.get(a);if(!b)return;let c=p.find(a=>a.id===r);if(c&&c.messages.length>0){let a=Z(b);if(!a)return;q(b=>[a,...b]),s(a.id)}else if(c)q(a=>a.map(a=>a.id===c.id?{...a,providerId:b.providerId,providerName:b.providerName,modelId:b.id,modelName:b.name}:a)),s(c.id);else{let a=Z(b);if(!a)return;q(b=>[a,...b]),s(a.id)}u(b.providerId),w(b.id),K(!1)})(a.id),className:`rounded-[14px] border px-3 py-3 text-left transition ${b?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("p",{className:"truncate text-sm font-medium text-white",children:a.name}),(0,d.jsx)("p",{className:"truncate text-[11px] text-white/45",children:a.requestModel})]}),b?(0,d.jsx)(e.default,{name:"check_circle",className:"text-[18px] text-blue-300"}):null]})},a.id)})})]},a.providerId))})]}):null]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("button",{type:"button",onClick:()=>M(a=>!a),className:"rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white/80 transition hover:bg-white/8",children:"History"}),(0,d.jsxs)(h.$,{variant:"ghost",size:"sm",onClick:()=>{if(!r)return;let a=p.filter(a=>a.id!==r),b=a[0]||null;q(a),b?(s(b.id),u(b.providerId),w(b.modelId)):(s(""),u(""),w(""))},disabled:!r||0===p.length,children:[(0,d.jsx)(e.default,{name:"delete"}),"Clear"]})]})]}),L?(0,d.jsxs)("div",{ref:Q,className:"absolute right-4 top-[72px] z-20 w-[min(360px,calc(100vw-2rem))] rounded-[20px] border border-white/10 bg-[#262626] p-2 shadow-2xl shadow-black/50 lg:right-6",children:[(0,d.jsx)("div",{className:"px-3 py-2",children:(0,d.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Recent chats"})}),(0,d.jsx)("div",{className:"max-h-[48vh] space-y-2 overflow-y-auto p-1",children:0===W.length?(0,d.jsx)("div",{className:"rounded-[16px] border border-dashed border-white/10 bg-white/5 p-4 text-sm text-white/55",children:"No conversations yet."}):W.map(a=>{let b=a.id===r,c=[...a.messages||[]].reverse().find(a=>"user"===a.role)||a.messages?.[0];return(0,d.jsx)("button",{type:"button",onClick:()=>{var b;let c;return b=a.id,void((c=p.find(a=>a.id===b))&&(s(b),u(c.providerId||t),w(c.modelId||v),M(!1)))},className:`w-full rounded-[16px] border px-3 py-3 text-left transition ${b?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("p",{className:"truncate text-sm font-medium text-white",children:a.title}),(0,d.jsx)("p",{className:"mt-1 truncate text-xs text-white/50",children:j(c?.content)||"Empty chat"})]}),(0,d.jsx)("span",{className:"text-[10px] text-white/40 shrink-0",children:function(a){if(!a)return"Now";let b=new Date(a).getTime();if(Number.isNaN(b))return"Now";let c=Math.max(1,Math.round((Date.now()-b)/6e4));if(c<60)return`${c}m`;let d=Math.round(c/60);return d<24?`${d}h`:`${Math.round(d/24)}d`}(a.updatedAt)})]})},a.id)})})]}):null,n?(0,d.jsx)("div",{className:"mt-4 rounded-[18px] border border-rose-500/20 bg-rose-500/10 px-4 py-3 text-rose-100",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)(e.default,{name:"error",className:"text-[20px]"}),(0,d.jsx)("p",{className:"text-sm leading-6",children:n})]})}):null,(0,d.jsxs)("div",{className:"flex flex-1 flex-col min-h-0",children:[(0,d.jsxs)("div",{className:"flex-1 overflow-y-auto py-4",children:[0===V.length?(0,d.jsx)("div",{className:"flex min-h-[50vh] items-center justify-center px-4 text-center",children:(0,d.jsxs)("div",{className:"max-w-xl space-y-4",children:[(0,d.jsx)("div",{className:"mx-auto flex size-16 items-center justify-center rounded-[20px] border border-white/10 bg-white/5 text-white/80",children:(0,d.jsx)(e.default,{name:"chat",className:"text-[30px]"})}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)("h2",{className:"text-2xl font-semibold text-white",children:"Start a conversation"}),(0,d.jsx)("p",{className:"text-sm leading-6 text-white/60",children:"Simple chat interface to interact with any AI model from connected providers. Select a model and start chatting!"})]})]})}):null,(0,d.jsx)("div",{className:"mx-auto flex w-full max-w-3xl flex-col gap-4 px-4",children:V.map(a=>{let b="user"===a.role,c="assistant"===a.role,e=c&&a.id===D&&"streaming"===a.status,f=j(a.content)||(c?F:"");return(0,d.jsx)("div",{className:`flex w-full ${b?"justify-end":"justify-start"} mb-6`,children:(0,d.jsxs)("div",{className:`max-w-[min(88%,42rem)] ${b?"rounded-3xl bg-[#2f2f2f] px-5 py-3.5 text-white":"text-white/90"}`,children:[(0,d.jsx)("div",{className:"mb-1 flex items-center justify-between gap-3",children:(0,d.jsx)("span",{className:"text-xs font-semibold",children:b?"You":T?.name||"Assistant"})}),a.attachments?.length?(0,d.jsx)("div",{className:"mb-3 grid grid-cols-2 gap-2 sm:grid-cols-3 mt-2",children:a.attachments.map(a=>(0,d.jsx)("a",{href:a.dataUrl,target:"_blank",rel:"noreferrer",className:"overflow-hidden rounded-[18px] border border-white/10 bg-black/20",children:(0,d.jsx)("img",{src:a.dataUrl,alt:a.name,className:"h-28 w-full object-cover",loading:"lazy",decoding:"async"})},a.id))}):null,(0,d.jsxs)("div",{className:"whitespace-pre-wrap break-words text-[15px] leading-7",children:[f,c&&e&&!F?(0,d.jsx)("span",{className:"inline-block animate-pulse",children:"▋"}):null]})]})},a.id)})})]}),(0,d.jsxs)("div",{className:"shrink-0 pt-2",children:[z.length>0?(0,d.jsx)("div",{className:"mx-auto mb-3 flex w-full max-w-3xl flex-wrap gap-2 px-4",children:z.map(a=>(0,d.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-3 py-2",children:[(0,d.jsx)("span",{className:"text-xs text-white/80 max-w-[12rem] truncate",children:a.name}),(0,d.jsx)("button",{type:"button",onClick:()=>{var b;return b=a.id,void A(a=>a.filter(a=>a.id!==b))},className:"text-white/55 hover:text-white","aria-label":"Remove attachment",children:(0,d.jsx)(e.default,{name:"close",className:"text-[18px]"})})]},a.id))}):null,(0,d.jsx)("div",{className:"mx-auto w-full max-w-3xl px-4 pb-2",children:(0,d.jsxs)("div",{className:"rounded-[26px] bg-[#2f2f2f] px-3 pt-3 pb-2 shadow-[0_0_15px_rgba(0,0,0,0.10)] ring-1 ring-white/5",children:[(0,d.jsx)("textarea",{value:x,onChange:a=>y(a.target.value),onKeyDown:a=>{"Enter"===a.key&&!a.shiftKey&&(a.preventDefault(),X&&_())},placeholder:"Message AI",rows:1,className:"w-full resize-none bg-transparent px-2 text-[15px] leading-6 text-white outline-none placeholder:text-white/40 max-h-[25vh] overflow-y-auto"}),(0,d.jsxs)("div",{className:"mt-2 flex items-center justify-between gap-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("button",{type:"button",onClick:()=>N.current?.click(),disabled:!T||c,className:"p-2 text-white/50 hover:text-white transition rounded-full hover:bg-white/5",children:(0,d.jsx)(e.default,{name:"attach_file",className:"text-[20px]"})}),(0,d.jsx)("input",{ref:N,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:$}),(0,d.jsx)("span",{className:"text-xs font-medium text-white/30 truncate max-w-[120px]",children:T?T.name:"No model"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[B?(0,d.jsx)("button",{type:"button",onClick:()=>{O.current?.abort()},className:"p-2 text-white bg-white/10 hover:bg-white/20 transition rounded-full h-8 w-8 flex items-center justify-center",children:(0,d.jsx)(e.default,{name:"stop",className:"text-[16px]"})}):null,(0,d.jsx)("button",{onClick:_,disabled:!X,className:`h-8 w-8 rounded-full flex items-center justify-center transition ${X?"bg-white text-black hover:opacity-90":"bg-white/10 text-white/30 cursor-not-allowed"}`,children:(0,d.jsx)(e.default,{name:"arrow_upward",className:"text-[16px]"})})]})]})]})})]}),(0,d.jsx)("p",{className:"mx-auto mt-2 max-w-3xl px-4 pb-4 text-center text-[11px] text-white/30",children:"Model list is filtered from connected providers."})]})]})})}c(95137),c(86177)},91645:a=>{"use strict";a.exports=require("net")},94735:a=>{"use strict";a.exports=require("events")}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[1316,1238,7963,8569,7257,6009,9817,7535,7816,7156,2339,6461,4301,1289,9018,2801],()=>b(b.s=5583));module.exports=c})();
@@ -1 +0,0 @@
1
- {"version":1,"files":["../../../../../../node_modules/.pnpm/@swc+helpers@0.5.23/node_modules/@swc/helpers/_/_interop_require_default/package.json","../../../../../../node_modules/.pnpm/@swc+helpers@0.5.23/node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../../../../../node_modules/.pnpm/@swc+helpers@0.5.23/node_modules/@swc/helpers/esm/_interop_require_default.js","../../../../../../node_modules/.pnpm/@swc+helpers@0.5.23/node_modules/@swc/helpers/package.json","../../../../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js","../../../../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/package.json","../../../../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/run-applescript","../../../../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/index.js","../../../../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/package.json","../../../../../../node_modules/.pnpm/default-browser@5.5.1/node_modules/bundle-name","../../../../../../node_modules/.pnpm/default-browser@5.5.1/node_modules/default-browser-id","../../../../../../node_modules/.pnpm/default-browser@5.5.1/node_modules/default-browser/index.js","../../../../../../node_modules/.pnpm/default-browser@5.5.1/node_modules/default-browser/package.json","../../../../../../node_modules/.pnpm/default-browser@5.5.1/node_modules/default-browser/windows.js","../../../../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js","../../../../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/package.json","../../../../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js","../../../../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/package.json","../../../../../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/index.js","../../../../../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/package.json","../../../../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-docker","../../../../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js","../../../../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/package.json","../../../../../../node_modules/.pnpm/is-wsl@3.1.1/node_modules/is-inside-container","../../../../../../node_modules/.pnpm/is-wsl@3.1.1/node_modules/is-wsl/index.js","../../../../../../node_modules/.pnpm/is-wsl@3.1.1/node_modules/is-wsl/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@swc/helpers","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/adapter/setup-node-env.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/hooks-server-context.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/static-generation-bailout.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/lib/console.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/source-map/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/source-map/source-map.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/stacktrace-parser/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/ws/index.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/ws/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/client-and-server-references.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/constants.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/framework/boundary-constants.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/interop-default.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/is-error.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/picocolors.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/scheduler.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/semver-noop.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/blocking-route-messages.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/cache-signal.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/console-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/dynamic-rendering.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/staged-rendering.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/sync-io-messages.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dynamic-rendering-utils.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/lru-cache.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/parse-stack.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/source-maps.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/trace/constants.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/load-manifest.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-baseline.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/console-file.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/date.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/random.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-polyfill-crypto.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/patch-error-inspect.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/require-hook.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/response-cache/types.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/runtime-reacts.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/deep-freeze.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/instant-messages.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/invariant-error.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/is-plain-object.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/server-reference-info.js","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/package.json","../../../../../../node_modules/.pnpm/next@16.3.5_@babel+core@7.29.7_supports-color@7.2.0__@types+node@26.6.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/default-browser","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/define-lazy-prop","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/is-in-ssh","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/is-inside-container","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/open/index.js","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/open/package.json","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/open/xdg-open","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/powershell-utils","../../../../../../node_modules/.pnpm/open@11.0.4/node_modules/wsl-utils","../../../../../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/index.js","../../../../../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/package.json","../../../../../../node_modules/.pnpm/powershell-utils@0.2.1/node_modules/powershell-utils/index.js","../../../../../../node_modules/.pnpm/powershell-utils@0.2.1/node_modules/powershell-utils/package.json","../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.development.js","../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.production.js","../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/index.js","../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/package.json","../../../../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js","../../../../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/package.json","../../../../../../node_modules/.pnpm/sql.js@1.14.2/node_modules/sql.js/dist/sql-wasm.js","../../../../../../node_modules/.pnpm/sql.js@1.14.2/node_modules/sql.js/package.json","../../../../../../node_modules/.pnpm/wsl-utils@1.0.0/node_modules/is-wsl","../../../../../../node_modules/.pnpm/wsl-utils@1.0.0/node_modules/powershell-utils","../../../../../../node_modules/.pnpm/wsl-utils@1.0.0/node_modules/wsl-utils/index.js","../../../../../../node_modules/.pnpm/wsl-utils@1.0.0/node_modules/wsl-utils/package.json","../../../../../../node_modules/.pnpm/wsl-utils@1.0.0/node_modules/wsl-utils/utilities.js","../../../../../../node_modules/next","../../../../../../node_modules/open","../../../../../../node_modules/sql.js","../../../../../../package.json","../../../../../package.json","../../../../chunks/1011.js","../../../../chunks/1126.js","../../../../chunks/1238.js","../../../../chunks/1273.js","../../../../chunks/1289.js","../../../../chunks/1316.js","../../../../chunks/2076.js","../../../../chunks/2143.js","../../../../chunks/2151.js","../../../../chunks/2225.js","../../../../chunks/2282.js","../../../../chunks/2339.js","../../../../chunks/2706.js","../../../../chunks/2801.js","../../../../chunks/3023.js","../../../../chunks/3250.js","../../../../chunks/4139.js","../../../../chunks/4301.js","../../../../chunks/4364.js","../../../../chunks/4464.js","../../../../chunks/4915.js","../../../../chunks/537.js","../../../../chunks/5761.js","../../../../chunks/6009.js","../../../../chunks/6343.js","../../../../chunks/6461.js","../../../../chunks/6823.js","../../../../chunks/7156.js","../../../../chunks/7257.js","../../../../chunks/7268.js","../../../../chunks/7459.js","../../../../chunks/7504.js","../../../../chunks/7535.js","../../../../chunks/7816.js","../../../../chunks/7963.js","../../../../chunks/8569.js","../../../../chunks/881.js","../../../../chunks/8923.js","../../../../chunks/8940.js","../../../../chunks/9018.js","../../../../chunks/9250.js","../../../../chunks/9614.js","../../../../chunks/9792.js","../../../../chunks/9817.js","../../../../webpack-runtime.js","page_client-reference-manifest.js"]}