ai-agent-router 0.2.2 → 0.2.4

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 (700) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -1
  3. package/.next/build/chunks/{[root-of-the-server]__6d51cb5d._.js → [root-of-the-server]__0iv9ksq._.js} +1 -1
  4. package/.next/build/chunks/[root-of-the-server]__0iv9ksq._.js.map +8 -0
  5. package/.next/build/chunks/{[root-of-the-server]__44695d76._.js → [root-of-the-server]__0rua-~2._.js} +30 -30
  6. package/.next/build/chunks/[root-of-the-server]__0rua-~2._.js.map +11 -0
  7. package/.next/build/chunks/{[turbopack-node]_transforms_postcss_ts_df7a5b11._.js → [turbopack-node]_transforms_postcss_ts_0nnejqq._.js} +2 -2
  8. package/.next/build/chunks/[turbopack]_runtime.js +155 -60
  9. package/.next/build/chunks/[turbopack]_runtime.js.map +6 -5
  10. package/.next/build/chunks/{node_modules_fe693df6._.js → node_modules_13sb.px._.js} +1 -1
  11. package/.next/build/chunks/{node_modules_fe693df6._.js.map → node_modules_13sb.px._.js.map} +42 -42
  12. package/.next/build/postcss.js +5 -5
  13. package/.next/build-manifest.json +8 -7
  14. package/.next/diagnostics/framework.json +1 -1
  15. package/.next/diagnostics/route-bundle-stats.json +93 -0
  16. package/.next/fallback-build-manifest.json +3 -2
  17. package/.next/images-manifest.json +1 -0
  18. package/.next/next-minimal-server.js.nft.json +1 -1
  19. package/.next/next-server.js.nft.json +1 -1
  20. package/.next/prerender-manifest.json +33 -9
  21. package/.next/required-server-files.js +18 -6
  22. package/.next/required-server-files.json +18 -6
  23. package/.next/routes-manifest.json +19 -0
  24. package/.next/server/app/_global-error/page/build-manifest.json +5 -5
  25. package/.next/server/app/_global-error/page.js +8 -9
  26. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  27. package/.next/server/app/_global-error/page_client-reference-manifest.js +2 -1
  28. package/.next/server/app/_global-error.html +1 -2
  29. package/.next/server/app/_global-error.rsc +11 -9
  30. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  31. package/.next/server/app/_global-error.segments/_full.segment.rsc +11 -9
  32. package/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  33. package/.next/server/app/_global-error.segments/_index.segment.rsc +4 -3
  34. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  35. package/.next/server/app/_not-found/page/build-manifest.json +5 -5
  36. package/.next/server/app/_not-found/page.js +11 -12
  37. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  38. package/.next/server/app/_not-found/page_client-reference-manifest.js +2 -1
  39. package/.next/server/app/_not-found.html +1 -1
  40. package/.next/server/app/_not-found.rsc +13 -11
  41. package/.next/server/app/_not-found.segments/_full.segment.rsc +13 -11
  42. package/.next/server/app/_not-found.segments/_head.segment.rsc +3 -3
  43. package/.next/server/app/_not-found.segments/_index.segment.rsc +5 -5
  44. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  45. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -3
  46. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  47. package/.next/server/app/api/config/route/build-manifest.json +1 -3
  48. package/.next/server/app/api/config/route.js +4 -4
  49. package/.next/server/app/api/config/route.js.nft.json +1 -1
  50. package/.next/server/app/api/config/route_client-reference-manifest.js +2 -1
  51. package/.next/server/app/api/gateway/[...path]/route/build-manifest.json +1 -3
  52. package/.next/server/app/api/gateway/[...path]/route.js +5 -5
  53. package/.next/server/app/api/gateway/[...path]/route.js.nft.json +1 -1
  54. package/.next/server/app/api/gateway/[...path]/route_client-reference-manifest.js +2 -1
  55. package/.next/server/app/api/gateway/models/route/build-manifest.json +1 -3
  56. package/.next/server/app/api/gateway/models/route.js +4 -4
  57. package/.next/server/app/api/gateway/models/route.js.nft.json +1 -1
  58. package/.next/server/app/api/gateway/models/route_client-reference-manifest.js +2 -1
  59. package/.next/server/app/api/gateway/route/build-manifest.json +1 -3
  60. package/.next/server/app/api/gateway/route.js +5 -5
  61. package/.next/server/app/api/gateway/route.js.nft.json +1 -1
  62. package/.next/server/app/api/gateway/route_client-reference-manifest.js +2 -1
  63. package/.next/server/app/api/ide/claude/apply/route/build-manifest.json +1 -3
  64. package/.next/server/app/api/ide/claude/apply/route.js +4 -4
  65. package/.next/server/app/api/ide/claude/apply/route.js.nft.json +1 -1
  66. package/.next/server/app/api/ide/claude/apply/route_client-reference-manifest.js +2 -1
  67. package/.next/server/app/api/ide/claude/available-models/route/build-manifest.json +1 -3
  68. package/.next/server/app/api/ide/claude/available-models/route.js +4 -4
  69. package/.next/server/app/api/ide/claude/available-models/route.js.nft.json +1 -1
  70. package/.next/server/app/api/ide/claude/available-models/route_client-reference-manifest.js +2 -1
  71. package/.next/server/app/api/ide/claude/restore/route/build-manifest.json +1 -3
  72. package/.next/server/app/api/ide/claude/restore/route.js +3 -3
  73. package/.next/server/app/api/ide/claude/restore/route.js.nft.json +1 -1
  74. package/.next/server/app/api/ide/claude/restore/route_client-reference-manifest.js +2 -1
  75. package/.next/server/app/api/ide/claude/save/route/build-manifest.json +1 -3
  76. package/.next/server/app/api/ide/claude/save/route.js +4 -4
  77. package/.next/server/app/api/ide/claude/save/route.js.nft.json +1 -1
  78. package/.next/server/app/api/ide/claude/save/route_client-reference-manifest.js +2 -1
  79. package/.next/server/app/api/ide/claude/status/route/build-manifest.json +1 -3
  80. package/.next/server/app/api/ide/claude/status/route.js +4 -4
  81. package/.next/server/app/api/ide/claude/status/route.js.nft.json +1 -1
  82. package/.next/server/app/api/ide/claude/status/route_client-reference-manifest.js +2 -1
  83. package/.next/server/app/api/ide/claude/test/route/build-manifest.json +1 -3
  84. package/.next/server/app/api/ide/claude/test/route.js +5 -5
  85. package/.next/server/app/api/ide/claude/test/route.js.nft.json +1 -1
  86. package/.next/server/app/api/ide/claude/test/route_client-reference-manifest.js +2 -1
  87. package/.next/server/app/api/ide/openclaw/apply/route/build-manifest.json +1 -3
  88. package/.next/server/app/api/ide/openclaw/apply/route.js +4 -4
  89. package/.next/server/app/api/ide/openclaw/apply/route.js.nft.json +1 -1
  90. package/.next/server/app/api/ide/openclaw/apply/route_client-reference-manifest.js +2 -1
  91. package/.next/server/app/api/ide/openclaw/available-models/route/build-manifest.json +1 -3
  92. package/.next/server/app/api/ide/openclaw/available-models/route.js +4 -4
  93. package/.next/server/app/api/ide/openclaw/available-models/route.js.nft.json +1 -1
  94. package/.next/server/app/api/ide/openclaw/available-models/route_client-reference-manifest.js +2 -1
  95. package/.next/server/app/api/ide/openclaw/preview/route/build-manifest.json +1 -3
  96. package/.next/server/app/api/ide/openclaw/preview/route.js +4 -4
  97. package/.next/server/app/api/ide/openclaw/preview/route.js.nft.json +1 -1
  98. package/.next/server/app/api/ide/openclaw/preview/route_client-reference-manifest.js +2 -1
  99. package/.next/server/app/api/ide/openclaw/restore/route/build-manifest.json +1 -3
  100. package/.next/server/app/api/ide/openclaw/restore/route.js +3 -3
  101. package/.next/server/app/api/ide/openclaw/restore/route.js.nft.json +1 -1
  102. package/.next/server/app/api/ide/openclaw/restore/route_client-reference-manifest.js +2 -1
  103. package/.next/server/app/api/ide/openclaw/save/route/build-manifest.json +1 -3
  104. package/.next/server/app/api/ide/openclaw/save/route.js +4 -4
  105. package/.next/server/app/api/ide/openclaw/save/route.js.nft.json +1 -1
  106. package/.next/server/app/api/ide/openclaw/save/route_client-reference-manifest.js +2 -1
  107. package/.next/server/app/api/ide/openclaw/status/route/build-manifest.json +1 -3
  108. package/.next/server/app/api/ide/openclaw/status/route.js +4 -4
  109. package/.next/server/app/api/ide/openclaw/status/route.js.nft.json +1 -1
  110. package/.next/server/app/api/ide/openclaw/status/route_client-reference-manifest.js +2 -1
  111. package/.next/server/app/api/ide/openclaw/test/route/build-manifest.json +1 -3
  112. package/.next/server/app/api/ide/openclaw/test/route.js +3 -3
  113. package/.next/server/app/api/ide/openclaw/test/route.js.nft.json +1 -1
  114. package/.next/server/app/api/ide/openclaw/test/route_client-reference-manifest.js +2 -1
  115. package/.next/server/app/api/ide/opencode/apply/route/build-manifest.json +1 -3
  116. package/.next/server/app/api/ide/opencode/apply/route.js +4 -4
  117. package/.next/server/app/api/ide/opencode/apply/route.js.nft.json +1 -1
  118. package/.next/server/app/api/ide/opencode/apply/route_client-reference-manifest.js +2 -1
  119. package/.next/server/app/api/ide/opencode/available-models/route/build-manifest.json +1 -3
  120. package/.next/server/app/api/ide/opencode/available-models/route.js +4 -4
  121. package/.next/server/app/api/ide/opencode/available-models/route.js.nft.json +1 -1
  122. package/.next/server/app/api/ide/opencode/available-models/route_client-reference-manifest.js +2 -1
  123. package/.next/server/app/api/ide/opencode/preview/route/build-manifest.json +1 -3
  124. package/.next/server/app/api/ide/opencode/preview/route.js +4 -4
  125. package/.next/server/app/api/ide/opencode/preview/route.js.nft.json +1 -1
  126. package/.next/server/app/api/ide/opencode/preview/route_client-reference-manifest.js +2 -1
  127. package/.next/server/app/api/ide/opencode/restore/route/build-manifest.json +1 -3
  128. package/.next/server/app/api/ide/opencode/restore/route.js +3 -3
  129. package/.next/server/app/api/ide/opencode/restore/route.js.nft.json +1 -1
  130. package/.next/server/app/api/ide/opencode/restore/route_client-reference-manifest.js +2 -1
  131. package/.next/server/app/api/ide/opencode/save/route/build-manifest.json +1 -3
  132. package/.next/server/app/api/ide/opencode/save/route.js +4 -4
  133. package/.next/server/app/api/ide/opencode/save/route.js.nft.json +1 -1
  134. package/.next/server/app/api/ide/opencode/save/route_client-reference-manifest.js +2 -1
  135. package/.next/server/app/api/ide/opencode/status/route/build-manifest.json +1 -3
  136. package/.next/server/app/api/ide/opencode/status/route.js +4 -4
  137. package/.next/server/app/api/ide/opencode/status/route.js.nft.json +1 -1
  138. package/.next/server/app/api/ide/opencode/status/route_client-reference-manifest.js +2 -1
  139. package/.next/server/app/api/ide/opencode/test/route/build-manifest.json +1 -3
  140. package/.next/server/app/api/ide/opencode/test/route.js +3 -3
  141. package/.next/server/app/api/ide/opencode/test/route.js.nft.json +1 -1
  142. package/.next/server/app/api/ide/opencode/test/route_client-reference-manifest.js +2 -1
  143. package/.next/server/app/api/logs/route/build-manifest.json +1 -3
  144. package/.next/server/app/api/logs/route.js +4 -4
  145. package/.next/server/app/api/logs/route.js.nft.json +1 -1
  146. package/.next/server/app/api/logs/route_client-reference-manifest.js +2 -1
  147. package/.next/server/app/api/models/route/build-manifest.json +1 -3
  148. package/.next/server/app/api/models/route.js +5 -5
  149. package/.next/server/app/api/models/route.js.nft.json +1 -1
  150. package/.next/server/app/api/models/route_client-reference-manifest.js +2 -1
  151. package/.next/server/app/api/providers/route/build-manifest.json +1 -3
  152. package/.next/server/app/api/providers/route.js +5 -5
  153. package/.next/server/app/api/providers/route.js.nft.json +1 -1
  154. package/.next/server/app/api/providers/route_client-reference-manifest.js +2 -1
  155. package/.next/server/app/api/providers/test/route/build-manifest.json +1 -3
  156. package/.next/server/app/api/providers/test/route.js +5 -5
  157. package/.next/server/app/api/providers/test/route.js.nft.json +1 -1
  158. package/.next/server/app/api/providers/test/route_client-reference-manifest.js +2 -1
  159. package/.next/server/app/api/service/force-stop/route/build-manifest.json +1 -3
  160. package/.next/server/app/api/service/force-stop/route.js +4 -4
  161. package/.next/server/app/api/service/force-stop/route.js.nft.json +1 -1
  162. package/.next/server/app/api/service/force-stop/route_client-reference-manifest.js +2 -1
  163. package/.next/server/app/api/service/start/route/build-manifest.json +1 -3
  164. package/.next/server/app/api/service/start/route.js +4 -4
  165. package/.next/server/app/api/service/start/route.js.nft.json +1 -1
  166. package/.next/server/app/api/service/start/route_client-reference-manifest.js +2 -1
  167. package/.next/server/app/api/service/status/route/build-manifest.json +1 -3
  168. package/.next/server/app/api/service/status/route.js +4 -4
  169. package/.next/server/app/api/service/status/route.js.nft.json +1 -1
  170. package/.next/server/app/api/service/status/route_client-reference-manifest.js +2 -1
  171. package/.next/server/app/api/service/stop/route/build-manifest.json +1 -3
  172. package/.next/server/app/api/service/stop/route.js +4 -4
  173. package/.next/server/app/api/service/stop/route.js.nft.json +1 -1
  174. package/.next/server/app/api/service/stop/route_client-reference-manifest.js +2 -1
  175. package/.next/server/app/api/tokenizer/history/route/app-paths-manifest.json +3 -0
  176. package/.next/server/app/api/tokenizer/history/route/build-manifest.json +9 -0
  177. package/.next/server/app/api/tokenizer/history/route/server-reference-manifest.json +4 -0
  178. package/.next/server/app/api/tokenizer/history/route.js +7 -0
  179. package/.next/server/app/api/tokenizer/history/route.js.map +5 -0
  180. package/.next/server/app/api/tokenizer/history/route.js.nft.json +1 -0
  181. package/.next/server/app/api/tokenizer/history/route_client-reference-manifest.js +3 -0
  182. package/.next/server/app/api/tokenizer/test/route/app-paths-manifest.json +3 -0
  183. package/.next/server/app/api/tokenizer/test/route/build-manifest.json +9 -0
  184. package/.next/server/app/api/tokenizer/test/route/server-reference-manifest.json +4 -0
  185. package/.next/server/app/api/tokenizer/test/route.js +8 -0
  186. package/.next/server/app/api/tokenizer/test/route.js.map +5 -0
  187. package/.next/server/app/api/tokenizer/test/route.js.nft.json +1 -0
  188. package/.next/server/app/api/tokenizer/test/route_client-reference-manifest.js +3 -0
  189. package/.next/server/app/ide/page/build-manifest.json +5 -5
  190. package/.next/server/app/ide/page.js +12 -14
  191. package/.next/server/app/ide/page.js.nft.json +1 -1
  192. package/.next/server/app/ide/page_client-reference-manifest.js +2 -1
  193. package/.next/server/app/ide.html +1 -1
  194. package/.next/server/app/ide.rsc +15 -13
  195. package/.next/server/app/ide.segments/_full.segment.rsc +15 -13
  196. package/.next/server/app/ide.segments/_head.segment.rsc +3 -3
  197. package/.next/server/app/ide.segments/_index.segment.rsc +5 -5
  198. package/.next/server/app/ide.segments/_tree.segment.rsc +2 -2
  199. package/.next/server/app/ide.segments/ide/__PAGE__.segment.rsc +4 -4
  200. package/.next/server/app/ide.segments/ide.segment.rsc +4 -3
  201. package/.next/server/app/index.html +1 -1
  202. package/.next/server/app/index.rsc +11 -11
  203. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  204. package/.next/server/app/index.segments/_full.segment.rsc +11 -11
  205. package/.next/server/app/index.segments/_head.segment.rsc +3 -3
  206. package/.next/server/app/index.segments/_index.segment.rsc +5 -5
  207. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  208. package/.next/server/app/logs/page/build-manifest.json +5 -5
  209. package/.next/server/app/logs/page.js +12 -14
  210. package/.next/server/app/logs/page.js.nft.json +1 -1
  211. package/.next/server/app/logs/page_client-reference-manifest.js +2 -1
  212. package/.next/server/app/logs.html +1 -1
  213. package/.next/server/app/logs.rsc +15 -13
  214. package/.next/server/app/logs.segments/_full.segment.rsc +15 -13
  215. package/.next/server/app/logs.segments/_head.segment.rsc +3 -3
  216. package/.next/server/app/logs.segments/_index.segment.rsc +5 -5
  217. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  218. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +4 -4
  219. package/.next/server/app/logs.segments/logs.segment.rsc +4 -3
  220. package/.next/server/app/models/page/build-manifest.json +5 -5
  221. package/.next/server/app/models/page.js +12 -14
  222. package/.next/server/app/models/page.js.nft.json +1 -1
  223. package/.next/server/app/models/page_client-reference-manifest.js +2 -1
  224. package/.next/server/app/models.html +1 -1
  225. package/.next/server/app/models.rsc +15 -13
  226. package/.next/server/app/models.segments/_full.segment.rsc +15 -13
  227. package/.next/server/app/models.segments/_head.segment.rsc +3 -3
  228. package/.next/server/app/models.segments/_index.segment.rsc +5 -5
  229. package/.next/server/app/models.segments/_tree.segment.rsc +2 -2
  230. package/.next/server/app/models.segments/models/__PAGE__.segment.rsc +4 -4
  231. package/.next/server/app/models.segments/models.segment.rsc +4 -3
  232. package/.next/server/app/page/build-manifest.json +5 -5
  233. package/.next/server/app/page.js +12 -14
  234. package/.next/server/app/page.js.nft.json +1 -1
  235. package/.next/server/app/page_client-reference-manifest.js +2 -1
  236. package/.next/server/app/providers/page/build-manifest.json +5 -5
  237. package/.next/server/app/providers/page.js +12 -14
  238. package/.next/server/app/providers/page.js.nft.json +1 -1
  239. package/.next/server/app/providers/page_client-reference-manifest.js +2 -1
  240. package/.next/server/app/providers.html +1 -1
  241. package/.next/server/app/providers.rsc +15 -13
  242. package/.next/server/app/providers.segments/_full.segment.rsc +15 -13
  243. package/.next/server/app/providers.segments/_head.segment.rsc +3 -3
  244. package/.next/server/app/providers.segments/_index.segment.rsc +5 -5
  245. package/.next/server/app/providers.segments/_tree.segment.rsc +2 -2
  246. package/.next/server/app/providers.segments/providers/__PAGE__.segment.rsc +4 -4
  247. package/.next/server/app/providers.segments/providers.segment.rsc +4 -3
  248. package/.next/server/app/tokenizer/page/app-paths-manifest.json +3 -0
  249. package/.next/server/app/tokenizer/page/build-manifest.json +16 -0
  250. package/.next/server/app/tokenizer/page/next-font-manifest.json +6 -0
  251. package/.next/server/app/tokenizer/page/react-loadable-manifest.json +1 -0
  252. package/.next/server/app/tokenizer/page/server-reference-manifest.json +4 -0
  253. package/.next/server/app/tokenizer/page.js +13 -0
  254. package/.next/server/app/tokenizer/page.js.map +5 -0
  255. package/.next/server/app/tokenizer/page.js.nft.json +1 -0
  256. package/.next/server/app/tokenizer/page_client-reference-manifest.js +3 -0
  257. package/.next/server/app/tokenizer.html +1 -0
  258. package/.next/server/app/tokenizer.meta +15 -0
  259. package/.next/server/app/tokenizer.rsc +20 -0
  260. package/.next/server/app/tokenizer.segments/_full.segment.rsc +20 -0
  261. package/.next/server/app/tokenizer.segments/_head.segment.rsc +5 -0
  262. package/.next/server/app/tokenizer.segments/_index.segment.rsc +6 -0
  263. package/.next/server/app/tokenizer.segments/_tree.segment.rsc +2 -0
  264. package/.next/server/app/tokenizer.segments/tokenizer/__PAGE__.segment.rsc +9 -0
  265. package/.next/server/app/tokenizer.segments/tokenizer.segment.rsc +5 -0
  266. package/.next/server/app-paths-manifest.json +4 -1
  267. package/.next/server/chunks/0zjb_server_app_api_ide_openclaw_available-models_route_actions_0.gjr6a.js +3 -0
  268. package/.next/server/chunks/0zjb_server_app_api_ide_opencode_available-models_route_actions_0poyhyk.js +3 -0
  269. package/.next/server/chunks/[root-of-the-server]__0-_5z3v._.js +3 -0
  270. package/.next/server/chunks/[root-of-the-server]__0-_5z3v._.js.map +1 -0
  271. package/.next/server/chunks/[root-of-the-server]__012ucp~._.js +3 -0
  272. package/.next/server/chunks/[root-of-the-server]__012ucp~._.js.map +1 -0
  273. package/.next/server/chunks/[root-of-the-server]__01atdgx._.js +3 -0
  274. package/.next/server/chunks/[root-of-the-server]__01atdgx._.js.map +1 -0
  275. package/.next/server/chunks/[root-of-the-server]__01~ft76._.js +3 -0
  276. package/.next/server/chunks/[root-of-the-server]__01~ft76._.js.map +1 -0
  277. package/.next/server/chunks/[root-of-the-server]__04sfkei._.js +3 -0
  278. package/.next/server/chunks/[root-of-the-server]__04sfkei._.js.map +1 -0
  279. package/.next/server/chunks/[root-of-the-server]__065r.wp._.js +3 -0
  280. package/.next/server/chunks/[root-of-the-server]__065r.wp._.js.map +1 -0
  281. package/.next/server/chunks/[root-of-the-server]__07pm7px._.js +3 -0
  282. package/.next/server/chunks/[root-of-the-server]__07pm7px._.js.map +1 -0
  283. package/.next/server/chunks/[root-of-the-server]__07vosna._.js +3 -0
  284. package/.next/server/chunks/[root-of-the-server]__07vosna._.js.map +1 -0
  285. package/.next/server/chunks/[root-of-the-server]__083j1v0._.js +3 -0
  286. package/.next/server/chunks/[root-of-the-server]__083j1v0._.js.map +1 -0
  287. package/.next/server/chunks/[root-of-the-server]__08_ekvs._.js +3 -0
  288. package/.next/server/chunks/[root-of-the-server]__08_ekvs._.js.map +1 -0
  289. package/.next/server/chunks/[root-of-the-server]__08ftz8n._.js +3 -0
  290. package/.next/server/chunks/[root-of-the-server]__08ftz8n._.js.map +1 -0
  291. package/.next/server/chunks/[root-of-the-server]__08oq8ma._.js +3 -0
  292. package/.next/server/chunks/[root-of-the-server]__08oq8ma._.js.map +1 -0
  293. package/.next/server/chunks/[root-of-the-server]__099b1my._.js +3 -0
  294. package/.next/server/chunks/[root-of-the-server]__099b1my._.js.map +1 -0
  295. package/.next/server/chunks/[root-of-the-server]__0aw-~h8._.js +3 -0
  296. package/.next/server/chunks/[root-of-the-server]__0aw-~h8._.js.map +1 -0
  297. package/.next/server/chunks/[root-of-the-server]__0dj43ut._.js +3 -0
  298. package/.next/server/chunks/[root-of-the-server]__0dj43ut._.js.map +1 -0
  299. package/.next/server/chunks/[root-of-the-server]__0efv_yh._.js +3 -0
  300. package/.next/server/chunks/[root-of-the-server]__0efv_yh._.js.map +1 -0
  301. package/.next/server/chunks/[root-of-the-server]__0el37wu._.js +7 -0
  302. package/.next/server/chunks/[root-of-the-server]__0el37wu._.js.map +1 -0
  303. package/.next/server/chunks/[root-of-the-server]__0g.1w-q._.js +3 -0
  304. package/.next/server/chunks/[root-of-the-server]__0g.1w-q._.js.map +1 -0
  305. package/.next/server/chunks/[root-of-the-server]__0im~-m7._.js +3 -0
  306. package/.next/server/chunks/[root-of-the-server]__0im~-m7._.js.map +1 -0
  307. package/.next/server/chunks/[root-of-the-server]__0jf1q27._.js +3 -0
  308. package/.next/server/chunks/[root-of-the-server]__0jf1q27._.js.map +1 -0
  309. package/.next/server/chunks/[root-of-the-server]__0kldv62._.js +3 -0
  310. package/.next/server/chunks/[root-of-the-server]__0kldv62._.js.map +1 -0
  311. package/.next/server/chunks/[root-of-the-server]__0lr16iw._.js +3 -0
  312. package/.next/server/chunks/[root-of-the-server]__0lr16iw._.js.map +1 -0
  313. package/.next/server/chunks/[root-of-the-server]__0m62mql._.js +3 -0
  314. package/.next/server/chunks/[root-of-the-server]__0m62mql._.js.map +1 -0
  315. package/.next/server/chunks/[root-of-the-server]__0qp1t_m._.js +3 -0
  316. package/.next/server/chunks/[root-of-the-server]__0qp1t_m._.js.map +1 -0
  317. package/.next/server/chunks/[root-of-the-server]__0qz-m.u._.js +3 -0
  318. package/.next/server/chunks/[root-of-the-server]__0qz-m.u._.js.map +1 -0
  319. package/.next/server/chunks/[root-of-the-server]__0r235yd._.js +3 -0
  320. package/.next/server/chunks/[root-of-the-server]__0r235yd._.js.map +1 -0
  321. package/.next/server/chunks/[root-of-the-server]__0rjkw2y._.js +3 -0
  322. package/.next/server/chunks/[root-of-the-server]__0rjkw2y._.js.map +1 -0
  323. package/.next/server/chunks/[root-of-the-server]__0uaqs.r._.js +3 -0
  324. package/.next/server/chunks/[root-of-the-server]__0uaqs.r._.js.map +1 -0
  325. package/.next/server/chunks/[root-of-the-server]__0vktxod._.js +3 -0
  326. package/.next/server/chunks/[root-of-the-server]__0vktxod._.js.map +1 -0
  327. package/.next/server/chunks/[root-of-the-server]__0vlh9um._.js +3 -0
  328. package/.next/server/chunks/[root-of-the-server]__0vlh9um._.js.map +1 -0
  329. package/.next/server/chunks/{[root-of-the-server]__c1b4b601._.js → [root-of-the-server]__0xb5i_t._.js} +21 -9
  330. package/.next/server/chunks/[root-of-the-server]__0xb5i_t._.js.map +1 -0
  331. package/.next/server/chunks/[root-of-the-server]__0xsal5d._.js +3 -0
  332. package/.next/server/chunks/[root-of-the-server]__0xsal5d._.js.map +1 -0
  333. package/.next/server/chunks/[root-of-the-server]__0yo.c6n._.js +3 -0
  334. package/.next/server/chunks/[root-of-the-server]__0yo.c6n._.js.map +1 -0
  335. package/.next/server/chunks/[root-of-the-server]__0yz0y4l._.js +13 -0
  336. package/.next/server/chunks/[root-of-the-server]__0yz0y4l._.js.map +1 -0
  337. package/.next/server/chunks/{[root-of-the-server]__e7623a6c._.js → [root-of-the-server]__11srlmi._.js} +2 -2
  338. package/.next/server/chunks/{[root-of-the-server]__e7623a6c._.js.map → [root-of-the-server]__11srlmi._.js.map} +1 -1
  339. package/.next/server/chunks/[root-of-the-server]__12d44rt._.js +3 -0
  340. package/.next/server/chunks/[root-of-the-server]__12d44rt._.js.map +1 -0
  341. package/.next/server/chunks/[turbopack]_runtime.js +168 -60
  342. package/.next/server/chunks/[turbopack]_runtime.js.map +6 -5
  343. package/.next/server/chunks/_0v0oe6c._.js +3 -0
  344. package/.next/server/chunks/{_b48847f5._.js.map → _0v0oe6c._.js.map} +1 -1
  345. package/.next/server/chunks/{_next-internal_server_app_api_config_route_actions_308a9f33.js → _next-internal_server_app_api_config_route_actions_08dm.dx.js} +1 -1
  346. package/.next/server/chunks/{_next-internal_server_app_api_gateway_[___path]_route_actions_835b2379.js → _next-internal_server_app_api_gateway_[___path]_route_actions_0mmqyo7.js} +1 -1
  347. package/.next/server/chunks/{_next-internal_server_app_api_gateway_models_route_actions_302c9983.js → _next-internal_server_app_api_gateway_models_route_actions_08b214z.js} +1 -1
  348. package/.next/server/chunks/{_next-internal_server_app_api_gateway_route_actions_e5e7405d.js → _next-internal_server_app_api_gateway_route_actions_0.jzdw1.js} +1 -1
  349. package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_apply_route_actions_5056516c.js → _next-internal_server_app_api_ide_claude_apply_route_actions_0dw2_pf.js} +1 -1
  350. package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_available-models_route_actions_94d710a0.js → _next-internal_server_app_api_ide_claude_available-models_route_actions_0pmwy75.js} +1 -1
  351. package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_restore_route_actions_f37acc94.js → _next-internal_server_app_api_ide_claude_restore_route_actions_11x77hl.js} +1 -1
  352. package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_save_route_actions_407c55f5.js → _next-internal_server_app_api_ide_claude_save_route_actions_0b35ro_.js} +1 -1
  353. package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_status_route_actions_5ac73db8.js → _next-internal_server_app_api_ide_claude_status_route_actions_0fnw-w7.js} +1 -1
  354. package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_test_route_actions_70587902.js → _next-internal_server_app_api_ide_claude_test_route_actions_0jc1czy.js} +1 -1
  355. package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_apply_route_actions_2cb9e4b4.js → _next-internal_server_app_api_ide_openclaw_apply_route_actions_07re971.js} +1 -1
  356. package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_preview_route_actions_9814a8e4.js → _next-internal_server_app_api_ide_openclaw_preview_route_actions_0q53p05.js} +1 -1
  357. package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_restore_route_actions_10ad8f9d.js → _next-internal_server_app_api_ide_openclaw_restore_route_actions_02yog9-.js} +1 -1
  358. package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_save_route_actions_044ad081.js → _next-internal_server_app_api_ide_openclaw_save_route_actions_00tjxsz.js} +1 -1
  359. package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_status_route_actions_ed9786d2.js → _next-internal_server_app_api_ide_openclaw_status_route_actions_10wsun4.js} +1 -1
  360. package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_test_route_actions_ce2cb808.js → _next-internal_server_app_api_ide_openclaw_test_route_actions_0zgwyon.js} +1 -1
  361. package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_apply_route_actions_6c422244.js → _next-internal_server_app_api_ide_opencode_apply_route_actions_0in-w.g.js} +1 -1
  362. package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_preview_route_actions_256c82e0.js → _next-internal_server_app_api_ide_opencode_preview_route_actions_06h6.w~.js} +1 -1
  363. package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_restore_route_actions_371993d3.js → _next-internal_server_app_api_ide_opencode_restore_route_actions_09ipt-l.js} +1 -1
  364. package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_save_route_actions_6e4c9c41.js → _next-internal_server_app_api_ide_opencode_save_route_actions_0i-~x79.js} +1 -1
  365. package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_status_route_actions_498ad77b.js → _next-internal_server_app_api_ide_opencode_status_route_actions_0cpf6rv.js} +1 -1
  366. package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_test_route_actions_c71be510.js → _next-internal_server_app_api_ide_opencode_test_route_actions_0y8aq8h.js} +1 -1
  367. package/.next/server/chunks/{_next-internal_server_app_api_logs_route_actions_30a87f47.js → _next-internal_server_app_api_logs_route_actions_08ef2j7.js} +1 -1
  368. package/.next/server/chunks/{_next-internal_server_app_api_models_route_actions_b6abdc83.js → _next-internal_server_app_api_models_route_actions_0vfccm4.js} +1 -1
  369. package/.next/server/chunks/{_next-internal_server_app_api_providers_route_actions_5388b373.js → _next-internal_server_app_api_providers_route_actions_0ee1p_m.js} +1 -1
  370. package/.next/server/chunks/{_next-internal_server_app_api_providers_test_route_actions_b97ab15a.js → _next-internal_server_app_api_providers_test_route_actions_0vyo652.js} +1 -1
  371. package/.next/server/chunks/{_next-internal_server_app_api_service_force-stop_route_actions_95eba80b.js → _next-internal_server_app_api_service_force-stop_route_actions_0pu9xrq.js} +1 -1
  372. package/.next/server/chunks/{_next-internal_server_app_api_service_start_route_actions_d50efb77.js → _next-internal_server_app_api_service_start_route_actions_0_o53a2.js} +1 -1
  373. package/.next/server/chunks/{_next-internal_server_app_api_service_status_route_actions_30149042.js → _next-internal_server_app_api_service_status_route_actions_08ag8v4.js} +1 -1
  374. package/.next/server/chunks/{_next-internal_server_app_api_service_stop_route_actions_19443941.js → _next-internal_server_app_api_service_stop_route_actions_04dp83p.js} +1 -1
  375. package/.next/server/chunks/_next-internal_server_app_api_tokenizer_history_route_actions_09~nqtd.js +3 -0
  376. package/.next/server/chunks/_next-internal_server_app_api_tokenizer_test_route_actions_0t2swp-.js +3 -0
  377. package/.next/server/chunks/{node_modules_next_dist_esm_build_templates_app-route_4be65264.js → node_modules_next_dist_esm_build_templates_app-route_0d1n5~u.js} +6 -6
  378. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0d1n5~u.js.map +1 -0
  379. package/.next/server/chunks/ssr/[root-of-the-server]__0.zquoa._.js +3 -0
  380. package/.next/server/chunks/ssr/[root-of-the-server]__0.zquoa._.js.map +1 -0
  381. package/.next/server/chunks/ssr/[root-of-the-server]__01dqyhh._.js +3 -0
  382. package/.next/server/chunks/ssr/[root-of-the-server]__01dqyhh._.js.map +1 -0
  383. package/.next/server/chunks/ssr/[root-of-the-server]__04qwc64._.js +3 -0
  384. package/.next/server/chunks/ssr/[root-of-the-server]__04qwc64._.js.map +1 -0
  385. package/.next/server/chunks/ssr/[root-of-the-server]__06r_ug4._.js +3 -0
  386. package/.next/server/chunks/ssr/[root-of-the-server]__06r_ug4._.js.map +1 -0
  387. package/.next/server/chunks/ssr/{[root-of-the-server]__f92001a5._.js → [root-of-the-server]__0814l01._.js} +2 -2
  388. package/.next/server/chunks/ssr/[root-of-the-server]__0814l01._.js.map +1 -0
  389. package/.next/server/chunks/ssr/[root-of-the-server]__0gb1hlj._.js +3 -0
  390. package/.next/server/chunks/ssr/[root-of-the-server]__0gb1hlj._.js.map +1 -0
  391. package/.next/server/chunks/ssr/[root-of-the-server]__0p8tmu2._.js +3 -0
  392. package/.next/server/chunks/ssr/[root-of-the-server]__0p8tmu2._.js.map +1 -0
  393. package/.next/server/chunks/ssr/[root-of-the-server]__0rf3.7n._.js +3 -0
  394. package/.next/server/chunks/ssr/[root-of-the-server]__0rf3.7n._.js.map +1 -0
  395. package/.next/server/chunks/ssr/[root-of-the-server]__0~6rwng._.js +33 -0
  396. package/.next/server/chunks/ssr/[root-of-the-server]__0~6rwng._.js.map +1 -0
  397. package/.next/server/chunks/ssr/[root-of-the-server]__10xgshr._.js +33 -0
  398. package/.next/server/chunks/ssr/[root-of-the-server]__10xgshr._.js.map +1 -0
  399. package/.next/server/chunks/ssr/[root-of-the-server]__11i~7lq._.js +3 -0
  400. package/.next/server/chunks/ssr/[root-of-the-server]__11i~7lq._.js.map +1 -0
  401. package/.next/server/chunks/ssr/[turbopack]_runtime.js +168 -60
  402. package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +6 -5
  403. package/.next/server/chunks/ssr/_0k83omg._.js +6 -0
  404. package/.next/server/chunks/ssr/_0k83omg._.js.map +1 -0
  405. package/.next/server/chunks/ssr/_0yyi5po._.js +3 -0
  406. package/.next/server/chunks/ssr/_0yyi5po._.js.map +1 -0
  407. package/.next/server/chunks/ssr/{_next-internal_server_app__global-error_page_actions_75761787.js → _next-internal_server_app__global-error_page_actions_0k77kol.js} +1 -1
  408. package/.next/server/chunks/ssr/{_next-internal_server_app__not-found_page_actions_554ec2bf.js → _next-internal_server_app__not-found_page_actions_0eq97pa.js} +1 -1
  409. package/.next/server/chunks/ssr/{_next-internal_server_app_ide_page_actions_d521d6ae.js → _next-internal_server_app_ide_page_actions_0_opd4~.js} +1 -1
  410. package/.next/server/chunks/ssr/{_next-internal_server_app_logs_page_actions_a1c69041.js → _next-internal_server_app_logs_page_actions_0rvsl~d.js} +1 -1
  411. package/.next/server/chunks/ssr/{_next-internal_server_app_models_page_actions_543cf22f.js → _next-internal_server_app_models_page_actions_0eiz7f7.js} +1 -1
  412. package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js +3 -0
  413. package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js.map +1 -0
  414. package/.next/server/chunks/ssr/{_next-internal_server_app_providers_page_actions_c75f6cb3.js → _next-internal_server_app_providers_page_actions_0ya36nw.js} +1 -1
  415. package/.next/server/chunks/ssr/_next-internal_server_app_providers_page_actions_0ya36nw.js.map +1 -0
  416. package/.next/server/chunks/ssr/_next-internal_server_app_tokenizer_page_actions_0imc_ya.js +3 -0
  417. package/.next/server/chunks/ssr/_next-internal_server_app_tokenizer_page_actions_0imc_ya.js.map +1 -0
  418. package/.next/server/chunks/ssr/node_modules_09w7yel._.js +33 -0
  419. package/.next/server/chunks/ssr/node_modules_09w7yel._.js.map +1 -0
  420. package/.next/server/chunks/ssr/node_modules_next_dist_06hehg4._.js +19 -0
  421. package/.next/server/chunks/ssr/node_modules_next_dist_06hehg4._.js.map +1 -0
  422. package/.next/server/chunks/ssr/node_modules_next_dist_0e1izl_._.js +6 -0
  423. package/.next/server/chunks/ssr/node_modules_next_dist_0e1izl_._.js.map +1 -0
  424. package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_9774470f._.js → node_modules_next_dist_client_components_0inhx6q._.js} +2 -2
  425. package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_builtin_forbidden_45780354.js → node_modules_next_dist_client_components_builtin_forbidden_0ghu-f7.js} +2 -2
  426. package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_builtin_global-error_ece394eb.js → node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js} +2 -2
  427. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js.map +1 -0
  428. package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_builtin_unauthorized_15817684.js → node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js} +2 -2
  429. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_05u.ff5.js +4 -0
  430. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_05u.ff5.js.map +1 -0
  431. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06a5k-w.js +4 -0
  432. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06a5k-w.js.map +1 -0
  433. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0_rrdx6.js +4 -0
  434. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0_rrdx6.js.map +1 -0
  435. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a7b~p7.js +4 -0
  436. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a7b~p7.js.map +1 -0
  437. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bj8dkg.js +4 -0
  438. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bj8dkg.js.map +1 -0
  439. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0cvrgh7.js +4 -0
  440. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0cvrgh7.js.map +1 -0
  441. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0nkcfme.js +4 -0
  442. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0nkcfme.js.map +1 -0
  443. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js +4 -0
  444. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js.map +1 -0
  445. package/.next/server/chunks/ssr/src_app_components_ConfirmDialog_tsx_0mm3plr._.js +3 -0
  446. package/.next/server/chunks/ssr/src_app_components_ConfirmDialog_tsx_0mm3plr._.js.map +1 -0
  447. package/.next/server/chunks/ssr/src_app_ide_page_tsx_0no40dj._.js +3 -0
  448. package/.next/server/chunks/ssr/{src_app_ide_page_tsx_8962793b._.js.map → src_app_ide_page_tsx_0no40dj._.js.map} +1 -1
  449. package/.next/server/chunks/ssr/src_app_logs_page_tsx_0l8mmxe._.js +3 -0
  450. package/.next/server/chunks/ssr/{src_app_logs_page_tsx_7b7b7b83._.js.map → src_app_logs_page_tsx_0l8mmxe._.js.map} +1 -1
  451. package/.next/server/chunks/ssr/src_app_models_page_tsx_10vsbc1._.js +3 -0
  452. package/.next/server/chunks/ssr/{src_app_models_page_tsx_ed71d32e._.js.map → src_app_models_page_tsx_10vsbc1._.js.map} +1 -1
  453. package/.next/server/chunks/ssr/src_app_page_tsx_0ss2.w7._.js +3 -0
  454. package/.next/server/chunks/ssr/src_app_page_tsx_0ss2.w7._.js.map +1 -0
  455. package/.next/server/chunks/ssr/src_app_providers_page_tsx_10ipz~8._.js +3 -0
  456. package/.next/server/chunks/ssr/{src_app_providers_page_tsx_eb8b5137._.js.map → src_app_providers_page_tsx_10ipz~8._.js.map} +1 -1
  457. package/.next/server/chunks/ssr/src_app_tokenizer_page_tsx_0eqhpbs._.js +3 -0
  458. package/.next/server/chunks/ssr/src_app_tokenizer_page_tsx_0eqhpbs._.js.map +1 -0
  459. package/.next/server/functions-config-manifest.json +3 -1
  460. package/.next/server/middleware-build-manifest.js +10 -10
  461. package/.next/server/pages/404.html +1 -1
  462. package/.next/server/pages/500.html +1 -2
  463. package/.next/server/prefetch-hints.json +1 -0
  464. package/.next/server/server-reference-manifest.js +1 -1
  465. package/.next/server/server-reference-manifest.json +1 -1
  466. package/.next/static/XHnu7Z1vWSrgmneps8rX4/_clientMiddlewareManifest.js +1 -0
  467. package/.next/static/chunks/01xlw8hd842-c.js +1 -0
  468. package/.next/static/chunks/0bzupvr5gt3k9.js +31 -0
  469. package/.next/static/chunks/0d3shmwh5_nmn.js +1 -0
  470. package/.next/static/chunks/0h7-_zr5_nt.5.js +1 -0
  471. package/.next/static/chunks/0mjx90nkvhsot.js +1 -0
  472. package/.next/static/chunks/0ntp1qkrtsgn0.js +1 -0
  473. package/.next/static/chunks/0tc5l6c1zalyc.css +1 -0
  474. package/.next/static/chunks/0v7.1nc4jyaet.js +1 -0
  475. package/.next/static/chunks/0vlwn301rv7dw.js +1 -0
  476. package/.next/static/chunks/0y3~cortx~or~.js +5 -0
  477. package/.next/static/chunks/0~c9fm3-3-f41.js +1 -0
  478. package/.next/static/chunks/11-7_fybhp2~y.js +1 -0
  479. package/.next/static/chunks/121-ofr4.6_5t.js +1 -0
  480. package/.next/static/chunks/16g.ca89g7fib.js +1 -0
  481. package/.next/static/chunks/turbopack-0griofc2i3wvs.js +1 -0
  482. package/.next/types/routes.d.ts +5 -2
  483. package/.next/types/validator.ts +27 -0
  484. package/CHANGELOG.md +15 -0
  485. package/README.md +6 -0
  486. package/dist/.next/dev/types/validator.js +12 -0
  487. package/dist/.next/types/validator.js +12 -0
  488. package/dist/package.json +3 -2
  489. package/dist/src/app/api/tokenizer/history/route.js +60 -0
  490. package/dist/src/app/api/tokenizer/test/route.js +97 -0
  491. package/dist/src/app/components/Nav.js +2 -1
  492. package/dist/src/app/tokenizer/page.js +318 -0
  493. package/dist/src/cli/index.js +3 -3
  494. package/dist/src/db/database.js +19 -21
  495. package/dist/src/db/queries.js +21 -0
  496. package/dist/src/server/tokenizer.js +215 -0
  497. package/package.json +3 -2
  498. package/src/app/api/tokenizer/history/route.ts +63 -0
  499. package/src/app/api/tokenizer/test/route.ts +151 -0
  500. package/src/app/components/Nav.tsx +2 -2
  501. package/src/app/tokenizer/page.tsx +813 -0
  502. package/src/cli/index.ts +4 -4
  503. package/src/db/database.ts +18 -25
  504. package/src/db/queries.ts +22 -0
  505. package/src/server/tokenizer.ts +285 -0
  506. package/.next/build/chunks/[root-of-the-server]__44695d76._.js.map +0 -11
  507. package/.next/build/chunks/[root-of-the-server]__6d51cb5d._.js.map +0 -8
  508. package/.next/server/chunks/[root-of-the-server]__001d5756._.js +0 -3
  509. package/.next/server/chunks/[root-of-the-server]__001d5756._.js.map +0 -1
  510. package/.next/server/chunks/[root-of-the-server]__05f8578b._.js +0 -3
  511. package/.next/server/chunks/[root-of-the-server]__05f8578b._.js.map +0 -1
  512. package/.next/server/chunks/[root-of-the-server]__1480f018._.js +0 -3
  513. package/.next/server/chunks/[root-of-the-server]__1480f018._.js.map +0 -1
  514. package/.next/server/chunks/[root-of-the-server]__1909f3aa._.js +0 -3
  515. package/.next/server/chunks/[root-of-the-server]__1909f3aa._.js.map +0 -1
  516. package/.next/server/chunks/[root-of-the-server]__1d4b7fc5._.js +0 -3
  517. package/.next/server/chunks/[root-of-the-server]__1d4b7fc5._.js.map +0 -1
  518. package/.next/server/chunks/[root-of-the-server]__33fec899._.js +0 -3
  519. package/.next/server/chunks/[root-of-the-server]__33fec899._.js.map +0 -1
  520. package/.next/server/chunks/[root-of-the-server]__372ef2bf._.js +0 -3
  521. package/.next/server/chunks/[root-of-the-server]__372ef2bf._.js.map +0 -1
  522. package/.next/server/chunks/[root-of-the-server]__3a204d25._.js +0 -3
  523. package/.next/server/chunks/[root-of-the-server]__3a204d25._.js.map +0 -1
  524. package/.next/server/chunks/[root-of-the-server]__3aaf963c._.js +0 -3
  525. package/.next/server/chunks/[root-of-the-server]__3aaf963c._.js.map +0 -1
  526. package/.next/server/chunks/[root-of-the-server]__43810962._.js +0 -3
  527. package/.next/server/chunks/[root-of-the-server]__43810962._.js.map +0 -1
  528. package/.next/server/chunks/[root-of-the-server]__4a8f9bc7._.js +0 -3
  529. package/.next/server/chunks/[root-of-the-server]__4a8f9bc7._.js.map +0 -1
  530. package/.next/server/chunks/[root-of-the-server]__55cd88b8._.js +0 -3
  531. package/.next/server/chunks/[root-of-the-server]__55cd88b8._.js.map +0 -1
  532. package/.next/server/chunks/[root-of-the-server]__59aacd30._.js +0 -21
  533. package/.next/server/chunks/[root-of-the-server]__59aacd30._.js.map +0 -1
  534. package/.next/server/chunks/[root-of-the-server]__5e8276bc._.js +0 -3
  535. package/.next/server/chunks/[root-of-the-server]__5e8276bc._.js.map +0 -1
  536. package/.next/server/chunks/[root-of-the-server]__64356cb2._.js +0 -3
  537. package/.next/server/chunks/[root-of-the-server]__64356cb2._.js.map +0 -1
  538. package/.next/server/chunks/[root-of-the-server]__6ce199d2._.js +0 -3
  539. package/.next/server/chunks/[root-of-the-server]__6ce199d2._.js.map +0 -1
  540. package/.next/server/chunks/[root-of-the-server]__760eaa16._.js +0 -3
  541. package/.next/server/chunks/[root-of-the-server]__760eaa16._.js.map +0 -1
  542. package/.next/server/chunks/[root-of-the-server]__772134c6._.js +0 -3
  543. package/.next/server/chunks/[root-of-the-server]__772134c6._.js.map +0 -1
  544. package/.next/server/chunks/[root-of-the-server]__7b77f523._.js +0 -3
  545. package/.next/server/chunks/[root-of-the-server]__7b77f523._.js.map +0 -1
  546. package/.next/server/chunks/[root-of-the-server]__7c298a19._.js +0 -3
  547. package/.next/server/chunks/[root-of-the-server]__7c298a19._.js.map +0 -1
  548. package/.next/server/chunks/[root-of-the-server]__85540228._.js +0 -3
  549. package/.next/server/chunks/[root-of-the-server]__85540228._.js.map +0 -1
  550. package/.next/server/chunks/[root-of-the-server]__94fe8d3c._.js +0 -3
  551. package/.next/server/chunks/[root-of-the-server]__94fe8d3c._.js.map +0 -1
  552. package/.next/server/chunks/[root-of-the-server]__97622908._.js +0 -3
  553. package/.next/server/chunks/[root-of-the-server]__97622908._.js.map +0 -1
  554. package/.next/server/chunks/[root-of-the-server]__a02e6618._.js +0 -3
  555. package/.next/server/chunks/[root-of-the-server]__a02e6618._.js.map +0 -1
  556. package/.next/server/chunks/[root-of-the-server]__a32a20a7._.js +0 -3
  557. package/.next/server/chunks/[root-of-the-server]__a32a20a7._.js.map +0 -1
  558. package/.next/server/chunks/[root-of-the-server]__a719d045._.js +0 -3
  559. package/.next/server/chunks/[root-of-the-server]__a719d045._.js.map +0 -1
  560. package/.next/server/chunks/[root-of-the-server]__af5b556a._.js +0 -3
  561. package/.next/server/chunks/[root-of-the-server]__af5b556a._.js.map +0 -1
  562. package/.next/server/chunks/[root-of-the-server]__c1b4b601._.js.map +0 -1
  563. package/.next/server/chunks/[root-of-the-server]__cafe113e._.js +0 -3
  564. package/.next/server/chunks/[root-of-the-server]__cafe113e._.js.map +0 -1
  565. package/.next/server/chunks/[root-of-the-server]__ccfc7f1d._.js +0 -3
  566. package/.next/server/chunks/[root-of-the-server]__ccfc7f1d._.js.map +0 -1
  567. package/.next/server/chunks/[root-of-the-server]__dc8b0bed._.js +0 -3
  568. package/.next/server/chunks/[root-of-the-server]__dc8b0bed._.js.map +0 -1
  569. package/.next/server/chunks/[root-of-the-server]__f0461b8d._.js +0 -3
  570. package/.next/server/chunks/[root-of-the-server]__f0461b8d._.js.map +0 -1
  571. package/.next/server/chunks/[root-of-the-server]__f8949f88._.js +0 -3
  572. package/.next/server/chunks/[root-of-the-server]__f8949f88._.js.map +0 -1
  573. package/.next/server/chunks/_b48847f5._.js +0 -3
  574. package/.next/server/chunks/ce889_server_app_api_ide_openclaw_available-models_route_actions_e568e70b.js +0 -3
  575. package/.next/server/chunks/ce889_server_app_api_ide_opencode_available-models_route_actions_95230db3.js +0 -3
  576. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_4be65264.js.map +0 -1
  577. package/.next/server/chunks/ssr/[root-of-the-server]__083d944d._.js +0 -3
  578. package/.next/server/chunks/ssr/[root-of-the-server]__083d944d._.js.map +0 -1
  579. package/.next/server/chunks/ssr/[root-of-the-server]__15600e29._.js +0 -3
  580. package/.next/server/chunks/ssr/[root-of-the-server]__15600e29._.js.map +0 -1
  581. package/.next/server/chunks/ssr/[root-of-the-server]__1836f866._.js +0 -3
  582. package/.next/server/chunks/ssr/[root-of-the-server]__1836f866._.js.map +0 -1
  583. package/.next/server/chunks/ssr/[root-of-the-server]__256a03fe._.js +0 -3
  584. package/.next/server/chunks/ssr/[root-of-the-server]__256a03fe._.js.map +0 -1
  585. package/.next/server/chunks/ssr/[root-of-the-server]__31fde618._.js +0 -3
  586. package/.next/server/chunks/ssr/[root-of-the-server]__31fde618._.js.map +0 -1
  587. package/.next/server/chunks/ssr/[root-of-the-server]__523c120c._.js +0 -3
  588. package/.next/server/chunks/ssr/[root-of-the-server]__523c120c._.js.map +0 -1
  589. package/.next/server/chunks/ssr/[root-of-the-server]__70a81394._.js +0 -3
  590. package/.next/server/chunks/ssr/[root-of-the-server]__70a81394._.js.map +0 -1
  591. package/.next/server/chunks/ssr/[root-of-the-server]__81937253._.js +0 -3
  592. package/.next/server/chunks/ssr/[root-of-the-server]__81937253._.js.map +0 -1
  593. package/.next/server/chunks/ssr/[root-of-the-server]__976ad963._.js +0 -3
  594. package/.next/server/chunks/ssr/[root-of-the-server]__976ad963._.js.map +0 -1
  595. package/.next/server/chunks/ssr/[root-of-the-server]__af2ad6aa._.js +0 -3
  596. package/.next/server/chunks/ssr/[root-of-the-server]__af2ad6aa._.js.map +0 -1
  597. package/.next/server/chunks/ssr/[root-of-the-server]__b9356576._.js +0 -4
  598. package/.next/server/chunks/ssr/[root-of-the-server]__b9356576._.js.map +0 -1
  599. package/.next/server/chunks/ssr/[root-of-the-server]__ccb6a4da._.js +0 -3
  600. package/.next/server/chunks/ssr/[root-of-the-server]__ccb6a4da._.js.map +0 -1
  601. package/.next/server/chunks/ssr/[root-of-the-server]__cfa2d991._.js +0 -3
  602. package/.next/server/chunks/ssr/[root-of-the-server]__cfa2d991._.js.map +0 -1
  603. package/.next/server/chunks/ssr/[root-of-the-server]__f437da88._.js +0 -3
  604. package/.next/server/chunks/ssr/[root-of-the-server]__f437da88._.js.map +0 -1
  605. package/.next/server/chunks/ssr/[root-of-the-server]__f92001a5._.js.map +0 -1
  606. package/.next/server/chunks/ssr/_06262cbd._.js +0 -4
  607. package/.next/server/chunks/ssr/_06262cbd._.js.map +0 -1
  608. package/.next/server/chunks/ssr/_0cd72da5._.js +0 -4
  609. package/.next/server/chunks/ssr/_0cd72da5._.js.map +0 -1
  610. package/.next/server/chunks/ssr/_4828a6d2._.js +0 -4
  611. package/.next/server/chunks/ssr/_4828a6d2._.js.map +0 -1
  612. package/.next/server/chunks/ssr/_69468f4c._.js +0 -3
  613. package/.next/server/chunks/ssr/_69468f4c._.js.map +0 -1
  614. package/.next/server/chunks/ssr/_93850476._.js +0 -6
  615. package/.next/server/chunks/ssr/_93850476._.js.map +0 -1
  616. package/.next/server/chunks/ssr/_c1309523._.js +0 -4
  617. package/.next/server/chunks/ssr/_c1309523._.js.map +0 -1
  618. package/.next/server/chunks/ssr/_f7d273e3._.js +0 -4
  619. package/.next/server/chunks/ssr/_f7d273e3._.js.map +0 -1
  620. package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_39d4fc33.js +0 -3
  621. package/.next/server/chunks/ssr/node_modules_next_dist_08570d7f._.js +0 -4
  622. package/.next/server/chunks/ssr/node_modules_next_dist_08570d7f._.js.map +0 -1
  623. package/.next/server/chunks/ssr/node_modules_next_dist_174ae28d._.js +0 -10
  624. package/.next/server/chunks/ssr/node_modules_next_dist_174ae28d._.js.map +0 -1
  625. package/.next/server/chunks/ssr/node_modules_next_dist_27457240._.js +0 -6
  626. package/.next/server/chunks/ssr/node_modules_next_dist_27457240._.js.map +0 -1
  627. package/.next/server/chunks/ssr/node_modules_next_dist_4b63a0e1._.js +0 -3
  628. package/.next/server/chunks/ssr/node_modules_next_dist_4b63a0e1._.js.map +0 -1
  629. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js.map +0 -1
  630. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_65a7265e.js +0 -4
  631. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_65a7265e.js.map +0 -1
  632. package/.next/server/chunks/ssr/node_modules_next_dist_f9713a08._.js +0 -3
  633. package/.next/server/chunks/ssr/node_modules_next_dist_f9713a08._.js.map +0 -1
  634. package/.next/server/chunks/ssr/src_app_ide_page_tsx_8962793b._.js +0 -3
  635. package/.next/server/chunks/ssr/src_app_logs_page_tsx_7b7b7b83._.js +0 -3
  636. package/.next/server/chunks/ssr/src_app_models_page_tsx_ed71d32e._.js +0 -3
  637. package/.next/server/chunks/ssr/src_app_providers_page_tsx_eb8b5137._.js +0 -3
  638. package/.next/static/cf2SWIkI5HVbnDjLExI42/_clientMiddlewareManifest.json +0 -1
  639. package/.next/static/chunks/5663c8696095f277.js +0 -1
  640. package/.next/static/chunks/64f547b3bcd3aef4.js +0 -1
  641. package/.next/static/chunks/6992685fe009e8fd.css +0 -1
  642. package/.next/static/chunks/6e0dee5b6681763c.js +0 -1
  643. package/.next/static/chunks/6f7efe5271343778.js +0 -1
  644. package/.next/static/chunks/75f76753fd97c8fd.js +0 -1
  645. package/.next/static/chunks/7c8b7cbb3339f139.js +0 -1
  646. package/.next/static/chunks/8ccc14e022ff6de3.js +0 -1
  647. package/.next/static/chunks/8cf1e5f00ebaea52.js +0 -1
  648. package/.next/static/chunks/a6dad97d9634a72d.js.map +0 -1
  649. package/.next/static/chunks/a7f539bf6487f4ff.js +0 -5
  650. package/.next/static/chunks/a89fdf03c5b0dfbd.js +0 -1
  651. package/.next/static/chunks/d2be314c3ece3fbe.js +0 -1
  652. package/.next/static/chunks/f2f58a7e93290fbb.js +0 -1
  653. package/.next/static/chunks/ff1a16fafef87110.js +0 -1
  654. package/.next/static/chunks/turbopack-fdb839c72e10c2ea.js +0 -4
  655. /package/.next/build/chunks/{[turbopack-node]_transforms_postcss_ts_df7a5b11._.js.map → [turbopack-node]_transforms_postcss_ts_0nnejqq._.js.map} +0 -0
  656. /package/.next/server/chunks/{_next-internal_server_app_api_config_route_actions_308a9f33.js.map → 0zjb_server_app_api_ide_openclaw_available-models_route_actions_0.gjr6a.js.map} +0 -0
  657. /package/.next/server/chunks/{_next-internal_server_app_api_gateway_[___path]_route_actions_835b2379.js.map → 0zjb_server_app_api_ide_opencode_available-models_route_actions_0poyhyk.js.map} +0 -0
  658. /package/.next/server/chunks/{_next-internal_server_app_api_gateway_models_route_actions_302c9983.js.map → _next-internal_server_app_api_config_route_actions_08dm.dx.js.map} +0 -0
  659. /package/.next/server/chunks/{_next-internal_server_app_api_gateway_route_actions_e5e7405d.js.map → _next-internal_server_app_api_gateway_[___path]_route_actions_0mmqyo7.js.map} +0 -0
  660. /package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_apply_route_actions_5056516c.js.map → _next-internal_server_app_api_gateway_models_route_actions_08b214z.js.map} +0 -0
  661. /package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_available-models_route_actions_94d710a0.js.map → _next-internal_server_app_api_gateway_route_actions_0.jzdw1.js.map} +0 -0
  662. /package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_restore_route_actions_f37acc94.js.map → _next-internal_server_app_api_ide_claude_apply_route_actions_0dw2_pf.js.map} +0 -0
  663. /package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_save_route_actions_407c55f5.js.map → _next-internal_server_app_api_ide_claude_available-models_route_actions_0pmwy75.js.map} +0 -0
  664. /package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_status_route_actions_5ac73db8.js.map → _next-internal_server_app_api_ide_claude_restore_route_actions_11x77hl.js.map} +0 -0
  665. /package/.next/server/chunks/{_next-internal_server_app_api_ide_claude_test_route_actions_70587902.js.map → _next-internal_server_app_api_ide_claude_save_route_actions_0b35ro_.js.map} +0 -0
  666. /package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_apply_route_actions_2cb9e4b4.js.map → _next-internal_server_app_api_ide_claude_status_route_actions_0fnw-w7.js.map} +0 -0
  667. /package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_preview_route_actions_9814a8e4.js.map → _next-internal_server_app_api_ide_claude_test_route_actions_0jc1czy.js.map} +0 -0
  668. /package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_restore_route_actions_10ad8f9d.js.map → _next-internal_server_app_api_ide_openclaw_apply_route_actions_07re971.js.map} +0 -0
  669. /package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_save_route_actions_044ad081.js.map → _next-internal_server_app_api_ide_openclaw_preview_route_actions_0q53p05.js.map} +0 -0
  670. /package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_status_route_actions_ed9786d2.js.map → _next-internal_server_app_api_ide_openclaw_restore_route_actions_02yog9-.js.map} +0 -0
  671. /package/.next/server/chunks/{_next-internal_server_app_api_ide_openclaw_test_route_actions_ce2cb808.js.map → _next-internal_server_app_api_ide_openclaw_save_route_actions_00tjxsz.js.map} +0 -0
  672. /package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_apply_route_actions_6c422244.js.map → _next-internal_server_app_api_ide_openclaw_status_route_actions_10wsun4.js.map} +0 -0
  673. /package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_preview_route_actions_256c82e0.js.map → _next-internal_server_app_api_ide_openclaw_test_route_actions_0zgwyon.js.map} +0 -0
  674. /package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_restore_route_actions_371993d3.js.map → _next-internal_server_app_api_ide_opencode_apply_route_actions_0in-w.g.js.map} +0 -0
  675. /package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_save_route_actions_6e4c9c41.js.map → _next-internal_server_app_api_ide_opencode_preview_route_actions_06h6.w~.js.map} +0 -0
  676. /package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_status_route_actions_498ad77b.js.map → _next-internal_server_app_api_ide_opencode_restore_route_actions_09ipt-l.js.map} +0 -0
  677. /package/.next/server/chunks/{_next-internal_server_app_api_ide_opencode_test_route_actions_c71be510.js.map → _next-internal_server_app_api_ide_opencode_save_route_actions_0i-~x79.js.map} +0 -0
  678. /package/.next/server/chunks/{_next-internal_server_app_api_logs_route_actions_30a87f47.js.map → _next-internal_server_app_api_ide_opencode_status_route_actions_0cpf6rv.js.map} +0 -0
  679. /package/.next/server/chunks/{_next-internal_server_app_api_models_route_actions_b6abdc83.js.map → _next-internal_server_app_api_ide_opencode_test_route_actions_0y8aq8h.js.map} +0 -0
  680. /package/.next/server/chunks/{_next-internal_server_app_api_providers_route_actions_5388b373.js.map → _next-internal_server_app_api_logs_route_actions_08ef2j7.js.map} +0 -0
  681. /package/.next/server/chunks/{_next-internal_server_app_api_providers_test_route_actions_b97ab15a.js.map → _next-internal_server_app_api_models_route_actions_0vfccm4.js.map} +0 -0
  682. /package/.next/server/chunks/{_next-internal_server_app_api_service_force-stop_route_actions_95eba80b.js.map → _next-internal_server_app_api_providers_route_actions_0ee1p_m.js.map} +0 -0
  683. /package/.next/server/chunks/{_next-internal_server_app_api_service_start_route_actions_d50efb77.js.map → _next-internal_server_app_api_providers_test_route_actions_0vyo652.js.map} +0 -0
  684. /package/.next/server/chunks/{_next-internal_server_app_api_service_status_route_actions_30149042.js.map → _next-internal_server_app_api_service_force-stop_route_actions_0pu9xrq.js.map} +0 -0
  685. /package/.next/server/chunks/{_next-internal_server_app_api_service_stop_route_actions_19443941.js.map → _next-internal_server_app_api_service_start_route_actions_0_o53a2.js.map} +0 -0
  686. /package/.next/server/chunks/{ce889_server_app_api_ide_openclaw_available-models_route_actions_e568e70b.js.map → _next-internal_server_app_api_service_status_route_actions_08ag8v4.js.map} +0 -0
  687. /package/.next/server/chunks/{ce889_server_app_api_ide_opencode_available-models_route_actions_95230db3.js.map → _next-internal_server_app_api_service_stop_route_actions_04dp83p.js.map} +0 -0
  688. /package/.next/server/chunks/{ssr/_next-internal_server_app__global-error_page_actions_75761787.js.map → _next-internal_server_app_api_tokenizer_history_route_actions_09~nqtd.js.map} +0 -0
  689. /package/.next/server/chunks/{ssr/_next-internal_server_app__not-found_page_actions_554ec2bf.js.map → _next-internal_server_app_api_tokenizer_test_route_actions_0t2swp-.js.map} +0 -0
  690. /package/.next/server/chunks/ssr/{_next-internal_server_app_ide_page_actions_d521d6ae.js.map → _next-internal_server_app__global-error_page_actions_0k77kol.js.map} +0 -0
  691. /package/.next/server/chunks/ssr/{_next-internal_server_app_logs_page_actions_a1c69041.js.map → _next-internal_server_app__not-found_page_actions_0eq97pa.js.map} +0 -0
  692. /package/.next/server/chunks/ssr/{_next-internal_server_app_models_page_actions_543cf22f.js.map → _next-internal_server_app_ide_page_actions_0_opd4~.js.map} +0 -0
  693. /package/.next/server/chunks/ssr/{_next-internal_server_app_page_actions_39d4fc33.js.map → _next-internal_server_app_logs_page_actions_0rvsl~d.js.map} +0 -0
  694. /package/.next/server/chunks/ssr/{_next-internal_server_app_providers_page_actions_c75f6cb3.js.map → _next-internal_server_app_models_page_actions_0eiz7f7.js.map} +0 -0
  695. /package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_9774470f._.js.map → node_modules_next_dist_client_components_0inhx6q._.js.map} +0 -0
  696. /package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_builtin_forbidden_45780354.js.map → node_modules_next_dist_client_components_builtin_forbidden_0ghu-f7.js.map} +0 -0
  697. /package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_builtin_unauthorized_15817684.js.map → node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js.map} +0 -0
  698. /package/.next/static/{cf2SWIkI5HVbnDjLExI42 → XHnu7Z1vWSrgmneps8rX4}/_buildManifest.js +0 -0
  699. /package/.next/static/{cf2SWIkI5HVbnDjLExI42 → XHnu7Z1vWSrgmneps8rX4}/_ssgManifest.js +0 -0
  700. /package/.next/static/chunks/{a6dad97d9634a72d.js → 03~yq9q893hmn.js} +0 -0
@@ -0,0 +1,318 @@
1
+ 'use client';
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.default = TokenizerPage;
8
+ const jsx_runtime_1 = require("react/jsx-runtime");
9
+ const react_1 = require("react");
10
+ const Nav_1 = __importDefault(require("../components/Nav"));
11
+ const ToastProvider_1 = require("../components/ToastProvider");
12
+ const LANGUAGES = [
13
+ { value: '简体中文', label: '简体中文' },
14
+ { value: '英文', label: '英文' },
15
+ { value: '繁体中文', label: '繁体中文' },
16
+ { value: '日语', label: '日语' },
17
+ { value: '法语', label: '法语' },
18
+ { value: '西班牙语', label: '西班牙语' },
19
+ ];
20
+ function TokenizerPage() {
21
+ const [activeTab, setActiveTab] = (0, react_1.useState)('test');
22
+ const [models, setModels] = (0, react_1.useState)([]);
23
+ const [loading, setLoading] = (0, react_1.useState)(true);
24
+ const [submitting, setSubmitting] = (0, react_1.useState)(null);
25
+ const [selectedModelId, setSelectedModelId] = (0, react_1.useState)('');
26
+ const [sourceLanguage, setSourceLanguage] = (0, react_1.useState)('简体中文');
27
+ const [targetLanguage, setTargetLanguage] = (0, react_1.useState)('英文');
28
+ const [testScope, setTestScope] = (0, react_1.useState)('both');
29
+ const [temperature, setTemperature] = (0, react_1.useState)('0');
30
+ const [topP, setTopP] = (0, react_1.useState)('1');
31
+ const [sourceText, setSourceText] = (0, react_1.useState)('');
32
+ const [targetText, setTargetText] = (0, react_1.useState)('');
33
+ const [sourceResult, setSourceResult] = (0, react_1.useState)(null);
34
+ const [targetResult, setTargetResult] = (0, react_1.useState)(null);
35
+ const [translationUsage, setTranslationUsage] = (0, react_1.useState)(null);
36
+ const [translationTimeMs, setTranslationTimeMs] = (0, react_1.useState)(null);
37
+ const [historyItems, setHistoryItems] = (0, react_1.useState)([]);
38
+ const [historyLoading, setHistoryLoading] = (0, react_1.useState)(false);
39
+ const { showToast } = (0, ToastProvider_1.useToast)();
40
+ (0, react_1.useEffect)(() => {
41
+ loadModels();
42
+ }, []);
43
+ (0, react_1.useEffect)(() => {
44
+ if (activeTab === 'history') {
45
+ loadHistory();
46
+ }
47
+ }, [activeTab]);
48
+ const selectedModel = (0, react_1.useMemo)(() => models.find((model) => model.id === Number(selectedModelId)) || null, [models, selectedModelId]);
49
+ const loadModels = async () => {
50
+ try {
51
+ const res = await fetch('/api/models?enabled=true');
52
+ const data = await res.json();
53
+ setModels(Array.isArray(data) ? data : []);
54
+ }
55
+ catch (error) {
56
+ console.error('Failed to load tokenizer models:', error);
57
+ showToast('模型加载失败', 'error');
58
+ }
59
+ finally {
60
+ setLoading(false);
61
+ }
62
+ };
63
+ const loadHistory = async () => {
64
+ setHistoryLoading(true);
65
+ try {
66
+ const res = await fetch('/api/tokenizer/history?limit=50');
67
+ const data = await res.json();
68
+ if (!res.ok) {
69
+ throw new Error(data.error || '历史记录加载失败');
70
+ }
71
+ setHistoryItems(Array.isArray(data.logs) ? data.logs : []);
72
+ }
73
+ catch (error) {
74
+ console.error('Failed to load tokenizer history:', error);
75
+ showToast(error.message || '历史记录加载失败', 'error');
76
+ }
77
+ finally {
78
+ setHistoryLoading(false);
79
+ }
80
+ };
81
+ const canSubmit = Boolean(selectedModelId);
82
+ const parsedTemperature = Number(temperature);
83
+ const parsedTopP = Number(topP);
84
+ const createRequestBody = (payload) => ({
85
+ model_id: Number(selectedModelId),
86
+ mode: payload.mode,
87
+ source_language: payload.sourceLanguage,
88
+ target_language: payload.targetLanguage,
89
+ text: payload.text,
90
+ temperature: Number.isFinite(parsedTemperature) ? parsedTemperature : 0,
91
+ top_p: Number.isFinite(parsedTopP) ? parsedTopP : 1,
92
+ });
93
+ const runMeasure = async (side, text, language) => {
94
+ if (!canSubmit) {
95
+ showToast('请先选择模型', 'error');
96
+ return null;
97
+ }
98
+ if (!text.trim()) {
99
+ showToast(side === 'source' ? '请输入源语言文本' : '请输入目标语言文本', 'error');
100
+ return null;
101
+ }
102
+ try {
103
+ const res = await fetch('/api/tokenizer/test', {
104
+ method: 'POST',
105
+ headers: { 'Content-Type': 'application/json' },
106
+ body: JSON.stringify(createRequestBody({
107
+ mode: 'measure',
108
+ sourceLanguage: language,
109
+ text,
110
+ })),
111
+ });
112
+ const data = await res.json();
113
+ if (!res.ok) {
114
+ throw new Error(data.error || '测试失败');
115
+ }
116
+ const result = {
117
+ text: data.text || '',
118
+ usage: data.usage,
119
+ response_time_ms: data.response_time_ms,
120
+ };
121
+ if (side === 'source') {
122
+ setSourceResult(result);
123
+ }
124
+ else {
125
+ setTargetResult(result);
126
+ }
127
+ showToast(side === 'source' ? '源语言测试完成' : '目标语言测试完成', 'success');
128
+ return result;
129
+ }
130
+ catch (error) {
131
+ console.error('Tokenizer measure failed:', error);
132
+ showToast(error.message || '测试失败', 'error');
133
+ return null;
134
+ }
135
+ };
136
+ const handleTranslate = async () => {
137
+ if (!canSubmit) {
138
+ showToast('请先选择模型', 'error');
139
+ return;
140
+ }
141
+ if (!sourceText.trim()) {
142
+ showToast('请输入源语言文本', 'error');
143
+ return;
144
+ }
145
+ setSubmitting('translate');
146
+ try {
147
+ const res = await fetch('/api/tokenizer/test', {
148
+ method: 'POST',
149
+ headers: { 'Content-Type': 'application/json' },
150
+ body: JSON.stringify(createRequestBody({
151
+ mode: 'translate',
152
+ sourceLanguage,
153
+ targetLanguage,
154
+ text: sourceText,
155
+ })),
156
+ });
157
+ const data = await res.json();
158
+ if (!res.ok) {
159
+ throw new Error(data.error || '翻译失败');
160
+ }
161
+ setTargetText(data.text || '');
162
+ setTranslationUsage(data.usage || null);
163
+ setTranslationTimeMs(data.response_time_ms || null);
164
+ setTargetResult(null);
165
+ await loadHistory();
166
+ showToast('翻译完成,已填入目标语言文本', 'success');
167
+ }
168
+ catch (error) {
169
+ console.error('Tokenizer translate failed:', error);
170
+ showToast(error.message || '翻译失败', 'error');
171
+ }
172
+ finally {
173
+ setSubmitting(null);
174
+ }
175
+ };
176
+ const handleRunTests = async () => {
177
+ if (!canSubmit) {
178
+ showToast('请先选择模型', 'error');
179
+ return;
180
+ }
181
+ if (testScope !== 'target' && !sourceText.trim()) {
182
+ showToast('请输入源语言文本', 'error');
183
+ return;
184
+ }
185
+ if (testScope !== 'source' && !targetText.trim()) {
186
+ showToast('请输入目标语言文本', 'error');
187
+ return;
188
+ }
189
+ setSubmitting('test');
190
+ try {
191
+ if (testScope === 'source') {
192
+ await runMeasure('source', sourceText, sourceLanguage);
193
+ setTargetResult(null);
194
+ await loadHistory();
195
+ return;
196
+ }
197
+ if (testScope === 'target') {
198
+ await runMeasure('target', targetText, targetLanguage);
199
+ setSourceResult(null);
200
+ await loadHistory();
201
+ return;
202
+ }
203
+ const sourcePromise = fetch('/api/tokenizer/test', {
204
+ method: 'POST',
205
+ headers: { 'Content-Type': 'application/json' },
206
+ body: JSON.stringify(createRequestBody({
207
+ mode: 'measure',
208
+ sourceLanguage,
209
+ text: sourceText,
210
+ })),
211
+ });
212
+ const targetPromise = fetch('/api/tokenizer/test', {
213
+ method: 'POST',
214
+ headers: { 'Content-Type': 'application/json' },
215
+ body: JSON.stringify(createRequestBody({
216
+ mode: 'measure',
217
+ sourceLanguage: targetLanguage,
218
+ text: targetText,
219
+ })),
220
+ });
221
+ const [sourceRes, targetRes] = await Promise.all([sourcePromise, targetPromise]);
222
+ const [sourceData, targetData] = await Promise.all([sourceRes.json(), targetRes.json()]);
223
+ if (!sourceRes.ok) {
224
+ throw new Error(sourceData.error || '源语言测试失败');
225
+ }
226
+ if (!targetRes.ok) {
227
+ throw new Error(targetData.error || '目标语言测试失败');
228
+ }
229
+ setSourceResult({
230
+ text: sourceData.text || '',
231
+ usage: sourceData.usage,
232
+ response_time_ms: sourceData.response_time_ms,
233
+ });
234
+ setTargetResult({
235
+ text: targetData.text || '',
236
+ usage: targetData.usage,
237
+ response_time_ms: targetData.response_time_ms,
238
+ });
239
+ await loadHistory();
240
+ showToast('双语言测试完成', 'success');
241
+ }
242
+ catch (error) {
243
+ console.error('Tokenizer compare failed:', error);
244
+ showToast(error.message || '测试失败', 'error');
245
+ }
246
+ finally {
247
+ setSubmitting(null);
248
+ }
249
+ };
250
+ const usageDelta = sourceResult && targetResult
251
+ ? targetResult.usage.total_tokens - sourceResult.usage.total_tokens
252
+ : null;
253
+ const compareTimeMs = (sourceResult?.response_time_ms || 0) + (targetResult?.response_time_ms || 0);
254
+ if (loading) {
255
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Nav_1.default, {}), (0, jsx_runtime_1.jsx)("div", { className: "min-h-screen flex items-center justify-center", children: (0, jsx_runtime_1.jsx)("div", { className: "text-lg", children: "\u52A0\u8F7D\u4E2D..." }) })] }));
256
+ }
257
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Nav_1.default, {}), (0, jsx_runtime_1.jsx)("main", { className: "max-w-6xl mx-auto py-6 sm:px-6 lg:px-8", children: (0, jsx_runtime_1.jsxs)("div", { className: "px-4 py-4 sm:px-0 space-y-5", children: [(0, jsx_runtime_1.jsxs)("div", { className: "inline-flex rounded-xl border border-slate-200 bg-white/80 p-1 shadow-sm", children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => setActiveTab('test'), className: `rounded-lg px-4 py-2 text-xs font-semibold transition-colors ${activeTab === 'test'
258
+ ? 'bg-emerald-600 text-white'
259
+ : 'text-slate-600 hover:bg-slate-100'}`, children: "\u5F00\u59CB\u6D4B\u8BD5" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => setActiveTab('history'), className: `rounded-lg px-4 py-2 text-xs font-semibold transition-colors ${activeTab === 'history'
260
+ ? 'bg-emerald-600 text-white'
261
+ : 'text-slate-600 hover:bg-slate-100'}`, children: "\u5386\u53F2\u8BB0\u5F55" })] }), activeTab === 'test' ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("section", { className: "bg-white/75 backdrop-blur-sm shadow-md rounded-2xl border border-emerald-100/60 p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h1", { className: "text-lg font-bold text-slate-800", children: "Tokenizer" }), (0, jsx_runtime_1.jsx)("p", { className: "text-xs text-slate-500 mt-1", children: "\u9009\u62E9\u6A21\u578B\u540E\uFF0C\u53EF\u4EE5\u5148\u7FFB\u8BD1\uFF0C\u518D\u9ED8\u8BA4\u4E00\u952E\u6D4B\u8BD5\u4E24\u79CD\u8BED\u8A00\u7684 token \u6D88\u8017\u3002" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-3 lg:min-w-[620px]", children: [(0, jsx_runtime_1.jsx)(Field, { label: "\u6A21\u578B", children: (0, jsx_runtime_1.jsxs)("select", { value: selectedModelId, onChange: (e) => setSelectedModelId(e.target.value), className: "block w-full rounded-lg border border-slate-200 bg-white/90 px-3 py-2 text-xs shadow-sm focus:border-emerald-400", children: [(0, jsx_runtime_1.jsx)("option", { value: "", children: "\u8BF7\u9009\u62E9\u6A21\u578B" }), models.map((model) => ((0, jsx_runtime_1.jsxs)("option", { value: model.id, children: [model.provider_name ? `${model.provider_name} / ` : '', model.name] }, model.id)))] }) }), (0, jsx_runtime_1.jsx)(Field, { label: "\u6E90\u8BED\u8A00", children: (0, jsx_runtime_1.jsx)("select", { value: sourceLanguage, onChange: (e) => setSourceLanguage(e.target.value), className: "block w-full rounded-lg border border-slate-200 bg-white/90 px-3 py-2 text-xs shadow-sm focus:border-emerald-400", children: LANGUAGES.map((language) => ((0, jsx_runtime_1.jsx)("option", { value: language.value, children: language.label }, language.value))) }) }), (0, jsx_runtime_1.jsx)(Field, { label: "\u76EE\u6807\u8BED\u8A00", children: (0, jsx_runtime_1.jsx)("select", { value: targetLanguage, onChange: (e) => setTargetLanguage(e.target.value), className: "block w-full rounded-lg border border-slate-200 bg-white/90 px-3 py-2 text-xs shadow-sm focus:border-emerald-400", children: LANGUAGES.map((language) => ((0, jsx_runtime_1.jsx)("option", { value: language.value, children: language.label }, language.value))) }) })] })] }), selectedModel && ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4 flex flex-wrap items-center gap-2 text-[11px] text-slate-500", children: [(0, jsx_runtime_1.jsx)("span", { className: "rounded-full bg-emerald-50 px-2.5 py-1 font-medium text-emerald-700", children: selectedModel.provider_name || 'Provider' }), (0, jsx_runtime_1.jsx)("span", { className: "rounded-full bg-slate-100 px-2.5 py-1 font-medium text-slate-600", children: selectedModel.model_id })] })), (0, jsx_runtime_1.jsxs)("div", { className: "mt-5 rounded-2xl border border-slate-200 bg-gradient-to-r from-emerald-50/80 via-white to-amber-50/60 p-5", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-4 xl:flex-row xl:items-end xl:justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-sm font-bold text-slate-800", children: "\u7FFB\u8BD1\u4E0E\u5BF9\u6BD4" }), (0, jsx_runtime_1.jsx)("p", { className: "text-xs text-slate-500 mt-1", children: "\u6D4B\u8BD5\u6A21\u5F0F\u9ED8\u8BA4\u662F\u5168\u90E8\u6D4B\u8BD5\uFF1B\u5982\u679C\u53EA\u60F3\u6D4B\u4E00\u4FA7\uFF0C\u53EF\u4EE5\u5148\u5207\u6362\u8303\u56F4\u518D\u6267\u884C\u3002" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-3 xl:min-w-[520px]", children: [(0, jsx_runtime_1.jsx)(Field, { label: "\u6D4B\u8BD5\u8303\u56F4", children: (0, jsx_runtime_1.jsxs)("select", { value: testScope, onChange: (e) => setTestScope(e.target.value), className: "block w-full rounded-lg border border-slate-200 bg-white/90 px-3 py-2 text-xs shadow-sm focus:border-emerald-400", children: [(0, jsx_runtime_1.jsx)("option", { value: "both", children: "\u5168\u90E8\u6D4B\u8BD5" }), (0, jsx_runtime_1.jsx)("option", { value: "source", children: "\u4EC5\u6E90\u8BED\u8A00" }), (0, jsx_runtime_1.jsx)("option", { value: "target", children: "\u4EC5\u76EE\u6807\u8BED\u8A00" })] }) }), (0, jsx_runtime_1.jsx)(Field, { label: "Temperature", children: (0, jsx_runtime_1.jsx)("input", { type: "number", step: "0.1", min: "0", max: "2", value: temperature, onChange: (e) => setTemperature(e.target.value), className: "block w-full rounded-lg border border-slate-200 bg-white/90 px-3 py-2 text-xs shadow-sm focus:border-emerald-400" }) }), (0, jsx_runtime_1.jsx)(Field, { label: "Top P", children: (0, jsx_runtime_1.jsx)("input", { type: "number", step: "0.1", min: "0", max: "1", value: topP, onChange: (e) => setTopP(e.target.value), className: "block w-full rounded-lg border border-slate-200 bg-white/90 px-3 py-2 text-xs shadow-sm focus:border-emerald-400" }) })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-4 flex flex-wrap gap-2", children: [(0, jsx_runtime_1.jsx)("button", { onClick: handleTranslate, disabled: !canSubmit || submitting !== null, className: "inline-flex items-center px-3.5 py-1.5 rounded-lg text-xs font-semibold text-white bg-emerald-600 hover:bg-emerald-700 shadow-sm", children: submitting === 'translate' ? '翻译中...' : `翻译为${targetLanguage}` }), (0, jsx_runtime_1.jsx)("button", { onClick: handleRunTests, disabled: !canSubmit || submitting !== null, className: "inline-flex items-center px-3.5 py-1.5 rounded-lg text-xs font-semibold text-emerald-700 bg-white hover:bg-emerald-50 border border-emerald-200 shadow-sm", children: submitting === 'test'
262
+ ? '测试中...'
263
+ : testScope === 'both'
264
+ ? '开始全部测试'
265
+ : testScope === 'source'
266
+ ? '开始源语言测试'
267
+ : '开始目标语言测试' })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-4 grid grid-cols-1 gap-4 lg:grid-cols-3", children: [(0, jsx_runtime_1.jsx)(CompareCard, { title: "\u6E90\u8BED\u8A00\u603B\u8BA1", value: sourceResult?.usage.total_tokens, note: buildUsageNote(sourceResult), signed: false }), (0, jsx_runtime_1.jsx)(CompareCard, { title: "\u76EE\u6807\u8BED\u8A00\u603B\u8BA1", value: targetResult?.usage.total_tokens, note: buildUsageNote(targetResult), signed: false }), (0, jsx_runtime_1.jsx)(CompareCard, { title: "\u5DEE\u503C", value: usageDelta, note: usageDelta === null ? '等待两侧结果' : usageDelta >= 0 ? '目标语言更高' : '源语言更高', signed: true })] }), translationUsage && ((0, jsx_runtime_1.jsx)("div", { className: "mt-4 rounded-xl border border-slate-200 bg-slate-50/80 p-4", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs font-semibold text-slate-700", children: "\u6700\u8FD1\u4E00\u6B21\u7FFB\u8BD1\u6D88\u8017" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[11px] text-slate-500 mt-1", children: translationUsage.estimated ? 'Estimated token usage' : 'Exact usage from provider response' })] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-right", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-lg font-bold text-slate-800", children: translationUsage.total_tokens }), (0, jsx_runtime_1.jsxs)("div", { className: "text-[11px] text-slate-500", children: ["Total tokens", translationTimeMs !== null ? ` · ${translationTimeMs} ms` : ''] })] })] }) }))] })] }), (0, jsx_runtime_1.jsxs)("section", { className: "grid grid-cols-1 gap-5 xl:grid-cols-2", children: [(0, jsx_runtime_1.jsx)(LanguagePanel, { title: "\u6E90\u8BED\u8A00\u8F93\u5165", subtitle: "\u539F\u6587\u8F93\u5165\u533A", language: sourceLanguage, text: sourceText, onChange: setSourceText, result: sourceResult, accent: "emerald" }), (0, jsx_runtime_1.jsx)(LanguagePanel, { title: "\u76EE\u6807\u8BED\u8A00\u8F93\u5165", subtitle: "\u53EF\u624B\u52A8\u8F93\u5165\uFF0C\u6216\u4F7F\u7528\u7FFB\u8BD1\u7ED3\u679C", language: targetLanguage, text: targetText, onChange: setTargetText, result: targetResult, accent: "amber" })] })] })) : ((0, jsx_runtime_1.jsxs)("section", { className: "bg-white/75 backdrop-blur-sm shadow-md rounded-2xl border border-emerald-100/60 p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-sm font-bold text-slate-800", children: "\u5386\u53F2\u8BB0\u5F55" }), (0, jsx_runtime_1.jsx)("p", { className: "text-xs text-slate-500 mt-1", children: "\u5C55\u793A\u6700\u8FD1 50 \u6761 Tokenizer \u8C03\u7528\u8BB0\u5F55\uFF0C\u5305\u62EC\u6A21\u5F0F\u3001token\u3001\u8017\u65F6\u548C\u6587\u672C\u6458\u8981\u3002" })] }), (0, jsx_runtime_1.jsx)("button", { onClick: loadHistory, disabled: historyLoading, className: "inline-flex items-center px-3.5 py-1.5 rounded-lg text-xs font-semibold text-emerald-700 bg-emerald-50 hover:bg-emerald-100 border border-emerald-200", children: historyLoading ? '刷新中...' : '刷新' })] }), (0, jsx_runtime_1.jsx)("div", { className: "mt-5 space-y-3", children: historyItems.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "rounded-xl border border-dashed border-slate-200 bg-slate-50/60 px-4 py-10 text-center text-xs text-slate-400", children: "\u6682\u65E0\u6D4B\u8BD5\u8BB0\u5F55" })) : (historyItems.map((item) => ((0, jsx_runtime_1.jsxs)("article", { className: "rounded-xl border border-slate-200 bg-white/90 p-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "space-y-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-wrap items-center gap-2 text-[11px]", children: [(0, jsx_runtime_1.jsx)("span", { className: "rounded-full bg-emerald-50 px-2.5 py-1 font-medium text-emerald-700", children: item.mode === 'translate' ? '翻译' : '测试' }), item.provider_name && ((0, jsx_runtime_1.jsx)("span", { className: "rounded-full bg-slate-100 px-2.5 py-1 font-medium text-slate-600", children: item.provider_name })), item.model_id && ((0, jsx_runtime_1.jsx)("span", { className: "rounded-full bg-slate-100 px-2.5 py-1 font-medium text-slate-600", children: item.model_id })), (0, jsx_runtime_1.jsx)("span", { className: "text-slate-400", children: formatDateTime(item.created_at) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-xs text-slate-600", children: [item.source_language || '--', item.target_language ? ` -> ${item.target_language}` : '', item.response_time_ms !== null ? ` · ${item.response_time_ms} ms` : '', item.usage?.estimated ? ' · estimated' : ' · exact'] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-3 gap-2 min-w-[220px]", children: [(0, jsx_runtime_1.jsx)(MiniMetric, { label: "\u8F93\u5165", value: item.usage?.input_tokens }), (0, jsx_runtime_1.jsx)(MiniMetric, { label: "\u8F93\u51FA", value: item.usage?.output_tokens }), (0, jsx_runtime_1.jsx)(MiniMetric, { label: "\u603B\u8BA1", value: item.usage?.total_tokens })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-4 grid grid-cols-1 gap-3 xl:grid-cols-2", children: [(0, jsx_runtime_1.jsx)(HistoryTextBlock, { title: "\u8BF7\u6C42\u6587\u672C", content: item.source_text }), (0, jsx_runtime_1.jsx)(HistoryTextBlock, { title: "\u8FD4\u56DE\u6587\u672C", content: item.result_text })] })] }, item.id)))) })] }))] }) })] }));
268
+ }
269
+ function Field({ label, children, }) {
270
+ return ((0, jsx_runtime_1.jsxs)("label", { className: "block", children: [(0, jsx_runtime_1.jsx)("span", { className: "block text-xs font-semibold text-slate-700 mb-1.5", children: label }), children] }));
271
+ }
272
+ function LanguagePanel({ title, subtitle, language, text, onChange, result, accent, }) {
273
+ const accentClass = accent === 'emerald'
274
+ ? 'border-emerald-100/60 bg-white/75'
275
+ : 'border-amber-100/60 bg-white/75';
276
+ const buttonClass = accent === 'emerald'
277
+ ? 'bg-emerald-600 hover:bg-emerald-700 text-white'
278
+ : 'bg-amber-500 hover:bg-amber-600 text-white';
279
+ return ((0, jsx_runtime_1.jsxs)("section", { className: `backdrop-blur-sm shadow-md rounded-2xl border p-6 ${accentClass}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-sm font-bold text-slate-800", children: title }), (0, jsx_runtime_1.jsxs)("p", { className: "text-xs text-slate-500 mt-1", children: [language, " \u00B7 ", subtitle] })] }), (0, jsx_runtime_1.jsx)("div", { className: `inline-flex items-center px-3 py-1.5 rounded-lg text-xs font-semibold shadow-sm ${buttonClass}`, children: accent === 'emerald' ? 'Source' : 'Target' })] }), (0, jsx_runtime_1.jsx)("textarea", { value: text, onChange: (e) => onChange(e.target.value), rows: 8, placeholder: `请输入${language}文本`, className: "mt-4 block w-full rounded-xl border border-slate-200 bg-white/90 px-3 py-3 text-sm shadow-sm focus:border-emerald-400" }), result ? ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4 rounded-xl border border-slate-200 bg-slate-50/80 p-4 space-y-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-3 gap-3", children: [(0, jsx_runtime_1.jsx)(MetricCard, { label: "\u8F93\u5165", value: result.usage.input_tokens }), (0, jsx_runtime_1.jsx)(MetricCard, { label: "\u8F93\u51FA", value: result.usage.output_tokens }), (0, jsx_runtime_1.jsx)(MetricCard, { label: "\u603B\u8BA1", value: result.usage.total_tokens })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between gap-2 text-[11px]", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-medium text-slate-600", children: result.usage.estimated ? 'Estimated token usage' : 'Exact usage from provider response' }), (0, jsx_runtime_1.jsx)("span", { className: "text-slate-400", children: result.response_time_ms !== undefined ? `${result.response_time_ms} ms` : 'LLM 返回文本' })] }), (0, jsx_runtime_1.jsx)("pre", { className: "whitespace-pre-wrap break-words rounded-lg bg-white px-3 py-3 text-xs text-slate-700 border border-slate-200", children: result.text || '无返回文本' })] })) : ((0, jsx_runtime_1.jsx)("div", { className: "mt-4 rounded-xl border border-dashed border-slate-200 bg-slate-50/60 px-4 py-6 text-xs text-slate-400", children: "\u8FD9\u91CC\u4F1A\u5C55\u793A token \u6D88\u8017\u548C\u6A21\u578B\u8FD4\u56DE\u6587\u672C\u3002" }))] }));
280
+ }
281
+ function MiniMetric({ label, value }) {
282
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg bg-slate-50 border border-slate-200 px-3 py-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-slate-500", children: label }), (0, jsx_runtime_1.jsx)("div", { className: "mt-1 text-sm font-bold text-slate-800", children: value ?? '--' })] }));
283
+ }
284
+ function HistoryTextBlock({ title, content }) {
285
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-slate-200 bg-slate-50/70 p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-[11px] font-semibold text-slate-600", children: title }), (0, jsx_runtime_1.jsx)("pre", { className: "mt-2 whitespace-pre-wrap break-words text-xs text-slate-700 max-h-40 overflow-auto", children: content || '无内容' })] }));
286
+ }
287
+ function formatDateTime(value) {
288
+ const date = new Date(value);
289
+ if (Number.isNaN(date.getTime())) {
290
+ return value;
291
+ }
292
+ return new Intl.DateTimeFormat('zh-CN', {
293
+ month: '2-digit',
294
+ day: '2-digit',
295
+ hour: '2-digit',
296
+ minute: '2-digit',
297
+ }).format(date);
298
+ }
299
+ function buildUsageNote(result) {
300
+ if (!result) {
301
+ return '等待结果';
302
+ }
303
+ const base = result.usage.estimated ? 'estimated' : 'exact';
304
+ return result.response_time_ms !== undefined
305
+ ? `${base} · ${result.response_time_ms} ms`
306
+ : base;
307
+ }
308
+ function MetricCard({ label, value }) {
309
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg bg-white border border-slate-200 px-3 py-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-[11px] text-slate-500", children: [label, " token"] }), (0, jsx_runtime_1.jsx)("div", { className: "mt-1 text-lg font-bold text-slate-800", children: value })] }));
310
+ }
311
+ function CompareCard({ title, value, note, signed = false, suffix, }) {
312
+ const renderedValue = value === null || value === undefined
313
+ ? '--'
314
+ : signed && value > 0
315
+ ? `+${value}${suffix ? ` ${suffix}` : ''}`
316
+ : `${value}${suffix ? ` ${suffix}` : ''}`;
317
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "rounded-xl border border-slate-200 bg-slate-50/80 p-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs font-semibold text-slate-600", children: title }), (0, jsx_runtime_1.jsx)("div", { className: "mt-2 text-2xl font-bold text-slate-800", children: renderedValue }), (0, jsx_runtime_1.jsx)("div", { className: "mt-1 text-[11px] text-slate-400", children: note })] }));
318
+ }
@@ -111,7 +111,7 @@ program
111
111
  const gatewayScriptPath = path_1.default.join(packageRoot, 'dist', 'src', 'cli', 'gateway-server.js');
112
112
  if (background) {
113
113
  ensureAarDir();
114
- const envBase = { ...process.env, NODE_ENV: 'production' };
114
+ const envBase = { ...process.env, NODE_ENV: 'production', SQLJS_WASM_PATH: (0, database_1.getSqlJsWasmPath)() };
115
115
  const uiProc = (0, child_process_1.spawn)(process.execPath, [serverPath, 'start', '-p', uiPort.toString()], {
116
116
  cwd: packageRoot,
117
117
  env: { ...envBase, PORT: uiPort.toString() },
@@ -157,7 +157,7 @@ program
157
157
  const uiProcess = (0, child_process_1.spawn)(process.execPath, [serverPath, 'start', '-p', uiPort.toString()], {
158
158
  cwd: packageRoot,
159
159
  stdio: ['ignore', 'inherit', 'inherit'],
160
- env: { ...process.env, PORT: uiPort.toString(), NODE_ENV: 'production' },
160
+ env: { ...process.env, PORT: uiPort.toString(), NODE_ENV: 'production', SQLJS_WASM_PATH: (0, database_1.getSqlJsWasmPath)() },
161
161
  });
162
162
  uiProcess.on('error', (error) => {
163
163
  console.error(`Failed to start Web UI: ${error.message}`);
@@ -167,7 +167,7 @@ program
167
167
  ? (0, child_process_1.spawn)(process.execPath, [gatewayScriptPath, '--port', String(gatewayPort)], {
168
168
  cwd: packageRoot,
169
169
  stdio: ['ignore', 'pipe', 'pipe'],
170
- env: { ...process.env, NODE_ENV: 'production' },
170
+ env: { ...process.env, NODE_ENV: 'production', SQLJS_WASM_PATH: (0, database_1.getSqlJsWasmPath)() },
171
171
  })
172
172
  : null;
173
173
  if (gatewayProcess?.stdout) {
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getSqlJsWasmPath = getSqlJsWasmPath;
6
7
  exports.getDatabase = getDatabase;
7
8
  exports.closeDatabase = closeDatabase;
8
9
  exports.getDbPath = getDbPath;
@@ -22,28 +23,25 @@ const DB_PATH = process.env.DB_PATH || path_1.default.join(os_1.default.homedir(
22
23
  function generateRandomApiKey() {
23
24
  return `aar-${crypto_1.default.randomBytes(16).toString('hex')}`;
24
25
  }
25
- // Use hardcoded path for the built/distributed WASM file
26
- // Next.js copies sql-wasm.wasm to its chunks directory
27
- function findSqlJsWasmPath() {
28
- // Try Next.js chunks directory first (works in dev and production)
29
- const nextChunksPath = path_1.default.join(process.cwd(), '.next', 'dev', 'server', 'chunks', 'sql-wasm.wasm');
30
- if (fs_1.default.existsSync(nextChunksPath)) {
31
- return nextChunksPath;
32
- }
33
- // Try production .next directory
34
- const prodChunksPath = path_1.default.join(process.cwd(), '.next', 'server', 'chunks', 'sql-wasm.wasm');
35
- if (fs_1.default.existsSync(prodChunksPath)) {
36
- return prodChunksPath;
37
- }
38
- // Try node_modules as fallback
39
- const nodeModulesPath = path_1.default.join(process.cwd(), 'node_modules', 'sql.js', 'dist', 'sql-wasm.wasm');
40
- if (fs_1.default.existsSync(nodeModulesPath)) {
41
- return nodeModulesPath;
26
+ // sql.js WASM 路径解析(支持 CLI 全局安装、本地开发、Next.js 进程)
27
+ let _wasmPath = null;
28
+ function getSqlJsWasmPath() {
29
+ if (!_wasmPath) {
30
+ // 1. 优先使用环境变量(CLI 启动的 Next.js 进程)
31
+ if (process.env.SQLJS_WASM_PATH) {
32
+ _wasmPath = process.env.SQLJS_WASM_PATH;
33
+ }
34
+ // 2. Next.js 开发/生产模式:使用 cwd 相对路径
35
+ else if (fs_1.default.existsSync(path_1.default.join(process.cwd(), 'node_modules', 'sql.js', 'dist', 'sql-wasm.wasm'))) {
36
+ _wasmPath = path_1.default.join(process.cwd(), 'node_modules', 'sql.js', 'dist', 'sql-wasm.wasm');
37
+ }
38
+ // 3. CLI 模式(tsc 编译后):通过 require.resolve 定位
39
+ else {
40
+ _wasmPath = path_1.default.join(path_1.default.dirname(require.resolve('sql.js')), 'sql-wasm.wasm');
41
+ }
42
42
  }
43
- // Use the most likely location as default
44
- return nodeModulesPath;
43
+ return _wasmPath;
45
44
  }
46
- const SQLJS_WASM_PATH = findSqlJsWasmPath();
47
45
  let dbInstance = null;
48
46
  let sqlJsInstance = null;
49
47
  let lastLoadMtimeMs = 0;
@@ -70,7 +68,7 @@ async function initSqlJsEngine() {
70
68
  sqlJsInstance = await (0, sql_js_1.default)({
71
69
  locateFile: (file) => {
72
70
  if (file.endsWith('.wasm')) {
73
- return SQLJS_WASM_PATH;
71
+ return getSqlJsWasmPath();
74
72
  }
75
73
  return `https://sql.js.org/dist/${file}`;
76
74
  }
@@ -20,6 +20,8 @@ exports.getRequestLogById = getRequestLogById;
20
20
  exports.getRequestLogCount = getRequestLogCount;
21
21
  exports.deleteRequestLogs = deleteRequestLogs;
22
22
  exports.deleteAllRequestLogs = deleteAllRequestLogs;
23
+ exports.getTokenizerLogs = getTokenizerLogs;
24
+ exports.getTokenizerLogCount = getTokenizerLogCount;
23
25
  exports.getConfig = getConfig;
24
26
  exports.setConfig = setConfig;
25
27
  exports.getAllConfig = getAllConfig;
@@ -294,6 +296,25 @@ async function deleteAllRequestLogs() {
294
296
  const result = await (0, database_1.run)('DELETE FROM request_logs');
295
297
  return result.changes;
296
298
  }
299
+ async function getTokenizerLogs(limit = 50, offset = 0) {
300
+ return await (0, database_1.queryAll)(`
301
+ SELECT l.*, m.name as model_name, m.model_id, p.name as provider_name
302
+ FROM request_logs l
303
+ LEFT JOIN models m ON l.model_id = m.id
304
+ LEFT JOIN providers p ON m.provider_id = p.id
305
+ WHERE l.request_path = '/tokenizer/test'
306
+ ORDER BY l.created_at DESC
307
+ LIMIT ? OFFSET ?
308
+ `, [limit, offset]);
309
+ }
310
+ async function getTokenizerLogCount() {
311
+ const result = await (0, database_1.queryOne)(`
312
+ SELECT COUNT(*) as count
313
+ FROM request_logs
314
+ WHERE request_path = '/tokenizer/test'
315
+ `);
316
+ return result?.count || 0;
317
+ }
297
318
  // Config queries
298
319
  async function getConfig(key) {
299
320
  return await (0, database_1.queryOne)('SELECT * FROM config WHERE key = ?', [key]);