@johpaz/hive 1.7.2 → 1.7.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 (427) hide show
  1. package/README.md +178 -36
  2. package/dist/hive.js +315124 -0
  3. package/package.json +11 -3
  4. package/packages/core/src/index.ts +0 -1
  5. package/.dockerignore +0 -9
  6. package/CONTRIBUTING.md +0 -44
  7. package/Dockerfile +0 -67
  8. package/docker-compose.yml +0 -19
  9. package/packages/cli/package.json +0 -28
  10. package/packages/cli/src/commands/agent-run.ts +0 -168
  11. package/packages/cli/src/commands/agents.ts +0 -398
  12. package/packages/cli/src/commands/chat.ts +0 -142
  13. package/packages/cli/src/commands/config.ts +0 -50
  14. package/packages/cli/src/commands/cron.ts +0 -161
  15. package/packages/cli/src/commands/dev.ts +0 -95
  16. package/packages/cli/src/commands/doctor.ts +0 -133
  17. package/packages/cli/src/commands/gateway.ts +0 -422
  18. package/packages/cli/src/commands/logs.ts +0 -57
  19. package/packages/cli/src/commands/mcp.ts +0 -175
  20. package/packages/cli/src/commands/message.ts +0 -77
  21. package/packages/cli/src/commands/onboard.ts +0 -1696
  22. package/packages/cli/src/commands/security.ts +0 -144
  23. package/packages/cli/src/commands/service.ts +0 -50
  24. package/packages/cli/src/commands/sessions.ts +0 -116
  25. package/packages/cli/src/commands/skills.ts +0 -187
  26. package/packages/cli/src/commands/update.ts +0 -25
  27. package/packages/cli/src/index.ts +0 -190
  28. package/packages/cli/src/utils/token.ts +0 -6
  29. package/packages/code-bridge/README.md +0 -78
  30. package/packages/code-bridge/package.json +0 -18
  31. package/packages/code-bridge/src/index.ts +0 -95
  32. package/packages/code-bridge/src/process-manager.ts +0 -212
  33. package/packages/code-bridge/src/schemas.ts +0 -133
  34. package/packages/core/package.json +0 -55
  35. package/packages/core/src/agent/agent-loop.ts +0 -520
  36. package/packages/core/src/agent/compaction.ts +0 -183
  37. package/packages/core/src/agent/context-compiler.ts +0 -544
  38. package/packages/core/src/agent/context-guard.ts +0 -91
  39. package/packages/core/src/agent/conversation-store.ts +0 -193
  40. package/packages/core/src/agent/curator.ts +0 -158
  41. package/packages/core/src/agent/hooks.ts +0 -166
  42. package/packages/core/src/agent/llm-client.ts +0 -503
  43. package/packages/core/src/agent/native-tools.ts +0 -31
  44. package/packages/core/src/agent/playbook-selector.ts +0 -143
  45. package/packages/core/src/agent/prompt-builder.ts +0 -167
  46. package/packages/core/src/agent/providers/index.ts +0 -186
  47. package/packages/core/src/agent/providers.ts +0 -1
  48. package/packages/core/src/agent/reflector.ts +0 -200
  49. package/packages/core/src/agent/service.ts +0 -266
  50. package/packages/core/src/agent/skill-selector.ts +0 -413
  51. package/packages/core/src/agent/stuck-loop.ts +0 -133
  52. package/packages/core/src/agent/tool-selector.ts +0 -623
  53. package/packages/core/src/agent/tracer.ts +0 -102
  54. package/packages/core/src/canvas/canvas-manager.ts +0 -319
  55. package/packages/core/src/canvas/canvas-tools.ts +0 -420
  56. package/packages/core/src/canvas/emitter.ts +0 -119
  57. package/packages/core/src/canvas/index.ts +0 -2
  58. package/packages/core/src/channels/base.ts +0 -140
  59. package/packages/core/src/channels/discord.ts +0 -260
  60. package/packages/core/src/channels/index.ts +0 -7
  61. package/packages/core/src/channels/manager.ts +0 -383
  62. package/packages/core/src/channels/slack.ts +0 -287
  63. package/packages/core/src/channels/telegram.ts +0 -552
  64. package/packages/core/src/channels/webchat.ts +0 -139
  65. package/packages/core/src/channels/whatsapp.ts +0 -375
  66. package/packages/core/src/config/index.ts +0 -12
  67. package/packages/core/src/config/loader.ts +0 -529
  68. package/packages/core/src/events/agent-bus.ts +0 -460
  69. package/packages/core/src/events/event-bus.ts +0 -169
  70. package/packages/core/src/gateway/helpers/cors.ts +0 -32
  71. package/packages/core/src/gateway/helpers/index.ts +0 -4
  72. package/packages/core/src/gateway/helpers/narration.ts +0 -60
  73. package/packages/core/src/gateway/helpers/path.ts +0 -13
  74. package/packages/core/src/gateway/helpers/redact.ts +0 -61
  75. package/packages/core/src/gateway/index.ts +0 -5
  76. package/packages/core/src/gateway/initializer.ts +0 -332
  77. package/packages/core/src/gateway/lane-queue.ts +0 -169
  78. package/packages/core/src/gateway/resolver.ts +0 -108
  79. package/packages/core/src/gateway/router.ts +0 -124
  80. package/packages/core/src/gateway/routes/agents.ts +0 -187
  81. package/packages/core/src/gateway/routes/channels.ts +0 -203
  82. package/packages/core/src/gateway/routes/chat.ts +0 -241
  83. package/packages/core/src/gateway/routes/config.ts +0 -12
  84. package/packages/core/src/gateway/routes/cron.ts +0 -42
  85. package/packages/core/src/gateway/routes/ethics.ts +0 -46
  86. package/packages/core/src/gateway/routes/mcp.ts +0 -346
  87. package/packages/core/src/gateway/routes/models.ts +0 -93
  88. package/packages/core/src/gateway/routes/projects.ts +0 -179
  89. package/packages/core/src/gateway/routes/providers.ts +0 -192
  90. package/packages/core/src/gateway/routes/setup.ts +0 -267
  91. package/packages/core/src/gateway/routes/skills.ts +0 -70
  92. package/packages/core/src/gateway/routes/system.ts +0 -165
  93. package/packages/core/src/gateway/routes/tasks.ts +0 -44
  94. package/packages/core/src/gateway/routes/tools.ts +0 -35
  95. package/packages/core/src/gateway/routes/users.ts +0 -118
  96. package/packages/core/src/gateway/routes/voice.ts +0 -73
  97. package/packages/core/src/gateway/routes/workspace.ts +0 -281
  98. package/packages/core/src/gateway/server.ts +0 -1978
  99. package/packages/core/src/gateway/session.ts +0 -95
  100. package/packages/core/src/gateway/slash-commands.ts +0 -193
  101. package/packages/core/src/heartbeat/index.ts +0 -157
  102. package/packages/core/src/mcp/hot-reload.ts +0 -213
  103. package/packages/core/src/mcp/singleton.ts +0 -21
  104. package/packages/core/src/memory/index.ts +0 -1
  105. package/packages/core/src/memory/notes.ts +0 -68
  106. package/packages/core/src/plugins/api.ts +0 -128
  107. package/packages/core/src/plugins/index.ts +0 -2
  108. package/packages/core/src/plugins/loader.ts +0 -365
  109. package/packages/core/src/resilience/circuit-breaker.ts +0 -225
  110. package/packages/core/src/security/google-chat.ts +0 -269
  111. package/packages/core/src/security/index.ts +0 -192
  112. package/packages/core/src/security/pairing.ts +0 -250
  113. package/packages/core/src/security/rate-limit.ts +0 -270
  114. package/packages/core/src/security/signal.ts +0 -321
  115. package/packages/core/src/state/store.ts +0 -312
  116. package/packages/core/src/storage/crypto.ts +0 -101
  117. package/packages/core/src/storage/onboarding.ts +0 -1609
  118. package/packages/core/src/storage/schema.ts +0 -567
  119. package/packages/core/src/storage/seed.ts +0 -608
  120. package/packages/core/src/storage/sqlite.ts +0 -363
  121. package/packages/core/src/storage/usage.ts +0 -270
  122. package/packages/core/src/tools/agents/index.ts +0 -607
  123. package/packages/core/src/tools/bridge-events.ts +0 -26
  124. package/packages/core/src/tools/canvas/index.ts +0 -281
  125. package/packages/core/src/tools/cli/index.ts +0 -142
  126. package/packages/core/src/tools/codebridge/index.ts +0 -179
  127. package/packages/core/src/tools/core/index.ts +0 -257
  128. package/packages/core/src/tools/cron/index.ts +0 -373
  129. package/packages/core/src/tools/filesystem/fs-delete.ts +0 -78
  130. package/packages/core/src/tools/filesystem/fs-edit.ts +0 -106
  131. package/packages/core/src/tools/filesystem/fs-exists.ts +0 -63
  132. package/packages/core/src/tools/filesystem/fs-glob.ts +0 -108
  133. package/packages/core/src/tools/filesystem/fs-list.ts +0 -129
  134. package/packages/core/src/tools/filesystem/fs-read.ts +0 -72
  135. package/packages/core/src/tools/filesystem/fs-write.ts +0 -67
  136. package/packages/core/src/tools/filesystem/index.ts +0 -34
  137. package/packages/core/src/tools/filesystem/workspace-guard.ts +0 -62
  138. package/packages/core/src/tools/index.ts +0 -197
  139. package/packages/core/src/tools/projects/index.ts +0 -37
  140. package/packages/core/src/tools/projects/project-create.ts +0 -94
  141. package/packages/core/src/tools/projects/project-done.ts +0 -66
  142. package/packages/core/src/tools/projects/project-fail.ts +0 -66
  143. package/packages/core/src/tools/projects/project-list.ts +0 -96
  144. package/packages/core/src/tools/projects/project-update.ts +0 -72
  145. package/packages/core/src/tools/projects/task-create.ts +0 -68
  146. package/packages/core/src/tools/projects/task-evaluate.ts +0 -93
  147. package/packages/core/src/tools/projects/task-update.ts +0 -93
  148. package/packages/core/src/tools/search-knowledge/search-knowledge.ts +0 -155
  149. package/packages/core/src/tools/types.ts +0 -39
  150. package/packages/core/src/tools/voice/index.ts +0 -104
  151. package/packages/core/src/tools/web/browser-click.ts +0 -54
  152. package/packages/core/src/tools/web/browser-navigate.ts +0 -84
  153. package/packages/core/src/tools/web/browser-screenshot.ts +0 -54
  154. package/packages/core/src/tools/web/browser-type.ts +0 -60
  155. package/packages/core/src/tools/web/index.ts +0 -31
  156. package/packages/core/src/tools/web/web-fetch.ts +0 -78
  157. package/packages/core/src/tools/web/web-search.ts +0 -123
  158. package/packages/core/src/utils/benchmark.ts +0 -80
  159. package/packages/core/src/utils/crypto.ts +0 -73
  160. package/packages/core/src/utils/date.ts +0 -42
  161. package/packages/core/src/utils/index.ts +0 -5
  162. package/packages/core/src/utils/logger.ts +0 -389
  163. package/packages/core/src/utils/retry.ts +0 -70
  164. package/packages/core/src/utils/toon.ts +0 -356
  165. package/packages/core/src/voice/index.ts +0 -583
  166. package/packages/hive-ui/README.md +0 -52
  167. package/packages/hive-ui/components.json +0 -20
  168. package/packages/hive-ui/index.html +0 -30
  169. package/packages/hive-ui/package.json +0 -90
  170. package/packages/hive-ui/public/favicon.ico +0 -0
  171. package/packages/hive-ui/public/placeholder.svg +0 -1
  172. package/packages/hive-ui/src/App.tsx +0 -115
  173. package/packages/hive-ui/src/components/CronJobsPanel.tsx +0 -200
  174. package/packages/hive-ui/src/components/NavLink.tsx +0 -34
  175. package/packages/hive-ui/src/components/NotesPanel.tsx +0 -79
  176. package/packages/hive-ui/src/components/SystemMonitor.tsx +0 -270
  177. package/packages/hive-ui/src/components/UsageStatsPanel.tsx +0 -334
  178. package/packages/hive-ui/src/components/WelcomeDialog.tsx +0 -279
  179. package/packages/hive-ui/src/components/ui/accordion.tsx +0 -52
  180. package/packages/hive-ui/src/components/ui/alert-dialog.tsx +0 -104
  181. package/packages/hive-ui/src/components/ui/alert.tsx +0 -45
  182. package/packages/hive-ui/src/components/ui/aspect-ratio.tsx +0 -5
  183. package/packages/hive-ui/src/components/ui/avatar.tsx +0 -38
  184. package/packages/hive-ui/src/components/ui/badge.tsx +0 -29
  185. package/packages/hive-ui/src/components/ui/bee-loader.tsx +0 -68
  186. package/packages/hive-ui/src/components/ui/breadcrumb.tsx +0 -90
  187. package/packages/hive-ui/src/components/ui/button.tsx +0 -47
  188. package/packages/hive-ui/src/components/ui/calendar.tsx +0 -54
  189. package/packages/hive-ui/src/components/ui/card.tsx +0 -45
  190. package/packages/hive-ui/src/components/ui/carousel.tsx +0 -224
  191. package/packages/hive-ui/src/components/ui/chart.tsx +0 -303
  192. package/packages/hive-ui/src/components/ui/checkbox.tsx +0 -26
  193. package/packages/hive-ui/src/components/ui/collapsible.tsx +0 -9
  194. package/packages/hive-ui/src/components/ui/command.tsx +0 -133
  195. package/packages/hive-ui/src/components/ui/context-menu.tsx +0 -178
  196. package/packages/hive-ui/src/components/ui/dialog.tsx +0 -95
  197. package/packages/hive-ui/src/components/ui/drawer.tsx +0 -87
  198. package/packages/hive-ui/src/components/ui/dropdown-menu.tsx +0 -179
  199. package/packages/hive-ui/src/components/ui/form.tsx +0 -129
  200. package/packages/hive-ui/src/components/ui/hover-card.tsx +0 -27
  201. package/packages/hive-ui/src/components/ui/input-otp.tsx +0 -61
  202. package/packages/hive-ui/src/components/ui/input.tsx +0 -22
  203. package/packages/hive-ui/src/components/ui/label.tsx +0 -17
  204. package/packages/hive-ui/src/components/ui/menubar.tsx +0 -207
  205. package/packages/hive-ui/src/components/ui/navigation-menu.tsx +0 -120
  206. package/packages/hive-ui/src/components/ui/pagination.tsx +0 -80
  207. package/packages/hive-ui/src/components/ui/popover.tsx +0 -29
  208. package/packages/hive-ui/src/components/ui/progress.tsx +0 -23
  209. package/packages/hive-ui/src/components/ui/radio-group.tsx +0 -36
  210. package/packages/hive-ui/src/components/ui/resizable.tsx +0 -37
  211. package/packages/hive-ui/src/components/ui/scroll-area.tsx +0 -38
  212. package/packages/hive-ui/src/components/ui/select.tsx +0 -143
  213. package/packages/hive-ui/src/components/ui/separator.tsx +0 -20
  214. package/packages/hive-ui/src/components/ui/sheet.tsx +0 -107
  215. package/packages/hive-ui/src/components/ui/sidebar.tsx +0 -636
  216. package/packages/hive-ui/src/components/ui/skeleton.tsx +0 -7
  217. package/packages/hive-ui/src/components/ui/slider.tsx +0 -23
  218. package/packages/hive-ui/src/components/ui/sonner.tsx +0 -27
  219. package/packages/hive-ui/src/components/ui/switch.tsx +0 -27
  220. package/packages/hive-ui/src/components/ui/table.tsx +0 -72
  221. package/packages/hive-ui/src/components/ui/tabs.tsx +0 -53
  222. package/packages/hive-ui/src/components/ui/textarea.tsx +0 -21
  223. package/packages/hive-ui/src/components/ui/toast.tsx +0 -111
  224. package/packages/hive-ui/src/components/ui/toaster.tsx +0 -24
  225. package/packages/hive-ui/src/components/ui/toggle-group.tsx +0 -49
  226. package/packages/hive-ui/src/components/ui/toggle.tsx +0 -37
  227. package/packages/hive-ui/src/components/ui/tooltip.tsx +0 -28
  228. package/packages/hive-ui/src/components/ui/use-toast.ts +0 -3
  229. package/packages/hive-ui/src/hooks/use-mobile.tsx +0 -19
  230. package/packages/hive-ui/src/hooks/use-toast.ts +0 -186
  231. package/packages/hive-ui/src/hooks/useAgentConfig.ts +0 -25
  232. package/packages/hive-ui/src/hooks/useAgents.ts +0 -38
  233. package/packages/hive-ui/src/hooks/useBridge.ts +0 -38
  234. package/packages/hive-ui/src/hooks/useCanvas.ts +0 -24
  235. package/packages/hive-ui/src/hooks/useChannels.ts +0 -2
  236. package/packages/hive-ui/src/hooks/useEthics.ts +0 -51
  237. package/packages/hive-ui/src/hooks/useProviders.ts +0 -14
  238. package/packages/hive-ui/src/hooks/useTheme.ts +0 -29
  239. package/packages/hive-ui/src/hooks/useUserConfig.ts +0 -17
  240. package/packages/hive-ui/src/hooks/useWebSocket.ts +0 -12
  241. package/packages/hive-ui/src/index.css +0 -620
  242. package/packages/hive-ui/src/lib/api.ts +0 -100
  243. package/packages/hive-ui/src/lib/constants.ts +0 -6
  244. package/packages/hive-ui/src/lib/models.ts +0 -64
  245. package/packages/hive-ui/src/lib/swal.ts +0 -30
  246. package/packages/hive-ui/src/lib/utils.ts +0 -6
  247. package/packages/hive-ui/src/lib/websocket.ts +0 -7
  248. package/packages/hive-ui/src/main.tsx +0 -5
  249. package/packages/hive-ui/src/modules/agent-config/details/AgentDetailsEditor.tsx +0 -524
  250. package/packages/hive-ui/src/modules/agent-config/ethics/EthicsConflictDetector.tsx +0 -18
  251. package/packages/hive-ui/src/modules/agent-config/ethics/EthicsEditor.tsx +0 -19
  252. package/packages/hive-ui/src/modules/agent-config/ethics/EthicsRulesList.tsx +0 -36
  253. package/packages/hive-ui/src/modules/agent-config/ethics/EthicsTemplateGallery.tsx +0 -361
  254. package/packages/hive-ui/src/modules/agent-config/ethics/index.ts +0 -4
  255. package/packages/hive-ui/src/modules/agent-config/index.ts +0 -6
  256. package/packages/hive-ui/src/modules/agent-config/mcp/MCPServerAdd.tsx +0 -322
  257. package/packages/hive-ui/src/modules/agent-config/mcp/MCPServerCard.tsx +0 -93
  258. package/packages/hive-ui/src/modules/agent-config/mcp/MCPServerConfig.tsx +0 -427
  259. package/packages/hive-ui/src/modules/agent-config/mcp/MCPServerList.tsx +0 -85
  260. package/packages/hive-ui/src/modules/agent-config/mcp/MCPToolExplorer.tsx +0 -79
  261. package/packages/hive-ui/src/modules/agent-config/mcp/index.ts +0 -5
  262. package/packages/hive-ui/src/modules/agent-config/shared/ConfigEditorLayout.tsx +0 -30
  263. package/packages/hive-ui/src/modules/agent-config/shared/ConfigExporter.tsx +0 -26
  264. package/packages/hive-ui/src/modules/agent-config/shared/ConfigImporter.tsx +0 -25
  265. package/packages/hive-ui/src/modules/agent-config/shared/DiffViewer.tsx +0 -31
  266. package/packages/hive-ui/src/modules/agent-config/shared/MarkdownEditor.tsx +0 -32
  267. package/packages/hive-ui/src/modules/agent-config/shared/SaveStatusIndicator.tsx +0 -23
  268. package/packages/hive-ui/src/modules/agent-config/shared/ValidationPanel.tsx +0 -36
  269. package/packages/hive-ui/src/modules/agent-config/shared/index.ts +0 -7
  270. package/packages/hive-ui/src/modules/agent-config/skills/SkillCard.tsx +0 -81
  271. package/packages/hive-ui/src/modules/agent-config/skills/SkillConfigEditor.tsx +0 -22
  272. package/packages/hive-ui/src/modules/agent-config/skills/SkillCreator.tsx +0 -60
  273. package/packages/hive-ui/src/modules/agent-config/skills/SkillInstaller.tsx +0 -23
  274. package/packages/hive-ui/src/modules/agent-config/skills/SkillList.tsx +0 -72
  275. package/packages/hive-ui/src/modules/agent-config/skills/SkillsTab.tsx +0 -202
  276. package/packages/hive-ui/src/modules/agent-config/skills/index.ts +0 -5
  277. package/packages/hive-ui/src/modules/agent-config/tools/ToolCard.tsx +0 -27
  278. package/packages/hive-ui/src/modules/agent-config/tools/ToolConfigPanel.tsx +0 -22
  279. package/packages/hive-ui/src/modules/agent-config/tools/ToolManager.tsx +0 -266
  280. package/packages/hive-ui/src/modules/agent-config/tools/ToolPermissions.tsx +0 -287
  281. package/packages/hive-ui/src/modules/agent-config/tools/ToolRegistry.tsx +0 -84
  282. package/packages/hive-ui/src/modules/agent-config/tools/ToolUsageStats.tsx +0 -52
  283. package/packages/hive-ui/src/modules/agent-config/tools/index.ts +0 -4
  284. package/packages/hive-ui/src/modules/agent-config/user/ActiveAgentsList.tsx +0 -109
  285. package/packages/hive-ui/src/modules/agent-config/user/GlobalConfigOverview.tsx +0 -119
  286. package/packages/hive-ui/src/modules/agent-config/user/UserMemoryManager.tsx +0 -54
  287. package/packages/hive-ui/src/modules/agent-config/user/UserPreferencesForm.tsx +0 -163
  288. package/packages/hive-ui/src/modules/agent-config/user/UserProfileEditor.tsx +0 -261
  289. package/packages/hive-ui/src/modules/agent-config/user/index.ts +0 -3
  290. package/packages/hive-ui/src/modules/agents/AgentActivityLog.tsx +0 -25
  291. package/packages/hive-ui/src/modules/agents/AgentCard.tsx +0 -305
  292. package/packages/hive-ui/src/modules/agents/AgentCreateForm.tsx +0 -446
  293. package/packages/hive-ui/src/modules/agents/AgentDetail.tsx +0 -28
  294. package/packages/hive-ui/src/modules/agents/AgentInternalCard.tsx +0 -162
  295. package/packages/hive-ui/src/modules/agents/AgentList.tsx +0 -29
  296. package/packages/hive-ui/src/modules/agents/AgentStatusBadge.tsx +0 -34
  297. package/packages/hive-ui/src/modules/agents/ModelSelector.tsx +0 -151
  298. package/packages/hive-ui/src/modules/bridge/BridgeLogViewer.tsx +0 -61
  299. package/packages/hive-ui/src/modules/bridge/BridgeProcessList.tsx +0 -77
  300. package/packages/hive-ui/src/modules/bridge/BridgeStatus.tsx +0 -23
  301. package/packages/hive-ui/src/modules/bridge/BridgeTerminal.tsx +0 -7
  302. package/packages/hive-ui/src/modules/canvas/CanvasButton.tsx +0 -3
  303. package/packages/hive-ui/src/modules/canvas/CanvasChart.tsx +0 -3
  304. package/packages/hive-ui/src/modules/canvas/CanvasComponentMap.tsx +0 -605
  305. package/packages/hive-ui/src/modules/canvas/CanvasContainer.tsx +0 -360
  306. package/packages/hive-ui/src/modules/canvas/CanvasForm.tsx +0 -3
  307. package/packages/hive-ui/src/modules/canvas/CanvasMarkdown.tsx +0 -3
  308. package/packages/hive-ui/src/modules/canvas/CanvasTable.tsx +0 -3
  309. package/packages/hive-ui/src/modules/canvas/ComponentRenderer.tsx +0 -30
  310. package/packages/hive-ui/src/modules/canvas/DynamicRenderer.tsx +0 -3
  311. package/packages/hive-ui/src/modules/channels/available/AvailableChannelsGrid.tsx +0 -89
  312. package/packages/hive-ui/src/modules/channels/available/ChannelAuthForm.tsx +0 -33
  313. package/packages/hive-ui/src/modules/channels/available/ChannelSetupWizard.tsx +0 -48
  314. package/packages/hive-ui/src/modules/channels/available/ChannelTestConnection.tsx +0 -37
  315. package/packages/hive-ui/src/modules/channels/available/ChannelTypeCard.tsx +0 -30
  316. package/packages/hive-ui/src/modules/channels/available/ChannelWebhookConfig.tsx +0 -30
  317. package/packages/hive-ui/src/modules/channels/available/index.ts +0 -6
  318. package/packages/hive-ui/src/modules/channels/connected/ChannelCard.tsx +0 -95
  319. package/packages/hive-ui/src/modules/channels/connected/ChannelConfigPanel.tsx +0 -260
  320. package/packages/hive-ui/src/modules/channels/connected/ChannelDisconnectButton.tsx +0 -21
  321. package/packages/hive-ui/src/modules/channels/connected/ChannelLogsViewer.tsx +0 -42
  322. package/packages/hive-ui/src/modules/channels/connected/ChannelQRCode.tsx +0 -32
  323. package/packages/hive-ui/src/modules/channels/connected/ChannelReconnectButton.tsx +0 -16
  324. package/packages/hive-ui/src/modules/channels/connected/ChannelStatusBadge.tsx +0 -26
  325. package/packages/hive-ui/src/modules/channels/connected/ConnectedChannelsList.tsx +0 -40
  326. package/packages/hive-ui/src/modules/channels/connected/index.ts +0 -8
  327. package/packages/hive-ui/src/modules/channels/shared/ChannelCard.tsx +0 -84
  328. package/packages/hive-ui/src/modules/channels/shared/ChannelConfigDialog.tsx +0 -279
  329. package/packages/hive-ui/src/modules/channels/shared/ChannelIcon.tsx +0 -40
  330. package/packages/hive-ui/src/modules/channels/shared/ChannelStats.tsx +0 -37
  331. package/packages/hive-ui/src/modules/channels/shared/ChannelTypeBadge.tsx +0 -23
  332. package/packages/hive-ui/src/modules/channels/shared/ConnectionHealthIndicator.tsx +0 -20
  333. package/packages/hive-ui/src/modules/channels/shared/MessagePreview.tsx +0 -19
  334. package/packages/hive-ui/src/modules/channels/shared/index.ts +0 -5
  335. package/packages/hive-ui/src/modules/chat/ChatContainer.tsx +0 -268
  336. package/packages/hive-ui/src/modules/chat/ChatHistory.tsx +0 -101
  337. package/packages/hive-ui/src/modules/chat/ChatInput.tsx +0 -108
  338. package/packages/hive-ui/src/modules/chat/ChatMessage.tsx +0 -137
  339. package/packages/hive-ui/src/modules/chat/ThinkingIndicator.tsx +0 -10
  340. package/packages/hive-ui/src/modules/layout/AppLayout.tsx +0 -45
  341. package/packages/hive-ui/src/modules/layout/ConnectionStatus.tsx +0 -19
  342. package/packages/hive-ui/src/modules/layout/Header.tsx +0 -20
  343. package/packages/hive-ui/src/modules/layout/HiveSidebar.tsx +0 -173
  344. package/packages/hive-ui/src/modules/layout/ThemeToggle.tsx +0 -18
  345. package/packages/hive-ui/src/modules/providers/ProviderCard.tsx +0 -319
  346. package/packages/hive-ui/src/modules/providers/ProviderConfigForm.tsx +0 -146
  347. package/packages/hive-ui/src/modules/providers/ProviderFailoverConfig.tsx +0 -110
  348. package/packages/hive-ui/src/modules/providers/ProviderList.tsx +0 -33
  349. package/packages/hive-ui/src/modules/providers/ProviderStatusIndicator.tsx +0 -23
  350. package/packages/hive-ui/src/modules/providers/configs/ProviderAPIKeyManager.tsx +0 -39
  351. package/packages/hive-ui/src/modules/providers/configs/ProviderEndpointConfig.tsx +0 -27
  352. package/packages/hive-ui/src/modules/providers/configs/ProviderRateLimits.tsx +0 -37
  353. package/packages/hive-ui/src/modules/providers/configs/ProviderRetryPolicy.tsx +0 -46
  354. package/packages/hive-ui/src/modules/providers/configs/index.ts +0 -4
  355. package/packages/hive-ui/src/modules/providers/index.ts +0 -5
  356. package/packages/hive-ui/src/modules/providers/models/ModelBenchmarkBadge.tsx +0 -21
  357. package/packages/hive-ui/src/modules/providers/models/ModelCapabilities.tsx +0 -44
  358. package/packages/hive-ui/src/modules/providers/models/ModelCard.tsx +0 -36
  359. package/packages/hive-ui/src/modules/providers/models/ModelComparisonTable.tsx +0 -47
  360. package/packages/hive-ui/src/modules/providers/models/ModelList.tsx +0 -51
  361. package/packages/hive-ui/src/modules/providers/models/ModelPricingInfo.tsx +0 -17
  362. package/packages/hive-ui/src/modules/providers/models/ModelSelector.tsx +0 -32
  363. package/packages/hive-ui/src/modules/providers/models/index.ts +0 -7
  364. package/packages/hive-ui/src/pages/AgentDetailPage.tsx +0 -74
  365. package/packages/hive-ui/src/pages/AgentNewPage.tsx +0 -5
  366. package/packages/hive-ui/src/pages/AgentsPage.tsx +0 -147
  367. package/packages/hive-ui/src/pages/BridgePage.tsx +0 -83
  368. package/packages/hive-ui/src/pages/CanvasPage.tsx +0 -32
  369. package/packages/hive-ui/src/pages/ChannelsPage.tsx +0 -176
  370. package/packages/hive-ui/src/pages/DashboardPage.tsx +0 -321
  371. package/packages/hive-ui/src/pages/Index.tsx +0 -14
  372. package/packages/hive-ui/src/pages/LogsPage.tsx +0 -252
  373. package/packages/hive-ui/src/pages/NotFound.tsx +0 -24
  374. package/packages/hive-ui/src/pages/ProjectsPage.tsx +0 -241
  375. package/packages/hive-ui/src/pages/ProvidersPage.tsx +0 -111
  376. package/packages/hive-ui/src/pages/SettingsPage.tsx +0 -147
  377. package/packages/hive-ui/src/pages/SetupPage.tsx +0 -1177
  378. package/packages/hive-ui/src/pages/WebChatPage.tsx +0 -15
  379. package/packages/hive-ui/src/stores/agentConfigStore.ts +0 -32
  380. package/packages/hive-ui/src/stores/agentStore.ts +0 -5
  381. package/packages/hive-ui/src/stores/bridgeStore.ts +0 -237
  382. package/packages/hive-ui/src/stores/canvasStore.ts +0 -250
  383. package/packages/hive-ui/src/stores/channelStore.ts +0 -5
  384. package/packages/hive-ui/src/stores/chatStore.ts +0 -42
  385. package/packages/hive-ui/src/stores/ethicsStore.ts +0 -141
  386. package/packages/hive-ui/src/stores/mcpStore.ts +0 -5
  387. package/packages/hive-ui/src/stores/modelStore.ts +0 -2
  388. package/packages/hive-ui/src/stores/projectsStore.ts +0 -141
  389. package/packages/hive-ui/src/stores/providerStore.ts +0 -2
  390. package/packages/hive-ui/src/stores/skillStore.ts +0 -5
  391. package/packages/hive-ui/src/stores/toolStore.ts +0 -5
  392. package/packages/hive-ui/src/stores/useGlobalConfigStore.ts +0 -937
  393. package/packages/hive-ui/src/stores/useLoaderStore.ts +0 -21
  394. package/packages/hive-ui/src/stores/useNotesAndCronsStore.ts +0 -144
  395. package/packages/hive-ui/src/stores/useWebSocketStore.ts +0 -152
  396. package/packages/hive-ui/src/stores/useWelcomeStore.ts +0 -37
  397. package/packages/hive-ui/src/stores/userConfigStore.ts +0 -23
  398. package/packages/hive-ui/src/stores/userStore.ts +0 -82
  399. package/packages/hive-ui/src/test/setup.ts +0 -15
  400. package/packages/hive-ui/src/types/agent-config.ts +0 -33
  401. package/packages/hive-ui/src/types/agent.ts +0 -65
  402. package/packages/hive-ui/src/types/bridge.ts +0 -27
  403. package/packages/hive-ui/src/types/canvas.ts +0 -76
  404. package/packages/hive-ui/src/types/channels.ts +0 -109
  405. package/packages/hive-ui/src/types/chat.ts +0 -25
  406. package/packages/hive-ui/src/types/connections.ts +0 -17
  407. package/packages/hive-ui/src/types/ethics.ts +0 -41
  408. package/packages/hive-ui/src/types/index.ts +0 -15
  409. package/packages/hive-ui/src/types/mcp.ts +0 -36
  410. package/packages/hive-ui/src/types/notes-crons.ts +0 -31
  411. package/packages/hive-ui/src/types/providers.ts +0 -145
  412. package/packages/hive-ui/src/types/skill.ts +0 -12
  413. package/packages/hive-ui/src/types/tool.ts +0 -44
  414. package/packages/hive-ui/src/types/user.ts +0 -26
  415. package/packages/hive-ui/src/types/websocket.ts +0 -14
  416. package/packages/hive-ui/src/vite-env.d.ts +0 -1
  417. package/packages/mcp/package.json +0 -26
  418. package/packages/mcp/src/config.ts +0 -13
  419. package/packages/mcp/src/index.ts +0 -1
  420. package/packages/mcp/src/logger.ts +0 -42
  421. package/packages/mcp/src/manager.ts +0 -439
  422. package/packages/mcp/src/transports/index.ts +0 -67
  423. package/packages/mcp/src/transports/sse.ts +0 -241
  424. package/packages/mcp/src/transports/websocket.ts +0 -159
  425. package/packages/skills/package.json +0 -21
  426. package/packages/skills/src/index.ts +0 -1
  427. package/packages/skills/src/loader.ts +0 -346
@@ -1,270 +0,0 @@
1
- import { useEffect, useState, useRef } from "react";
2
- import { useQuery } from "@tanstack/react-query";
3
- import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
4
- import { MemoryStick, HardDrive, Activity, Zap, Gauge, Play, History, Loader2, Server, MessageSquare } from "lucide-react";
5
- import { apiClient } from "@/lib/api";
6
- import {
7
- AreaChart,
8
- Area,
9
- XAxis,
10
- YAxis,
11
- ResponsiveContainer,
12
- } from "recharts";
13
-
14
- interface HiveMetrics {
15
- cpu: number;
16
- memory: {
17
- rss: number;
18
- heapUsed: number;
19
- heapTotal: number;
20
- heapPercent: number;
21
- external: number;
22
- };
23
- uptime: string;
24
- connections: number;
25
- cores: number;
26
- recentMessages: number;
27
- }
28
-
29
- interface HistoryPoint {
30
- time: string;
31
- msgs: number;
32
- rss: number;
33
- }
34
-
35
- interface BenchmarkResult {
36
- timestamp: string;
37
- metrics: {
38
- name: string;
39
- duration: string;
40
- heapUsed: string;
41
- heapTotal: string;
42
- rss: string;
43
- external: string;
44
- };
45
- }
46
-
47
- function getColor(pct: number): string {
48
- if (pct < 50) return "#22c55e";
49
- if (pct < 80) return "#eab308";
50
- return "#ef4444";
51
- }
52
-
53
- export function SystemMonitor() {
54
- const [history, setHistory] = useState<HistoryPoint[]>(() => {
55
- const now = new Date();
56
- return Array.from({ length: 12 }, (_, i) => ({
57
- time: new Date(now.getTime() - (11 - i) * 5000).toLocaleTimeString("es", { hour: "2-digit", minute: "2-digit", second: "2-digit" }),
58
- msgs: 0,
59
- rss: 0,
60
- }));
61
- });
62
-
63
- const [benchHistory, setBenchHistory] = useState<BenchmarkResult[]>([]);
64
- const [isBenchmarking, setIsBenchmarking] = useState(false);
65
-
66
- const { data: metrics } = useQuery<HiveMetrics>({
67
- queryKey: ["system-stats"],
68
- queryFn: () => apiClient<HiveMetrics>("/api/system-stats"),
69
- refetchInterval: 5000,
70
- });
71
-
72
- const metricsRef = useRef(metrics);
73
- useEffect(() => { metricsRef.current = metrics; }, [metrics]);
74
-
75
- useEffect(() => {
76
- const id = setInterval(() => {
77
- const m = metricsRef.current;
78
- if (!m) return;
79
- const time = new Date().toLocaleTimeString("es", { hour: "2-digit", minute: "2-digit", second: "2-digit" });
80
- setHistory(prev => [...prev, { time, msgs: m.recentMessages, rss: m.memory.rss }].slice(-20));
81
- }, 5000);
82
- return () => clearInterval(id);
83
- }, []);
84
-
85
- const handleBenchmark = async () => {
86
- setIsBenchmarking(true);
87
- try {
88
- const result = await apiClient<BenchmarkResult>("/api/benchmark", { method: "POST" });
89
- setBenchHistory(prev => [result, ...prev].slice(0, 5));
90
- } catch { /* ignore */ } finally {
91
- setIsBenchmarking(false);
92
- }
93
- };
94
-
95
- const rssMB = metrics?.memory.rss ?? 0;
96
- const heapUsed = metrics?.memory.heapUsed ?? 0;
97
- const external = metrics?.memory.external ?? 0;
98
- const recentMessages = metrics?.recentMessages ?? 0;
99
-
100
- return (
101
- <div className="flex flex-col gap-4 mb-4">
102
- <Card className="overflow-hidden border-primary/10">
103
- <CardHeader className="pb-2 bg-gradient-to-r from-primary/5 to-transparent">
104
- <div className="flex items-center justify-between">
105
- <CardTitle className="text-base flex items-center gap-2">
106
- <Gauge className="h-4 w-4 text-primary" />
107
- Monitor del Proceso Hive
108
- </CardTitle>
109
- <div className="flex items-center gap-3">
110
- <button
111
- onClick={handleBenchmark}
112
- disabled={isBenchmarking}
113
- className="flex items-center gap-2 px-3 py-1 rounded-full bg-primary text-primary-foreground text-xs font-medium hover:bg-primary/90 disabled:opacity-50 transition-colors"
114
- >
115
- {isBenchmarking ? <Loader2 className="h-3 w-3 animate-spin" /> : <Play className="h-3 w-3" />}
116
- Benchmark
117
- </button>
118
- <div className="text-xs text-muted-foreground">
119
- Uptime: <span className="font-mono font-bold text-foreground">{metrics?.uptime ?? "—"}</span>
120
- </div>
121
- </div>
122
- </div>
123
- </CardHeader>
124
- <CardContent className="grid gap-4 sm:grid-cols-2 lg:grid-cols-4 pt-4">
125
- <MetricCard
126
- icon={MessageSquare}
127
- label="Actividad reciente"
128
- value={`${recentMessages}`}
129
- subValue="mensajes últimos 5 min"
130
- color={recentMessages > 0 ? "#22c55e" : "hsl(var(--muted-foreground))"}
131
- progress={Math.min(100, recentMessages * 10)}
132
- />
133
- <MetricCard
134
- icon={HardDrive}
135
- label="Memoria Hive (RSS)"
136
- value={`${rssMB} MB`}
137
- subValue={`Heap JS: ${heapUsed} MB usados`}
138
- color={getColor(Math.min(100, Math.round((rssMB / 1024) * 100)))}
139
- progress={Math.min(100, Math.round((rssMB / 1024) * 100))}
140
- />
141
- <MetricCard
142
- icon={MemoryStick}
143
- label="Heap JS"
144
- value={`${heapUsed} MB`}
145
- subValue={`External: ${external} MB`}
146
- color="#3b82f6"
147
- progress={Math.min(100, Math.round((heapUsed / 512) * 100))}
148
- />
149
- <MetricCard
150
- icon={Server}
151
- label="Sesiones WS activas"
152
- value={`${metrics?.connections ?? 0}`}
153
- subValue="conexiones WebSocket"
154
- color="#a855f7"
155
- progress={Math.min(100, (metrics?.connections ?? 0) * 10)}
156
- />
157
- </CardContent>
158
- </Card>
159
-
160
- <Card className="border-primary/10">
161
- <CardHeader className="pb-2">
162
- <CardTitle className="text-sm flex items-center gap-2">
163
- <Activity className="h-4 w-4 text-primary" />
164
- Historial — <span className="text-green-400">Mensajes</span> · <span className="text-purple-400">RSS MB</span>
165
- </CardTitle>
166
- </CardHeader>
167
- <CardContent className="h-[160px]">
168
- <ResponsiveContainer width="100%" height="100%">
169
- <AreaChart data={history}>
170
- <defs>
171
- <linearGradient id="gMsgs" x1="0" y1="0" x2="0" y2="1">
172
- <stop offset="5%" stopColor="#22c55e" stopOpacity={0.3} />
173
- <stop offset="95%" stopColor="#22c55e" stopOpacity={0} />
174
- </linearGradient>
175
- <linearGradient id="gHeap" x1="0" y1="0" x2="0" y2="1">
176
- <stop offset="5%" stopColor="#8b5cf6" stopOpacity={0.3} />
177
- <stop offset="95%" stopColor="#8b5cf6" stopOpacity={0} />
178
- </linearGradient>
179
- </defs>
180
- <XAxis dataKey="time" axisLine={false} tickLine={false}
181
- tick={{ fill: "hsl(var(--muted-foreground))", fontSize: 9 }} interval="preserveStartEnd" />
182
- <YAxis axisLine={false} tickLine={false}
183
- tick={{ fill: "hsl(var(--muted-foreground))", fontSize: 9 }} />
184
- <Area type="monotone" dataKey="msgs" stroke="#22c55e" strokeWidth={2}
185
- fillOpacity={1} fill="url(#gMsgs)" name="Mensajes" />
186
- <Area type="monotone" dataKey="rss" stroke="#8b5cf6" strokeWidth={2}
187
- fillOpacity={1} fill="url(#gHeap)" name="RSS MB" />
188
- </AreaChart>
189
- </ResponsiveContainer>
190
- </CardContent>
191
- </Card>
192
-
193
- {/* Benchmark history */}
194
- <Card className="border-primary/10">
195
- <CardHeader className="pb-2">
196
- <CardTitle className="text-sm flex items-center gap-2">
197
- <History className="h-4 w-4 text-primary" />
198
- Historial de Benchmarks
199
- </CardTitle>
200
- </CardHeader>
201
- <CardContent>
202
- <div className="space-y-2">
203
- {benchHistory.length > 0 ? benchHistory.map((b, i) => (
204
- <div key={i} className="flex flex-col sm:flex-row sm:items-center justify-between p-2 rounded-lg bg-muted/30 border border-border/50 gap-2">
205
- <div className="flex items-center gap-3">
206
- <div className="h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center">
207
- <Zap className="h-4 w-4 text-primary" />
208
- </div>
209
- <div>
210
- <p className="text-xs font-bold">{b.metrics.name}</p>
211
- <p className="text-[10px] text-muted-foreground">{new Date(b.timestamp).toLocaleTimeString()}</p>
212
- </div>
213
- </div>
214
- <div className="flex items-center gap-4 text-xs font-mono">
215
- <div className="flex flex-col items-end">
216
- <span className="text-[10px] text-muted-foreground">RSS</span>
217
- <span className="text-primary font-bold">{b.metrics.rss}</span>
218
- </div>
219
- <div className="flex flex-col items-end">
220
- <span className="text-[10px] text-muted-foreground">Heap</span>
221
- <span>{b.metrics.heapUsed}</span>
222
- </div>
223
- <div className="flex flex-col items-end">
224
- <span className="text-[10px] text-muted-foreground">Duración</span>
225
- <span className="text-green-500">{b.metrics.duration}</span>
226
- </div>
227
- </div>
228
- </div>
229
- )) : (
230
- <div className="h-16 flex flex-col items-center justify-center text-muted-foreground gap-1">
231
- <History className="h-6 w-6 opacity-20" />
232
- <span className="text-xs italic">Sin benchmarks recientes</span>
233
- </div>
234
- )}
235
- </div>
236
- </CardContent>
237
- </Card>
238
- </div>
239
- );
240
- }
241
-
242
- function MetricCard({
243
- icon: Icon, label, value, subValue, color, progress,
244
- }: {
245
- icon: React.ComponentType<{ className?: string }>;
246
- label: string;
247
- value: string;
248
- subValue: string;
249
- color: string;
250
- progress: number;
251
- }) {
252
- return (
253
- <div className="rounded-lg border bg-card/50 p-3 space-y-2">
254
- <div className="flex items-center justify-between">
255
- <div className="flex items-center gap-2">
256
- <span style={{ color }}><Icon className="h-4 w-4" /></span>
257
- <span className="text-xs font-medium text-muted-foreground">{label}</span>
258
- </div>
259
- <span className="text-lg font-bold font-mono" style={{ color }}>{value}</span>
260
- </div>
261
- <div className="space-y-1">
262
- <div className="h-1.5 w-full rounded-full bg-muted overflow-hidden">
263
- <div className="h-full rounded-full transition-all duration-500"
264
- style={{ width: `${Math.min(progress, 100)}%`, backgroundColor: color }} />
265
- </div>
266
- <span className="text-xs text-muted-foreground">{subValue}</span>
267
- </div>
268
- </div>
269
- );
270
- }
@@ -1,334 +0,0 @@
1
- import { useState } from "react";
2
- import { useQuery } from "@tanstack/react-query";
3
- import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card";
4
- import { DollarSign, Hash, Activity, Clock, TrendingUp, Server, Bot, Zap } from "lucide-react";
5
- import { apiClient } from "@/lib/api";
6
- import {
7
- AreaChart,
8
- Area,
9
- XAxis,
10
- YAxis,
11
- ResponsiveContainer,
12
- BarChart,
13
- Bar,
14
- Cell,
15
- PieChart,
16
- Pie,
17
- Legend,
18
- Tooltip
19
- } from "recharts";
20
-
21
- interface UsageStats {
22
- totalTokens: number;
23
- totalInputTokens: number;
24
- totalOutputTokens: number;
25
- totalCostUsd: number;
26
- toonSavedTokens: number;
27
- toonSavedCost: number;
28
- toonSavingsPercent: number;
29
- byProvider: Record<string, { tokens: number; costUsd: number; inputTokens: number; outputTokens: number }>;
30
- byModel: Record<string, { tokens: number; costUsd: number; provider: string; inputTokens: number; outputTokens: number }>;
31
- }
32
-
33
- const PROVIDER_COLORS: Record<string, string> = {
34
- anthropic: "#d97706",
35
- openai: "#10b981",
36
- google: "#3b82f6",
37
- gemini: "#3b82f6",
38
- deepseek: "#8b5cf6",
39
- kimi: "#ec4899",
40
- ollama: "#14b8a6",
41
- openrouter: "#f59e0b",
42
- mistral: "#6366f1",
43
- };
44
-
45
- function formatNumber(num: number): string {
46
- if (num >= 1000000) return (num / 1000000).toFixed(2) + "M";
47
- if (num >= 1000) return (num / 1000).toFixed(1) + "K";
48
- return num.toString();
49
- }
50
-
51
- function formatCurrency(usd: number): string {
52
- if (usd >= 1) return "$" + usd.toFixed(2);
53
- return "$" + usd.toFixed(4);
54
- }
55
-
56
- export function UsageStatsPanel() {
57
- const [period, setPeriod] = useState<number>(24);
58
-
59
- const { data: stats, isLoading } = useQuery<UsageStats>({
60
- queryKey: ["usage-stats", period],
61
- queryFn: async () => {
62
- const data = await apiClient<UsageStats>(`/api/usage-stats?hours=${period}`);
63
- console.log("[UsageStatsPanel] Received stats:", {
64
- totalTokens: data.totalTokens,
65
- totalCostUsd: data.totalCostUsd,
66
- providers: Object.keys(data.byProvider || {}).length
67
- });
68
- return data;
69
- },
70
- refetchInterval: 60000,
71
- });
72
-
73
- if (isLoading && !stats) {
74
- return (
75
- <Card className="border-primary/10">
76
- <CardHeader>
77
- <CardTitle className="flex items-center gap-2">
78
- <DollarSign className="h-5 w-5 text-primary" />
79
- Uso y Costos de API
80
- </CardTitle>
81
- </CardHeader>
82
- <CardContent>
83
- <div className="h-40 flex items-center justify-center text-muted-foreground animate-pulse">
84
- Cargando estadísticas de uso...
85
- </div>
86
- </CardContent>
87
- </Card>
88
- );
89
- }
90
-
91
- const hasData = stats && (stats.totalTokens > 0 || stats.totalCostUsd > 0);
92
-
93
- const providerData = stats ? Object.entries(stats.byProvider).map(([provider, data]) => ({
94
- name: provider.charAt(0).toUpperCase() + provider.slice(1),
95
- value: data.tokens,
96
- cost: data.costUsd,
97
- color: PROVIDER_COLORS[provider.toLowerCase()] || "#6b7280"
98
- })) : [];
99
-
100
- const modelData = stats ? Object.entries(stats.byModel).slice(0, 8).map(([model, data]) => ({
101
- name: model.length > 20 ? model.slice(0, 18) + "..." : model,
102
- tokens: data.tokens,
103
- cost: data.costUsd,
104
- fullName: model
105
- })) : [];
106
-
107
- return (
108
- <Card className="border-primary/10">
109
- <CardHeader className="pb-2">
110
- <div className="flex items-center justify-between">
111
- <div>
112
- <CardTitle className="text-base flex items-center gap-2">
113
- <DollarSign className="h-5 w-5 text-primary" />
114
- Uso y Costos de API
115
- </CardTitle>
116
- <CardDescription>Tokens consumidos y costos por provider/modelo</CardDescription>
117
- </div>
118
- <div className="flex gap-1">
119
- {[6, 24, 168].map((h) => (
120
- <button
121
- key={h}
122
- onClick={() => setPeriod(h)}
123
- className={`px-2 py-1 text-xs rounded-md transition-colors ${period === h
124
- ? "bg-primary text-primary-foreground"
125
- : "bg-muted hover:bg-muted/80"
126
- }`}
127
- >
128
- {h === 6 ? "6h" : h === 24 ? "24h" : "7d"}
129
- </button>
130
- ))}
131
- </div>
132
- </div>
133
- </CardHeader>
134
- <CardContent className="space-y-4">
135
- {/* TOON Ahorro: siempre visible */}
136
- <div className={`rounded-lg border p-3 ${stats?.toonSavedTokens ? "border-emerald-500/30 bg-emerald-500/5" : "bg-card/50"}`}>
137
- <div className="flex items-center justify-between">
138
- <div className="flex items-center gap-2 text-xs text-muted-foreground">
139
- <Zap className={`h-3 w-3 ${stats?.toonSavedTokens ? "text-emerald-400" : ""}`} />
140
- <span className="font-medium">TOON Ahorro de Tokens</span>
141
- </div>
142
- {stats?.toonSavingsPercent ? (
143
- <span className="text-xs font-bold text-emerald-400">{stats.toonSavingsPercent.toFixed(1)}% reducción</span>
144
- ) : null}
145
- </div>
146
- <div className="mt-2 flex items-end gap-4">
147
- <div>
148
- <div className={`text-2xl font-bold ${stats?.toonSavedTokens ? "text-emerald-400" : "text-muted-foreground"}`}>
149
- {stats ? formatNumber(stats.toonSavedTokens) : "—"}
150
- </div>
151
- <div className="text-xs text-muted-foreground">tokens ahorrados</div>
152
- </div>
153
- {stats ? (
154
- <div className="text-sm font-semibold text-emerald-400">{formatCurrency(stats.toonSavedCost)} USD</div>
155
- ) : null}
156
- {stats && !stats.toonSavedTokens && (
157
- <div className="text-xs text-muted-foreground italic">Sin optimizaciones TOON aún</div>
158
- )}
159
- </div>
160
- </div>
161
-
162
- {!hasData ? (
163
- <div className="h-32 flex items-center justify-center text-muted-foreground">
164
- <div className="text-center">
165
- <Activity className="h-8 w-8 mx-auto mb-2 opacity-50" />
166
- <p>No hay datos de uso aún</p>
167
- <p className="text-xs">Los tokens se registrarán automáticamente</p>
168
- </div>
169
- </div>
170
- ) : (
171
- <>
172
- <div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-4">
173
- <div className="rounded-lg border bg-card/50 p-3">
174
- <div className="flex items-center gap-2 text-xs text-muted-foreground mb-1">
175
- <DollarSign className="h-3 w-3" />
176
- Costo Total
177
- </div>
178
- <div className="text-2xl font-bold text-green-500">
179
- {formatCurrency(stats.totalCostUsd)}
180
- </div>
181
- </div>
182
- <div className="rounded-lg border bg-card/50 p-3">
183
- <div className="flex items-center gap-2 text-xs text-muted-foreground mb-1">
184
- <Hash className="h-3 w-3" />
185
- Total Tokens
186
- </div>
187
- <div className="text-2xl font-bold">
188
- {formatNumber(stats.totalTokens)}
189
- </div>
190
- </div>
191
- <div className="rounded-lg border bg-card/50 p-3">
192
- <div className="flex items-center gap-2 text-xs text-muted-foreground mb-1">
193
- <TrendingUp className="h-3 w-3" />
194
- Input / Output
195
- </div>
196
- <div className="text-lg font-semibold">
197
- <span className="text-blue-500">{formatNumber(stats.totalInputTokens)}</span>
198
- <span className="text-muted-foreground"> / </span>
199
- <span className="text-purple-500">{formatNumber(stats.totalOutputTokens)}</span>
200
- </div>
201
- </div>
202
- <div className="rounded-lg border bg-card/50 p-3">
203
- <div className="flex items-center gap-2 text-xs text-muted-foreground mb-1">
204
- <Server className="h-3 w-3" />
205
- Providers
206
- </div>
207
- <div className="text-2xl font-bold">
208
- {Object.keys(stats.byProvider).length}
209
- </div>
210
- </div>
211
- </div>
212
-
213
- <div className="grid gap-4 lg:grid-cols-2">
214
- <div>
215
- <h4 className="text-sm font-medium mb-2 flex items-center gap-2">
216
- <Server className="h-4 w-4 text-muted-foreground" />
217
- Por Provider
218
- </h4>
219
- <div className="h-[180px]">
220
- <ResponsiveContainer width="100%" height="100%">
221
- <BarChart data={providerData} layout="vertical">
222
- <XAxis type="number" hide />
223
- <YAxis
224
- type="category"
225
- dataKey="name"
226
- axisLine={false}
227
- tickLine={false}
228
- tick={{ fill: "hsl(var(--muted-foreground))", fontSize: 11 }}
229
- width={70}
230
- />
231
- <Tooltip
232
- contentStyle={{
233
- backgroundColor: "hsl(var(--card))",
234
- border: "1px solid hsl(var(--border))",
235
- borderRadius: "8px"
236
- }}
237
- formatter={(value: number, name: string) => [
238
- name === "cost" ? formatCurrency(value) : formatNumber(value),
239
- name === "cost" ? "Costo" : "Tokens"
240
- ]}
241
- />
242
- <Bar dataKey="value" radius={[0, 4, 4, 0]} barSize={16}>
243
- {providerData.map((entry) => (
244
- <Cell key={entry.name} fill={entry.color} />
245
- ))}
246
- </Bar>
247
- </BarChart>
248
- </ResponsiveContainer>
249
- </div>
250
- </div>
251
-
252
- <div>
253
- <h4 className="text-sm font-medium mb-2 flex items-center gap-2">
254
- <Bot className="h-4 w-4 text-muted-foreground" />
255
- Por Modelo (Top 8)
256
- </h4>
257
- <div className="h-[180px]">
258
- <ResponsiveContainer width="100%" height="100%">
259
- <BarChart data={modelData}>
260
- <XAxis
261
- dataKey="name"
262
- axisLine={false}
263
- tickLine={false}
264
- tick={{ fill: "hsl(var(--muted-foreground))", fontSize: 10 }}
265
- angle={-45}
266
- textAnchor="end"
267
- height={60}
268
- />
269
- <YAxis
270
- axisLine={false}
271
- tickLine={false}
272
- tick={{ fill: "hsl(var(--muted-foreground))", fontSize: 10 }}
273
- />
274
- <Tooltip
275
- contentStyle={{
276
- backgroundColor: "hsl(var(--card))",
277
- border: "1px solid hsl(var(--border))",
278
- borderRadius: "8px"
279
- }}
280
- formatter={(value: number) => formatCurrency(value)}
281
- labelFormatter={(label) => {
282
- const model = modelData.find(m => m.name === label);
283
- return model?.fullName || label;
284
- }}
285
- />
286
- <Bar dataKey="cost" radius={[4, 4, 0, 0]}>
287
- {modelData.map((entry) => (
288
- <Cell
289
- key={entry.fullName}
290
- fill={PROVIDER_COLORS[entry.fullName.split("-")[0]?.toLowerCase()] || "#6b7280"}
291
- />
292
- ))}
293
- </Bar>
294
- </BarChart>
295
- </ResponsiveContainer>
296
- </div>
297
- </div>
298
- </div>
299
-
300
- {providerData.length > 0 && (
301
- <div>
302
- <h4 className="text-sm font-medium mb-2">Detalle por Provider</h4>
303
- <div className="rounded-lg border overflow-hidden">
304
- <table className="w-full text-sm">
305
- <thead className="bg-muted/50">
306
- <tr>
307
- <th className="text-left p-2 font-medium">Provider</th>
308
- <th className="text-right p-2 font-medium">Input</th>
309
- <th className="text-right p-2 font-medium">Output</th>
310
- <th className="text-right p-2 font-medium">Total</th>
311
- <th className="text-right p-2 font-medium">Costo</th>
312
- </tr>
313
- </thead>
314
- <tbody>
315
- {Object.entries(stats.byProvider).map(([provider, data]) => (
316
- <tr key={provider} className="border-t">
317
- <td className="p-2 font-medium">{provider}</td>
318
- <td className="p-2 text-right text-blue-500">{formatNumber(data.inputTokens)}</td>
319
- <td className="p-2 text-right text-purple-500">{formatNumber(data.outputTokens)}</td>
320
- <td className="p-2 text-right">{formatNumber(data.tokens)}</td>
321
- <td className="p-2 text-right font-medium text-green-500">{formatCurrency(data.costUsd)}</td>
322
- </tr>
323
- ))}
324
- </tbody>
325
- </table>
326
- </div>
327
- </div>
328
- )}
329
- </>
330
- )}
331
- </CardContent>
332
- </Card>
333
- );
334
- }