@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.
- package/README.md +178 -36
- package/dist/hive.js +315124 -0
- package/package.json +11 -3
- package/packages/core/src/index.ts +0 -1
- package/.dockerignore +0 -9
- package/CONTRIBUTING.md +0 -44
- package/Dockerfile +0 -67
- package/docker-compose.yml +0 -19
- package/packages/cli/package.json +0 -28
- package/packages/cli/src/commands/agent-run.ts +0 -168
- package/packages/cli/src/commands/agents.ts +0 -398
- package/packages/cli/src/commands/chat.ts +0 -142
- package/packages/cli/src/commands/config.ts +0 -50
- package/packages/cli/src/commands/cron.ts +0 -161
- package/packages/cli/src/commands/dev.ts +0 -95
- package/packages/cli/src/commands/doctor.ts +0 -133
- package/packages/cli/src/commands/gateway.ts +0 -422
- package/packages/cli/src/commands/logs.ts +0 -57
- package/packages/cli/src/commands/mcp.ts +0 -175
- package/packages/cli/src/commands/message.ts +0 -77
- package/packages/cli/src/commands/onboard.ts +0 -1696
- package/packages/cli/src/commands/security.ts +0 -144
- package/packages/cli/src/commands/service.ts +0 -50
- package/packages/cli/src/commands/sessions.ts +0 -116
- package/packages/cli/src/commands/skills.ts +0 -187
- package/packages/cli/src/commands/update.ts +0 -25
- package/packages/cli/src/index.ts +0 -190
- package/packages/cli/src/utils/token.ts +0 -6
- package/packages/code-bridge/README.md +0 -78
- package/packages/code-bridge/package.json +0 -18
- package/packages/code-bridge/src/index.ts +0 -95
- package/packages/code-bridge/src/process-manager.ts +0 -212
- package/packages/code-bridge/src/schemas.ts +0 -133
- package/packages/core/package.json +0 -55
- package/packages/core/src/agent/agent-loop.ts +0 -520
- package/packages/core/src/agent/compaction.ts +0 -183
- package/packages/core/src/agent/context-compiler.ts +0 -544
- package/packages/core/src/agent/context-guard.ts +0 -91
- package/packages/core/src/agent/conversation-store.ts +0 -193
- package/packages/core/src/agent/curator.ts +0 -158
- package/packages/core/src/agent/hooks.ts +0 -166
- package/packages/core/src/agent/llm-client.ts +0 -503
- package/packages/core/src/agent/native-tools.ts +0 -31
- package/packages/core/src/agent/playbook-selector.ts +0 -143
- package/packages/core/src/agent/prompt-builder.ts +0 -167
- package/packages/core/src/agent/providers/index.ts +0 -186
- package/packages/core/src/agent/providers.ts +0 -1
- package/packages/core/src/agent/reflector.ts +0 -200
- package/packages/core/src/agent/service.ts +0 -266
- package/packages/core/src/agent/skill-selector.ts +0 -413
- package/packages/core/src/agent/stuck-loop.ts +0 -133
- package/packages/core/src/agent/tool-selector.ts +0 -623
- package/packages/core/src/agent/tracer.ts +0 -102
- package/packages/core/src/canvas/canvas-manager.ts +0 -319
- package/packages/core/src/canvas/canvas-tools.ts +0 -420
- package/packages/core/src/canvas/emitter.ts +0 -119
- package/packages/core/src/canvas/index.ts +0 -2
- package/packages/core/src/channels/base.ts +0 -140
- package/packages/core/src/channels/discord.ts +0 -260
- package/packages/core/src/channels/index.ts +0 -7
- package/packages/core/src/channels/manager.ts +0 -383
- package/packages/core/src/channels/slack.ts +0 -287
- package/packages/core/src/channels/telegram.ts +0 -552
- package/packages/core/src/channels/webchat.ts +0 -139
- package/packages/core/src/channels/whatsapp.ts +0 -375
- package/packages/core/src/config/index.ts +0 -12
- package/packages/core/src/config/loader.ts +0 -529
- package/packages/core/src/events/agent-bus.ts +0 -460
- package/packages/core/src/events/event-bus.ts +0 -169
- package/packages/core/src/gateway/helpers/cors.ts +0 -32
- package/packages/core/src/gateway/helpers/index.ts +0 -4
- package/packages/core/src/gateway/helpers/narration.ts +0 -60
- package/packages/core/src/gateway/helpers/path.ts +0 -13
- package/packages/core/src/gateway/helpers/redact.ts +0 -61
- package/packages/core/src/gateway/index.ts +0 -5
- package/packages/core/src/gateway/initializer.ts +0 -332
- package/packages/core/src/gateway/lane-queue.ts +0 -169
- package/packages/core/src/gateway/resolver.ts +0 -108
- package/packages/core/src/gateway/router.ts +0 -124
- package/packages/core/src/gateway/routes/agents.ts +0 -187
- package/packages/core/src/gateway/routes/channels.ts +0 -203
- package/packages/core/src/gateway/routes/chat.ts +0 -241
- package/packages/core/src/gateway/routes/config.ts +0 -12
- package/packages/core/src/gateway/routes/cron.ts +0 -42
- package/packages/core/src/gateway/routes/ethics.ts +0 -46
- package/packages/core/src/gateway/routes/mcp.ts +0 -346
- package/packages/core/src/gateway/routes/models.ts +0 -93
- package/packages/core/src/gateway/routes/projects.ts +0 -179
- package/packages/core/src/gateway/routes/providers.ts +0 -192
- package/packages/core/src/gateway/routes/setup.ts +0 -267
- package/packages/core/src/gateway/routes/skills.ts +0 -70
- package/packages/core/src/gateway/routes/system.ts +0 -165
- package/packages/core/src/gateway/routes/tasks.ts +0 -44
- package/packages/core/src/gateway/routes/tools.ts +0 -35
- package/packages/core/src/gateway/routes/users.ts +0 -118
- package/packages/core/src/gateway/routes/voice.ts +0 -73
- package/packages/core/src/gateway/routes/workspace.ts +0 -281
- package/packages/core/src/gateway/server.ts +0 -1978
- package/packages/core/src/gateway/session.ts +0 -95
- package/packages/core/src/gateway/slash-commands.ts +0 -193
- package/packages/core/src/heartbeat/index.ts +0 -157
- package/packages/core/src/mcp/hot-reload.ts +0 -213
- package/packages/core/src/mcp/singleton.ts +0 -21
- package/packages/core/src/memory/index.ts +0 -1
- package/packages/core/src/memory/notes.ts +0 -68
- package/packages/core/src/plugins/api.ts +0 -128
- package/packages/core/src/plugins/index.ts +0 -2
- package/packages/core/src/plugins/loader.ts +0 -365
- package/packages/core/src/resilience/circuit-breaker.ts +0 -225
- package/packages/core/src/security/google-chat.ts +0 -269
- package/packages/core/src/security/index.ts +0 -192
- package/packages/core/src/security/pairing.ts +0 -250
- package/packages/core/src/security/rate-limit.ts +0 -270
- package/packages/core/src/security/signal.ts +0 -321
- package/packages/core/src/state/store.ts +0 -312
- package/packages/core/src/storage/crypto.ts +0 -101
- package/packages/core/src/storage/onboarding.ts +0 -1609
- package/packages/core/src/storage/schema.ts +0 -567
- package/packages/core/src/storage/seed.ts +0 -608
- package/packages/core/src/storage/sqlite.ts +0 -363
- package/packages/core/src/storage/usage.ts +0 -270
- package/packages/core/src/tools/agents/index.ts +0 -607
- package/packages/core/src/tools/bridge-events.ts +0 -26
- package/packages/core/src/tools/canvas/index.ts +0 -281
- package/packages/core/src/tools/cli/index.ts +0 -142
- package/packages/core/src/tools/codebridge/index.ts +0 -179
- package/packages/core/src/tools/core/index.ts +0 -257
- package/packages/core/src/tools/cron/index.ts +0 -373
- package/packages/core/src/tools/filesystem/fs-delete.ts +0 -78
- package/packages/core/src/tools/filesystem/fs-edit.ts +0 -106
- package/packages/core/src/tools/filesystem/fs-exists.ts +0 -63
- package/packages/core/src/tools/filesystem/fs-glob.ts +0 -108
- package/packages/core/src/tools/filesystem/fs-list.ts +0 -129
- package/packages/core/src/tools/filesystem/fs-read.ts +0 -72
- package/packages/core/src/tools/filesystem/fs-write.ts +0 -67
- package/packages/core/src/tools/filesystem/index.ts +0 -34
- package/packages/core/src/tools/filesystem/workspace-guard.ts +0 -62
- package/packages/core/src/tools/index.ts +0 -197
- package/packages/core/src/tools/projects/index.ts +0 -37
- package/packages/core/src/tools/projects/project-create.ts +0 -94
- package/packages/core/src/tools/projects/project-done.ts +0 -66
- package/packages/core/src/tools/projects/project-fail.ts +0 -66
- package/packages/core/src/tools/projects/project-list.ts +0 -96
- package/packages/core/src/tools/projects/project-update.ts +0 -72
- package/packages/core/src/tools/projects/task-create.ts +0 -68
- package/packages/core/src/tools/projects/task-evaluate.ts +0 -93
- package/packages/core/src/tools/projects/task-update.ts +0 -93
- package/packages/core/src/tools/search-knowledge/search-knowledge.ts +0 -155
- package/packages/core/src/tools/types.ts +0 -39
- package/packages/core/src/tools/voice/index.ts +0 -104
- package/packages/core/src/tools/web/browser-click.ts +0 -54
- package/packages/core/src/tools/web/browser-navigate.ts +0 -84
- package/packages/core/src/tools/web/browser-screenshot.ts +0 -54
- package/packages/core/src/tools/web/browser-type.ts +0 -60
- package/packages/core/src/tools/web/index.ts +0 -31
- package/packages/core/src/tools/web/web-fetch.ts +0 -78
- package/packages/core/src/tools/web/web-search.ts +0 -123
- package/packages/core/src/utils/benchmark.ts +0 -80
- package/packages/core/src/utils/crypto.ts +0 -73
- package/packages/core/src/utils/date.ts +0 -42
- package/packages/core/src/utils/index.ts +0 -5
- package/packages/core/src/utils/logger.ts +0 -389
- package/packages/core/src/utils/retry.ts +0 -70
- package/packages/core/src/utils/toon.ts +0 -356
- package/packages/core/src/voice/index.ts +0 -583
- package/packages/hive-ui/README.md +0 -52
- package/packages/hive-ui/components.json +0 -20
- package/packages/hive-ui/index.html +0 -30
- package/packages/hive-ui/package.json +0 -90
- package/packages/hive-ui/public/favicon.ico +0 -0
- package/packages/hive-ui/public/placeholder.svg +0 -1
- package/packages/hive-ui/src/App.tsx +0 -115
- package/packages/hive-ui/src/components/CronJobsPanel.tsx +0 -200
- package/packages/hive-ui/src/components/NavLink.tsx +0 -34
- package/packages/hive-ui/src/components/NotesPanel.tsx +0 -79
- package/packages/hive-ui/src/components/SystemMonitor.tsx +0 -270
- package/packages/hive-ui/src/components/UsageStatsPanel.tsx +0 -334
- package/packages/hive-ui/src/components/WelcomeDialog.tsx +0 -279
- package/packages/hive-ui/src/components/ui/accordion.tsx +0 -52
- package/packages/hive-ui/src/components/ui/alert-dialog.tsx +0 -104
- package/packages/hive-ui/src/components/ui/alert.tsx +0 -45
- package/packages/hive-ui/src/components/ui/aspect-ratio.tsx +0 -5
- package/packages/hive-ui/src/components/ui/avatar.tsx +0 -38
- package/packages/hive-ui/src/components/ui/badge.tsx +0 -29
- package/packages/hive-ui/src/components/ui/bee-loader.tsx +0 -68
- package/packages/hive-ui/src/components/ui/breadcrumb.tsx +0 -90
- package/packages/hive-ui/src/components/ui/button.tsx +0 -47
- package/packages/hive-ui/src/components/ui/calendar.tsx +0 -54
- package/packages/hive-ui/src/components/ui/card.tsx +0 -45
- package/packages/hive-ui/src/components/ui/carousel.tsx +0 -224
- package/packages/hive-ui/src/components/ui/chart.tsx +0 -303
- package/packages/hive-ui/src/components/ui/checkbox.tsx +0 -26
- package/packages/hive-ui/src/components/ui/collapsible.tsx +0 -9
- package/packages/hive-ui/src/components/ui/command.tsx +0 -133
- package/packages/hive-ui/src/components/ui/context-menu.tsx +0 -178
- package/packages/hive-ui/src/components/ui/dialog.tsx +0 -95
- package/packages/hive-ui/src/components/ui/drawer.tsx +0 -87
- package/packages/hive-ui/src/components/ui/dropdown-menu.tsx +0 -179
- package/packages/hive-ui/src/components/ui/form.tsx +0 -129
- package/packages/hive-ui/src/components/ui/hover-card.tsx +0 -27
- package/packages/hive-ui/src/components/ui/input-otp.tsx +0 -61
- package/packages/hive-ui/src/components/ui/input.tsx +0 -22
- package/packages/hive-ui/src/components/ui/label.tsx +0 -17
- package/packages/hive-ui/src/components/ui/menubar.tsx +0 -207
- package/packages/hive-ui/src/components/ui/navigation-menu.tsx +0 -120
- package/packages/hive-ui/src/components/ui/pagination.tsx +0 -80
- package/packages/hive-ui/src/components/ui/popover.tsx +0 -29
- package/packages/hive-ui/src/components/ui/progress.tsx +0 -23
- package/packages/hive-ui/src/components/ui/radio-group.tsx +0 -36
- package/packages/hive-ui/src/components/ui/resizable.tsx +0 -37
- package/packages/hive-ui/src/components/ui/scroll-area.tsx +0 -38
- package/packages/hive-ui/src/components/ui/select.tsx +0 -143
- package/packages/hive-ui/src/components/ui/separator.tsx +0 -20
- package/packages/hive-ui/src/components/ui/sheet.tsx +0 -107
- package/packages/hive-ui/src/components/ui/sidebar.tsx +0 -636
- package/packages/hive-ui/src/components/ui/skeleton.tsx +0 -7
- package/packages/hive-ui/src/components/ui/slider.tsx +0 -23
- package/packages/hive-ui/src/components/ui/sonner.tsx +0 -27
- package/packages/hive-ui/src/components/ui/switch.tsx +0 -27
- package/packages/hive-ui/src/components/ui/table.tsx +0 -72
- package/packages/hive-ui/src/components/ui/tabs.tsx +0 -53
- package/packages/hive-ui/src/components/ui/textarea.tsx +0 -21
- package/packages/hive-ui/src/components/ui/toast.tsx +0 -111
- package/packages/hive-ui/src/components/ui/toaster.tsx +0 -24
- package/packages/hive-ui/src/components/ui/toggle-group.tsx +0 -49
- package/packages/hive-ui/src/components/ui/toggle.tsx +0 -37
- package/packages/hive-ui/src/components/ui/tooltip.tsx +0 -28
- package/packages/hive-ui/src/components/ui/use-toast.ts +0 -3
- package/packages/hive-ui/src/hooks/use-mobile.tsx +0 -19
- package/packages/hive-ui/src/hooks/use-toast.ts +0 -186
- package/packages/hive-ui/src/hooks/useAgentConfig.ts +0 -25
- package/packages/hive-ui/src/hooks/useAgents.ts +0 -38
- package/packages/hive-ui/src/hooks/useBridge.ts +0 -38
- package/packages/hive-ui/src/hooks/useCanvas.ts +0 -24
- package/packages/hive-ui/src/hooks/useChannels.ts +0 -2
- package/packages/hive-ui/src/hooks/useEthics.ts +0 -51
- package/packages/hive-ui/src/hooks/useProviders.ts +0 -14
- package/packages/hive-ui/src/hooks/useTheme.ts +0 -29
- package/packages/hive-ui/src/hooks/useUserConfig.ts +0 -17
- package/packages/hive-ui/src/hooks/useWebSocket.ts +0 -12
- package/packages/hive-ui/src/index.css +0 -620
- package/packages/hive-ui/src/lib/api.ts +0 -100
- package/packages/hive-ui/src/lib/constants.ts +0 -6
- package/packages/hive-ui/src/lib/models.ts +0 -64
- package/packages/hive-ui/src/lib/swal.ts +0 -30
- package/packages/hive-ui/src/lib/utils.ts +0 -6
- package/packages/hive-ui/src/lib/websocket.ts +0 -7
- package/packages/hive-ui/src/main.tsx +0 -5
- package/packages/hive-ui/src/modules/agent-config/details/AgentDetailsEditor.tsx +0 -524
- package/packages/hive-ui/src/modules/agent-config/ethics/EthicsConflictDetector.tsx +0 -18
- package/packages/hive-ui/src/modules/agent-config/ethics/EthicsEditor.tsx +0 -19
- package/packages/hive-ui/src/modules/agent-config/ethics/EthicsRulesList.tsx +0 -36
- package/packages/hive-ui/src/modules/agent-config/ethics/EthicsTemplateGallery.tsx +0 -361
- package/packages/hive-ui/src/modules/agent-config/ethics/index.ts +0 -4
- package/packages/hive-ui/src/modules/agent-config/index.ts +0 -6
- package/packages/hive-ui/src/modules/agent-config/mcp/MCPServerAdd.tsx +0 -322
- package/packages/hive-ui/src/modules/agent-config/mcp/MCPServerCard.tsx +0 -93
- package/packages/hive-ui/src/modules/agent-config/mcp/MCPServerConfig.tsx +0 -427
- package/packages/hive-ui/src/modules/agent-config/mcp/MCPServerList.tsx +0 -85
- package/packages/hive-ui/src/modules/agent-config/mcp/MCPToolExplorer.tsx +0 -79
- package/packages/hive-ui/src/modules/agent-config/mcp/index.ts +0 -5
- package/packages/hive-ui/src/modules/agent-config/shared/ConfigEditorLayout.tsx +0 -30
- package/packages/hive-ui/src/modules/agent-config/shared/ConfigExporter.tsx +0 -26
- package/packages/hive-ui/src/modules/agent-config/shared/ConfigImporter.tsx +0 -25
- package/packages/hive-ui/src/modules/agent-config/shared/DiffViewer.tsx +0 -31
- package/packages/hive-ui/src/modules/agent-config/shared/MarkdownEditor.tsx +0 -32
- package/packages/hive-ui/src/modules/agent-config/shared/SaveStatusIndicator.tsx +0 -23
- package/packages/hive-ui/src/modules/agent-config/shared/ValidationPanel.tsx +0 -36
- package/packages/hive-ui/src/modules/agent-config/shared/index.ts +0 -7
- package/packages/hive-ui/src/modules/agent-config/skills/SkillCard.tsx +0 -81
- package/packages/hive-ui/src/modules/agent-config/skills/SkillConfigEditor.tsx +0 -22
- package/packages/hive-ui/src/modules/agent-config/skills/SkillCreator.tsx +0 -60
- package/packages/hive-ui/src/modules/agent-config/skills/SkillInstaller.tsx +0 -23
- package/packages/hive-ui/src/modules/agent-config/skills/SkillList.tsx +0 -72
- package/packages/hive-ui/src/modules/agent-config/skills/SkillsTab.tsx +0 -202
- package/packages/hive-ui/src/modules/agent-config/skills/index.ts +0 -5
- package/packages/hive-ui/src/modules/agent-config/tools/ToolCard.tsx +0 -27
- package/packages/hive-ui/src/modules/agent-config/tools/ToolConfigPanel.tsx +0 -22
- package/packages/hive-ui/src/modules/agent-config/tools/ToolManager.tsx +0 -266
- package/packages/hive-ui/src/modules/agent-config/tools/ToolPermissions.tsx +0 -287
- package/packages/hive-ui/src/modules/agent-config/tools/ToolRegistry.tsx +0 -84
- package/packages/hive-ui/src/modules/agent-config/tools/ToolUsageStats.tsx +0 -52
- package/packages/hive-ui/src/modules/agent-config/tools/index.ts +0 -4
- package/packages/hive-ui/src/modules/agent-config/user/ActiveAgentsList.tsx +0 -109
- package/packages/hive-ui/src/modules/agent-config/user/GlobalConfigOverview.tsx +0 -119
- package/packages/hive-ui/src/modules/agent-config/user/UserMemoryManager.tsx +0 -54
- package/packages/hive-ui/src/modules/agent-config/user/UserPreferencesForm.tsx +0 -163
- package/packages/hive-ui/src/modules/agent-config/user/UserProfileEditor.tsx +0 -261
- package/packages/hive-ui/src/modules/agent-config/user/index.ts +0 -3
- package/packages/hive-ui/src/modules/agents/AgentActivityLog.tsx +0 -25
- package/packages/hive-ui/src/modules/agents/AgentCard.tsx +0 -305
- package/packages/hive-ui/src/modules/agents/AgentCreateForm.tsx +0 -446
- package/packages/hive-ui/src/modules/agents/AgentDetail.tsx +0 -28
- package/packages/hive-ui/src/modules/agents/AgentInternalCard.tsx +0 -162
- package/packages/hive-ui/src/modules/agents/AgentList.tsx +0 -29
- package/packages/hive-ui/src/modules/agents/AgentStatusBadge.tsx +0 -34
- package/packages/hive-ui/src/modules/agents/ModelSelector.tsx +0 -151
- package/packages/hive-ui/src/modules/bridge/BridgeLogViewer.tsx +0 -61
- package/packages/hive-ui/src/modules/bridge/BridgeProcessList.tsx +0 -77
- package/packages/hive-ui/src/modules/bridge/BridgeStatus.tsx +0 -23
- package/packages/hive-ui/src/modules/bridge/BridgeTerminal.tsx +0 -7
- package/packages/hive-ui/src/modules/canvas/CanvasButton.tsx +0 -3
- package/packages/hive-ui/src/modules/canvas/CanvasChart.tsx +0 -3
- package/packages/hive-ui/src/modules/canvas/CanvasComponentMap.tsx +0 -605
- package/packages/hive-ui/src/modules/canvas/CanvasContainer.tsx +0 -360
- package/packages/hive-ui/src/modules/canvas/CanvasForm.tsx +0 -3
- package/packages/hive-ui/src/modules/canvas/CanvasMarkdown.tsx +0 -3
- package/packages/hive-ui/src/modules/canvas/CanvasTable.tsx +0 -3
- package/packages/hive-ui/src/modules/canvas/ComponentRenderer.tsx +0 -30
- package/packages/hive-ui/src/modules/canvas/DynamicRenderer.tsx +0 -3
- package/packages/hive-ui/src/modules/channels/available/AvailableChannelsGrid.tsx +0 -89
- package/packages/hive-ui/src/modules/channels/available/ChannelAuthForm.tsx +0 -33
- package/packages/hive-ui/src/modules/channels/available/ChannelSetupWizard.tsx +0 -48
- package/packages/hive-ui/src/modules/channels/available/ChannelTestConnection.tsx +0 -37
- package/packages/hive-ui/src/modules/channels/available/ChannelTypeCard.tsx +0 -30
- package/packages/hive-ui/src/modules/channels/available/ChannelWebhookConfig.tsx +0 -30
- package/packages/hive-ui/src/modules/channels/available/index.ts +0 -6
- package/packages/hive-ui/src/modules/channels/connected/ChannelCard.tsx +0 -95
- package/packages/hive-ui/src/modules/channels/connected/ChannelConfigPanel.tsx +0 -260
- package/packages/hive-ui/src/modules/channels/connected/ChannelDisconnectButton.tsx +0 -21
- package/packages/hive-ui/src/modules/channels/connected/ChannelLogsViewer.tsx +0 -42
- package/packages/hive-ui/src/modules/channels/connected/ChannelQRCode.tsx +0 -32
- package/packages/hive-ui/src/modules/channels/connected/ChannelReconnectButton.tsx +0 -16
- package/packages/hive-ui/src/modules/channels/connected/ChannelStatusBadge.tsx +0 -26
- package/packages/hive-ui/src/modules/channels/connected/ConnectedChannelsList.tsx +0 -40
- package/packages/hive-ui/src/modules/channels/connected/index.ts +0 -8
- package/packages/hive-ui/src/modules/channels/shared/ChannelCard.tsx +0 -84
- package/packages/hive-ui/src/modules/channels/shared/ChannelConfigDialog.tsx +0 -279
- package/packages/hive-ui/src/modules/channels/shared/ChannelIcon.tsx +0 -40
- package/packages/hive-ui/src/modules/channels/shared/ChannelStats.tsx +0 -37
- package/packages/hive-ui/src/modules/channels/shared/ChannelTypeBadge.tsx +0 -23
- package/packages/hive-ui/src/modules/channels/shared/ConnectionHealthIndicator.tsx +0 -20
- package/packages/hive-ui/src/modules/channels/shared/MessagePreview.tsx +0 -19
- package/packages/hive-ui/src/modules/channels/shared/index.ts +0 -5
- package/packages/hive-ui/src/modules/chat/ChatContainer.tsx +0 -268
- package/packages/hive-ui/src/modules/chat/ChatHistory.tsx +0 -101
- package/packages/hive-ui/src/modules/chat/ChatInput.tsx +0 -108
- package/packages/hive-ui/src/modules/chat/ChatMessage.tsx +0 -137
- package/packages/hive-ui/src/modules/chat/ThinkingIndicator.tsx +0 -10
- package/packages/hive-ui/src/modules/layout/AppLayout.tsx +0 -45
- package/packages/hive-ui/src/modules/layout/ConnectionStatus.tsx +0 -19
- package/packages/hive-ui/src/modules/layout/Header.tsx +0 -20
- package/packages/hive-ui/src/modules/layout/HiveSidebar.tsx +0 -173
- package/packages/hive-ui/src/modules/layout/ThemeToggle.tsx +0 -18
- package/packages/hive-ui/src/modules/providers/ProviderCard.tsx +0 -319
- package/packages/hive-ui/src/modules/providers/ProviderConfigForm.tsx +0 -146
- package/packages/hive-ui/src/modules/providers/ProviderFailoverConfig.tsx +0 -110
- package/packages/hive-ui/src/modules/providers/ProviderList.tsx +0 -33
- package/packages/hive-ui/src/modules/providers/ProviderStatusIndicator.tsx +0 -23
- package/packages/hive-ui/src/modules/providers/configs/ProviderAPIKeyManager.tsx +0 -39
- package/packages/hive-ui/src/modules/providers/configs/ProviderEndpointConfig.tsx +0 -27
- package/packages/hive-ui/src/modules/providers/configs/ProviderRateLimits.tsx +0 -37
- package/packages/hive-ui/src/modules/providers/configs/ProviderRetryPolicy.tsx +0 -46
- package/packages/hive-ui/src/modules/providers/configs/index.ts +0 -4
- package/packages/hive-ui/src/modules/providers/index.ts +0 -5
- package/packages/hive-ui/src/modules/providers/models/ModelBenchmarkBadge.tsx +0 -21
- package/packages/hive-ui/src/modules/providers/models/ModelCapabilities.tsx +0 -44
- package/packages/hive-ui/src/modules/providers/models/ModelCard.tsx +0 -36
- package/packages/hive-ui/src/modules/providers/models/ModelComparisonTable.tsx +0 -47
- package/packages/hive-ui/src/modules/providers/models/ModelList.tsx +0 -51
- package/packages/hive-ui/src/modules/providers/models/ModelPricingInfo.tsx +0 -17
- package/packages/hive-ui/src/modules/providers/models/ModelSelector.tsx +0 -32
- package/packages/hive-ui/src/modules/providers/models/index.ts +0 -7
- package/packages/hive-ui/src/pages/AgentDetailPage.tsx +0 -74
- package/packages/hive-ui/src/pages/AgentNewPage.tsx +0 -5
- package/packages/hive-ui/src/pages/AgentsPage.tsx +0 -147
- package/packages/hive-ui/src/pages/BridgePage.tsx +0 -83
- package/packages/hive-ui/src/pages/CanvasPage.tsx +0 -32
- package/packages/hive-ui/src/pages/ChannelsPage.tsx +0 -176
- package/packages/hive-ui/src/pages/DashboardPage.tsx +0 -321
- package/packages/hive-ui/src/pages/Index.tsx +0 -14
- package/packages/hive-ui/src/pages/LogsPage.tsx +0 -252
- package/packages/hive-ui/src/pages/NotFound.tsx +0 -24
- package/packages/hive-ui/src/pages/ProjectsPage.tsx +0 -241
- package/packages/hive-ui/src/pages/ProvidersPage.tsx +0 -111
- package/packages/hive-ui/src/pages/SettingsPage.tsx +0 -147
- package/packages/hive-ui/src/pages/SetupPage.tsx +0 -1177
- package/packages/hive-ui/src/pages/WebChatPage.tsx +0 -15
- package/packages/hive-ui/src/stores/agentConfigStore.ts +0 -32
- package/packages/hive-ui/src/stores/agentStore.ts +0 -5
- package/packages/hive-ui/src/stores/bridgeStore.ts +0 -237
- package/packages/hive-ui/src/stores/canvasStore.ts +0 -250
- package/packages/hive-ui/src/stores/channelStore.ts +0 -5
- package/packages/hive-ui/src/stores/chatStore.ts +0 -42
- package/packages/hive-ui/src/stores/ethicsStore.ts +0 -141
- package/packages/hive-ui/src/stores/mcpStore.ts +0 -5
- package/packages/hive-ui/src/stores/modelStore.ts +0 -2
- package/packages/hive-ui/src/stores/projectsStore.ts +0 -141
- package/packages/hive-ui/src/stores/providerStore.ts +0 -2
- package/packages/hive-ui/src/stores/skillStore.ts +0 -5
- package/packages/hive-ui/src/stores/toolStore.ts +0 -5
- package/packages/hive-ui/src/stores/useGlobalConfigStore.ts +0 -937
- package/packages/hive-ui/src/stores/useLoaderStore.ts +0 -21
- package/packages/hive-ui/src/stores/useNotesAndCronsStore.ts +0 -144
- package/packages/hive-ui/src/stores/useWebSocketStore.ts +0 -152
- package/packages/hive-ui/src/stores/useWelcomeStore.ts +0 -37
- package/packages/hive-ui/src/stores/userConfigStore.ts +0 -23
- package/packages/hive-ui/src/stores/userStore.ts +0 -82
- package/packages/hive-ui/src/test/setup.ts +0 -15
- package/packages/hive-ui/src/types/agent-config.ts +0 -33
- package/packages/hive-ui/src/types/agent.ts +0 -65
- package/packages/hive-ui/src/types/bridge.ts +0 -27
- package/packages/hive-ui/src/types/canvas.ts +0 -76
- package/packages/hive-ui/src/types/channels.ts +0 -109
- package/packages/hive-ui/src/types/chat.ts +0 -25
- package/packages/hive-ui/src/types/connections.ts +0 -17
- package/packages/hive-ui/src/types/ethics.ts +0 -41
- package/packages/hive-ui/src/types/index.ts +0 -15
- package/packages/hive-ui/src/types/mcp.ts +0 -36
- package/packages/hive-ui/src/types/notes-crons.ts +0 -31
- package/packages/hive-ui/src/types/providers.ts +0 -145
- package/packages/hive-ui/src/types/skill.ts +0 -12
- package/packages/hive-ui/src/types/tool.ts +0 -44
- package/packages/hive-ui/src/types/user.ts +0 -26
- package/packages/hive-ui/src/types/websocket.ts +0 -14
- package/packages/hive-ui/src/vite-env.d.ts +0 -1
- package/packages/mcp/package.json +0 -26
- package/packages/mcp/src/config.ts +0 -13
- package/packages/mcp/src/index.ts +0 -1
- package/packages/mcp/src/logger.ts +0 -42
- package/packages/mcp/src/manager.ts +0 -439
- package/packages/mcp/src/transports/index.ts +0 -67
- package/packages/mcp/src/transports/sse.ts +0 -241
- package/packages/mcp/src/transports/websocket.ts +0 -159
- package/packages/skills/package.json +0 -21
- package/packages/skills/src/index.ts +0 -1
- package/packages/skills/src/loader.ts +0 -346
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { useWebSocket } from "@/hooks/useWebSocket";
|
|
2
|
-
import type { WebSocketStatus } from "@/types";
|
|
3
|
-
|
|
4
|
-
const dotClass: Record<WebSocketStatus, string> = {
|
|
5
|
-
connected: "bg-hive-connected",
|
|
6
|
-
connecting: "bg-hive-thinking animate-pulse",
|
|
7
|
-
disconnected: "bg-hive-disconnected",
|
|
8
|
-
error: "bg-hive-disconnected",
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export function ConnectionStatus() {
|
|
12
|
-
const { status } = useWebSocket();
|
|
13
|
-
return (
|
|
14
|
-
<div className="flex items-center gap-2 text-xs text-muted-foreground">
|
|
15
|
-
<span className={`inline-block h-2 w-2 rounded-full ${dotClass[status]}`} />
|
|
16
|
-
<span className="hidden sm:inline">WS: {status}</span>
|
|
17
|
-
</div>
|
|
18
|
-
);
|
|
19
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ConnectionStatus } from "./ConnectionStatus";
|
|
2
|
-
import { ThemeToggle } from "./ThemeToggle";
|
|
3
|
-
import { SidebarTrigger } from "@/components/ui/sidebar";
|
|
4
|
-
|
|
5
|
-
export function Header() {
|
|
6
|
-
return (
|
|
7
|
-
<header className="flex h-12 items-center justify-between border-b px-4">
|
|
8
|
-
<div className="flex items-center gap-2">
|
|
9
|
-
<SidebarTrigger className="h-8 w-8" />
|
|
10
|
-
<h1 className="text-sm font-semibold tracking-tight">
|
|
11
|
-
<span className="text-primary">⬡</span> Hive
|
|
12
|
-
</h1>
|
|
13
|
-
</div>
|
|
14
|
-
<div className="flex items-center gap-3">
|
|
15
|
-
<ConnectionStatus />
|
|
16
|
-
<ThemeToggle />
|
|
17
|
-
</div>
|
|
18
|
-
</header>
|
|
19
|
-
);
|
|
20
|
-
}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
LayoutDashboard,
|
|
3
|
-
Bot,
|
|
4
|
-
Layers,
|
|
5
|
-
Cable,
|
|
6
|
-
ScrollText,
|
|
7
|
-
SlidersHorizontal,
|
|
8
|
-
MessageSquare,
|
|
9
|
-
Brain,
|
|
10
|
-
ShieldAlert,
|
|
11
|
-
Wrench,
|
|
12
|
-
Server,
|
|
13
|
-
User,
|
|
14
|
-
Wand2,
|
|
15
|
-
FolderKanban,
|
|
16
|
-
StickyNote,
|
|
17
|
-
Clock,
|
|
18
|
-
type LucideProps,
|
|
19
|
-
} from "lucide-react";
|
|
20
|
-
import { NavLink } from "@/components/NavLink";
|
|
21
|
-
import { useLocation } from "react-router-dom";
|
|
22
|
-
import { Collapsible, CollapsibleContent } from "@/components/ui/collapsible";
|
|
23
|
-
import {
|
|
24
|
-
Sidebar,
|
|
25
|
-
SidebarContent,
|
|
26
|
-
SidebarGroup,
|
|
27
|
-
SidebarGroupContent,
|
|
28
|
-
SidebarGroupLabel,
|
|
29
|
-
SidebarMenu,
|
|
30
|
-
SidebarMenuButton,
|
|
31
|
-
SidebarMenuItem,
|
|
32
|
-
SidebarMenuSub,
|
|
33
|
-
SidebarMenuSubButton,
|
|
34
|
-
SidebarMenuSubItem,
|
|
35
|
-
} from "@/components/ui/sidebar";
|
|
36
|
-
|
|
37
|
-
function Icon({ icon: IconComponent, ...props }: { icon: React.ComponentType<LucideProps> } & LucideProps) {
|
|
38
|
-
return <IconComponent {...props} />;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const navItems = [
|
|
42
|
-
{ title: "Dashboard", url: "/", icon: LayoutDashboard },
|
|
43
|
-
{ title: "Web Chat", url: "/chat", icon: MessageSquare },
|
|
44
|
-
{ title: "Agentes", url: "/agents", icon: Bot },
|
|
45
|
-
{ title: "Proyectos", url: "/projects", icon: FolderKanban },
|
|
46
|
-
{ title: "Canales", url: "/channels", icon: MessageSquare },
|
|
47
|
-
{ title: "Providers", url: "/providers", icon: Brain },
|
|
48
|
-
{ title: "Canvas", url: "/canvas", icon: Layers },
|
|
49
|
-
{ title: "Bridge", url: "/bridge", icon: Cable },
|
|
50
|
-
{ title: "Logs", url: "/logs", icon: ScrollText },
|
|
51
|
-
];
|
|
52
|
-
|
|
53
|
-
const configGroups = [
|
|
54
|
-
{
|
|
55
|
-
label: "Entorno",
|
|
56
|
-
items: [
|
|
57
|
-
{ id: "herramientas", label: "Herramientas", icon: Wrench },
|
|
58
|
-
{ id: "mcp", label: "MCP Servers", icon: Server },
|
|
59
|
-
{ id: "skills", label: "Skills", icon: Wand2 },
|
|
60
|
-
{ id: "etica", label: "Ética", icon: ShieldAlert },
|
|
61
|
-
],
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
label: "Usuario",
|
|
65
|
-
items: [
|
|
66
|
-
{ id: "perfil", label: "Perfil", icon: User },
|
|
67
|
-
],
|
|
68
|
-
},
|
|
69
|
-
];
|
|
70
|
-
|
|
71
|
-
const cognitiveItems = [
|
|
72
|
-
{ title: "Notas", url: "/notas", icon: StickyNote },
|
|
73
|
-
{ title: "Cron Jobs", url: "/cron-jobs", icon: Clock },
|
|
74
|
-
];
|
|
75
|
-
|
|
76
|
-
export function AppSidebar() {
|
|
77
|
-
const location = useLocation();
|
|
78
|
-
const isConfigActive = location.pathname.startsWith("/settings");
|
|
79
|
-
|
|
80
|
-
return (
|
|
81
|
-
<Sidebar collapsible="icon" className="hive-sidebar">
|
|
82
|
-
<SidebarContent>
|
|
83
|
-
<SidebarGroup>
|
|
84
|
-
<SidebarGroupLabel>Navegación</SidebarGroupLabel>
|
|
85
|
-
<SidebarGroupContent>
|
|
86
|
-
<SidebarMenu>
|
|
87
|
-
{navItems.map((item) => (
|
|
88
|
-
<SidebarMenuItem key={item.title}>
|
|
89
|
-
<SidebarMenuButton asChild>
|
|
90
|
-
<NavLink
|
|
91
|
-
to={item.url}
|
|
92
|
-
end={item.url === "/"}
|
|
93
|
-
className="hive-sidebar-item group/item text-white/50 hover:text-white"
|
|
94
|
-
activeClassName="hive-sidebar-item--active text-blue-400 font-bold"
|
|
95
|
-
>
|
|
96
|
-
<Icon icon={item.icon as any} className="h-4 w-4 transition-transform group-hover/item:scale-110" />
|
|
97
|
-
<span>{item.title}</span>
|
|
98
|
-
</NavLink>
|
|
99
|
-
</SidebarMenuButton>
|
|
100
|
-
</SidebarMenuItem>
|
|
101
|
-
))}
|
|
102
|
-
|
|
103
|
-
<div className="h-4" />
|
|
104
|
-
<p className="px-2 pb-1 text-[10px] font-bold uppercase tracking-widest text-white/20">
|
|
105
|
-
Cognitivo
|
|
106
|
-
</p>
|
|
107
|
-
{cognitiveItems.map((item) => (
|
|
108
|
-
<SidebarMenuItem key={item.title}>
|
|
109
|
-
<SidebarMenuButton asChild>
|
|
110
|
-
<NavLink
|
|
111
|
-
to={item.url}
|
|
112
|
-
className="hive-sidebar-item group/item text-white/50 hover:text-white"
|
|
113
|
-
activeClassName="hive-sidebar-item--active text-blue-400 font-bold"
|
|
114
|
-
>
|
|
115
|
-
<Icon icon={item.icon as any} className="h-4 w-4 transition-transform group-hover/item:scale-110" />
|
|
116
|
-
<span>{item.title}</span>
|
|
117
|
-
</NavLink>
|
|
118
|
-
</SidebarMenuButton>
|
|
119
|
-
</SidebarMenuItem>
|
|
120
|
-
))}
|
|
121
|
-
|
|
122
|
-
<div className="h-4" />
|
|
123
|
-
<p className="px-2 pb-1 text-[10px] font-bold uppercase tracking-widest text-white/20">
|
|
124
|
-
Sistema
|
|
125
|
-
</p>
|
|
126
|
-
{/* Ajustes del sistema — expands sub-items when active */}
|
|
127
|
-
<Collapsible open={isConfigActive} asChild>
|
|
128
|
-
<SidebarMenuItem>
|
|
129
|
-
<SidebarMenuButton asChild isActive={isConfigActive}>
|
|
130
|
-
<NavLink
|
|
131
|
-
to="/settings/herramientas"
|
|
132
|
-
className="hive-sidebar-item group/item text-white/50 hover:text-white"
|
|
133
|
-
activeClassName="hive-sidebar-item--active text-blue-400 font-bold"
|
|
134
|
-
>
|
|
135
|
-
<Icon icon={SlidersHorizontal as any} className="h-4 w-4 transition-transform group-hover/item:scale-110" />
|
|
136
|
-
<span>Ajustes</span>
|
|
137
|
-
</NavLink>
|
|
138
|
-
</SidebarMenuButton>
|
|
139
|
-
|
|
140
|
-
<CollapsibleContent>
|
|
141
|
-
{configGroups.map((group) => (
|
|
142
|
-
<div key={group.label}>
|
|
143
|
-
<p className="px-2 pt-2 pb-0.5 text-[10px] font-semibold uppercase tracking-widest text-sidebar-foreground/40">
|
|
144
|
-
{group.label}
|
|
145
|
-
</p>
|
|
146
|
-
<SidebarMenuSub>
|
|
147
|
-
{group.items.map((item) => (
|
|
148
|
-
<SidebarMenuSubItem key={item.id}>
|
|
149
|
-
<SidebarMenuSubButton asChild>
|
|
150
|
-
<NavLink
|
|
151
|
-
to={`/settings/${item.id}`}
|
|
152
|
-
className="flex items-center gap-2.5 px-3 py-2 rounded-lg text-white/40 hover:text-white hover:bg-white/5 transition-all text-xs"
|
|
153
|
-
activeClassName="text-blue-400 bg-blue-500/5 font-semibold"
|
|
154
|
-
>
|
|
155
|
-
<Icon icon={item.icon as any} className="h-3.5 w-3.5" />
|
|
156
|
-
<span>{item.label}</span>
|
|
157
|
-
</NavLink>
|
|
158
|
-
</SidebarMenuSubButton>
|
|
159
|
-
</SidebarMenuSubItem>
|
|
160
|
-
))}
|
|
161
|
-
</SidebarMenuSub>
|
|
162
|
-
</div>
|
|
163
|
-
))}
|
|
164
|
-
</CollapsibleContent>
|
|
165
|
-
</SidebarMenuItem>
|
|
166
|
-
</Collapsible>
|
|
167
|
-
</SidebarMenu>
|
|
168
|
-
</SidebarGroupContent>
|
|
169
|
-
</SidebarGroup>
|
|
170
|
-
</SidebarContent>
|
|
171
|
-
</Sidebar>
|
|
172
|
-
);
|
|
173
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Button } from "@/components/ui/button";
|
|
2
|
-
import { Moon, Sun } from "lucide-react";
|
|
3
|
-
import { useTheme } from "@/hooks/useTheme";
|
|
4
|
-
|
|
5
|
-
// Cast icons to any to bypass React 19 type incompatibility with Lucide
|
|
6
|
-
// This is a known issue where React 19's ReactNode type includes bigint
|
|
7
|
-
// which Lucide's ForwardRefExoticComponent types don't account for
|
|
8
|
-
const SunIcon = Sun as any;
|
|
9
|
-
const MoonIcon = Moon as any;
|
|
10
|
-
|
|
11
|
-
export function ThemeToggle() {
|
|
12
|
-
const { theme, toggleTheme } = useTheme();
|
|
13
|
-
return (
|
|
14
|
-
<Button variant="ghost" size="icon" onClick={toggleTheme} className="h-8 w-8">
|
|
15
|
-
{theme === "dark" ? <SunIcon className="h-4 w-4" /> : <MoonIcon className="h-4 w-4" />}
|
|
16
|
-
</Button>
|
|
17
|
-
);
|
|
18
|
-
}
|
|
@@ -1,319 +0,0 @@
|
|
|
1
|
-
import { Switch } from "@/components/ui/switch";
|
|
2
|
-
import { Settings, ChevronDown, ChevronRight, Cpu, Plus, KeyRound, Globe, RefreshCw } from "lucide-react";
|
|
3
|
-
import type { Provider, Model } from "@/types";
|
|
4
|
-
import { Dialog, DialogContent, DialogTrigger, DialogTitle } from "@/components/ui/dialog";
|
|
5
|
-
import { ProviderConfigForm } from "./ProviderConfigForm";
|
|
6
|
-
import { useModels, useProviders } from "@/hooks/useProviders";
|
|
7
|
-
import { useState, useMemo } from "react";
|
|
8
|
-
|
|
9
|
-
const SettingsIcon = Settings as any;
|
|
10
|
-
const ChevronDownIcon = ChevronDown as any;
|
|
11
|
-
const ChevronRightIcon = ChevronRight as any;
|
|
12
|
-
const CpuIcon = Cpu as any;
|
|
13
|
-
const PlusIcon = Plus as any;
|
|
14
|
-
const KeyRoundIcon = KeyRound as any;
|
|
15
|
-
const GlobeIcon = Globe as any;
|
|
16
|
-
const RefreshCwIcon = RefreshCw as any;
|
|
17
|
-
|
|
18
|
-
interface ProviderCardProps {
|
|
19
|
-
provider: Provider;
|
|
20
|
-
updateProvider: (id: string, data: { apiKey?: string; baseUrl?: string; headers?: Record<string, string>; numCtx?: number | null }) => void;
|
|
21
|
-
onManageModels?: () => void;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export function ProviderCard({ provider, updateProvider, onManageModels }: ProviderCardProps) {
|
|
25
|
-
const [configOpen, setConfigOpen] = useState(false);
|
|
26
|
-
const [modelsExpanded, setModelsExpanded] = useState(false);
|
|
27
|
-
const [newModelName, setNewModelName] = useState("");
|
|
28
|
-
const [addingModel, setAddingModel] = useState(false);
|
|
29
|
-
const [syncing, setSyncing] = useState(false);
|
|
30
|
-
|
|
31
|
-
const { models, toggleModel, createModel, syncModels } = useModels();
|
|
32
|
-
const { toggleProvider } = useProviders();
|
|
33
|
-
|
|
34
|
-
// Merge models from store + models embedded in provider (from API)
|
|
35
|
-
const providerModels = useMemo(() => {
|
|
36
|
-
const storeModels = models.filter((m) => {
|
|
37
|
-
const mProviderId = m.providerId || m.provider_id;
|
|
38
|
-
return mProviderId === provider.id;
|
|
39
|
-
});
|
|
40
|
-
// If store has models use those, otherwise use embedded ones from provider
|
|
41
|
-
return storeModels.length > 0 ? storeModels : (provider.models || []);
|
|
42
|
-
}, [models, provider.id, provider.models]);
|
|
43
|
-
|
|
44
|
-
const activeModels = providerModels.filter(m => m.enabled || m.active);
|
|
45
|
-
|
|
46
|
-
const handleSave = (data: { apiKey?: string; baseUrl?: string; headers?: Record<string, string>; numCtx?: number | null }) => {
|
|
47
|
-
updateProvider(provider.id, data);
|
|
48
|
-
setConfigOpen(false);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
const handleProviderToggle = async (active: boolean) => {
|
|
52
|
-
try {
|
|
53
|
-
await toggleProvider(provider.id, active);
|
|
54
|
-
} catch (error) {
|
|
55
|
-
console.error("Failed to toggle provider:", error);
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const handleModelToggle = async (model: Model, active: boolean) => {
|
|
60
|
-
try {
|
|
61
|
-
await toggleModel(model.id, active);
|
|
62
|
-
} catch (error) {
|
|
63
|
-
console.error("Failed to toggle model:", error);
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
const handleSyncModels = async () => {
|
|
68
|
-
setSyncing(true);
|
|
69
|
-
try {
|
|
70
|
-
await syncModels(provider.id);
|
|
71
|
-
setModelsExpanded(true);
|
|
72
|
-
} catch (error) {
|
|
73
|
-
console.error("Failed to sync models:", error);
|
|
74
|
-
} finally {
|
|
75
|
-
setSyncing(false);
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
const handleAddModel = async () => {
|
|
80
|
-
const name = newModelName.trim();
|
|
81
|
-
if (!name) return;
|
|
82
|
-
setAddingModel(true);
|
|
83
|
-
try {
|
|
84
|
-
await createModel(provider.id, name);
|
|
85
|
-
setNewModelName("");
|
|
86
|
-
} catch (error) {
|
|
87
|
-
console.error("Failed to add model:", error);
|
|
88
|
-
} finally {
|
|
89
|
-
setAddingModel(false);
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const isActive = !!provider.active;
|
|
94
|
-
const baseUrl = provider.base_url || provider.baseUrl;
|
|
95
|
-
const isLocal = provider.id === "ollama"
|
|
96
|
-
|| baseUrl?.includes("localhost")
|
|
97
|
-
|| baseUrl?.includes("127.0.0.1");
|
|
98
|
-
|
|
99
|
-
return (
|
|
100
|
-
<div className={`hive-card group overflow-hidden flex flex-col gap-0 transition-all duration-500 ${
|
|
101
|
-
isActive ? 'hive-card--active' : 'opacity-70 grayscale-[0.5] hover:grayscale-0 hover:opacity-100'
|
|
102
|
-
}`}>
|
|
103
|
-
|
|
104
|
-
{/* ── Header ── */}
|
|
105
|
-
<div className="hive-card-body pb-3">
|
|
106
|
-
<div className="flex items-start justify-between gap-3">
|
|
107
|
-
<div className="flex items-center gap-3 min-w-0">
|
|
108
|
-
<div className={`shrink-0 h-10 w-10 sm:h-11 sm:w-11 rounded-xl flex items-center justify-center border transition-all duration-500 ${
|
|
109
|
-
isActive
|
|
110
|
-
? 'bg-blue-500/10 border-blue-500/30 text-blue-400 shadow-[0_0_16px_rgba(59,130,246,0.15)]'
|
|
111
|
-
: 'bg-white/5 border-white/10 text-white/30'
|
|
112
|
-
}`}>
|
|
113
|
-
<CpuIcon className="h-5 w-5" />
|
|
114
|
-
</div>
|
|
115
|
-
<div className="min-w-0">
|
|
116
|
-
<div className="flex items-center gap-2 mb-0.5">
|
|
117
|
-
<h3 className="font-black text-white tracking-tight text-base sm:text-lg uppercase leading-none truncate">
|
|
118
|
-
{provider.name}
|
|
119
|
-
</h3>
|
|
120
|
-
{isActive && <div className="hive-status-dot--active h-1.5 w-1.5 shrink-0" />}
|
|
121
|
-
</div>
|
|
122
|
-
<p className="text-[11px] text-white/35 font-medium leading-none truncate">
|
|
123
|
-
{provider.id}
|
|
124
|
-
</p>
|
|
125
|
-
</div>
|
|
126
|
-
</div>
|
|
127
|
-
|
|
128
|
-
{/* Toggle */}
|
|
129
|
-
<div className="flex items-center gap-2 shrink-0">
|
|
130
|
-
<span className={`hidden sm:block text-[10px] font-black tracking-widest ${isActive ? 'text-blue-400' : 'text-white/30'}`}>
|
|
131
|
-
{isActive ? 'ON' : 'OFF'}
|
|
132
|
-
</span>
|
|
133
|
-
<Switch
|
|
134
|
-
checked={isActive}
|
|
135
|
-
onCheckedChange={handleProviderToggle}
|
|
136
|
-
className="data-[state=checked]:bg-blue-500"
|
|
137
|
-
/>
|
|
138
|
-
</div>
|
|
139
|
-
</div>
|
|
140
|
-
</div>
|
|
141
|
-
|
|
142
|
-
{/* ── Info rows ── */}
|
|
143
|
-
<div className="px-5 pb-3 space-y-2 border-b border-white/5">
|
|
144
|
-
{/* API Key row */}
|
|
145
|
-
<div className="flex items-center gap-2 min-w-0">
|
|
146
|
-
<KeyRoundIcon className={`h-3.5 w-3.5 shrink-0 ${provider.has_api_key ? 'text-emerald-400' : isLocal ? 'text-amber-400' : 'text-white/20'}`} />
|
|
147
|
-
<span className="text-[11px] font-mono truncate">
|
|
148
|
-
{provider.masked_api_key
|
|
149
|
-
? <span className="text-white/50">{provider.masked_api_key}</span>
|
|
150
|
-
: provider.has_api_key
|
|
151
|
-
? <span className="text-white/50">••••••••••••••••</span>
|
|
152
|
-
: isLocal
|
|
153
|
-
? <span className="text-amber-400/70">Local — sin API key</span>
|
|
154
|
-
: <span className="text-white/25">Sin API key</span>
|
|
155
|
-
}
|
|
156
|
-
</span>
|
|
157
|
-
</div>
|
|
158
|
-
|
|
159
|
-
{/* Base URL row */}
|
|
160
|
-
{baseUrl && (
|
|
161
|
-
<div className="flex items-center gap-2 min-w-0">
|
|
162
|
-
<GlobeIcon className="h-3.5 w-3.5 shrink-0 text-white/20" />
|
|
163
|
-
<span className="text-[11px] text-white/40 truncate font-mono">{baseUrl}</span>
|
|
164
|
-
</div>
|
|
165
|
-
)}
|
|
166
|
-
|
|
167
|
-
{/* num_ctx row — solo providers locales */}
|
|
168
|
-
{isLocal && (
|
|
169
|
-
<div className="flex items-center gap-2 min-w-0">
|
|
170
|
-
<CpuIcon className="h-3.5 w-3.5 shrink-0 text-white/20" />
|
|
171
|
-
<span className="text-[11px] text-white/40 font-mono">
|
|
172
|
-
ctx: <span className={provider.num_ctx ? "text-amber-400/70" : "text-white/25"}>
|
|
173
|
-
{provider.num_ctx ? `${provider.num_ctx.toLocaleString()} tokens` : "32 768 (default)"}
|
|
174
|
-
</span>
|
|
175
|
-
</span>
|
|
176
|
-
</div>
|
|
177
|
-
)}
|
|
178
|
-
</div>
|
|
179
|
-
|
|
180
|
-
{/* ── Models section ── */}
|
|
181
|
-
<div className="px-5 py-3 flex-1">
|
|
182
|
-
<div className="flex items-center gap-2 mb-2">
|
|
183
|
-
<button
|
|
184
|
-
type="button"
|
|
185
|
-
className="flex items-center gap-2 flex-1 text-left text-[10px] font-black uppercase tracking-widest text-white/40 hover:text-white transition-colors"
|
|
186
|
-
onClick={() => setModelsExpanded(!modelsExpanded)}
|
|
187
|
-
>
|
|
188
|
-
{modelsExpanded ? <ChevronDownIcon className="h-3 w-3" /> : <ChevronRightIcon className="h-3 w-3" />}
|
|
189
|
-
MODELOS
|
|
190
|
-
<span className="hive-tag scale-90 origin-left">
|
|
191
|
-
{activeModels.length}/{providerModels.length}
|
|
192
|
-
</span>
|
|
193
|
-
</button>
|
|
194
|
-
|
|
195
|
-
{/* Botón sync — solo providers locales */}
|
|
196
|
-
{isLocal && (
|
|
197
|
-
<button
|
|
198
|
-
type="button"
|
|
199
|
-
onClick={handleSyncModels}
|
|
200
|
-
disabled={syncing}
|
|
201
|
-
title="Sincronizar modelos instalados en Ollama"
|
|
202
|
-
className="h-6 w-6 flex items-center justify-center rounded-md text-white/30 hover:text-amber-400 hover:bg-amber-400/10 disabled:opacity-40 transition-colors"
|
|
203
|
-
>
|
|
204
|
-
<RefreshCwIcon className={`h-3 w-3 ${syncing ? 'animate-spin' : ''}`} />
|
|
205
|
-
</button>
|
|
206
|
-
)}
|
|
207
|
-
</div>
|
|
208
|
-
|
|
209
|
-
{/* Collapsed preview — up to 3 chips */}
|
|
210
|
-
{!modelsExpanded && providerModels.length > 0 && (
|
|
211
|
-
<div className="flex flex-wrap gap-1 mt-1">
|
|
212
|
-
{providerModels.slice(0, 3).map(m => (
|
|
213
|
-
<span key={m.id} className={`hive-tag text-[10px] ${m.enabled || m.active ? '' : 'opacity-40'}`}>
|
|
214
|
-
{m.name.split('/').pop() || m.name}
|
|
215
|
-
</span>
|
|
216
|
-
))}
|
|
217
|
-
{providerModels.length > 3 && (
|
|
218
|
-
<span className="hive-tag text-[10px] text-white/30">+{providerModels.length - 3}</span>
|
|
219
|
-
)}
|
|
220
|
-
</div>
|
|
221
|
-
)}
|
|
222
|
-
|
|
223
|
-
{/* Expanded list + add model */}
|
|
224
|
-
{modelsExpanded && (
|
|
225
|
-
<div className="space-y-1">
|
|
226
|
-
<div className="hive-scroll max-h-44 overflow-y-auto flex flex-col gap-0.5 pr-1">
|
|
227
|
-
{providerModels.length === 0 && (
|
|
228
|
-
<p className="text-[11px] text-white/25 py-2 text-center">Sin modelos configurados</p>
|
|
229
|
-
)}
|
|
230
|
-
{providerModels.map((model) => {
|
|
231
|
-
const modelActive = model.enabled || !!model.active;
|
|
232
|
-
return (
|
|
233
|
-
<div
|
|
234
|
-
key={model.id}
|
|
235
|
-
className={`flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-colors ${
|
|
236
|
-
modelActive ? 'bg-white/5' : 'bg-transparent opacity-40'
|
|
237
|
-
}`}
|
|
238
|
-
>
|
|
239
|
-
<span className="text-[11px] font-medium text-white truncate flex-1 mr-3">
|
|
240
|
-
{model.name}
|
|
241
|
-
</span>
|
|
242
|
-
<Switch
|
|
243
|
-
checked={modelActive}
|
|
244
|
-
onCheckedChange={(checked) => handleModelToggle(model, checked)}
|
|
245
|
-
className="scale-[0.7] origin-right data-[state=checked]:bg-blue-400"
|
|
246
|
-
/>
|
|
247
|
-
</div>
|
|
248
|
-
);
|
|
249
|
-
})}
|
|
250
|
-
</div>
|
|
251
|
-
|
|
252
|
-
{/* Add model input */}
|
|
253
|
-
<div className="flex items-center gap-1.5 pt-1.5 border-t border-white/5">
|
|
254
|
-
<input
|
|
255
|
-
type="text"
|
|
256
|
-
value={newModelName}
|
|
257
|
-
onChange={(e) => setNewModelName(e.target.value)}
|
|
258
|
-
onKeyDown={(e) => e.key === "Enter" && handleAddModel()}
|
|
259
|
-
placeholder="nombre-del-modelo"
|
|
260
|
-
className="flex-1 min-w-0 bg-white/5 border border-white/10 rounded-md px-2 h-7 text-[11px] text-white/70 placeholder-white/20 focus:outline-none focus:border-blue-500/50 transition-all font-mono"
|
|
261
|
-
/>
|
|
262
|
-
<button
|
|
263
|
-
type="button"
|
|
264
|
-
onClick={handleAddModel}
|
|
265
|
-
disabled={addingModel || !newModelName.trim()}
|
|
266
|
-
className="shrink-0 h-7 px-2.5 flex items-center gap-1 rounded-md bg-blue-500/10 border border-blue-500/20 text-blue-400 text-[10px] font-black uppercase tracking-wider hover:bg-blue-500/20 disabled:opacity-40 disabled:cursor-not-allowed transition-colors"
|
|
267
|
-
>
|
|
268
|
-
<PlusIcon className="h-3 w-3" />
|
|
269
|
-
<span className="hidden xs:inline">ADD</span>
|
|
270
|
-
</button>
|
|
271
|
-
</div>
|
|
272
|
-
</div>
|
|
273
|
-
)}
|
|
274
|
-
</div>
|
|
275
|
-
|
|
276
|
-
{/* ── Footer ── */}
|
|
277
|
-
<div className="px-4 py-3 border-t border-white/5 flex items-center justify-between gap-2 overflow-hidden">
|
|
278
|
-
<div className="flex items-center gap-3 min-w-0 overflow-hidden">
|
|
279
|
-
<div className="hive-stat shrink-0">
|
|
280
|
-
<span className="hive-stat__label">Uptime</span>
|
|
281
|
-
<span className="hive-stat__value">99.9%</span>
|
|
282
|
-
</div>
|
|
283
|
-
<div className="hive-stat shrink-0">
|
|
284
|
-
<span className="hive-stat__label">Estado</span>
|
|
285
|
-
<span className={`hive-stat__value ${isActive ? 'text-emerald-400' : 'text-white/30'}`}>
|
|
286
|
-
{isActive ? 'Activo' : 'Inactivo'}
|
|
287
|
-
</span>
|
|
288
|
-
</div>
|
|
289
|
-
</div>
|
|
290
|
-
|
|
291
|
-
<Dialog open={configOpen} onOpenChange={setConfigOpen}>
|
|
292
|
-
<DialogTrigger asChild>
|
|
293
|
-
<button className="hive-btn hive-btn--ghost h-8 px-2.5 text-[10px] font-black uppercase tracking-widest text-blue-400 shrink-0 flex items-center gap-1.5">
|
|
294
|
-
<SettingsIcon className="h-3 w-3" />
|
|
295
|
-
<span>CONFIG</span>
|
|
296
|
-
</button>
|
|
297
|
-
</DialogTrigger>
|
|
298
|
-
<DialogContent className="rounded-xl border border-white/10 p-0 overflow-hidden w-[calc(100vw-2rem)] max-w-md bg-[#09090b]">
|
|
299
|
-
<DialogTitle className="sr-only">Configurar {provider.name}</DialogTitle>
|
|
300
|
-
<div className="p-5 border-b border-white/5 bg-white/5 relative overflow-hidden">
|
|
301
|
-
<div className="absolute -top-10 -right-10 h-32 w-32 bg-blue-600/10 rounded-full blur-[80px] pointer-events-none" />
|
|
302
|
-
<h2 className="text-lg font-black text-white uppercase tracking-tighter">{provider.name}</h2>
|
|
303
|
-
<p className="text-xs text-white/40 font-medium mt-0.5">Autenticación y punto de enlace.</p>
|
|
304
|
-
</div>
|
|
305
|
-
<div className="p-5">
|
|
306
|
-
<ProviderConfigForm
|
|
307
|
-
provider={provider}
|
|
308
|
-
onSave={handleSave}
|
|
309
|
-
onCancel={() => setConfigOpen(false)}
|
|
310
|
-
/>
|
|
311
|
-
</div>
|
|
312
|
-
</DialogContent>
|
|
313
|
-
</Dialog>
|
|
314
|
-
</div>
|
|
315
|
-
|
|
316
|
-
<div className={`hive-strip--bottom ${!isActive ? 'opacity-20' : ''}`} />
|
|
317
|
-
</div>
|
|
318
|
-
);
|
|
319
|
-
}
|