@jheavenknows/bluerouter 5.2.18 → 5.2.20

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 (510) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +3 -3
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cluster/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page.js +15 -15
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page_client-reference-manifest.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  43. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  44. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  45. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  46. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  47. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  48. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  49. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  50. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  51. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  52. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  53. package/app/.next-cli-build/server/app/_not-found.rsc +6 -6
  54. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +6 -6
  55. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  56. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +6 -6
  57. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  58. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  59. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  60. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  63. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/api/cluster/config/route.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/api/cluster/heartbeat/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/command/route.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/route.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/api/cluster/peers/route.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/api/cluster/snapshot/route.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/api/cluster/sync/route.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/api/cluster/test/route.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/api/dashboard/analytics/ai-models/route.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/api/dashboard/analytics/analyze/route.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/dashboard/local-ai-report/route.js +5 -5
  95. package/app/.next-cli-build/server/app/api/dashboard/local-ai-report/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  115. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  117. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/personal-cloud-providers/monitor/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  145. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  148. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/resource-monitor/[id]/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/resource-monitor/ai-models/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/resource-monitor/analyze/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/resource-monitor/history/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/resource-monitor/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  166. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  167. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  197. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  199. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  203. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  205. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  207. package/app/.next-cli-build/server/app/callback.html +1 -1
  208. package/app/.next-cli-build/server/app/callback.rsc +6 -6
  209. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +6 -6
  210. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  211. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +6 -6
  212. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  213. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  214. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  215. package/app/.next-cli-build/server/app/dashboard/analytics.html +1 -1
  216. package/app/.next-cli-build/server/app/dashboard/analytics.rsc +7 -7
  217. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +1 -1
  218. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  219. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  220. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  221. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_full.segment.rsc +7 -7
  222. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  223. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_index.segment.rsc +6 -6
  224. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_tree.segment.rsc +2 -2
  225. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  226. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +8 -8
  227. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +2 -2
  228. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
  229. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  230. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  231. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +8 -8
  232. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
  233. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +6 -6
  234. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +2 -2
  235. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  236. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +8 -8
  237. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  238. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  239. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  240. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  241. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +8 -8
  242. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  243. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +6 -6
  244. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  245. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  246. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +8 -8
  247. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  248. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  249. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  250. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  251. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
  252. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  253. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +6 -6
  254. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  255. package/app/.next-cli-build/server/app/dashboard/cluster.html +1 -1
  256. package/app/.next-cli-build/server/app/dashboard/cluster.rsc +7 -7
  257. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster/__PAGE__.segment.rsc +1 -1
  258. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster.segment.rsc +1 -1
  259. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  260. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  261. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_full.segment.rsc +7 -7
  262. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_head.segment.rsc +1 -1
  263. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_index.segment.rsc +6 -6
  264. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_tree.segment.rsc +2 -2
  265. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  266. package/app/.next-cli-build/server/app/dashboard/combos.rsc +8 -8
  267. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  268. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  269. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  270. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  271. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  272. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  273. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +6 -6
  274. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  275. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  276. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +8 -8
  277. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  278. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  279. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  280. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  281. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
  282. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  283. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +6 -6
  284. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  285. package/app/.next-cli-build/server/app/dashboard/local-ai-report.html +1 -1
  286. package/app/.next-cli-build/server/app/dashboard/local-ai-report.rsc +8 -8
  287. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk/dashboard/local-ai-report/__PAGE__.segment.rsc +2 -2
  288. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk/dashboard/local-ai-report.segment.rsc +1 -1
  289. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  290. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  291. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_full.segment.rsc +8 -8
  292. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_head.segment.rsc +1 -1
  293. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_index.segment.rsc +6 -6
  294. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_tree.segment.rsc +2 -2
  295. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  296. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +8 -8
  297. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  298. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  299. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  300. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  301. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  302. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +8 -8
  303. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  304. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +6 -6
  305. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  306. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  307. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +8 -8
  308. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  309. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  310. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  311. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  312. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +8 -8
  313. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  314. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +6 -6
  315. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  316. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  317. package/app/.next-cli-build/server/app/dashboard/profile.rsc +8 -8
  318. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  319. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  320. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  321. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  322. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
  323. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  324. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +6 -6
  325. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  326. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  327. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +7 -7
  328. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
  329. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  330. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  331. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  332. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +7 -7
  333. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  334. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +6 -6
  335. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +2 -2
  336. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  337. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +7 -7
  338. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  339. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  340. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  341. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  342. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +7 -7
  343. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  344. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +6 -6
  345. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +2 -2
  346. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  347. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +8 -8
  348. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  349. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  350. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  351. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  352. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  353. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  354. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  355. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +6 -6
  356. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  357. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  358. package/app/.next-cli-build/server/app/dashboard/providers.rsc +8 -8
  359. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  360. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  361. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  362. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  363. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  364. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  365. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +6 -6
  366. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  367. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  368. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +8 -8
  369. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  370. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  371. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  372. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  373. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  374. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  375. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +6 -6
  376. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  377. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  378. package/app/.next-cli-build/server/app/dashboard/quota.rsc +9 -9
  379. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  380. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  381. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  382. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  383. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  384. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  385. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +6 -6
  386. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  387. package/app/.next-cli-build/server/app/dashboard/resource-monitor.html +1 -1
  388. package/app/.next-cli-build/server/app/dashboard/resource-monitor.rsc +7 -7
  389. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor/__PAGE__.segment.rsc +1 -1
  390. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor.segment.rsc +1 -1
  391. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  392. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  393. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_full.segment.rsc +7 -7
  394. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_head.segment.rsc +1 -1
  395. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_index.segment.rsc +6 -6
  396. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_tree.segment.rsc +2 -2
  397. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  398. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  399. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +6 -6
  400. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  401. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  402. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +6 -6
  403. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  404. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  405. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  406. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  407. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  408. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  409. package/app/.next-cli-build/server/app/dashboard/skills.rsc +8 -8
  410. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  411. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  412. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  413. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  414. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
  415. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  416. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +6 -6
  417. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  418. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  419. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +7 -7
  420. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +1 -1
  421. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  422. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  423. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  424. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +7 -7
  425. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  426. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +6 -6
  427. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  428. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  429. package/app/.next-cli-build/server/app/dashboard/translator.rsc +8 -8
  430. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  431. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  432. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  433. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  434. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +8 -8
  435. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  436. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +6 -6
  437. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  438. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  439. package/app/.next-cli-build/server/app/dashboard/usage.rsc +8 -8
  440. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  441. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  442. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  443. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  444. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  445. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  446. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +6 -6
  447. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  448. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  449. package/app/.next-cli-build/server/app/dashboard.rsc +8 -8
  450. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  451. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  452. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  453. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +8 -8
  454. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  455. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +6 -6
  456. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  457. package/app/.next-cli-build/server/app/index.html +1 -1
  458. package/app/.next-cli-build/server/app/index.rsc +6 -6
  459. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  460. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +6 -6
  461. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  462. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +6 -6
  463. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  464. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  465. package/app/.next-cli-build/server/app/landing.html +1 -1
  466. package/app/.next-cli-build/server/app/landing.rsc +6 -6
  467. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
  468. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  469. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +6 -6
  470. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  471. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  472. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  473. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  474. package/app/.next-cli-build/server/app/login.html +1 -1
  475. package/app/.next-cli-build/server/app/login.rsc +7 -7
  476. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +7 -7
  477. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  478. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +6 -6
  479. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  480. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  481. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  482. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  483. package/app/.next-cli-build/server/app-paths-manifest.json +3 -3
  484. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  485. package/app/.next-cli-build/server/chunks/402.js +61 -16
  486. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  487. package/app/.next-cli-build/server/chunks/6328.js +1 -1
  488. package/app/.next-cli-build/server/chunks/6759.js +1 -1
  489. package/app/.next-cli-build/server/chunks/6811.js +1 -1
  490. package/app/.next-cli-build/server/chunks/689.js +28 -0
  491. package/app/.next-cli-build/server/chunks/8895.js +1 -1
  492. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  493. package/app/.next-cli-build/server/middleware.js +28 -0
  494. package/app/.next-cli-build/server/pages/404.html +1 -1
  495. package/app/.next-cli-build/server/pages/500.html +1 -1
  496. package/app/.next-cli-build/static/chunks/{5263-56598edd0b9e66c2.js → 5263-8c24fd5eabff1c5a.js} +1 -1
  497. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/local-ai-report/page-167ae2f35cbf97e2.js +18 -0
  498. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-6ea6e09d94d5570e.js +1 -0
  499. package/app/.next-cli-build/static/css/7687f39ebae1ff66.css +1 -0
  500. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.1.56-to-5.2.13-5.2.13-20260722-202514 → upgrade-5.2.17-to-5.2.18-5.2.18-20260723-212148}/data.sqlite +0 -0
  501. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.1.55-to-5.1.56-5.1.56-20260721-214906 → upgrade-5.2.17-to-5.2.18-5.2.18-20260723-212149}/data.sqlite +0 -0
  502. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-5.2.18-to-5.2.19-5.2.19-20260723-214046/data.sqlite +0 -0
  503. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite +0 -0
  504. package/app/package.json +1 -1
  505. package/package.json +1 -1
  506. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/local-ai-report/page-9c1fb41255bbe9cb.js +0 -18
  507. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-b19a726c3b016a28.js +0 -1
  508. package/app/.next-cli-build/static/css/4e196fc2c3dc0029.css +0 -1
  509. /package/app/.next-cli-build/static/{8NATkNodjIH5tQqWSrPe3 → ufbLQO6ZO7_9PjYiywNJA}/_buildManifest.js +0 -0
  510. /package/app/.next-cli-build/static/{8NATkNodjIH5tQqWSrPe3 → ufbLQO6ZO7_9PjYiywNJA}/_ssgManifest.js +0 -0
@@ -1,19 +1,19 @@
1
1
  (()=>{var a={};a.id=7179,a.ids=[7179],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},1932:a=>{"use strict";a.exports=require("url")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{"use strict";a.exports=require("node:buffer")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},17891:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/get-segment-param")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},19771:a=>{"use strict";a.exports=require("process")},21820:a=>{"use strict";a.exports=require("os")},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},27910:a=>{"use strict";a.exports=require("stream")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},30721:(a,b,c)=>{"use strict";c.r(b),c.d(b,{__next_app__:()=>O,handler:()=>Q,routeModule:()=>P});var d=c(7553),e=c(84006),f=c(67798),g=c(34775),h=c(99373),i=c(73461),j=c(1020),k=c(26349),l=c(54365),m=c(16023),n=c(14965),o=c(63747),p=c(24235),q=c(23938),r=c(261),s=c(66758),t=c(77243),u=c(26713),v=c(37527),w=c(22820),x=c(88216),y=c(47929),z=c(79551),A=c(71797),B=c(89125),C=c(86439),D=c(77068),E=c(27269),F=c(37525),G=c(61287),H=c(81494),I=c(70722),J=c(70753),K=c(43954),L=c(17891),M={};for(let a in G)0>["default","__next_app__","routeModule","handler"].indexOf(a)&&(M[a]=()=>G[a]);c.d(b,M);let N={children:["",{children:["(dashboard)",{children:["dashboard",{children:["local-ai-report",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.bind(c,80111)),"D:\\bluerouter\\src\\app\\(dashboard)\\dashboard\\local-ai-report\\page.js"]}]},{"global-error":[()=>Promise.resolve().then(c.t.bind(c,95547,23)),"next/dist/client/components/builtin/global-error.js"]},[]]},{"global-error":[()=>Promise.resolve().then(c.t.bind(c,95547,23)),"next/dist/client/components/builtin/global-error.js"]},[]]},{layout:[()=>Promise.resolve().then(c.bind(c,30508)),"D:\\bluerouter\\src\\app\\(dashboard)\\layout.js"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,95547,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,55091,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,45270,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,28193,23)),"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[async a=>(await Promise.resolve().then(c.bind(c,70440))).default(a)],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]},{layout:[()=>Promise.resolve().then(c.bind(c,32059)),"D:\\bluerouter\\src\\app\\layout.js"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,95547,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,55091,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,45270,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,28193,23)),"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[async a=>(await Promise.resolve().then(c.bind(c,70440))).default(a)],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]}.children,O={require:c,loadChunk:()=>Promise.resolve()},P=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/(dashboard)/dashboard/local-ai-report/page",pathname:"/dashboard/local-ai-report",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:N},distDir:".next-cli-build",relativeProjectDir:""});async function Q(a,b,d){var M,R,S,T,U;d.requestMeta&&(0,h.setRequestMeta)(a,d.requestMeta),P.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let V=!!(0,h.getRequestMeta)(a,"minimalMode"),W="/(dashboard)/dashboard/local-ai-report/page";"/index"===W&&(W="/");let X=await P.prepare(a,b,{srcPage:W,multiZoneDraftMode:!1});if(!X)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:Y,query:Z,params:$,pageIsDynamic:_,buildManifest:aa,nextFontManifest:ab,reactLoadableManifest:ac,serverActionsManifest:ad,clientReferenceManifest:ae,subresourceIntegrityManifest:af,prerenderManifest:ag,isDraftMode:ah,resolvedPathname:ai,revalidateOnlyGenerated:aj,routerServerContext:ak,nextConfig:al,parsedUrl:am,interceptionRoutePatterns:an,deploymentId:ao,clientAssetToken:ap}=X,aq=(0,r.normalizeAppPath)(W),{isOnDemandRevalidate:ar}=X,as=al.experimental.ppr&&!al.cacheComponents&&(0,K.isInterceptionRouteAppPath)(ai)?null:P.match(ai,ag),at=(null==as?void 0:as.route)??null,au=!!ag.routes[ai],av=a.headers["user-agent"]||"",aw=(0,u.getBotType)(av),ax=(0,q.isHtmlBotRequest)(a),ay=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[t.NEXT_ROUTER_PREFETCH_HEADER],az=(0,h.getRequestMeta)(a,"isRSCRequest")??(0,n.f)(a.headers[t.RSC_HEADER]),aA=(0,s.getIsPossibleServerAction)(a),aB=(0,m.checkIsAppPPREnabled)(al.experimental.ppr),aC=a.headers[y.NEXT_RESUME_STATE_LENGTH_HEADER];if(!(0,h.getRequestMeta)(a,"postponed")&&V&&aB&&aA&&aC&&"string"==typeof aC){let e=parseInt(aC,10),{maxPostponedStateSize:f,maxPostponedStateSizeBytes:g}=(0,E.getMaxPostponedStateSize)(al.experimental.maxPostponedStateSize);if(!isNaN(e)&&e>0){if(e>g)return b.statusCode=413,b.end((0,E.getPostponedStateExceededErrorMessage)(f)),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let i="1 MB",j=(null==(U=al.experimental.serverActions)?void 0:U.bodySizeLimit)??i,k=e+(j!==i?c(95726).parse(j):1048576),l=await (0,E.readBodyWithSizeLimit)(a,k);if(null===l)return b.statusCode=413,b.end("Request body exceeded limit. To configure the body size limit for Server Actions, see: https://nextjs.org/docs/app/api-reference/next-config-js/serverActions#bodysizelimit"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;if(l.length>=e){let b=l.subarray(0,e).toString("utf8");(0,h.addRequestMeta)(a,"postponed",b);let c=l.subarray(e);(0,h.addRequestMeta)(a,"actionBody",c)}else throw Object.defineProperty(Error(`invariant: expected ${e} bytes of postponed state but only received ${l.length} bytes`),"__NEXT_ERROR_CODE",{value:"E979",enumerable:!1,configurable:!0})}}if(!(0,h.getRequestMeta)(a,"postponed")&&aB&&"1"===a.headers[y.NEXT_RESUME_HEADER]&&"POST"===a.method){let{maxPostponedStateSize:c,maxPostponedStateSizeBytes:e}=(0,E.getMaxPostponedStateSize)(al.experimental.maxPostponedStateSize),f=await (0,E.readBodyWithSizeLimit)(a,e);if(null===f)return b.statusCode=413,b.end((0,E.getPostponedStateExceededErrorMessage)(c)),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let g=f.toString("utf8");(0,h.addRequestMeta)(a,"postponed",g)}let aD=!0===P.isDev||!0===al.experimental.exposeTestingApiInProductionBuild,aE=aD&&("1"===a.headers[t.NEXT_INSTANT_PREFETCH_HEADER]||!(0,n.f)(a.headers[t.RSC_HEADER])&&"string"==typeof a.headers.cookie&&a.headers.cookie.includes(t.NEXT_INSTANT_TEST_COOKIE+"=")),aF=(aB||aE)&&((null==(M=ag.routes[aq]??ag.dynamicRoutes[aq])?void 0:M.renderingMode)==="PARTIALLY_STATIC"||aE&&(aD||(null==ak?void 0:ak.experimentalTestProxy)===!0)),aG=aE&&aF,aH=aG&&!0===P.isDev,aI=!1,aJ=aF?(0,h.getRequestMeta)(a,"postponed"):void 0,aK=null==(R=ag.routes[ai])?void 0:R.prefetchDataRoute,aL=aF&&az&&!ay&&!aK;V&&(aL=aL&&!!aJ);let aM=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),aN=(!aw||!aF)&&(!av||(0,q.shouldServeStreamingMetadata)(av,al.htmlLimitedBots)),aO=!!((at||au||ag.routes[aq])&&!(aw&&aF)),aP=aF&&!0===al.cacheComponents,aQ=!0===P.isDev||!aO||"string"==typeof aJ||(aP&&(0,h.getRequestMeta)(a,"onCacheEntryV2")?aL&&!V:aL),aR=!!aw&&aF,aS=(null==at?void 0:at.remainingPrerenderableParams)??[],aT=(null==at?void 0:at.fallback)===null&&((null==(S=at.fallbackRootParams)?void 0:S.length)??0)>0,aU=null;if(!ah&&aO&&!aQ&&!aA&&!aJ&&!aL){let a=as?"string"==typeof(null==at?void 0:at.fallback)?at.fallback:as.source:null;if(!0===al.experimental.partialFallbacks&&a&&(null==at?void 0:at.fallbackRouteParams)&&!aT){if(aS.length>0){let b,c=(b=new Map(aS.map(a=>[a.paramName,a])),a.split("/").map(a=>{let c=(0,L.getSegmentParam)(a);if(!c)return a;let d=b.get(c.paramName);if(!d)return a;let e=null==$?void 0:$[d.paramName];if(!e)return a;let f=Array.isArray(e)?e.map(a=>encodeURIComponent(a)).join("/"):encodeURIComponent(e);return a.replace((0,o.buildDynamicSegmentPlaceholder)(d),f)}).join("/")||"/");aU=c!==a?c:null}}else aU=ai}let aV=aU;!aV&&(P.isDev||aO&&_&&(null==at?void 0:at.fallbackRouteParams)&&!aA)&&(aV=ai),P.isDev||ah||!aO||!az||aL||(0,k.d)(a.headers);let aW={...G,tree:N,handler:Q,routeModule:P,__next_app__:O};ad&&ae&&(0,p.setManifestsSingleton)({page:W,clientReferenceManifest:ae,serverActionsManifest:ad});let aX=a.method||"GET",aY=(0,g.getTracer)(),aZ=aY.getActiveScopeSpan(),a$=!!(null==ak?void 0:ak.isWrappedByNextServer),a_=!0===al.experimental.partialFallbacks&&aS.length>0?(null==at||null==(T=at.fallbackRouteParams)?void 0:T.filter(a=>!aS.some(b=>b.paramName===a.paramName)))??[]:[],a0=async()=>((null==ak?void 0:ak.render404)?await ak.render404(a,b,am,!1):b.end("This page could not be found"),null);try{let k,m=P.getVaryHeader(ai,an);b.setHeader("Vary",m);let n=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return P.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let a=aY.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let d=a.get("next.route");if(d){let a=`${aX} ${d}`;c.setAttributes({"next.route":d,"http.route":d,"next.span_name":a}),c.updateName(a),k&&k!==c&&(k.setAttribute("http.route",d),k.updateName(a))}else c.updateName(`${aX} ${W}`)})},p=(0,h.getRequestMeta)(a,"incrementalCache")||await P.getIncrementalCache(a,al,ag,V);null==p||p.resetRequestCache(),globalThis.__incrementalCache=p;let q=async({span:e,postponed:f,fallbackRouteParams:g,forceStaticRender:i})=>{let k={query:Z,params:$,page:aq,sharedContext:{buildId:Y,deploymentId:ao,clientAssetToken:ap},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aW,Component:(0,j.T)(aW),params:$,routeModule:P,page:W,postponed:f,shouldWaitOnAllReady:aR,serveStreamingMetadata:aN,supportsDynamicResponse:"string"==typeof f||aQ,buildManifest:aa,nextFontManifest:ab,reactLoadableManifest:ac,subresourceIntegrityManifest:af,setCacheStatus:null==ak?void 0:ak.setCacheStatus,setIsrStatus:null==ak?void 0:ak.setIsrStatus,setReactDebugChannel:null==ak?void 0:ak.setReactDebugChannel,sendErrorsToBrowser:null==ak?void 0:ak.sendErrorsToBrowser,dir:c(33873).join(process.cwd(),P.relativeProjectDir),isDraftMode:ah,botType:aw,isOnDemandRevalidate:ar,isPossibleServerAction:aA,assetPrefix:al.assetPrefix,nextConfigOutput:al.output,crossOrigin:al.crossOrigin,trailingSlash:al.trailingSlash,images:al.images,previewProps:ag.preview,enableTainting:al.experimental.taint,htmlLimitedBots:al.htmlLimitedBots,reactMaxHeadersLength:al.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:p,cacheLifeProfiles:al.cacheLife,basePath:al.basePath,serverActions:al.experimental.serverActions,logServerFunctions:"object"==typeof al.logging&&!!al.logging.serverFunctions,...aG||aH||aI?{isBuildTimePrerendering:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isDebugDynamicAccesses:aH}:{},cacheComponents:!!al.cacheComponents,experimental:{isRoutePPREnabled:aF,expireTime:al.expireTime,staleTimes:al.experimental.staleTimes,dynamicOnHover:!!al.experimental.dynamicOnHover,optimisticRouting:!!al.experimental.optimisticRouting,inlineCss:!!al.experimental.inlineCss,prefetchInlining:al.experimental.prefetchInlining??!1,authInterrupts:!!al.experimental.authInterrupts,cachedNavigations:!!al.experimental.cachedNavigations,clientTraceMetadata:al.experimental.clientTraceMetadata||[],clientParamParsingOrigins:al.experimental.clientParamParsingOrigins,maxPostponedStateSizeBytes:(0,D.parseMaxPostponedStateSize)(al.experimental.maxPostponedStateSize)},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d,e)=>P.onRequestError(a,b,d,e,ak),err:(0,h.getRequestMeta)(a,"invokeError")}};i&&(k.renderOpts.supportsDynamicResponse=!1);let l=await n(e,k),{metadata:m}=l,{cacheControl:o,headers:q={},fetchTags:r,fetchMetrics:s}=m;if(r&&(q[y.NEXT_CACHE_TAGS_HEADER]=r),a.fetchMetrics=s,aO&&(null==o?void 0:o.revalidate)===0&&!P.isDev&&!aF){let a=m.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${ai}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
2
- see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:v.CachedRouteKind.APP_PAGE,html:l,headers:q,rscData:m.flightData,postponed:m.postponed,status:m.statusCode,segmentData:m.segmentData},cacheControl:o}},r=async({hasResolved:c,previousCacheEntry:g,isRevalidating:i,span:j,forceStaticRender:k=!1})=>{let l=!1===P.isDev,m=c||b.writableEnded;try{var n;let f;if(ar&&aj&&!g&&!V)return(null==ak?void 0:ak.render404)?await ak.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(at&&(f=(0,w.parseFallbackField)(at.fallback)),!0===al.experimental.partialFallbacks&&(null==at?void 0:at.fallback)===null&&!aT&&aS.length>0&&(f=w.FallbackMode.PRERENDER),f===w.FallbackMode.PRERENDER&&(0,u.isBot)(av)&&(!aF||ax)&&(f=w.FallbackMode.BLOCKING_STATIC_RENDER),(null==g?void 0:g.isStale)===-1&&(ar=!0),ar&&(f!==w.FallbackMode.NOT_FOUND||g)&&(f=w.FallbackMode.BLOCKING_STATIC_RENDER),!V&&f!==w.FallbackMode.BLOCKING_STATIC_RENDER&&aV&&!m&&!ah&&_&&(l||!au)){if((l||at)&&f===w.FallbackMode.NOT_FOUND){if(al.adapterPath)return await a0();throw new C.NoFallbackError}if(aF&&(al.cacheComponents?!aL:!az)){let b=l&&"string"==typeof(null==at?void 0:at.fallback)?at.fallback:aq,f=(l||aG)&&(null==at?void 0:at.fallbackRouteParams)?(0,o.createOpaqueFallbackRouteParams)(at.fallbackRouteParams):aI?(0,o.getFallbackRouteParams)(aq,P):null;aG&&f&&(0,h.addRequestMeta)(a,"fallbackParams",f);let g=await P.handleResponse({cacheKey:b,req:a,nextConfig:al,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:ag,isRoutePPREnabled:aF,responseGenerator:async()=>q({span:j,postponed:void 0,fallbackRouteParams:f,forceStaticRender:!0}),waitUntil:d.waitUntil,isMinimalMode:V});if(null===g)return null;if(g)return V||!aF||!(aS.length>0)||!0!==al.experimental.partialFallbacks||!aU||!p||ar||aI||aD||aE||ay||(0,J.scheduleOnNextTick)(async()=>{let b=P.getResponseCache(a);try{await b.revalidate(aU,p,aF,!1,a=>q({span:a.span,postponed:void 0,fallbackRouteParams:a_.length>0?(0,o.createOpaqueFallbackRouteParams)(a_):null,forceStaticRender:!0}),null,c,d.waitUntil)}catch(a){console.error("Error revalidating the page in the background",a)}}),delete g.cacheControl,g}}let s=ar||i||!aJ?void 0:aJ;if(aP&&!V&&p&&(aL||aA)&&!k){let b=await p.get(ai,{kind:v.IncrementalCacheKind.APP_PAGE,isRoutePPREnabled:!0,isFallback:!1});b&&b.value&&b.value.kind===v.CachedRouteKind.APP_PAGE&&(s=b.value.postponed,b&&(-1===b.isStale||!0===b.isStale)&&(0,J.scheduleOnNextTick)(async()=>{let b=P.getResponseCache(a);try{await b.revalidate(ai,p,aF,!1,a=>r({...a,forceStaticRender:!0}),null,c,d.waitUntil)}catch(a){console.error("Error revalidating the page in the background",a)}}))}if((aG||aH)&&void 0!==s)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:v.CachedRouteKind.PAGES,html:x.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let t=!P.isDev&&_&&(null==at?void 0:at.fallbackRouteParams)?(0,o.getPlaceholderFallbackRouteParams)($,at.fallbackRouteParams):null,y=t&&t.length>0?t:null==at?void 0:at.fallbackRouteParams,z=null!=t&&t.length>0,A=null;if(al.cacheComponents&&(null==at?void 0:at.fallbackRouteParams)){let b=(0,h.getRequestMeta)(a,"resolvedRouteParamKeys");b&&b.size>0&&(A=at.fallbackRouteParams.filter(a=>!b.has(a.paramName)))}let B=(l&&(0,h.getRequestMeta)(a,"renderFallbackShell")||z||aG&&!au)&&y?(0,o.createOpaqueFallbackRouteParams)(y):A&&A.length>0&&A.length<((null==at||null==(n=at.fallbackRouteParams)?void 0:n.length)??0)?(0,o.createOpaqueFallbackRouteParams)(A):aI?(0,o.getFallbackRouteParams)(aq,P):null;if((l||aG)&&al.cacheComponents&&!au&&(null==at?void 0:at.fallbackRouteParams)){let b=(0,o.createOpaqueFallbackRouteParams)(y??at.fallbackRouteParams);b&&(0,h.addRequestMeta)(a,"fallbackParams",b)}return q({span:j,postponed:s,fallbackRouteParams:B,forceStaticRender:k})}catch(b){throw(null==g?void 0:g.isStale)&&await P.onRequestError(a,b,{routerKind:"App Router",routePath:W,routeType:"render",revalidateReason:(0,f.c)({isStaticGeneration:aO,isOnDemandRevalidate:ar})},!1,ak),b}},s=async c=>{var f,g,i,j,k,l;let m,n=await P.handleResponse({cacheKey:aU,responseGenerator:a=>r({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ar,isRoutePPREnabled:aF,req:a,nextConfig:al,prerenderManifest:ag,waitUntil:d.waitUntil,isMinimalMode:V});if(ah&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),P.isDev&&b.setHeader("Cache-Control","no-cache, must-revalidate"),!n){if(aU)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=n.value)?void 0:f.kind)!==v.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=n.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let o="string"==typeof n.value.postponed;az&&!aA&&ao&&b.setHeader(y.NEXT_NAV_DEPLOYMENT_ID_HEADER,ao),aO&&!aL&&(!o||ay)&&(V||b.setHeader("x-nextjs-cache",ar?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),b.setHeader(t.NEXT_IS_PRERENDER_HEADER,"1"));let{value:p}=n;if(aJ)m={revalidate:0,expire:void 0};else if(aL)m={revalidate:0,expire:void 0};else if(!P.isDev)if(ah)m={revalidate:0,expire:void 0};else if(aO){if(n.cacheControl)if("number"==typeof n.cacheControl.revalidate){if(n.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${n.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});m={revalidate:n.cacheControl.revalidate,expire:(null==(j=n.cacheControl)?void 0:j.expire)??al.expireTime}}else m={revalidate:y.CACHE_ONE_YEAR_SECONDS,expire:void 0}}else b.getHeader("Cache-Control")||(m={revalidate:0,expire:void 0});if(n.cacheControl=m,"string"==typeof aM&&(null==p?void 0:p.kind)===v.CachedRouteKind.APP_PAGE&&p.segmentData){b.setHeader(t.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=p.headers)?void 0:k[y.NEXT_CACHE_TAGS_HEADER];V&&aO&&c&&"string"==typeof c&&b.setHeader(y.NEXT_CACHE_TAGS_HEADER,c);let d=p.segmentData.get(aM);return void 0!==d?(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:x.default.fromStatic(d,t.RSC_CONTENT_TYPE_HEADER),cacheControl:n.cacheControl}):(b.statusCode=204,(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:x.default.EMPTY,cacheControl:n.cacheControl}))}let s=aP?(0,h.getRequestMeta)(a,"onCacheEntryV2")??(0,h.getRequestMeta)(a,"onCacheEntry"):(0,h.getRequestMeta)(a,"onCacheEntry");if(s){let b=(0,h.getRequestMeta)(a,"initURL")??a.url,c=b?(null==(l=(0,F.parseUrl)(b))?void 0:l.pathname)??b:void 0;if(await s(n,{url:c}))return null}if(p.headers){let a={...p.headers};for(let[c,d]of(V&&aO||delete a[y.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let u=null==(g=p.headers)?void 0:g[y.NEXT_CACHE_TAGS_HEADER];if(V&&aO&&u&&"string"==typeof u&&b.setHeader(y.NEXT_CACHE_TAGS_HEADER,u),!p.status||az&&aF||(b.statusCode=p.status),!V&&p.status&&H.RedirectStatusCode[p.status]&&az&&(b.statusCode=200),o&&!aL&&b.setHeader(t.NEXT_DID_POSTPONE_HEADER,"1"),az&&!ah){if(void 0===p.rscData){if(p.html.contentType!==t.RSC_CONTENT_TYPE_HEADER)if(al.cacheComponents)return b.statusCode=404,(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:x.default.EMPTY,cacheControl:n.cacheControl});else throw Object.defineProperty(new I.InvariantError(`Expected RSC response, got ${p.html.contentType}`),"__NEXT_ERROR_CODE",{value:"E789",enumerable:!1,configurable:!0});return(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:p.html,cacheControl:n.cacheControl})}return(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:x.default.fromStatic(p.rscData,t.RSC_CONTENT_TYPE_HEADER),cacheControl:n.cacheControl})}let w=p.html;if(aE&&aG){let c=!0===P.isDev?crypto.randomUUID():null;return w.pipeThrough(await (0,A.createInstantTestScriptInsertionTransformStream)(c)),(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:w,cacheControl:{revalidate:0,expire:void 0}})}if(!o||V||az)return(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:w,cacheControl:n.cacheControl});if(aG||aH)return w.push(new ReadableStream({start(a){a.enqueue(z.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:w,cacheControl:{revalidate:0,expire:void 0}});let C=new TransformStream;return w.push(C.readable),q({span:c,postponed:p.postponed,fallbackRouteParams:null,forceStaticRender:!1}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==v.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(C.writable)}).catch(a=>{C.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:w,cacheControl:{revalidate:0,expire:void 0}})};if(!a$||!aZ)return k=aY.getActiveScopeSpan(),await aY.withPropagatedContext(a.headers,()=>aY.trace(i.BaseServerSpan.handleRequest,{spanName:`${aX} ${W}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aX,"http.target":a.url}},s),void 0,!a$);await s(aZ)}catch(b){throw b instanceof C.NoFallbackError||await P.onRequestError(a,b,{routerKind:"App Router",routePath:W,routeType:"render",revalidateReason:(0,f.c)({isStaticGeneration:aO,isOnDemandRevalidate:ar})},!1,ak),b}}},32746:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\bluerouter\\\\src\\\\app\\\\(dashboard)\\\\dashboard\\\\local-ai-report\\\\LocalAiReportClient.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\bluerouter\\src\\app\\(dashboard)\\dashboard\\local-ai-report\\LocalAiReportClient.js","default")},33873:a=>{"use strict";a.exports=require("path")},34631:a=>{"use strict";a.exports=require("tls")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},41204:a=>{"use strict";a.exports=require("string_decoder")},43954:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/interception-routes")},46293:a=>{"use strict";a.exports=require("sql.js")},51455:a=>{"use strict";a.exports=require("node:fs/promises")},53053:a=>{"use strict";a.exports=require("node:diagnostics_channel")},55511:a=>{"use strict";a.exports=require("crypto")},56785:(a,b,c)=>{Promise.resolve().then(c.bind(c,85080))},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},64939:a=>{"use strict";a.exports=import("pg")},66136:a=>{"use strict";a.exports=require("timers")},70722:a=>{"use strict";a.exports=require("next/dist/shared/lib/invariant-error")},73024:a=>{"use strict";a.exports=require("node:fs")},74075:a=>{"use strict";a.exports=require("zlib")},76760:a=>{"use strict";a.exports=require("node:path")},77068:a=>{"use strict";a.exports=require("next/dist/shared/lib/size-limit")},77598:a=>{"use strict";a.exports=require("node:crypto")},79428:a=>{"use strict";a.exports=require("buffer")},79748:a=>{"use strict";a.exports=require("fs/promises")},80099:a=>{"use strict";a.exports=require("node:sqlite")},80111:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g,metadata:()=>f});var d=c(5735),e=c(32746);let f={title:"Local AI Report"};function g(){return(0,d.jsx)(e.default,{})}},81787:a=>{"use strict";a.exports=require("bun:sqlite")},85080:(a,b,c)=>{"use strict";c.d(b,{default:()=>D});var d=c(48249),e=c(67484),f=c(20151);let g={normal:{label:"Ổn định",badge:"border-emerald-400/25 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300",dot:"bg-emerald-500"},warning:{label:"Cần theo d\xf5i",badge:"border-amber-400/25 bg-amber-500/10 text-amber-700 dark:text-amber-300",dot:"bg-amber-500"},critical:{label:"Nghi\xeam trọng",badge:"border-red-400/25 bg-red-500/10 text-red-700 dark:text-red-300",dot:"bg-red-500"},no_traffic:{label:"Kh\xf4ng c\xf3 lưu lượng",badge:"border-slate-400/25 bg-slate-500/10 text-slate-700 dark:text-slate-300",dot:"bg-slate-400"}},h={P0:"border-red-500/25 bg-red-500/10 text-red-700 dark:text-red-300",P1:"border-amber-500/25 bg-amber-500/10 text-amber-700 dark:text-amber-300",P2:"border-blue-500/25 bg-blue-500/10 text-blue-700 dark:text-blue-300"};function i(...a){return a.filter(Boolean).join(" ")}function j(a,b=0){return Number(a||0).toLocaleString("vi-VN",{maximumFractionDigits:b})}function k(a){return Intl.NumberFormat("vi-VN",{notation:"compact",maximumFractionDigits:1}).format(Number(a||0))}function l(a,b=1){return`${(100*Number(a||0)).toLocaleString("vi-VN",{maximumFractionDigits:b})}%`}function m(a){if(null==a||!Number.isFinite(Number(a)))return"-";let b=Number(a);return b>=1e3?`${(b/1e3).toLocaleString("vi-VN",{maximumFractionDigits:2})}s`:`${Math.round(b).toLocaleString("vi-VN")}ms`}function n(a){if(!a)return"-";let b=new Date(a);return Number.isNaN(b.getTime())?String(a):b.toLocaleString("vi-VN",{timeZone:"Asia/Ho_Chi_Minh",day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1})}function o(a){let b=Number(a||0);if(!b)return"-";let c=["B","KiB","MiB","GiB","TiB"],d=Math.min(Math.floor(Math.log(b)/Math.log(1024)),c.length-1);return`${(b/1024**d).toLocaleString("vi-VN",{maximumFractionDigits:1})} ${c[d]}`}function p({status:a}){let b=g[a]||g.no_traffic;return(0,d.jsxs)("span",{className:i("inline-flex items-center gap-2 rounded-full border px-3 py-1.5 text-xs font-semibold",b.badge),children:[(0,d.jsx)("span",{className:i("h-2 w-2 rounded-full",b.dot)}),b.label]})}function q({value:a}){return(0,d.jsx)("span",{className:i("inline-flex rounded-full border px-2.5 py-1 text-[11px] font-bold",h[a]||h.P2),children:a||"P2"})}function r({eyebrow:a,title:b,description:c,icon:e}){return(0,d.jsxs)("div",{className:"mb-5 flex items-start justify-between gap-4",children:[(0,d.jsxs)("div",{children:[a?(0,d.jsx)("div",{className:"mb-1 text-[11px] font-bold uppercase tracking-[0.18em] text-primary",children:a}):null,(0,d.jsx)("h2",{className:"text-xl font-bold tracking-tight text-text-main",children:b}),c?(0,d.jsx)("p",{className:"mt-1 max-w-3xl text-sm leading-6 text-text-muted",children:c}):null]}),e?(0,d.jsx)("span",{className:"material-symbols-outlined rounded-2xl bg-primary/10 p-3 text-[24px] text-primary",children:e}):null]})}function s({children:a,className:b=""}){return(0,d.jsx)("section",{className:i("rounded-[28px] border border-border bg-surface p-5 shadow-sm md:p-7",b),children:a})}function t({icon:a,label:b,value:c,hint:e,tone:f="blue"}){let g={blue:"from-blue-500/15 to-cyan-500/5 text-blue-600 dark:text-blue-300",emerald:"from-emerald-500/15 to-teal-500/5 text-emerald-600 dark:text-emerald-300",violet:"from-violet-500/15 to-fuchsia-500/5 text-violet-600 dark:text-violet-300",amber:"from-amber-500/15 to-orange-500/5 text-amber-600 dark:text-amber-300",rose:"from-rose-500/15 to-red-500/5 text-rose-600 dark:text-rose-300",slate:"from-slate-500/15 to-slate-500/5 text-slate-600 dark:text-slate-300"}[f]||"from-blue-500/15 to-cyan-500/5 text-blue-600 dark:text-blue-300";return(0,d.jsxs)("div",{className:"relative overflow-hidden rounded-2xl border border-border bg-background p-4",children:[(0,d.jsx)("div",{className:i("absolute inset-0 bg-gradient-to-br opacity-80",g)}),(0,d.jsxs)("div",{className:"relative flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"text-xs font-semibold uppercase tracking-[0.12em] text-text-muted",children:b}),(0,d.jsx)("div",{className:"mt-2 text-2xl font-black tracking-tight text-text-main",children:c}),e?(0,d.jsx)("div",{className:"mt-1.5 text-xs text-text-muted",children:e}):null]}),(0,d.jsx)("span",{className:i("material-symbols-outlined rounded-xl bg-background/70 p-2 text-[21px]",g),children:a})]})]})}function u({value:a,max:b=100,label:c,tone:e="bg-primary"}){let f=Math.max(0,Math.min(100,Number(a||0)/b*100));return(0,d.jsxs)("div",{children:[(0,d.jsxs)("div",{className:"mb-1.5 flex items-center justify-between text-xs text-text-muted",children:[(0,d.jsx)("span",{children:c}),(0,d.jsx)("span",{children:j(a,1)})]}),(0,d.jsx)("div",{className:"h-2 overflow-hidden rounded-full bg-surface-2",children:(0,d.jsx)("div",{className:i("h-full rounded-full transition-all",e),style:{width:`${f}%`}})})]})}function v({rows:a=[]}){let b=Math.max(1,...a.map(a=>Number(a.requests||0)));return(0,d.jsx)("div",{className:"overflow-x-auto pb-2",children:(0,d.jsx)("div",{className:"flex min-w-[760px] items-end gap-3 pt-8",children:a.map(a=>{let c=Math.max(8,Number(a.requests||0)/b*180);return(0,d.jsxs)("div",{className:"group flex flex-1 flex-col items-center gap-2",children:[(0,d.jsxs)("div",{className:"relative flex h-[205px] w-full items-end justify-center",children:[(0,d.jsxs)("div",{className:"absolute bottom-full left-1/2 z-10 mb-2 hidden w-52 -translate-x-1/2 rounded-xl border border-border bg-background p-3 text-xs shadow-xl group-hover:block",children:[(0,d.jsx)("div",{className:"font-bold text-text-main",children:a.date}),(0,d.jsxs)("div",{className:"mt-1 text-text-muted",children:["Request: ",j(a.requests)]}),(0,d.jsxs)("div",{className:"text-text-muted",children:["Token: ",j(a.totalTokens)]}),(0,d.jsxs)("div",{className:"text-text-muted",children:["Lỗi: ",j(a.errors)," (",l(a.errorRate),")"]})]}),(0,d.jsx)("div",{className:"w-full max-w-[54px] rounded-t-2xl bg-gradient-to-t from-primary to-cyan-400 shadow-[0_10px_24px_rgba(59,130,246,0.2)] transition group-hover:brightness-110",style:{height:c}})]}),(0,d.jsxs)("div",{className:"text-center",children:[(0,d.jsx)("div",{className:"text-xs font-bold text-text-main",children:k(a.requests)}),(0,d.jsx)("div",{className:"text-[10px] text-text-muted",children:a.date.slice(5)})]})]},a.date)})})})}function w({model:a,rank:b}){return(0,d.jsxs)("article",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("span",{className:"flex h-7 w-7 items-center justify-center rounded-lg bg-primary/10 text-xs font-black text-primary",children:["#",b]}),(0,d.jsx)("h3",{className:"truncate text-base font-bold text-text-main",children:a.model})]}),(0,d.jsxs)("p",{className:"mt-1 text-xs text-text-muted",children:[a.providerLabel||a.provider," \xb7 ",j(a.requests)," request \xb7 ",l(a.trafficShare)," traffic"]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:i("rounded-full px-2.5 py-1 text-[11px] font-bold","high"===a.sampleQuality?"bg-emerald-500/10 text-emerald-600":"medium"===a.sampleQuality?"bg-amber-500/10 text-amber-600":"bg-slate-500/10 text-slate-500"),children:"high"===a.sampleQuality?"Mẫu tốt":"medium"===a.sampleQuality?"Mẫu vừa":"\xcdt mẫu"}),null!=a.score?(0,d.jsxs)("span",{className:"rounded-full bg-primary/10 px-2.5 py-1 text-[11px] font-bold text-primary",children:[j(a.score),"/100"]}):null]})]}),(0,d.jsxs)("div",{className:"mt-5 grid gap-3 sm:grid-cols-2 xl:grid-cols-4",children:[(0,d.jsx)(x,{label:"Success",value:l(1-a.errorRate,2)}),(0,d.jsx)(x,{label:"Latency p95",value:m(a.p95LatencyMs)}),(0,d.jsx)(x,{label:"TTFT p95",value:m(a.p95TtftMs)}),(0,d.jsx)(x,{label:"Output speed",value:null==a.outputTokensPerSecond?"-":`${j(a.outputTokensPerSecond,1)} tok/s`}),(0,d.jsx)(x,{label:"Input avg / p95",value:`${k(a.avgPromptTokens)} / ${k(a.p95PromptTokens)}`}),(0,d.jsx)(x,{label:"Cache share",value:l(a.cacheShare)}),(0,d.jsx)(x,{label:"Slow request",value:l(a.slowRequestRate)}),(0,d.jsx)(x,{label:"Context >=50k",value:l(a.hugeInputRate)})]}),(0,d.jsxs)("div",{className:"mt-5 grid gap-3 md:grid-cols-3",children:[(0,d.jsx)(u,{value:(1-a.errorRate)*100,label:"Tỷ lệ th\xe0nh c\xf4ng",tone:"bg-emerald-500"}),(0,d.jsx)(u,{value:100*a.cacheShare,label:"Cached input",tone:"bg-cyan-500"}),(0,d.jsx)(u,{value:Math.min(100,100*a.reasoningShare),label:"Reasoning/output",tone:"bg-violet-500"})]})]})}function x({label:a,value:b}){return(0,d.jsxs)("div",{className:"rounded-xl border border-border/70 bg-surface px-3 py-2.5",children:[(0,d.jsx)("div",{className:"text-[10px] font-bold uppercase tracking-[0.12em] text-text-muted",children:a}),(0,d.jsx)("div",{className:"mt-1 text-sm font-bold text-text-main",children:b})]})}function y({node:a}){return(0,d.jsxs)("article",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h3",{className:"font-bold text-text-main",children:a.name}),(0,d.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:a.host||a.hostname||"Chưa c\xf3 host"})]}),(0,d.jsx)("span",{className:i("rounded-full px-2.5 py-1 text-[11px] font-bold",a.reachable?"bg-emerald-500/10 text-emerald-600":"bg-red-500/10 text-red-600"),children:a.reachable?"Online snapshot":"No telemetry"})]}),a.reachable?(0,d.jsxs)("div",{className:"mt-5 space-y-4",children:[(0,d.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,d.jsx)(x,{label:"CPU",value:`${a.cpu?.model||"-"} \xb7 ${j(a.cpu?.cores)} cores`}),(0,d.jsx)(x,{label:"RAM",value:`${o(a.memory?.usedBytes)} / ${o(a.memory?.totalBytes)}`})]}),(0,d.jsx)(u,{value:a.cpu?.usagePercent||0,label:"CPU snapshot (%)",tone:"bg-blue-500"}),(0,d.jsx)(u,{value:a.memory?.usagePercent||0,label:"RAM snapshot (%)",tone:"bg-violet-500"}),(a.gpus||[]).map(b=>(0,d.jsxs)("div",{className:"rounded-xl border border-border/70 bg-surface p-4",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,d.jsxs)("div",{className:"font-semibold text-text-main",children:["GPU ",b.index," \xb7 ",b.name]}),(0,d.jsxs)("div",{className:"text-xs text-text-muted",children:[null==b.temperatureC?"-":`${j(b.temperatureC,0)}\xb0C`," \xb7 ",null==b.powerDrawW?"-":`${j(b.powerDrawW)}W`]})]}),(0,d.jsxs)("div",{className:"mt-3 grid gap-3 sm:grid-cols-2",children:[(0,d.jsx)(u,{value:b.usagePercent||0,label:"GPU utilization (%)",tone:"bg-emerald-500"}),(0,d.jsx)(u,{value:b.memoryUsagePercent||0,label:`VRAM ${j((b.memoryUsedMb||0)/1024,1)} / ${j((b.memoryTotalMb||0)/1024,1)} GiB`,tone:"bg-cyan-500"})]})]},`${a.id}-${b.index}`)),(0,d.jsxs)("p",{className:"text-[11px] text-text-muted",children:["Snapshot: ",n(a.statusAt)," \xb7 OS: ",a.os||"-"," \xb7 Kernel: ",a.kernel||"-"]})]}):(0,d.jsx)("div",{className:"mt-4 rounded-xl border border-red-500/15 bg-red-500/5 p-3 text-sm text-red-600 dark:text-red-300",children:a.error||"Resource Monitor chưa c\xf3 snapshot cho node n\xe0y."})]})}function z(a){return String(a??"").replace(/[&<>'"]/g,a=>({"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#39;",'"':"&quot;"})[a])}function A(a,b){return(a||[]).map(b).join("")}function B(a){let b=g[a.status]?.label||a.status,c=[["Request",j(a.overview?.requests)],["Success rate",l(a.overview?.successRate,2)],["Total tokens",j(a.overview?.totalTokens)],["Latency p95",m(a.experience?.p95LatencyMs)],["TTFT p95",m(a.experience?.p95TtftMs)],["Operational score",null==a.score?"N/A":`${a.score}/100`]];return`<!doctype html>
3
- <html lang="vi"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Local AI Report - ${z(a.generatedAt?.slice(0,10))}</title>
2
+ see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:v.CachedRouteKind.APP_PAGE,html:l,headers:q,rscData:m.flightData,postponed:m.postponed,status:m.statusCode,segmentData:m.segmentData},cacheControl:o}},r=async({hasResolved:c,previousCacheEntry:g,isRevalidating:i,span:j,forceStaticRender:k=!1})=>{let l=!1===P.isDev,m=c||b.writableEnded;try{var n;let f;if(ar&&aj&&!g&&!V)return(null==ak?void 0:ak.render404)?await ak.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(at&&(f=(0,w.parseFallbackField)(at.fallback)),!0===al.experimental.partialFallbacks&&(null==at?void 0:at.fallback)===null&&!aT&&aS.length>0&&(f=w.FallbackMode.PRERENDER),f===w.FallbackMode.PRERENDER&&(0,u.isBot)(av)&&(!aF||ax)&&(f=w.FallbackMode.BLOCKING_STATIC_RENDER),(null==g?void 0:g.isStale)===-1&&(ar=!0),ar&&(f!==w.FallbackMode.NOT_FOUND||g)&&(f=w.FallbackMode.BLOCKING_STATIC_RENDER),!V&&f!==w.FallbackMode.BLOCKING_STATIC_RENDER&&aV&&!m&&!ah&&_&&(l||!au)){if((l||at)&&f===w.FallbackMode.NOT_FOUND){if(al.adapterPath)return await a0();throw new C.NoFallbackError}if(aF&&(al.cacheComponents?!aL:!az)){let b=l&&"string"==typeof(null==at?void 0:at.fallback)?at.fallback:aq,f=(l||aG)&&(null==at?void 0:at.fallbackRouteParams)?(0,o.createOpaqueFallbackRouteParams)(at.fallbackRouteParams):aI?(0,o.getFallbackRouteParams)(aq,P):null;aG&&f&&(0,h.addRequestMeta)(a,"fallbackParams",f);let g=await P.handleResponse({cacheKey:b,req:a,nextConfig:al,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:ag,isRoutePPREnabled:aF,responseGenerator:async()=>q({span:j,postponed:void 0,fallbackRouteParams:f,forceStaticRender:!0}),waitUntil:d.waitUntil,isMinimalMode:V});if(null===g)return null;if(g)return V||!aF||!(aS.length>0)||!0!==al.experimental.partialFallbacks||!aU||!p||ar||aI||aD||aE||ay||(0,J.scheduleOnNextTick)(async()=>{let b=P.getResponseCache(a);try{await b.revalidate(aU,p,aF,!1,a=>q({span:a.span,postponed:void 0,fallbackRouteParams:a_.length>0?(0,o.createOpaqueFallbackRouteParams)(a_):null,forceStaticRender:!0}),null,c,d.waitUntil)}catch(a){console.error("Error revalidating the page in the background",a)}}),delete g.cacheControl,g}}let s=ar||i||!aJ?void 0:aJ;if(aP&&!V&&p&&(aL||aA)&&!k){let b=await p.get(ai,{kind:v.IncrementalCacheKind.APP_PAGE,isRoutePPREnabled:!0,isFallback:!1});b&&b.value&&b.value.kind===v.CachedRouteKind.APP_PAGE&&(s=b.value.postponed,b&&(-1===b.isStale||!0===b.isStale)&&(0,J.scheduleOnNextTick)(async()=>{let b=P.getResponseCache(a);try{await b.revalidate(ai,p,aF,!1,a=>r({...a,forceStaticRender:!0}),null,c,d.waitUntil)}catch(a){console.error("Error revalidating the page in the background",a)}}))}if((aG||aH)&&void 0!==s)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:v.CachedRouteKind.PAGES,html:x.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let t=!P.isDev&&_&&(null==at?void 0:at.fallbackRouteParams)?(0,o.getPlaceholderFallbackRouteParams)($,at.fallbackRouteParams):null,y=t&&t.length>0?t:null==at?void 0:at.fallbackRouteParams,z=null!=t&&t.length>0,A=null;if(al.cacheComponents&&(null==at?void 0:at.fallbackRouteParams)){let b=(0,h.getRequestMeta)(a,"resolvedRouteParamKeys");b&&b.size>0&&(A=at.fallbackRouteParams.filter(a=>!b.has(a.paramName)))}let B=(l&&(0,h.getRequestMeta)(a,"renderFallbackShell")||z||aG&&!au)&&y?(0,o.createOpaqueFallbackRouteParams)(y):A&&A.length>0&&A.length<((null==at||null==(n=at.fallbackRouteParams)?void 0:n.length)??0)?(0,o.createOpaqueFallbackRouteParams)(A):aI?(0,o.getFallbackRouteParams)(aq,P):null;if((l||aG)&&al.cacheComponents&&!au&&(null==at?void 0:at.fallbackRouteParams)){let b=(0,o.createOpaqueFallbackRouteParams)(y??at.fallbackRouteParams);b&&(0,h.addRequestMeta)(a,"fallbackParams",b)}return q({span:j,postponed:s,fallbackRouteParams:B,forceStaticRender:k})}catch(b){throw(null==g?void 0:g.isStale)&&await P.onRequestError(a,b,{routerKind:"App Router",routePath:W,routeType:"render",revalidateReason:(0,f.c)({isStaticGeneration:aO,isOnDemandRevalidate:ar})},!1,ak),b}},s=async c=>{var f,g,i,j,k,l;let m,n=await P.handleResponse({cacheKey:aU,responseGenerator:a=>r({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ar,isRoutePPREnabled:aF,req:a,nextConfig:al,prerenderManifest:ag,waitUntil:d.waitUntil,isMinimalMode:V});if(ah&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),P.isDev&&b.setHeader("Cache-Control","no-cache, must-revalidate"),!n){if(aU)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=n.value)?void 0:f.kind)!==v.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=n.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let o="string"==typeof n.value.postponed;az&&!aA&&ao&&b.setHeader(y.NEXT_NAV_DEPLOYMENT_ID_HEADER,ao),aO&&!aL&&(!o||ay)&&(V||b.setHeader("x-nextjs-cache",ar?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),b.setHeader(t.NEXT_IS_PRERENDER_HEADER,"1"));let{value:p}=n;if(aJ)m={revalidate:0,expire:void 0};else if(aL)m={revalidate:0,expire:void 0};else if(!P.isDev)if(ah)m={revalidate:0,expire:void 0};else if(aO){if(n.cacheControl)if("number"==typeof n.cacheControl.revalidate){if(n.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${n.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});m={revalidate:n.cacheControl.revalidate,expire:(null==(j=n.cacheControl)?void 0:j.expire)??al.expireTime}}else m={revalidate:y.CACHE_ONE_YEAR_SECONDS,expire:void 0}}else b.getHeader("Cache-Control")||(m={revalidate:0,expire:void 0});if(n.cacheControl=m,"string"==typeof aM&&(null==p?void 0:p.kind)===v.CachedRouteKind.APP_PAGE&&p.segmentData){b.setHeader(t.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=p.headers)?void 0:k[y.NEXT_CACHE_TAGS_HEADER];V&&aO&&c&&"string"==typeof c&&b.setHeader(y.NEXT_CACHE_TAGS_HEADER,c);let d=p.segmentData.get(aM);return void 0!==d?(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:x.default.fromStatic(d,t.RSC_CONTENT_TYPE_HEADER),cacheControl:n.cacheControl}):(b.statusCode=204,(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:x.default.EMPTY,cacheControl:n.cacheControl}))}let s=aP?(0,h.getRequestMeta)(a,"onCacheEntryV2")??(0,h.getRequestMeta)(a,"onCacheEntry"):(0,h.getRequestMeta)(a,"onCacheEntry");if(s){let b=(0,h.getRequestMeta)(a,"initURL")??a.url,c=b?(null==(l=(0,F.parseUrl)(b))?void 0:l.pathname)??b:void 0;if(await s(n,{url:c}))return null}if(p.headers){let a={...p.headers};for(let[c,d]of(V&&aO||delete a[y.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let u=null==(g=p.headers)?void 0:g[y.NEXT_CACHE_TAGS_HEADER];if(V&&aO&&u&&"string"==typeof u&&b.setHeader(y.NEXT_CACHE_TAGS_HEADER,u),!p.status||az&&aF||(b.statusCode=p.status),!V&&p.status&&H.RedirectStatusCode[p.status]&&az&&(b.statusCode=200),o&&!aL&&b.setHeader(t.NEXT_DID_POSTPONE_HEADER,"1"),az&&!ah){if(void 0===p.rscData){if(p.html.contentType!==t.RSC_CONTENT_TYPE_HEADER)if(al.cacheComponents)return b.statusCode=404,(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:x.default.EMPTY,cacheControl:n.cacheControl});else throw Object.defineProperty(new I.InvariantError(`Expected RSC response, got ${p.html.contentType}`),"__NEXT_ERROR_CODE",{value:"E789",enumerable:!1,configurable:!0});return(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:p.html,cacheControl:n.cacheControl})}return(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:x.default.fromStatic(p.rscData,t.RSC_CONTENT_TYPE_HEADER),cacheControl:n.cacheControl})}let w=p.html;if(aE&&aG){let c=!0===P.isDev?crypto.randomUUID():null;return w.pipeThrough(await (0,A.createInstantTestScriptInsertionTransformStream)(c)),(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:w,cacheControl:{revalidate:0,expire:void 0}})}if(!o||V||az)return(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:w,cacheControl:n.cacheControl});if(aG||aH)return w.push(new ReadableStream({start(a){a.enqueue(z.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:w,cacheControl:{revalidate:0,expire:void 0}});let C=new TransformStream;return w.push(C.readable),q({span:c,postponed:p.postponed,fallbackRouteParams:null,forceStaticRender:!1}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==v.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(C.writable)}).catch(a=>{C.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,B.sendRenderResult)({req:a,res:b,generateEtags:al.generateEtags,poweredByHeader:al.poweredByHeader,result:w,cacheControl:{revalidate:0,expire:void 0}})};if(!a$||!aZ)return k=aY.getActiveScopeSpan(),await aY.withPropagatedContext(a.headers,()=>aY.trace(i.BaseServerSpan.handleRequest,{spanName:`${aX} ${W}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aX,"http.target":a.url}},s),void 0,!a$);await s(aZ)}catch(b){throw b instanceof C.NoFallbackError||await P.onRequestError(a,b,{routerKind:"App Router",routePath:W,routeType:"render",revalidateReason:(0,f.c)({isStaticGeneration:aO,isOnDemandRevalidate:ar})},!1,ak),b}}},32746:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\bluerouter\\\\src\\\\app\\\\(dashboard)\\\\dashboard\\\\local-ai-report\\\\LocalAiReportClient.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\bluerouter\\src\\app\\(dashboard)\\dashboard\\local-ai-report\\LocalAiReportClient.js","default")},33873:a=>{"use strict";a.exports=require("path")},34631:a=>{"use strict";a.exports=require("tls")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},41204:a=>{"use strict";a.exports=require("string_decoder")},43954:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/interception-routes")},46293:a=>{"use strict";a.exports=require("sql.js")},51455:a=>{"use strict";a.exports=require("node:fs/promises")},53053:a=>{"use strict";a.exports=require("node:diagnostics_channel")},55511:a=>{"use strict";a.exports=require("crypto")},56785:(a,b,c)=>{Promise.resolve().then(c.bind(c,85080))},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},64939:a=>{"use strict";a.exports=import("pg")},66136:a=>{"use strict";a.exports=require("timers")},70722:a=>{"use strict";a.exports=require("next/dist/shared/lib/invariant-error")},73024:a=>{"use strict";a.exports=require("node:fs")},74075:a=>{"use strict";a.exports=require("zlib")},76760:a=>{"use strict";a.exports=require("node:path")},77068:a=>{"use strict";a.exports=require("next/dist/shared/lib/size-limit")},77598:a=>{"use strict";a.exports=require("node:crypto")},79428:a=>{"use strict";a.exports=require("buffer")},79748:a=>{"use strict";a.exports=require("fs/promises")},80099:a=>{"use strict";a.exports=require("node:sqlite")},80111:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g,metadata:()=>f});var d=c(5735),e=c(32746);let f={title:"Local AI Report"};function g(){return(0,d.jsx)(e.default,{})}},81787:a=>{"use strict";a.exports=require("bun:sqlite")},85080:(a,b,c)=>{"use strict";c.d(b,{default:()=>F});var d=c(48249),e=c(67484),f=c(20151);let g={normal:{label:"Ổn định",badge:"border-emerald-400/25 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300",dot:"bg-emerald-500"},warning:{label:"Cần theo d\xf5i",badge:"border-amber-400/25 bg-amber-500/10 text-amber-700 dark:text-amber-300",dot:"bg-amber-500"},critical:{label:"Nghi\xeam trọng",badge:"border-red-400/25 bg-red-500/10 text-red-700 dark:text-red-300",dot:"bg-red-500"},no_traffic:{label:"Kh\xf4ng c\xf3 lưu lượng",badge:"border-slate-400/25 bg-slate-500/10 text-slate-700 dark:text-slate-300",dot:"bg-slate-400"}},h={P0:"border-red-500/25 bg-red-500/10 text-red-700 dark:text-red-300",P1:"border-amber-500/25 bg-amber-500/10 text-amber-700 dark:text-amber-300",P2:"border-blue-500/25 bg-blue-500/10 text-blue-700 dark:text-blue-300"},i=[{value:"7d",label:"7 ng\xe0y",title:"7 ng\xe0y gần nhất"},{value:"30d",label:"30 ng\xe0y",title:"30 ng\xe0y gần nhất"}];function j(a,b="7d"){let c=a?.range?.period||b;return i.find(a=>a.value===c)||i[0]}function k(...a){return a.filter(Boolean).join(" ")}function l(a,b=0){return Number(a||0).toLocaleString("vi-VN",{maximumFractionDigits:b})}function m(a){return Intl.NumberFormat("vi-VN",{notation:"compact",maximumFractionDigits:1}).format(Number(a||0))}function n(a,b=1){return`${(100*Number(a||0)).toLocaleString("vi-VN",{maximumFractionDigits:b})}%`}function o(a){if(null==a||!Number.isFinite(Number(a)))return"-";let b=Number(a);return b>=1e3?`${(b/1e3).toLocaleString("vi-VN",{maximumFractionDigits:2})}s`:`${Math.round(b).toLocaleString("vi-VN")}ms`}function p(a){if(!a)return"-";let b=new Date(a);return Number.isNaN(b.getTime())?String(a):b.toLocaleString("vi-VN",{timeZone:"Asia/Ho_Chi_Minh",day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1})}function q(a){let b=Number(a||0);if(!b)return"-";let c=["B","KiB","MiB","GiB","TiB"],d=Math.min(Math.floor(Math.log(b)/Math.log(1024)),c.length-1);return`${(b/1024**d).toLocaleString("vi-VN",{maximumFractionDigits:1})} ${c[d]}`}function r({status:a}){let b=g[a]||g.no_traffic;return(0,d.jsxs)("span",{className:k("inline-flex items-center gap-2 rounded-full border px-3 py-1.5 text-xs font-semibold",b.badge),children:[(0,d.jsx)("span",{className:k("h-2 w-2 rounded-full",b.dot)}),b.label]})}function s({value:a}){return(0,d.jsx)("span",{className:k("inline-flex rounded-full border px-2.5 py-1 text-[11px] font-bold",h[a]||h.P2),children:a||"P2"})}function t({eyebrow:a,title:b,description:c,icon:e}){return(0,d.jsxs)("div",{className:"mb-5 flex items-start justify-between gap-4",children:[(0,d.jsxs)("div",{children:[a?(0,d.jsx)("div",{className:"mb-1 text-[11px] font-bold uppercase tracking-[0.18em] text-primary",children:a}):null,(0,d.jsx)("h2",{className:"text-xl font-bold tracking-tight text-text-main",children:b}),c?(0,d.jsx)("p",{className:"mt-1 max-w-3xl text-sm leading-6 text-text-muted",children:c}):null]}),e?(0,d.jsx)("span",{className:"material-symbols-outlined rounded-2xl bg-primary/10 p-3 text-[24px] text-primary",children:e}):null]})}function u({children:a,className:b=""}){return(0,d.jsx)("section",{className:k("rounded-[28px] border border-border bg-surface p-5 shadow-sm md:p-7",b),children:a})}function v({icon:a,label:b,value:c,hint:e,tone:f="blue"}){let g={blue:"from-blue-500/15 to-cyan-500/5 text-blue-600 dark:text-blue-300",emerald:"from-emerald-500/15 to-teal-500/5 text-emerald-600 dark:text-emerald-300",violet:"from-violet-500/15 to-fuchsia-500/5 text-violet-600 dark:text-violet-300",amber:"from-amber-500/15 to-orange-500/5 text-amber-600 dark:text-amber-300",rose:"from-rose-500/15 to-red-500/5 text-rose-600 dark:text-rose-300",slate:"from-slate-500/15 to-slate-500/5 text-slate-600 dark:text-slate-300"}[f]||"from-blue-500/15 to-cyan-500/5 text-blue-600 dark:text-blue-300";return(0,d.jsxs)("div",{className:"relative overflow-hidden rounded-2xl border border-border bg-background p-4",children:[(0,d.jsx)("div",{className:k("absolute inset-0 bg-gradient-to-br opacity-80",g)}),(0,d.jsxs)("div",{className:"relative flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"text-xs font-semibold uppercase tracking-[0.12em] text-text-muted",children:b}),(0,d.jsx)("div",{className:"mt-2 text-2xl font-black tracking-tight text-text-main",children:c}),e?(0,d.jsx)("div",{className:"mt-1.5 text-xs text-text-muted",children:e}):null]}),(0,d.jsx)("span",{className:k("material-symbols-outlined rounded-xl bg-background/70 p-2 text-[21px]",g),children:a})]})]})}function w({value:a,max:b=100,label:c,tone:e="bg-primary"}){let f=Math.max(0,Math.min(100,Number(a||0)/b*100));return(0,d.jsxs)("div",{children:[(0,d.jsxs)("div",{className:"mb-1.5 flex items-center justify-between text-xs text-text-muted",children:[(0,d.jsx)("span",{children:c}),(0,d.jsx)("span",{children:l(a,1)})]}),(0,d.jsx)("div",{className:"h-2 overflow-hidden rounded-full bg-surface-2",children:(0,d.jsx)("div",{className:k("h-full rounded-full transition-all",e),style:{width:`${f}%`}})})]})}function x({rows:a=[]}){let b=Math.max(1,...a.map(a=>Number(a.requests||0)));return(0,d.jsx)("div",{className:"overflow-x-auto pb-2",children:(0,d.jsx)("div",{className:"flex items-end gap-3 pt-8",style:{minWidth:`${Math.max(760,74*a.length)}px`},children:a.map(a=>{let c=Math.max(8,Number(a.requests||0)/b*180);return(0,d.jsxs)("div",{className:"group flex flex-1 flex-col items-center gap-2",children:[(0,d.jsxs)("div",{className:"relative flex h-[205px] w-full items-end justify-center",children:[(0,d.jsxs)("div",{className:"absolute bottom-full left-1/2 z-10 mb-2 hidden w-52 -translate-x-1/2 rounded-xl border border-border bg-background p-3 text-xs shadow-xl group-hover:block",children:[(0,d.jsx)("div",{className:"font-bold text-text-main",children:a.date}),(0,d.jsxs)("div",{className:"mt-1 text-text-muted",children:["Request: ",l(a.requests)]}),(0,d.jsxs)("div",{className:"text-text-muted",children:["Token: ",l(a.totalTokens)]}),(0,d.jsxs)("div",{className:"text-text-muted",children:["Lỗi: ",l(a.errors)," (",n(a.errorRate),")"]})]}),(0,d.jsx)("div",{className:"w-full max-w-[54px] rounded-t-2xl bg-gradient-to-t from-primary to-cyan-400 shadow-[0_10px_24px_rgba(59,130,246,0.2)] transition group-hover:brightness-110",style:{height:c}})]}),(0,d.jsxs)("div",{className:"text-center",children:[(0,d.jsx)("div",{className:"text-xs font-bold text-text-main",children:m(a.requests)}),(0,d.jsx)("div",{className:"text-[10px] text-text-muted",children:a.date.slice(5)})]})]},a.date)})})})}function y({model:a,rank:b}){return(0,d.jsxs)("article",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("span",{className:"flex h-7 w-7 items-center justify-center rounded-lg bg-primary/10 text-xs font-black text-primary",children:["#",b]}),(0,d.jsx)("h3",{className:"truncate text-base font-bold text-text-main",children:a.model})]}),(0,d.jsxs)("p",{className:"mt-1 text-xs text-text-muted",children:[a.providerLabel||a.provider," \xb7 ",l(a.requests)," request \xb7 ",n(a.trafficShare)," traffic"]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:k("rounded-full px-2.5 py-1 text-[11px] font-bold","high"===a.sampleQuality?"bg-emerald-500/10 text-emerald-600":"medium"===a.sampleQuality?"bg-amber-500/10 text-amber-600":"bg-slate-500/10 text-slate-500"),children:"high"===a.sampleQuality?"Mẫu tốt":"medium"===a.sampleQuality?"Mẫu vừa":"\xcdt mẫu"}),null!=a.score?(0,d.jsxs)("span",{className:"rounded-full bg-primary/10 px-2.5 py-1 text-[11px] font-bold text-primary",children:[l(a.score),"/100"]}):null]})]}),(0,d.jsxs)("div",{className:"mt-5 grid gap-3 sm:grid-cols-2 xl:grid-cols-4",children:[(0,d.jsx)(z,{label:"Success",value:n(1-a.errorRate,2)}),(0,d.jsx)(z,{label:"Latency p95",value:o(a.p95LatencyMs)}),(0,d.jsx)(z,{label:"TTFT p95",value:o(a.p95TtftMs)}),(0,d.jsx)(z,{label:"Output speed",value:null==a.outputTokensPerSecond?"-":`${l(a.outputTokensPerSecond,1)} tok/s`}),(0,d.jsx)(z,{label:"Input avg / p95",value:`${m(a.avgPromptTokens)} / ${m(a.p95PromptTokens)}`}),(0,d.jsx)(z,{label:"Cache share",value:n(a.cacheShare)}),(0,d.jsx)(z,{label:"Slow request",value:n(a.slowRequestRate)}),(0,d.jsx)(z,{label:"Context >=50k",value:n(a.hugeInputRate)})]}),(0,d.jsxs)("div",{className:"mt-5 grid gap-3 md:grid-cols-3",children:[(0,d.jsx)(w,{value:(1-a.errorRate)*100,label:"Tỷ lệ th\xe0nh c\xf4ng",tone:"bg-emerald-500"}),(0,d.jsx)(w,{value:100*a.cacheShare,label:"Cached input",tone:"bg-cyan-500"}),(0,d.jsx)(w,{value:Math.min(100,100*a.reasoningShare),label:"Reasoning/output",tone:"bg-violet-500"})]})]})}function z({label:a,value:b}){return(0,d.jsxs)("div",{className:"rounded-xl border border-border/70 bg-surface px-3 py-2.5",children:[(0,d.jsx)("div",{className:"text-[10px] font-bold uppercase tracking-[0.12em] text-text-muted",children:a}),(0,d.jsx)("div",{className:"mt-1 text-sm font-bold text-text-main",children:b})]})}function A({node:a}){return(0,d.jsxs)("article",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h3",{className:"font-bold text-text-main",children:a.name}),(0,d.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:a.host||a.hostname||"Chưa c\xf3 host"})]}),(0,d.jsx)("span",{className:k("rounded-full px-2.5 py-1 text-[11px] font-bold",a.reachable?"bg-emerald-500/10 text-emerald-600":"bg-red-500/10 text-red-600"),children:a.reachable?"Online snapshot":"No telemetry"})]}),a.reachable?(0,d.jsxs)("div",{className:"mt-5 space-y-4",children:[(0,d.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,d.jsx)(z,{label:"CPU",value:`${a.cpu?.model||"-"} \xb7 ${l(a.cpu?.cores)} cores`}),(0,d.jsx)(z,{label:"RAM",value:`${q(a.memory?.usedBytes)} / ${q(a.memory?.totalBytes)}`})]}),(0,d.jsx)(w,{value:a.cpu?.usagePercent||0,label:"CPU snapshot (%)",tone:"bg-blue-500"}),(0,d.jsx)(w,{value:a.memory?.usagePercent||0,label:"RAM snapshot (%)",tone:"bg-violet-500"}),(a.gpus||[]).map(b=>(0,d.jsxs)("div",{className:"rounded-xl border border-border/70 bg-surface p-4",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,d.jsxs)("div",{className:"font-semibold text-text-main",children:["GPU ",b.index," \xb7 ",b.name]}),(0,d.jsxs)("div",{className:"text-xs text-text-muted",children:[null==b.temperatureC?"-":`${l(b.temperatureC,0)}\xb0C`," \xb7 ",null==b.powerDrawW?"-":`${l(b.powerDrawW)}W`]})]}),(0,d.jsxs)("div",{className:"mt-3 grid gap-3 sm:grid-cols-2",children:[(0,d.jsx)(w,{value:b.usagePercent||0,label:"GPU utilization (%)",tone:"bg-emerald-500"}),(0,d.jsx)(w,{value:b.memoryUsagePercent||0,label:`VRAM ${l((b.memoryUsedMb||0)/1024,1)} / ${l((b.memoryTotalMb||0)/1024,1)} GiB`,tone:"bg-cyan-500"})]})]},`${a.id}-${b.index}`)),(0,d.jsxs)("p",{className:"text-[11px] text-text-muted",children:["Snapshot: ",p(a.statusAt)," \xb7 OS: ",a.os||"-"," \xb7 Kernel: ",a.kernel||"-"]})]}):(0,d.jsx)("div",{className:"mt-4 rounded-xl border border-red-500/15 bg-red-500/5 p-3 text-sm text-red-600 dark:text-red-300",children:a.error||"Resource Monitor chưa c\xf3 snapshot cho node n\xe0y."})]})}function B(a){return String(a??"").replace(/[&<>'"]/g,a=>({"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#39;",'"':"&quot;"})[a])}function C(a,b){return(a||[]).map(b).join("")}function D(a){let b=g[a.status]?.label||a.status,c=j(a),d=[["Request",l(a.overview?.requests)],["Success rate",n(a.overview?.successRate,2)],["Total tokens",l(a.overview?.totalTokens)],["Latency p95",o(a.experience?.p95LatencyMs)],["TTFT p95",o(a.experience?.p95TtftMs)],["Operational score",null==a.score?"N/A":`${a.score}/100`]];return`<!doctype html>
3
+ <html lang="vi"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Local AI Report ${B(c.label)} - ${B(a.generatedAt?.slice(0,10))}</title>
4
4
  <style>
5
5
  :root{--ink:#102038;--muted:#607087;--line:#dbe5f0;--paper:#f4f7fb;--card:#fff;--blue:#2563eb;--cyan:#06b6d4;--green:#059669;--amber:#d97706;--red:#dc2626}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:14px/1.55 Inter,Segoe UI,Arial,sans-serif}.page{max-width:1240px;margin:auto;padding:36px}.hero{padding:38px;border-radius:28px;color:white;background:radial-gradient(circle at 90% 10%,rgba(34,211,238,.38),transparent 35%),linear-gradient(135deg,#0f2d58,#1d4ed8 65%,#0891b2);box-shadow:0 24px 70px rgba(29,78,216,.22)}.hero h1{margin:10px 0 8px;font-size:34px}.eyebrow{text-transform:uppercase;letter-spacing:.18em;font-weight:800;font-size:11px;opacity:.78}.meta{opacity:.8}.badge{display:inline-block;padding:6px 12px;border-radius:999px;background:rgba(255,255,255,.16);font-weight:800}.grid{display:grid;gap:16px}.kpis{grid-template-columns:repeat(3,1fr);margin:22px 0}.card{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:22px;box-shadow:0 8px 30px rgba(16,32,56,.05);break-inside:avoid}.card h2{margin:0 0 14px;font-size:20px}.card h3{margin:0 0 6px;font-size:15px}.kpi strong{display:block;font-size:25px;margin-top:6px}.muted{color:var(--muted)}.section{margin-top:20px}.two{grid-template-columns:1fr 1fr}.three{grid-template-columns:repeat(3,1fr)}table{width:100%;border-collapse:collapse;font-size:12px}th,td{padding:10px 8px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}th{text-transform:uppercase;letter-spacing:.08em;font-size:10px;color:var(--muted)}ul{padding-left:20px}.priority{font-weight:900}.P0{color:var(--red)}.P1{color:var(--amber)}.P2{color:var(--blue)}.score{font-size:50px;font-weight:900}.footer{margin:28px 0 10px;text-align:center;color:var(--muted);font-size:11px}@media(max-width:800px){.page{padding:16px}.kpis,.two,.three{grid-template-columns:1fr}.hero h1{font-size:26px}}@media print{body{background:white}.page{max-width:none;padding:0}.hero,.card{box-shadow:none}.section{page-break-inside:auto}}
6
6
  </style></head><body><main class="page">
7
- <header class="hero"><div class="eyebrow">BlueRouter \xb7 Local AI Operations</div><h1>B\xe1o c\xe1o hoạt động Local AI — 7 ng\xe0y gần nhất</h1><div class="meta">${z(n(a.range?.startIso))} → ${z(n(a.range?.endIso))} \xb7 Asia/Ho_Chi_Minh</div><p><span class="badge">${z(b)}</span> &nbsp; Confidence: ${z(a.confidence)} &nbsp; Generated: ${z(n(a.generatedAt))}</p></header>
8
- <section class="grid kpis">${A(c,([a,b])=>`<div class="card kpi"><span class="muted">${z(a)}</span><strong>${z(b)}</strong></div>`)}</section>
9
- <section class="card section"><h2>T\xf3m tắt điều h\xe0nh</h2><ul>${A(a.narrative?.executiveSummary,a=>`<li>${z(a)}</li>`)}</ul></section>
10
- <section class="grid two section"><div class="card"><h2>Điểm mạnh</h2>${A(a.narrative?.strengths,a=>`<div><h3>${z(a.title)}</h3><p>${z(a.evidence)}</p></div>`)||'<p class="muted">Chưa đủ dữ liệu.</p>'}</div><div class="card"><h2>Điểm yếu & rủi ro</h2>${A(a.narrative?.weaknesses,a=>`<div><h3><span class="priority ${z(a.priority)}">${z(a.priority)}</span> ${z(a.title)}</h3><p>${z(a.evidence)} ${z(a.impact)}</p></div>`)||'<p class="muted">Chưa ph\xe1t hiện điểm yếu nổi bật.</p>'}</div></section>
11
- <section class="card section"><h2>Hiệu năng theo model</h2><table><thead><tr><th>Model</th><th>Requests</th><th>Success</th><th>Latency p95</th><th>TTFT p95</th><th>Tok/s</th><th>Cache</th><th>Context >=50k</th></tr></thead><tbody>${A(a.models,a=>`<tr><td><strong>${z(a.model)}</strong><br><span class="muted">${z(a.providerLabel)}</span></td><td>${z(j(a.requests))}</td><td>${z(l(1-a.errorRate,2))}</td><td>${z(m(a.p95LatencyMs))}</td><td>${z(m(a.p95TtftMs))}</td><td>${z(null==a.outputTokensPerSecond?"-":j(a.outputTokensPerSecond,1))}</td><td>${z(l(a.cacheShare))}</td><td>${z(l(a.hugeInputRate))}</td></tr>`)}</tbody></table></section>
12
- <section class="card section"><h2>Xu hướng theo ng\xe0y</h2><table><thead><tr><th>Ng\xe0y</th><th>Request</th><th>Success</th><th>Error</th><th>Total tokens</th><th>Cached</th></tr></thead><tbody>${A(a.daily,a=>`<tr><td>${z(a.date)}</td><td>${z(j(a.requests))}</td><td>${z(j(a.success))}</td><td>${z(`${j(a.errors)} (${l(a.errorRate)})`)}</td><td>${z(j(a.totalTokens))}</td><td>${z(j(a.cachedTokens))}</td></tr>`)}</tbody></table></section>
13
- <section class="grid two section"><div class="card"><h2>Context, cache & thinking</h2><table><tbody><tr><th>Cached / input</th><td>${z(l(a.overview?.cacheShare))}</td></tr><tr><th>Reasoning / output</th><td>${z(l(a.overview?.reasoningShare))}</td></tr><tr><th>Context >=50k</th><td>${z(l(a.contextAndThinking?.largeContext?.gte50kRate))}</td></tr><tr><th>Thinking auto-off</th><td>${z(l(a.contextAndThinking?.thinking?.autoOffRate))}</td></tr></tbody></table></div><div class="card"><h2>Ph\xe2n loại lỗi</h2><table><tbody><tr><th>Gateway</th><td>${z(j(a.errors?.summary?.gateway))}</td></tr><tr><th>Upstream</th><td>${z(j(a.errors?.summary?.upstream))}</td></tr><tr><th>Client</th><td>${z(j(a.errors?.summary?.client))}</td></tr><tr><th>Rate limit</th><td>${z(j(a.errors?.summary?.rateLimit))}</td></tr></tbody></table></div></section>
14
- <section class="card section"><h2>Top lỗi gateway / upstream</h2><table><thead><tr><th>Owner / lỗi</th><th>Model</th><th>Endpoint</th><th>Count</th></tr></thead><tbody>${A(a.errors?.topServerErrors,a=>`<tr><td><strong>${z(`${a.faultOwner||"unknown"} \xb7 ${a.errorType||a.status||"error"}`)}</strong><br><span class="muted">${z(a.sample||a.errorCode||"-")}</span></td><td>${z(a.model||"-")}</td><td>${z(a.endpoint||"-")}</td><td>${z(j(a.requests))}</td></tr>`)||'<tr><td colspan="4" class="muted">Kh\xf4ng c\xf3 lỗi gateway/upstream đ\xe1ng ch\xfa \xfd.</td></tr>'}</tbody></table></section>
15
- <section class="grid two section"><div class="card"><h2>Top API keys theo token</h2><table><thead><tr><th>API key</th><th>Owner</th><th>Token</th><th>Share</th></tr></thead><tbody>${A((a.workload?.apiKeys||[]).slice(0,10),a=>`<tr><td>${z(a.label)}</td><td>${z(a.ownerUser||a.fingerprint||"-")}</td><td>${z(j(a.totalTokens))}</td><td>${z(l(a.tokenShare))}</td></tr>`)}</tbody></table></div><div class="card"><h2>Top endpoints</h2><table><thead><tr><th>Endpoint</th><th>Request</th><th>Error</th></tr></thead><tbody>${A((a.workload?.endpoints||[]).slice(0,10),a=>`<tr><td>${z(a.label)}</td><td>${z(j(a.requests))}</td><td>${z(l(a.errorRate))}</td></tr>`)}</tbody></table></div></section>
16
- <section class="grid two section"><div class="card"><h2>Đ\xe1nh gi\xe1 hạ tầng</h2><p>${z(a.narrative?.infrastructureAssessment)}</p>${A(a.hardware,a=>`<div><h3>${z(a.name)} \xb7 ${z(a.reachable?"Snapshot available":"No telemetry")}</h3><p class="muted">CPU ${z(a.cpu?.model||"-")} \xb7 ${z(j(a.cpu?.cores))} cores \xb7 RAM ${z(o(a.memory?.totalBytes))} \xb7 GPU ${z((a.gpus||[]).map(a=>`${a.name} ${(a.memoryTotalMb/1024).toFixed(1)} GiB`).join(", ")||"-")}</p></div>`)}</div><div class="card"><h2>Dự b\xe1o ngắn hạn</h2><p>${z(a.narrative?.forecast)}</p><h3>Giới hạn dữ liệu</h3><ul>${A(a.dataQuality,a=>`<li>${z(a)}</li>`)}</ul></div></section>
17
- <section class="card section"><h2>Kế hoạch h\xe0nh động</h2><table><thead><tr><th>Priority</th><th>Action</th><th>Owner</th><th>Validation metric</th></tr></thead><tbody>${A(a.narrative?.actions,a=>`<tr><td class="priority ${z(a.priority)}">${z(a.priority)}</td><td>${z(a.action)}</td><td>${z(a.owner)}</td><td>${z(a.validationMetric)}</td></tr>`)}</tbody></table></section>
18
- <div class="footer">BlueRouter Local AI Report \xb7 Internal operational document \xb7 ${z(a.id)}</div>
19
- </main></body></html>`}function C(a,b,c){let d=new Blob([a],{type:b}),e=URL.createObjectURL(d),f=document.createElement("a");f.href=e,f.download=c,document.body.appendChild(f),f.click(),f.remove(),URL.revokeObjectURL(e)}function D(){let{isAdmin:a,loading:b}=(0,f.s)(),[c,h]=(0,e.useState)(null),[o,z]=(0,e.useState)([]),[A,D]=(0,e.useState)(""),[E,F]=(0,e.useState)(!1),[G,H]=(0,e.useState)(!0),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(""),[M,N]=(0,e.useState)(!1),O=(0,e.useCallback)(a=>{D(a),fetch("/api/dashboard/analytics/analyze",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a})}).catch(()=>{})},[]),P=(0,e.useCallback)(async()=>{J(!0),L("");try{let a=A.indexOf("::"),b=a>=0?A.slice(0,a):"",c=a>=0?A.slice(a+2):"",d=await fetch("/api/dashboard/local-ai-report",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connectionId:b,model:c})}),e=await d.json().catch(()=>({}));if(!d.ok)throw Error(e.error||"Kh\xf4ng thể tạo b\xe1o c\xe1o");h(e.report||null)}catch(a){L(a?.message||"Kh\xf4ng thể tạo b\xe1o c\xe1o")}finally{J(!1)}},[A]),Q=(0,e.useCallback)(()=>{c&&C(B(c),"text/html;charset=utf-8",`local-ai-report-7d-${c.generatedAt.slice(0,10)}.html`)},[c]),R=(0,e.useCallback)(()=>{c&&C(JSON.stringify(c,null,2),"application/json;charset=utf-8",`local-ai-report-7d-${c.generatedAt.slice(0,10)}.json`)},[c]),S=(0,e.useCallback)(()=>{if(!c)return;let a=new Blob([B(c)],{type:"text/html;charset=utf-8"}),b=URL.createObjectURL(a),d=window.open(b,"_blank");if(!d){URL.revokeObjectURL(b),L("Tr\xecnh duyệt đ\xe3 chặn cửa sổ in. H\xe3y cho ph\xe9p pop-up hoặc tải file HTML.");return}try{d.opener=null}catch{}d.addEventListener("load",()=>{d.focus(),d.print(),setTimeout(()=>URL.revokeObjectURL(b),3e4)},{once:!0})},[c]),T=(0,e.useCallback)(async()=>{if(!c)return;let a=["B\xc1O C\xc1O LOCAL AI — 7 NG\xc0Y GẦN NHẤT",`Trạng th\xe1i: ${g[c.status]?.label||c.status}`,`Điểm vận h\xe0nh: ${null==c.score?"N/A":`${c.score}/100`}`,"",...(c.narrative?.executiveSummary||[]).map(a=>`- ${a}`)].join("\n");await navigator.clipboard.writeText(a),N(!0),setTimeout(()=>N(!1),1800)},[c]),U=(0,e.useMemo)(()=>c?.daily?.length?[...c.daily].sort((a,b)=>b.requests-a.requests)[0]:null,[c]);return b||G?(0,d.jsx)("div",{className:"flex min-h-[60vh] items-center justify-center",children:(0,d.jsxs)("div",{className:"flex items-center gap-3 rounded-2xl border border-border bg-surface px-5 py-4 text-sm text-text-muted shadow-sm",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-primary",children:"progress_activity"}),"Đang chuẩn bị Local AI Report..."]})}):a?(0,d.jsxs)("div",{className:"mx-auto max-w-[1500px] space-y-6 pb-12",children:[(0,d.jsxs)("header",{className:"relative overflow-hidden rounded-[34px] border border-blue-400/20 bg-gradient-to-br from-[#071b35] via-[#123d78] to-[#087f9c] p-6 text-white shadow-[0_28px_90px_rgba(30,86,160,0.25)] md:p-9",children:[(0,d.jsx)("div",{className:"absolute -right-24 -top-24 h-72 w-72 rounded-full bg-cyan-300/20 blur-3xl"}),(0,d.jsx)("div",{className:"absolute bottom-0 left-1/3 h-44 w-72 rounded-full bg-blue-300/15 blur-3xl"}),(0,d.jsxs)("div",{className:"relative grid gap-8 xl:grid-cols-[minmax(0,1fr)_430px] xl:items-end",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"text-[11px] font-black uppercase tracking-[0.24em] text-cyan-200",children:"BlueRouter \xb7 AI Operations Intelligence"}),(0,d.jsx)("h1",{className:"mt-3 max-w-4xl text-3xl font-black tracking-tight md:text-5xl",children:"B\xe1o c\xe1o hoạt động Local AI"}),(0,d.jsx)("p",{className:"mt-3 max-w-3xl text-sm leading-6 text-blue-100 md:text-base",children:"Bức tranh vận h\xe0nh local vLLM trong 7 ng\xe0y gần nhất: lưu lượng, hiệu năng, context, cache, lỗi, tải theo model v\xe0 snapshot hạ tầng."}),(0,d.jsxs)("div",{className:"mt-5 flex flex-wrap items-center gap-3",children:[c?(0,d.jsx)(p,{status:c.status}):(0,d.jsx)("span",{className:"rounded-full border border-white/15 bg-white/10 px-3 py-1.5 text-xs font-semibold",children:"Chưa c\xf3 b\xe1o c\xe1o"}),c?(0,d.jsxs)("span",{className:"rounded-full border border-white/15 bg-white/10 px-3 py-1.5 text-xs font-semibold",children:["Confidence: ",c.confidence]}):null,c?.generatedAt?(0,d.jsxs)("span",{className:"text-xs text-blue-100",children:["Cập nhật ",n(c.generatedAt)]}):null]})]}),(0,d.jsxs)("div",{className:"rounded-2xl border border-white/15 bg-white/10 p-4 backdrop-blur-xl",children:[(0,d.jsx)("label",{className:"text-[11px] font-bold uppercase tracking-[0.14em] text-blue-100",children:"AI model viết nhận định"}),(0,d.jsxs)("select",{value:A,onChange:a=>O(a.target.value),className:"mt-2 h-11 w-full rounded-xl border border-white/20 bg-[#0b2b53] px-3 text-sm text-white outline-none focus:border-cyan-300",children:[o.length?null:(0,d.jsx)("option",{value:"",children:"Kh\xf4ng c\xf3 AI model khả dụng"}),o.map(a=>(0,d.jsx)("option",{value:a.value,children:a.label},a.value))]}),(0,d.jsxs)("button",{type:"button",onClick:P,disabled:I||E,className:"mt-3 flex h-11 w-full items-center justify-center gap-2 rounded-xl bg-white font-bold text-[#123d78] shadow-lg transition hover:-translate-y-0.5 hover:bg-cyan-50 disabled:cursor-not-allowed disabled:opacity-60",children:[(0,d.jsx)("span",{className:i("material-symbols-outlined text-[20px]",I&&"animate-spin"),children:I?"progress_activity":"auto_awesome"}),I?"Đang ph\xe2n t\xedch dữ liệu 7 ng\xe0y...":"Tạo b\xe1o c\xe1o mới"]}),E?(0,d.jsx)("p",{className:"mt-2 text-xs text-amber-200",children:"Standby chỉ hiển thị report được đồng bộ từ Master."}):null]})]})]}),K?(0,d.jsxs)("div",{className:"flex items-start gap-3 rounded-2xl border border-red-500/20 bg-red-500/10 p-4 text-sm text-red-700 dark:text-red-300",children:[(0,d.jsx)("span",{className:"material-symbols-outlined",children:"error"}),(0,d.jsx)("div",{children:K})]}):null,c?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-2xl border border-border bg-surface px-4 py-3 shadow-sm",children:[(0,d.jsxs)("div",{className:"text-xs text-text-muted",children:["Phạm vi: ",(0,d.jsxs)("span",{className:"font-semibold text-text-main",children:[n(c.range?.startIso)," → ",n(c.range?.endIso)]})," \xb7 Asia/Ho_Chi_Minh \xb7 ",c.providers?.length||0," local provider"]}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsxs)("button",{type:"button",onClick:T,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"content_copy"}),M?"Đ\xe3 sao ch\xe9p":"Copy summary"]}),(0,d.jsxs)("button",{type:"button",onClick:R,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"data_object"}),"JSON"]}),(0,d.jsxs)("button",{type:"button",onClick:Q,className:"inline-flex items-center gap-2 rounded-xl bg-primary px-3 py-2 text-xs font-bold text-white shadow-sm hover:brightness-110",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"download"}),"Tải HTML full"]}),(0,d.jsxs)("button",{type:"button",onClick:S,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"print"}),"In / PDF"]})]})]}),(0,d.jsxs)("section",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-6",children:[(0,d.jsx)(t,{icon:"conversion_path",label:"Requests",value:k(c.overview?.requests),hint:`${k(c.overview?.totalTokens)} tokens`}),(0,d.jsx)(t,{icon:"verified",label:"Success rate",value:l(c.overview?.successRate,2),hint:`${j(c.overview?.errors)} usage errors`,tone:"emerald"}),(0,d.jsx)(t,{icon:"speed",label:"Latency p95",value:m(c.experience?.p95LatencyMs),hint:`p50 ${m(c.experience?.p50LatencyMs)}`,tone:"violet"}),(0,d.jsx)(t,{icon:"bolt",label:"TTFT p95",value:m(c.experience?.p95TtftMs),hint:`${j(c.experience?.outputTokensPerSecond,1)} tok/s`,tone:"amber"}),(0,d.jsx)(t,{icon:"cached",label:"Cached input",value:l(c.overview?.cacheShare),hint:`${k(c.overview?.cachedTokens)} tokens`,tone:"blue"}),(0,d.jsx)(t,{icon:"health_metrics",label:"Operational score",value:null==c.score?"N/A":`${c.score}/100`,hint:`Confidence ${c.confidence}`,tone:"critical"===c.status?"rose":"warning"===c.status?"amber":"emerald"})]}),(0,d.jsxs)(s,{className:"overflow-hidden bg-gradient-to-br from-surface to-primary/[0.035]",children:[(0,d.jsx)(r,{eyebrow:"Executive Brief",title:"T\xf3m tắt điều h\xe0nh",description:"Những t\xedn hiệu quan trọng nhất, kết hợp analytics local-only, lỗi v\xe0 snapshot hạ tầng.",icon:"summarize"}),(0,d.jsxs)("div",{className:"grid gap-4 lg:grid-cols-[minmax(0,1fr)_340px]",children:[(0,d.jsx)("div",{className:"space-y-3",children:(c.narrative?.executiveSummary||[]).map((a,b)=>(0,d.jsxs)("div",{className:"flex gap-3 rounded-2xl border border-border bg-background p-4",children:[(0,d.jsx)("span",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-xs font-black text-primary",children:b+1}),(0,d.jsx)("p",{className:"text-sm leading-6 text-text-main",children:a})]},`${b}-${a}`))}),(0,d.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,d.jsx)("div",{className:"text-xs font-bold uppercase tracking-[0.14em] text-text-muted",children:"Điểm vận h\xe0nh"}),(0,d.jsx)("div",{className:"mt-2 text-6xl font-black tracking-tighter text-text-main",children:null==c.score?"—":c.score}),(0,d.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Thang 100 \xb7 heuristic SRE từ error, p95 latency, TTFT v\xe0 snapshot telemetry"}),(0,d.jsx)("div",{className:"mt-5 space-y-2",children:(c.operationalSignals||[]).slice(0,5).map(a=>(0,d.jsxs)("div",{className:"flex gap-2 text-xs leading-5 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined mt-0.5 text-[16px] text-primary",children:"arrow_right"}),(0,d.jsx)("span",{children:a})]},a))})]})]})]}),(0,d.jsxs)("div",{className:"grid gap-6 xl:grid-cols-[minmax(0,1.35fr)_minmax(360px,0.65fr)]",children:[(0,d.jsxs)(s,{children:[(0,d.jsx)(r,{eyebrow:"Traffic",title:"Xu hướng 7 ng\xe0y",description:"Request theo ng\xe0y ở m\xfai giờ Asia/Ho_Chi_Minh; hover từng cột để xem token v\xe0 lỗi.",icon:"finance_mode"}),(0,d.jsx)(v,{rows:c.daily||[]}),U?(0,d.jsxs)("div",{className:"mt-4 grid gap-3 sm:grid-cols-3",children:[(0,d.jsx)(x,{label:"Peak day",value:`${U.date} \xb7 ${j(U.requests)} req`}),(0,d.jsx)(x,{label:"Peak error rate",value:l(U.errorRate)}),(0,d.jsx)(x,{label:"Peak tokens",value:k(U.totalTokens)})]}):null]}),(0,d.jsxs)(s,{children:[(0,d.jsx)(r,{eyebrow:"Context Economics",title:"Token, cache & thinking",description:"Ph\xe2n t\xedch theo usage do provider b\xe1o; cached token kh\xf4ng mặc định l\xe0 GPU KV cache.",icon:"memory"}),(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsx)(u,{value:c.overview?.cacheShare*100,label:"Cached / input (%)",tone:"bg-cyan-500"}),(0,d.jsx)(u,{value:Math.min(100,c.overview?.reasoningShare*100),label:"Reasoning / output (%)",tone:"bg-violet-500"}),(0,d.jsx)(u,{value:100*(c.contextAndThinking?.largeContext?.gte50kRate||0),label:"Request context >=50k (%)",tone:"bg-amber-500"}),(0,d.jsx)(u,{value:100*(c.contextAndThinking?.thinking?.autoOffRate||0),label:"Thinking auto-off (%)",tone:"bg-rose-500"})]}),(0,d.jsxs)("div",{className:"mt-5 grid gap-3 sm:grid-cols-2 xl:grid-cols-1 2xl:grid-cols-2",children:[(0,d.jsx)(x,{label:"Input tokens",value:k(c.overview?.promptTokens)}),(0,d.jsx)(x,{label:"Output tokens",value:k(c.overview?.completionTokens)}),(0,d.jsx)(x,{label:"Avg token/request",value:k(c.overview?.averageTokensPerRequest)}),(0,d.jsx)(x,{label:"Extreme context",value:l(c.experience?.extremeInputRate)})]})]})]}),(0,d.jsxs)(s,{children:[(0,d.jsx)(r,{eyebrow:"Model Intelligence",title:"Đ\xe1nh gi\xe1 theo từng local model",description:"So s\xe1nh trong bối cảnh workload thực tế. Model \xedt hơn 20 request được đ\xe1nh dấu \xedt mẫu.",icon:"model_training"}),(0,d.jsxs)("div",{className:"grid gap-4 xl:grid-cols-2",children:[(c.models||[]).map((a,b)=>(0,d.jsx)(w,{model:a,rank:b+1},a.key)),c.models?.length?null:(0,d.jsx)("div",{className:"col-span-full rounded-2xl border border-dashed border-border p-10 text-center text-sm text-text-muted",children:"Kh\xf4ng c\xf3 model local n\xe0o ph\xe1t sinh traffic trong khoảng b\xe1o c\xe1o."})]})]}),(0,d.jsxs)(s,{children:[(0,d.jsx)(r,{eyebrow:"Infrastructure Snapshot",title:"Hạ tầng Local AI",description:"Inventory v\xe0 snapshot tại thời điểm tạo b\xe1o c\xe1o. Kh\xf4ng được diễn giải th\xe0nh lịch sử GPU 7 ng\xe0y.",icon:"developer_board"}),(0,d.jsxs)("div",{className:"grid gap-4 xl:grid-cols-2",children:[(c.hardware||[]).map(a=>(0,d.jsx)(y,{node:a},a.id)),c.hardware?.length?null:(0,d.jsx)("div",{className:"col-span-full rounded-2xl border border-dashed border-border p-10 text-center text-sm text-text-muted",children:"Chưa cấu h\xecnh Linux Resources."})]}),(0,d.jsxs)("div",{className:"mt-5 rounded-2xl border border-primary/15 bg-primary/5 p-4 text-sm leading-6 text-text-muted",children:[(0,d.jsx)("strong",{className:"text-text-main",children:"Nhận định hạ tầng:"})," ",c.narrative?.infrastructureAssessment]})]}),(0,d.jsxs)("div",{className:"grid gap-6 xl:grid-cols-2",children:[(0,d.jsxs)(s,{children:[(0,d.jsx)(r,{eyebrow:"Strengths",title:"Điểm mạnh",icon:"workspace_premium"}),(0,d.jsx)("div",{className:"space-y-3",children:(c.narrative?.strengths||[]).map((a,b)=>(0,d.jsxs)("div",{className:"rounded-2xl border border-emerald-500/15 bg-emerald-500/5 p-4",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsx)("h3",{className:"font-bold text-text-main",children:a.title}),(0,d.jsx)("span",{className:"rounded-full bg-emerald-500/10 px-2 py-1 text-[10px] font-bold uppercase text-emerald-600",children:a.confidence})]}),(0,d.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:a.evidence})]},`${b}-${a.title}`))})]}),(0,d.jsxs)(s,{children:[(0,d.jsx)(r,{eyebrow:"Risks",title:"Điểm yếu & rủi ro",icon:"crisis_alert"}),(0,d.jsx)("div",{className:"space-y-3",children:(c.narrative?.weaknesses||[]).map((a,b)=>(0,d.jsxs)("div",{className:"rounded-2xl border border-amber-500/15 bg-amber-500/5 p-4",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)(q,{value:a.priority}),(0,d.jsx)("h3",{className:"font-bold text-text-main",children:a.title})]}),(0,d.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:a.evidence}),a.impact?(0,d.jsxs)("p",{className:"mt-2 text-xs font-medium text-amber-700 dark:text-amber-300",children:["Ảnh hưởng: ",a.impact]}):null]},`${b}-${a.title}`))})]})]}),(0,d.jsxs)("div",{className:"grid gap-6 xl:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)]",children:[(0,d.jsxs)(s,{children:[(0,d.jsx)(r,{eyebrow:"Reliability",title:"Lỗi ảnh hưởng Local AI",description:"Ph\xe2n loại gateway, upstream, client v\xe0 rate-limit từ request_error_events đ\xe3 scope theo local provider.",icon:"bug_report"}),(0,d.jsxs)("div",{className:"grid gap-3 sm:grid-cols-4",children:[(0,d.jsx)(x,{label:"Gateway",value:j(c.errors?.summary?.gateway)}),(0,d.jsx)(x,{label:"Upstream",value:j(c.errors?.summary?.upstream)}),(0,d.jsx)(x,{label:"Client",value:j(c.errors?.summary?.client)}),(0,d.jsx)(x,{label:"Rate limit",value:j(c.errors?.summary?.rateLimit)})]}),(0,d.jsxs)("div",{className:"mt-5 overflow-x-auto",children:[(0,d.jsxs)("table",{className:"w-full min-w-[720px] text-left text-xs",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border text-[10px] uppercase tracking-[0.1em] text-text-muted",children:[(0,d.jsx)("th",{className:"pb-3",children:"Owner / Error"}),(0,d.jsx)("th",{className:"pb-3",children:"Model"}),(0,d.jsx)("th",{className:"pb-3",children:"Endpoint"}),(0,d.jsx)("th",{className:"pb-3 text-right",children:"Count"})]})}),(0,d.jsx)("tbody",{children:(c.errors?.topServerErrors||[]).map((a,b)=>(0,d.jsxs)("tr",{className:"border-b border-border/60",children:[(0,d.jsxs)("td",{className:"py-3",children:[(0,d.jsxs)("div",{className:"font-semibold text-text-main",children:[a.faultOwner||"unknown"," \xb7 ",a.errorType||a.status]}),(0,d.jsx)("div",{className:"mt-1 max-w-md truncate text-text-muted",title:a.sample,children:a.sample||a.errorCode||"-"})]}),(0,d.jsx)("td",{className:"py-3 text-text-muted",children:a.model||"-"}),(0,d.jsx)("td",{className:"py-3 text-text-muted",children:a.endpoint||"-"}),(0,d.jsx)("td",{className:"py-3 text-right font-bold text-text-main",children:j(a.requests)})]},`${b}-${a.label}`))})]}),c.errors?.topServerErrors?.length?null:(0,d.jsx)("div",{className:"py-8 text-center text-sm text-text-muted",children:"Kh\xf4ng c\xf3 lỗi gateway/upstream đ\xe1ng ch\xfa \xfd."})]})]}),(0,d.jsxs)(s,{children:[(0,d.jsx)(r,{eyebrow:"Workload",title:"Nguồn tải ch\xednh",description:"API key v\xe0 endpoint đ\xe3 aggregate; kh\xf4ng đưa raw bearer token v\xe0o report.",icon:"account_tree"}),(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"mb-2 text-xs font-bold uppercase tracking-[0.12em] text-text-muted",children:"Top API keys"}),(0,d.jsx)("div",{className:"space-y-2",children:(c.workload?.apiKeys||[]).slice(0,6).map(a=>(0,d.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background px-3 py-2.5",children:[(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("div",{className:"truncate text-sm font-semibold text-text-main",children:a.label}),(0,d.jsx)("div",{className:"text-[11px] text-text-muted",children:a.ownerUser||a.fingerprint||"-"})]}),(0,d.jsxs)("div",{className:"text-right",children:[(0,d.jsx)("div",{className:"text-sm font-bold text-text-main",children:k(a.totalTokens)}),(0,d.jsxs)("div",{className:"text-[10px] text-text-muted",children:[l(a.tokenShare)," token"]})]})]},a.key))})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"mb-2 text-xs font-bold uppercase tracking-[0.12em] text-text-muted",children:"Top endpoints"}),(0,d.jsx)("div",{className:"space-y-2",children:(c.workload?.endpoints||[]).slice(0,6).map(a=>(0,d.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background px-3 py-2.5",children:[(0,d.jsx)("div",{className:"min-w-0 truncate text-sm font-semibold text-text-main",children:a.label}),(0,d.jsxs)("div",{className:"text-right text-xs text-text-muted",children:[j(a.requests)," req \xb7 ",l(a.errorRate)," error"]})]},a.key))})]})]})]})]}),(0,d.jsxs)(s,{children:[(0,d.jsx)(r,{eyebrow:"Execution Plan",title:"Kế hoạch h\xe0nh động",description:"Ưu ti\xean theo t\xe1c động vận h\xe0nh; mỗi h\xe0nh động c\xf3 owner gợi \xfd v\xe0 chỉ số x\xe1c nhận sau khi triển khai.",icon:"checklist"}),(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full min-w-[900px] text-left text-sm",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border text-[10px] uppercase tracking-[0.12em] text-text-muted",children:[(0,d.jsx)("th",{className:"pb-3",children:"Priority"}),(0,d.jsx)("th",{className:"pb-3",children:"H\xe0nh động"}),(0,d.jsx)("th",{className:"pb-3",children:"Owner"}),(0,d.jsx)("th",{className:"pb-3",children:"Chỉ số kiểm chứng"})]})}),(0,d.jsx)("tbody",{children:(c.narrative?.actions||[]).map((a,b)=>(0,d.jsxs)("tr",{className:"border-b border-border/60 align-top",children:[(0,d.jsx)("td",{className:"py-4",children:(0,d.jsx)(q,{value:a.priority})}),(0,d.jsx)("td",{className:"py-4 pr-6 font-medium leading-6 text-text-main",children:a.action}),(0,d.jsx)("td",{className:"py-4 pr-6 text-text-muted",children:a.owner||"-"}),(0,d.jsx)("td",{className:"py-4 text-text-muted",children:a.validationMetric||"-"})]},`${b}-${a.action}`))})]})})]}),(0,d.jsxs)(s,{children:[(0,d.jsx)(r,{eyebrow:"Forecast & Methodology",title:"Dự b\xe1o v\xe0 giới hạn b\xe1o c\xe1o",icon:"policy"}),(0,d.jsxs)("div",{className:"grid gap-5 lg:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,d.jsx)("h3",{className:"font-bold text-text-main",children:"Dự b\xe1o ngắn hạn"}),(0,d.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:c.narrative?.forecast})]}),(0,d.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,d.jsx)("h3",{className:"font-bold text-text-main",children:"Độ tin cậy dữ liệu"}),(0,d.jsx)("ul",{className:"mt-3 space-y-2",children:(c.dataQuality||[]).map(a=>(0,d.jsxs)("li",{className:"flex gap-2 text-sm leading-6 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined mt-1 text-[16px] text-primary",children:"info"}),(0,d.jsx)("span",{children:a})]},a))})]})]}),c.aiWarning?(0,d.jsxs)("div",{className:"mt-4 rounded-xl border border-amber-500/20 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:["AI narrative fallback được sử dụng v\xec: ",c.aiWarning]}):null,(0,d.jsxs)("div",{className:"mt-4 text-[11px] text-text-muted",children:["Report ID: ",c.id," \xb7 Analytics ",c.analyticsVersion," \xb7 Compute ",j(c.computeMs)," ms \xb7 Requested by ",c.requestedBy||"Admin"]})]})]}):(0,d.jsxs)(s,{className:"flex min-h-[340px] flex-col items-center justify-center text-center",children:[(0,d.jsx)("span",{className:"material-symbols-outlined rounded-3xl bg-primary/10 p-5 text-5xl text-primary",children:"analytics"}),(0,d.jsx)("h2",{className:"mt-5 text-2xl font-black text-text-main",children:"Chưa c\xf3 Local AI Report"}),(0,d.jsx)("p",{className:"mt-2 max-w-xl text-sm leading-6 text-text-muted",children:"Chọn AI model v\xe0 tạo b\xe1o c\xe1o. Hệ thống chỉ lấy traffic từ Provider Node c\xf3 runtime vLLM; dữ liệu cloud kh\xf4ng được trộn v\xe0o KPI local."})]})]}):null}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{"use strict";a.exports=require("better-sqlite3")},91633:(a,b,c)=>{Promise.resolve().then(c.bind(c,32746))},91645:a=>{"use strict";a.exports=require("net")},94735:a=>{"use strict";a.exports=require("events")}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[4741,319,1361,2817,402,5681,4404,6064,6328,1340],()=>b(b.s=30721));module.exports=c})();
7
+ <header class="hero"><div class="eyebrow">BlueRouter \xb7 Local AI Operations</div><h1>B\xe1o c\xe1o hoạt động Local AI — ${B(c.title)}</h1><div class="meta">${B(p(a.range?.startIso))} → ${B(p(a.range?.endIso))} \xb7 Asia/Ho_Chi_Minh</div><p><span class="badge">${B(b)}</span> &nbsp; Confidence: ${B(a.confidence)} &nbsp; Generated: ${B(p(a.generatedAt))}</p></header>
8
+ <section class="grid kpis">${C(d,([a,b])=>`<div class="card kpi"><span class="muted">${B(a)}</span><strong>${B(b)}</strong></div>`)}</section>
9
+ <section class="card section"><h2>T\xf3m tắt điều h\xe0nh</h2><ul>${C(a.narrative?.executiveSummary,a=>`<li>${B(a)}</li>`)}</ul></section>
10
+ <section class="grid two section"><div class="card"><h2>Điểm mạnh</h2>${C(a.narrative?.strengths,a=>`<div><h3>${B(a.title)}</h3><p>${B(a.evidence)}</p></div>`)||'<p class="muted">Chưa đủ dữ liệu.</p>'}</div><div class="card"><h2>Điểm yếu & rủi ro</h2>${C(a.narrative?.weaknesses,a=>`<div><h3><span class="priority ${B(a.priority)}">${B(a.priority)}</span> ${B(a.title)}</h3><p>${B(a.evidence)} ${B(a.impact)}</p></div>`)||'<p class="muted">Chưa ph\xe1t hiện điểm yếu nổi bật.</p>'}</div></section>
11
+ <section class="card section"><h2>Hiệu năng theo model</h2><table><thead><tr><th>Model</th><th>Requests</th><th>Success</th><th>Latency p95</th><th>TTFT p95</th><th>Tok/s</th><th>Cache</th><th>Context >=50k</th></tr></thead><tbody>${C(a.models,a=>`<tr><td><strong>${B(a.model)}</strong><br><span class="muted">${B(a.providerLabel)}</span></td><td>${B(l(a.requests))}</td><td>${B(n(1-a.errorRate,2))}</td><td>${B(o(a.p95LatencyMs))}</td><td>${B(o(a.p95TtftMs))}</td><td>${B(null==a.outputTokensPerSecond?"-":l(a.outputTokensPerSecond,1))}</td><td>${B(n(a.cacheShare))}</td><td>${B(n(a.hugeInputRate))}</td></tr>`)}</tbody></table></section>
12
+ <section class="card section"><h2>Xu hướng theo ng\xe0y</h2><table><thead><tr><th>Ng\xe0y</th><th>Request</th><th>Success</th><th>Error</th><th>Total tokens</th><th>Cached</th></tr></thead><tbody>${C(a.daily,a=>`<tr><td>${B(a.date)}</td><td>${B(l(a.requests))}</td><td>${B(l(a.success))}</td><td>${B(`${l(a.errors)} (${n(a.errorRate)})`)}</td><td>${B(l(a.totalTokens))}</td><td>${B(l(a.cachedTokens))}</td></tr>`)}</tbody></table></section>
13
+ <section class="grid two section"><div class="card"><h2>Context, cache & thinking</h2><table><tbody><tr><th>Cached / input</th><td>${B(n(a.overview?.cacheShare))}</td></tr><tr><th>Reasoning / output</th><td>${B(n(a.overview?.reasoningShare))}</td></tr><tr><th>Context >=50k</th><td>${B(n(a.contextAndThinking?.largeContext?.gte50kRate))}</td></tr><tr><th>Thinking auto-off</th><td>${B(n(a.contextAndThinking?.thinking?.autoOffRate))}</td></tr></tbody></table></div><div class="card"><h2>Ph\xe2n loại lỗi</h2><table><tbody><tr><th>Gateway</th><td>${B(l(a.errors?.summary?.gateway))}</td></tr><tr><th>Upstream</th><td>${B(l(a.errors?.summary?.upstream))}</td></tr><tr><th>Client</th><td>${B(l(a.errors?.summary?.client))}</td></tr><tr><th>Rate limit</th><td>${B(l(a.errors?.summary?.rateLimit))}</td></tr></tbody></table></div></section>
14
+ <section class="card section"><h2>Top lỗi gateway / upstream</h2><table><thead><tr><th>Owner / lỗi</th><th>Model</th><th>Endpoint</th><th>Count</th></tr></thead><tbody>${C(a.errors?.topServerErrors,a=>`<tr><td><strong>${B(`${a.faultOwner||"unknown"} \xb7 ${a.errorType||a.status||"error"}`)}</strong><br><span class="muted">${B(a.sample||a.errorCode||"-")}</span></td><td>${B(a.model||"-")}</td><td>${B(a.endpoint||"-")}</td><td>${B(l(a.requests))}</td></tr>`)||'<tr><td colspan="4" class="muted">Kh\xf4ng c\xf3 lỗi gateway/upstream đ\xe1ng ch\xfa \xfd.</td></tr>'}</tbody></table></section>
15
+ <section class="grid two section"><div class="card"><h2>Top API keys theo token</h2><table><thead><tr><th>API key</th><th>Owner</th><th>Token</th><th>Share</th></tr></thead><tbody>${C((a.workload?.apiKeys||[]).slice(0,10),a=>`<tr><td>${B(a.label)}</td><td>${B(a.ownerUser||a.fingerprint||"-")}</td><td>${B(l(a.totalTokens))}</td><td>${B(n(a.tokenShare))}</td></tr>`)}</tbody></table></div><div class="card"><h2>Top endpoints</h2><table><thead><tr><th>Endpoint</th><th>Request</th><th>Error</th></tr></thead><tbody>${C((a.workload?.endpoints||[]).slice(0,10),a=>`<tr><td>${B(a.label)}</td><td>${B(l(a.requests))}</td><td>${B(n(a.errorRate))}</td></tr>`)}</tbody></table></div></section>
16
+ <section class="grid two section"><div class="card"><h2>Đ\xe1nh gi\xe1 hạ tầng</h2><p>${B(a.narrative?.infrastructureAssessment)}</p>${C(a.hardware,a=>`<div><h3>${B(a.name)} \xb7 ${B(a.reachable?"Snapshot available":"No telemetry")}</h3><p class="muted">CPU ${B(a.cpu?.model||"-")} \xb7 ${B(l(a.cpu?.cores))} cores \xb7 RAM ${B(q(a.memory?.totalBytes))} \xb7 GPU ${B((a.gpus||[]).map(a=>`${a.name} ${(a.memoryTotalMb/1024).toFixed(1)} GiB`).join(", ")||"-")}</p></div>`)}</div><div class="card"><h2>Dự b\xe1o ngắn hạn</h2><p>${B(a.narrative?.forecast)}</p><h3>Giới hạn dữ liệu</h3><ul>${C(a.dataQuality,a=>`<li>${B(a)}</li>`)}</ul></div></section>
17
+ <section class="card section"><h2>Kế hoạch h\xe0nh động</h2><table><thead><tr><th>Priority</th><th>Action</th><th>Owner</th><th>Validation metric</th></tr></thead><tbody>${C(a.narrative?.actions,a=>`<tr><td class="priority ${B(a.priority)}">${B(a.priority)}</td><td>${B(a.action)}</td><td>${B(a.owner)}</td><td>${B(a.validationMetric)}</td></tr>`)}</tbody></table></section>
18
+ <div class="footer">BlueRouter Local AI Report \xb7 Internal operational document \xb7 ${B(a.id)}</div>
19
+ </main></body></html>`}function E(a,b,c){let d=new Blob([a],{type:b}),e=URL.createObjectURL(d),f=document.createElement("a");f.href=e,f.download=c,document.body.appendChild(f),f.click(),f.remove(),URL.revokeObjectURL(e)}function F(){let{isAdmin:a,loading:b}=(0,f.s)(),[c,h]=(0,e.useState)({"7d":null,"30d":null}),[q,B]=(0,e.useState)("7d"),[C,F]=(0,e.useState)([]),[G,H]=(0,e.useState)(""),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(!0),[M,N]=(0,e.useState)(!1),[O,P]=(0,e.useState)(""),[Q,R]=(0,e.useState)(!1),S=c[q]||null,T=i.find(a=>a.value===q)||i[0],U=(0,e.useCallback)(a=>{H(a),fetch("/api/dashboard/analytics/analyze",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a})}).catch(()=>{})},[]),V=(0,e.useCallback)(async()=>{N(!0),P("");try{let a=G.indexOf("::"),b=a>=0?G.slice(0,a):"",c=a>=0?G.slice(a+2):"",d=await fetch("/api/dashboard/local-ai-report",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connectionId:b,model:c,period:q})}),e=await d.json().catch(()=>({}));if(!d.ok)throw Error(e.error||"Kh\xf4ng thể tạo b\xe1o c\xe1o");h(a=>({...a,[q]:e.report||null}))}catch(a){P(a?.message||"Kh\xf4ng thể tạo b\xe1o c\xe1o")}finally{N(!1)}},[G,q]),W=(0,e.useCallback)(()=>{if(!S)return;let a=S.range?.period||q;E(D(S),"text/html;charset=utf-8",`local-ai-report-${a}-${S.generatedAt.slice(0,10)}.html`)},[S,q]),X=(0,e.useCallback)(()=>{if(!S)return;let a=S.range?.period||q;E(JSON.stringify(S,null,2),"application/json;charset=utf-8",`local-ai-report-${a}-${S.generatedAt.slice(0,10)}.json`)},[S,q]),Y=(0,e.useCallback)(()=>{if(!S)return;let a=new Blob([D(S)],{type:"text/html;charset=utf-8"}),b=URL.createObjectURL(a),c=window.open(b,"_blank");if(!c){URL.revokeObjectURL(b),P("Tr\xecnh duyệt đ\xe3 chặn cửa sổ in. H\xe3y cho ph\xe9p pop-up hoặc tải file HTML.");return}try{c.opener=null}catch{}c.addEventListener("load",()=>{c.focus(),c.print(),setTimeout(()=>URL.revokeObjectURL(b),3e4)},{once:!0})},[S]),Z=(0,e.useCallback)(async()=>{if(!S)return;let a=[`B\xc1O C\xc1O LOCAL AI — ${j(S,q).title.toUpperCase()}`,`Trạng th\xe1i: ${g[S.status]?.label||S.status}`,`Điểm vận h\xe0nh: ${null==S.score?"N/A":`${S.score}/100`}`,"",...(S.narrative?.executiveSummary||[]).map(a=>`- ${a}`)].join("\n");await navigator.clipboard.writeText(a),R(!0),setTimeout(()=>R(!1),1800)},[S,q]),$=(0,e.useMemo)(()=>S?.daily?.length?[...S.daily].sort((a,b)=>b.requests-a.requests)[0]:null,[S]);return b||K?(0,d.jsx)("div",{className:"flex min-h-[60vh] items-center justify-center",children:(0,d.jsxs)("div",{className:"flex items-center gap-3 rounded-2xl border border-border bg-surface px-5 py-4 text-sm text-text-muted shadow-sm",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-primary",children:"progress_activity"}),"Đang chuẩn bị Local AI Report..."]})}):a?(0,d.jsxs)("div",{className:"mx-auto max-w-[1500px] space-y-6 pb-12",children:[(0,d.jsxs)("header",{className:"relative overflow-hidden rounded-[34px] border border-blue-400/20 bg-gradient-to-br from-[#071b35] via-[#123d78] to-[#087f9c] p-6 text-white shadow-[0_28px_90px_rgba(30,86,160,0.25)] md:p-9",children:[(0,d.jsx)("div",{className:"absolute -right-24 -top-24 h-72 w-72 rounded-full bg-cyan-300/20 blur-3xl"}),(0,d.jsx)("div",{className:"absolute bottom-0 left-1/3 h-44 w-72 rounded-full bg-blue-300/15 blur-3xl"}),(0,d.jsxs)("div",{className:"relative grid gap-8 xl:grid-cols-[minmax(0,1fr)_430px] xl:items-end",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"text-[11px] font-black uppercase tracking-[0.24em] text-cyan-200",children:"BlueRouter \xb7 AI Operations Intelligence"}),(0,d.jsx)("h1",{className:"mt-3 max-w-4xl text-3xl font-black tracking-tight md:text-5xl",children:"B\xe1o c\xe1o hoạt động Local AI"}),(0,d.jsxs)("p",{className:"mt-3 max-w-3xl text-sm leading-6 text-blue-100 md:text-base",children:["Bức tranh vận h\xe0nh local vLLM trong ",T.label," gần nhất: lưu lượng, hiệu năng, context, cache, lỗi, tải theo model v\xe0 snapshot hạ tầng."]}),(0,d.jsxs)("div",{className:"mt-5 flex flex-wrap items-center gap-3",children:[S?(0,d.jsx)(r,{status:S.status}):(0,d.jsx)("span",{className:"rounded-full border border-white/15 bg-white/10 px-3 py-1.5 text-xs font-semibold",children:"Chưa c\xf3 b\xe1o c\xe1o"}),S?(0,d.jsxs)("span",{className:"rounded-full border border-white/15 bg-white/10 px-3 py-1.5 text-xs font-semibold",children:["Confidence: ",S.confidence]}):null,S?.generatedAt?(0,d.jsxs)("span",{className:"text-xs text-blue-100",children:["Cập nhật ",p(S.generatedAt)]}):null]})]}),(0,d.jsxs)("div",{className:"rounded-2xl border border-white/15 bg-white/10 p-4 backdrop-blur-xl",children:[(0,d.jsx)("label",{className:"text-[11px] font-bold uppercase tracking-[0.14em] text-blue-100",children:"Kỳ b\xe1o c\xe1o"}),(0,d.jsx)("div",{className:"mt-2 grid grid-cols-2 gap-2 rounded-xl bg-[#082546]/70 p-1.5",children:i.map(a=>{let b=q===a.value,e=c[a.value];return(0,d.jsxs)("button",{type:"button",disabled:M,onClick:()=>{B(a.value),R(!1),P("")},className:k("relative flex h-10 items-center justify-center gap-2 rounded-lg px-3 text-sm font-bold transition disabled:cursor-not-allowed disabled:opacity-60",b?"bg-white text-[#123d78] shadow-md":"text-blue-100 hover:bg-white/10"),children:[(0,d.jsx)("span",{children:a.label}),e?(0,d.jsx)("span",{className:k("h-1.5 w-1.5 rounded-full",b?"bg-emerald-500":"bg-emerald-300"),title:`Đ\xe3 tạo ${p(e.generatedAt)}`}):null]},a.value)})}),(0,d.jsx)("label",{className:"mt-4 block text-[11px] font-bold uppercase tracking-[0.14em] text-blue-100",children:"AI model viết nhận định"}),(0,d.jsxs)("select",{value:G,onChange:a=>U(a.target.value),className:"mt-2 h-11 w-full rounded-xl border border-white/20 bg-[#0b2b53] px-3 text-sm text-white outline-none focus:border-cyan-300",children:[C.length?null:(0,d.jsx)("option",{value:"",children:"Kh\xf4ng c\xf3 AI model khả dụng"}),C.map(a=>(0,d.jsx)("option",{value:a.value,children:a.label},a.value))]}),(0,d.jsxs)("button",{type:"button",onClick:V,disabled:M||I,className:"mt-3 flex h-11 w-full items-center justify-center gap-2 rounded-xl bg-white font-bold text-[#123d78] shadow-lg transition hover:-translate-y-0.5 hover:bg-cyan-50 disabled:cursor-not-allowed disabled:opacity-60",children:[(0,d.jsx)("span",{className:k("material-symbols-outlined text-[20px]",M&&"animate-spin"),children:M?"progress_activity":"auto_awesome"}),M?`Đang ph\xe2n t\xedch dữ liệu ${T.label}...`:S?`Tạo lại b\xe1o c\xe1o ${T.label}`:`Tạo b\xe1o c\xe1o ${T.label}`]}),I?(0,d.jsx)("p",{className:"mt-2 text-xs text-amber-200",children:"Standby chỉ hiển thị report được đồng bộ từ Master."}):null]})]})]}),O?(0,d.jsxs)("div",{className:"flex items-start gap-3 rounded-2xl border border-red-500/20 bg-red-500/10 p-4 text-sm text-red-700 dark:text-red-300",children:[(0,d.jsx)("span",{className:"material-symbols-outlined",children:"error"}),(0,d.jsx)("div",{children:O})]}):null,S?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-2xl border border-border bg-surface px-4 py-3 shadow-sm",children:[(0,d.jsxs)("div",{className:"text-xs text-text-muted",children:["Phạm vi: ",(0,d.jsxs)("span",{className:"font-semibold text-text-main",children:[p(S.range?.startIso)," → ",p(S.range?.endIso)]})," \xb7 Asia/Ho_Chi_Minh \xb7 ",S.providers?.length||0," local provider"]}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsxs)("button",{type:"button",onClick:Z,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"content_copy"}),Q?"Đ\xe3 sao ch\xe9p":"Copy summary"]}),(0,d.jsxs)("button",{type:"button",onClick:X,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"data_object"}),"JSON"]}),(0,d.jsxs)("button",{type:"button",onClick:W,className:"inline-flex items-center gap-2 rounded-xl bg-primary px-3 py-2 text-xs font-bold text-white shadow-sm hover:brightness-110",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"download"}),"Tải HTML full"]}),(0,d.jsxs)("button",{type:"button",onClick:Y,className:"inline-flex items-center gap-2 rounded-xl border border-border bg-background px-3 py-2 text-xs font-semibold text-text-main hover:border-primary/40",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"print"}),"In / PDF"]})]})]}),(0,d.jsxs)("section",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-6",children:[(0,d.jsx)(v,{icon:"conversion_path",label:"Requests",value:m(S.overview?.requests),hint:`${m(S.overview?.totalTokens)} tokens`}),(0,d.jsx)(v,{icon:"verified",label:"Success rate",value:n(S.overview?.successRate,2),hint:`${l(S.overview?.errors)} usage errors`,tone:"emerald"}),(0,d.jsx)(v,{icon:"speed",label:"Latency p95",value:o(S.experience?.p95LatencyMs),hint:`p50 ${o(S.experience?.p50LatencyMs)}`,tone:"violet"}),(0,d.jsx)(v,{icon:"bolt",label:"TTFT p95",value:o(S.experience?.p95TtftMs),hint:`${l(S.experience?.outputTokensPerSecond,1)} tok/s`,tone:"amber"}),(0,d.jsx)(v,{icon:"cached",label:"Cached input",value:n(S.overview?.cacheShare),hint:`${m(S.overview?.cachedTokens)} tokens`,tone:"blue"}),(0,d.jsx)(v,{icon:"health_metrics",label:"Operational score",value:null==S.score?"N/A":`${S.score}/100`,hint:`Confidence ${S.confidence}`,tone:"critical"===S.status?"rose":"warning"===S.status?"amber":"emerald"})]}),(0,d.jsxs)(u,{className:"overflow-hidden bg-gradient-to-br from-surface to-primary/[0.035]",children:[(0,d.jsx)(t,{eyebrow:"Executive Brief",title:"T\xf3m tắt điều h\xe0nh",description:"Những t\xedn hiệu quan trọng nhất, kết hợp analytics local-only, lỗi v\xe0 snapshot hạ tầng.",icon:"summarize"}),(0,d.jsxs)("div",{className:"grid gap-4 lg:grid-cols-[minmax(0,1fr)_340px]",children:[(0,d.jsx)("div",{className:"space-y-3",children:(S.narrative?.executiveSummary||[]).map((a,b)=>(0,d.jsxs)("div",{className:"flex gap-3 rounded-2xl border border-border bg-background p-4",children:[(0,d.jsx)("span",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-xs font-black text-primary",children:b+1}),(0,d.jsx)("p",{className:"text-sm leading-6 text-text-main",children:a})]},`${b}-${a}`))}),(0,d.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,d.jsx)("div",{className:"text-xs font-bold uppercase tracking-[0.14em] text-text-muted",children:"Điểm vận h\xe0nh"}),(0,d.jsx)("div",{className:"mt-2 text-6xl font-black tracking-tighter text-text-main",children:null==S.score?"—":S.score}),(0,d.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Thang 100 \xb7 heuristic SRE từ error, p95 latency, TTFT v\xe0 snapshot telemetry"}),(0,d.jsx)("div",{className:"mt-5 space-y-2",children:(S.operationalSignals||[]).slice(0,5).map(a=>(0,d.jsxs)("div",{className:"flex gap-2 text-xs leading-5 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined mt-0.5 text-[16px] text-primary",children:"arrow_right"}),(0,d.jsx)("span",{children:a})]},a))})]})]})]}),(0,d.jsxs)("div",{className:"grid gap-6 xl:grid-cols-[minmax(0,1.35fr)_minmax(360px,0.65fr)]",children:[(0,d.jsxs)(u,{children:[(0,d.jsx)(t,{eyebrow:"Traffic",title:`Xu hướng ${T.label}`,description:"Request theo ng\xe0y ở m\xfai giờ Asia/Ho_Chi_Minh; hover từng cột để xem token v\xe0 lỗi.",icon:"finance_mode"}),(0,d.jsx)(x,{rows:S.daily||[]}),$?(0,d.jsxs)("div",{className:"mt-4 grid gap-3 sm:grid-cols-3",children:[(0,d.jsx)(z,{label:"Peak day",value:`${$.date} \xb7 ${l($.requests)} req`}),(0,d.jsx)(z,{label:"Peak error rate",value:n($.errorRate)}),(0,d.jsx)(z,{label:"Peak tokens",value:m($.totalTokens)})]}):null]}),(0,d.jsxs)(u,{children:[(0,d.jsx)(t,{eyebrow:"Context Economics",title:"Token, cache & thinking",description:"Ph\xe2n t\xedch theo usage do provider b\xe1o; cached token kh\xf4ng mặc định l\xe0 GPU KV cache.",icon:"memory"}),(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsx)(w,{value:S.overview?.cacheShare*100,label:"Cached / input (%)",tone:"bg-cyan-500"}),(0,d.jsx)(w,{value:Math.min(100,S.overview?.reasoningShare*100),label:"Reasoning / output (%)",tone:"bg-violet-500"}),(0,d.jsx)(w,{value:100*(S.contextAndThinking?.largeContext?.gte50kRate||0),label:"Request context >=50k (%)",tone:"bg-amber-500"}),(0,d.jsx)(w,{value:100*(S.contextAndThinking?.thinking?.autoOffRate||0),label:"Thinking auto-off (%)",tone:"bg-rose-500"})]}),(0,d.jsxs)("div",{className:"mt-5 grid gap-3 sm:grid-cols-2 xl:grid-cols-1 2xl:grid-cols-2",children:[(0,d.jsx)(z,{label:"Input tokens",value:m(S.overview?.promptTokens)}),(0,d.jsx)(z,{label:"Output tokens",value:m(S.overview?.completionTokens)}),(0,d.jsx)(z,{label:"Avg token/request",value:m(S.overview?.averageTokensPerRequest)}),(0,d.jsx)(z,{label:"Extreme context",value:n(S.experience?.extremeInputRate)})]})]})]}),(0,d.jsxs)(u,{children:[(0,d.jsx)(t,{eyebrow:"Model Intelligence",title:"Đ\xe1nh gi\xe1 theo từng local model",description:"So s\xe1nh trong bối cảnh workload thực tế. Model \xedt hơn 20 request được đ\xe1nh dấu \xedt mẫu.",icon:"model_training"}),(0,d.jsxs)("div",{className:"grid gap-4 xl:grid-cols-2",children:[(S.models||[]).map((a,b)=>(0,d.jsx)(y,{model:a,rank:b+1},a.key)),S.models?.length?null:(0,d.jsx)("div",{className:"col-span-full rounded-2xl border border-dashed border-border p-10 text-center text-sm text-text-muted",children:"Kh\xf4ng c\xf3 model local n\xe0o ph\xe1t sinh traffic trong khoảng b\xe1o c\xe1o."})]})]}),(0,d.jsxs)(u,{children:[(0,d.jsx)(t,{eyebrow:"Infrastructure Snapshot",title:"Hạ tầng Local AI",description:`Inventory v\xe0 snapshot tại thời điểm tạo b\xe1o c\xe1o. Kh\xf4ng được diễn giải th\xe0nh lịch sử GPU ${T.label}.`,icon:"developer_board"}),(0,d.jsxs)("div",{className:"grid gap-4 xl:grid-cols-2",children:[(S.hardware||[]).map(a=>(0,d.jsx)(A,{node:a},a.id)),S.hardware?.length?null:(0,d.jsx)("div",{className:"col-span-full rounded-2xl border border-dashed border-border p-10 text-center text-sm text-text-muted",children:"Chưa cấu h\xecnh Linux Resources."})]}),(0,d.jsxs)("div",{className:"mt-5 rounded-2xl border border-primary/15 bg-primary/5 p-4 text-sm leading-6 text-text-muted",children:[(0,d.jsx)("strong",{className:"text-text-main",children:"Nhận định hạ tầng:"})," ",S.narrative?.infrastructureAssessment]})]}),(0,d.jsxs)("div",{className:"grid gap-6 xl:grid-cols-2",children:[(0,d.jsxs)(u,{children:[(0,d.jsx)(t,{eyebrow:"Strengths",title:"Điểm mạnh",icon:"workspace_premium"}),(0,d.jsx)("div",{className:"space-y-3",children:(S.narrative?.strengths||[]).map((a,b)=>(0,d.jsxs)("div",{className:"rounded-2xl border border-emerald-500/15 bg-emerald-500/5 p-4",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsx)("h3",{className:"font-bold text-text-main",children:a.title}),(0,d.jsx)("span",{className:"rounded-full bg-emerald-500/10 px-2 py-1 text-[10px] font-bold uppercase text-emerald-600",children:a.confidence})]}),(0,d.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:a.evidence})]},`${b}-${a.title}`))})]}),(0,d.jsxs)(u,{children:[(0,d.jsx)(t,{eyebrow:"Risks",title:"Điểm yếu & rủi ro",icon:"crisis_alert"}),(0,d.jsx)("div",{className:"space-y-3",children:(S.narrative?.weaknesses||[]).map((a,b)=>(0,d.jsxs)("div",{className:"rounded-2xl border border-amber-500/15 bg-amber-500/5 p-4",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)(s,{value:a.priority}),(0,d.jsx)("h3",{className:"font-bold text-text-main",children:a.title})]}),(0,d.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:a.evidence}),a.impact?(0,d.jsxs)("p",{className:"mt-2 text-xs font-medium text-amber-700 dark:text-amber-300",children:["Ảnh hưởng: ",a.impact]}):null]},`${b}-${a.title}`))})]})]}),(0,d.jsxs)("div",{className:"grid gap-6 xl:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)]",children:[(0,d.jsxs)(u,{children:[(0,d.jsx)(t,{eyebrow:"Reliability",title:"Lỗi ảnh hưởng Local AI",description:"Ph\xe2n loại gateway, upstream, client v\xe0 rate-limit từ request_error_events đ\xe3 scope theo local provider.",icon:"bug_report"}),(0,d.jsxs)("div",{className:"grid gap-3 sm:grid-cols-4",children:[(0,d.jsx)(z,{label:"Gateway",value:l(S.errors?.summary?.gateway)}),(0,d.jsx)(z,{label:"Upstream",value:l(S.errors?.summary?.upstream)}),(0,d.jsx)(z,{label:"Client",value:l(S.errors?.summary?.client)}),(0,d.jsx)(z,{label:"Rate limit",value:l(S.errors?.summary?.rateLimit)})]}),(0,d.jsxs)("div",{className:"mt-5 overflow-x-auto",children:[(0,d.jsxs)("table",{className:"w-full min-w-[720px] text-left text-xs",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border text-[10px] uppercase tracking-[0.1em] text-text-muted",children:[(0,d.jsx)("th",{className:"pb-3",children:"Owner / Error"}),(0,d.jsx)("th",{className:"pb-3",children:"Model"}),(0,d.jsx)("th",{className:"pb-3",children:"Endpoint"}),(0,d.jsx)("th",{className:"pb-3 text-right",children:"Count"})]})}),(0,d.jsx)("tbody",{children:(S.errors?.topServerErrors||[]).map((a,b)=>(0,d.jsxs)("tr",{className:"border-b border-border/60",children:[(0,d.jsxs)("td",{className:"py-3",children:[(0,d.jsxs)("div",{className:"font-semibold text-text-main",children:[a.faultOwner||"unknown"," \xb7 ",a.errorType||a.status]}),(0,d.jsx)("div",{className:"mt-1 max-w-md truncate text-text-muted",title:a.sample,children:a.sample||a.errorCode||"-"})]}),(0,d.jsx)("td",{className:"py-3 text-text-muted",children:a.model||"-"}),(0,d.jsx)("td",{className:"py-3 text-text-muted",children:a.endpoint||"-"}),(0,d.jsx)("td",{className:"py-3 text-right font-bold text-text-main",children:l(a.requests)})]},`${b}-${a.label}`))})]}),S.errors?.topServerErrors?.length?null:(0,d.jsx)("div",{className:"py-8 text-center text-sm text-text-muted",children:"Kh\xf4ng c\xf3 lỗi gateway/upstream đ\xe1ng ch\xfa \xfd."})]})]}),(0,d.jsxs)(u,{children:[(0,d.jsx)(t,{eyebrow:"Workload",title:"Nguồn tải ch\xednh",description:"API key v\xe0 endpoint đ\xe3 aggregate; kh\xf4ng đưa raw bearer token v\xe0o report.",icon:"account_tree"}),(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"mb-2 text-xs font-bold uppercase tracking-[0.12em] text-text-muted",children:"Top API keys"}),(0,d.jsx)("div",{className:"space-y-2",children:(S.workload?.apiKeys||[]).slice(0,6).map(a=>(0,d.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background px-3 py-2.5",children:[(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("div",{className:"truncate text-sm font-semibold text-text-main",children:a.label}),(0,d.jsx)("div",{className:"text-[11px] text-text-muted",children:a.ownerUser||a.fingerprint||"-"})]}),(0,d.jsxs)("div",{className:"text-right",children:[(0,d.jsx)("div",{className:"text-sm font-bold text-text-main",children:m(a.totalTokens)}),(0,d.jsxs)("div",{className:"text-[10px] text-text-muted",children:[n(a.tokenShare)," token"]})]})]},a.key))})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"mb-2 text-xs font-bold uppercase tracking-[0.12em] text-text-muted",children:"Top endpoints"}),(0,d.jsx)("div",{className:"space-y-2",children:(S.workload?.endpoints||[]).slice(0,6).map(a=>(0,d.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background px-3 py-2.5",children:[(0,d.jsx)("div",{className:"min-w-0 truncate text-sm font-semibold text-text-main",children:a.label}),(0,d.jsxs)("div",{className:"text-right text-xs text-text-muted",children:[l(a.requests)," req \xb7 ",n(a.errorRate)," error"]})]},a.key))})]})]})]})]}),(0,d.jsxs)(u,{children:[(0,d.jsx)(t,{eyebrow:"Execution Plan",title:"Kế hoạch h\xe0nh động",description:"Ưu ti\xean theo t\xe1c động vận h\xe0nh; mỗi h\xe0nh động c\xf3 owner gợi \xfd v\xe0 chỉ số x\xe1c nhận sau khi triển khai.",icon:"checklist"}),(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full min-w-[900px] text-left text-sm",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border text-[10px] uppercase tracking-[0.12em] text-text-muted",children:[(0,d.jsx)("th",{className:"pb-3",children:"Priority"}),(0,d.jsx)("th",{className:"pb-3",children:"H\xe0nh động"}),(0,d.jsx)("th",{className:"pb-3",children:"Owner"}),(0,d.jsx)("th",{className:"pb-3",children:"Chỉ số kiểm chứng"})]})}),(0,d.jsx)("tbody",{children:(S.narrative?.actions||[]).map((a,b)=>(0,d.jsxs)("tr",{className:"border-b border-border/60 align-top",children:[(0,d.jsx)("td",{className:"py-4",children:(0,d.jsx)(s,{value:a.priority})}),(0,d.jsx)("td",{className:"py-4 pr-6 font-medium leading-6 text-text-main",children:a.action}),(0,d.jsx)("td",{className:"py-4 pr-6 text-text-muted",children:a.owner||"-"}),(0,d.jsx)("td",{className:"py-4 text-text-muted",children:a.validationMetric||"-"})]},`${b}-${a.action}`))})]})})]}),(0,d.jsxs)(u,{children:[(0,d.jsx)(t,{eyebrow:"Forecast & Methodology",title:"Dự b\xe1o v\xe0 giới hạn b\xe1o c\xe1o",icon:"policy"}),(0,d.jsxs)("div",{className:"grid gap-5 lg:grid-cols-2",children:[(0,d.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,d.jsx)("h3",{className:"font-bold text-text-main",children:"Dự b\xe1o ngắn hạn"}),(0,d.jsx)("p",{className:"mt-2 text-sm leading-6 text-text-muted",children:S.narrative?.forecast})]}),(0,d.jsxs)("div",{className:"rounded-2xl border border-border bg-background p-5",children:[(0,d.jsx)("h3",{className:"font-bold text-text-main",children:"Độ tin cậy dữ liệu"}),(0,d.jsx)("ul",{className:"mt-3 space-y-2",children:(S.dataQuality||[]).map(a=>(0,d.jsxs)("li",{className:"flex gap-2 text-sm leading-6 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined mt-1 text-[16px] text-primary",children:"info"}),(0,d.jsx)("span",{children:a})]},a))})]})]}),S.aiWarning?(0,d.jsxs)("div",{className:"mt-4 rounded-xl border border-amber-500/20 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:["AI narrative fallback được sử dụng v\xec: ",S.aiWarning]}):null,(0,d.jsxs)("div",{className:"mt-4 text-[11px] text-text-muted",children:["Report ID: ",S.id," \xb7 Analytics ",S.analyticsVersion," \xb7 Compute ",l(S.computeMs)," ms \xb7 Requested by ",S.requestedBy||"Admin"]})]})]}):(0,d.jsxs)(u,{className:"flex min-h-[340px] flex-col items-center justify-center text-center",children:[(0,d.jsx)("span",{className:"material-symbols-outlined rounded-3xl bg-primary/10 p-5 text-5xl text-primary",children:"analytics"}),(0,d.jsx)("h2",{className:"mt-5 text-2xl font-black text-text-main",children:"Chưa c\xf3 Local AI Report"}),(0,d.jsx)("p",{className:"mt-2 max-w-xl text-sm leading-6 text-text-muted",children:"Chọn AI model v\xe0 tạo b\xe1o c\xe1o. Hệ thống chỉ lấy traffic từ Provider Node c\xf3 runtime vLLM; dữ liệu cloud kh\xf4ng được trộn v\xe0o KPI local."})]})]}):null}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{"use strict";a.exports=require("better-sqlite3")},91633:(a,b,c)=>{Promise.resolve().then(c.bind(c,32746))},91645:a=>{"use strict";a.exports=require("net")},94735:a=>{"use strict";a.exports=require("events")}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[4741,319,1361,2817,402,5681,4404,6064,6328,1340],()=>b(b.s=30721));module.exports=c})();