@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,281 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Canvas Tools - 7 tools
|
|
3
|
-
*
|
|
4
|
-
* @category canvas
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { Tool, ToolResult } from "../types.ts";
|
|
8
|
-
import { emitCanvas, type CanvasEventType } from "../../canvas/emitter";
|
|
9
|
-
import { logger } from "../../utils/logger.ts";
|
|
10
|
-
|
|
11
|
-
const log = logger.child("canvas");
|
|
12
|
-
|
|
13
|
-
// ─── canvas_render ───────────────────────────────────────────────────────────
|
|
14
|
-
|
|
15
|
-
export const canvasRenderTool: Tool = {
|
|
16
|
-
name: "canvas_render",
|
|
17
|
-
description: "Render a component or visualization on the canvas. Spanish: renderizar, visualizar, gráfico, diagrama",
|
|
18
|
-
parameters: {
|
|
19
|
-
type: "object",
|
|
20
|
-
properties: {
|
|
21
|
-
component: { type: "string", description: "Component type to render" },
|
|
22
|
-
data: { type: "object", description: "Data to pass to the component" },
|
|
23
|
-
},
|
|
24
|
-
required: ["component", "data"],
|
|
25
|
-
},
|
|
26
|
-
execute: async (params: Record<string, unknown>) => {
|
|
27
|
-
const componentType = params.component as string;
|
|
28
|
-
const data = params.data as Record<string, unknown>;
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
const id = `render_${componentType}_${Date.now()}`;
|
|
32
|
-
emitCanvas("canvas:render", {
|
|
33
|
-
component: {
|
|
34
|
-
id,
|
|
35
|
-
type: componentType,
|
|
36
|
-
props: data ?? {},
|
|
37
|
-
position: { x: 0, y: 0 },
|
|
38
|
-
size: { width: 400, height: 300 },
|
|
39
|
-
agentId: "agent",
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
return { ok: true, message: `Rendered ${componentType}.` };
|
|
43
|
-
} catch (error) {
|
|
44
|
-
return { ok: false, error: `Failed to render: ${(error as Error).message }` };
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
// ─── canvas_ask ──────────────────────────────────────────────────────────────
|
|
50
|
-
|
|
51
|
-
export const canvasAskTool: Tool = {
|
|
52
|
-
name: "canvas_ask",
|
|
53
|
-
description: "Show interactive form and wait for user input. Spanish: formulario interactivo, preguntar usuario, input",
|
|
54
|
-
parameters: {
|
|
55
|
-
type: "object",
|
|
56
|
-
properties: {
|
|
57
|
-
questions: {
|
|
58
|
-
type: "array",
|
|
59
|
-
description: "List of questions to ask",
|
|
60
|
-
items: {
|
|
61
|
-
type: "object",
|
|
62
|
-
properties: {
|
|
63
|
-
question: { type: "string" },
|
|
64
|
-
type: { type: "string", enum: ["text", "select", "confirm"] },
|
|
65
|
-
options: { type: "array", items: { type: "string" } },
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
required: ["questions"],
|
|
71
|
-
},
|
|
72
|
-
execute: async (params: Record<string, unknown>) => {
|
|
73
|
-
const questions = params.questions as any[];
|
|
74
|
-
|
|
75
|
-
try {
|
|
76
|
-
emitCanvas("canvas:ask", { questions });
|
|
77
|
-
return { ok: true, message: "Form displayed. Waiting for user input..." };
|
|
78
|
-
} catch (error) {
|
|
79
|
-
return { ok: false, error: `Failed to display form: ${(error as Error).message }` };
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
// ─── canvas_confirm ──────────────────────────────────────────────────────────
|
|
85
|
-
|
|
86
|
-
export const canvasConfirmTool: Tool = {
|
|
87
|
-
name: "canvas_confirm",
|
|
88
|
-
description: "Show a confirmation dialog before executing an action. Spanish: confirmar acción, diálogo, aprobar",
|
|
89
|
-
parameters: {
|
|
90
|
-
type: "object",
|
|
91
|
-
properties: {
|
|
92
|
-
message: { type: "string", description: "Confirmation message" },
|
|
93
|
-
action: { type: "string", description: "Action to confirm" },
|
|
94
|
-
},
|
|
95
|
-
required: ["message", "action"],
|
|
96
|
-
},
|
|
97
|
-
execute: async (params: Record<string, unknown>) => {
|
|
98
|
-
const message = params.message as string;
|
|
99
|
-
const action = params.action as string;
|
|
100
|
-
|
|
101
|
-
try {
|
|
102
|
-
emitCanvas("canvas:confirm", { message, action });
|
|
103
|
-
return { ok: true, message: "Confirmation dialog displayed." };
|
|
104
|
-
} catch (error) {
|
|
105
|
-
return { ok: false, error: `Failed to display confirmation: ${(error as Error).message }` };
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
// ─── canvas_show_card ────────────────────────────────────────────────────────
|
|
111
|
-
|
|
112
|
-
export const canvasShowCardTool: Tool = {
|
|
113
|
-
name: "canvas_show_card",
|
|
114
|
-
description: "Display structured information in card format. Spanish: mostrar tarjeta, card, información estructurada",
|
|
115
|
-
parameters: {
|
|
116
|
-
type: "object",
|
|
117
|
-
properties: {
|
|
118
|
-
title: { type: "string", description: "Card title" },
|
|
119
|
-
items: {
|
|
120
|
-
type: "array",
|
|
121
|
-
description: "List of key-value items",
|
|
122
|
-
items: {
|
|
123
|
-
type: "object",
|
|
124
|
-
properties: {
|
|
125
|
-
label: { type: "string" },
|
|
126
|
-
value: { type: "string" },
|
|
127
|
-
},
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
},
|
|
131
|
-
required: ["title", "items"],
|
|
132
|
-
},
|
|
133
|
-
execute: async (params: Record<string, unknown>) => {
|
|
134
|
-
const title = params.title as string;
|
|
135
|
-
const items = params.items as Array<{ label: string; value: string }>;
|
|
136
|
-
|
|
137
|
-
try {
|
|
138
|
-
const id = `card_${Date.now()}`;
|
|
139
|
-
emitCanvas("canvas:render", {
|
|
140
|
-
component: {
|
|
141
|
-
id,
|
|
142
|
-
type: "card",
|
|
143
|
-
props: {
|
|
144
|
-
title,
|
|
145
|
-
children: items.map((item) => `**${item.label}:** ${item.value}`).join("\n"),
|
|
146
|
-
// Pass items as table rows for richer rendering
|
|
147
|
-
items,
|
|
148
|
-
},
|
|
149
|
-
position: { x: 0, y: 0 },
|
|
150
|
-
size: { width: 320, height: 200 },
|
|
151
|
-
agentId: "agent",
|
|
152
|
-
},
|
|
153
|
-
});
|
|
154
|
-
return { ok: true, message: `Card "${title}" displayed.` };
|
|
155
|
-
} catch (error) {
|
|
156
|
-
return { ok: false, error: `Failed to display card: ${(error as Error).message }` };
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
// ─── canvas_show_progress ────────────────────────────────────────────────────
|
|
162
|
-
|
|
163
|
-
export const canvasShowProgressTool: Tool = {
|
|
164
|
-
name: "canvas_show_progress",
|
|
165
|
-
description: "Show progress bar or status indicator. Spanish: barra de progreso, indicador, progreso visual",
|
|
166
|
-
parameters: {
|
|
167
|
-
type: "object",
|
|
168
|
-
properties: {
|
|
169
|
-
bars: {
|
|
170
|
-
type: "array",
|
|
171
|
-
description: "List of progress bars",
|
|
172
|
-
items: {
|
|
173
|
-
type: "object",
|
|
174
|
-
properties: {
|
|
175
|
-
label: { type: "string" },
|
|
176
|
-
value: { type: "number", minimum: 0, maximum: 100 },
|
|
177
|
-
},
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
},
|
|
181
|
-
required: ["bars"],
|
|
182
|
-
},
|
|
183
|
-
execute: async (params: Record<string, unknown>) => {
|
|
184
|
-
const bars = params.bars as Array<{ label: string; value: number }>;
|
|
185
|
-
|
|
186
|
-
try {
|
|
187
|
-
// Render each bar as a separate progress component
|
|
188
|
-
for (const bar of bars) {
|
|
189
|
-
const id = `progress_${bar.label.replace(/\s+/g, "_")}_${Date.now()}`;
|
|
190
|
-
emitCanvas("canvas:render", {
|
|
191
|
-
component: {
|
|
192
|
-
id,
|
|
193
|
-
type: "progress",
|
|
194
|
-
props: { value: bar.value, label: bar.label },
|
|
195
|
-
position: { x: 0, y: 0 },
|
|
196
|
-
size: { width: 320, height: 60 },
|
|
197
|
-
agentId: "agent",
|
|
198
|
-
},
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
return { ok: true, message: "Progress displayed." };
|
|
202
|
-
} catch (error) {
|
|
203
|
-
return { ok: false, error: `Failed to display progress: ${(error as Error).message }` };
|
|
204
|
-
}
|
|
205
|
-
},
|
|
206
|
-
};
|
|
207
|
-
|
|
208
|
-
// ─── canvas_show_list ────────────────────────────────────────────────────────
|
|
209
|
-
|
|
210
|
-
export const canvasShowListTool: Tool = {
|
|
211
|
-
name: "canvas_show_list",
|
|
212
|
-
description: "Display key-value list information. Spanish: lista clave-valor, mostrar lista, información en lista",
|
|
213
|
-
parameters: {
|
|
214
|
-
type: "object",
|
|
215
|
-
properties: {
|
|
216
|
-
title: { type: "string", description: "List title" },
|
|
217
|
-
items: {
|
|
218
|
-
type: "object",
|
|
219
|
-
description: "Key-value pairs",
|
|
220
|
-
additionalProperties: { type: "string" },
|
|
221
|
-
},
|
|
222
|
-
},
|
|
223
|
-
required: ["title", "items"],
|
|
224
|
-
},
|
|
225
|
-
execute: async (params: Record<string, unknown>) => {
|
|
226
|
-
const title = params.title as string;
|
|
227
|
-
const items = params.items as Record<string, string>;
|
|
228
|
-
|
|
229
|
-
try {
|
|
230
|
-
const id = `list_${Date.now()}`;
|
|
231
|
-
// Render as a table with key/value columns
|
|
232
|
-
const columns = [{ header: "Campo", key: "key" }, { header: "Valor", key: "value" }];
|
|
233
|
-
const data = Object.entries(items).map(([key, value]) => ({ key, value }));
|
|
234
|
-
|
|
235
|
-
emitCanvas("canvas:render", {
|
|
236
|
-
component: {
|
|
237
|
-
id,
|
|
238
|
-
type: "table",
|
|
239
|
-
props: { title, columns, data },
|
|
240
|
-
position: { x: 0, y: 0 },
|
|
241
|
-
size: { width: 400, height: 300 },
|
|
242
|
-
agentId: "agent",
|
|
243
|
-
},
|
|
244
|
-
});
|
|
245
|
-
return { ok: true, message: `List "${title}" displayed.` };
|
|
246
|
-
} catch (error) {
|
|
247
|
-
return { ok: false, error: `Failed to display list: ${(error as Error).message }` };
|
|
248
|
-
}
|
|
249
|
-
},
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
// ─── canvas_clear ────────────────────────────────────────────────────────────
|
|
253
|
-
|
|
254
|
-
export const canvasClearTool: Tool = {
|
|
255
|
-
name: "canvas_clear",
|
|
256
|
-
description: "Clear current canvas content. Spanish: limpiar canvas, borrar visualización, resetear",
|
|
257
|
-
parameters: {
|
|
258
|
-
type: "object",
|
|
259
|
-
properties: {},
|
|
260
|
-
},
|
|
261
|
-
execute: async () => {
|
|
262
|
-
try {
|
|
263
|
-
emitCanvas("canvas:clear", {});
|
|
264
|
-
return { ok: true, message: "Canvas cleared." };
|
|
265
|
-
} catch (error) {
|
|
266
|
-
return { ok: false, error: `Failed to clear canvas: ${(error as Error).message }` };
|
|
267
|
-
}
|
|
268
|
-
},
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
export function createTools(): Tool[] {
|
|
272
|
-
return [
|
|
273
|
-
canvasRenderTool,
|
|
274
|
-
canvasAskTool,
|
|
275
|
-
canvasConfirmTool,
|
|
276
|
-
canvasShowCardTool,
|
|
277
|
-
canvasShowProgressTool,
|
|
278
|
-
canvasShowListTool,
|
|
279
|
-
canvasClearTool,
|
|
280
|
-
];
|
|
281
|
-
}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* cli_exec - Execute shell commands
|
|
3
|
-
*
|
|
4
|
-
* @category cli
|
|
5
|
-
* @seedId cli_exec
|
|
6
|
-
* @spanish ejecutar comando, terminal, bash, script, consola
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { Tool } from "../types.ts";
|
|
10
|
-
import { logger } from "../../utils/logger.ts";
|
|
11
|
-
import { resolveInWorkspace, getWorkspace, expandPath } from "../filesystem/workspace-guard.ts";
|
|
12
|
-
import * as fs from "node:fs";
|
|
13
|
-
|
|
14
|
-
const log = logger.child("cli-exec");
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Patterns that are unconditionally blocked regardless of workspace config.
|
|
18
|
-
* Checked against the full command string (lowercased).
|
|
19
|
-
*/
|
|
20
|
-
const BLOCKED_PATTERNS: Array<{ pattern: RegExp; reason: string }> = [
|
|
21
|
-
{ pattern: /rm\s+-rf\s+\/[^\s]*/, reason: "recursive delete from root" },
|
|
22
|
-
{ pattern: /rm\s+-rf\s+~/, reason: "recursive delete from home" },
|
|
23
|
-
{ pattern: />\s*\/dev\//, reason: "write to device file" },
|
|
24
|
-
{ pattern: /mkfs/, reason: "filesystem format" },
|
|
25
|
-
{ pattern: /dd\s+if=/, reason: "raw disk write" },
|
|
26
|
-
{ pattern: /:\(\)\s*\{/, reason: "fork bomb pattern" },
|
|
27
|
-
{ pattern: /del\s+\/f\s+\/s/, reason: "recursive force delete (Windows)" },
|
|
28
|
-
{ pattern: /format\s+[a-z]:/i, reason: "disk format (Windows)" },
|
|
29
|
-
];
|
|
30
|
-
|
|
31
|
-
export const cliExecTool: Tool = {
|
|
32
|
-
name: "cli_exec",
|
|
33
|
-
description: "Execute shell/bash commands in the agent workspace. NOTE: do NOT use for cron scheduling, use cron_add instead. Spanish: ejecutar comando, terminal, bash, script, consola",
|
|
34
|
-
parameters: {
|
|
35
|
-
type: "object",
|
|
36
|
-
properties: {
|
|
37
|
-
command: {
|
|
38
|
-
type: "string",
|
|
39
|
-
description: "The shell command to execute (supports pipes, redirections, variables)",
|
|
40
|
-
},
|
|
41
|
-
timeout: {
|
|
42
|
-
type: "number",
|
|
43
|
-
description: "Timeout in seconds (default: 30, max: 300)",
|
|
44
|
-
},
|
|
45
|
-
cwd: {
|
|
46
|
-
type: "string",
|
|
47
|
-
description: "Working directory (default: agent workspace)",
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
required: ["command"],
|
|
51
|
-
},
|
|
52
|
-
execute: async (params: Record<string, unknown>, config?: any) => {
|
|
53
|
-
const command = params.command as string;
|
|
54
|
-
const timeoutSecs = Math.min((params.timeout as number) ?? 30, 300);
|
|
55
|
-
const timeoutMs = timeoutSecs * 1000;
|
|
56
|
-
|
|
57
|
-
// ── Workspace enforcement ──────────────────────────────────────────────────
|
|
58
|
-
const workspace = getWorkspace(config);
|
|
59
|
-
const defaultCwd = workspace ? expandPath(workspace) : process.cwd();
|
|
60
|
-
|
|
61
|
-
let cwd: string;
|
|
62
|
-
try {
|
|
63
|
-
const rawCwd = (params.cwd as string) ?? defaultCwd;
|
|
64
|
-
cwd = resolveInWorkspace(rawCwd, workspace);
|
|
65
|
-
} catch (e) {
|
|
66
|
-
return { ok: false, error: (e as Error).message };
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Ensure cwd exists
|
|
70
|
-
if (!fs.existsSync(cwd)) {
|
|
71
|
-
return { ok: false, error: `Working directory not found: ${cwd}` };
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// ── Dangerous pattern check ────────────────────────────────────────────────
|
|
75
|
-
for (const { pattern, reason } of BLOCKED_PATTERNS) {
|
|
76
|
-
if (pattern.test(command)) {
|
|
77
|
-
return {
|
|
78
|
-
ok: false,
|
|
79
|
-
error: `Command not allowed: ${reason}`,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
log.info(`Executing: ${command} (cwd=${cwd})`);
|
|
85
|
-
|
|
86
|
-
const t0 = performance.now();
|
|
87
|
-
|
|
88
|
-
try {
|
|
89
|
-
const controller = new AbortController();
|
|
90
|
-
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
91
|
-
|
|
92
|
-
// Use sh -c so pipes, redirections, variables, and quoted args all work
|
|
93
|
-
const proc = Bun.spawn(["/bin/sh", "-c", command], {
|
|
94
|
-
cwd,
|
|
95
|
-
signal: controller.signal,
|
|
96
|
-
stdout: "pipe",
|
|
97
|
-
stderr: "pipe",
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
let stdout = "";
|
|
101
|
-
let stderr = "";
|
|
102
|
-
let exitCode: number;
|
|
103
|
-
|
|
104
|
-
try {
|
|
105
|
-
[stdout, stderr] = await Promise.all([
|
|
106
|
-
new Response(proc.stdout).text(),
|
|
107
|
-
new Response(proc.stderr).text(),
|
|
108
|
-
]);
|
|
109
|
-
exitCode = await proc.exited;
|
|
110
|
-
} catch {
|
|
111
|
-
// AbortController fired — process was killed due to timeout
|
|
112
|
-
exitCode = -1;
|
|
113
|
-
stdout = stdout || "";
|
|
114
|
-
stderr = stderr || `Process killed after ${timeoutSecs}s timeout`;
|
|
115
|
-
} finally {
|
|
116
|
-
clearTimeout(timeoutId);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const elapsedMs = Math.round(performance.now() - t0);
|
|
120
|
-
|
|
121
|
-
return {
|
|
122
|
-
ok: exitCode === 0,
|
|
123
|
-
command,
|
|
124
|
-
exitCode,
|
|
125
|
-
stdout: stdout.trim(),
|
|
126
|
-
stderr: stderr.trim(),
|
|
127
|
-
executionTimeMs: elapsedMs,
|
|
128
|
-
cwd,
|
|
129
|
-
};
|
|
130
|
-
} catch (error) {
|
|
131
|
-
log.error(`Command failed: ${(error as Error).message}`);
|
|
132
|
-
return {
|
|
133
|
-
ok: false,
|
|
134
|
-
error: `Command execution failed: ${(error as Error).message}`,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
},
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
export function createTools(): Tool[] {
|
|
141
|
-
return [cliExecTool];
|
|
142
|
-
}
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CodeBridge Tools - 3 tools
|
|
3
|
-
*
|
|
4
|
-
* @category codebridge
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { Tool } from "../types.ts";
|
|
8
|
-
import { logger } from "../../utils/logger.ts";
|
|
9
|
-
|
|
10
|
-
const log = logger.child("codebridge");
|
|
11
|
-
const CODE_BRIDGE_URL = "ws://localhost:18791";
|
|
12
|
-
|
|
13
|
-
// ─── codebridge_launch ───────────────────────────────────────────────────────
|
|
14
|
-
|
|
15
|
-
export const codebridgeLaunchTool: Tool = {
|
|
16
|
-
name: "codebridge_launch",
|
|
17
|
-
description: "Launch an external coding CLI subagent (Claude Code, Qwen CLI, Gemini CLI, OpenCode CLI) to execute a coding task locally. Spanish: lanzar agente de código, iniciar Claude Code, Qwen CLI, Gemini CLI, OpenCode, subagente externo de programación",
|
|
18
|
-
parameters: {
|
|
19
|
-
type: "object",
|
|
20
|
-
properties: {
|
|
21
|
-
cli: {
|
|
22
|
-
type: "string",
|
|
23
|
-
enum: ["qwen", "claude", "opencode", "gemini"],
|
|
24
|
-
description: "CLI command to run",
|
|
25
|
-
},
|
|
26
|
-
prompt: {
|
|
27
|
-
type: "string",
|
|
28
|
-
description: "The prompt/task for the subagent",
|
|
29
|
-
},
|
|
30
|
-
role: {
|
|
31
|
-
type: "string",
|
|
32
|
-
enum: ["architecture", "development", "testing", "documentation"],
|
|
33
|
-
description: "Role of the subagent",
|
|
34
|
-
},
|
|
35
|
-
timeoutSeconds: {
|
|
36
|
-
type: "number",
|
|
37
|
-
description: "Timeout in seconds (default: 600)",
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
required: ["cli", "prompt"],
|
|
41
|
-
},
|
|
42
|
-
execute: async (params: Record<string, unknown>) => {
|
|
43
|
-
const cli = params.cli as string;
|
|
44
|
-
const prompt = params.prompt as string;
|
|
45
|
-
const role = (params.role as string) ?? "development";
|
|
46
|
-
const timeoutSeconds = (params.timeoutSeconds as number) ?? 600;
|
|
47
|
-
|
|
48
|
-
try {
|
|
49
|
-
// Check if Code Bridge is available
|
|
50
|
-
const controller = new AbortController();
|
|
51
|
-
const timeout = setTimeout(() => controller.abort(), 1000);
|
|
52
|
-
const response = await fetch("http://localhost:18791/health", { signal: controller.signal });
|
|
53
|
-
clearTimeout(timeout);
|
|
54
|
-
|
|
55
|
-
if (!response.ok) {
|
|
56
|
-
return {
|
|
57
|
-
ok: false,
|
|
58
|
-
error: "Code Bridge not available. Start with: bun run packages/code-bridge/src/index.ts",
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Launch via WebSocket
|
|
63
|
-
const ws = new WebSocket(CODE_BRIDGE_URL);
|
|
64
|
-
const taskId = `task_${Date.now()}`;
|
|
65
|
-
|
|
66
|
-
return new Promise((resolve) => {
|
|
67
|
-
ws.onopen = () => {
|
|
68
|
-
ws.send(JSON.stringify({
|
|
69
|
-
cmd: "launch",
|
|
70
|
-
taskId,
|
|
71
|
-
config: { role, cli, timeoutSeconds },
|
|
72
|
-
prompt,
|
|
73
|
-
}));
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
ws.onmessage = (event) => {
|
|
77
|
-
const data = JSON.parse(event.data);
|
|
78
|
-
if (data.type === "ack") {
|
|
79
|
-
resolve({
|
|
80
|
-
ok: true,
|
|
81
|
-
taskId,
|
|
82
|
-
pid: data.pid,
|
|
83
|
-
message: `Launched ${cli} with PID ${data.pid}`,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
ws.onerror = () => {
|
|
89
|
-
resolve({ ok: false, error: "Failed to connect to Code Bridge" });
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
setTimeout(() => {
|
|
93
|
-
ws.close();
|
|
94
|
-
resolve({ ok: false, error: "Timeout connecting to Code Bridge" });
|
|
95
|
-
}, 5000);
|
|
96
|
-
});
|
|
97
|
-
} catch (error) {
|
|
98
|
-
return {
|
|
99
|
-
ok: false,
|
|
100
|
-
error: `Failed to launch: ${(error as Error).message}`,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
// ─── codebridge_status ───────────────────────────────────────────────────────
|
|
107
|
-
|
|
108
|
-
export const codebridgeStatusTool: Tool = {
|
|
109
|
-
name: "codebridge_status",
|
|
110
|
-
description: "Check the status and output of a running CodeBridge subagent. Spanish: estado agente de código, verificar Claude Code, progreso subagente externo",
|
|
111
|
-
parameters: {
|
|
112
|
-
type: "object",
|
|
113
|
-
properties: {
|
|
114
|
-
taskId: {
|
|
115
|
-
type: "string",
|
|
116
|
-
description: "Task ID to check status for",
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
required: ["taskId"],
|
|
120
|
-
},
|
|
121
|
-
execute: async (params: Record<string, unknown>) => {
|
|
122
|
-
const taskId = params.taskId as string;
|
|
123
|
-
|
|
124
|
-
try {
|
|
125
|
-
const response = await fetch(`http://localhost:18791/status/${taskId}`);
|
|
126
|
-
|
|
127
|
-
if (!response.ok) {
|
|
128
|
-
return { ok: false, error: `Task not found: ${taskId}` };
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const data = await response.json();
|
|
132
|
-
return { ok: true, ...data };
|
|
133
|
-
} catch (error) {
|
|
134
|
-
return {
|
|
135
|
-
ok: false,
|
|
136
|
-
error: `Failed to get status: ${(error as Error).message}`,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
},
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
// ─── codebridge_cancel ───────────────────────────────────────────────────────
|
|
143
|
-
|
|
144
|
-
export const codebridgeCancelTool: Tool = {
|
|
145
|
-
name: "codebridge_cancel",
|
|
146
|
-
description: "Cancel and terminate a running CodeBridge subagent process. Spanish: cancelar agente de código, detener Claude Code, terminar subagente externo",
|
|
147
|
-
parameters: {
|
|
148
|
-
type: "object",
|
|
149
|
-
properties: {
|
|
150
|
-
taskId: {
|
|
151
|
-
type: "string",
|
|
152
|
-
description: "Task ID to cancel",
|
|
153
|
-
},
|
|
154
|
-
},
|
|
155
|
-
required: ["taskId"],
|
|
156
|
-
},
|
|
157
|
-
execute: async (params: Record<string, unknown>) => {
|
|
158
|
-
const taskId = params.taskId as string;
|
|
159
|
-
|
|
160
|
-
try {
|
|
161
|
-
const response = await fetch(`http://localhost:18791/cancel/${taskId}`, { method: "POST" });
|
|
162
|
-
|
|
163
|
-
if (!response.ok) {
|
|
164
|
-
return { ok: false, error: `Failed to cancel: ${taskId}` };
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
return { ok: true, taskId, message: "Task cancelled." };
|
|
168
|
-
} catch (error) {
|
|
169
|
-
return {
|
|
170
|
-
ok: false,
|
|
171
|
-
error: `Failed to cancel: ${(error as Error).message}`,
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
},
|
|
175
|
-
};
|
|
176
|
-
|
|
177
|
-
export function createTools(): Tool[] {
|
|
178
|
-
return [codebridgeLaunchTool, codebridgeStatusTool, codebridgeCancelTool];
|
|
179
|
-
}
|