agent-insight 0.5.2 → 0.5.3

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 (832) hide show
  1. package/.env.example +6 -0
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/app-path-routes-manifest.json +9 -0
  4. package/.next/standalone/.next/build-manifest.json +2 -2
  5. package/.next/standalone/.next/prerender-manifest.json +51 -3
  6. package/.next/standalone/.next/routes-manifest.json +60 -0
  7. package/.next/standalone/.next/server/app/(main)/accessconfig/channels/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(main)/accessconfig/health/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(main)/accessconfig/install/page.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/(main)/accessconfig/install/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(main)/accessconfig/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(main)/accessconfig/webhooks/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(main)/agents/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/(main)/agents/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(main)/dashboard/page.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/(main)/dashboard/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(main)/dataset/[id]/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(main)/dataset/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(main)/eval/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/(main)/eval/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(main)/eval/run/[runId]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(main)/eval/trajectory/[taskId]/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/(main)/eval/trajectory/[taskId]/trace/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/(main)/eval/trajectory/[taskId]/trace/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/(main)/eval/trajectory/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/(main)/evaluation/[id]/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/(main)/fault/page.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/(main)/fault/page_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/(main)/infra/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/(main)/infra/source/[id]/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(main)/infra/sources/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/(main)/memory/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/(main)/metrics/evaluators/[id]/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/(main)/metrics/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/(main)/modelconfig/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/(main)/modelconfig/registry/page.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/(main)/modelconfig/registry/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/(main)/modelconfig/web-search/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/(main)/modelconfig/web-search/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/(main)/optapi/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/(main)/quality/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/(main)/quality/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/(main)/security/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/(main)/skill-eval/grayscale/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/(main)/skill-eval/grayscale/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/(main)/skill-eval/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/(main)/skill-eval/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/(main)/skill-eval/trigger/[skillName]/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/(main)/skill-generator/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/(main)/skill-history/page.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/(main)/skill-history/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/(main)/skill-opt/[name]/[version]/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/(main)/skill-opt/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/(main)/skill-release/page_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/(main)/skills/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/(main)/skills/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/(main)/trace/page.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/(main)/trace/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/(main)/version-analysis/page/app-paths-manifest.json +3 -0
  60. package/.next/standalone/.next/server/app/(main)/version-analysis/page/build-manifest.json +17 -0
  61. package/.next/standalone/.next/server/app/(main)/version-analysis/page/next-font-manifest.json +6 -0
  62. package/.next/standalone/.next/server/app/(main)/version-analysis/page/react-loadable-manifest.json +1 -0
  63. package/.next/standalone/.next/server/app/(main)/version-analysis/page/server-reference-manifest.json +4 -0
  64. package/.next/standalone/.next/server/app/(main)/version-analysis/page.js +17 -0
  65. package/.next/standalone/.next/server/app/(main)/version-analysis/page.js.map +5 -0
  66. package/.next/standalone/.next/server/app/(main)/version-analysis/page.js.nft.json +1 -0
  67. package/.next/standalone/.next/server/app/(main)/version-analysis/page_client-reference-manifest.js +2 -0
  68. package/.next/standalone/.next/server/app/(main)/version-management/page/app-paths-manifest.json +3 -0
  69. package/.next/standalone/.next/server/app/(main)/version-management/page/build-manifest.json +17 -0
  70. package/.next/standalone/.next/server/app/(main)/version-management/page/next-font-manifest.json +6 -0
  71. package/.next/standalone/.next/server/app/(main)/version-management/page/react-loadable-manifest.json +1 -0
  72. package/.next/standalone/.next/server/app/(main)/version-management/page/server-reference-manifest.json +4 -0
  73. package/.next/standalone/.next/server/app/(main)/version-management/page.js +17 -0
  74. package/.next/standalone/.next/server/app/(main)/version-management/page.js.map +5 -0
  75. package/.next/standalone/.next/server/app/(main)/version-management/page.js.nft.json +1 -0
  76. package/.next/standalone/.next/server/app/(main)/version-management/page_client-reference-manifest.js +2 -0
  77. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  78. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  79. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  80. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  81. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  82. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  83. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  84. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  86. package/.next/standalone/.next/server/app/_not-found.rsc +3 -3
  87. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  88. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  89. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  90. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  91. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  92. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  93. package/.next/standalone/.next/server/app/accessconfig/channels.html +1 -1
  94. package/.next/standalone/.next/server/app/accessconfig/channels.rsc +5 -5
  95. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels/__PAGE__.segment.rsc +2 -2
  96. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels.segment.rsc +1 -1
  97. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  98. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p.segment.rsc +2 -2
  99. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_full.segment.rsc +5 -5
  100. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_head.segment.rsc +1 -1
  101. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_index.segment.rsc +3 -3
  102. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_tree.segment.rsc +2 -2
  103. package/.next/standalone/.next/server/app/accessconfig/health.html +1 -1
  104. package/.next/standalone/.next/server/app/accessconfig/health.rsc +5 -5
  105. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health/__PAGE__.segment.rsc +2 -2
  106. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health.segment.rsc +1 -1
  107. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  108. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p.segment.rsc +2 -2
  109. package/.next/standalone/.next/server/app/accessconfig/health.segments/_full.segment.rsc +5 -5
  110. package/.next/standalone/.next/server/app/accessconfig/health.segments/_head.segment.rsc +1 -1
  111. package/.next/standalone/.next/server/app/accessconfig/health.segments/_index.segment.rsc +3 -3
  112. package/.next/standalone/.next/server/app/accessconfig/health.segments/_tree.segment.rsc +2 -2
  113. package/.next/standalone/.next/server/app/accessconfig/install.html +2 -2
  114. package/.next/standalone/.next/server/app/accessconfig/install.rsc +5 -5
  115. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install/__PAGE__.segment.rsc +2 -2
  116. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install.segment.rsc +1 -1
  117. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  118. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p.segment.rsc +2 -2
  119. package/.next/standalone/.next/server/app/accessconfig/install.segments/_full.segment.rsc +5 -5
  120. package/.next/standalone/.next/server/app/accessconfig/install.segments/_head.segment.rsc +1 -1
  121. package/.next/standalone/.next/server/app/accessconfig/install.segments/_index.segment.rsc +3 -3
  122. package/.next/standalone/.next/server/app/accessconfig/install.segments/_tree.segment.rsc +2 -2
  123. package/.next/standalone/.next/server/app/accessconfig/webhooks.html +1 -1
  124. package/.next/standalone/.next/server/app/accessconfig/webhooks.rsc +5 -5
  125. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks/__PAGE__.segment.rsc +2 -2
  126. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks.segment.rsc +1 -1
  127. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  128. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p.segment.rsc +2 -2
  129. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_full.segment.rsc +5 -5
  130. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_head.segment.rsc +1 -1
  131. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_index.segment.rsc +3 -3
  132. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_tree.segment.rsc +2 -2
  133. package/.next/standalone/.next/server/app/accessconfig.html +1 -1
  134. package/.next/standalone/.next/server/app/accessconfig.rsc +4 -4
  135. package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p/accessconfig/__PAGE__.segment.rsc +1 -1
  136. package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  137. package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p.segment.rsc +2 -2
  138. package/.next/standalone/.next/server/app/accessconfig.segments/_full.segment.rsc +4 -4
  139. package/.next/standalone/.next/server/app/accessconfig.segments/_head.segment.rsc +1 -1
  140. package/.next/standalone/.next/server/app/accessconfig.segments/_index.segment.rsc +3 -3
  141. package/.next/standalone/.next/server/app/accessconfig.segments/_tree.segment.rsc +2 -2
  142. package/.next/standalone/.next/server/app/agents.html +1 -1
  143. package/.next/standalone/.next/server/app/agents.rsc +5 -5
  144. package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +2 -2
  145. package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
  146. package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +2 -2
  147. package/.next/standalone/.next/server/app/agents.segments/_full.segment.rsc +5 -5
  148. package/.next/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  149. package/.next/standalone/.next/server/app/agents.segments/_index.segment.rsc +3 -3
  150. package/.next/standalone/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  151. package/.next/standalone/.next/server/app/api/agent/run/route.js.nft.json +1 -1
  152. package/.next/standalone/.next/server/app/api/agent/stream/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/agent-datasets/[id]/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/agent-datasets/route.js.nft.json +1 -1
  155. package/.next/standalone/.next/server/app/api/agents/[id]/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/agents/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/auth/apikey/route.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/api/auth/organization/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/dashboard/stats/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/debug/batch-tasks/[taskId]/route.js.nft.json +1 -1
  161. package/.next/standalone/.next/server/app/api/debug/batch-tasks/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/debug/execute/[jobId]/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/debug/execute/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/debug/grayscale-tasks/[taskId]/route.js +10 -10
  165. package/.next/standalone/.next/server/app/api/debug/grayscale-tasks/[taskId]/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/debug/grayscale-tasks/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/debug/history/[id]/route.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/app/api/debug/history/route.js.nft.json +1 -1
  169. package/.next/standalone/.next/server/app/api/eval/config/backfill-routing/route.js +6 -6
  170. package/.next/standalone/.next/server/app/api/eval/config/backfill-routing/route.js.nft.json +1 -1
  171. package/.next/standalone/.next/server/app/api/eval/config/create/route.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/app/api/eval/config/reparse/route.js.nft.json +1 -1
  173. package/.next/standalone/.next/server/app/api/eval/config/route.js +6 -6
  174. package/.next/standalone/.next/server/app/api/eval/config/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/eval/config/status/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/eval/evaluation/route.js.nft.json +1 -1
  177. package/.next/standalone/.next/server/app/api/eval/rejudge/route.js +6 -6
  178. package/.next/standalone/.next/server/app/api/eval/rejudge/route.js.nft.json +1 -1
  179. package/.next/standalone/.next/server/app/api/eval/settings/route.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/app/api/eval/settings/test/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/api/eval/terminate-all/route.js.nft.json +1 -1
  182. package/.next/standalone/.next/server/app/api/eval/trajectory/results/[id]/route.js.nft.json +1 -1
  183. package/.next/standalone/.next/server/app/api/eval/trajectory/results/route.js +5 -5
  184. package/.next/standalone/.next/server/app/api/eval/trajectory/results/route.js.nft.json +1 -1
  185. package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js +13 -13
  186. package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js.nft.json +1 -1
  187. package/.next/standalone/.next/server/app/api/eval/trajectory/runs/route.js.nft.json +1 -1
  188. package/.next/standalone/.next/server/app/api/evaluation/[id]/route.js.nft.json +1 -1
  189. package/.next/standalone/.next/server/app/api/evaluation/cancel/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/fault/diagnosis/session/route.js.nft.json +1 -1
  191. package/.next/standalone/.next/server/app/api/fault/diagnosis/stream/route.js.nft.json +1 -1
  192. package/.next/standalone/.next/server/app/api/fleet/agent/route/app-paths-manifest.json +3 -0
  193. package/.next/standalone/.next/server/app/api/fleet/agent/route/build-manifest.json +11 -0
  194. package/.next/standalone/.next/server/app/api/fleet/agent/route/server-reference-manifest.json +4 -0
  195. package/.next/standalone/.next/server/app/api/fleet/agent/route.js +8 -0
  196. package/.next/standalone/.next/server/app/api/fleet/agent/route.js.map +5 -0
  197. package/.next/standalone/.next/server/app/api/fleet/agent/route.js.nft.json +1 -0
  198. package/.next/standalone/.next/server/app/api/fleet/agent/route_client-reference-manifest.js +2 -0
  199. package/.next/standalone/.next/server/app/api/fleet/breakdowns/route.js +1 -1
  200. package/.next/standalone/.next/server/app/api/fleet/breakdowns/route.js.nft.json +1 -1
  201. package/.next/standalone/.next/server/app/api/fleet/trends/route.js +2 -2
  202. package/.next/standalone/.next/server/app/api/fleet/trends/route.js.nft.json +1 -1
  203. package/.next/standalone/.next/server/app/api/guide/route.js.nft.json +1 -1
  204. package/.next/standalone/.next/server/app/api/ingest/opencode/session-complete/route.js +3 -3
  205. package/.next/standalone/.next/server/app/api/ingest/opencode/session-complete/route.js.nft.json +1 -1
  206. package/.next/standalone/.next/server/app/api/ingest/otel/v1/logs/route.js.nft.json +1 -1
  207. package/.next/standalone/.next/server/app/api/ingest/otel/v1/metrics/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/ingest/otel/v1/traces/route.js +5 -5
  209. package/.next/standalone/.next/server/app/api/ingest/otel/v1/traces/route.js.nft.json +1 -1
  210. package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/[...path]/route.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/end/route.js +9 -9
  212. package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/end/route.js.nft.json +1 -1
  213. package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/start/route.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/api/ingest/sync/manifest/route.js.nft.json +1 -1
  215. package/.next/standalone/.next/server/app/api/ingest/sync/opencode/route.js.nft.json +1 -1
  216. package/.next/standalone/.next/server/app/api/ingest/upload/route.js +8 -8
  217. package/.next/standalone/.next/server/app/api/ingest/upload/route.js.nft.json +1 -1
  218. package/.next/standalone/.next/server/app/api/modelconfig/pricing/route/app-paths-manifest.json +3 -0
  219. package/.next/standalone/.next/server/app/api/modelconfig/pricing/route/build-manifest.json +11 -0
  220. package/.next/standalone/.next/server/app/api/modelconfig/pricing/route/server-reference-manifest.json +4 -0
  221. package/.next/standalone/.next/server/app/api/modelconfig/pricing/route.js +8 -0
  222. package/.next/standalone/.next/server/app/api/modelconfig/pricing/route.js.map +5 -0
  223. package/.next/standalone/.next/server/app/api/modelconfig/pricing/route.js.nft.json +1 -0
  224. package/.next/standalone/.next/server/app/api/modelconfig/pricing/route_client-reference-manifest.js +2 -0
  225. package/.next/standalone/.next/server/app/api/observe/data/route.js +3 -3
  226. package/.next/standalone/.next/server/app/api/observe/data/route.js.nft.json +1 -1
  227. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/agent-debug/route.js.nft.json +1 -1
  228. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/agent-debug/skills-analysis/route.js +13 -13
  229. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/agent-debug/skills-analysis/route.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/analyze-match/route.js.nft.json +1 -1
  231. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/infra/route.js.nft.json +1 -1
  232. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route/app-paths-manifest.json +3 -0
  233. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route/build-manifest.json +11 -0
  234. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route/server-reference-manifest.json +4 -0
  235. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route.js +8 -0
  236. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route.js.map +5 -0
  237. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route.js.nft.json +1 -0
  238. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route_client-reference-manifest.js +2 -0
  239. package/.next/standalone/.next/server/app/api/observe/infra/history/route.js.nft.json +1 -1
  240. package/.next/standalone/.next/server/app/api/observe/infra/poll/route.js.nft.json +1 -1
  241. package/.next/standalone/.next/server/app/api/observe/infra/sources/derive/route.js.nft.json +1 -1
  242. package/.next/standalone/.next/server/app/api/observe/infra/sources/overview/route.js.nft.json +1 -1
  243. package/.next/standalone/.next/server/app/api/observe/infra/sources/route.js.nft.json +1 -1
  244. package/.next/standalone/.next/server/app/api/observe/infra/sources/sessions/route.js.nft.json +1 -1
  245. package/.next/standalone/.next/server/app/api/observe/infra/sources/test/route.js.nft.json +1 -1
  246. package/.next/standalone/.next/server/app/api/observe/session/route.js.nft.json +1 -1
  247. package/.next/standalone/.next/server/app/api/observe/task-stats/route.js +3 -3
  248. package/.next/standalone/.next/server/app/api/observe/task-stats/route.js.nft.json +1 -1
  249. package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route/app-paths-manifest.json +3 -0
  250. package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route/build-manifest.json +11 -0
  251. package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route/server-reference-manifest.json +4 -0
  252. package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route.js +8 -0
  253. package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route.js.map +5 -0
  254. package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route.js.nft.json +1 -0
  255. package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route_client-reference-manifest.js +2 -0
  256. package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route/app-paths-manifest.json +3 -0
  257. package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route/build-manifest.json +11 -0
  258. package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route/server-reference-manifest.json +4 -0
  259. package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route.js +8 -0
  260. package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route.js.map +5 -0
  261. package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route.js.nft.json +1 -0
  262. package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route_client-reference-manifest.js +2 -0
  263. package/.next/standalone/.next/server/app/api/public/otel/v1/traces/route.js +5 -5
  264. package/.next/standalone/.next/server/app/api/public/otel/v1/traces/route.js.nft.json +1 -1
  265. package/.next/standalone/.next/server/app/api/quality/agents/route.js +7 -7
  266. package/.next/standalone/.next/server/app/api/quality/agents/route.js.nft.json +1 -1
  267. package/.next/standalone/.next/server/app/api/quality/backfill/route.js.nft.json +1 -1
  268. package/.next/standalone/.next/server/app/api/quality/executions/route.js +7 -7
  269. package/.next/standalone/.next/server/app/api/quality/executions/route.js.nft.json +1 -1
  270. package/.next/standalone/.next/server/app/api/quality/report/route.js.nft.json +1 -1
  271. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/draft/route.js.nft.json +1 -1
  272. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/route.js.nft.json +1 -1
  273. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/run/[runId]/cancel/route.js.nft.json +1 -1
  274. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/run/route.js.nft.json +1 -1
  275. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/runs/route.js.nft.json +1 -1
  276. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/upload/route.js.nft.json +1 -1
  277. package/.next/standalone/.next/server/app/api/skill-generator/attachments/route.js.nft.json +1 -1
  278. package/.next/standalone/.next/server/app/api/skill-generator/chat/route.js.nft.json +1 -1
  279. package/.next/standalone/.next/server/app/api/skill-generator/download/[sessionId]/route.js.nft.json +1 -1
  280. package/.next/standalone/.next/server/app/api/skill-generator/files/content/route.js.nft.json +1 -1
  281. package/.next/standalone/.next/server/app/api/skill-generator/files/download/route.js.nft.json +1 -1
  282. package/.next/standalone/.next/server/app/api/skill-generator/files/info/route.js.nft.json +1 -1
  283. package/.next/standalone/.next/server/app/api/skill-generator/files/list/route.js.nft.json +1 -1
  284. package/.next/standalone/.next/server/app/api/skill-generator/sessions/[id]/route.js.nft.json +1 -1
  285. package/.next/standalone/.next/server/app/api/skill-generator/sessions/route.js.nft.json +1 -1
  286. package/.next/standalone/.next/server/app/api/skill-opt/chat/route.js.nft.json +1 -1
  287. package/.next/standalone/.next/server/app/api/skill-opt/plan/items/[id]/route.js.nft.json +1 -1
  288. package/.next/standalone/.next/server/app/api/skill-opt/plan/route.js.nft.json +1 -1
  289. package/.next/standalone/.next/server/app/api/skill-opt/sessions/[id]/iterations/[draftNumber]/apply/route.js.nft.json +1 -1
  290. package/.next/standalone/.next/server/app/api/skill-opt/sessions/[id]/iterations/route.js.nft.json +1 -1
  291. package/.next/standalone/.next/server/app/api/skill-opt/sessions/[id]/route.js.nft.json +1 -1
  292. package/.next/standalone/.next/server/app/api/skill-opt/sessions/route.js.nft.json +1 -1
  293. package/.next/standalone/.next/server/app/api/skills/[id]/activate/route.js.nft.json +1 -1
  294. package/.next/standalone/.next/server/app/api/skills/[id]/benchmark-generate/route.js +7 -7
  295. package/.next/standalone/.next/server/app/api/skills/[id]/benchmark-generate/route.js.nft.json +1 -1
  296. package/.next/standalone/.next/server/app/api/skills/[id]/runs/route.js +2 -2
  297. package/.next/standalone/.next/server/app/api/skills/[id]/runs/route.js.nft.json +1 -1
  298. package/.next/standalone/.next/server/app/api/skills/[id]/toggle/route.js.nft.json +1 -1
  299. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/download/route.js.nft.json +1 -1
  300. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/evaluate/route.js.nft.json +1 -1
  301. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/evaluation-summary/route.js.nft.json +1 -1
  302. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/files/[...path]/route.js.nft.json +1 -1
  303. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/parse-flow/route.js.nft.json +1 -1
  304. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/route.js.nft.json +1 -1
  305. package/.next/standalone/.next/server/app/api/skills/[id]/versions/route.js.nft.json +1 -1
  306. package/.next/standalone/.next/server/app/api/skills/automation/import/route.js.nft.json +1 -1
  307. package/.next/standalone/.next/server/app/api/skills/automation/push/route.js.nft.json +1 -1
  308. package/.next/standalone/.next/server/app/api/skills/by-name/[name]/analysis-diagnosis/route.js.nft.json +1 -1
  309. package/.next/standalone/.next/server/app/api/skills/by-name/[name]/optimization-points/resolve/route.js.nft.json +1 -1
  310. package/.next/standalone/.next/server/app/api/skills/by-name/[name]/optimization-points/route.js.nft.json +1 -1
  311. package/.next/standalone/.next/server/app/api/skills/by-name/route.js.nft.json +1 -1
  312. package/.next/standalone/.next/server/app/api/skills/logs/route.js +6 -6
  313. package/.next/standalone/.next/server/app/api/skills/logs/route.js.nft.json +1 -1
  314. package/.next/standalone/.next/server/app/api/skills/publish/route.js.nft.json +1 -1
  315. package/.next/standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
  316. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route.js.nft.json +1 -1
  317. package/.next/standalone/.next/server/app/api/skills/upload/route.js.nft.json +1 -1
  318. package/.next/standalone/.next/server/app/api/tags/[id]/route/app-paths-manifest.json +3 -0
  319. package/.next/standalone/.next/server/app/api/tags/[id]/route/build-manifest.json +11 -0
  320. package/.next/standalone/.next/server/app/api/tags/[id]/route/server-reference-manifest.json +4 -0
  321. package/.next/standalone/.next/server/app/api/tags/[id]/route.js +8 -0
  322. package/.next/standalone/.next/server/app/api/tags/[id]/route.js.map +5 -0
  323. package/.next/standalone/.next/server/app/api/tags/[id]/route.js.nft.json +1 -0
  324. package/.next/standalone/.next/server/app/api/tags/[id]/route_client-reference-manifest.js +2 -0
  325. package/.next/standalone/.next/server/app/api/tags/route/app-paths-manifest.json +3 -0
  326. package/.next/standalone/.next/server/app/api/tags/route/build-manifest.json +11 -0
  327. package/.next/standalone/.next/server/app/api/tags/route/server-reference-manifest.json +4 -0
  328. package/.next/standalone/.next/server/app/api/tags/route.js +8 -0
  329. package/.next/standalone/.next/server/app/api/tags/route.js.map +5 -0
  330. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -0
  331. package/.next/standalone/.next/server/app/api/tags/route_client-reference-manifest.js +2 -0
  332. package/.next/standalone/.next/server/app/api/user-evaluators/route.js.nft.json +1 -1
  333. package/.next/standalone/.next/server/app/dashboard.html +1 -1
  334. package/.next/standalone/.next/server/app/dashboard.rsc +5 -5
  335. package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p/dashboard/__PAGE__.segment.rsc +2 -2
  336. package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p/dashboard.segment.rsc +1 -1
  337. package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p.segment.rsc +2 -2
  338. package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +5 -5
  339. package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  340. package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +3 -3
  341. package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  342. package/.next/standalone/.next/server/app/dataset.html +1 -1
  343. package/.next/standalone/.next/server/app/dataset.rsc +5 -5
  344. package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset/__PAGE__.segment.rsc +2 -2
  345. package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset.segment.rsc +1 -1
  346. package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p.segment.rsc +2 -2
  347. package/.next/standalone/.next/server/app/dataset.segments/_full.segment.rsc +5 -5
  348. package/.next/standalone/.next/server/app/dataset.segments/_head.segment.rsc +1 -1
  349. package/.next/standalone/.next/server/app/dataset.segments/_index.segment.rsc +3 -3
  350. package/.next/standalone/.next/server/app/dataset.segments/_tree.segment.rsc +2 -2
  351. package/.next/standalone/.next/server/app/eval/trajectory.html +1 -1
  352. package/.next/standalone/.next/server/app/eval/trajectory.rsc +5 -5
  353. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory/__PAGE__.segment.rsc +2 -2
  354. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory.segment.rsc +1 -1
  355. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval.segment.rsc +1 -1
  356. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p.segment.rsc +2 -2
  357. package/.next/standalone/.next/server/app/eval/trajectory.segments/_full.segment.rsc +5 -5
  358. package/.next/standalone/.next/server/app/eval/trajectory.segments/_head.segment.rsc +1 -1
  359. package/.next/standalone/.next/server/app/eval/trajectory.segments/_index.segment.rsc +3 -3
  360. package/.next/standalone/.next/server/app/eval/trajectory.segments/_tree.segment.rsc +2 -2
  361. package/.next/standalone/.next/server/app/eval.html +1 -1
  362. package/.next/standalone/.next/server/app/eval.rsc +5 -5
  363. package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval/__PAGE__.segment.rsc +2 -2
  364. package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval.segment.rsc +1 -1
  365. package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p.segment.rsc +2 -2
  366. package/.next/standalone/.next/server/app/eval.segments/_full.segment.rsc +5 -5
  367. package/.next/standalone/.next/server/app/eval.segments/_head.segment.rsc +1 -1
  368. package/.next/standalone/.next/server/app/eval.segments/_index.segment.rsc +3 -3
  369. package/.next/standalone/.next/server/app/eval.segments/_tree.segment.rsc +2 -2
  370. package/.next/standalone/.next/server/app/fault.html +1 -1
  371. package/.next/standalone/.next/server/app/fault.rsc +5 -5
  372. package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault/__PAGE__.segment.rsc +2 -2
  373. package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault.segment.rsc +1 -1
  374. package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p.segment.rsc +2 -2
  375. package/.next/standalone/.next/server/app/fault.segments/_full.segment.rsc +5 -5
  376. package/.next/standalone/.next/server/app/fault.segments/_head.segment.rsc +1 -1
  377. package/.next/standalone/.next/server/app/fault.segments/_index.segment.rsc +3 -3
  378. package/.next/standalone/.next/server/app/fault.segments/_tree.segment.rsc +2 -2
  379. package/.next/standalone/.next/server/app/index.html +1 -1
  380. package/.next/standalone/.next/server/app/index.rsc +3 -3
  381. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  382. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  383. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  384. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  385. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  386. package/.next/standalone/.next/server/app/infra/sources.html +1 -1
  387. package/.next/standalone/.next/server/app/infra/sources.rsc +5 -5
  388. package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p/infra/sources/__PAGE__.segment.rsc +2 -2
  389. package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p/infra/sources.segment.rsc +1 -1
  390. package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p/infra.segment.rsc +1 -1
  391. package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p.segment.rsc +2 -2
  392. package/.next/standalone/.next/server/app/infra/sources.segments/_full.segment.rsc +5 -5
  393. package/.next/standalone/.next/server/app/infra/sources.segments/_head.segment.rsc +1 -1
  394. package/.next/standalone/.next/server/app/infra/sources.segments/_index.segment.rsc +3 -3
  395. package/.next/standalone/.next/server/app/infra/sources.segments/_tree.segment.rsc +2 -2
  396. package/.next/standalone/.next/server/app/infra.html +1 -1
  397. package/.next/standalone/.next/server/app/infra.rsc +5 -5
  398. package/.next/standalone/.next/server/app/infra.segments/!KG1haW4p/infra/__PAGE__.segment.rsc +2 -2
  399. package/.next/standalone/.next/server/app/infra.segments/!KG1haW4p/infra.segment.rsc +1 -1
  400. package/.next/standalone/.next/server/app/infra.segments/!KG1haW4p.segment.rsc +2 -2
  401. package/.next/standalone/.next/server/app/infra.segments/_full.segment.rsc +5 -5
  402. package/.next/standalone/.next/server/app/infra.segments/_head.segment.rsc +1 -1
  403. package/.next/standalone/.next/server/app/infra.segments/_index.segment.rsc +3 -3
  404. package/.next/standalone/.next/server/app/infra.segments/_tree.segment.rsc +2 -2
  405. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  406. package/.next/standalone/.next/server/app/login.html +1 -1
  407. package/.next/standalone/.next/server/app/login.rsc +4 -4
  408. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +4 -4
  409. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  410. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +3 -3
  411. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  412. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  413. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  414. package/.next/standalone/.next/server/app/memory.html +1 -1
  415. package/.next/standalone/.next/server/app/memory.rsc +5 -5
  416. package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory/__PAGE__.segment.rsc +2 -2
  417. package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory.segment.rsc +1 -1
  418. package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p.segment.rsc +2 -2
  419. package/.next/standalone/.next/server/app/memory.segments/_full.segment.rsc +5 -5
  420. package/.next/standalone/.next/server/app/memory.segments/_head.segment.rsc +1 -1
  421. package/.next/standalone/.next/server/app/memory.segments/_index.segment.rsc +3 -3
  422. package/.next/standalone/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
  423. package/.next/standalone/.next/server/app/metrics.html +1 -1
  424. package/.next/standalone/.next/server/app/metrics.rsc +5 -5
  425. package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics/__PAGE__.segment.rsc +2 -2
  426. package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics.segment.rsc +1 -1
  427. package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p.segment.rsc +2 -2
  428. package/.next/standalone/.next/server/app/metrics.segments/_full.segment.rsc +5 -5
  429. package/.next/standalone/.next/server/app/metrics.segments/_head.segment.rsc +1 -1
  430. package/.next/standalone/.next/server/app/metrics.segments/_index.segment.rsc +3 -3
  431. package/.next/standalone/.next/server/app/metrics.segments/_tree.segment.rsc +2 -2
  432. package/.next/standalone/.next/server/app/modelconfig/registry.html +1 -1
  433. package/.next/standalone/.next/server/app/modelconfig/registry.rsc +5 -5
  434. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry/__PAGE__.segment.rsc +2 -2
  435. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry.segment.rsc +1 -1
  436. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
  437. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p.segment.rsc +2 -2
  438. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_full.segment.rsc +5 -5
  439. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_head.segment.rsc +1 -1
  440. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_index.segment.rsc +3 -3
  441. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_tree.segment.rsc +2 -2
  442. package/.next/standalone/.next/server/app/modelconfig/web-search.html +1 -1
  443. package/.next/standalone/.next/server/app/modelconfig/web-search.rsc +5 -5
  444. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search/__PAGE__.segment.rsc +2 -2
  445. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search.segment.rsc +1 -1
  446. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
  447. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p.segment.rsc +2 -2
  448. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_full.segment.rsc +5 -5
  449. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_head.segment.rsc +1 -1
  450. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_index.segment.rsc +3 -3
  451. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_tree.segment.rsc +2 -2
  452. package/.next/standalone/.next/server/app/modelconfig.html +1 -1
  453. package/.next/standalone/.next/server/app/modelconfig.rsc +4 -4
  454. package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p/modelconfig/__PAGE__.segment.rsc +1 -1
  455. package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
  456. package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p.segment.rsc +2 -2
  457. package/.next/standalone/.next/server/app/modelconfig.segments/_full.segment.rsc +4 -4
  458. package/.next/standalone/.next/server/app/modelconfig.segments/_head.segment.rsc +1 -1
  459. package/.next/standalone/.next/server/app/modelconfig.segments/_index.segment.rsc +3 -3
  460. package/.next/standalone/.next/server/app/modelconfig.segments/_tree.segment.rsc +2 -2
  461. package/.next/standalone/.next/server/app/optapi.html +1 -1
  462. package/.next/standalone/.next/server/app/optapi.rsc +5 -5
  463. package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi/__PAGE__.segment.rsc +2 -2
  464. package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi.segment.rsc +1 -1
  465. package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p.segment.rsc +2 -2
  466. package/.next/standalone/.next/server/app/optapi.segments/_full.segment.rsc +5 -5
  467. package/.next/standalone/.next/server/app/optapi.segments/_head.segment.rsc +1 -1
  468. package/.next/standalone/.next/server/app/optapi.segments/_index.segment.rsc +3 -3
  469. package/.next/standalone/.next/server/app/optapi.segments/_tree.segment.rsc +2 -2
  470. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  471. package/.next/standalone/.next/server/app/quality.html +1 -1
  472. package/.next/standalone/.next/server/app/quality.rsc +5 -5
  473. package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p/quality/__PAGE__.segment.rsc +2 -2
  474. package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p/quality.segment.rsc +1 -1
  475. package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p.segment.rsc +2 -2
  476. package/.next/standalone/.next/server/app/quality.segments/_full.segment.rsc +5 -5
  477. package/.next/standalone/.next/server/app/quality.segments/_head.segment.rsc +1 -1
  478. package/.next/standalone/.next/server/app/quality.segments/_index.segment.rsc +3 -3
  479. package/.next/standalone/.next/server/app/quality.segments/_tree.segment.rsc +2 -2
  480. package/.next/standalone/.next/server/app/security.html +1 -1
  481. package/.next/standalone/.next/server/app/security.rsc +5 -5
  482. package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security/__PAGE__.segment.rsc +2 -2
  483. package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security.segment.rsc +1 -1
  484. package/.next/standalone/.next/server/app/security.segments/!KG1haW4p.segment.rsc +2 -2
  485. package/.next/standalone/.next/server/app/security.segments/_full.segment.rsc +5 -5
  486. package/.next/standalone/.next/server/app/security.segments/_head.segment.rsc +1 -1
  487. package/.next/standalone/.next/server/app/security.segments/_index.segment.rsc +3 -3
  488. package/.next/standalone/.next/server/app/security.segments/_tree.segment.rsc +2 -2
  489. package/.next/standalone/.next/server/app/skill-detail/page_client-reference-manifest.js +1 -1
  490. package/.next/standalone/.next/server/app/skill-detail.html +1 -1
  491. package/.next/standalone/.next/server/app/skill-detail.rsc +4 -4
  492. package/.next/standalone/.next/server/app/skill-detail.segments/_full.segment.rsc +4 -4
  493. package/.next/standalone/.next/server/app/skill-detail.segments/_head.segment.rsc +1 -1
  494. package/.next/standalone/.next/server/app/skill-detail.segments/_index.segment.rsc +3 -3
  495. package/.next/standalone/.next/server/app/skill-detail.segments/_tree.segment.rsc +2 -2
  496. package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail/__PAGE__.segment.rsc +2 -2
  497. package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail.segment.rsc +1 -1
  498. package/.next/standalone/.next/server/app/skill-eval/grayscale.html +2 -2
  499. package/.next/standalone/.next/server/app/skill-eval/grayscale.rsc +6 -6
  500. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale/__PAGE__.segment.rsc +2 -2
  501. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale.segment.rsc +1 -1
  502. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval.segment.rsc +1 -1
  503. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p.segment.rsc +2 -2
  504. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_full.segment.rsc +6 -6
  505. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_head.segment.rsc +1 -1
  506. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_index.segment.rsc +3 -3
  507. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_tree.segment.rsc +2 -2
  508. package/.next/standalone/.next/server/app/skill-eval.html +1 -1
  509. package/.next/standalone/.next/server/app/skill-eval.rsc +6 -6
  510. package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval/__PAGE__.segment.rsc +2 -2
  511. package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval.segment.rsc +1 -1
  512. package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p.segment.rsc +2 -2
  513. package/.next/standalone/.next/server/app/skill-eval.segments/_full.segment.rsc +6 -6
  514. package/.next/standalone/.next/server/app/skill-eval.segments/_head.segment.rsc +1 -1
  515. package/.next/standalone/.next/server/app/skill-eval.segments/_index.segment.rsc +3 -3
  516. package/.next/standalone/.next/server/app/skill-eval.segments/_tree.segment.rsc +2 -2
  517. package/.next/standalone/.next/server/app/skill-generator.html +1 -1
  518. package/.next/standalone/.next/server/app/skill-generator.rsc +5 -5
  519. package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator/__PAGE__.segment.rsc +2 -2
  520. package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator.segment.rsc +1 -1
  521. package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p.segment.rsc +2 -2
  522. package/.next/standalone/.next/server/app/skill-generator.segments/_full.segment.rsc +5 -5
  523. package/.next/standalone/.next/server/app/skill-generator.segments/_head.segment.rsc +1 -1
  524. package/.next/standalone/.next/server/app/skill-generator.segments/_index.segment.rsc +3 -3
  525. package/.next/standalone/.next/server/app/skill-generator.segments/_tree.segment.rsc +2 -2
  526. package/.next/standalone/.next/server/app/skill-history.html +1 -1
  527. package/.next/standalone/.next/server/app/skill-history.rsc +6 -6
  528. package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p/skill-history/__PAGE__.segment.rsc +2 -2
  529. package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p/skill-history.segment.rsc +1 -1
  530. package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p.segment.rsc +2 -2
  531. package/.next/standalone/.next/server/app/skill-history.segments/_full.segment.rsc +6 -6
  532. package/.next/standalone/.next/server/app/skill-history.segments/_head.segment.rsc +1 -1
  533. package/.next/standalone/.next/server/app/skill-history.segments/_index.segment.rsc +3 -3
  534. package/.next/standalone/.next/server/app/skill-history.segments/_tree.segment.rsc +2 -2
  535. package/.next/standalone/.next/server/app/skill-opt.html +1 -1
  536. package/.next/standalone/.next/server/app/skill-opt.rsc +5 -5
  537. package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt/__PAGE__.segment.rsc +2 -2
  538. package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt.segment.rsc +1 -1
  539. package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p.segment.rsc +2 -2
  540. package/.next/standalone/.next/server/app/skill-opt.segments/_full.segment.rsc +5 -5
  541. package/.next/standalone/.next/server/app/skill-opt.segments/_head.segment.rsc +1 -1
  542. package/.next/standalone/.next/server/app/skill-opt.segments/_index.segment.rsc +3 -3
  543. package/.next/standalone/.next/server/app/skill-opt.segments/_tree.segment.rsc +2 -2
  544. package/.next/standalone/.next/server/app/skill-release.html +1 -1
  545. package/.next/standalone/.next/server/app/skill-release.rsc +5 -5
  546. package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release/__PAGE__.segment.rsc +2 -2
  547. package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release.segment.rsc +1 -1
  548. package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p.segment.rsc +2 -2
  549. package/.next/standalone/.next/server/app/skill-release.segments/_full.segment.rsc +5 -5
  550. package/.next/standalone/.next/server/app/skill-release.segments/_head.segment.rsc +1 -1
  551. package/.next/standalone/.next/server/app/skill-release.segments/_index.segment.rsc +3 -3
  552. package/.next/standalone/.next/server/app/skill-release.segments/_tree.segment.rsc +2 -2
  553. package/.next/standalone/.next/server/app/skills.html +1 -1
  554. package/.next/standalone/.next/server/app/skills.rsc +5 -5
  555. package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p/skills/__PAGE__.segment.rsc +2 -2
  556. package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p/skills.segment.rsc +1 -1
  557. package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p.segment.rsc +2 -2
  558. package/.next/standalone/.next/server/app/skills.segments/_full.segment.rsc +5 -5
  559. package/.next/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  560. package/.next/standalone/.next/server/app/skills.segments/_index.segment.rsc +3 -3
  561. package/.next/standalone/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
  562. package/.next/standalone/.next/server/app/trace.html +1 -1
  563. package/.next/standalone/.next/server/app/trace.rsc +7 -7
  564. package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p/trace/__PAGE__.segment.rsc +2 -2
  565. package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p/trace.segment.rsc +1 -1
  566. package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p.segment.rsc +2 -2
  567. package/.next/standalone/.next/server/app/trace.segments/_full.segment.rsc +7 -7
  568. package/.next/standalone/.next/server/app/trace.segments/_head.segment.rsc +1 -1
  569. package/.next/standalone/.next/server/app/trace.segments/_index.segment.rsc +3 -3
  570. package/.next/standalone/.next/server/app/trace.segments/_tree.segment.rsc +2 -2
  571. package/.next/standalone/.next/server/app/version-analysis.html +1 -0
  572. package/.next/standalone/.next/server/app/version-analysis.meta +16 -0
  573. package/.next/standalone/.next/server/app/version-analysis.rsc +23 -0
  574. package/.next/standalone/.next/server/app/version-analysis.segments/!KG1haW4p/version-analysis/__PAGE__.segment.rsc +9 -0
  575. package/.next/standalone/.next/server/app/version-analysis.segments/!KG1haW4p/version-analysis.segment.rsc +4 -0
  576. package/.next/standalone/.next/server/app/version-analysis.segments/!KG1haW4p.segment.rsc +7 -0
  577. package/.next/standalone/.next/server/app/version-analysis.segments/_full.segment.rsc +23 -0
  578. package/.next/standalone/.next/server/app/version-analysis.segments/_head.segment.rsc +6 -0
  579. package/.next/standalone/.next/server/app/version-analysis.segments/_index.segment.rsc +6 -0
  580. package/.next/standalone/.next/server/app/version-analysis.segments/_tree.segment.rsc +2 -0
  581. package/.next/standalone/.next/server/app/version-management.html +1 -0
  582. package/.next/standalone/.next/server/app/version-management.meta +16 -0
  583. package/.next/standalone/.next/server/app/version-management.rsc +22 -0
  584. package/.next/standalone/.next/server/app/version-management.segments/!KG1haW4p/version-management/__PAGE__.segment.rsc +9 -0
  585. package/.next/standalone/.next/server/app/version-management.segments/!KG1haW4p/version-management.segment.rsc +4 -0
  586. package/.next/standalone/.next/server/app/version-management.segments/!KG1haW4p.segment.rsc +7 -0
  587. package/.next/standalone/.next/server/app/version-management.segments/_full.segment.rsc +22 -0
  588. package/.next/standalone/.next/server/app/version-management.segments/_head.segment.rsc +6 -0
  589. package/.next/standalone/.next/server/app/version-management.segments/_index.segment.rsc +6 -0
  590. package/.next/standalone/.next/server/app/version-management.segments/_tree.segment.rsc +2 -0
  591. package/.next/standalone/.next/server/app-paths-manifest.json +9 -0
  592. package/.next/standalone/.next/server/chunks/[root-of-the-server]__096d00c3._.js +3 -0
  593. package/.next/standalone/.next/server/chunks/[root-of-the-server]__28078c4e._.js +1 -1
  594. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4509f30c._.js +1 -1
  595. package/.next/standalone/.next/server/chunks/[root-of-the-server]__51f686fd._.js +22 -0
  596. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5386e9b4._.js +22 -0
  597. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5cb21a03._.js +3 -0
  598. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6fe0c73e._.js +1 -1
  599. package/.next/standalone/.next/server/chunks/[root-of-the-server]__88e070f0._.js +1 -1
  600. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8b872712._.js +22 -0
  601. package/.next/standalone/.next/server/chunks/[root-of-the-server]__98ce63c7._.js +1 -1
  602. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9f6a4627._.js +1 -1
  603. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c875b500._.js +3 -0
  604. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c8b9af98._.js +1 -1
  605. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cfcf074d._.js +3 -0
  606. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d754b2c2._.js +3 -0
  607. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e60b9568._.js +22 -0
  608. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e8b9c639._.js +22 -0
  609. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f30eea21._.js +3 -0
  610. package/.next/standalone/.next/server/chunks/_05c80664._.js +1 -1
  611. package/.next/standalone/.next/server/chunks/_1c2f3589._.js +1 -1
  612. package/.next/standalone/.next/server/chunks/{_1a32fa23._.js → _5090183e._.js} +2 -2
  613. package/.next/standalone/.next/server/chunks/{_e84c3e5f._.js → _6a203624._.js} +1 -1
  614. package/.next/standalone/.next/server/chunks/{_a0074544._.js → _70b9b972._.js} +1 -1
  615. package/.next/standalone/.next/server/chunks/_78c6471e._.js +1 -1
  616. package/.next/standalone/.next/server/chunks/{_547fcde4._.js → _d02fac80._.js} +2 -2
  617. package/.next/standalone/.next/server/chunks/_d043f698._.js +1 -1
  618. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_fleet_agent_route_actions_b98e2c99.js +3 -0
  619. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_modelconfig_pricing_route_actions_bca6856d.js +3 -0
  620. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_tags_[id]_route_actions_a6f8b324.js +3 -0
  621. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_tags_route_actions_caf13f5f.js +3 -0
  622. package/.next/standalone/.next/server/chunks/bec2d_app_api_observe_version-analysis_tags_[tagId]_traces_route_actions_ff37f2d3.js +3 -0
  623. package/.next/standalone/.next/server/chunks/ce889_server_app_api_observe_executions_[executionId]_tags_route_actions_08aa41a4.js +3 -0
  624. package/.next/standalone/.next/server/chunks/ce889_server_app_api_observe_version-analysis_compare_route_actions_b48ab573.js +3 -0
  625. package/.next/standalone/.next/server/chunks/src_lib_266d6cf4._.js +51 -0
  626. package/.next/standalone/.next/server/chunks/src_lib_5d95b500._.js +3 -0
  627. package/.next/standalone/.next/server/chunks/src_lib_67530201._.js +51 -0
  628. package/.next/standalone/.next/server/chunks/src_lib_9513f84d._.js +48 -0
  629. package/.next/standalone/.next/server/chunks/src_lib_9d09752c._.js +1 -1
  630. package/.next/standalone/.next/server/chunks/src_lib_a03a423b._.js +48 -0
  631. package/.next/standalone/.next/server/chunks/src_lib_a2a34aa6._.js +1 -1
  632. package/.next/standalone/.next/server/chunks/{src_lib_4751db31._.js → src_lib_dc72b90b._.js} +1 -1
  633. package/.next/standalone/.next/server/chunks/src_lib_ea85a447._.js +1 -1
  634. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0eb5d21d._.js +3 -0
  635. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__143c2f65._.js +3 -0
  636. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__85e7edfe._.js +3 -0
  637. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__c9cf8076._.js → [root-of-the-server]__90686664._.js} +2 -2
  638. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__96628a39._.js +3 -0
  639. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__c69baa4a._.js +3 -0
  640. package/.next/standalone/.next/server/chunks/ssr/_051b1443._.js +3 -0
  641. package/.next/standalone/.next/server/chunks/ssr/_0ae78458._.js +3 -0
  642. package/.next/standalone/.next/server/chunks/ssr/{_400d0da3._.js → _1278164d._.js} +2 -2
  643. package/.next/standalone/.next/server/chunks/ssr/_15e714f2._.js +3 -0
  644. package/.next/standalone/.next/server/chunks/ssr/_2f20fbfc._.js +3 -0
  645. package/.next/standalone/.next/server/chunks/ssr/_4e720925._.js +3 -0
  646. package/.next/standalone/.next/server/chunks/ssr/_5aa55aa6._.js +3 -0
  647. package/.next/standalone/.next/server/chunks/ssr/_8b68f69f._.js +3 -0
  648. package/.next/standalone/.next/server/chunks/ssr/_8d4b753e._.js +3 -0
  649. package/.next/standalone/.next/server/chunks/ssr/_976dfbab._.js +4 -0
  650. package/.next/standalone/.next/server/chunks/ssr/_aab048d0._.js +1 -1
  651. package/.next/standalone/.next/server/chunks/ssr/_be1ffbbf._.js +12 -0
  652. package/.next/standalone/.next/server/chunks/ssr/_c815e0e7._.js +4 -0
  653. package/.next/standalone/.next/server/chunks/ssr/_e4c81263._.js +3 -0
  654. package/.next/standalone/.next/server/chunks/ssr/{_a3d5f9bc._.js → _e5ee8977._.js} +2 -2
  655. package/.next/standalone/.next/server/chunks/ssr/_f634ea15._.js +12 -0
  656. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_(main)_version-analysis_page_actions_479d49a7.js +3 -0
  657. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_(main)_version-management_page_actions_aea5ae93.js +3 -0
  658. package/.next/standalone/.next/server/chunks/ssr/{node_modules_a443e166._.js → node_modules_3b1fd8eb._.js} +2 -2
  659. package/.next/standalone/.next/server/chunks/ssr/node_modules_7680a21d._.js +3 -0
  660. package/.next/standalone/.next/server/chunks/ssr/node_modules_bda25b86._.js +3 -0
  661. package/.next/standalone/.next/server/chunks/ssr/node_modules_bfffaa78._.js +3 -0
  662. package/.next/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_2e7afafc._.js +3 -0
  663. package/.next/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_cd0b182b._.js +3 -0
  664. package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_accessconfig_install_page_tsx_6f4ef3fc._.js +3 -3
  665. package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_dashboard_page_tsx_7eac7774._.js +1 -1
  666. package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_modelconfig_registry_page_tsx_1ead2fd4._.js +1 -1
  667. package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_quality_page_tsx_26bb8e80._.js +1 -1
  668. package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_trace_page_tsx_41e7865d._.js +1 -1
  669. package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_version-analysis_page_tsx_63ae8791._.js +3 -0
  670. package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_version-management_page_tsx_87fe0372._.js +3 -0
  671. package/.next/standalone/.next/server/chunks/ssr/src_components_ui_select_tsx_4c0f64d8._.js +1 -1
  672. package/.next/standalone/.next/server/chunks/ssr/src_lib_client_locale-context_tsx_7184d9aa._.js +1 -1
  673. package/.next/standalone/.next/server/pages/404.html +1 -1
  674. package/.next/standalone/.next/server/pages/500.html +2 -2
  675. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  676. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  677. package/.next/standalone/.next/static/chunks/0257c68e82e9f2b0.js +1 -0
  678. package/.next/standalone/.next/static/chunks/{8754e0cf40813330.js → 06ac4297aa02f40a.js} +1 -1
  679. package/.next/standalone/.next/static/chunks/0fe047909a490ef0.js +1 -0
  680. package/.next/standalone/.next/static/chunks/151b95e65092aa16.js +1 -0
  681. package/.next/standalone/.next/static/chunks/1624a1adcb73d784.js +1 -0
  682. package/.next/standalone/.next/static/chunks/1cb2cee6b2f89fb7.js +1 -0
  683. package/.next/standalone/.next/static/chunks/1f173de64ad85757.js +10 -0
  684. package/.next/standalone/.next/static/chunks/{4dcd21eef469e66b.js → 2064add303799ffc.js} +1 -1
  685. package/.next/standalone/.next/static/chunks/25a9b2907e03a172.css +1 -0
  686. package/.next/standalone/.next/static/chunks/2fb55cc737806639.js +1 -0
  687. package/.next/standalone/.next/static/chunks/30a686796d86273c.js +1 -0
  688. package/.next/standalone/.next/static/chunks/3184105f3d2b47a1.js +10 -0
  689. package/.next/standalone/.next/static/chunks/379315313d164a57.js +1 -0
  690. package/.next/standalone/.next/static/chunks/39157b51ed6489eb.js +1 -0
  691. package/.next/standalone/.next/static/chunks/{dc22f906bd43e9a3.js → 46308ae9f83ac112.js} +3 -3
  692. package/.next/standalone/.next/static/chunks/4b72abe72a9b6cd9.js +6 -0
  693. package/.next/standalone/.next/static/chunks/54538e1a80e53392.js +1 -0
  694. package/.next/standalone/.next/static/chunks/599fdc4cf6eb9e95.js +1 -0
  695. package/.next/standalone/.next/static/chunks/63220d0acc5073cc.js +1 -0
  696. package/.next/standalone/.next/static/chunks/6da1d3424f804755.js +1 -0
  697. package/.next/standalone/.next/static/chunks/6e6f2418240877c6.js +1 -0
  698. package/.next/standalone/.next/static/chunks/8668d6f4c34d1e67.js +3 -0
  699. package/.next/standalone/.next/static/chunks/946d260668afc16b.js +1 -0
  700. package/.next/standalone/.next/static/chunks/97822ca2c186f93d.js +1 -0
  701. package/.next/{static/chunks/96c7e2e47438553a.js → standalone/.next/static/chunks/98588c35b1e00bea.js} +1 -1
  702. package/.next/standalone/.next/static/chunks/a99fb4f44f9a41f3.js +1 -0
  703. package/.next/standalone/.next/static/chunks/b223106f6c610a67.js +1 -0
  704. package/.next/standalone/.next/static/chunks/b5e671771efd9e7d.js +1 -0
  705. package/.next/standalone/.next/static/chunks/cc9a7b6a8edabe81.js +1 -0
  706. package/.next/standalone/.next/static/chunks/cfb3924a60d22c64.js +1 -0
  707. package/.next/standalone/.next/static/chunks/d15d7f6146b85000.js +1 -0
  708. package/.next/standalone/.next/static/chunks/dee90c3e29cd39bb.js +1 -0
  709. package/.next/standalone/.next/static/chunks/{bf909bd0ff1898e4.js → f6954ae67d81050e.js} +1 -1
  710. package/.next/standalone/.next/static/chunks/fc7f5db841a7032a.js +1 -0
  711. package/.next/standalone/node_modules/.prisma/client/edge.js +26 -3
  712. package/.next/standalone/node_modules/.prisma/client/index-browser.js +23 -0
  713. package/.next/standalone/node_modules/.prisma/client/index.js +26 -3
  714. package/.next/standalone/node_modules/.prisma/client/package.json +1 -1
  715. package/.next/standalone/node_modules/.prisma/client/schema.prisma +39 -0
  716. package/.next/standalone/node_modules/.prisma/client/wasm.js +23 -0
  717. package/.next/standalone/package.json +1 -1
  718. package/.next/standalone/prisma/schema.prisma +38 -0
  719. package/.next/static/chunks/0257c68e82e9f2b0.js +1 -0
  720. package/.next/static/chunks/{8754e0cf40813330.js → 06ac4297aa02f40a.js} +1 -1
  721. package/.next/static/chunks/0fe047909a490ef0.js +1 -0
  722. package/.next/static/chunks/151b95e65092aa16.js +1 -0
  723. package/.next/static/chunks/1624a1adcb73d784.js +1 -0
  724. package/.next/static/chunks/1cb2cee6b2f89fb7.js +1 -0
  725. package/.next/static/chunks/1f173de64ad85757.js +10 -0
  726. package/.next/static/chunks/{4dcd21eef469e66b.js → 2064add303799ffc.js} +1 -1
  727. package/.next/static/chunks/25a9b2907e03a172.css +1 -0
  728. package/.next/static/chunks/2fb55cc737806639.js +1 -0
  729. package/.next/static/chunks/30a686796d86273c.js +1 -0
  730. package/.next/static/chunks/3184105f3d2b47a1.js +10 -0
  731. package/.next/static/chunks/379315313d164a57.js +1 -0
  732. package/.next/static/chunks/39157b51ed6489eb.js +1 -0
  733. package/.next/static/chunks/{dc22f906bd43e9a3.js → 46308ae9f83ac112.js} +3 -3
  734. package/.next/static/chunks/4b72abe72a9b6cd9.js +6 -0
  735. package/.next/static/chunks/54538e1a80e53392.js +1 -0
  736. package/.next/static/chunks/599fdc4cf6eb9e95.js +1 -0
  737. package/.next/static/chunks/63220d0acc5073cc.js +1 -0
  738. package/.next/static/chunks/6da1d3424f804755.js +1 -0
  739. package/.next/static/chunks/6e6f2418240877c6.js +1 -0
  740. package/.next/static/chunks/8668d6f4c34d1e67.js +3 -0
  741. package/.next/static/chunks/946d260668afc16b.js +1 -0
  742. package/.next/static/chunks/97822ca2c186f93d.js +1 -0
  743. package/.next/{standalone/.next/static/chunks/96c7e2e47438553a.js → static/chunks/98588c35b1e00bea.js} +1 -1
  744. package/.next/static/chunks/a99fb4f44f9a41f3.js +1 -0
  745. package/.next/static/chunks/b223106f6c610a67.js +1 -0
  746. package/.next/static/chunks/b5e671771efd9e7d.js +1 -0
  747. package/.next/static/chunks/cc9a7b6a8edabe81.js +1 -0
  748. package/.next/static/chunks/cfb3924a60d22c64.js +1 -0
  749. package/.next/static/chunks/d15d7f6146b85000.js +1 -0
  750. package/.next/static/chunks/dee90c3e29cd39bb.js +1 -0
  751. package/.next/static/chunks/{bf909bd0ff1898e4.js → f6954ae67d81050e.js} +1 -1
  752. package/.next/static/chunks/fc7f5db841a7032a.js +1 -0
  753. package/package.json +1 -1
  754. package/prisma/schema.prisma +38 -0
  755. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2574e6ed._.js +0 -3
  756. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2710fb53._.js +0 -3
  757. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8cc92af1._.js +0 -3
  758. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9d2e5f60._.js +0 -3
  759. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bd3dc3ab._.js +0 -3
  760. package/.next/standalone/.next/server/chunks/src_lib_6cb48964._.js +0 -32
  761. package/.next/standalone/.next/server/chunks/src_lib_a3155704._.js +0 -3
  762. package/.next/standalone/.next/server/chunks/src_lib_baaf83ef._.js +0 -29
  763. package/.next/standalone/.next/server/chunks/src_lib_bf0ee699._.js +0 -32
  764. package/.next/standalone/.next/server/chunks/src_lib_dbf3c792._.js +0 -29
  765. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2ec2bb09._.js +0 -3
  766. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__3cb83dc3._.js +0 -3
  767. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__fc94ba06._.js +0 -3
  768. package/.next/standalone/.next/server/chunks/ssr/_0141e5c7._.js +0 -3
  769. package/.next/standalone/.next/server/chunks/ssr/_0acdaaae._.js +0 -3
  770. package/.next/standalone/.next/server/chunks/ssr/_231821bd._.js +0 -3
  771. package/.next/standalone/.next/server/chunks/ssr/_5d1f8671._.js +0 -12
  772. package/.next/standalone/.next/server/chunks/ssr/_8bba8b8d._.js +0 -3
  773. package/.next/standalone/.next/server/chunks/ssr/_96725836._.js +0 -12
  774. package/.next/standalone/.next/server/chunks/ssr/_b08dc931._.js +0 -3
  775. package/.next/standalone/.next/server/chunks/ssr/_c4db9cec._.js +0 -3
  776. package/.next/standalone/.next/server/chunks/ssr/node_modules_8bfa35b3._.js +0 -3
  777. package/.next/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_30858f09._.js +0 -3
  778. package/.next/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_f1e06ad8._.js +0 -3
  779. package/.next/standalone/.next/static/chunks/0b6bd84bf10579a4.js +0 -10
  780. package/.next/standalone/.next/static/chunks/0bca64d67dceae3f.js +0 -1
  781. package/.next/standalone/.next/static/chunks/16047b19dda5c90d.js +0 -10
  782. package/.next/standalone/.next/static/chunks/3a0f454536f3ebc8.js +0 -1
  783. package/.next/standalone/.next/static/chunks/3d19f62114122bd3.js +0 -1
  784. package/.next/standalone/.next/static/chunks/3d6127f72467176d.js +0 -1
  785. package/.next/standalone/.next/static/chunks/44545e70bb7a33b8.js +0 -1
  786. package/.next/standalone/.next/static/chunks/4e52a5c5e332595a.js +0 -1
  787. package/.next/standalone/.next/static/chunks/6238734a2f04b1f9.js +0 -1
  788. package/.next/standalone/.next/static/chunks/66b23011cd8544ad.js +0 -1
  789. package/.next/standalone/.next/static/chunks/7a758615e3d35d6d.js +0 -1
  790. package/.next/standalone/.next/static/chunks/7a7dc24eed0484dc.js +0 -1
  791. package/.next/standalone/.next/static/chunks/7d4fa817c5229801.js +0 -1
  792. package/.next/standalone/.next/static/chunks/8f18a711543d804a.js +0 -1
  793. package/.next/standalone/.next/static/chunks/9155a6c07dc0502d.js +0 -6
  794. package/.next/standalone/.next/static/chunks/94fdb955b1dc512a.js +0 -1
  795. package/.next/standalone/.next/static/chunks/97b8d7ea5d04e2a2.js +0 -1
  796. package/.next/standalone/.next/static/chunks/a31bf4e176b5e90c.js +0 -3
  797. package/.next/standalone/.next/static/chunks/b9597989b5b0abd3.js +0 -1
  798. package/.next/standalone/.next/static/chunks/d170174df1128338.js +0 -1
  799. package/.next/standalone/.next/static/chunks/d91c2c0bbe0b59ab.js +0 -1
  800. package/.next/standalone/.next/static/chunks/e159d293fc72e91b.css +0 -1
  801. package/.next/standalone/.next/static/chunks/e45a4e085c7ce03c.js +0 -1
  802. package/.next/standalone/.next/static/chunks/ffd21617593aaafd.js +0 -1
  803. package/.next/static/chunks/0b6bd84bf10579a4.js +0 -10
  804. package/.next/static/chunks/0bca64d67dceae3f.js +0 -1
  805. package/.next/static/chunks/16047b19dda5c90d.js +0 -10
  806. package/.next/static/chunks/3a0f454536f3ebc8.js +0 -1
  807. package/.next/static/chunks/3d19f62114122bd3.js +0 -1
  808. package/.next/static/chunks/3d6127f72467176d.js +0 -1
  809. package/.next/static/chunks/44545e70bb7a33b8.js +0 -1
  810. package/.next/static/chunks/4e52a5c5e332595a.js +0 -1
  811. package/.next/static/chunks/6238734a2f04b1f9.js +0 -1
  812. package/.next/static/chunks/66b23011cd8544ad.js +0 -1
  813. package/.next/static/chunks/7a758615e3d35d6d.js +0 -1
  814. package/.next/static/chunks/7a7dc24eed0484dc.js +0 -1
  815. package/.next/static/chunks/7d4fa817c5229801.js +0 -1
  816. package/.next/static/chunks/8f18a711543d804a.js +0 -1
  817. package/.next/static/chunks/9155a6c07dc0502d.js +0 -6
  818. package/.next/static/chunks/94fdb955b1dc512a.js +0 -1
  819. package/.next/static/chunks/97b8d7ea5d04e2a2.js +0 -1
  820. package/.next/static/chunks/a31bf4e176b5e90c.js +0 -3
  821. package/.next/static/chunks/b9597989b5b0abd3.js +0 -1
  822. package/.next/static/chunks/d170174df1128338.js +0 -1
  823. package/.next/static/chunks/d91c2c0bbe0b59ab.js +0 -1
  824. package/.next/static/chunks/e159d293fc72e91b.css +0 -1
  825. package/.next/static/chunks/e45a4e085c7ce03c.js +0 -1
  826. package/.next/static/chunks/ffd21617593aaafd.js +0 -1
  827. /package/.next/standalone/.next/static/{iE8084jR9Kgb7Bhs3Xokh → VeFGnFbPjqrwSXp9h5AgX}/_buildManifest.js +0 -0
  828. /package/.next/standalone/.next/static/{iE8084jR9Kgb7Bhs3Xokh → VeFGnFbPjqrwSXp9h5AgX}/_clientMiddlewareManifest.json +0 -0
  829. /package/.next/standalone/.next/static/{iE8084jR9Kgb7Bhs3Xokh → VeFGnFbPjqrwSXp9h5AgX}/_ssgManifest.js +0 -0
  830. /package/.next/static/{iE8084jR9Kgb7Bhs3Xokh → VeFGnFbPjqrwSXp9h5AgX}/_buildManifest.js +0 -0
  831. /package/.next/static/{iE8084jR9Kgb7Bhs3Xokh → VeFGnFbPjqrwSXp9h5AgX}/_clientMiddlewareManifest.json +0 -0
  832. /package/.next/static/{iE8084jR9Kgb7Bhs3Xokh → VeFGnFbPjqrwSXp9h5AgX}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[659764,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(48662),e=a.i(940092),f=a.i(600554),g=a.i(931760),h=["axis","item"],i=(0,c.forwardRef)((a,b)=>c.createElement(g.CartesianChart,{chartName:"BarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:h,tooltipPayloadSearcher:f.arrayTooltipSearcher,categoricalChartProps:a,ref:b})),j=a.i(457431),k=a.i(923665),l=a.i(677924),m=a.i(758042),n=a.i(994222),o=a.i(54419),p=a.i(659854),q=a.i(778900),r=a.i(935112),s=a.i(320353),t=a.i(298621),u=a.i(603190);a.i(463008);var v=a.i(379996),w=a.i(112882),x=a.i(630714);(0,x.sqrt)(3);let y={draw(a,b){let c=(0,x.sqrt)(b/x.pi);a.moveTo(c,0),a.arc(0,0,c,0,x.tau)}},z=(0,x.sqrt)(1/3),A=2*z,B=(0,x.sin)(x.pi/10)/(0,x.sin)(7*x.pi/10),C=(0,x.sin)(x.tau/10)*B,D=-(0,x.cos)(x.tau/10)*B,E=(0,x.sqrt)(3);(0,x.sqrt)(3);let F=(0,x.sqrt)(3)/2,G=1/(0,x.sqrt)(12),H=(G/2+1)*3;var I=a.i(768932),J=a.i(107038),K=["type","size","sizeType"];function L(){return(L=Object.assign.bind()).apply(null,arguments)}function M(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function N(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?M(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):M(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}var O={symbolCircle:y,symbolCross:{draw(a,b){let c=(0,x.sqrt)(b/5)/2;a.moveTo(-3*c,-c),a.lineTo(-c,-c),a.lineTo(-c,-3*c),a.lineTo(c,-3*c),a.lineTo(c,-c),a.lineTo(3*c,-c),a.lineTo(3*c,c),a.lineTo(c,c),a.lineTo(c,3*c),a.lineTo(-c,3*c),a.lineTo(-c,c),a.lineTo(-3*c,c),a.closePath()}},symbolDiamond:{draw(a,b){let c=(0,x.sqrt)(b/A),d=c*z;a.moveTo(0,-c),a.lineTo(d,0),a.lineTo(0,c),a.lineTo(-d,0),a.closePath()}},symbolSquare:{draw(a,b){let c=(0,x.sqrt)(b),d=-c/2;a.rect(d,d,c,c)}},symbolStar:{draw(a,b){let c=(0,x.sqrt)(.8908130915292852*b),d=C*c,e=D*c;a.moveTo(0,-c),a.lineTo(d,e);for(let b=1;b<5;++b){let f=x.tau*b/5,g=(0,x.cos)(f),h=(0,x.sin)(f);a.lineTo(h*c,-g*c),a.lineTo(g*d-h*e,h*d+g*e)}a.closePath()}},symbolTriangle:{draw(a,b){let c=-(0,x.sqrt)(b/(3*E));a.moveTo(0,2*c),a.lineTo(-E*c,-c),a.lineTo(E*c,-c),a.closePath()}},symbolWye:{draw(a,b){let c=(0,x.sqrt)(b/H),d=c/2,e=c*G,f=c*G+c,g=-d;a.moveTo(d,e),a.lineTo(d,f),a.lineTo(g,f),a.lineTo(-.5*d-F*e,F*d+-.5*e),a.lineTo(-.5*d-F*f,F*d+-.5*f),a.lineTo(-.5*g-F*f,F*g+-.5*f),a.lineTo(-.5*d+F*e,-.5*e-F*d),a.lineTo(-.5*d+F*f,-.5*f-F*d),a.lineTo(-.5*g+F*f,-.5*f-F*g),a.closePath()}}},P=Math.PI/180,Q=a=>{var b=a.type,d=void 0===b?"circle":b,e=a.size,f=void 0===e?64:e,g=a.sizeType,h=void 0===g?"area":g,i=N(N({},function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,K)),{},{type:d,size:f,sizeType:h}),j="circle";"string"==typeof d&&(j=d);var k=i.className,l=i.cx,m=i.cy,n=(0,J.svgPropertiesAndEvents)(i);return(0,I.isNumber)(l)&&(0,I.isNumber)(m)&&(0,I.isNumber)(f)?c.createElement("path",L({},n,{className:(0,t.clsx)("recharts-symbols",k),transform:"translate(".concat(l,", ").concat(m,")"),d:(()=>{var a,b=(a=j,O["symbol".concat((0,I.upperFirst)(a))]||y),c=(function(a,b){let c=null,d=(0,w.withPath)(e);function e(){let e;if(c||(c=e=d()),a.apply(this,arguments).draw(c,+b.apply(this,arguments)),e)return c=null,e+""||null}return a="function"==typeof a?a:(0,v.default)(a||y),b="function"==typeof b?b:(0,v.default)(void 0===b?64:+b),e.type=function(b){return arguments.length?(a="function"==typeof b?b:(0,v.default)(b),e):a},e.size=function(a){return arguments.length?(b="function"==typeof a?a:(0,v.default)(+a),e):b},e.context=function(a){return arguments.length?(c=null==a?null:a,e):c},e})().type(b).size(((a,b,c)=>{if("area"===b)return a;switch(c){case"cross":return 5*a*a/9;case"diamond":return .5*a*a/Math.sqrt(3);case"square":return a*a;case"star":var d=18*P;return 1.25*a*a*(Math.tan(d)-Math.tan(2*d)*Math.tan(d)**2);case"triangle":return Math.sqrt(3)*a*a/4;case"wye":return(21-10*Math.sqrt(3))*a*a/8;default:return Math.PI*a*a/4}})(f,h,j))();if(null!==c)return c})()})):null};Q.registerSymbol=(a,b)=>{O["symbol".concat((0,I.upperFirst)(a))]=b};var R=a.i(952517),S=a.i(787293);function T(){return(T=Object.assign.bind()).apply(null,arguments)}function U(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function V(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?U(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):U(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}var W={align:"center",iconSize:14,inactiveColor:"#ccc",layout:"horizontal",verticalAlign:"middle",labelStyle:{}};function X(a){var b=a.data,d=a.iconType,e=a.inactiveColor,f=32/6,g=32/3,h=b.inactive?e:b.color,i=null!=d?d:b.type;if("none"===i)return null;if("plainline"===i)return c.createElement("line",{strokeWidth:4,fill:"none",stroke:h,strokeDasharray:function(a){if("object"==typeof a&&null!==a&&"strokeDasharray"in a)return String(a.strokeDasharray)}(b.payload),x1:0,y1:16,x2:32,y2:16,className:"recharts-legend-icon"});if("line"===i)return c.createElement("path",{strokeWidth:4,fill:"none",stroke:h,d:"M0,".concat(16,"h").concat(g,"\n A").concat(f,",").concat(f,",0,1,1,").concat(2*g,",").concat(16,"\n H").concat(32,"M").concat(2*g,",").concat(16,"\n A").concat(f,",").concat(f,",0,1,1,").concat(g,",").concat(16),className:"recharts-legend-icon"});if("rect"===i)return c.createElement("path",{stroke:"none",fill:h,d:"M0,".concat(4,"h").concat(32,"v").concat(24,"h").concat(-32,"z"),className:"recharts-legend-icon"});if(c.isValidElement(b.legendIcon)){var j=V({},b);return delete j.legendIcon,c.cloneElement(b.legendIcon,j)}return c.createElement(Q,{fill:h,cx:16,cy:16,size:32,sizeType:"diameter",type:i})}function Y(a){var b=a.payload,d=a.iconSize,e=a.layout,f=a.formatter,g=a.inactiveColor,h=a.iconType,i=a.labelStyle,j={x:0,y:0,width:32,height:32},k={display:"horizontal"===e?"inline-block":"block",marginRight:10},l={display:"inline-block",verticalAlign:"middle",marginRight:4};return b.map((b,e)=>{var m=b.formatter||f,n=(0,t.clsx)({"recharts-legend-item":!0,["legend-item-".concat(e)]:!0,inactive:b.inactive});if("none"===b.type)return null;var o="object"==typeof i?V({},i):{};o.color=b.inactive?g:o.color||b.color;var p=m?m(b.value,b,e):b.value;return c.createElement("li",T({className:n,style:k,key:"legend-item-".concat(e)},(0,R.adaptEventsOfChild)(a,b,e)),c.createElement(u.Surface,{width:d,height:d,viewBox:j,style:l,"aria-label":null==b.value?"legend icon":"".concat(b.value," legend icon")},c.createElement(X,{data:b,iconType:h,inactiveColor:g})),c.createElement("span",{className:"recharts-legend-item-text",style:o},p))})}var Z=a=>{var b=(0,S.resolveDefaultProps)(a,W),d=b.payload,e=b.layout,f=b.align;return d&&d.length?c.createElement("ul",{className:"recharts-default-legend",style:{padding:0,margin:0,textAlign:"horizontal"===e?f:"left"}},c.createElement(Y,T({},b,{payload:d}))):null},$=a.i(363643),_=a.i(977368),aa=a.i(324993),ab=a.i(738620),ac=a.i(298382),ad=a.i(121402),ae=a.i(795272),af=["contextPayload"];function ag(){return(ag=Object.assign.bind()).apply(null,arguments)}function ah(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function ai(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function aj(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?ai(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):ai(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function ak(a){return a.value}function al(a){var b=a.contextPayload,d=function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,af),e=(0,$.getUniqPayload)(b,a.payloadUniqBy,ak),f=aj(aj({},d),{},{payload:e});return c.isValidElement(a.content)?c.cloneElement(a.content,f):"function"==typeof a.content?c.createElement(a.content,f):c.createElement(Z,f)}function am(a){var b=a.align,d=a.layout,e=a.verticalAlign,f=a.itemSorter,g=(0,_.useAppDispatch)();return(0,c.useLayoutEffect)(()=>{g((0,ad.setLegendSettings)({align:b,layout:d,verticalAlign:e,itemSorter:f}))},[g,b,d,e,f]),null}function an(a){var b=a.width,d=a.height,e=(0,_.useAppDispatch)();return(0,c.useLayoutEffect)(()=>{e((0,ad.setLegendSize)({width:b,height:d}))},[e,b,d]),(0,c.useLayoutEffect)(()=>()=>{e((0,ad.setLegendSize)({width:0,height:0}))},[e]),null}var ao={align:"center",iconSize:14,inactiveColor:"#ccc",itemSorter:"value",labelStyle:{},layout:"horizontal",verticalAlign:"bottom"},ap=c.memo(function(a){var b,d,e,f,g,h,i,j=(0,S.resolveDefaultProps)(a,ao),k=(0,_.useAppSelector)(aa.selectLegendPayload),l=(0,s.useLegendPortal)(),m=(0,ac.useMargin)(),n=j.width,o=j.height,p=j.wrapperStyle,q=j.portal,t=function(a){if(Array.isArray(a))return a}(b=(0,ab.useElementOffset)([k]))||function(a,b){var c=null==a?null:"u">typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=c){var d,e,f,g,h=[],i=!0,j=!1;try{f=(c=c.call(a)).next,!1;for(;!(i=(d=f.call(c)).done)&&(h.push(d.value),2!==h.length);i=!0);}catch(a){j=!0,e=a}finally{try{if(!i&&null!=c.return&&(g=c.return(),Object(g)!==g))return}finally{if(j)throw e}}return h}}(b,2)||function(a,b){if(a){if("string"==typeof a)return ah(a,2);var c=({}).toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?ah(a,2):void 0}}(b,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),u=t[0],v=t[1],w=(0,ac.useChartWidth)(),x=(0,ac.useChartHeight)();if(null==w||null==x)return null;var y=w-((null==m?void 0:m.left)||0)-((null==m?void 0:m.right)||0),z=(d=j.layout,"vertical"===d&&null!=o?{height:o}:"horizontal"===d?{width:n||y}:null),A=q?p:aj(aj({position:"absolute",width:(null==z?void 0:z.width)||n||"auto",height:(null==z?void 0:z.height)||o||"auto"},(g=j.layout,h=j.align,i=j.verticalAlign,p&&(void 0!==p.left&&null!==p.left||void 0!==p.right&&null!==p.right)||(e="center"===h&&"vertical"===g?{left:((w||0)-u.width)/2}:"right"===h?{right:m&&m.right||0}:{left:m&&m.left||0}),p&&(void 0!==p.top&&null!==p.top||void 0!==p.bottom&&null!==p.bottom)||(f="middle"===i?{top:((x||0)-u.height)/2}:"bottom"===i?{bottom:m&&m.bottom||0}:{top:m&&m.top||0}),aj(aj({},e),f))),p),B=null!=q?q:l;if(null==B||null==k)return null;var C=c.createElement("div",{className:"recharts-legend-wrapper",style:A,ref:v},c.createElement(am,{layout:j.layout,align:j.align,verticalAlign:j.verticalAlign,itemSorter:j.itemSorter}),!q&&c.createElement(an,{width:u.width,height:u.height}),c.createElement(al,ag({},j,z,{margin:m,chartWidth:w,chartHeight:x,contextPayload:k})));return(0,r.createPortal)(C,B)},ae.propsAreEqual);ap.displayName="Legend";var aq=a.i(575110),ar=a.i(71255),as=a.i(943408);let at=[{key:"trends",label:"系统趋势"},{key:"reliability",label:"可靠性与性能"},{key:"model",label:"模型监控"},{key:"tool",label:"工具监控"},{key:"agent",label:"Agent 监控"},{key:"orchestration",label:"多智能体编排"}],au=[{key:"1d",label:"近 24h"},{key:"1w",label:"近 7 天"},{key:"1m",label:"近 30 天"}],av="#2c7a6b",aw=a=>(a??0).toLocaleString(),ax=a=>`${a}%`,ay=a=>a<1?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`,az=a=>a>=1e3?`${(a/1e3).toFixed(1)}k`:`${a}`;function aA(){let{user:a}=(0,as.useAuth)(),[d,e]=(0,c.useState)("1w"),[f,g]=(0,c.useState)("trends"),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(null),[p,q]=(0,c.useState)(!1);(0,c.useEffect)(()=>{if(!a)return;let b=!0;return i(null),m(null),k(null),(0,aq.apiFetch)(`/api/fleet/trends?window=${d}&user=${encodeURIComponent(a)}`).then(a=>{if(!a.ok)throw Error(`HTTP ${a.status}`);return a.json()}).then(a=>{b&&i(a)}).catch(a=>{b&&m(a.message||"取数失败")}),()=>{b=!1}},[d,a]),(0,c.useEffect)(()=>{if("trends"===f||j||!a)return;let b=!0;return q(!0),o(null),(0,aq.apiFetch)(`/api/fleet/breakdowns?window=${d}&user=${encodeURIComponent(a)}`).then(a=>{if(!a.ok)throw Error(`HTTP ${a.status}`);return a.json()}).then(a=>{b&&k(a)}).catch(a=>{b&&o(a.message||"取数失败")}).finally(()=>{b&&q(!1)}),()=>{b=!1}},[f,d,j,a]);let r=h?.errorThreshold??5,s={trends:!!h?.buckets.some(a=>a.errorRate>r),reliability:!!j?.reliability.failAgents.some(a=>a.errorRate>=r)};return(0,b.jsxs)("div",{style:{height:"100%",overflowY:"auto",background:"var(--background)"},children:[(0,b.jsxs)("div",{style:{position:"sticky",top:0,zIndex:20,display:"flex",alignItems:"center",gap:12,flexWrap:"wrap",padding:"14px 22px",borderBottom:"1px solid var(--border)",background:"var(--background)"},children:[(0,b.jsx)("span",{style:{fontSize:15,fontWeight:800,color:"var(--foreground)"},children:"仪表盘"}),(0,b.jsx)(aT,{text:"成本按模型单价加权(单位 USD);成功/错误为硬错误口径(工具 state / failures),软错误(judge)未叠加;端到端时延为 wall-time。数据源:真实 Execution 聚合。"}),(0,b.jsx)("span",{style:{flex:1}}),(0,b.jsx)("div",{style:{display:"flex",gap:4,background:"var(--card-bg)",border:"1px solid var(--border)",borderRadius:8,padding:2},children:au.map(a=>(0,b.jsx)("button",{onClick:()=>e(a.key),style:{fontSize:11.5,fontWeight:600,padding:"5px 11px",borderRadius:6,cursor:"pointer",border:"none",background:d===a.key?"var(--primary)":"transparent",color:d===a.key?"var(--primary-foreground, #fff)":"var(--foreground-secondary)"},children:a.label},a.key))})]}),(0,b.jsxs)("div",{style:{padding:22,display:"flex",flexDirection:"column",gap:16},children:[l&&(0,b.jsx)(aV,{msg:l}),!h&&!l&&(0,b.jsx)(aU,{text:"加载中…"}),h&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(aJ,{kpi:h.kpi}),h.pricingMissingModels.length>0&&(0,b.jsxs)("div",{style:{fontSize:11,color:"var(--warning)",marginTop:-6},children:["⚠ 以下模型缺单价,成本按 0 计:",h.pricingMissingModels.join("、"),"(在 custom-models.json 补单价)"]}),(0,b.jsx)("div",{style:{display:"flex",gap:2,borderBottom:"1px solid var(--border)",flexWrap:"wrap"},children:at.map(a=>{let c=f===a.key;return(0,b.jsxs)("button",{onClick:()=>g(a.key),style:{position:"relative",fontSize:12.5,fontWeight:c?700:500,padding:"9px 15px",border:"none",cursor:"pointer",background:"transparent",color:c?"var(--primary)":"var(--foreground-secondary)",borderBottom:c?"2px solid var(--primary)":"2px solid transparent",marginBottom:-1},children:[a.label,s[a.key]&&(0,b.jsx)("span",{title:"trends"===a.key?"告警:部分时段错误率超过 5% 阈值":"告警:存在失败热点 Agent 错误率 ≥ 5% 阈值",style:{position:"absolute",top:6,right:4,width:6,height:6,borderRadius:"50%",background:"var(--error)",cursor:"help"}})]},a.key)})}),"trends"===f&&(0,b.jsx)(aB,{data:h}),"trends"!==f&&(n?(0,b.jsx)(aV,{msg:n}):p||!j?(0,b.jsx)(aU,{text:"加载中…"}):"reliability"===f?(0,b.jsx)(aC,{bd:j}):"model"===f?(0,b.jsx)(aD,{bd:j}):"tool"===f?(0,b.jsx)(aE,{bd:j}):"agent"===f?(0,b.jsx)(aF,{bd:j}):(0,b.jsx)(aG,{bd:j}))]})]})]})}function aB({data:a}){let c=(0,ar.useThemeColors)();return a.buckets.every(a=>0===a.traces)?(0,b.jsx)(aU,{text:"当前窗口内暂无数据"}):(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"Trace 流量趋势",hint:"成功 / 失败分层堆叠",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(i,{data:a.buckets,margin:aX,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:aY,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:aY,allowDecimals:!1}),(0,b.jsx)(p.Tooltip,{contentStyle:a$}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:aZ}),(0,b.jsx)(k.Bar,{dataKey:"success",name:"成功",stackId:"t",fill:c.success}),(0,b.jsx)(k.Bar,{dataKey:"fail",name:"失败",stackId:"t",fill:c.error,radius:[2,2,0,0]})]})})}),(0,b.jsx)(aS,{title:"错误率趋势",hint:`失败 trace 占比 \xb7 阈值线 ${a.errorThreshold}%`,children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(j.LineChart,{data:a.buckets,margin:aX,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:aY,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:aY,unit:"%"}),(0,b.jsx)(p.Tooltip,{contentStyle:a$}),(0,b.jsx)(q.ReferenceLine,{y:a.errorThreshold,stroke:c.warning,strokeDasharray:"5 4",label:{value:`${a.errorThreshold}%`,position:"right",fill:c.warning,fontSize:10}}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"errorRate",name:"错误率",stroke:c.error,strokeWidth:2,dot:{r:2}})]})})}),(0,b.jsx)(aS,{title:"端到端时延趋势",hint:"per-trace P50 / P95 / P99(wall-time,秒)",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(j.LineChart,{data:a.buckets,margin:aX,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:aY,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:aY,unit:"s"}),(0,b.jsx)(p.Tooltip,{contentStyle:a$}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:aZ}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"latencyP50",name:"P50",stroke:c.success,strokeWidth:1.8,dot:!1}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"latencyP95",name:"P95",stroke:c.warning,strokeWidth:2,dot:!1}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"latencyP99",name:"P99",stroke:c.error,strokeWidth:2,dot:!1})]})})}),(0,b.jsx)(aS,{title:"Token 消耗趋势",hint:"input / output 堆叠 + 总量线",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(e.ComposedChart,{data:a.buckets,margin:aX,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:aY,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:aY,tickFormatter:az}),(0,b.jsx)(p.Tooltip,{contentStyle:a$,formatter:a=>aw(Number(a))}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:aZ}),(0,b.jsx)(k.Bar,{dataKey:"inputTokens",name:"input",stackId:"tok",fill:c.primary}),(0,b.jsx)(k.Bar,{dataKey:"outputTokens",name:"output",stackId:"tok",fill:av,radius:[2,2,0,0]}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"totalTokens",name:"总量",stroke:c.warning,strokeWidth:2,dot:!1})]})})}),(0,b.jsx)(aS,{title:"成本趋势",hint:`按模型单价加权(${a.currency})`,children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(j.LineChart,{data:a.buckets,margin:aX,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:aY,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:aY,tickFormatter:a=>`$${a}`}),(0,b.jsx)(p.Tooltip,{contentStyle:a$,formatter:a=>ay(Number(a))}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"cost",name:"成本",stroke:c.warning,strokeWidth:2.2,dot:{r:2}})]})})}),(0,b.jsx)(aS,{title:"单 trace 平均 Token / 平均成本",hint:"效率指标(与流量解耦)",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(e.ComposedChart,{data:a.buckets,margin:aX,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:aY,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{yAxisId:"tok",width:52,stroke:c.fgMuted,tick:aY,tickFormatter:az}),(0,b.jsx)(n.YAxis,{yAxisId:"cost",orientation:"right",width:52,stroke:c.fgMuted,tick:aY,tickFormatter:a=>`$${a}`}),(0,b.jsx)(p.Tooltip,{contentStyle:a$}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:aZ}),(0,b.jsx)(l.Line,{yAxisId:"tok",type:"monotone",dataKey:"avgTokens",name:"平均 Token",stroke:c.primary,strokeWidth:2,dot:!1}),(0,b.jsx)(l.Line,{yAxisId:"cost",type:"monotone",dataKey:"avgCost",name:`平均成本(${a.currency})`,stroke:c.warning,strokeWidth:2,strokeDasharray:"5 4",dot:!1})]})})})]})}function aC({bd:a}){let c=a.reliability;return(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"失败热点 · Agent",hint:"错误率 TOP10(失败/总调用)",children:(0,b.jsx)(aN,{data:c.failAgents.map(a=>({name:a.name,value:a.errorRate})),color:"var(--error)",unit:"%"})}),(0,b.jsx)(aS,{title:"端到端时延分布",hint:"per-trace 对数桶(秒)",children:(0,b.jsx)(aP,{data:c.latHist,color:"var(--warning)"})}),(0,b.jsx)(aS,{title:"慢 Trace 排行",hint:"按端到端耗时降序 TOP20(点击进链路)",wide:!0,children:(0,b.jsx)(aQ,{rows:c.slowTraces})})]})}function aD({bd:a}){let c=a.model;return(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"模型调用次数排行",hint:"Σ 模型调用次数 TOP10",children:(0,b.jsx)(aN,{data:c.callRank.map(a=>({name:a.model,value:a.calls})),color:"var(--primary)"})}),(0,b.jsx)(aS,{title:"Token 构成排行",hint:"input / output 堆叠 · 柱长=总消耗 TOP10",children:(0,b.jsx)(aO,{data:c.tokenComp})})]})}function aE({bd:a}){let c=(0,ar.useThemeColors)(),e=a.tool.trend;return(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"工具调用量趋势",hint:"Σ tool_calls 条数 / 桶",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(i,{data:e,margin:aX,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:aY,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:aY,allowDecimals:!1}),(0,b.jsx)(p.Tooltip,{contentStyle:a$}),(0,b.jsx)(k.Bar,{dataKey:"calls",name:"工具调用",fill:c.primary,radius:[2,2,0,0]})]})})}),(0,b.jsx)(aS,{title:"工具调用成功率趋势",hint:"1 − 工具错误/总调用(%)",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(j.LineChart,{data:e,margin:aX,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:aY,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:aY,unit:"%",domain:[90,100]}),(0,b.jsx)(p.Tooltip,{contentStyle:a$}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"successRate",name:"成功率",stroke:c.success,strokeWidth:2,dot:{r:2}})]})})})]})}function aF({bd:a}){let c=(0,ar.useThemeColors)(),e=a.agent;return(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"平均执行工具数 / 模型数趋势",hint:"每 trace 人均(分母=当桶 trace 数)",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(j.LineChart,{data:e.trend,margin:aX,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:aY,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:aY}),(0,b.jsx)(p.Tooltip,{contentStyle:a$}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:aZ}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"avgTools",name:"平均工具数",stroke:c.primary,strokeWidth:2,dot:!1}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"avgModels",name:"平均模型调用数",stroke:av,strokeWidth:2,dot:!1})]})})}),(0,b.jsx)(aS,{title:"Agent Token 消耗(self)",hint:"按 Agent 自身 token TOP10",children:(0,b.jsx)(aN,{data:e.tokenRank.map(a=>({name:a.name,value:a.tokens})),color:"var(--warning)",fmt:az})}),(0,b.jsx)(aS,{title:"Agent 调用排行",hint:"distinct trace 出现数 TOP10",children:(0,b.jsx)(aN,{data:e.callRank.map(a=>({name:a.name,value:a.traces})),color:"var(--primary)"})}),(0,b.jsx)(aS,{title:"Skill 调用排行",hint:"调用次数 TOP10(成功率色深待 skill-call state)",children:e.skillRank.length?(0,b.jsx)(aN,{data:e.skillRank.map(a=>({name:a.skill,value:a.calls})),color:av}):(0,b.jsx)(aU,{text:"窗口内无 skill 调用"})})]})}function aG({bd:a}){let c=a.orchestration.collab;return(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"编排复杂度分布",hint:"每 trace 的 distinct Agent 数分桶",children:(0,b.jsx)(aP,{data:a.orchestration.complexityHist,color:"var(--primary)"})}),(0,b.jsx)(aS,{title:"全局协作网络",info:"边来自 buildAgentCallTree 还原的 parent→child 派发关系(谁 spawn 了谁),跨当前窗口内所有 trace 聚合,边权=派发次数、节点大小=中心度。非 send_message 点对点消息(该口径四框架均无数据源),但同样能识别通信枢纽 Agent。",hint:`节点大小=中心度 \xb7 边=派发(from→to) \xb7 ${c.traceCount} 条多 Agent trace${c.truncated?"(已截断)":""}`,wide:!0,children:c.nodes.length?(0,b.jsx)(aH,{data:c}):(0,b.jsx)(aU,{text:"窗口内无多 Agent 协作数据"})})]})}function aH({data:d}){let e=(0,ar.useThemeColors)(),f=c.default.useRef(null);return c.default.useEffect(()=>{let b=f.current;if(!b)return;let c=null,g=!1,h=null;return a.A(104264).then(a=>{if(g||!b)return;let f=Math.max(1,...d.nodes.map(a=>a.degree)),i=Math.max(1,...d.edges.map(a=>a.weight));(c=a.init(b)).setOption({tooltip:{confine:!0,backgroundColor:"var(--card-bg)",borderColor:"var(--border)",textStyle:{color:e.fg,fontSize:12},formatter:a=>"edge"===a.dataType?`${a.data.source} → ${a.data.target}<br/>派发 <b>${a.data.value}</b> 次`:`${a.name}<br/>中心度 <b>${a.value}</b>`},series:[{type:"graph",layout:"force",roam:!0,draggable:!0,data:d.nodes.map(a=>{let b;return{name:a.id,value:a.degree,symbolSize:16+40*(a.degree/f),itemStyle:{color:(b=a.degree/f)>.8?"#1D2B45":b>.5?"#2C7A6B":b>.3?"#C8553D":b>.15?"#B5811F":"#76705f"}}}),links:d.edges.map(a=>({source:a.from,target:a.to,value:a.weight,lineStyle:{width:1+3.5*(a.weight/i)}})),force:{repulsion:300,edgeLength:[60,140],gravity:.12},label:{show:!0,position:"right",color:e.fg,fontSize:10,fontWeight:500},lineStyle:{color:e.fgMuted,opacity:.5,curveness:.18},emphasis:{focus:"adjacency",label:{fontWeight:700},lineStyle:{color:"#C8553D",opacity:.95,width:2.5}}}]}),h=()=>c?.resize(),window.addEventListener("resize",h)}),()=>{g=!0,h&&window.removeEventListener("resize",h),c&&c.dispose()}},[d,e]),(0,b.jsx)("div",{ref:f,style:{width:"100%",height:440}})}let aI=[{label:"总 Trace",key:"traces",fmt:aw,goodWhenUp:null,tone:"count",group:"系统"},{label:"成功率",key:"successRate",fmt:ax,goodWhenUp:!0,tone:"good",group:"系统"},{label:"P95 端到端时延",key:"p95Latency",fmt:a=>`${a}s`,goodWhenUp:!1,tone:"latency",group:"系统"},{label:"活跃 Agent",key:"activeAgents",fmt:aw,goodWhenUp:null,tone:"count",group:"系统"},{label:"活跃模型",key:"activeModels",fmt:aw,goodWhenUp:null,tone:"count",group:"系统"},{label:"工具调用次数",key:"toolCalls",fmt:aw,goodWhenUp:null,tone:"count",group:"工具"},{label:"工具调用错误率",key:"toolErrorRate",fmt:ax,goodWhenUp:!1,tone:"error",group:"工具"},{label:"模型 Tokens",key:"totalTokens",fmt:aw,goodWhenUp:null,tone:"count",group:"模型"},{label:"模型调用次数",key:"llmCalls",fmt:aw,goodWhenUp:null,tone:"count",group:"模型"},{label:"总成本",key:"totalCost",fmt:ay,goodWhenUp:!1,tone:"latency",group:"模型"}];function aJ({kpi:a}){return(0,b.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(150px, 1fr))",gap:10},children:aI.map(c=>(0,b.jsx)(aL,{def:c,cur:a.current[c.key],prev:a.previous[c.key]},c.key))})}let aK={count:"var(--foreground)",good:"var(--success)",latency:"var(--warning)",error:"var(--error)"};function aL({def:a,cur:c,prev:d}){return(0,b.jsxs)("div",{style:{background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:10,padding:"12px 14px",display:"flex",flexDirection:"column",gap:6},children:[(0,b.jsxs)("span",{style:{fontSize:11,color:"var(--foreground-muted)",display:"flex",alignItems:"center",gap:6},children:[(0,b.jsx)("span",{style:{fontSize:9,opacity:.7},children:a.group}),a.label]}),(0,b.jsx)("span",{style:{fontSize:22,fontWeight:800,color:aK[a.tone],fontFamily:"var(--font-mono, monospace)",lineHeight:1.1},children:a.fmt(c??0)}),(0,b.jsx)(aM,{cur:c,prev:d,goodWhenUp:a.goodWhenUp})]})}function aM({cur:a,prev:c,goodWhenUp:d}){if(null==c||0===c)return(0,b.jsx)("span",{style:{fontSize:10.5,color:"var(--foreground-muted)"},children:"环比 —"});let e=Math.round((a-c)/c*1e3)/10;if(.05>Math.abs(e))return(0,b.jsx)("span",{style:{fontSize:10.5,color:"var(--foreground-muted)"},children:"环比 ±0%"});let f=e>0;return(0,b.jsxs)("span",{style:{fontSize:10.5,color:null===d?"var(--foreground-muted)":d===f?"var(--success)":"var(--error)",display:"inline-flex",alignItems:"center",gap:3},children:[f?"▲":"▼"," ",Math.abs(e),"%",(0,b.jsx)("span",{style:{color:"var(--foreground-muted)",fontSize:9.5},children:"环比"})]})}function aN({data:a,color:c,unit:e,fmt:f}){let g=(0,ar.useThemeColors)();return a.length?(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(i,{layout:"vertical",data:a,margin:{top:4,right:18,bottom:4,left:8},children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:g.border,horizontal:!1}),(0,b.jsx)(m.XAxis,{type:"number",stroke:g.fgMuted,tick:aY,unit:e,tickFormatter:f}),(0,b.jsx)(n.YAxis,{type:"category",dataKey:"name",stroke:g.fgMuted,tick:{fontSize:10},width:118}),(0,b.jsx)(p.Tooltip,{contentStyle:a$,formatter:a=>f?f(Number(a)):String(a)}),(0,b.jsx)(k.Bar,{dataKey:"value",fill:c,radius:[0,3,3,0]})]})}):(0,b.jsx)(aU,{text:"暂无数据"})}function aO({data:a}){let c=(0,ar.useThemeColors)();return a.length?(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(i,{layout:"vertical",data:a,margin:{top:4,right:18,bottom:4,left:8},children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,horizontal:!1}),(0,b.jsx)(m.XAxis,{type:"number",stroke:c.fgMuted,tick:aY,tickFormatter:az}),(0,b.jsx)(n.YAxis,{type:"category",dataKey:"model",stroke:c.fgMuted,tick:{fontSize:10},width:118}),(0,b.jsx)(p.Tooltip,{contentStyle:a$,formatter:a=>aw(Number(a))}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:aZ}),(0,b.jsx)(k.Bar,{dataKey:"input",name:"input",stackId:"s",fill:c.primary}),(0,b.jsx)(k.Bar,{dataKey:"output",name:"output",stackId:"s",fill:av,radius:[0,3,3,0]})]})}):(0,b.jsx)(aU,{text:"暂无数据"})}function aP({data:a,color:c}){let e=(0,ar.useThemeColors)();return(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aW,children:(0,b.jsxs)(i,{data:a,margin:aX,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:e.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:e.fgMuted,tick:aY}),(0,b.jsx)(n.YAxis,{width:52,stroke:e.fgMuted,tick:aY,allowDecimals:!1}),(0,b.jsx)(p.Tooltip,{contentStyle:a$}),(0,b.jsx)(k.Bar,{dataKey:"count",name:"trace 数",fill:c,radius:[2,2,0,0]})]})})}function aQ({rows:a}){if(!a.length)return(0,b.jsx)(aU,{text:"暂无数据"});let c={textAlign:"left",padding:"7px 10px",color:"var(--foreground-muted)",fontWeight:600,borderBottom:"1px solid var(--border)",whiteSpace:"nowrap"},d={padding:"7px 10px",borderBottom:"1px solid var(--border)",color:"var(--foreground-secondary)"};return(0,b.jsx)("div",{style:{overflowX:"auto"},children:(0,b.jsxs)("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:11.5},children:[(0,b.jsx)("thead",{children:(0,b.jsxs)("tr",{children:[(0,b.jsx)("th",{style:c,children:"Trace"}),(0,b.jsx)("th",{style:c,children:"Agent"}),(0,b.jsx)("th",{style:c,children:"时延(s)"}),(0,b.jsx)("th",{style:c,children:"Token"}),(0,b.jsx)("th",{style:c,children:"Agent 数"}),(0,b.jsx)("th",{style:c,children:"状态"})]})}),(0,b.jsx)("tbody",{children:a.map((a,c)=>(0,b.jsxs)("tr",{children:[(0,b.jsx)("td",{style:d,children:(0,b.jsxs)("a",{href:(0,aq.getApiUrl)(`/trace?taskId=${encodeURIComponent(a.taskId)}`),style:{color:"var(--primary)",textDecoration:"none",fontFamily:"var(--font-mono, monospace)"},children:[a.taskId.slice(0,12),"…"]})}),(0,b.jsx)("td",{style:d,children:a.agent}),(0,b.jsx)("td",{style:{...d,fontFamily:"var(--font-mono, monospace)",color:"var(--warning)"},children:a.latency}),(0,b.jsx)("td",{style:{...d,fontFamily:"var(--font-mono, monospace)"},children:aw(a.tokens)}),(0,b.jsx)("td",{style:d,children:a.agents}),(0,b.jsx)("td",{style:{...d,color:a.ok?"var(--success)":"var(--error)"},children:a.ok?"成功":"失败"})]},c))})]})})}function aR({children:a}){return(0,b.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(430px, 1fr))",gap:14},children:a})}function aS({title:a,hint:c,info:d,wide:e,children:f}){return(0,b.jsxs)("section",{style:{background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12,gridColumn:e?"1 / -1":void 0,minWidth:0,overflow:"hidden"},children:[(0,b.jsxs)("div",{style:{padding:"11px 16px",borderBottom:"1px solid var(--border)",display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[(0,b.jsx)("span",{style:{fontSize:13,fontWeight:800,color:"var(--foreground)"},children:a}),d&&(0,b.jsx)(aT,{text:d}),c&&(0,b.jsxs)("span",{style:{fontSize:10.5,color:"var(--foreground-muted)"},children:["· ",c]})]}),(0,b.jsx)("div",{style:{padding:"12px 12px 6px"},children:f})]})}function aT({text:a}){return(0,b.jsx)("span",{title:a,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,borderRadius:"50%",border:"1px solid var(--border-dark)",color:"var(--foreground-muted)",fontSize:9.5,fontWeight:700,fontStyle:"normal",cursor:"help",flexShrink:0,lineHeight:1},children:"i"})}function aU({text:a}){return(0,b.jsx)("div",{style:{padding:50,textAlign:"center",color:"var(--foreground-muted)",fontSize:13,background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12},children:a})}function aV({msg:a}){return(0,b.jsxs)("div",{style:{padding:16,borderRadius:10,background:"var(--error-subtle)",border:"1px solid var(--error-subtle-border)",color:"var(--error)",fontSize:13},children:["取数失败:",a]})}let aW=260,aX={top:8,right:16,bottom:4,left:0},aY={fontSize:10},aZ={fontSize:11},a$={background:"var(--card-bg)",border:"1px solid var(--border-dark)",borderRadius:9,fontSize:11,boxShadow:"0 6px 24px rgba(20,22,30,.12)"};a.s(["default",()=>aA],659764)}];
1
+ module.exports=[659764,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(48662),e=a.i(940092),f=a.i(600554),g=a.i(931760),h=["axis","item"],i=(0,c.forwardRef)((a,b)=>c.createElement(g.CartesianChart,{chartName:"BarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:h,tooltipPayloadSearcher:f.arrayTooltipSearcher,categoricalChartProps:a,ref:b})),j=a.i(457431),k=a.i(923665),l=a.i(677924),m=a.i(758042),n=a.i(994222),o=a.i(54419),p=a.i(659854),q=a.i(778900),r=a.i(935112),s=a.i(320353),t=a.i(298621),u=a.i(603190);a.i(463008);var v=a.i(379996),w=a.i(112882),x=a.i(630714);(0,x.sqrt)(3);let y={draw(a,b){let c=(0,x.sqrt)(b/x.pi);a.moveTo(c,0),a.arc(0,0,c,0,x.tau)}},z=(0,x.sqrt)(1/3),A=2*z,B=(0,x.sin)(x.pi/10)/(0,x.sin)(7*x.pi/10),C=(0,x.sin)(x.tau/10)*B,D=-(0,x.cos)(x.tau/10)*B,E=(0,x.sqrt)(3);(0,x.sqrt)(3);let F=(0,x.sqrt)(3)/2,G=1/(0,x.sqrt)(12),H=(G/2+1)*3;var I=a.i(768932),J=a.i(107038),K=["type","size","sizeType"];function L(){return(L=Object.assign.bind()).apply(null,arguments)}function M(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function N(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?M(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):M(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}var O={symbolCircle:y,symbolCross:{draw(a,b){let c=(0,x.sqrt)(b/5)/2;a.moveTo(-3*c,-c),a.lineTo(-c,-c),a.lineTo(-c,-3*c),a.lineTo(c,-3*c),a.lineTo(c,-c),a.lineTo(3*c,-c),a.lineTo(3*c,c),a.lineTo(c,c),a.lineTo(c,3*c),a.lineTo(-c,3*c),a.lineTo(-c,c),a.lineTo(-3*c,c),a.closePath()}},symbolDiamond:{draw(a,b){let c=(0,x.sqrt)(b/A),d=c*z;a.moveTo(0,-c),a.lineTo(d,0),a.lineTo(0,c),a.lineTo(-d,0),a.closePath()}},symbolSquare:{draw(a,b){let c=(0,x.sqrt)(b),d=-c/2;a.rect(d,d,c,c)}},symbolStar:{draw(a,b){let c=(0,x.sqrt)(.8908130915292852*b),d=C*c,e=D*c;a.moveTo(0,-c),a.lineTo(d,e);for(let b=1;b<5;++b){let f=x.tau*b/5,g=(0,x.cos)(f),h=(0,x.sin)(f);a.lineTo(h*c,-g*c),a.lineTo(g*d-h*e,h*d+g*e)}a.closePath()}},symbolTriangle:{draw(a,b){let c=-(0,x.sqrt)(b/(3*E));a.moveTo(0,2*c),a.lineTo(-E*c,-c),a.lineTo(E*c,-c),a.closePath()}},symbolWye:{draw(a,b){let c=(0,x.sqrt)(b/H),d=c/2,e=c*G,f=c*G+c,g=-d;a.moveTo(d,e),a.lineTo(d,f),a.lineTo(g,f),a.lineTo(-.5*d-F*e,F*d+-.5*e),a.lineTo(-.5*d-F*f,F*d+-.5*f),a.lineTo(-.5*g-F*f,F*g+-.5*f),a.lineTo(-.5*d+F*e,-.5*e-F*d),a.lineTo(-.5*d+F*f,-.5*f-F*d),a.lineTo(-.5*g+F*f,-.5*f-F*g),a.closePath()}}},P=Math.PI/180,Q=a=>{var b=a.type,d=void 0===b?"circle":b,e=a.size,f=void 0===e?64:e,g=a.sizeType,h=void 0===g?"area":g,i=N(N({},function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,K)),{},{type:d,size:f,sizeType:h}),j="circle";"string"==typeof d&&(j=d);var k=i.className,l=i.cx,m=i.cy,n=(0,J.svgPropertiesAndEvents)(i);return(0,I.isNumber)(l)&&(0,I.isNumber)(m)&&(0,I.isNumber)(f)?c.createElement("path",L({},n,{className:(0,t.clsx)("recharts-symbols",k),transform:"translate(".concat(l,", ").concat(m,")"),d:(()=>{var a,b=(a=j,O["symbol".concat((0,I.upperFirst)(a))]||y),c=(function(a,b){let c=null,d=(0,w.withPath)(e);function e(){let e;if(c||(c=e=d()),a.apply(this,arguments).draw(c,+b.apply(this,arguments)),e)return c=null,e+""||null}return a="function"==typeof a?a:(0,v.default)(a||y),b="function"==typeof b?b:(0,v.default)(void 0===b?64:+b),e.type=function(b){return arguments.length?(a="function"==typeof b?b:(0,v.default)(b),e):a},e.size=function(a){return arguments.length?(b="function"==typeof a?a:(0,v.default)(+a),e):b},e.context=function(a){return arguments.length?(c=null==a?null:a,e):c},e})().type(b).size(((a,b,c)=>{if("area"===b)return a;switch(c){case"cross":return 5*a*a/9;case"diamond":return .5*a*a/Math.sqrt(3);case"square":return a*a;case"star":var d=18*P;return 1.25*a*a*(Math.tan(d)-Math.tan(2*d)*Math.tan(d)**2);case"triangle":return Math.sqrt(3)*a*a/4;case"wye":return(21-10*Math.sqrt(3))*a*a/8;default:return Math.PI*a*a/4}})(f,h,j))();if(null!==c)return c})()})):null};Q.registerSymbol=(a,b)=>{O["symbol".concat((0,I.upperFirst)(a))]=b};var R=a.i(952517),S=a.i(787293);function T(){return(T=Object.assign.bind()).apply(null,arguments)}function U(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function V(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?U(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):U(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}var W={align:"center",iconSize:14,inactiveColor:"#ccc",layout:"horizontal",verticalAlign:"middle",labelStyle:{}};function X(a){var b=a.data,d=a.iconType,e=a.inactiveColor,f=32/6,g=32/3,h=b.inactive?e:b.color,i=null!=d?d:b.type;if("none"===i)return null;if("plainline"===i)return c.createElement("line",{strokeWidth:4,fill:"none",stroke:h,strokeDasharray:function(a){if("object"==typeof a&&null!==a&&"strokeDasharray"in a)return String(a.strokeDasharray)}(b.payload),x1:0,y1:16,x2:32,y2:16,className:"recharts-legend-icon"});if("line"===i)return c.createElement("path",{strokeWidth:4,fill:"none",stroke:h,d:"M0,".concat(16,"h").concat(g,"\n A").concat(f,",").concat(f,",0,1,1,").concat(2*g,",").concat(16,"\n H").concat(32,"M").concat(2*g,",").concat(16,"\n A").concat(f,",").concat(f,",0,1,1,").concat(g,",").concat(16),className:"recharts-legend-icon"});if("rect"===i)return c.createElement("path",{stroke:"none",fill:h,d:"M0,".concat(4,"h").concat(32,"v").concat(24,"h").concat(-32,"z"),className:"recharts-legend-icon"});if(c.isValidElement(b.legendIcon)){var j=V({},b);return delete j.legendIcon,c.cloneElement(b.legendIcon,j)}return c.createElement(Q,{fill:h,cx:16,cy:16,size:32,sizeType:"diameter",type:i})}function Y(a){var b=a.payload,d=a.iconSize,e=a.layout,f=a.formatter,g=a.inactiveColor,h=a.iconType,i=a.labelStyle,j={x:0,y:0,width:32,height:32},k={display:"horizontal"===e?"inline-block":"block",marginRight:10},l={display:"inline-block",verticalAlign:"middle",marginRight:4};return b.map((b,e)=>{var m=b.formatter||f,n=(0,t.clsx)({"recharts-legend-item":!0,["legend-item-".concat(e)]:!0,inactive:b.inactive});if("none"===b.type)return null;var o="object"==typeof i?V({},i):{};o.color=b.inactive?g:o.color||b.color;var p=m?m(b.value,b,e):b.value;return c.createElement("li",T({className:n,style:k,key:"legend-item-".concat(e)},(0,R.adaptEventsOfChild)(a,b,e)),c.createElement(u.Surface,{width:d,height:d,viewBox:j,style:l,"aria-label":null==b.value?"legend icon":"".concat(b.value," legend icon")},c.createElement(X,{data:b,iconType:h,inactiveColor:g})),c.createElement("span",{className:"recharts-legend-item-text",style:o},p))})}var Z=a=>{var b=(0,S.resolveDefaultProps)(a,W),d=b.payload,e=b.layout,f=b.align;return d&&d.length?c.createElement("ul",{className:"recharts-default-legend",style:{padding:0,margin:0,textAlign:"horizontal"===e?f:"left"}},c.createElement(Y,T({},b,{payload:d}))):null},$=a.i(363643),_=a.i(977368),aa=a.i(324993),ab=a.i(738620),ac=a.i(298382),ad=a.i(121402),ae=a.i(795272),af=["contextPayload"];function ag(){return(ag=Object.assign.bind()).apply(null,arguments)}function ah(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function ai(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function aj(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?ai(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):ai(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function ak(a){return a.value}function al(a){var b=a.contextPayload,d=function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,af),e=(0,$.getUniqPayload)(b,a.payloadUniqBy,ak),f=aj(aj({},d),{},{payload:e});return c.isValidElement(a.content)?c.cloneElement(a.content,f):"function"==typeof a.content?c.createElement(a.content,f):c.createElement(Z,f)}function am(a){var b=a.align,d=a.layout,e=a.verticalAlign,f=a.itemSorter,g=(0,_.useAppDispatch)();return(0,c.useLayoutEffect)(()=>{g((0,ad.setLegendSettings)({align:b,layout:d,verticalAlign:e,itemSorter:f}))},[g,b,d,e,f]),null}function an(a){var b=a.width,d=a.height,e=(0,_.useAppDispatch)();return(0,c.useLayoutEffect)(()=>{e((0,ad.setLegendSize)({width:b,height:d}))},[e,b,d]),(0,c.useLayoutEffect)(()=>()=>{e((0,ad.setLegendSize)({width:0,height:0}))},[e]),null}var ao={align:"center",iconSize:14,inactiveColor:"#ccc",itemSorter:"value",labelStyle:{},layout:"horizontal",verticalAlign:"bottom"},ap=c.memo(function(a){var b,d,e,f,g,h,i,j=(0,S.resolveDefaultProps)(a,ao),k=(0,_.useAppSelector)(aa.selectLegendPayload),l=(0,s.useLegendPortal)(),m=(0,ac.useMargin)(),n=j.width,o=j.height,p=j.wrapperStyle,q=j.portal,t=function(a){if(Array.isArray(a))return a}(b=(0,ab.useElementOffset)([k]))||function(a,b){var c=null==a?null:"u">typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=c){var d,e,f,g,h=[],i=!0,j=!1;try{f=(c=c.call(a)).next,!1;for(;!(i=(d=f.call(c)).done)&&(h.push(d.value),2!==h.length);i=!0);}catch(a){j=!0,e=a}finally{try{if(!i&&null!=c.return&&(g=c.return(),Object(g)!==g))return}finally{if(j)throw e}}return h}}(b,2)||function(a,b){if(a){if("string"==typeof a)return ah(a,2);var c=({}).toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?ah(a,2):void 0}}(b,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),u=t[0],v=t[1],w=(0,ac.useChartWidth)(),x=(0,ac.useChartHeight)();if(null==w||null==x)return null;var y=w-((null==m?void 0:m.left)||0)-((null==m?void 0:m.right)||0),z=(d=j.layout,"vertical"===d&&null!=o?{height:o}:"horizontal"===d?{width:n||y}:null),A=q?p:aj(aj({position:"absolute",width:(null==z?void 0:z.width)||n||"auto",height:(null==z?void 0:z.height)||o||"auto"},(g=j.layout,h=j.align,i=j.verticalAlign,p&&(void 0!==p.left&&null!==p.left||void 0!==p.right&&null!==p.right)||(e="center"===h&&"vertical"===g?{left:((w||0)-u.width)/2}:"right"===h?{right:m&&m.right||0}:{left:m&&m.left||0}),p&&(void 0!==p.top&&null!==p.top||void 0!==p.bottom&&null!==p.bottom)||(f="middle"===i?{top:((x||0)-u.height)/2}:"bottom"===i?{bottom:m&&m.bottom||0}:{top:m&&m.top||0}),aj(aj({},e),f))),p),B=null!=q?q:l;if(null==B||null==k)return null;var C=c.createElement("div",{className:"recharts-legend-wrapper",style:A,ref:v},c.createElement(am,{layout:j.layout,align:j.align,verticalAlign:j.verticalAlign,itemSorter:j.itemSorter}),!q&&c.createElement(an,{width:u.width,height:u.height}),c.createElement(al,ag({},j,z,{margin:m,chartWidth:w,chartHeight:x,contextPayload:k})));return(0,r.createPortal)(C,B)},ae.propsAreEqual);ap.displayName="Legend";var aq=a.i(575110),ar=a.i(71255),as=a.i(943408);let at=[{key:"trends",label:"系统趋势"},{key:"reliability",label:"可靠性与性能"},{key:"model",label:"模型监控"},{key:"tool",label:"工具监控"},{key:"agent",label:"Agent 监控"},{key:"orchestration",label:"多智能体编排"}],au=[{key:"1d",label:"近 24h"},{key:"1w",label:"近 7 天"},{key:"1m",label:"近 30 天"}],av="#2c7a6b",aw=a=>(a??0).toLocaleString(),ax=a=>`${a}%`,ay=a=>a<1?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`,az=a=>a>=1e3?`${(a/1e3).toFixed(1)}k`:`${a}`;function aA(){let{user:a}=(0,as.useAuth)(),[d,e]=(0,c.useState)("1w"),[f,g]=(0,c.useState)("trends"),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(null),[p,q]=(0,c.useState)(!1),[r,s]=(0,c.useState)(null);(0,c.useEffect)(()=>{if(!a)return;let b=!0;return i(null),m(null),k(null),(0,aq.apiFetch)(`/api/fleet/trends?window=${d}&user=${encodeURIComponent(a)}`).then(a=>{if(!a.ok)throw Error(`HTTP ${a.status}`);return a.json()}).then(a=>{b&&i(a)}).catch(a=>{b&&m(a.message||"取数失败")}),()=>{b=!1}},[d,a]),(0,c.useEffect)(()=>{if("trends"===f||j||!a)return;let b=!0;return q(!0),o(null),(0,aq.apiFetch)(`/api/fleet/breakdowns?window=${d}&user=${encodeURIComponent(a)}`).then(a=>{if(!a.ok)throw Error(`HTTP ${a.status}`);return a.json()}).then(a=>{b&&k(a)}).catch(a=>{b&&o(a.message||"取数失败")}).finally(()=>{b&&q(!1)}),()=>{b=!1}},[f,d,j,a]);let t=h?.errorThreshold??5,u={trends:!!h?.buckets.some(a=>a.errorRate>t),reliability:!!j?.reliability.failAgents.some(a=>a.errorRate>=t)};return(0,b.jsxs)("div",{style:{height:"100%",overflowY:"auto",background:"var(--background)"},children:[(0,b.jsxs)("div",{style:{position:"sticky",top:0,zIndex:20,display:"flex",alignItems:"center",gap:12,flexWrap:"wrap",padding:"14px 22px",borderBottom:"1px solid var(--border)",background:"var(--background)"},children:[(0,b.jsx)("span",{style:{fontSize:15,fontWeight:800,color:"var(--foreground)"},children:"仪表盘"}),(0,b.jsx)(aT,{text:"成本按模型单价加权(单位 USD);成功/错误为硬错误口径(工具 state / failures),软错误(judge)未叠加;端到端时延为 wall-time。数据源:真实 Execution 聚合。"}),(0,b.jsx)("span",{style:{flex:1}}),(0,b.jsx)("div",{style:{display:"flex",gap:4,background:"var(--card-bg)",border:"1px solid var(--border)",borderRadius:8,padding:2},children:au.map(a=>(0,b.jsx)("button",{onClick:()=>e(a.key),style:{fontSize:11.5,fontWeight:600,padding:"5px 11px",borderRadius:6,cursor:"pointer",border:"none",background:d===a.key?"var(--primary)":"transparent",color:d===a.key?"var(--primary-foreground, #fff)":"var(--foreground-secondary)"},children:a.label},a.key))})]}),(0,b.jsxs)("div",{style:{padding:22,display:"flex",flexDirection:"column",gap:16},children:[l&&(0,b.jsx)(aV,{msg:l}),!h&&!l&&(0,b.jsx)(aU,{text:"加载中…"}),h&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(aJ,{kpi:h.kpi}),h.pricingMissingModels.length>0&&(0,b.jsxs)("div",{style:{fontSize:11,color:"var(--warning)",marginTop:-6},children:["⚠ 以下模型缺单价,成本按 0 计:",h.pricingMissingModels.join("、"),"(在 custom-models.json 补单价)"]}),(0,b.jsx)("div",{style:{display:"flex",gap:2,borderBottom:"1px solid var(--border)",flexWrap:"wrap"},children:at.map(a=>{let c=f===a.key;return(0,b.jsxs)("button",{onClick:()=>g(a.key),style:{position:"relative",fontSize:12.5,fontWeight:c?700:500,padding:"9px 15px",border:"none",cursor:"pointer",background:"transparent",color:c?"var(--primary)":"var(--foreground-secondary)",borderBottom:c?"2px solid var(--primary)":"2px solid transparent",marginBottom:-1},children:[a.label,u[a.key]&&(0,b.jsx)("span",{title:"trends"===a.key?"告警:部分时段错误率超过 5% 阈值":"告警:存在失败热点 Agent 错误率 ≥ 5% 阈值",style:{position:"absolute",top:6,right:4,width:6,height:6,borderRadius:"50%",background:"var(--error)",cursor:"help"}})]},a.key)})}),"trends"===f&&(0,b.jsx)(aB,{data:h}),"trends"!==f&&(n?(0,b.jsx)(aV,{msg:n}):p||!j?(0,b.jsx)(aU,{text:"加载中…"}):"reliability"===f?(0,b.jsx)(aC,{bd:j,onAgentClick:s}):"model"===f?(0,b.jsx)(aD,{bd:j}):"tool"===f?(0,b.jsx)(aE,{bd:j}):"agent"===f?(0,b.jsx)(aF,{bd:j,onAgentClick:s}):(0,b.jsx)(aG,{bd:j,onAgentClick:s}))]})]}),r&&a&&(0,b.jsx)(aW,{name:r,win:d,user:a,onClose:()=>s(null)})]})}function aB({data:a}){let c=(0,ar.useThemeColors)();return a.buckets.every(a=>0===a.traces)?(0,b.jsx)(aU,{text:"当前窗口内暂无数据"}):(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"Trace 流量趋势",hint:"成功 / 失败分层堆叠",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(i,{data:a.buckets,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:a$,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:a$,allowDecimals:!1}),(0,b.jsx)(p.Tooltip,{contentStyle:a0}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:a_}),(0,b.jsx)(k.Bar,{dataKey:"success",name:"成功",stackId:"t",fill:c.success}),(0,b.jsx)(k.Bar,{dataKey:"fail",name:"失败",stackId:"t",fill:c.error,radius:[2,2,0,0]})]})})}),(0,b.jsx)(aS,{title:"错误率趋势",hint:`失败 trace 占比 \xb7 阈值线 ${a.errorThreshold}%`,children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(j.LineChart,{data:a.buckets,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:a$,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:a$,unit:"%"}),(0,b.jsx)(p.Tooltip,{contentStyle:a0}),(0,b.jsx)(q.ReferenceLine,{y:a.errorThreshold,stroke:c.warning,strokeDasharray:"5 4",label:{value:`${a.errorThreshold}%`,position:"right",fill:c.warning,fontSize:10}}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"errorRate",name:"错误率",stroke:c.error,strokeWidth:2,dot:{r:2}})]})})}),(0,b.jsx)(aS,{title:"端到端时延趋势",hint:"per-trace P50 / P95 / P99(wall-time,秒)",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(j.LineChart,{data:a.buckets,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:a$,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:a$,unit:"s"}),(0,b.jsx)(p.Tooltip,{contentStyle:a0}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:a_}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"latencyP50",name:"P50",stroke:c.success,strokeWidth:1.8,dot:!1}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"latencyP95",name:"P95",stroke:c.warning,strokeWidth:2,dot:!1}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"latencyP99",name:"P99",stroke:c.error,strokeWidth:2,dot:!1})]})})}),(0,b.jsx)(aS,{title:"Token 消耗趋势",hint:"input / output 堆叠 + 总量线",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(e.ComposedChart,{data:a.buckets,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:a$,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:a$,tickFormatter:az}),(0,b.jsx)(p.Tooltip,{contentStyle:a0,formatter:a=>aw(Number(a))}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:a_}),(0,b.jsx)(k.Bar,{dataKey:"inputTokens",name:"input",stackId:"tok",fill:c.primary}),(0,b.jsx)(k.Bar,{dataKey:"outputTokens",name:"output",stackId:"tok",fill:av,radius:[2,2,0,0]}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"totalTokens",name:"总量",stroke:c.warning,strokeWidth:2,dot:!1})]})})}),(0,b.jsx)(aS,{title:"成本趋势",hint:`按模型单价加权(${a.currency})`,children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(j.LineChart,{data:a.buckets,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:a$,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:a$,tickFormatter:a=>`$${a}`}),(0,b.jsx)(p.Tooltip,{contentStyle:a0,formatter:a=>ay(Number(a))}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"cost",name:"成本",stroke:c.warning,strokeWidth:2.2,dot:{r:2}})]})})}),(0,b.jsx)(aS,{title:"单 trace 平均 Token / 平均成本",hint:"效率指标(与流量解耦)",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(e.ComposedChart,{data:a.buckets,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:a$,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{yAxisId:"tok",width:52,stroke:c.fgMuted,tick:a$,tickFormatter:az}),(0,b.jsx)(n.YAxis,{yAxisId:"cost",orientation:"right",width:52,stroke:c.fgMuted,tick:a$,tickFormatter:a=>`$${a}`}),(0,b.jsx)(p.Tooltip,{contentStyle:a0}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:a_}),(0,b.jsx)(l.Line,{yAxisId:"tok",type:"monotone",dataKey:"avgTokens",name:"平均 Token",stroke:c.primary,strokeWidth:2,dot:!1}),(0,b.jsx)(l.Line,{yAxisId:"cost",type:"monotone",dataKey:"avgCost",name:`平均成本(${a.currency})`,stroke:c.warning,strokeWidth:2,strokeDasharray:"5 4",dot:!1})]})})})]})}function aC({bd:a,onAgentClick:c}){let d=a.reliability;return(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"失败热点 · Agent",hint:"错误率 TOP10(失败/总调用)· 点击下钻",children:(0,b.jsx)(aN,{data:d.failAgents.map(a=>({name:a.name,value:a.errorRate})),color:"var(--error)",unit:"%",onClick:c})}),(0,b.jsx)(aS,{title:"端到端时延分布",hint:"per-trace 对数桶(秒)",children:(0,b.jsx)(aP,{data:d.latHist,color:"var(--warning)"})}),(0,b.jsx)(aS,{title:"慢 Trace 排行",hint:"按端到端耗时降序 TOP20(点击进链路)",wide:!0,children:(0,b.jsx)(aQ,{rows:d.slowTraces})})]})}function aD({bd:a}){let c=a.model;return(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"模型调用次数排行",hint:"Σ 模型调用次数 TOP10",children:(0,b.jsx)(aN,{data:c.callRank.map(a=>({name:a.model,value:a.calls})),color:"var(--primary)"})}),(0,b.jsx)(aS,{title:"Token 构成排行",hint:"input / output 堆叠 · 柱长=总消耗 TOP10",children:(0,b.jsx)(aO,{data:c.tokenComp})})]})}function aE({bd:a}){let c=(0,ar.useThemeColors)(),e=a.tool.trend;return(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"工具调用量趋势",hint:"Σ tool_calls 条数 / 桶",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(i,{data:e,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:a$,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:a$,allowDecimals:!1}),(0,b.jsx)(p.Tooltip,{contentStyle:a0}),(0,b.jsx)(k.Bar,{dataKey:"calls",name:"工具调用",fill:c.primary,radius:[2,2,0,0]})]})})}),(0,b.jsx)(aS,{title:"工具调用成功率趋势",hint:"1 − 工具错误/总调用(%)",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(j.LineChart,{data:e,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:c.fgMuted,tick:a$,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:c.fgMuted,tick:a$,unit:"%",domain:[90,100]}),(0,b.jsx)(p.Tooltip,{contentStyle:a0}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"successRate",name:"成功率",stroke:c.success,strokeWidth:2,dot:{r:2}})]})})})]})}function aF({bd:a,onAgentClick:c}){let e=(0,ar.useThemeColors)(),f=a.agent;return(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"平均执行工具数 / 模型数趋势",hint:"每 trace 人均(分母=当桶 trace 数)",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(j.LineChart,{data:f.trend,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:e.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:e.fgMuted,tick:a$,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{width:52,stroke:e.fgMuted,tick:a$}),(0,b.jsx)(p.Tooltip,{contentStyle:a0}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:a_}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"avgTools",name:"平均工具数",stroke:e.primary,strokeWidth:2,dot:!1}),(0,b.jsx)(l.Line,{type:"monotone",dataKey:"avgModels",name:"平均模型调用数",stroke:av,strokeWidth:2,dot:!1})]})})}),(0,b.jsx)(aS,{title:"Agent Token 消耗(self)",hint:"按 Agent 自身 token TOP10 · 点击下钻",children:(0,b.jsx)(aN,{data:f.tokenRank.map(a=>({name:a.name,value:a.tokens})),color:"var(--warning)",fmt:az,onClick:c})}),(0,b.jsx)(aS,{title:"Agent 调用排行",hint:"distinct trace 出现数 TOP10 · 点击下钻",children:(0,b.jsx)(aN,{data:f.callRank.map(a=>({name:a.name,value:a.traces})),color:"var(--primary)",onClick:c})}),(0,b.jsx)(aS,{title:"Skill 调用排行",hint:"调用次数 TOP10(成功率色深待 skill-call state)",children:f.skillRank.length?(0,b.jsx)(aN,{data:f.skillRank.map(a=>({name:a.skill,value:a.calls})),color:av}):(0,b.jsx)(aU,{text:"窗口内无 skill 调用"})})]})}function aG({bd:a,onAgentClick:c}){let d=a.orchestration.collab;return(0,b.jsxs)(aR,{children:[(0,b.jsx)(aS,{title:"编排复杂度分布",hint:"每 trace 的 distinct Agent 数分桶",children:(0,b.jsx)(aP,{data:a.orchestration.complexityHist,color:"var(--primary)"})}),(0,b.jsx)(aS,{title:"全局协作网络",info:"边来自 buildAgentCallTree 还原的 parent→child 派发关系(谁 spawn 了谁),跨当前窗口内所有 trace 聚合,边权=派发次数、节点大小=中心度。非 send_message 点对点消息(该口径四框架均无数据源),但同样能识别通信枢纽 Agent。",hint:`节点大小=中心度 \xb7 边=派发(from→to) \xb7 点击节点下钻 \xb7 ${d.traceCount} 条多 Agent trace${d.truncated?"(已截断)":""}`,wide:!0,children:d.nodes.length?(0,b.jsx)(aH,{data:d,onNodeClick:c}):(0,b.jsx)(aU,{text:"窗口内无多 Agent 协作数据"})})]})}function aH({data:d,onNodeClick:e}){let f=(0,ar.useThemeColors)(),g=c.default.useRef(null);return c.default.useEffect(()=>{let b=g.current;if(!b)return;let c=null,h=!1,i=null;return a.A(104264).then(a=>{if(h||!b)return;let g=Math.max(1,...d.nodes.map(a=>a.degree)),j=Math.max(1,...d.edges.map(a=>a.weight));(c=a.init(b)).setOption({tooltip:{confine:!0,backgroundColor:"var(--card-bg)",borderColor:"var(--border)",textStyle:{color:f.fg,fontSize:12},formatter:a=>"edge"===a.dataType?`${a.data.source} → ${a.data.target}<br/>派发 <b>${a.data.value}</b> 次`:`${a.name}<br/>中心度 <b>${a.value}</b>`},series:[{type:"graph",layout:"force",roam:!0,draggable:!0,data:d.nodes.map(a=>{let b;return{name:a.id,value:a.degree,symbolSize:16+40*(a.degree/g),itemStyle:{color:(b=a.degree/g)>.8?"#1D2B45":b>.5?"#2C7A6B":b>.3?"#C8553D":b>.15?"#B5811F":"#76705f"}}}),links:d.edges.map(a=>({source:a.from,target:a.to,value:a.weight,lineStyle:{width:1+3.5*(a.weight/j)}})),force:{repulsion:300,edgeLength:[60,140],gravity:.12},label:{show:!0,position:"right",color:f.fg,fontSize:10,fontWeight:500},lineStyle:{color:f.fgMuted,opacity:.5,curveness:.18},emphasis:{focus:"adjacency",label:{fontWeight:700},lineStyle:{color:"#C8553D",opacity:.95,width:2.5}}}]}),i=()=>c?.resize(),window.addEventListener("resize",i),e&&c.on("click",a=>{a?.dataType==="node"&&a.name&&e(String(a.name))})}),()=>{h=!0,i&&window.removeEventListener("resize",i),c&&c.dispose()}},[d,f,e]),(0,b.jsx)("div",{ref:g,style:{width:"100%",height:440}})}let aI=[{label:"总 Trace",key:"traces",fmt:aw,goodWhenUp:null,tone:"count",group:"系统"},{label:"成功率",key:"successRate",fmt:ax,goodWhenUp:!0,tone:"good",group:"系统"},{label:"P95 端到端时延",key:"p95Latency",fmt:a=>`${a}s`,goodWhenUp:!1,tone:"latency",group:"系统"},{label:"活跃 Agent",key:"activeAgents",fmt:aw,goodWhenUp:null,tone:"count",group:"系统"},{label:"活跃模型",key:"activeModels",fmt:aw,goodWhenUp:null,tone:"count",group:"系统"},{label:"工具调用次数",key:"toolCalls",fmt:aw,goodWhenUp:null,tone:"count",group:"工具"},{label:"工具调用错误率",key:"toolErrorRate",fmt:ax,goodWhenUp:!1,tone:"error",group:"工具"},{label:"模型 Tokens",key:"totalTokens",fmt:aw,goodWhenUp:null,tone:"count",group:"模型"},{label:"模型调用次数",key:"llmCalls",fmt:aw,goodWhenUp:null,tone:"count",group:"模型"},{label:"总成本",key:"totalCost",fmt:ay,goodWhenUp:!1,tone:"latency",group:"模型"}];function aJ({kpi:a}){return(0,b.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(150px, 1fr))",gap:10},children:aI.map(c=>(0,b.jsx)(aL,{def:c,cur:a.current[c.key],prev:a.previous[c.key]},c.key))})}let aK={count:"var(--foreground)",good:"var(--success)",latency:"var(--warning)",error:"var(--error)"};function aL({def:a,cur:c,prev:d}){return(0,b.jsxs)("div",{style:{background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:10,padding:"12px 14px",display:"flex",flexDirection:"column",gap:6},children:[(0,b.jsxs)("span",{style:{fontSize:11,color:"var(--foreground-muted)",display:"flex",alignItems:"center",gap:6},children:[(0,b.jsx)("span",{style:{fontSize:9,opacity:.7},children:a.group}),a.label]}),(0,b.jsx)("span",{style:{fontSize:22,fontWeight:800,color:aK[a.tone],fontFamily:"var(--font-mono, monospace)",lineHeight:1.1},children:a.fmt(c??0)}),(0,b.jsx)(aM,{cur:c,prev:d,goodWhenUp:a.goodWhenUp})]})}function aM({cur:a,prev:c,goodWhenUp:d}){if(null==c||0===c)return(0,b.jsx)("span",{style:{fontSize:10.5,color:"var(--foreground-muted)"},children:"环比 —"});let e=Math.round((a-c)/c*1e3)/10;if(.05>Math.abs(e))return(0,b.jsx)("span",{style:{fontSize:10.5,color:"var(--foreground-muted)"},children:"环比 ±0%"});let f=e>0;return(0,b.jsxs)("span",{style:{fontSize:10.5,color:null===d?"var(--foreground-muted)":d===f?"var(--success)":"var(--error)",display:"inline-flex",alignItems:"center",gap:3},children:[f?"▲":"▼"," ",Math.abs(e),"%",(0,b.jsx)("span",{style:{color:"var(--foreground-muted)",fontSize:9.5},children:"环比"})]})}function aN({data:a,color:c,unit:e,fmt:f,onClick:g}){let h=(0,ar.useThemeColors)();return a.length?(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(i,{layout:"vertical",data:a,margin:{top:4,right:18,bottom:4,left:8},children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:h.border,horizontal:!1}),(0,b.jsx)(m.XAxis,{type:"number",stroke:h.fgMuted,tick:a$,unit:e,tickFormatter:f}),(0,b.jsx)(n.YAxis,{type:"category",dataKey:"name",stroke:h.fgMuted,tick:{fontSize:10},width:118}),(0,b.jsx)(p.Tooltip,{contentStyle:a0,formatter:a=>f?f(Number(a)):String(a)}),(0,b.jsx)(k.Bar,{dataKey:"value",fill:c,radius:[0,3,3,0],cursor:g?"pointer":void 0,onClick:g?a=>{let b=a?.name??a?.payload?.name;b&&g(String(b))}:void 0})]})}):(0,b.jsx)(aU,{text:"暂无数据"})}function aO({data:a}){let c=(0,ar.useThemeColors)();return a.length?(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(i,{layout:"vertical",data:a,margin:{top:4,right:18,bottom:4,left:8},children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:c.border,horizontal:!1}),(0,b.jsx)(m.XAxis,{type:"number",stroke:c.fgMuted,tick:a$,tickFormatter:az}),(0,b.jsx)(n.YAxis,{type:"category",dataKey:"model",stroke:c.fgMuted,tick:{fontSize:10},width:118}),(0,b.jsx)(p.Tooltip,{contentStyle:a0,formatter:a=>aw(Number(a))}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:a_}),(0,b.jsx)(k.Bar,{dataKey:"input",name:"input",stackId:"s",fill:c.primary}),(0,b.jsx)(k.Bar,{dataKey:"output",name:"output",stackId:"s",fill:av,radius:[0,3,3,0]})]})}):(0,b.jsx)(aU,{text:"暂无数据"})}function aP({data:a,color:c}){let e=(0,ar.useThemeColors)();return(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:aY,children:(0,b.jsxs)(i,{data:a,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:e.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:e.fgMuted,tick:a$}),(0,b.jsx)(n.YAxis,{width:52,stroke:e.fgMuted,tick:a$,allowDecimals:!1}),(0,b.jsx)(p.Tooltip,{contentStyle:a0}),(0,b.jsx)(k.Bar,{dataKey:"count",name:"trace 数",fill:c,radius:[2,2,0,0]})]})})}function aQ({rows:a}){if(!a.length)return(0,b.jsx)(aU,{text:"暂无数据"});let c={textAlign:"left",padding:"7px 10px",color:"var(--foreground-muted)",fontWeight:600,borderBottom:"1px solid var(--border)",whiteSpace:"nowrap"},d={padding:"7px 10px",borderBottom:"1px solid var(--border)",color:"var(--foreground-secondary)"};return(0,b.jsx)("div",{style:{overflowX:"auto"},children:(0,b.jsxs)("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:11.5},children:[(0,b.jsx)("thead",{children:(0,b.jsxs)("tr",{children:[(0,b.jsx)("th",{style:c,children:"Trace"}),(0,b.jsx)("th",{style:c,children:"Agent"}),(0,b.jsx)("th",{style:c,children:"时延(s)"}),(0,b.jsx)("th",{style:c,children:"Token"}),(0,b.jsx)("th",{style:c,children:"Agent 数"}),(0,b.jsx)("th",{style:c,children:"状态"})]})}),(0,b.jsx)("tbody",{children:a.map((a,c)=>(0,b.jsxs)("tr",{children:[(0,b.jsx)("td",{style:d,children:(0,b.jsxs)("a",{href:(0,aq.getApiUrl)(`/trace?taskId=${encodeURIComponent(a.taskId)}`),style:{color:"var(--primary)",textDecoration:"none",fontFamily:"var(--font-mono, monospace)"},children:[a.taskId.slice(0,12),"…"]})}),(0,b.jsx)("td",{style:d,children:a.agent}),(0,b.jsx)("td",{style:{...d,fontFamily:"var(--font-mono, monospace)",color:"var(--warning)"},children:a.latency}),(0,b.jsx)("td",{style:{...d,fontFamily:"var(--font-mono, monospace)"},children:aw(a.tokens)}),(0,b.jsx)("td",{style:d,children:a.agents}),(0,b.jsx)("td",{style:{...d,color:a.ok?"var(--success)":"var(--error)"},children:a.ok?"成功":"失败"})]},c))})]})})}function aR({children:a}){return(0,b.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(430px, 1fr))",gap:14},children:a})}function aS({title:a,hint:c,info:d,wide:e,children:f}){return(0,b.jsxs)("section",{style:{background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12,gridColumn:e?"1 / -1":void 0,minWidth:0,overflow:"hidden"},children:[(0,b.jsxs)("div",{style:{padding:"11px 16px",borderBottom:"1px solid var(--border)",display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[(0,b.jsx)("span",{style:{fontSize:13,fontWeight:800,color:"var(--foreground)"},children:a}),d&&(0,b.jsx)(aT,{text:d}),c&&(0,b.jsxs)("span",{style:{fontSize:10.5,color:"var(--foreground-muted)"},children:["· ",c]})]}),(0,b.jsx)("div",{style:{padding:"12px 12px 6px"},children:f})]})}function aT({text:a}){return(0,b.jsx)("span",{title:a,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,borderRadius:"50%",border:"1px solid var(--border-dark)",color:"var(--foreground-muted)",fontSize:9.5,fontWeight:700,fontStyle:"normal",cursor:"help",flexShrink:0,lineHeight:1},children:"i"})}function aU({text:a}){return(0,b.jsx)("div",{style:{padding:50,textAlign:"center",color:"var(--foreground-muted)",fontSize:13,background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12},children:a})}function aV({msg:a}){return(0,b.jsxs)("div",{style:{padding:16,borderRadius:10,background:"var(--error-subtle)",border:"1px solid var(--error-subtle-border)",color:"var(--error)",fontSize:13},children:["取数失败:",a]})}function aW({name:a,win:f,user:g,onClose:h}){let i=(0,ar.useThemeColors)(),[j,q]=(0,c.useState)(null),[r,s]=(0,c.useState)(null);(0,c.useEffect)(()=>{let b=!0;return q(null),s(null),(0,aq.apiFetch)(`/api/fleet/agent?name=${encodeURIComponent(a)}&window=${f}&user=${encodeURIComponent(g)}`).then(a=>{if(!a.ok)throw Error(`HTTP ${a.status}`);return a.json()}).then(a=>{b&&q(a)}).catch(a=>{b&&s(a instanceof Error?a.message:"取数失败")}),()=>{b=!1}},[a,f,g]);let t=j?.stats;return(0,b.jsx)("div",{onClick:h,style:{position:"fixed",inset:0,background:"rgba(0,0,0,.3)",zIndex:60,display:"flex",justifyContent:"flex-end"},children:(0,b.jsxs)("div",{onClick:a=>a.stopPropagation(),style:{width:"min(560px, 92vw)",height:"100%",background:"var(--background)",borderLeft:"1px solid var(--border)",overflowY:"auto",boxShadow:"-8px 0 30px rgba(0,0,0,.15)"},children:[(0,b.jsxs)("div",{style:{position:"sticky",top:0,background:"var(--background)",borderBottom:"1px solid var(--border)",padding:"14px 18px",display:"flex",alignItems:"center",gap:10},children:[(0,b.jsxs)("div",{style:{minWidth:0},children:[(0,b.jsxs)("div",{style:{fontSize:10.5,color:"var(--foreground-muted)"},children:["Agent 详情 · ",au.find(a=>a.key===f)?.label]}),(0,b.jsx)("div",{style:{fontSize:15,fontWeight:800,color:"var(--foreground)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a})]}),(0,b.jsx)("span",{style:{flex:1}}),(0,b.jsx)("a",{href:(0,aq.getApiUrl)(`/trace?agent=${encodeURIComponent(a)}`),style:{fontSize:11.5,color:"var(--primary)",textDecoration:"none",border:"1px solid var(--border)",borderRadius:7,padding:"5px 10px",whiteSpace:"nowrap"},children:"查看 trace →"}),(0,b.jsx)("button",{onClick:h,style:{border:"none",background:"transparent",color:"var(--foreground-muted)",fontSize:20,cursor:"pointer",lineHeight:1},children:"×"})]}),(0,b.jsxs)("div",{style:{padding:18,display:"flex",flexDirection:"column",gap:16},children:[r&&(0,b.jsxs)("div",{style:{color:"var(--error)",fontSize:13},children:["取数失败:",r]}),!j&&!r&&(0,b.jsx)("div",{style:{color:"var(--foreground-muted)",fontSize:13},children:"加载中…"}),j&&!j.found&&(0,b.jsx)("div",{style:{color:"var(--foreground-muted)",fontSize:13},children:"该窗口内无此 Agent 的数据"}),t&&j?.found&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(120px, 1fr))",gap:8},children:[(0,b.jsx)(aX,{label:"参与 Trace",v:aw(t.traces)}),(0,b.jsx)(aX,{label:"执行次数",v:aw(t.executions)}),(0,b.jsx)(aX,{label:"成功率",v:`${t.successRate}%`,tone:"good"}),(0,b.jsx)(aX,{label:"P95 时延",v:`${t.p95Latency}s`,tone:"latency"}),(0,b.jsx)(aX,{label:"Token(self)",v:aw(t.totalTokens)}),(0,b.jsx)(aX,{label:`成本(${j.currency})`,v:ay(t.cost),tone:"latency"}),(0,b.jsx)(aX,{label:"工具调用",v:aw(t.toolCalls)}),(0,b.jsx)(aX,{label:"模型调用",v:aw(t.llmCalls)})]}),(0,b.jsx)(aS,{title:"趋势",hint:"调用次数(柱) + P95 时延(线)",children:(0,b.jsx)(d.ResponsiveContainer,{width:"100%",height:220,children:(0,b.jsxs)(e.ComposedChart,{data:j.trend,margin:aZ,children:[(0,b.jsx)(o.CartesianGrid,{strokeDasharray:"3 3",stroke:i.border,vertical:!1}),(0,b.jsx)(m.XAxis,{dataKey:"label",stroke:i.fgMuted,tick:a$,interval:"preserveStartEnd"}),(0,b.jsx)(n.YAxis,{yAxisId:"c",width:40,stroke:i.fgMuted,tick:a$,allowDecimals:!1}),(0,b.jsx)(n.YAxis,{yAxisId:"l",orientation:"right",width:44,stroke:i.fgMuted,tick:a$,unit:"s"}),(0,b.jsx)(p.Tooltip,{contentStyle:a0}),(0,b.jsx)(ap,{verticalAlign:"top",align:"right",wrapperStyle:a_}),(0,b.jsx)(k.Bar,{yAxisId:"c",dataKey:"calls",name:"调用次数(左轴)",fill:i.primary,radius:[2,2,0,0]}),(0,b.jsx)(l.Line,{yAxisId:"l",type:"monotone",dataKey:"latencyP95",name:"P95 时延 s(右轴)",stroke:i.warning,strokeWidth:2,dot:!1})]})})}),j.topModels.length>0&&(0,b.jsx)(aS,{title:"常用模型",hint:"按 token 占用",children:(0,b.jsx)(aN,{data:j.topModels.map(a=>({name:a.model,value:a.tokens})),color:av,fmt:az})})]})]})]})})}function aX({label:a,v:c,tone:d}){return(0,b.jsxs)("div",{style:{background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:9,padding:"9px 11px"},children:[(0,b.jsx)("div",{style:{fontSize:10.5,color:"var(--foreground-muted)"},children:a}),(0,b.jsx)("div",{style:{fontSize:17,fontWeight:800,color:"good"===d?"var(--success)":"latency"===d?"var(--warning)":"var(--foreground)",fontFamily:"var(--font-mono, monospace)"},children:c})]})}let aY=260,aZ={top:8,right:16,bottom:4,left:0},a$={fontSize:10},a_={fontSize:11},a0={background:"var(--card-bg)",border:"1px solid var(--border-dark)",borderRadius:9,fontSize:11,boxShadow:"0 6px 24px rgba(20,22,30,.12)"};a.s(["default",()=>aA],659764)}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28main%29_dashboard_page_tsx_7eac7774._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[685260,a=>{"use strict";var b=a.i(187924),c=a.i(729936),d=a.i(572131),e=a.i(403512),f=a.i(233540),g=a.i(164831);let h=(0,g.default)("server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);var i=a.i(118343),j=a.i(590629),k=a.i(980180),l=a.i(752562),m=a.i(752357),n=a.i(597024);let o=(0,g.default)("badge-check",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),p=(0,g.default)("star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]),q=(0,g.default)("heart-pulse",[["path",{d:"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5",key:"mvr1a0"}],["path",{d:"M3.22 13H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27",key:"auskq0"}]]);var r=a.i(118688),s=a.i(168370),t=a.i(519783),u=a.i(875160),v=a.i(211134),w=a.i(575110),x=a.i(943408),y=a.i(106927),z=a.i(757430);let A=[{id:"openai",label:"OpenAI",category:"frontier",baseUrl:"https://api.openai.com/v1",defaultModel:"gpt-4o-mini",suggestedModels:["gpt-5","gpt-5-mini","gpt-4o","gpt-4o-mini","gpt-4.1","o3","o3-mini","o4-mini"],docsUrl:"https://platform.openai.com/docs/models",oaiCompat:!0,initials:"OA",logoSlug:"openai"},{id:"anthropic",label:"Anthropic",category:"frontier",baseUrl:"https://api.anthropic.com/v1",defaultModel:"claude-sonnet-4-6",suggestedModels:["claude-opus-4-7","claude-sonnet-4-6","claude-haiku-4-5","claude-3-5-sonnet-latest"],docsUrl:"https://docs.anthropic.com/en/docs/models-overview",oaiCompat:!0,initials:"AN",logoSlug:"anthropic",note:"使用 Anthropic OpenAI 兼容端点(/v1/messages 自动转换)。"},{id:"gemini",label:"Google Gemini",category:"frontier",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai/",defaultModel:"gemini-2.5-flash",suggestedModels:["gemini-2.5-pro","gemini-2.5-flash","gemini-2.0-flash","gemini-1.5-pro"],docsUrl:"https://ai.google.dev/gemini-api/docs/openai",oaiCompat:!0,initials:"GM",logoSlug:"gemini",note:"走 Gemini OpenAI 兼容层(generativelanguage.googleapis.com)。"},{id:"azure-openai",label:"Azure OpenAI",category:"frontier",baseUrl:"https://YOUR-RESOURCE.openai.azure.com/openai",defaultModel:"gpt-4o",suggestedModels:["gpt-4o","gpt-4o-mini","gpt-4-turbo","o1-mini"],docsUrl:"https://learn.microsoft.com/azure/ai-services/openai/reference",oaiCompat:!0,initials:"AZ",logoSlug:"azure",note:"Base URL 形如 https://<resource>.openai.azure.com/openai/deployments/<deployment>"},{id:"xai",label:"xAI Grok",category:"frontier",baseUrl:"https://api.x.ai/v1",defaultModel:"grok-3",suggestedModels:["grok-4","grok-3","grok-3-mini","grok-2-1212","grok-2-vision-1212"],docsUrl:"https://docs.x.ai/api",oaiCompat:!0,initials:"GR",logoSlug:"grok"},{id:"mistral",label:"Mistral AI",category:"frontier",baseUrl:"https://api.mistral.ai/v1",defaultModel:"mistral-large-latest",suggestedModels:["mistral-large-latest","mistral-large-2411","mistral-small-latest","codestral-2501","open-mistral-nemo"],docsUrl:"https://docs.mistral.ai/getting-started/models/models_overview/",oaiCompat:!0,initials:"MI",logoSlug:"mistral"},{id:"cohere",label:"Cohere",category:"frontier",baseUrl:"https://api.cohere.ai/compatibility/v1",defaultModel:"command-r-plus",suggestedModels:["command-r-plus","command-r","command-r7b"],docsUrl:"https://docs.cohere.com/docs/compatibility-api",oaiCompat:!0,initials:"CO",logoSlug:"cohere"},{id:"openrouter",label:"OpenRouter",category:"aggregator",baseUrl:"https://openrouter.ai/api/v1",defaultModel:"openai/gpt-4o-mini",suggestedModels:["anthropic/claude-3.5-sonnet","openai/gpt-4o","meta-llama/llama-3.3-70b-instruct","google/gemini-2.0-flash-exp:free"],docsUrl:"https://openrouter.ai/docs",oaiCompat:!0,initials:"OR",logoSlug:"openrouter"},{id:"together",label:"Together AI",category:"aggregator",baseUrl:"https://api.together.xyz/v1",defaultModel:"meta-llama/Llama-3.3-70B-Instruct-Turbo",suggestedModels:["meta-llama/Llama-3.3-70B-Instruct-Turbo","deepseek-ai/DeepSeek-V3","Qwen/Qwen2.5-72B-Instruct-Turbo"],docsUrl:"https://docs.together.ai/docs/quickstart",oaiCompat:!0,initials:"TG",logoSlug:"together"},{id:"fireworks",label:"Fireworks AI",category:"aggregator",baseUrl:"https://api.fireworks.ai/inference/v1",defaultModel:"accounts/fireworks/models/llama-v3p3-70b-instruct",suggestedModels:["accounts/fireworks/models/llama-v3p3-70b-instruct","accounts/fireworks/models/deepseek-v3","accounts/fireworks/models/qwen2p5-72b-instruct"],docsUrl:"https://docs.fireworks.ai",oaiCompat:!0,initials:"FW",logoSlug:"fireworks"},{id:"groq",label:"Groq",category:"aggregator",baseUrl:"https://api.groq.com/openai/v1",defaultModel:"llama-3.3-70b-versatile",suggestedModels:["llama-3.3-70b-versatile","llama-3.1-8b-instant","mixtral-8x7b-32768"],docsUrl:"https://console.groq.com/docs/models",oaiCompat:!0,initials:"GQ",logoSlug:"groq"},{id:"deepinfra",label:"DeepInfra",category:"aggregator",baseUrl:"https://api.deepinfra.com/v1/openai",defaultModel:"meta-llama/Meta-Llama-3.1-70B-Instruct",suggestedModels:["meta-llama/Meta-Llama-3.1-70B-Instruct","deepseek-ai/DeepSeek-V3","Qwen/Qwen2.5-72B-Instruct"],docsUrl:"https://deepinfra.com/docs",oaiCompat:!0,initials:"DI",logoSlug:"deepinfra"},{id:"perplexity",label:"Perplexity",category:"aggregator",baseUrl:"https://api.perplexity.ai",defaultModel:"sonar",suggestedModels:["sonar","sonar-pro","sonar-reasoning","sonar-reasoning-pro"],docsUrl:"https://docs.perplexity.ai",oaiCompat:!0,initials:"PX",logoSlug:"perplexity"},{id:"nvidia",label:"NVIDIA NIM",category:"aggregator",baseUrl:"https://integrate.api.nvidia.com/v1",defaultModel:"meta/llama-3.3-70b-instruct",suggestedModels:["meta/llama-3.3-70b-instruct","deepseek-ai/deepseek-r1","nvidia/llama-3.1-nemotron-70b-instruct"],docsUrl:"https://docs.api.nvidia.com",oaiCompat:!0,initials:"NV",logoSlug:"nvidia"},{id:"databricks",label:"Databricks",category:"aggregator",baseUrl:"https://YOUR-WORKSPACE.cloud.databricks.com/serving-endpoints",defaultModel:"databricks-meta-llama-3-3-70b-instruct",suggestedModels:["databricks-meta-llama-3-3-70b-instruct","databricks-dbrx-instruct"],docsUrl:"https://docs.databricks.com/aws/en/machine-learning/foundation-models/api-reference",oaiCompat:!0,initials:"DB",logoSlug:"databricks",note:"Base URL 形如 https://<workspace>.cloud.databricks.com/serving-endpoints"},{id:"novita",label:"Novita AI",category:"aggregator",baseUrl:"https://api.novita.ai/v3/openai",defaultModel:"meta-llama/llama-3.3-70b-instruct",suggestedModels:["meta-llama/llama-3.3-70b-instruct","qwen/qwen-2.5-72b-instruct"],docsUrl:"https://novita.ai/docs/api-reference",oaiCompat:!0,initials:"NV",logoSlug:"novita"},{id:"hyperbolic",label:"Hyperbolic",category:"aggregator",baseUrl:"https://api.hyperbolic.xyz/v1",defaultModel:"meta-llama/Meta-Llama-3.1-70B-Instruct",suggestedModels:["meta-llama/Meta-Llama-3.1-70B-Instruct","Qwen/Qwen2.5-Coder-32B-Instruct"],docsUrl:"https://docs.hyperbolic.xyz",oaiCompat:!0,initials:"HY",logoSlug:"hyperbolic"},{id:"deepseek-official",label:"DeepSeek (Official)",category:"china",baseUrl:"https://api.deepseek.com",defaultModel:"deepseek-chat",suggestedModels:["deepseek-chat","deepseek-reasoner","deepseek-v3.1"],docsUrl:"https://api-docs.deepseek.com",oaiCompat:!0,initials:"DS",logoSlug:"deepseek"},{id:"siliconflow",label:"SiliconFlow / 硅基流动",category:"china",baseUrl:"https://api.siliconflow.cn/v1",defaultModel:"deepseek-ai/DeepSeek-V3",suggestedModels:["deepseek-ai/DeepSeek-V3","deepseek-ai/DeepSeek-R1","Qwen/Qwen2.5-72B-Instruct","meta-llama/Meta-Llama-3.1-70B-Instruct"],docsUrl:"https://docs.siliconflow.cn",oaiCompat:!0,initials:"SF",logoSlug:"siliconcloud"},{id:"moonshot",label:"Moonshot / Kimi",category:"china",baseUrl:"https://api.moonshot.cn/v1",defaultModel:"kimi-latest",suggestedModels:["kimi-k2","kimi-latest","moonshot-v1-128k","moonshot-v1-32k","moonshot-v1-8k"],docsUrl:"https://platform.moonshot.cn/docs",oaiCompat:!0,initials:"MK",logoSlug:"moonshot"},{id:"zhipu",label:"Zhipu GLM / 智谱",category:"china",baseUrl:"https://open.bigmodel.cn/api/paas/v4",defaultModel:"glm-4.5",suggestedModels:["glm-4.5","glm-4-plus","glm-4-air","glm-4-long","glm-4-flash"],docsUrl:"https://bigmodel.cn/dev/api",oaiCompat:!0,initials:"ZP",logoSlug:"zhipu"},{id:"doubao",label:"Doubao / 火山方舟",category:"china",baseUrl:"https://ark.cn-beijing.volces.com/api/v3",defaultModel:"doubao-1.5-pro-32k",suggestedModels:["doubao-1.5-pro-32k","doubao-1.5-pro-256k","doubao-pro-32k","doubao-lite-32k"],docsUrl:"https://www.volcengine.com/docs/82379",oaiCompat:!0,initials:"DB",logoSlug:"doubao",note:'模型名通常是火山方舟"接入点 ID",不是发布的模型名。'},{id:"qwen",label:"Tongyi Qwen / 通义千问",category:"china",baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",defaultModel:"qwen-plus",suggestedModels:["qwen3-max","qwen3-plus","qwen-max","qwen-plus","qwen-turbo","qwen2.5-72b-instruct"],docsUrl:"https://help.aliyun.com/zh/model-studio/developer-reference/use-qwen-by-calling-api",oaiCompat:!0,initials:"QW",logoSlug:"qwen"},{id:"hunyuan",label:"Tencent Hunyuan / 腾讯混元",category:"china",baseUrl:"https://api.hunyuan.cloud.tencent.com/v1",defaultModel:"hunyuan-pro",suggestedModels:["hunyuan-turbo","hunyuan-pro","hunyuan-standard","hunyuan-lite"],docsUrl:"https://cloud.tencent.com/document/product/1729/97732",oaiCompat:!0,initials:"HY",logoSlug:"hunyuan"},{id:"yi",label:"01.AI Yi / 零一万物",category:"china",baseUrl:"https://api.lingyiwanwu.com/v1",defaultModel:"yi-large",suggestedModels:["yi-large","yi-large-turbo","yi-medium","yi-vision"],docsUrl:"https://platform.lingyiwanwu.com/docs",oaiCompat:!0,initials:"YI",logoSlug:"yi"},{id:"modelscope",label:"ModelScope / 魔搭",category:"china",baseUrl:"https://api-inference.modelscope.cn/v1",defaultModel:"Qwen/Qwen2.5-72B-Instruct",suggestedModels:["Qwen/Qwen2.5-72B-Instruct","deepseek-ai/DeepSeek-V3","meta-llama/Llama-3.3-70B-Instruct"],docsUrl:"https://modelscope.cn/docs/model-service/API-Inference",oaiCompat:!0,initials:"MS",logoSlug:"modelscope"},{id:"ppio",label:"PPIO / 派欧云",category:"china",baseUrl:"https://api.ppinfra.com/v3/openai",defaultModel:"deepseek/deepseek-v3",suggestedModels:["deepseek/deepseek-v3","deepseek/deepseek-r1","qwen/qwen2.5-72b-instruct","meta-llama/llama-3.3-70b-instruct"],docsUrl:"https://ppinfra.com/docs",oaiCompat:!0,initials:"PP",logoSlug:"ppio"},{id:"baidu",label:"Baidu Qianfan / 文心一言",category:"china",baseUrl:"https://qianfan.baidubce.com/v2",defaultModel:"ernie-4.0-8k",suggestedModels:["ernie-4.0-8k","ernie-4.0-turbo-8k","ernie-3.5-8k"],docsUrl:"https://cloud.baidu.com/doc/qianfan-api/index.html",oaiCompat:!0,initials:"BD",logoSlug:"wenxin"},{id:"minimax",label:"MiniMax",category:"china",baseUrl:"https://api.minimax.chat/v1",defaultModel:"abab6.5s-chat",suggestedModels:["abab6.5s-chat","abab6.5-chat","minimax-text-01"],docsUrl:"https://platform.minimaxi.com/document/algorithm-concept",oaiCompat:!0,initials:"MM",logoSlug:"minimax"},{id:"stepfun",label:"Stepfun / 阶跃星辰",category:"china",baseUrl:"https://api.stepfun.com/v1",defaultModel:"step-1-8k",suggestedModels:["step-1-8k","step-1-32k","step-2-16k"],docsUrl:"https://platform.stepfun.com/docs",oaiCompat:!0,initials:"ST",logoSlug:"stepfun"},{id:"ollama",label:"Ollama",category:"selfhost",baseUrl:"http://localhost:11434/v1",defaultModel:"llama3.3",suggestedModels:["llama3.3","qwen2.5","deepseek-r1","mistral"],docsUrl:"https://ollama.com/library",oaiCompat:!0,initials:"OL",logoSlug:"ollama",note:"本地 Ollama 通常无需 API Key,留空即可。"},{id:"vllm",label:"vLLM",category:"selfhost",baseUrl:"http://localhost:8000/v1",defaultModel:"meta-llama/Meta-Llama-3-8B-Instruct",suggestedModels:["meta-llama/Meta-Llama-3-8B-Instruct","Qwen/Qwen2.5-7B-Instruct"],docsUrl:"https://docs.vllm.ai/en/stable/serving/openai_compatible_server.html",oaiCompat:!0,initials:"VL",logoSlug:"vllm",note:"vLLM 默认以 OpenAI 兼容模式启动,API Key 任意字符串即可。"},{id:"lmstudio",label:"LM Studio",category:"selfhost",baseUrl:"http://localhost:1234/v1",defaultModel:"local-model",suggestedModels:["local-model"],docsUrl:"https://lmstudio.ai/docs/local-server",oaiCompat:!0,initials:"LM",logoSlug:"lmstudio",note:'在 LM Studio 中开启 "Local Inference Server",端口默认 1234。'},{id:"tgi",label:"Text Generation Inference (TGI)",category:"selfhost",baseUrl:"http://localhost:8080/v1",defaultModel:"tgi",suggestedModels:["tgi"],docsUrl:"https://huggingface.co/docs/text-generation-inference/messages_api",oaiCompat:!0,initials:"TG",logoSlug:"huggingface"},{id:"xinference",label:"Xinference",category:"selfhost",baseUrl:"http://localhost:9997/v1",defaultModel:"qwen2.5-instruct",suggestedModels:["qwen2.5-instruct","llama-3.3-instruct","deepseek-r1-distill-qwen"],docsUrl:"https://inference.readthedocs.io/en/latest/models/builtin/llm.html",oaiCompat:!0,initials:"XI",logoSlug:"xinference",note:"通过模型 UID 接入 Xinference 本地实例。"},{id:"localai",label:"LocalAI",category:"selfhost",baseUrl:"http://localhost:8080/v1",defaultModel:"gpt-3.5-turbo",suggestedModels:["gpt-3.5-turbo"],docsUrl:"https://localai.io",oaiCompat:!0,initials:"LA",logoSlug:"localai",note:"OpenAI 兼容的本地推理网关,模型名按本地配置填写。"},{id:"custom",label:"Custom (OpenAI Compatible)",category:"selfhost",baseUrl:"",defaultModel:"",suggestedModels:[],oaiCompat:!0,initials:"CU",note:"任何兼容 OpenAI /v1/chat/completions 协议的端点。"}],B=A.reduce((a,b)=>(a[b.id]=b,a),{}),C=[{id:"frontier",labelZh:"主流闭源 SaaS",labelEn:"Frontier SaaS"},{id:"aggregator",labelZh:"推理聚合 / 路由",labelEn:"Inference Aggregators"},{id:"china",labelZh:"国内厂商",labelEn:"China Providers"},{id:"selfhost",labelZh:"本地 / 自部署",labelEn:"Self-hosted"}],D={"deepseek-official":{baseUrl:"https://api.deepseek.com",model:"deepseek-chat"},siliconflow:{baseUrl:"https://api.siliconflow.cn/v1",model:"deepseek-ai/DeepSeek-V3"},openai:{baseUrl:"https://api.openai.com/v1",model:"gpt-4o"},anthropic:{baseUrl:"https://api.anthropic.com/v1",model:"claude-3-5-sonnet-20240620"},custom:{baseUrl:"",model:""}},E={"deepseek-official":{label:"DeepSeek (Official)",monogram:"DS",category:"cn"},siliconflow:{label:"SiliconFlow",monogram:"SF",category:"cn"},openai:{label:"OpenAI",monogram:"OA",category:"saas"},anthropic:{label:"Anthropic",monogram:"AN",category:"saas"},custom:{label:"Custom (OpenAI Compatible)",monogram:"CX",category:"other"}},F=a=>!!a&&a.startsWith("default_"),G=a=>a.apiKey?"ok":"unconfigured";function H({}={}){let{user:a}=(0,x.useAuth)(),{t:c,locale:g}=(0,y.useLocale)(),[h,i]=(0,d.useState)([]),[j,k]=(0,d.useState)("default"),[l,n]=(0,d.useState)(null),[o,p]=(0,d.useState)({id:"new",name:"zh"===g?"新配置":"New Config",provider:"deepseek-official",model:"deepseek-chat"}),[q,r]=(0,d.useState)(!1),[s,t]=(0,d.useState)(null),[u,v]=(0,d.useState)(!1),[A,B]=(0,d.useState)(""),[C,D]=(0,d.useState)("all"),[O,P]=(0,d.useState)(null),[Q,U]=(0,d.useState)({}),[ad,ae]=(0,d.useState)(!1),[af,ag]=(0,d.useState)(!1),[ah,ai]=(0,d.useState)(null),aj=(0,d.useCallback)(async()=>{if(!a)return void v(!0);try{let b=await (0,w.apiFetch)(`/api/eval/settings?user=${encodeURIComponent(a)}`);if(b.ok){let a=await b.json();a.configs&&(i(a.configs),k(a.activeConfigId||a.configs[0]?.id||"default"))}}catch(a){console.error("Failed to fetch settings",a)}finally{v(!0)}},[a]);(0,d.useEffect)(()=>{aj()},[aj]),(0,d.useEffect)(()=>{U(a=>{let b={...a};for(let a of h)a.id in b||(b[a.id]=G(a));for(let a of Object.keys(b))h.find(b=>b.id===a)||delete b[a];return b})},[h]);let ak=(0,d.useCallback)(async()=>{if(ad||0===h.length)return;ae(!0),U(a=>{let b={...a};for(let a of h)b[a.id]=a.apiKey?"checking":"unconfigured";return b});let b=await Promise.all(h.map(async b=>{if(!b.apiKey)return[b.id,"unconfigured"];try{let c=await (0,w.apiFetch)("/api/eval/settings/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:b.provider,apiKey:b.apiKey,baseUrl:b.baseUrl,model:b.model,user:a,configId:b.id})}),d=await c.json().catch(()=>({success:!1}));return[b.id,d.success?"ok":"failed"]}catch{return[b.id,"failed"]}}));U(a=>{let c={...a};for(let[a,d]of b)c[a]=d;return c}),ae(!1)},[h,ad]),al=(0,d.useCallback)(async(b,c)=>(0,w.apiFetch)("/api/eval/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{activeConfigId:c,configs:b},user:a})}),[a]),am=async()=>{r(!0),t({type:"info",msg:"zh"===g?"正在测试连接…":"Testing connection…"});try{let b=[...h],c={...o};"new"===c.id?(c.id=`config_${Date.now()}`,b.push(c)):b=b.map(a=>a.id===c.id?c:a);let d=await (0,w.apiFetch)("/api/eval/settings/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:c.provider,apiKey:c.apiKey,baseUrl:c.baseUrl,model:c.model,user:a,configId:c.id})}),e=await d.json();if(!e.success){t({type:"error",msg:("zh"===g?"连接测试失败:":"Connection test failed: ")+e.error}),r(!1);return}let f=j;(1===b.length||"default"===j)&&(f=c.id);let i=await al(b,f);if(i.ok)await aj(),n(null),ai(null),t({type:"success",msg:"zh"===g?"已保存":"Saved"}),setTimeout(()=>t(null),1500);else{let a=await i.json().catch(()=>({}));t({type:"error",msg:("zh"===g?"保存失败:":"Save failed: ")+(a.error||i.statusText)})}}catch(a){t({type:"error",msg:`Error: ${a.message}`})}finally{r(!1)}},ar=async a=>{(await al(h,a)).ok&&(k(a),t({type:"success",msg:"zh"===g?"默认模型已切换":"Active model updated"}),setTimeout(()=>t(null),1500))},as=async a=>{let b=h.filter(b=>b.id!==a),c=j;a===j&&(c=b[0]?.id||"default"),(await al(b,c)).ok&&(i(b),k(c),t({type:"success",msg:"zh"===g?"已删除":"Deleted"}),setTimeout(()=>t(null),1500))},at=()=>{ag(!0),ai(null),n(null),t(null)},au=(0,d.useMemo)(()=>{let a=A.trim().toLowerCase();return h.filter(b=>("all"===C||E[b.provider]?.category===C)&&(!a||b.name.toLowerCase().includes(a)||(b.model||"").toLowerCase().includes(a)||(b.baseUrl||"").toLowerCase().includes(a)||(E[b.provider]?.label||b.provider||"").toLowerCase().includes(a)))},[h,A,C]),av=(0,d.useMemo)(()=>{let a={saas:0,cn:0,local:0,other:0};for(let b of h){let c=E[b.provider]?.category;c&&(a[c]+=1)}return a},[h]),aw=h.find(a=>a.id===j),ax=new Set(h.map(a=>a.provider)).size;return u?(0,b.jsxs)("div",{style:V,children:[(0,b.jsxs)("div",{style:W,children:[s&&(0,b.jsx)(I,{status:s}),af?(0,b.jsx)(S,{onPick:a=>{var b;p({id:"new",name:a.label,provider:"openai"===(b=a.id)?"openai":"anthropic"===b?"anthropic":"deepseek-official"===b?"deepseek-official":"siliconflow"===b?"siliconflow":"custom",baseUrl:a.baseUrl,model:a.defaultModel,apiKey:""}),ai(a),ag(!1),n("new"),t(null)},onCancel:()=>ag(!1),locale:g}):l?(0,b.jsx)(T,{config:o,setConfig:p,onCancel:()=>{n(null),ai(null)},onReselect:"new"===l?()=>{n(null),ag(!0)}:void 0,onSave:am,isSaving:q,isDefault:F(l),pickedProvider:ah,locale:g}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{style:X,children:[(0,b.jsx)("p",{style:Y,children:"zh"===g?(0,b.jsxs)(b.Fragment,{children:["注册并管理评测 / 优化使用的 ",(0,b.jsx)("b",{style:Z,children:"LLM"}),",可切换默认、编辑参数、管理 API Key。兼容 ",(0,b.jsx)("b",{style:Z,children:"OpenAI / Anthropic / DeepSeek"})," 等主流厂商,亦支持",(0,b.jsx)("b",{style:Z,children:"国内厂商"}),"与",(0,b.jsx)("b",{style:Z,children:"本地推理"}),"部署。"]}):(0,b.jsxs)(b.Fragment,{children:["Register and manage LLMs used for evaluation/optimization. Set the default, edit parameters, and manage API keys. Compatible with ",(0,b.jsx)("b",{style:Z,children:"OpenAI / Anthropic / DeepSeek"})," as well as ",(0,b.jsx)("b",{style:Z,children:"regional providers"})," and ",(0,b.jsx)("b",{style:Z,children:"self-hosted"})," inference."]})}),(0,b.jsxs)("button",{style:aL,onClick:at,children:[(0,b.jsx)(e.Plus,{size:14,strokeWidth:2.4}),"zh"===g?"新增模型":"New Model"]})]}),(0,b.jsxs)("div",{style:$,children:[(0,b.jsxs)("div",{style:_,children:[(0,b.jsxs)("div",{style:an,children:[(0,b.jsxs)("div",{style:ao,children:[(0,b.jsx)(f.Search,{size:14,strokeWidth:2,style:{position:"absolute",left:11,top:"50%",transform:"translateY(-50%)",color:"var(--foreground-muted)"}}),(0,b.jsx)("input",{type:"text",placeholder:"zh"===g?"搜索名称 / 模型 / Base URL":"Search name / model / Base URL",value:A,onChange:a=>B(a.target.value),style:ap})]}),(0,b.jsxs)("div",{style:aq,children:[(0,b.jsx)(J,{active:"all"===C,onClick:()=>D("all"),count:h.length,children:"zh"===g?"全部":"All"}),(0,b.jsx)(J,{active:"saas"===C,onClick:()=>D("saas"),count:av.saas,children:"zh"===g?"主流闭源":"SaaS"}),(0,b.jsx)(J,{active:"cn"===C,onClick:()=>D("cn"),count:av.cn,children:"zh"===g?"国内厂商":"Regional"}),(0,b.jsx)(J,{active:"other"===C,onClick:()=>D("other"),count:av.other,children:"zh"===g?"自定义":"Custom"})]})]}),(0,b.jsxs)("div",{style:ab,children:[(0,b.jsx)("span",{style:{fontSize:13.5,fontWeight:600,color:"var(--foreground)"},children:"zh"===g?"已注册模型":"Registered Models"}),(0,b.jsx)("span",{style:ac,children:au.length}),(0,b.jsx)("span",{style:{flex:1}}),(0,b.jsx)("span",{style:{fontSize:11.5,color:"var(--foreground-muted)"},children:"zh"===g?`容量 ${h.length} / 32`:`Capacity ${h.length} / 32`})]}),0===au.length?(0,b.jsx)(R,{locale:g,hasConfigs:h.length>0,onAdd:at,onReset:()=>{B(""),D("all")}}):(0,b.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:au.map(a=>(0,b.jsx)(K,{config:a,isActive:a.id===j,isDefault:F(a.id),health:Q[a.id],onActivate:()=>ar(a.id),onEdit:()=>{p({...a}),ai(null),n(a.id),ag(!1),t(null)},onDelete:()=>P(a),locale:g},a.id))}),(0,b.jsxs)("div",{style:aS,children:[(0,b.jsx)("div",{style:aT,children:(0,b.jsx)(m.Info,{size:16})}),(0,b.jsxs)("div",{style:{flex:1,fontSize:12.5,color:"var(--foreground-secondary)",lineHeight:1.6},children:[(0,b.jsx)("b",{style:{color:"var(--foreground)",fontWeight:600},children:"zh"===g?"提示":"Tip"})," · ","zh"===g?"至少保留一个默认模型,用于评测与优化任务的兜底调用。删除默认模型前,请先指定其它模型为默认。":"Keep at least one default model for evaluation/optimization fallback. Switch the default before deleting it."]})]})]}),(0,b.jsxs)("aside",{style:aa,children:[(0,b.jsx)(L,{active:aw,providerKinds:ax,registeredCount:h.length,locale:g}),(0,b.jsx)(M,{configs:h,healthMap:Q,isRechecking:ad,onRecheck:ak,locale:g}),(0,b.jsx)(N,{locale:g})]})]})]})]}),(0,b.jsx)(z.ConfirmDialog,{open:!!O,onOpenChange:a=>!a&&P(null),tone:"danger",title:"zh"===g?"删除该模型?":"Delete this model?",description:O?"zh"===g?`将永久删除「${O.name}」配置,无法恢复。`:`"${O.name}" will be permanently removed.`:"",confirmText:"zh"===g?"删除":"Delete",cancelText:"zh"===g?"取消":"Cancel",onConfirm:async()=>{O&&await as(O.id)}})]}):(0,b.jsx)("div",{style:{padding:32,color:"var(--foreground-muted)",fontSize:12},children:c("common.loading")})}function I({status:a}){let c="success"===a.type?{bg:"var(--success-subtle)",fg:"var(--success)",border:"var(--success-subtle-border)"}:"error"===a.type?{bg:"var(--error-subtle)",fg:"var(--error)",border:"var(--error-subtle-border)"}:{bg:"var(--primary-subtle)",fg:"var(--primary)",border:"var(--primary-subtle-border)"};return(0,b.jsxs)("div",{style:{padding:"8px 12px",marginBottom:14,borderRadius:8,background:c.bg,color:c.fg,border:`1px solid ${c.border}`,fontSize:12,fontWeight:500,display:"flex",alignItems:"center",gap:6},children:["success"===a.type&&(0,b.jsx)(l.Check,{size:13,strokeWidth:2.5}),a.msg]})}function J({active:a,onClick:c,count:d,children:e}){return(0,b.jsxs)("button",{type:"button",onClick:c,"aria-pressed":a,className:"ai-filter-chip","data-active":a?"true":"false",style:ar,children:[e,"number"==typeof d&&d>0&&(0,b.jsx)("span",{className:"ai-filter-chip__count",children:d})]})}function K({config:a,isActive:c,isDefault:d,health:e,onActivate:f,onEdit:g,onDelete:h,locale:m}){let p=E[a.provider]??{label:a.provider||"Unknown",monogram:(a.provider?.slice(0,2)||"??").toUpperCase(),category:"other"},q=function(a,b){let c=B[a];if(c)return c;if(!b)return;let d=b.replace(/\/+$/,"").toLowerCase();return A.find(a=>{if(!a.baseUrl)return!1;let b=a.baseUrl.replace(/\/+$/,"").toLowerCase();return d===b||d.startsWith(b)})}(a.provider,a.baseUrl),r=e??G(a);return(0,b.jsxs)("article",{style:{...as,borderColor:c?"var(--primary-subtle-border)":"var(--card-border)",background:c?"linear-gradient(180deg, var(--primary-subtle) 0%, var(--card-bg) 56px)":"var(--card-bg)"},children:[c&&(0,b.jsx)("span",{style:at}),(0,b.jsx)(P,{slug:q?.logoSlug,initials:p.monogram,size:48,radius:12}),(0,b.jsxs)("div",{style:{minWidth:0},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap",marginBottom:6},children:[(0,b.jsx)("span",{style:av,children:a.name}),c&&(0,b.jsxs)("span",{style:ax,children:[(0,b.jsx)(o,{size:11,strokeWidth:2.5}),"zh"===m?"当前默认":"Default"]}),"ok"===r&&(0,b.jsxs)("span",{style:ay,children:[(0,b.jsx)("span",{style:aD}),"zh"===m?"正常":"Healthy"]}),"checking"===r&&(0,b.jsxs)("span",{style:aA,children:[(0,b.jsx)(u.Loader2,{size:11,strokeWidth:2.4,style:{animation:"spin 1s linear infinite"}}),"zh"===m?"连接中":"Checking"]}),"failed"===r&&(0,b.jsxs)("span",{style:aB,children:[(0,b.jsx)(v.XCircle,{size:11,strokeWidth:2.4}),"zh"===m?"Key 已失效":"Key invalid"]}),"unconfigured"===r&&(0,b.jsx)("span",{style:az,children:"zh"===m?"未设置 Key":"No key"}),d&&(0,b.jsx)("span",{style:aC,children:"zh"===m?"系统默认":"System"})]}),(0,b.jsxs)("div",{style:aE,children:[(0,b.jsxs)("span",{style:aF,children:[(0,b.jsx)("span",{style:aG,children:"Provider"}),(0,b.jsx)("span",{style:{...aH,fontFamily:"var(--font-mono)",fontSize:12},children:p.label})]}),(0,b.jsx)("span",{style:aI}),(0,b.jsxs)("span",{style:aF,children:[(0,b.jsx)("span",{style:aG,children:"Model"}),(0,b.jsx)("span",{style:{...aH,fontFamily:"var(--font-mono)",fontSize:12},children:a.model||"—"})]}),a.baseUrl&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{style:aI}),(0,b.jsxs)("span",{style:aF,children:[(0,b.jsx)("span",{style:aG,children:"Base URL"}),(0,b.jsx)("span",{style:{...aH,fontFamily:"var(--font-mono)",fontSize:12},title:a.baseUrl,children:a.baseUrl})]})]})]}),(0,b.jsxs)("div",{style:aJ,children:[(0,b.jsx)(i.Key,{size:12,strokeWidth:2.2,style:{color:"var(--primary)"}}),a.apiKey?(0,b.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:12},children:a.apiKey}):(0,b.jsx)("span",{style:{color:"var(--foreground-muted)",fontFamily:"var(--font-mono)",fontSize:12},children:"zh"===m?"(未设置)":"(not set)"})]})]}),(0,b.jsxs)("div",{style:aK,children:[c?(0,b.jsxs)("button",{style:aO,disabled:!0,children:[(0,b.jsx)(n.CircleCheck,{size:13,strokeWidth:2.4}),"zh"===m?"当前使用":"In use"]}):(0,b.jsxs)("button",{style:aN,onClick:f,children:[(0,b.jsx)(l.Check,{size:13,strokeWidth:2.2}),"zh"===m?"设为默认":"Set default"]}),!d&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("button",{style:aN,onClick:g,children:[(0,b.jsx)(j.Pencil,{size:13,strokeWidth:2.2}),"zh"===m?"编辑":"Edit"]}),(0,b.jsxs)("button",{style:aP,onClick:h,children:[(0,b.jsx)(k.Trash2,{size:13,strokeWidth:2.2}),"zh"===m?"删除":"Delete"]})]})]})]})}function L({active:a,providerKinds:c,registeredCount:d,locale:e}){return(0,b.jsxs)("section",{style:ad,children:[(0,b.jsxs)("header",{style:ae,children:[(0,b.jsx)(p,{size:13,strokeWidth:2.2,style:{color:"var(--primary)"}}),(0,b.jsx)("span",{children:"zh"===e?"当前默认":"Current Default"})]}),a?(0,b.jsxs)("ul",{style:af,children:[(0,b.jsx)(O,{label:"zh"===e?"名称":"Name",value:a.name,bold:!0}),(0,b.jsx)(O,{label:"Provider",value:a.provider,mono:!0}),(0,b.jsx)(O,{label:"Model",value:a.model||"—",mono:!0}),a.baseUrl&&(0,b.jsx)(O,{label:"Base URL",value:a.baseUrl,mono:!0,ellipsis:!0}),(0,b.jsx)(O,{label:"zh"===e?"已注册":"Registered",value:`${d} / 32`}),(0,b.jsx)(O,{label:"zh"===e?"供应商种类":"Providers",value:String(c)})]}):(0,b.jsx)("div",{style:{padding:"4px 0",fontSize:12,color:"var(--foreground-muted)"},children:"zh"===e?"尚未选定默认模型。":"No default selected."})]})}function M({configs:a,healthMap:c,isRechecking:d,onRecheck:e,locale:f}){return(0,b.jsxs)("section",{style:ad,children:[(0,b.jsxs)("header",{style:ae,children:[(0,b.jsx)(q,{size:13,strokeWidth:2.2,style:{color:"var(--success)"}}),(0,b.jsx)("span",{children:"zh"===f?"健康检查":"Health Check"})]}),0===a.length?(0,b.jsx)("div",{style:{padding:"4px 0",fontSize:12,color:"var(--foreground-muted)"},children:"zh"===f?"暂无模型可检查。":"No models to check."}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("ul",{style:{display:"flex",flexDirection:"column",gap:8,padding:0,margin:0,listStyle:"none"},children:a.map(a=>{let d=c[a.id]??G(a);return(0,b.jsxs)("li",{style:ag,children:[(0,b.jsx)("span",{style:{flex:1,minWidth:0,fontSize:12.5,color:"var(--foreground)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:a.model||a.name,children:a.model||a.name}),(0,b.jsx)(Q,{state:d,locale:f})]},a.id)})}),(0,b.jsxs)("button",{style:ah,onClick:e,disabled:d,children:[(0,b.jsx)(t.RefreshCw,{size:12,strokeWidth:2.2,style:d?{animation:"spin 1s linear infinite"}:void 0}),d?"zh"===f?"检查中…":"Checking…":"zh"===f?"重新检查":"Re-check"]})]})]})}function N({locale:a}){return(0,b.jsxs)("section",{style:ad,children:[(0,b.jsxs)("header",{style:ae,children:[(0,b.jsx)(r.BookOpen,{size:13,strokeWidth:2.2,style:{color:"var(--foreground-secondary)"}}),(0,b.jsx)("span",{children:"zh"===a?"相关文档":"Related Docs"})]}),(0,b.jsx)("ul",{style:{display:"flex",flexDirection:"column",gap:2,padding:0,margin:0,listStyle:"none"},children:("zh"===a?[{label:"如何获取 API Key",href:"#"},{label:"密钥加密与轮转策略",href:"#"},{label:"模型注册最佳实践",href:"#"}]:[{label:"How to obtain an API Key",href:"#"},{label:"Key encryption & rotation",href:"#"},{label:"Model registry best practices",href:"#"}]).map(a=>(0,b.jsx)("li",{children:(0,b.jsxs)("a",{href:a.href,style:ai,children:[(0,b.jsx)("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.label}),(0,b.jsx)(s.ExternalLink,{size:12,strokeWidth:2,style:{color:"var(--foreground-muted)",flexShrink:0}})]})},a.label))})]})}function O({label:a,value:c,mono:d,bold:e,ellipsis:f}){return(0,b.jsxs)("li",{style:{display:"flex",alignItems:"center",gap:12,padding:"5px 0",borderBottom:"1px dashed var(--border)",minWidth:0},children:[(0,b.jsx)("span",{style:{fontSize:11.5,color:"var(--foreground-muted)",flexShrink:0},children:a}),(0,b.jsx)("span",{style:{flex:1,minWidth:0,textAlign:"right",fontSize:12,color:"var(--foreground)",fontWeight:e?600:500,fontFamily:d?"var(--font-mono)":"inherit",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:f?c:void 0,children:c})]})}function P({slug:a,initials:c,size:e=36,radius:f=10}){let[g,h]=(0,d.useState)("color");(0,d.useEffect)(()=>{h("color")},[a]);let i="failed"===g?void 0:function(a,b="color"){if(a)return`https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@latest/icons/${a}${"color"===b?"-color":""}.svg`}(a,g),j=!!i;return(0,b.jsx)("div",{style:{...au,width:e,height:e,borderRadius:f,fontSize:Math.round(.32*e),background:j?"#ffffff":"var(--background-secondary)",padding:j?Math.round(.16*e):0,color:"var(--foreground)"},children:j?(0,b.jsx)("img",{src:i,alt:c,onError:()=>h("color"===g?"plain":"failed"),style:{width:"100%",height:"100%",objectFit:"contain"},loading:"lazy"}):c})}function Q({state:a,locale:c}){return"ok"===a?(0,b.jsxs)("span",{style:ay,children:[(0,b.jsx)(n.CircleCheck,{size:11,strokeWidth:2.4}),"zh"===c?"正常":"OK"]}):"checking"===a?(0,b.jsxs)("span",{style:aA,children:[(0,b.jsx)(u.Loader2,{size:11,strokeWidth:2.4,style:{animation:"spin 1s linear infinite"}}),"zh"===c?"检测中":"Checking"]}):"failed"===a?(0,b.jsxs)("span",{style:aB,children:[(0,b.jsx)(v.XCircle,{size:11,strokeWidth:2.4}),"zh"===c?"失效":"Failed"]}):(0,b.jsx)("span",{style:az,children:"zh"===c?"未配置":"No key"})}function R({locale:a,hasConfigs:c,onAdd:d,onReset:f}){return(0,b.jsxs)("div",{style:aU,children:[(0,b.jsx)("div",{style:aV,children:(0,b.jsx)(h,{size:20})}),(0,b.jsx)("div",{style:{fontSize:13.5,color:"var(--foreground)",fontWeight:500,marginBottom:4},children:c?"zh"===a?"没有匹配的模型":"No matching models":"zh"===a?"尚未注册任何模型":"No models registered yet"}),(0,b.jsx)("div",{style:{fontSize:12,color:"var(--foreground-muted)",marginBottom:14,textAlign:"center",maxWidth:360},children:c?"zh"===a?"试试调整搜索关键字或筛选条件。":"Try a different keyword or filter.":"zh"===a?"注册首个 LLM 后即可在评测、优化、对比中使用。":"Register your first LLM to use it for evaluation, optimization and comparison."}),c?(0,b.jsx)("button",{style:aN,onClick:f,children:"zh"===a?"清除筛选":"Reset filters"}):(0,b.jsxs)("button",{style:aL,onClick:d,children:[(0,b.jsx)(e.Plus,{size:14,strokeWidth:2.4}),"zh"===a?"注册首个模型":"Register your first model"]})]})}function S({onPick:a,onCancel:c,locale:e}){let[g,h]=(0,d.useState)(""),[i,j]=(0,d.useState)("all"),k=(0,d.useMemo)(()=>{let a=g.trim().toLowerCase();return A.filter(b=>("all"===i||b.category===i)&&(!a||b.label.toLowerCase().includes(a)||b.id.toLowerCase().includes(a)||b.defaultModel.toLowerCase().includes(a)||b.suggestedModels.some(b=>b.toLowerCase().includes(a))))},[g,i]),l=(0,d.useMemo)(()=>{let a={};for(let b of k)a[b.category]||(a[b.category]=[]),a[b.category].push(b);return a},[k]),m=(0,d.useMemo)(()=>{let a={all:A.length};for(let b of A)a[b.category]=(a[b.category]||0)+1;return a},[]);return(0,b.jsxs)("div",{style:aQ,children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",marginBottom:16,gap:16},children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{style:{fontSize:15,fontWeight:600,color:"var(--foreground)",letterSpacing:"-0.01em"},children:"zh"===e?"选择模型供应商":"Choose a Model Provider"}),(0,b.jsx)("div",{style:{fontSize:12,color:"var(--foreground-muted)",marginTop:3},children:"zh"===e?"挑选预置供应商即可自动填写 Base URL 与默认模型,下一步只需录入 API Key。":"Pick a built-in provider — Base URL and default model auto-fill. You only need to paste an API key next."})]}),(0,b.jsx)("button",{style:aN,onClick:c,children:"zh"===e?"返回列表":"Back to list"})]}),(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:14,flexWrap:"wrap"},children:[(0,b.jsxs)("div",{style:{...ao,width:280},children:[(0,b.jsx)(f.Search,{size:14,strokeWidth:2,style:{position:"absolute",left:11,top:"50%",transform:"translateY(-50%)",color:"var(--foreground-muted)"}}),(0,b.jsx)("input",{type:"text",placeholder:"zh"===e?"搜索供应商 / 模型":"Search provider / model",value:g,onChange:a=>h(a.target.value),style:ap})]}),(0,b.jsxs)("div",{style:aq,children:[(0,b.jsx)(J,{active:"all"===i,onClick:()=>j("all"),count:m.all,children:"zh"===e?"全部":"All"}),C.map(a=>(0,b.jsx)(J,{active:i===a.id,onClick:()=>j(a.id),count:m[a.id]||0,children:"zh"===e?a.labelZh:a.labelEn},a.id))]})]}),0===k.length?(0,b.jsx)("div",{style:{padding:"40px 0",textAlign:"center",fontSize:13,color:"var(--foreground-muted)"},children:"zh"===e?"没有匹配的供应商。":"No matching provider."}):(0,b.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:22},children:C.map(c=>{let d=l[c.id];return d&&0!==d.length?(0,b.jsxs)("section",{children:[(0,b.jsxs)("div",{style:aj,children:[(0,b.jsx)("span",{children:"zh"===e?c.labelZh:c.labelEn}),(0,b.jsx)("span",{style:ac,children:d.length})]}),(0,b.jsx)("div",{style:ak,children:d.map(c=>(0,b.jsxs)("button",{type:"button",onClick:()=>a(c),style:al,className:"provider-pick-card",children:[(0,b.jsx)(P,{slug:c.logoSlug,initials:c.initials,size:36,radius:9}),(0,b.jsxs)("div",{style:{minWidth:0,flex:1},children:[(0,b.jsx)("div",{style:{fontSize:13.5,fontWeight:600,color:"var(--foreground)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.label}),(0,b.jsx)("div",{style:{marginTop:3,fontSize:11.5,color:"var(--foreground-muted)",fontFamily:"var(--font-mono)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:c.suggestedModels.join(" · ")||c.defaultModel,children:c.suggestedModels.slice(0,3).join(" · ")||c.defaultModel||("zh"===e?"自填模型":"Custom model")})]})]},c.id))})]},c.id):null})})]})}function T({config:a,setConfig:c,onCancel:d,onReselect:e,onSave:f,isSaving:g,isDefault:h,pickedProvider:i,locale:j}){return(0,b.jsxs)("div",{style:aQ,children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",marginBottom:18,gap:16},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,minWidth:0},children:[i&&(0,b.jsx)(P,{slug:i.logoSlug,initials:i.initials,size:40,radius:10}),(0,b.jsxs)("div",{style:{minWidth:0},children:[(0,b.jsx)("div",{style:{fontSize:15,fontWeight:600,color:"var(--foreground)",letterSpacing:"-0.01em"},children:"new"===a.id?i?i.label:"zh"===j?"新增模型":"New Model":"zh"===j?"编辑模型":"Edit Model"}),(0,b.jsx)("div",{style:{fontSize:12,color:"var(--foreground-muted)",marginTop:3},children:i?.note?i.note:"zh"===j?"保存前会自动测试连接,连通后才会写入。":"Connection is tested before saving."})]})]}),(0,b.jsxs)("div",{style:{display:"flex",gap:8,flexShrink:0},children:[e&&(0,b.jsx)("button",{style:aN,onClick:e,children:"zh"===j?"← 选择其它供应商":"← Choose other provider"}),(0,b.jsx)("button",{style:aN,onClick:d,children:"zh"===j?"返回列表":"Back to list"})]})]}),(0,b.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, minmax(0, 1fr))",gap:"14px 18px"},children:[(0,b.jsx)(U,{label:"zh"===j?"配置名称":"Config Name",children:(0,b.jsx)("input",{style:aR,placeholder:"zh"===j?"例如:我的 DeepSeek":"e.g. My DeepSeek",value:a.name||"",disabled:h,onChange:b=>c({...a,name:b.target.value})})}),(0,b.jsx)(U,{label:"zh"===j?"供应商":"Provider",children:(0,b.jsxs)("select",{style:aR,value:a.provider,disabled:h,onChange:b=>{var d;let e;return e=D[d=b.target.value],void c({...a,provider:d,baseUrl:e.baseUrl||a.baseUrl,model:e.model||a.model})},children:[(0,b.jsx)("option",{value:"deepseek-official",children:"DeepSeek (Official)"}),(0,b.jsx)("option",{value:"siliconflow",children:"SiliconFlow"}),(0,b.jsx)("option",{value:"openai",children:"OpenAI"}),(0,b.jsx)("option",{value:"anthropic",children:"Anthropic"}),(0,b.jsx)("option",{value:"custom",children:"Custom (OpenAI Compatible)"})]})}),(0,b.jsx)(U,{label:"Base URL",children:(0,b.jsx)("input",{style:aR,placeholder:"https://api.deepseek.com",value:a.baseUrl||"",disabled:h,onChange:b=>c({...a,baseUrl:b.target.value.replace(/\/chat\/completions\/?$/,"")})})}),(0,b.jsxs)(U,{label:"zh"===j?"模型名":"Model Name",children:[(0,b.jsx)("input",{style:aR,placeholder:"deepseek-chat / gpt-4o / ...",value:a.model||"",disabled:h,onChange:b=>c({...a,model:b.target.value})}),i&&i.suggestedModels.length>0&&(0,b.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:5,marginTop:7},children:i.suggestedModels.slice(0,6).map(d=>(0,b.jsx)("button",{type:"button",onClick:()=>c({...a,model:d}),style:{...am,background:a.model===d?"var(--primary-subtle)":"var(--background-secondary)",color:a.model===d?"var(--primary)":"var(--foreground-secondary)",borderColor:a.model===d?"var(--primary-subtle-border)":"var(--border)"},children:d},d))})]}),(0,b.jsx)("div",{style:{gridColumn:"1 / -1"},children:(0,b.jsxs)(U,{label:"zh"===j?"API 密钥":"API Key",children:[(0,b.jsx)("input",{style:{...aR,fontFamily:"var(--font-mono, ui-monospace, monospace)"},type:"text",placeholder:"sk-...",value:a.apiKey||"",disabled:h,onChange:b=>c({...a,apiKey:b.target.value})}),(a.apiKey||"").includes("•")&&(0,b.jsx)("div",{style:{marginTop:6,fontSize:11.5,color:"var(--foreground-muted)"},children:"zh"===j?"出于安全考虑仅显示掩码。保持不变则沿用原 Key;如需更换请清空后输入新 Key。":"Masked for security. Leave unchanged to keep the current key; clear and type a new key to replace it."}),i?.docsUrl&&(0,b.jsx)("div",{style:{marginTop:6,fontSize:11.5,color:"var(--foreground-muted)"},children:(0,b.jsxs)("a",{href:i.docsUrl,target:"_blank",rel:"noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"inline-flex",alignItems:"center",gap:4},children:["zh"===j?"如何获取 API Key":"How to obtain an API Key",(0,b.jsx)(s.ExternalLink,{size:11,strokeWidth:2})]})})]})})]}),(0,b.jsxs)("div",{style:{display:"flex",justifyContent:"flex-end",gap:8,marginTop:20},children:[(0,b.jsx)("button",{style:aN,onClick:d,children:"zh"===j?"取消":"Cancel"}),!h&&(0,b.jsx)("button",{style:g?aM:aL,disabled:g,onClick:f,children:g?"zh"===j?"测试并保存中…":"Testing & Saving…":"zh"===j?"测试连接并保存":"Test & Save"})]})]})}function U({label:a,children:c}){return(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{style:{fontSize:11.5,fontWeight:500,color:"var(--foreground-secondary)",marginBottom:6,letterSpacing:"0.01em"},children:a}),c]})}let V={flex:1,minHeight:0,overflowY:"auto",padding:"24px 28px 40px",width:"100%"},W={maxWidth:1320,margin:"0 auto"},X={display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:24,marginBottom:22},Y={margin:0,fontSize:13,lineHeight:1.65,color:"var(--foreground-secondary)",maxWidth:720},Z={color:"var(--foreground)",fontWeight:600},$={display:"grid",gridTemplateColumns:"minmax(0, 1fr) 300px",gap:22,alignItems:"flex-start"},_={minWidth:0,display:"flex",flexDirection:"column",gap:14},aa={display:"flex",flexDirection:"column",gap:14,position:"sticky",top:0},ab={display:"flex",alignItems:"center",gap:8,padding:"2px 2px 6px",borderBottom:"1px solid var(--border)"},ac={display:"inline-flex",alignItems:"center",padding:"1px 8px",fontSize:11,fontWeight:600,fontFamily:"var(--font-mono)",color:"var(--foreground-secondary)",background:"var(--background-secondary)",border:"1px solid var(--border)",borderRadius:999,lineHeight:1.5},ad={background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12,padding:"14px 16px 12px",display:"flex",flexDirection:"column",gap:10},ae={display:"flex",alignItems:"center",gap:7,fontSize:13,fontWeight:600,color:"var(--foreground)",letterSpacing:"-0.005em",paddingBottom:8,borderBottom:"1px solid var(--border)"},af={display:"flex",flexDirection:"column",padding:0,margin:0,listStyle:"none"},ag={display:"flex",alignItems:"center",gap:10,padding:"5px 0",minWidth:0},ah={width:"100%",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,padding:"7px 10px",marginTop:4,background:"var(--card-bg)",color:"var(--foreground-secondary)",border:"1px solid var(--border)",borderRadius:7,fontSize:12,fontWeight:500,cursor:"pointer",transition:"all .12s ease"},ai={display:"flex",alignItems:"center",gap:8,padding:"7px 8px",fontSize:12.5,color:"var(--foreground-secondary)",textDecoration:"none",borderRadius:6,transition:"background .1s"},aj={display:"flex",alignItems:"center",gap:8,marginBottom:10,fontSize:12,fontWeight:600,color:"var(--foreground-secondary)",textTransform:"uppercase",letterSpacing:"0.08em"},ak={display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(220px, 1fr))",gap:10},al={display:"flex",alignItems:"center",gap:12,padding:"11px 12px",background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:10,cursor:"pointer",textAlign:"left",fontFamily:"inherit",transition:"all .12s ease",minWidth:0},am={padding:"3px 10px",fontSize:11,fontFamily:"var(--font-mono)",border:"1px solid var(--border)",borderRadius:999,cursor:"pointer",transition:"all .12s",lineHeight:1.5},an={display:"flex",alignItems:"center",gap:14,marginBottom:14,flexWrap:"wrap"},ao={position:"relative",width:280},ap={width:"100%",height:34,padding:"0 12px 0 32px",border:"1px solid var(--input-border)",borderRadius:8,background:"var(--input-bg)",fontSize:12.5,color:"var(--foreground)",outline:"none"},aq={display:"inline-flex",flexWrap:"wrap",gap:6},ar={padding:"6px 12px",fontSize:12,fontWeight:500,borderRadius:6,cursor:"pointer",fontFamily:"inherit",display:"inline-flex",alignItems:"center",gap:6,whiteSpace:"nowrap",lineHeight:1.4},as={background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12,padding:"18px 22px",display:"grid",gridTemplateColumns:"auto 1fr auto",gap:22,alignItems:"center",transition:"all .15s ease",position:"relative",overflow:"hidden"},at={position:"absolute",left:0,top:0,bottom:0,width:3,background:"var(--primary)"},au={width:48,height:48,borderRadius:12,background:"var(--background-secondary)",border:"1px solid var(--card-border)",display:"grid",placeItems:"center",fontWeight:600,fontSize:14,color:"var(--foreground-secondary)",letterSpacing:"0.02em",flexShrink:0},av={fontSize:16,fontWeight:600,color:"var(--foreground)",letterSpacing:"-0.01em"},aw={display:"inline-flex",alignItems:"center",gap:4,padding:"2px 8px",fontSize:10.5,fontWeight:600,borderRadius:999,lineHeight:1.5,letterSpacing:"0.01em"},ax={...aw,background:"var(--primary)",color:"var(--primary-foreground)"},ay={...aw,background:"var(--success-subtle)",color:"var(--success)"},az={...aw,background:"var(--warning-subtle)",color:"var(--warning)"},aA={...aw,background:"var(--primary-subtle)",color:"var(--primary)"},aB={...aw,background:"var(--error-subtle)",color:"var(--error)"},aC={...aw,background:"var(--background-secondary)",color:"var(--foreground-secondary)",border:"1px solid var(--border)"},aD={width:5,height:5,background:"var(--success)",borderRadius:"50%"},aE={display:"flex",alignItems:"center",gap:12,flexWrap:"wrap",marginBottom:10,fontSize:12.5,color:"var(--foreground-secondary)"},aF={display:"inline-flex",alignItems:"center",gap:6,minWidth:0},aG={fontSize:10.5,fontWeight:500,color:"var(--foreground-muted)",textTransform:"uppercase",letterSpacing:"0.06em"},aH={color:"var(--foreground)",fontWeight:500,maxWidth:280,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},aI={width:1,height:11,background:"var(--border)"},aJ={display:"inline-flex",alignItems:"center",gap:8,padding:"5px 10px",background:"var(--background-secondary)",border:"1px solid var(--border)",borderRadius:7,color:"var(--foreground-secondary)",maxWidth:"fit-content"},aK={display:"flex",alignItems:"center",gap:6,paddingLeft:16,borderLeft:"1px dashed var(--border)"},aL={display:"inline-flex",alignItems:"center",gap:6,padding:"7px 14px",background:"var(--primary)",color:"var(--primary-foreground)",border:"none",borderRadius:8,fontSize:12.5,fontWeight:500,cursor:"pointer",transition:"background .12s ease",lineHeight:1.4},aM={...aL,opacity:.6,cursor:"not-allowed"},aN={display:"inline-flex",alignItems:"center",gap:5,padding:"6px 12px",background:"var(--card-bg)",color:"var(--foreground-secondary)",borderWidth:1,borderStyle:"solid",borderColor:"var(--border)",borderRadius:7,fontSize:12,fontWeight:500,cursor:"pointer",transition:"all .12s ease",lineHeight:1.4},aO={...aN,background:"var(--success-subtle)",color:"var(--success)",borderColor:"var(--success-subtle-border)",cursor:"default"},aP={...aN,color:"var(--foreground-secondary)"},aQ={background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12,padding:"22px 26px"},aR={width:"100%",padding:"8px 10px",background:"var(--input-bg)",border:"1px solid var(--input-border)",borderRadius:7,color:"var(--foreground)",fontSize:12.5,outline:"none"},aS={marginTop:24,padding:"14px 18px",border:"1px dashed var(--border-dark)",borderRadius:10,background:"var(--background-secondary)",display:"flex",alignItems:"center",gap:12},aT={width:30,height:30,borderRadius:8,background:"var(--primary-subtle)",color:"var(--primary)",display:"grid",placeItems:"center",flexShrink:0},aU={padding:"40px 24px",background:"var(--card-bg)",border:"1px dashed var(--border-dark)",borderRadius:12,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},aV={width:44,height:44,borderRadius:10,background:"var(--background-secondary)",color:"var(--foreground-muted)",display:"grid",placeItems:"center",marginBottom:12};var aW=a.i(960798);function aX(){let{t:a}=(0,y.useLocale)();return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(c.AppTopBar,{title:(0,b.jsx)(aW.Term,{id:"model-registry",label:a("nav.modelRegistry")})}),(0,b.jsx)(H,{})]})}a.s(["default",()=>aX],685260)}];
1
+ module.exports=[685260,a=>{"use strict";var b=a.i(187924),c=a.i(729936),d=a.i(572131),e=a.i(403512),f=a.i(233540),g=a.i(164831);let h=(0,g.default)("server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);var i=a.i(118343),j=a.i(590629),k=a.i(980180),l=a.i(752562),m=a.i(752357),n=a.i(597024);let o=(0,g.default)("badge-check",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),p=(0,g.default)("star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]),q=(0,g.default)("heart-pulse",[["path",{d:"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5",key:"mvr1a0"}],["path",{d:"M3.22 13H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27",key:"auskq0"}]]);var r=a.i(118688),s=a.i(168370),t=a.i(519783),u=a.i(875160),v=a.i(211134),w=a.i(575110),x=a.i(943408),y=a.i(106927),z=a.i(757430);let A=[{id:"openai",label:"OpenAI",category:"frontier",baseUrl:"https://api.openai.com/v1",defaultModel:"gpt-4o-mini",suggestedModels:["gpt-5","gpt-5-mini","gpt-4o","gpt-4o-mini","gpt-4.1","o3","o3-mini","o4-mini"],docsUrl:"https://platform.openai.com/docs/models",oaiCompat:!0,initials:"OA",logoSlug:"openai"},{id:"anthropic",label:"Anthropic",category:"frontier",baseUrl:"https://api.anthropic.com/v1",defaultModel:"claude-sonnet-4-6",suggestedModels:["claude-opus-4-7","claude-sonnet-4-6","claude-haiku-4-5","claude-3-5-sonnet-latest"],docsUrl:"https://docs.anthropic.com/en/docs/models-overview",oaiCompat:!0,initials:"AN",logoSlug:"anthropic",note:"使用 Anthropic OpenAI 兼容端点(/v1/messages 自动转换)。"},{id:"gemini",label:"Google Gemini",category:"frontier",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai/",defaultModel:"gemini-2.5-flash",suggestedModels:["gemini-2.5-pro","gemini-2.5-flash","gemini-2.0-flash","gemini-1.5-pro"],docsUrl:"https://ai.google.dev/gemini-api/docs/openai",oaiCompat:!0,initials:"GM",logoSlug:"gemini",note:"走 Gemini OpenAI 兼容层(generativelanguage.googleapis.com)。"},{id:"azure-openai",label:"Azure OpenAI",category:"frontier",baseUrl:"https://YOUR-RESOURCE.openai.azure.com/openai",defaultModel:"gpt-4o",suggestedModels:["gpt-4o","gpt-4o-mini","gpt-4-turbo","o1-mini"],docsUrl:"https://learn.microsoft.com/azure/ai-services/openai/reference",oaiCompat:!0,initials:"AZ",logoSlug:"azure",note:"Base URL 形如 https://<resource>.openai.azure.com/openai/deployments/<deployment>"},{id:"xai",label:"xAI Grok",category:"frontier",baseUrl:"https://api.x.ai/v1",defaultModel:"grok-3",suggestedModels:["grok-4","grok-3","grok-3-mini","grok-2-1212","grok-2-vision-1212"],docsUrl:"https://docs.x.ai/api",oaiCompat:!0,initials:"GR",logoSlug:"grok"},{id:"mistral",label:"Mistral AI",category:"frontier",baseUrl:"https://api.mistral.ai/v1",defaultModel:"mistral-large-latest",suggestedModels:["mistral-large-latest","mistral-large-2411","mistral-small-latest","codestral-2501","open-mistral-nemo"],docsUrl:"https://docs.mistral.ai/getting-started/models/models_overview/",oaiCompat:!0,initials:"MI",logoSlug:"mistral"},{id:"cohere",label:"Cohere",category:"frontier",baseUrl:"https://api.cohere.ai/compatibility/v1",defaultModel:"command-r-plus",suggestedModels:["command-r-plus","command-r","command-r7b"],docsUrl:"https://docs.cohere.com/docs/compatibility-api",oaiCompat:!0,initials:"CO",logoSlug:"cohere"},{id:"openrouter",label:"OpenRouter",category:"aggregator",baseUrl:"https://openrouter.ai/api/v1",defaultModel:"openai/gpt-4o-mini",suggestedModels:["anthropic/claude-3.5-sonnet","openai/gpt-4o","meta-llama/llama-3.3-70b-instruct","google/gemini-2.0-flash-exp:free"],docsUrl:"https://openrouter.ai/docs",oaiCompat:!0,initials:"OR",logoSlug:"openrouter"},{id:"together",label:"Together AI",category:"aggregator",baseUrl:"https://api.together.xyz/v1",defaultModel:"meta-llama/Llama-3.3-70B-Instruct-Turbo",suggestedModels:["meta-llama/Llama-3.3-70B-Instruct-Turbo","deepseek-ai/DeepSeek-V3","Qwen/Qwen2.5-72B-Instruct-Turbo"],docsUrl:"https://docs.together.ai/docs/quickstart",oaiCompat:!0,initials:"TG",logoSlug:"together"},{id:"fireworks",label:"Fireworks AI",category:"aggregator",baseUrl:"https://api.fireworks.ai/inference/v1",defaultModel:"accounts/fireworks/models/llama-v3p3-70b-instruct",suggestedModels:["accounts/fireworks/models/llama-v3p3-70b-instruct","accounts/fireworks/models/deepseek-v3","accounts/fireworks/models/qwen2p5-72b-instruct"],docsUrl:"https://docs.fireworks.ai",oaiCompat:!0,initials:"FW",logoSlug:"fireworks"},{id:"groq",label:"Groq",category:"aggregator",baseUrl:"https://api.groq.com/openai/v1",defaultModel:"llama-3.3-70b-versatile",suggestedModels:["llama-3.3-70b-versatile","llama-3.1-8b-instant","mixtral-8x7b-32768"],docsUrl:"https://console.groq.com/docs/models",oaiCompat:!0,initials:"GQ",logoSlug:"groq"},{id:"deepinfra",label:"DeepInfra",category:"aggregator",baseUrl:"https://api.deepinfra.com/v1/openai",defaultModel:"meta-llama/Meta-Llama-3.1-70B-Instruct",suggestedModels:["meta-llama/Meta-Llama-3.1-70B-Instruct","deepseek-ai/DeepSeek-V3","Qwen/Qwen2.5-72B-Instruct"],docsUrl:"https://deepinfra.com/docs",oaiCompat:!0,initials:"DI",logoSlug:"deepinfra"},{id:"perplexity",label:"Perplexity",category:"aggregator",baseUrl:"https://api.perplexity.ai",defaultModel:"sonar",suggestedModels:["sonar","sonar-pro","sonar-reasoning","sonar-reasoning-pro"],docsUrl:"https://docs.perplexity.ai",oaiCompat:!0,initials:"PX",logoSlug:"perplexity"},{id:"nvidia",label:"NVIDIA NIM",category:"aggregator",baseUrl:"https://integrate.api.nvidia.com/v1",defaultModel:"meta/llama-3.3-70b-instruct",suggestedModels:["meta/llama-3.3-70b-instruct","deepseek-ai/deepseek-r1","nvidia/llama-3.1-nemotron-70b-instruct"],docsUrl:"https://docs.api.nvidia.com",oaiCompat:!0,initials:"NV",logoSlug:"nvidia"},{id:"databricks",label:"Databricks",category:"aggregator",baseUrl:"https://YOUR-WORKSPACE.cloud.databricks.com/serving-endpoints",defaultModel:"databricks-meta-llama-3-3-70b-instruct",suggestedModels:["databricks-meta-llama-3-3-70b-instruct","databricks-dbrx-instruct"],docsUrl:"https://docs.databricks.com/aws/en/machine-learning/foundation-models/api-reference",oaiCompat:!0,initials:"DB",logoSlug:"databricks",note:"Base URL 形如 https://<workspace>.cloud.databricks.com/serving-endpoints"},{id:"novita",label:"Novita AI",category:"aggregator",baseUrl:"https://api.novita.ai/v3/openai",defaultModel:"meta-llama/llama-3.3-70b-instruct",suggestedModels:["meta-llama/llama-3.3-70b-instruct","qwen/qwen-2.5-72b-instruct"],docsUrl:"https://novita.ai/docs/api-reference",oaiCompat:!0,initials:"NV",logoSlug:"novita"},{id:"hyperbolic",label:"Hyperbolic",category:"aggregator",baseUrl:"https://api.hyperbolic.xyz/v1",defaultModel:"meta-llama/Meta-Llama-3.1-70B-Instruct",suggestedModels:["meta-llama/Meta-Llama-3.1-70B-Instruct","Qwen/Qwen2.5-Coder-32B-Instruct"],docsUrl:"https://docs.hyperbolic.xyz",oaiCompat:!0,initials:"HY",logoSlug:"hyperbolic"},{id:"deepseek-official",label:"DeepSeek (Official)",category:"china",baseUrl:"https://api.deepseek.com",defaultModel:"deepseek-chat",suggestedModels:["deepseek-chat","deepseek-reasoner","deepseek-v3.1"],docsUrl:"https://api-docs.deepseek.com",oaiCompat:!0,initials:"DS",logoSlug:"deepseek"},{id:"siliconflow",label:"SiliconFlow / 硅基流动",category:"china",baseUrl:"https://api.siliconflow.cn/v1",defaultModel:"deepseek-ai/DeepSeek-V3",suggestedModels:["deepseek-ai/DeepSeek-V3","deepseek-ai/DeepSeek-R1","Qwen/Qwen2.5-72B-Instruct","meta-llama/Meta-Llama-3.1-70B-Instruct"],docsUrl:"https://docs.siliconflow.cn",oaiCompat:!0,initials:"SF",logoSlug:"siliconcloud"},{id:"moonshot",label:"Moonshot / Kimi",category:"china",baseUrl:"https://api.moonshot.cn/v1",defaultModel:"kimi-latest",suggestedModels:["kimi-k2","kimi-latest","moonshot-v1-128k","moonshot-v1-32k","moonshot-v1-8k"],docsUrl:"https://platform.moonshot.cn/docs",oaiCompat:!0,initials:"MK",logoSlug:"moonshot"},{id:"zhipu",label:"Zhipu GLM / 智谱",category:"china",baseUrl:"https://open.bigmodel.cn/api/paas/v4",defaultModel:"glm-4.5",suggestedModels:["glm-4.5","glm-4-plus","glm-4-air","glm-4-long","glm-4-flash"],docsUrl:"https://bigmodel.cn/dev/api",oaiCompat:!0,initials:"ZP",logoSlug:"zhipu"},{id:"doubao",label:"Doubao / 火山方舟",category:"china",baseUrl:"https://ark.cn-beijing.volces.com/api/v3",defaultModel:"doubao-1.5-pro-32k",suggestedModels:["doubao-1.5-pro-32k","doubao-1.5-pro-256k","doubao-pro-32k","doubao-lite-32k"],docsUrl:"https://www.volcengine.com/docs/82379",oaiCompat:!0,initials:"DB",logoSlug:"doubao",note:'模型名通常是火山方舟"接入点 ID",不是发布的模型名。'},{id:"qwen",label:"Tongyi Qwen / 通义千问",category:"china",baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",defaultModel:"qwen-plus",suggestedModels:["qwen3-max","qwen3-plus","qwen-max","qwen-plus","qwen-turbo","qwen2.5-72b-instruct"],docsUrl:"https://help.aliyun.com/zh/model-studio/developer-reference/use-qwen-by-calling-api",oaiCompat:!0,initials:"QW",logoSlug:"qwen"},{id:"hunyuan",label:"Tencent Hunyuan / 腾讯混元",category:"china",baseUrl:"https://api.hunyuan.cloud.tencent.com/v1",defaultModel:"hunyuan-pro",suggestedModels:["hunyuan-turbo","hunyuan-pro","hunyuan-standard","hunyuan-lite"],docsUrl:"https://cloud.tencent.com/document/product/1729/97732",oaiCompat:!0,initials:"HY",logoSlug:"hunyuan"},{id:"yi",label:"01.AI Yi / 零一万物",category:"china",baseUrl:"https://api.lingyiwanwu.com/v1",defaultModel:"yi-large",suggestedModels:["yi-large","yi-large-turbo","yi-medium","yi-vision"],docsUrl:"https://platform.lingyiwanwu.com/docs",oaiCompat:!0,initials:"YI",logoSlug:"yi"},{id:"modelscope",label:"ModelScope / 魔搭",category:"china",baseUrl:"https://api-inference.modelscope.cn/v1",defaultModel:"Qwen/Qwen2.5-72B-Instruct",suggestedModels:["Qwen/Qwen2.5-72B-Instruct","deepseek-ai/DeepSeek-V3","meta-llama/Llama-3.3-70B-Instruct"],docsUrl:"https://modelscope.cn/docs/model-service/API-Inference",oaiCompat:!0,initials:"MS",logoSlug:"modelscope"},{id:"ppio",label:"PPIO / 派欧云",category:"china",baseUrl:"https://api.ppinfra.com/v3/openai",defaultModel:"deepseek/deepseek-v3",suggestedModels:["deepseek/deepseek-v3","deepseek/deepseek-r1","qwen/qwen2.5-72b-instruct","meta-llama/llama-3.3-70b-instruct"],docsUrl:"https://ppinfra.com/docs",oaiCompat:!0,initials:"PP",logoSlug:"ppio"},{id:"baidu",label:"Baidu Qianfan / 文心一言",category:"china",baseUrl:"https://qianfan.baidubce.com/v2",defaultModel:"ernie-4.0-8k",suggestedModels:["ernie-4.0-8k","ernie-4.0-turbo-8k","ernie-3.5-8k"],docsUrl:"https://cloud.baidu.com/doc/qianfan-api/index.html",oaiCompat:!0,initials:"BD",logoSlug:"wenxin"},{id:"minimax",label:"MiniMax",category:"china",baseUrl:"https://api.minimax.chat/v1",defaultModel:"abab6.5s-chat",suggestedModels:["abab6.5s-chat","abab6.5-chat","minimax-text-01"],docsUrl:"https://platform.minimaxi.com/document/algorithm-concept",oaiCompat:!0,initials:"MM",logoSlug:"minimax"},{id:"stepfun",label:"Stepfun / 阶跃星辰",category:"china",baseUrl:"https://api.stepfun.com/v1",defaultModel:"step-1-8k",suggestedModels:["step-1-8k","step-1-32k","step-2-16k"],docsUrl:"https://platform.stepfun.com/docs",oaiCompat:!0,initials:"ST",logoSlug:"stepfun"},{id:"ollama",label:"Ollama",category:"selfhost",baseUrl:"http://localhost:11434/v1",defaultModel:"llama3.3",suggestedModels:["llama3.3","qwen2.5","deepseek-r1","mistral"],docsUrl:"https://ollama.com/library",oaiCompat:!0,initials:"OL",logoSlug:"ollama",note:"本地 Ollama 通常无需 API Key,留空即可。"},{id:"vllm",label:"vLLM",category:"selfhost",baseUrl:"http://localhost:8000/v1",defaultModel:"meta-llama/Meta-Llama-3-8B-Instruct",suggestedModels:["meta-llama/Meta-Llama-3-8B-Instruct","Qwen/Qwen2.5-7B-Instruct"],docsUrl:"https://docs.vllm.ai/en/stable/serving/openai_compatible_server.html",oaiCompat:!0,initials:"VL",logoSlug:"vllm",note:"vLLM 默认以 OpenAI 兼容模式启动,API Key 任意字符串即可。"},{id:"lmstudio",label:"LM Studio",category:"selfhost",baseUrl:"http://localhost:1234/v1",defaultModel:"local-model",suggestedModels:["local-model"],docsUrl:"https://lmstudio.ai/docs/local-server",oaiCompat:!0,initials:"LM",logoSlug:"lmstudio",note:'在 LM Studio 中开启 "Local Inference Server",端口默认 1234。'},{id:"tgi",label:"Text Generation Inference (TGI)",category:"selfhost",baseUrl:"http://localhost:8080/v1",defaultModel:"tgi",suggestedModels:["tgi"],docsUrl:"https://huggingface.co/docs/text-generation-inference/messages_api",oaiCompat:!0,initials:"TG",logoSlug:"huggingface"},{id:"xinference",label:"Xinference",category:"selfhost",baseUrl:"http://localhost:9997/v1",defaultModel:"qwen2.5-instruct",suggestedModels:["qwen2.5-instruct","llama-3.3-instruct","deepseek-r1-distill-qwen"],docsUrl:"https://inference.readthedocs.io/en/latest/models/builtin/llm.html",oaiCompat:!0,initials:"XI",logoSlug:"xinference",note:"通过模型 UID 接入 Xinference 本地实例。"},{id:"localai",label:"LocalAI",category:"selfhost",baseUrl:"http://localhost:8080/v1",defaultModel:"gpt-3.5-turbo",suggestedModels:["gpt-3.5-turbo"],docsUrl:"https://localai.io",oaiCompat:!0,initials:"LA",logoSlug:"localai",note:"OpenAI 兼容的本地推理网关,模型名按本地配置填写。"},{id:"custom",label:"Custom (OpenAI Compatible)",category:"selfhost",baseUrl:"",defaultModel:"",suggestedModels:[],oaiCompat:!0,initials:"CU",note:"任何兼容 OpenAI /v1/chat/completions 协议的端点。"}],B=A.reduce((a,b)=>(a[b.id]=b,a),{}),C=[{id:"frontier",labelZh:"主流闭源 SaaS",labelEn:"Frontier SaaS"},{id:"aggregator",labelZh:"推理聚合 / 路由",labelEn:"Inference Aggregators"},{id:"china",labelZh:"国内厂商",labelEn:"China Providers"},{id:"selfhost",labelZh:"本地 / 自部署",labelEn:"Self-hosted"}],D={"deepseek-official":{baseUrl:"https://api.deepseek.com",model:"deepseek-chat"},siliconflow:{baseUrl:"https://api.siliconflow.cn/v1",model:"deepseek-ai/DeepSeek-V3"},openai:{baseUrl:"https://api.openai.com/v1",model:"gpt-4o"},anthropic:{baseUrl:"https://api.anthropic.com/v1",model:"claude-3-5-sonnet-20240620"},custom:{baseUrl:"",model:""}},E={"deepseek-official":{label:"DeepSeek (Official)",monogram:"DS",category:"cn"},siliconflow:{label:"SiliconFlow",monogram:"SF",category:"cn"},openai:{label:"OpenAI",monogram:"OA",category:"saas"},anthropic:{label:"Anthropic",monogram:"AN",category:"saas"},custom:{label:"Custom (OpenAI Compatible)",monogram:"CX",category:"other"}},F=a=>!!a&&a.startsWith("default_"),G=a=>a.apiKey?"ok":"unconfigured";function H({}={}){let{user:a}=(0,x.useAuth)(),{t:c,locale:g}=(0,y.useLocale)(),[h,i]=(0,d.useState)([]),[j,k]=(0,d.useState)("default"),[l,n]=(0,d.useState)(null),[o,p]=(0,d.useState)({id:"new",name:"zh"===g?"新配置":"New Config",provider:"deepseek-official",model:"deepseek-chat"}),[q,r]=(0,d.useState)(!1),[s,t]=(0,d.useState)(null),[u,v]=(0,d.useState)(!1),[A,B]=(0,d.useState)(""),[C,D]=(0,d.useState)("all"),[O,P]=(0,d.useState)(null),[Q,U]=(0,d.useState)({}),[ad,ae]=(0,d.useState)(!1),[af,ag]=(0,d.useState)(!1),[ah,ai]=(0,d.useState)(null),aj=(0,d.useCallback)(async()=>{if(!a)return void v(!0);try{let b=await (0,w.apiFetch)(`/api/eval/settings?user=${encodeURIComponent(a)}`);if(b.ok){let a=await b.json();a.configs&&(i(a.configs),k(a.activeConfigId||a.configs[0]?.id||"default"))}}catch(a){console.error("Failed to fetch settings",a)}finally{v(!0)}},[a]);(0,d.useEffect)(()=>{aj()},[aj]),(0,d.useEffect)(()=>{U(a=>{let b={...a};for(let a of h)a.id in b||(b[a.id]=G(a));for(let a of Object.keys(b))h.find(b=>b.id===a)||delete b[a];return b})},[h]);let ak=(0,d.useCallback)(async()=>{if(ad||0===h.length)return;ae(!0),U(a=>{let b={...a};for(let a of h)b[a.id]=a.apiKey?"checking":"unconfigured";return b});let b=await Promise.all(h.map(async b=>{if(!b.apiKey)return[b.id,"unconfigured"];try{let c=await (0,w.apiFetch)("/api/eval/settings/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:b.provider,apiKey:b.apiKey,baseUrl:b.baseUrl,model:b.model,user:a,configId:b.id})}),d=await c.json().catch(()=>({success:!1}));return[b.id,d.success?"ok":"failed"]}catch{return[b.id,"failed"]}}));U(a=>{let c={...a};for(let[a,d]of b)c[a]=d;return c}),ae(!1)},[h,ad]),al=(0,d.useCallback)(async(b,c)=>(0,w.apiFetch)("/api/eval/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{activeConfigId:c,configs:b},user:a})}),[a]),am=async()=>{r(!0),t({type:"info",msg:"zh"===g?"正在测试连接…":"Testing connection…"});try{let b=[...h],c={...o};"new"===c.id?(c.id=`config_${Date.now()}`,b.push(c)):b=b.map(a=>a.id===c.id?c:a);let d=await (0,w.apiFetch)("/api/eval/settings/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:c.provider,apiKey:c.apiKey,baseUrl:c.baseUrl,model:c.model,user:a,configId:c.id})}),e=await d.json();if(!e.success){t({type:"error",msg:("zh"===g?"连接测试失败:":"Connection test failed: ")+e.error}),r(!1);return}let f=j;(1===b.length||"default"===j)&&(f=c.id);let i=await al(b,f);if(i.ok)await aj(),n(null),ai(null),t({type:"success",msg:"zh"===g?"已保存":"Saved"}),setTimeout(()=>t(null),1500);else{let a=await i.json().catch(()=>({}));t({type:"error",msg:("zh"===g?"保存失败:":"Save failed: ")+(a.error||i.statusText)})}}catch(a){t({type:"error",msg:`Error: ${a.message}`})}finally{r(!1)}},ar=async a=>{(await al(h,a)).ok&&(k(a),t({type:"success",msg:"zh"===g?"默认模型已切换":"Active model updated"}),setTimeout(()=>t(null),1500))},as=async a=>{let b=h.filter(b=>b.id!==a),c=j;a===j&&(c=b[0]?.id||"default"),(await al(b,c)).ok&&(i(b),k(c),t({type:"success",msg:"zh"===g?"已删除":"Deleted"}),setTimeout(()=>t(null),1500))},at=()=>{ag(!0),ai(null),n(null),t(null)},au=(0,d.useMemo)(()=>{let a=A.trim().toLowerCase();return h.filter(b=>("all"===C||E[b.provider]?.category===C)&&(!a||b.name.toLowerCase().includes(a)||(b.model||"").toLowerCase().includes(a)||(b.baseUrl||"").toLowerCase().includes(a)||(E[b.provider]?.label||b.provider||"").toLowerCase().includes(a)))},[h,A,C]),av=(0,d.useMemo)(()=>{let a={saas:0,cn:0,local:0,other:0};for(let b of h){let c=E[b.provider]?.category;c&&(a[c]+=1)}return a},[h]),aw=h.find(a=>a.id===j),ax=new Set(h.map(a=>a.provider)).size;return u?(0,b.jsxs)("div",{style:V,children:[(0,b.jsxs)("div",{style:W,children:[s&&(0,b.jsx)(I,{status:s}),af?(0,b.jsx)(S,{onPick:a=>{var b;p({id:"new",name:a.label,provider:"openai"===(b=a.id)?"openai":"anthropic"===b?"anthropic":"deepseek-official"===b?"deepseek-official":"siliconflow"===b?"siliconflow":"custom",baseUrl:a.baseUrl,model:a.defaultModel,apiKey:""}),ai(a),ag(!1),n("new"),t(null)},onCancel:()=>ag(!1),locale:g}):l?(0,b.jsx)(T,{config:o,setConfig:p,onCancel:()=>{n(null),ai(null)},onReselect:"new"===l?()=>{n(null),ag(!0)}:void 0,onSave:am,isSaving:q,isDefault:F(l),pickedProvider:ah,locale:g}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{style:X,children:[(0,b.jsx)("p",{style:Y,children:"zh"===g?(0,b.jsxs)(b.Fragment,{children:["注册并管理评测 / 优化使用的 ",(0,b.jsx)("b",{style:Z,children:"LLM"}),",可切换默认、编辑参数、管理 API Key。兼容 ",(0,b.jsx)("b",{style:Z,children:"OpenAI / Anthropic / DeepSeek"})," 等主流厂商,亦支持",(0,b.jsx)("b",{style:Z,children:"国内厂商"}),"与",(0,b.jsx)("b",{style:Z,children:"本地推理"}),"部署。"]}):(0,b.jsxs)(b.Fragment,{children:["Register and manage LLMs used for evaluation/optimization. Set the default, edit parameters, and manage API keys. Compatible with ",(0,b.jsx)("b",{style:Z,children:"OpenAI / Anthropic / DeepSeek"})," as well as ",(0,b.jsx)("b",{style:Z,children:"regional providers"})," and ",(0,b.jsx)("b",{style:Z,children:"self-hosted"})," inference."]})}),(0,b.jsxs)("button",{style:aL,onClick:at,children:[(0,b.jsx)(e.Plus,{size:14,strokeWidth:2.4}),"zh"===g?"新增模型":"New Model"]})]}),(0,b.jsxs)("div",{style:$,children:[(0,b.jsxs)("div",{style:_,children:[(0,b.jsxs)("div",{style:an,children:[(0,b.jsxs)("div",{style:ao,children:[(0,b.jsx)(f.Search,{size:14,strokeWidth:2,style:{position:"absolute",left:11,top:"50%",transform:"translateY(-50%)",color:"var(--foreground-muted)"}}),(0,b.jsx)("input",{type:"text",placeholder:"zh"===g?"搜索名称 / 模型 / Base URL":"Search name / model / Base URL",value:A,onChange:a=>B(a.target.value),style:ap})]}),(0,b.jsxs)("div",{style:aq,children:[(0,b.jsx)(J,{active:"all"===C,onClick:()=>D("all"),count:h.length,children:"zh"===g?"全部":"All"}),(0,b.jsx)(J,{active:"saas"===C,onClick:()=>D("saas"),count:av.saas,children:"zh"===g?"主流闭源":"SaaS"}),(0,b.jsx)(J,{active:"cn"===C,onClick:()=>D("cn"),count:av.cn,children:"zh"===g?"国内厂商":"Regional"}),(0,b.jsx)(J,{active:"other"===C,onClick:()=>D("other"),count:av.other,children:"zh"===g?"自定义":"Custom"})]})]}),(0,b.jsxs)("div",{style:ab,children:[(0,b.jsx)("span",{style:{fontSize:13.5,fontWeight:600,color:"var(--foreground)"},children:"zh"===g?"已注册模型":"Registered Models"}),(0,b.jsx)("span",{style:ac,children:au.length}),(0,b.jsx)("span",{style:{flex:1}}),(0,b.jsx)("span",{style:{fontSize:11.5,color:"var(--foreground-muted)"},children:"zh"===g?`容量 ${h.length} / 32`:`Capacity ${h.length} / 32`})]}),0===au.length?(0,b.jsx)(R,{locale:g,hasConfigs:h.length>0,onAdd:at,onReset:()=>{B(""),D("all")}}):(0,b.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:au.map(a=>(0,b.jsx)(K,{config:a,isActive:a.id===j,isDefault:F(a.id),health:Q[a.id],onActivate:()=>ar(a.id),onEdit:()=>{p({...a}),ai(null),n(a.id),ag(!1),t(null)},onDelete:()=>P(a),locale:g},a.id))}),(0,b.jsxs)("div",{style:aS,children:[(0,b.jsx)("div",{style:aT,children:(0,b.jsx)(m.Info,{size:16})}),(0,b.jsxs)("div",{style:{flex:1,fontSize:12.5,color:"var(--foreground-secondary)",lineHeight:1.6},children:[(0,b.jsx)("b",{style:{color:"var(--foreground)",fontWeight:600},children:"zh"===g?"提示":"Tip"})," · ","zh"===g?"至少保留一个默认模型,用于评测与优化任务的兜底调用。删除默认模型前,请先指定其它模型为默认。":"Keep at least one default model for evaluation/optimization fallback. Switch the default before deleting it."]})]})]}),(0,b.jsxs)("aside",{style:aa,children:[(0,b.jsx)(L,{active:aw,providerKinds:ax,registeredCount:h.length,locale:g}),(0,b.jsx)(M,{configs:h,healthMap:Q,isRechecking:ad,onRecheck:ak,locale:g}),(0,b.jsx)(N,{locale:g})]})]})]})]}),(0,b.jsx)(z.ConfirmDialog,{open:!!O,onOpenChange:a=>!a&&P(null),tone:"danger",title:"zh"===g?"删除该模型?":"Delete this model?",description:O?"zh"===g?`将永久删除「${O.name}」配置,无法恢复。`:`"${O.name}" will be permanently removed.`:"",confirmText:"zh"===g?"删除":"Delete",cancelText:"zh"===g?"取消":"Cancel",onConfirm:async()=>{O&&await as(O.id)}})]}):(0,b.jsx)("div",{style:{padding:32,color:"var(--foreground-muted)",fontSize:12},children:c("common.loading")})}function I({status:a}){let c="success"===a.type?{bg:"var(--success-subtle)",fg:"var(--success)",border:"var(--success-subtle-border)"}:"error"===a.type?{bg:"var(--error-subtle)",fg:"var(--error)",border:"var(--error-subtle-border)"}:{bg:"var(--primary-subtle)",fg:"var(--primary)",border:"var(--primary-subtle-border)"};return(0,b.jsxs)("div",{style:{padding:"8px 12px",marginBottom:14,borderRadius:8,background:c.bg,color:c.fg,border:`1px solid ${c.border}`,fontSize:12,fontWeight:500,display:"flex",alignItems:"center",gap:6},children:["success"===a.type&&(0,b.jsx)(l.Check,{size:13,strokeWidth:2.5}),a.msg]})}function J({active:a,onClick:c,count:d,children:e}){return(0,b.jsxs)("button",{type:"button",onClick:c,"aria-pressed":a,className:"ai-filter-chip","data-active":a?"true":"false",style:ar,children:[e,"number"==typeof d&&d>0&&(0,b.jsx)("span",{className:"ai-filter-chip__count",children:d})]})}function K({config:a,isActive:c,isDefault:d,health:e,onActivate:f,onEdit:g,onDelete:h,locale:m}){let p=E[a.provider]??{label:a.provider||"Unknown",monogram:(a.provider?.slice(0,2)||"??").toUpperCase(),category:"other"},q=function(a,b){let c=B[a];if(c)return c;if(!b)return;let d=b.replace(/\/+$/,"").toLowerCase();return A.find(a=>{if(!a.baseUrl)return!1;let b=a.baseUrl.replace(/\/+$/,"").toLowerCase();return d===b||d.startsWith(b)})}(a.provider,a.baseUrl),r=e??G(a);return(0,b.jsxs)("article",{style:{...as,borderColor:c?"var(--primary-subtle-border)":"var(--card-border)",background:c?"linear-gradient(180deg, var(--primary-subtle) 0%, var(--card-bg) 56px)":"var(--card-bg)"},children:[c&&(0,b.jsx)("span",{style:at}),(0,b.jsx)(P,{slug:q?.logoSlug,initials:p.monogram,size:48,radius:12}),(0,b.jsxs)("div",{style:{minWidth:0},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap",marginBottom:6},children:[(0,b.jsx)("span",{style:av,children:a.name}),c&&(0,b.jsxs)("span",{style:ax,children:[(0,b.jsx)(o,{size:11,strokeWidth:2.5}),"zh"===m?"当前默认":"Default"]}),"ok"===r&&(0,b.jsxs)("span",{style:ay,children:[(0,b.jsx)("span",{style:aD}),"zh"===m?"正常":"Healthy"]}),"checking"===r&&(0,b.jsxs)("span",{style:aA,children:[(0,b.jsx)(u.Loader2,{size:11,strokeWidth:2.4,style:{animation:"spin 1s linear infinite"}}),"zh"===m?"连接中":"Checking"]}),"failed"===r&&(0,b.jsxs)("span",{style:aB,children:[(0,b.jsx)(v.XCircle,{size:11,strokeWidth:2.4}),"zh"===m?"Key 已失效":"Key invalid"]}),"unconfigured"===r&&(0,b.jsx)("span",{style:az,children:"zh"===m?"未设置 Key":"No key"}),d&&(0,b.jsx)("span",{style:aC,children:"zh"===m?"系统默认":"System"})]}),(0,b.jsxs)("div",{style:aE,children:[(0,b.jsxs)("span",{style:aF,children:[(0,b.jsx)("span",{style:aG,children:"Provider"}),(0,b.jsx)("span",{style:{...aH,fontFamily:"var(--font-mono)",fontSize:12},children:p.label})]}),(0,b.jsx)("span",{style:aI}),(0,b.jsxs)("span",{style:aF,children:[(0,b.jsx)("span",{style:aG,children:"Model"}),(0,b.jsx)("span",{style:{...aH,fontFamily:"var(--font-mono)",fontSize:12},children:a.model||"—"})]}),a.baseUrl&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{style:aI}),(0,b.jsxs)("span",{style:aF,children:[(0,b.jsx)("span",{style:aG,children:"Base URL"}),(0,b.jsx)("span",{style:{...aH,fontFamily:"var(--font-mono)",fontSize:12},title:a.baseUrl,children:a.baseUrl})]})]})]}),(0,b.jsxs)("div",{style:aJ,children:[(0,b.jsx)(i.Key,{size:12,strokeWidth:2.2,style:{color:"var(--primary)"}}),a.apiKey?(0,b.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:12},children:a.apiKey}):(0,b.jsx)("span",{style:{color:"var(--foreground-muted)",fontFamily:"var(--font-mono)",fontSize:12},children:"zh"===m?"(未设置)":"(not set)"})]})]}),(0,b.jsxs)("div",{style:aK,children:[c?(0,b.jsxs)("button",{style:aO,disabled:!0,children:[(0,b.jsx)(n.CircleCheck,{size:13,strokeWidth:2.4}),"zh"===m?"当前使用":"In use"]}):(0,b.jsxs)("button",{style:aN,onClick:f,children:[(0,b.jsx)(l.Check,{size:13,strokeWidth:2.2}),"zh"===m?"设为默认":"Set default"]}),!d&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("button",{style:aN,onClick:g,children:[(0,b.jsx)(j.Pencil,{size:13,strokeWidth:2.2}),"zh"===m?"编辑":"Edit"]}),(0,b.jsxs)("button",{style:aP,onClick:h,children:[(0,b.jsx)(k.Trash2,{size:13,strokeWidth:2.2}),"zh"===m?"删除":"Delete"]})]})]})]})}function L({active:a,providerKinds:c,registeredCount:d,locale:e}){return(0,b.jsxs)("section",{style:ad,children:[(0,b.jsxs)("header",{style:ae,children:[(0,b.jsx)(p,{size:13,strokeWidth:2.2,style:{color:"var(--primary)"}}),(0,b.jsx)("span",{children:"zh"===e?"当前默认":"Current Default"})]}),a?(0,b.jsxs)("ul",{style:af,children:[(0,b.jsx)(O,{label:"zh"===e?"名称":"Name",value:a.name,bold:!0}),(0,b.jsx)(O,{label:"Provider",value:a.provider,mono:!0}),(0,b.jsx)(O,{label:"Model",value:a.model||"—",mono:!0}),a.baseUrl&&(0,b.jsx)(O,{label:"Base URL",value:a.baseUrl,mono:!0,ellipsis:!0}),(0,b.jsx)(O,{label:"zh"===e?"已注册":"Registered",value:`${d} / 32`}),(0,b.jsx)(O,{label:"zh"===e?"供应商种类":"Providers",value:String(c)})]}):(0,b.jsx)("div",{style:{padding:"4px 0",fontSize:12,color:"var(--foreground-muted)"},children:"zh"===e?"尚未选定默认模型。":"No default selected."})]})}function M({configs:a,healthMap:c,isRechecking:d,onRecheck:e,locale:f}){return(0,b.jsxs)("section",{style:ad,children:[(0,b.jsxs)("header",{style:ae,children:[(0,b.jsx)(q,{size:13,strokeWidth:2.2,style:{color:"var(--success)"}}),(0,b.jsx)("span",{children:"zh"===f?"健康检查":"Health Check"})]}),0===a.length?(0,b.jsx)("div",{style:{padding:"4px 0",fontSize:12,color:"var(--foreground-muted)"},children:"zh"===f?"暂无模型可检查。":"No models to check."}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("ul",{style:{display:"flex",flexDirection:"column",gap:8,padding:0,margin:0,listStyle:"none"},children:a.map(a=>{let d=c[a.id]??G(a);return(0,b.jsxs)("li",{style:ag,children:[(0,b.jsx)("span",{style:{flex:1,minWidth:0,fontSize:12.5,color:"var(--foreground)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:a.model||a.name,children:a.model||a.name}),(0,b.jsx)(Q,{state:d,locale:f})]},a.id)})}),(0,b.jsxs)("button",{style:ah,onClick:e,disabled:d,children:[(0,b.jsx)(t.RefreshCw,{size:12,strokeWidth:2.2,style:d?{animation:"spin 1s linear infinite"}:void 0}),d?"zh"===f?"检查中…":"Checking…":"zh"===f?"重新检查":"Re-check"]})]})]})}function N({locale:a}){return(0,b.jsxs)("section",{style:ad,children:[(0,b.jsxs)("header",{style:ae,children:[(0,b.jsx)(r.BookOpen,{size:13,strokeWidth:2.2,style:{color:"var(--foreground-secondary)"}}),(0,b.jsx)("span",{children:"zh"===a?"相关文档":"Related Docs"})]}),(0,b.jsx)("ul",{style:{display:"flex",flexDirection:"column",gap:2,padding:0,margin:0,listStyle:"none"},children:("zh"===a?[{label:"如何获取 API Key",href:"#"},{label:"密钥加密与轮转策略",href:"#"},{label:"模型注册最佳实践",href:"#"}]:[{label:"How to obtain an API Key",href:"#"},{label:"Key encryption & rotation",href:"#"},{label:"Model registry best practices",href:"#"}]).map(a=>(0,b.jsx)("li",{children:(0,b.jsxs)("a",{href:a.href,style:ai,children:[(0,b.jsx)("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.label}),(0,b.jsx)(s.ExternalLink,{size:12,strokeWidth:2,style:{color:"var(--foreground-muted)",flexShrink:0}})]})},a.label))})]})}function O({label:a,value:c,mono:d,bold:e,ellipsis:f}){return(0,b.jsxs)("li",{style:{display:"flex",alignItems:"center",gap:12,padding:"5px 0",borderBottom:"1px dashed var(--border)",minWidth:0},children:[(0,b.jsx)("span",{style:{fontSize:11.5,color:"var(--foreground-muted)",flexShrink:0},children:a}),(0,b.jsx)("span",{style:{flex:1,minWidth:0,textAlign:"right",fontSize:12,color:"var(--foreground)",fontWeight:e?600:500,fontFamily:d?"var(--font-mono)":"inherit",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:f?c:void 0,children:c})]})}function P({slug:a,initials:c,size:e=36,radius:f=10}){let[g,h]=(0,d.useState)("color");(0,d.useEffect)(()=>{h("color")},[a]);let i="failed"===g?void 0:function(a,b="color"){if(a)return`https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@latest/icons/${a}${"color"===b?"-color":""}.svg`}(a,g),j=!!i;return(0,b.jsx)("div",{style:{...au,width:e,height:e,borderRadius:f,fontSize:Math.round(.32*e),background:j?"#ffffff":"var(--background-secondary)",padding:j?Math.round(.16*e):0,color:"var(--foreground)"},children:j?(0,b.jsx)("img",{src:i,alt:c,onError:()=>h("color"===g?"plain":"failed"),style:{width:"100%",height:"100%",objectFit:"contain"},loading:"lazy"}):c})}function Q({state:a,locale:c}){return"ok"===a?(0,b.jsxs)("span",{style:ay,children:[(0,b.jsx)(n.CircleCheck,{size:11,strokeWidth:2.4}),"zh"===c?"正常":"OK"]}):"checking"===a?(0,b.jsxs)("span",{style:aA,children:[(0,b.jsx)(u.Loader2,{size:11,strokeWidth:2.4,style:{animation:"spin 1s linear infinite"}}),"zh"===c?"检测中":"Checking"]}):"failed"===a?(0,b.jsxs)("span",{style:aB,children:[(0,b.jsx)(v.XCircle,{size:11,strokeWidth:2.4}),"zh"===c?"失效":"Failed"]}):(0,b.jsx)("span",{style:az,children:"zh"===c?"未配置":"No key"})}function R({locale:a,hasConfigs:c,onAdd:d,onReset:f}){return(0,b.jsxs)("div",{style:aU,children:[(0,b.jsx)("div",{style:aV,children:(0,b.jsx)(h,{size:20})}),(0,b.jsx)("div",{style:{fontSize:13.5,color:"var(--foreground)",fontWeight:500,marginBottom:4},children:c?"zh"===a?"没有匹配的模型":"No matching models":"zh"===a?"尚未注册任何模型":"No models registered yet"}),(0,b.jsx)("div",{style:{fontSize:12,color:"var(--foreground-muted)",marginBottom:14,textAlign:"center",maxWidth:360},children:c?"zh"===a?"试试调整搜索关键字或筛选条件。":"Try a different keyword or filter.":"zh"===a?"注册首个 LLM 后即可在评测、优化、对比中使用。":"Register your first LLM to use it for evaluation, optimization and comparison."}),c?(0,b.jsx)("button",{style:aN,onClick:f,children:"zh"===a?"清除筛选":"Reset filters"}):(0,b.jsxs)("button",{style:aL,onClick:d,children:[(0,b.jsx)(e.Plus,{size:14,strokeWidth:2.4}),"zh"===a?"注册首个模型":"Register your first model"]})]})}function S({onPick:a,onCancel:c,locale:e}){let[g,h]=(0,d.useState)(""),[i,j]=(0,d.useState)("all"),k=(0,d.useMemo)(()=>{let a=g.trim().toLowerCase();return A.filter(b=>("all"===i||b.category===i)&&(!a||b.label.toLowerCase().includes(a)||b.id.toLowerCase().includes(a)||b.defaultModel.toLowerCase().includes(a)||b.suggestedModels.some(b=>b.toLowerCase().includes(a))))},[g,i]),l=(0,d.useMemo)(()=>{let a={};for(let b of k)a[b.category]||(a[b.category]=[]),a[b.category].push(b);return a},[k]),m=(0,d.useMemo)(()=>{let a={all:A.length};for(let b of A)a[b.category]=(a[b.category]||0)+1;return a},[]);return(0,b.jsxs)("div",{style:aQ,children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",marginBottom:16,gap:16},children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{style:{fontSize:15,fontWeight:600,color:"var(--foreground)",letterSpacing:"-0.01em"},children:"zh"===e?"选择模型供应商":"Choose a Model Provider"}),(0,b.jsx)("div",{style:{fontSize:12,color:"var(--foreground-muted)",marginTop:3},children:"zh"===e?"挑选预置供应商即可自动填写 Base URL 与默认模型,下一步只需录入 API Key。":"Pick a built-in provider — Base URL and default model auto-fill. You only need to paste an API key next."})]}),(0,b.jsx)("button",{style:aN,onClick:c,children:"zh"===e?"返回列表":"Back to list"})]}),(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:14,flexWrap:"wrap"},children:[(0,b.jsxs)("div",{style:{...ao,width:280},children:[(0,b.jsx)(f.Search,{size:14,strokeWidth:2,style:{position:"absolute",left:11,top:"50%",transform:"translateY(-50%)",color:"var(--foreground-muted)"}}),(0,b.jsx)("input",{type:"text",placeholder:"zh"===e?"搜索供应商 / 模型":"Search provider / model",value:g,onChange:a=>h(a.target.value),style:ap})]}),(0,b.jsxs)("div",{style:aq,children:[(0,b.jsx)(J,{active:"all"===i,onClick:()=>j("all"),count:m.all,children:"zh"===e?"全部":"All"}),C.map(a=>(0,b.jsx)(J,{active:i===a.id,onClick:()=>j(a.id),count:m[a.id]||0,children:"zh"===e?a.labelZh:a.labelEn},a.id))]})]}),0===k.length?(0,b.jsx)("div",{style:{padding:"40px 0",textAlign:"center",fontSize:13,color:"var(--foreground-muted)"},children:"zh"===e?"没有匹配的供应商。":"No matching provider."}):(0,b.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:22},children:C.map(c=>{let d=l[c.id];return d&&0!==d.length?(0,b.jsxs)("section",{children:[(0,b.jsxs)("div",{style:aj,children:[(0,b.jsx)("span",{children:"zh"===e?c.labelZh:c.labelEn}),(0,b.jsx)("span",{style:ac,children:d.length})]}),(0,b.jsx)("div",{style:ak,children:d.map(c=>(0,b.jsxs)("button",{type:"button",onClick:()=>a(c),style:al,className:"provider-pick-card",children:[(0,b.jsx)(P,{slug:c.logoSlug,initials:c.initials,size:36,radius:9}),(0,b.jsxs)("div",{style:{minWidth:0,flex:1},children:[(0,b.jsx)("div",{style:{fontSize:13.5,fontWeight:600,color:"var(--foreground)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.label}),(0,b.jsx)("div",{style:{marginTop:3,fontSize:11.5,color:"var(--foreground-muted)",fontFamily:"var(--font-mono)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:c.suggestedModels.join(" · ")||c.defaultModel,children:c.suggestedModels.slice(0,3).join(" · ")||c.defaultModel||("zh"===e?"自填模型":"Custom model")})]})]},c.id))})]},c.id):null})})]})}function T({config:a,setConfig:c,onCancel:d,onReselect:e,onSave:f,isSaving:g,isDefault:h,pickedProvider:i,locale:j}){return(0,b.jsxs)("div",{style:aQ,children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",marginBottom:18,gap:16},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,minWidth:0},children:[i&&(0,b.jsx)(P,{slug:i.logoSlug,initials:i.initials,size:40,radius:10}),(0,b.jsxs)("div",{style:{minWidth:0},children:[(0,b.jsx)("div",{style:{fontSize:15,fontWeight:600,color:"var(--foreground)",letterSpacing:"-0.01em"},children:"new"===a.id?i?i.label:"zh"===j?"新增模型":"New Model":"zh"===j?"编辑模型":"Edit Model"}),(0,b.jsx)("div",{style:{fontSize:12,color:"var(--foreground-muted)",marginTop:3},children:i?.note?i.note:"zh"===j?"保存前会自动测试连接,连通后才会写入。":"Connection is tested before saving."})]})]}),(0,b.jsxs)("div",{style:{display:"flex",gap:8,flexShrink:0},children:[e&&(0,b.jsx)("button",{style:aN,onClick:e,children:"zh"===j?"← 选择其它供应商":"← Choose other provider"}),(0,b.jsx)("button",{style:aN,onClick:d,children:"zh"===j?"返回列表":"Back to list"})]})]}),(0,b.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, minmax(0, 1fr))",gap:"14px 18px"},children:[(0,b.jsx)(U,{label:"zh"===j?"配置名称":"Config Name",children:(0,b.jsx)("input",{style:aR,placeholder:"zh"===j?"例如:我的 DeepSeek":"e.g. My DeepSeek",value:a.name||"",disabled:h,onChange:b=>c({...a,name:b.target.value})})}),(0,b.jsx)(U,{label:"zh"===j?"供应商":"Provider",children:(0,b.jsxs)("select",{style:aR,value:a.provider,disabled:h,onChange:b=>{var d;let e;return e=D[d=b.target.value],void c({...a,provider:d,baseUrl:e.baseUrl||a.baseUrl,model:e.model||a.model})},children:[(0,b.jsx)("option",{value:"deepseek-official",children:"DeepSeek (Official)"}),(0,b.jsx)("option",{value:"siliconflow",children:"SiliconFlow"}),(0,b.jsx)("option",{value:"openai",children:"OpenAI"}),(0,b.jsx)("option",{value:"anthropic",children:"Anthropic"}),(0,b.jsx)("option",{value:"custom",children:"Custom (OpenAI Compatible)"})]})}),(0,b.jsx)(U,{label:"Base URL",children:(0,b.jsx)("input",{style:aR,placeholder:"https://api.deepseek.com",value:a.baseUrl||"",disabled:h,onChange:b=>c({...a,baseUrl:b.target.value.replace(/\/chat\/completions\/?$/,"")})})}),(0,b.jsxs)(U,{label:"zh"===j?"模型名":"Model Name",children:[(0,b.jsx)("input",{style:aR,placeholder:"deepseek-chat / gpt-4o / ...",value:a.model||"",disabled:h,onChange:b=>c({...a,model:b.target.value})}),i&&i.suggestedModels.length>0&&(0,b.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:5,marginTop:7},children:i.suggestedModels.slice(0,6).map(d=>(0,b.jsx)("button",{type:"button",onClick:()=>c({...a,model:d}),style:{...am,background:a.model===d?"var(--primary-subtle)":"var(--background-secondary)",color:a.model===d?"var(--primary)":"var(--foreground-secondary)",borderColor:a.model===d?"var(--primary-subtle-border)":"var(--border)"},children:d},d))})]}),(0,b.jsx)("div",{style:{gridColumn:"1 / -1"},children:(0,b.jsxs)(U,{label:"zh"===j?"API 密钥":"API Key",children:[(0,b.jsx)("input",{style:{...aR,fontFamily:"var(--font-mono, ui-monospace, monospace)"},type:"text",placeholder:"sk-...",value:a.apiKey||"",disabled:h,onChange:b=>c({...a,apiKey:b.target.value})}),(a.apiKey||"").includes("•")&&(0,b.jsx)("div",{style:{marginTop:6,fontSize:11.5,color:"var(--foreground-muted)"},children:"zh"===j?"出于安全考虑仅显示掩码。保持不变则沿用原 Key;如需更换请清空后输入新 Key。":"Masked for security. Leave unchanged to keep the current key; clear and type a new key to replace it."}),i?.docsUrl&&(0,b.jsx)("div",{style:{marginTop:6,fontSize:11.5,color:"var(--foreground-muted)"},children:(0,b.jsxs)("a",{href:i.docsUrl,target:"_blank",rel:"noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"inline-flex",alignItems:"center",gap:4},children:["zh"===j?"如何获取 API Key":"How to obtain an API Key",(0,b.jsx)(s.ExternalLink,{size:11,strokeWidth:2})]})})]})})]}),(0,b.jsxs)("div",{style:{display:"flex",justifyContent:"flex-end",gap:8,marginTop:20},children:[(0,b.jsx)("button",{style:aN,onClick:d,children:"zh"===j?"取消":"Cancel"}),!h&&(0,b.jsx)("button",{style:g?aM:aL,disabled:g,onClick:f,children:g?"zh"===j?"测试并保存中…":"Testing & Saving…":"zh"===j?"测试连接并保存":"Test & Save"})]})]})}function U({label:a,children:c}){return(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{style:{fontSize:11.5,fontWeight:500,color:"var(--foreground-secondary)",marginBottom:6,letterSpacing:"0.01em"},children:a}),c]})}let V={flex:1,minHeight:0,overflowY:"auto",padding:"24px 28px 40px",width:"100%"},W={maxWidth:1320,margin:"0 auto"},X={display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:24,marginBottom:22},Y={margin:0,fontSize:13,lineHeight:1.65,color:"var(--foreground-secondary)",maxWidth:720},Z={color:"var(--foreground)",fontWeight:600},$={display:"grid",gridTemplateColumns:"minmax(0, 1fr) 300px",gap:22,alignItems:"flex-start"},_={minWidth:0,display:"flex",flexDirection:"column",gap:14},aa={display:"flex",flexDirection:"column",gap:14,position:"sticky",top:0},ab={display:"flex",alignItems:"center",gap:8,padding:"2px 2px 6px",borderBottom:"1px solid var(--border)"},ac={display:"inline-flex",alignItems:"center",padding:"1px 8px",fontSize:11,fontWeight:600,fontFamily:"var(--font-mono)",color:"var(--foreground-secondary)",background:"var(--background-secondary)",border:"1px solid var(--border)",borderRadius:999,lineHeight:1.5},ad={background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12,padding:"14px 16px 12px",display:"flex",flexDirection:"column",gap:10},ae={display:"flex",alignItems:"center",gap:7,fontSize:13,fontWeight:600,color:"var(--foreground)",letterSpacing:"-0.005em",paddingBottom:8,borderBottom:"1px solid var(--border)"},af={display:"flex",flexDirection:"column",padding:0,margin:0,listStyle:"none"},ag={display:"flex",alignItems:"center",gap:10,padding:"5px 0",minWidth:0},ah={width:"100%",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,padding:"7px 10px",marginTop:4,background:"var(--card-bg)",color:"var(--foreground-secondary)",border:"1px solid var(--border)",borderRadius:7,fontSize:12,fontWeight:500,cursor:"pointer",transition:"all .12s ease"},ai={display:"flex",alignItems:"center",gap:8,padding:"7px 8px",fontSize:12.5,color:"var(--foreground-secondary)",textDecoration:"none",borderRadius:6,transition:"background .1s"},aj={display:"flex",alignItems:"center",gap:8,marginBottom:10,fontSize:12,fontWeight:600,color:"var(--foreground-secondary)",textTransform:"uppercase",letterSpacing:"0.08em"},ak={display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(220px, 1fr))",gap:10},al={display:"flex",alignItems:"center",gap:12,padding:"11px 12px",background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:10,cursor:"pointer",textAlign:"left",fontFamily:"inherit",transition:"all .12s ease",minWidth:0},am={padding:"3px 10px",fontSize:11,fontFamily:"var(--font-mono)",border:"1px solid var(--border)",borderRadius:999,cursor:"pointer",transition:"all .12s",lineHeight:1.5},an={display:"flex",alignItems:"center",gap:14,marginBottom:14,flexWrap:"wrap"},ao={position:"relative",width:280},ap={width:"100%",height:34,padding:"0 12px 0 32px",border:"1px solid var(--input-border)",borderRadius:8,background:"var(--input-bg)",fontSize:12.5,color:"var(--foreground)",outline:"none"},aq={display:"inline-flex",flexWrap:"wrap",gap:6},ar={padding:"6px 12px",fontSize:12,fontWeight:500,borderRadius:6,cursor:"pointer",fontFamily:"inherit",display:"inline-flex",alignItems:"center",gap:6,whiteSpace:"nowrap",lineHeight:1.4},as={background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12,padding:"18px 22px",display:"grid",gridTemplateColumns:"auto 1fr auto",gap:22,alignItems:"center",transition:"all .15s ease",position:"relative",overflow:"hidden"},at={position:"absolute",left:0,top:0,bottom:0,width:3,background:"var(--primary)"},au={width:48,height:48,borderRadius:12,background:"var(--background-secondary)",border:"1px solid var(--card-border)",display:"grid",placeItems:"center",fontWeight:600,fontSize:14,color:"var(--foreground-secondary)",letterSpacing:"0.02em",flexShrink:0},av={fontSize:16,fontWeight:600,color:"var(--foreground)",letterSpacing:"-0.01em"},aw={display:"inline-flex",alignItems:"center",gap:4,padding:"2px 8px",fontSize:10.5,fontWeight:600,borderRadius:999,lineHeight:1.5,letterSpacing:"0.01em"},ax={...aw,background:"var(--primary)",color:"var(--primary-foreground)"},ay={...aw,background:"var(--success-subtle)",color:"var(--success)"},az={...aw,background:"var(--warning-subtle)",color:"var(--warning)"},aA={...aw,background:"var(--primary-subtle)",color:"var(--primary)"},aB={...aw,background:"var(--error-subtle)",color:"var(--error)"},aC={...aw,background:"var(--background-secondary)",color:"var(--foreground-secondary)",border:"1px solid var(--border)"},aD={width:5,height:5,background:"var(--success)",borderRadius:"50%"},aE={display:"flex",alignItems:"center",gap:12,flexWrap:"wrap",marginBottom:10,fontSize:12.5,color:"var(--foreground-secondary)"},aF={display:"inline-flex",alignItems:"center",gap:6,minWidth:0},aG={fontSize:10.5,fontWeight:500,color:"var(--foreground-muted)",textTransform:"uppercase",letterSpacing:"0.06em"},aH={color:"var(--foreground)",fontWeight:500,maxWidth:280,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},aI={width:1,height:11,background:"var(--border)"},aJ={display:"inline-flex",alignItems:"center",gap:8,padding:"5px 10px",background:"var(--background-secondary)",border:"1px solid var(--border)",borderRadius:7,color:"var(--foreground-secondary)",maxWidth:"fit-content"},aK={display:"flex",alignItems:"center",gap:6,paddingLeft:16,borderLeft:"1px dashed var(--border)"},aL={display:"inline-flex",alignItems:"center",gap:6,padding:"7px 14px",background:"var(--primary)",color:"var(--primary-foreground)",border:"none",borderRadius:8,fontSize:12.5,fontWeight:500,cursor:"pointer",transition:"background .12s ease",lineHeight:1.4},aM={...aL,opacity:.6,cursor:"not-allowed"},aN={display:"inline-flex",alignItems:"center",gap:5,padding:"6px 12px",background:"var(--card-bg)",color:"var(--foreground-secondary)",borderWidth:1,borderStyle:"solid",borderColor:"var(--border)",borderRadius:7,fontSize:12,fontWeight:500,cursor:"pointer",transition:"all .12s ease",lineHeight:1.4},aO={...aN,background:"var(--success-subtle)",color:"var(--success)",borderColor:"var(--success-subtle-border)",cursor:"default"},aP={...aN,color:"var(--foreground-secondary)"},aQ={background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12,padding:"22px 26px"},aR={width:"100%",padding:"8px 10px",background:"var(--input-bg)",border:"1px solid var(--input-border)",borderRadius:7,color:"var(--foreground)",fontSize:12.5,outline:"none"},aS={marginTop:24,padding:"14px 18px",border:"1px dashed var(--border-dark)",borderRadius:10,background:"var(--background-secondary)",display:"flex",alignItems:"center",gap:12},aT={width:30,height:30,borderRadius:8,background:"var(--primary-subtle)",color:"var(--primary)",display:"grid",placeItems:"center",flexShrink:0},aU={padding:"40px 24px",background:"var(--card-bg)",border:"1px dashed var(--border-dark)",borderRadius:12,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},aV={width:44,height:44,borderRadius:10,background:"var(--background-secondary)",color:"var(--foreground-muted)",display:"grid",placeItems:"center",marginBottom:12},aW=a=>null==a?"":String(a),aX=a=>({key:a.key,input:aW(a.inputTokenPrice),output:aW(a.outputTokenPrice),cacheRead:aW(a.cacheReadInputTokenPrice),cacheCreation:aW(a.cacheCreationInputTokenPrice),ctx:aW(a.contextWindow)});function aY(){let{user:a}=(0,x.useAuth)(),[c,e]=(0,d.useState)(null),[f,g]=(0,d.useState)([]),[h,i]=(0,d.useState)(!0),[j,k]=(0,d.useState)(!1),[l,m]=(0,d.useState)(null),[n,o]=(0,d.useState)(!1),p=(0,d.useCallback)(async()=>{if(a){i(!0),m(null);try{let b=await (0,w.apiFetch)(`/api/modelconfig/pricing?user=${encodeURIComponent(a)}`);if(!b.ok)throw Error(`HTTP ${b.status}`);let c=await b.json();e(c),g(c.custom.map(aX))}catch(a){m({type:"err",text:a instanceof Error?a.message:"加载失败"})}finally{i(!1)}}},[a]);(0,d.useEffect)(()=>{p()},[p]);let q=!!c?.isAdmin,r=(a,b)=>g(c=>c.map((c,d)=>d===a?{...c,...b}:c)),s=(a="")=>g(b=>b.some(b=>b.key.trim()===a&&a)?b:[...b,{key:a,input:"",output:"",cacheRead:"",cacheCreation:"",ctx:""}]),t=async()=>{if(!a)return;let b={};for(let a of f){let c=a.key.trim();c&&(b[c]={inputTokenPrice:a.input,outputTokenPrice:a.output,cacheReadInputTokenPrice:a.cacheRead,cacheCreationInputTokenPrice:a.cacheCreation,contextWindow:a.ctx})}k(!0),m(null);try{let c=await (0,w.apiFetch)(`/api/modelconfig/pricing?user=${encodeURIComponent(a)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({custom:b})}),d=await c.json();if(!c.ok)throw Error(d.error||`HTTP ${c.status}`);m({type:"ok",text:`已保存 ${d.count} 个模型单价`}),await p()}catch(a){m({type:"err",text:a instanceof Error?a.message:"保存失败"})}finally{k(!1)}},u=(c?.observed||[]).filter(a=>!a.hasPricing);return(0,b.jsx)("div",{style:{padding:"0 28px 32px",width:"100%"},children:(0,b.jsx)("div",{style:{maxWidth:1320,margin:"0 auto"},children:(0,b.jsxs)("section",{style:{background:"var(--card-bg)",border:"1px solid var(--card-border)",borderRadius:12},children:[(0,b.jsxs)("div",{style:{padding:"13px 18px",borderBottom:"1px solid var(--border)",display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[(0,b.jsx)("span",{style:{fontSize:14,fontWeight:800,color:"var(--foreground)"},children:"模型单价"}),(0,b.jsxs)("span",{style:{fontSize:11,color:"var(--foreground-muted)"},children:["按模型名(前缀)配置 · 单位 ",c?.currency??"USD"," / 百万 token · 用于成本计算"]}),(0,b.jsx)("span",{style:{flex:1}}),!h&&(q?(0,b.jsx)("span",{style:{fontSize:10.5,color:"var(--success)",border:"1px solid var(--success-subtle-border)",background:"var(--success-subtle)",borderRadius:6,padding:"2px 8px"},children:"管理员 · 可编辑"}):(0,b.jsx)("span",{style:{fontSize:10.5,color:"var(--foreground-muted)",border:"1px solid var(--border)",borderRadius:6,padding:"2px 8px"},children:"只读 · 仅管理员可改"}))]}),(0,b.jsxs)("div",{style:{padding:18,display:"flex",flexDirection:"column",gap:16},children:[h&&(0,b.jsx)("div",{style:{color:"var(--foreground-muted)",fontSize:13},children:"加载中…"}),l&&(0,b.jsx)("div",{style:{fontSize:12,color:"ok"===l.type?"var(--success)":"var(--error)"},children:l.text}),!h&&!q&&(0,b.jsxs)("div",{style:{fontSize:11.5,color:"var(--foreground-muted)",background:"var(--background-secondary)",border:"1px solid var(--border)",borderRadius:8,padding:"10px 12px",lineHeight:1.6},children:["模型单价为全局配置,只有管理员可修改。部署时在环境变量 ",(0,b.jsx)("code",{style:{color:"var(--foreground-secondary)"},children:"AGENT_INSIGHT_ADMIN_USERS"}),"(逗号分隔用户名)中加入你的账号即可获得编辑权限。"]}),!h&&u.length>0&&(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{style:{fontSize:12,fontWeight:700,color:"var(--warning)",marginBottom:8},children:["⚠ 链路中出现但缺单价的模型(",u.length,")——成本按 0 计"]}),(0,b.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:8},children:u.map(a=>(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:6,fontSize:11.5,border:"1px solid var(--warning-subtle-border)",background:"var(--warning-subtle)",color:"var(--foreground-secondary)",borderRadius:7,padding:"3px 8px",fontFamily:"var(--font-mono, monospace)"},children:[a.model,q&&(0,b.jsx)("button",{onClick:()=>s(a.model),style:{border:"none",background:"var(--primary)",color:"#fff",borderRadius:5,fontSize:10.5,padding:"1px 7px",cursor:"pointer"},children:"补价"})]},a.model))})]}),!h&&(0,b.jsx)("div",{style:{overflowX:"auto"},children:(0,b.jsxs)("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:12},children:[(0,b.jsx)("thead",{children:(0,b.jsx)("tr",{children:["模型名(前缀)","input","output","缓存读","缓存写","上下文窗",""].map((a,c)=>(0,b.jsx)("th",{style:{textAlign:0===c?"left":"right",padding:"7px 10px",color:"var(--foreground-muted)",fontWeight:600,borderBottom:"1px solid var(--border)",whiteSpace:"nowrap"},children:a},c))})}),(0,b.jsxs)("tbody",{children:[f.map((a,c)=>(0,b.jsxs)("tr",{children:[(0,b.jsx)(aZ,{children:(0,b.jsx)(a$,{v:a.key,on:a=>r(c,{key:a}),admin:q,w:200,mono:!0,placeholder:"如 GLM-5"})}),(0,b.jsx)(aZ,{right:!0,children:(0,b.jsx)(a$,{v:a.input,on:a=>r(c,{input:a}),admin:q,w:80,num:!0})}),(0,b.jsx)(aZ,{right:!0,children:(0,b.jsx)(a$,{v:a.output,on:a=>r(c,{output:a}),admin:q,w:80,num:!0})}),(0,b.jsx)(aZ,{right:!0,children:(0,b.jsx)(a$,{v:a.cacheRead,on:a=>r(c,{cacheRead:a}),admin:q,w:80,num:!0,placeholder:"—"})}),(0,b.jsx)(aZ,{right:!0,children:(0,b.jsx)(a$,{v:a.cacheCreation,on:a=>r(c,{cacheCreation:a}),admin:q,w:80,num:!0,placeholder:"—"})}),(0,b.jsx)(aZ,{right:!0,children:(0,b.jsx)(a$,{v:a.ctx,on:a=>r(c,{ctx:a}),admin:q,w:90,num:!0,placeholder:"—"})}),(0,b.jsx)(aZ,{right:!0,children:q&&(0,b.jsx)("button",{onClick:()=>g(a=>a.filter((a,b)=>b!==c)),style:{border:"none",background:"transparent",color:"var(--error)",cursor:"pointer",fontSize:12},children:"删除"})})]},c)),0===f.length&&(0,b.jsx)("tr",{children:(0,b.jsxs)("td",{colSpan:7,style:{padding:18,textAlign:"center",color:"var(--foreground-muted)"},children:["暂无自定义单价",q?",点下方「添加模型」或上面缺价模型的「补价」":""]})})]})]})}),q&&!h&&(0,b.jsxs)("div",{style:{display:"flex",gap:10},children:[(0,b.jsx)("button",{onClick:()=>s(),style:a1,children:"+ 添加模型"}),(0,b.jsx)("span",{style:{flex:1}}),(0,b.jsx)("button",{onClick:t,disabled:j,style:{...a0,opacity:j?.6:1},children:j?"保存中…":"保存"})]}),!h&&c&&(0,b.jsxs)("div",{children:[(0,b.jsxs)("button",{onClick:()=>o(a=>!a),style:{border:"none",background:"transparent",color:"var(--primary)",cursor:"pointer",fontSize:11.5,padding:0},children:[n?"▾":"▸"," 内置默认单价(",c.builtin.length,",只读兜底,自定义会覆盖同前缀)"]}),n&&(0,b.jsx)("div",{style:{overflowX:"auto",marginTop:8},children:(0,b.jsxs)("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:11.5},children:[(0,b.jsx)("thead",{children:(0,b.jsx)("tr",{children:["模型名(前缀)","input","output","缓存读","缓存写","上下文窗"].map((a,c)=>(0,b.jsx)("th",{style:{textAlign:0===c?"left":"right",padding:"6px 10px",color:"var(--foreground-muted)",fontWeight:600,borderBottom:"1px solid var(--border)"},children:a},c))})}),(0,b.jsx)("tbody",{children:c.builtin.map(a=>(0,b.jsxs)("tr",{style:{color:"var(--foreground-secondary)"},children:[(0,b.jsx)("td",{style:{padding:"6px 10px",fontFamily:"var(--font-mono, monospace)"},children:a.key}),(0,b.jsx)("td",{style:a_,children:a.inputTokenPrice}),(0,b.jsx)("td",{style:a_,children:a.outputTokenPrice}),(0,b.jsx)("td",{style:a_,children:a.cacheReadInputTokenPrice??"—"}),(0,b.jsx)("td",{style:a_,children:a.cacheCreationInputTokenPrice??"—"}),(0,b.jsx)("td",{style:a_,children:a.contextWindow??"—"})]},a.key))})]})})]})]})]})})})}function aZ({children:a,right:c}){return(0,b.jsx)("td",{style:{padding:"5px 10px",borderBottom:"1px solid var(--border)",textAlign:c?"right":"left"},children:a})}function a$({v:a,on:c,admin:d,w:e,num:f,mono:g,placeholder:h}){return d?(0,b.jsx)("input",{value:a,onChange:a=>c(a.target.value),placeholder:h,inputMode:f?"decimal":"text",style:{width:e,maxWidth:"100%",padding:"4px 7px",fontSize:12,textAlign:f?"right":"left",borderRadius:6,border:"1px solid var(--border)",background:"var(--background)",color:"var(--foreground)",fontFamily:g||f?"var(--font-mono, monospace)":void 0}}):(0,b.jsx)("span",{style:{fontFamily:g||f?"var(--font-mono, monospace)":void 0,color:a?"var(--foreground)":"var(--foreground-muted)"},children:a||h||"—"})}let a_={padding:"6px 10px",textAlign:"right",fontFamily:"var(--font-mono, monospace)"},a0={border:"none",background:"var(--primary)",color:"var(--primary-foreground, #fff)",borderRadius:8,fontSize:12.5,fontWeight:600,padding:"7px 18px",cursor:"pointer"},a1={border:"1px solid var(--border)",background:"var(--card-bg)",color:"var(--foreground-secondary)",borderRadius:8,fontSize:12.5,padding:"7px 14px",cursor:"pointer"};var a2=a.i(960798);function a3(){let{t:a}=(0,y.useLocale)();return(0,b.jsxs)("div",{style:{height:"100%",overflowY:"auto"},children:[(0,b.jsx)(c.AppTopBar,{title:(0,b.jsx)(a2.Term,{id:"model-registry",label:a("nav.modelRegistry")})}),(0,b.jsx)(H,{}),(0,b.jsx)(aY,{})]})}a.s(["default",()=>a3],685260)}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28main%29_modelconfig_registry_page_tsx_1ead2fd4._.js.map