ruvbot 0.1.0
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/.env.example +234 -0
- package/README.md +850 -0
- package/bin/cli.js +19 -0
- package/bin/ruvbot.js +47 -0
- package/dist/RuvBot.d.ts +125 -0
- package/dist/RuvBot.d.ts.map +1 -0
- package/dist/RuvBot.js +461 -0
- package/dist/RuvBot.js.map +1 -0
- package/dist/api/index.d.ts +27 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +11 -0
- package/dist/api/index.js.map +1 -0
- package/dist/channels/ChannelRegistry.d.ts +94 -0
- package/dist/channels/ChannelRegistry.d.ts.map +1 -0
- package/dist/channels/ChannelRegistry.js +231 -0
- package/dist/channels/ChannelRegistry.js.map +1 -0
- package/dist/channels/adapters/BaseAdapter.d.ts +120 -0
- package/dist/channels/adapters/BaseAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/BaseAdapter.js +104 -0
- package/dist/channels/adapters/BaseAdapter.js.map +1 -0
- package/dist/channels/adapters/DiscordAdapter.d.ts +67 -0
- package/dist/channels/adapters/DiscordAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/DiscordAdapter.js +164 -0
- package/dist/channels/adapters/DiscordAdapter.js.map +1 -0
- package/dist/channels/adapters/SlackAdapter.d.ts +62 -0
- package/dist/channels/adapters/SlackAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/SlackAdapter.js +160 -0
- package/dist/channels/adapters/SlackAdapter.js.map +1 -0
- package/dist/channels/adapters/TelegramAdapter.d.ts +93 -0
- package/dist/channels/adapters/TelegramAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/TelegramAdapter.js +171 -0
- package/dist/channels/adapters/TelegramAdapter.js.map +1 -0
- package/dist/channels/index.d.ts +11 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +26 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +15 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +271 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +17 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +425 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/index.d.ts +11 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +19 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/memory.d.ts +11 -0
- package/dist/cli/commands/memory.d.ts.map +1 -0
- package/dist/cli/commands/memory.js +180 -0
- package/dist/cli/commands/memory.js.map +1 -0
- package/dist/cli/commands/plugins.d.ts +12 -0
- package/dist/cli/commands/plugins.d.ts.map +1 -0
- package/dist/cli/commands/plugins.js +315 -0
- package/dist/cli/commands/plugins.js.map +1 -0
- package/dist/cli/commands/security.d.ts +14 -0
- package/dist/cli/commands/security.d.ts.map +1 -0
- package/dist/cli/commands/security.js +285 -0
- package/dist/cli/commands/security.js.map +1 -0
- package/dist/cli/index.d.ts +25 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +415 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/BotConfig.d.ts +611 -0
- package/dist/core/BotConfig.d.ts.map +1 -0
- package/dist/core/BotConfig.js +224 -0
- package/dist/core/BotConfig.js.map +1 -0
- package/dist/core/BotState.d.ts +59 -0
- package/dist/core/BotState.d.ts.map +1 -0
- package/dist/core/BotState.js +224 -0
- package/dist/core/BotState.js.map +1 -0
- package/dist/core/agent/index.d.ts +51 -0
- package/dist/core/agent/index.d.ts.map +1 -0
- package/dist/core/agent/index.js +6 -0
- package/dist/core/agent/index.js.map +1 -0
- package/dist/core/entities/Agent.d.ts +42 -0
- package/dist/core/entities/Agent.d.ts.map +1 -0
- package/dist/core/entities/Agent.js +88 -0
- package/dist/core/entities/Agent.js.map +1 -0
- package/dist/core/entities/Message.d.ts +85 -0
- package/dist/core/entities/Message.d.ts.map +1 -0
- package/dist/core/entities/Message.js +158 -0
- package/dist/core/entities/Message.js.map +1 -0
- package/dist/core/entities/Session.d.ts +86 -0
- package/dist/core/entities/Session.d.ts.map +1 -0
- package/dist/core/entities/Session.js +186 -0
- package/dist/core/entities/Session.js.map +1 -0
- package/dist/core/entities/Skill.d.ts +83 -0
- package/dist/core/entities/Skill.d.ts.map +1 -0
- package/dist/core/entities/Skill.js +192 -0
- package/dist/core/entities/Skill.js.map +1 -0
- package/dist/core/entities/index.d.ts +8 -0
- package/dist/core/entities/index.d.ts.map +1 -0
- package/dist/core/entities/index.js +24 -0
- package/dist/core/entities/index.js.map +1 -0
- package/dist/core/entities/types.d.ts +677 -0
- package/dist/core/entities/types.d.ts.map +1 -0
- package/dist/core/entities/types.js +198 -0
- package/dist/core/entities/types.js.map +1 -0
- package/dist/core/errors.d.ts +76 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +136 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +10 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +25 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/session/index.d.ts +59 -0
- package/dist/core/session/index.d.ts.map +1 -0
- package/dist/core/session/index.js +6 -0
- package/dist/core/session/index.js.map +1 -0
- package/dist/core/skill/index.d.ts +75 -0
- package/dist/core/skill/index.d.ts.map +1 -0
- package/dist/core/skill/index.js +32 -0
- package/dist/core/skill/index.js.map +1 -0
- package/dist/core/types.d.ts +248 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +14 -0
- package/dist/core/types.js.map +1 -0
- package/dist/esm/RuvBot.d.ts +125 -0
- package/dist/esm/RuvBot.d.ts.map +1 -0
- package/dist/esm/RuvBot.js +452 -0
- package/dist/esm/RuvBot.js.map +1 -0
- package/dist/esm/api/index.d.ts +27 -0
- package/dist/esm/api/index.d.ts.map +1 -0
- package/dist/esm/api/index.js +8 -0
- package/dist/esm/api/index.js.map +1 -0
- package/dist/esm/channels/ChannelRegistry.d.ts +94 -0
- package/dist/esm/channels/ChannelRegistry.d.ts.map +1 -0
- package/dist/esm/channels/ChannelRegistry.js +226 -0
- package/dist/esm/channels/ChannelRegistry.js.map +1 -0
- package/dist/esm/channels/adapters/BaseAdapter.d.ts +120 -0
- package/dist/esm/channels/adapters/BaseAdapter.d.ts.map +1 -0
- package/dist/esm/channels/adapters/BaseAdapter.js +100 -0
- package/dist/esm/channels/adapters/BaseAdapter.js.map +1 -0
- package/dist/esm/channels/adapters/DiscordAdapter.d.ts +67 -0
- package/dist/esm/channels/adapters/DiscordAdapter.d.ts.map +1 -0
- package/dist/esm/channels/adapters/DiscordAdapter.js +159 -0
- package/dist/esm/channels/adapters/DiscordAdapter.js.map +1 -0
- package/dist/esm/channels/adapters/SlackAdapter.d.ts +62 -0
- package/dist/esm/channels/adapters/SlackAdapter.d.ts.map +1 -0
- package/dist/esm/channels/adapters/SlackAdapter.js +155 -0
- package/dist/esm/channels/adapters/SlackAdapter.js.map +1 -0
- package/dist/esm/channels/adapters/TelegramAdapter.d.ts +93 -0
- package/dist/esm/channels/adapters/TelegramAdapter.d.ts.map +1 -0
- package/dist/esm/channels/adapters/TelegramAdapter.js +166 -0
- package/dist/esm/channels/adapters/TelegramAdapter.js.map +1 -0
- package/dist/esm/channels/index.d.ts +11 -0
- package/dist/esm/channels/index.d.ts.map +1 -0
- package/dist/esm/channels/index.js +14 -0
- package/dist/esm/channels/index.js.map +1 -0
- package/dist/esm/cli/commands/agent.d.ts +15 -0
- package/dist/esm/cli/commands/agent.d.ts.map +1 -0
- package/dist/esm/cli/commands/agent.js +265 -0
- package/dist/esm/cli/commands/agent.js.map +1 -0
- package/dist/esm/cli/commands/doctor.d.ts +17 -0
- package/dist/esm/cli/commands/doctor.d.ts.map +1 -0
- package/dist/esm/cli/commands/doctor.js +419 -0
- package/dist/esm/cli/commands/doctor.js.map +1 -0
- package/dist/esm/cli/commands/index.d.ts +11 -0
- package/dist/esm/cli/commands/index.d.ts.map +1 -0
- package/dist/esm/cli/commands/index.js +11 -0
- package/dist/esm/cli/commands/index.js.map +1 -0
- package/dist/esm/cli/commands/memory.d.ts +11 -0
- package/dist/esm/cli/commands/memory.d.ts.map +1 -0
- package/dist/esm/cli/commands/memory.js +174 -0
- package/dist/esm/cli/commands/memory.js.map +1 -0
- package/dist/esm/cli/commands/plugins.d.ts +12 -0
- package/dist/esm/cli/commands/plugins.d.ts.map +1 -0
- package/dist/esm/cli/commands/plugins.js +309 -0
- package/dist/esm/cli/commands/plugins.js.map +1 -0
- package/dist/esm/cli/commands/security.d.ts +14 -0
- package/dist/esm/cli/commands/security.d.ts.map +1 -0
- package/dist/esm/cli/commands/security.js +279 -0
- package/dist/esm/cli/commands/security.js.map +1 -0
- package/dist/esm/cli/index.d.ts +25 -0
- package/dist/esm/cli/index.d.ts.map +1 -0
- package/dist/esm/cli/index.js +408 -0
- package/dist/esm/cli/index.js.map +1 -0
- package/dist/esm/core/BotConfig.d.ts +611 -0
- package/dist/esm/core/BotConfig.d.ts.map +1 -0
- package/dist/esm/core/BotConfig.js +220 -0
- package/dist/esm/core/BotConfig.js.map +1 -0
- package/dist/esm/core/BotState.d.ts +59 -0
- package/dist/esm/core/BotState.d.ts.map +1 -0
- package/dist/esm/core/BotState.js +220 -0
- package/dist/esm/core/BotState.js.map +1 -0
- package/dist/esm/core/agent/index.d.ts +51 -0
- package/dist/esm/core/agent/index.d.ts.map +1 -0
- package/dist/esm/core/agent/index.js +5 -0
- package/dist/esm/core/agent/index.js.map +1 -0
- package/dist/esm/core/entities/Agent.d.ts +42 -0
- package/dist/esm/core/entities/Agent.d.ts.map +1 -0
- package/dist/esm/core/entities/Agent.js +84 -0
- package/dist/esm/core/entities/Agent.js.map +1 -0
- package/dist/esm/core/entities/Message.d.ts +85 -0
- package/dist/esm/core/entities/Message.d.ts.map +1 -0
- package/dist/esm/core/entities/Message.js +154 -0
- package/dist/esm/core/entities/Message.js.map +1 -0
- package/dist/esm/core/entities/Session.d.ts +86 -0
- package/dist/esm/core/entities/Session.d.ts.map +1 -0
- package/dist/esm/core/entities/Session.js +182 -0
- package/dist/esm/core/entities/Session.js.map +1 -0
- package/dist/esm/core/entities/Skill.d.ts +83 -0
- package/dist/esm/core/entities/Skill.d.ts.map +1 -0
- package/dist/esm/core/entities/Skill.js +188 -0
- package/dist/esm/core/entities/Skill.js.map +1 -0
- package/dist/esm/core/entities/index.d.ts +8 -0
- package/dist/esm/core/entities/index.d.ts.map +1 -0
- package/dist/esm/core/entities/index.js +8 -0
- package/dist/esm/core/entities/index.js.map +1 -0
- package/dist/esm/core/entities/types.d.ts +677 -0
- package/dist/esm/core/entities/types.d.ts.map +1 -0
- package/dist/esm/core/entities/types.js +195 -0
- package/dist/esm/core/entities/types.js.map +1 -0
- package/dist/esm/core/errors.d.ts +76 -0
- package/dist/esm/core/errors.d.ts.map +1 -0
- package/dist/esm/core/errors.js +120 -0
- package/dist/esm/core/errors.js.map +1 -0
- package/dist/esm/core/index.d.ts +10 -0
- package/dist/esm/core/index.d.ts.map +1 -0
- package/dist/esm/core/index.js +9 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/session/index.d.ts +59 -0
- package/dist/esm/core/session/index.d.ts.map +1 -0
- package/dist/esm/core/session/index.js +5 -0
- package/dist/esm/core/session/index.js.map +1 -0
- package/dist/esm/core/skill/index.d.ts +75 -0
- package/dist/esm/core/skill/index.d.ts.map +1 -0
- package/dist/esm/core/skill/index.js +28 -0
- package/dist/esm/core/skill/index.js.map +1 -0
- package/dist/esm/core/types.d.ts +248 -0
- package/dist/esm/core/types.d.ts.map +1 -0
- package/dist/esm/core/types.js +10 -0
- package/dist/esm/core/types.js.map +1 -0
- package/dist/esm/index.d.ts +26 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +32 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/infrastructure/index.d.ts +9 -0
- package/dist/esm/infrastructure/index.d.ts.map +1 -0
- package/dist/esm/infrastructure/index.js +10 -0
- package/dist/esm/infrastructure/index.js.map +1 -0
- package/dist/esm/infrastructure/messaging/index.d.ts +43 -0
- package/dist/esm/infrastructure/messaging/index.d.ts.map +1 -0
- package/dist/esm/infrastructure/messaging/index.js +5 -0
- package/dist/esm/infrastructure/messaging/index.js.map +1 -0
- package/dist/esm/infrastructure/persistence/index.d.ts +62 -0
- package/dist/esm/infrastructure/persistence/index.d.ts.map +1 -0
- package/dist/esm/infrastructure/persistence/index.js +5 -0
- package/dist/esm/infrastructure/persistence/index.js.map +1 -0
- package/dist/esm/infrastructure/workers/index.d.ts +47 -0
- package/dist/esm/infrastructure/workers/index.d.ts.map +1 -0
- package/dist/esm/infrastructure/workers/index.js +13 -0
- package/dist/esm/infrastructure/workers/index.js.map +1 -0
- package/dist/esm/integration/index.d.ts +9 -0
- package/dist/esm/integration/index.d.ts.map +1 -0
- package/dist/esm/integration/index.js +9 -0
- package/dist/esm/integration/index.js.map +1 -0
- package/dist/esm/integration/providers/AnthropicProvider.d.ts +48 -0
- package/dist/esm/integration/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/esm/integration/providers/AnthropicProvider.js +292 -0
- package/dist/esm/integration/providers/AnthropicProvider.js.map +1 -0
- package/dist/esm/integration/providers/OpenRouterProvider.d.ts +62 -0
- package/dist/esm/integration/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/esm/integration/providers/OpenRouterProvider.js +445 -0
- package/dist/esm/integration/providers/OpenRouterProvider.js.map +1 -0
- package/dist/esm/integration/providers/index.d.ts +67 -0
- package/dist/esm/integration/providers/index.d.ts.map +1 -0
- package/dist/esm/integration/providers/index.js +7 -0
- package/dist/esm/integration/providers/index.js.map +1 -0
- package/dist/esm/integration/slack/index.d.ts +67 -0
- package/dist/esm/integration/slack/index.d.ts.map +1 -0
- package/dist/esm/integration/slack/index.js +5 -0
- package/dist/esm/integration/slack/index.js.map +1 -0
- package/dist/esm/integration/webhooks/index.d.ts +43 -0
- package/dist/esm/integration/webhooks/index.d.ts.map +1 -0
- package/dist/esm/integration/webhooks/index.js +5 -0
- package/dist/esm/integration/webhooks/index.js.map +1 -0
- package/dist/esm/integrations/index.d.ts +38 -0
- package/dist/esm/integrations/index.d.ts.map +1 -0
- package/dist/esm/integrations/index.js +8 -0
- package/dist/esm/integrations/index.js.map +1 -0
- package/dist/esm/learning/embeddings/WasmEmbedder.d.ts +61 -0
- package/dist/esm/learning/embeddings/WasmEmbedder.d.ts.map +1 -0
- package/dist/esm/learning/embeddings/WasmEmbedder.js +219 -0
- package/dist/esm/learning/embeddings/WasmEmbedder.js.map +1 -0
- package/dist/esm/learning/embeddings/index.d.ts +35 -0
- package/dist/esm/learning/embeddings/index.d.ts.map +1 -0
- package/dist/esm/learning/embeddings/index.js +5 -0
- package/dist/esm/learning/embeddings/index.js.map +1 -0
- package/dist/esm/learning/index.d.ts +12 -0
- package/dist/esm/learning/index.d.ts.map +1 -0
- package/dist/esm/learning/index.js +12 -0
- package/dist/esm/learning/index.js.map +1 -0
- package/dist/esm/learning/memory/MemoryManager.d.ts +155 -0
- package/dist/esm/learning/memory/MemoryManager.d.ts.map +1 -0
- package/dist/esm/learning/memory/MemoryManager.js +327 -0
- package/dist/esm/learning/memory/MemoryManager.js.map +1 -0
- package/dist/esm/learning/patterns/index.d.ts +64 -0
- package/dist/esm/learning/patterns/index.d.ts.map +1 -0
- package/dist/esm/learning/patterns/index.js +5 -0
- package/dist/esm/learning/patterns/index.js.map +1 -0
- package/dist/esm/learning/search/BM25Index.d.ts +88 -0
- package/dist/esm/learning/search/BM25Index.d.ts.map +1 -0
- package/dist/esm/learning/search/BM25Index.js +246 -0
- package/dist/esm/learning/search/BM25Index.js.map +1 -0
- package/dist/esm/learning/search/HybridSearch.d.ts +85 -0
- package/dist/esm/learning/search/HybridSearch.d.ts.map +1 -0
- package/dist/esm/learning/search/HybridSearch.js +238 -0
- package/dist/esm/learning/search/HybridSearch.js.map +1 -0
- package/dist/esm/learning/search/index.d.ts +10 -0
- package/dist/esm/learning/search/index.d.ts.map +1 -0
- package/dist/esm/learning/search/index.js +8 -0
- package/dist/esm/learning/search/index.js.map +1 -0
- package/dist/esm/learning/training/index.d.ts +95 -0
- package/dist/esm/learning/training/index.d.ts.map +1 -0
- package/dist/esm/learning/training/index.js +5 -0
- package/dist/esm/learning/training/index.js.map +1 -0
- package/dist/esm/plugins/PluginManager.d.ts +316 -0
- package/dist/esm/plugins/PluginManager.d.ts.map +1 -0
- package/dist/esm/plugins/PluginManager.js +481 -0
- package/dist/esm/plugins/PluginManager.js.map +1 -0
- package/dist/esm/plugins/index.d.ts +8 -0
- package/dist/esm/plugins/index.d.ts.map +1 -0
- package/dist/esm/plugins/index.js +8 -0
- package/dist/esm/plugins/index.js.map +1 -0
- package/dist/esm/security/AIDefenceGuard.d.ts +212 -0
- package/dist/esm/security/AIDefenceGuard.d.ts.map +1 -0
- package/dist/esm/security/AIDefenceGuard.js +570 -0
- package/dist/esm/security/AIDefenceGuard.js.map +1 -0
- package/dist/esm/security/index.d.ts +8 -0
- package/dist/esm/security/index.d.ts.map +1 -0
- package/dist/esm/security/index.js +8 -0
- package/dist/esm/security/index.js.map +1 -0
- package/dist/esm/server.d.ts +11 -0
- package/dist/esm/server.d.ts.map +1 -0
- package/dist/esm/server.js +405 -0
- package/dist/esm/server.js.map +1 -0
- package/dist/esm/skills/index.d.ts +15 -0
- package/dist/esm/skills/index.d.ts.map +1 -0
- package/dist/esm/skills/index.js +9 -0
- package/dist/esm/skills/index.js.map +1 -0
- package/dist/esm/swarm/ByzantineConsensus.d.ts +110 -0
- package/dist/esm/swarm/ByzantineConsensus.d.ts.map +1 -0
- package/dist/esm/swarm/ByzantineConsensus.js +267 -0
- package/dist/esm/swarm/ByzantineConsensus.js.map +1 -0
- package/dist/esm/swarm/SwarmCoordinator.d.ts +141 -0
- package/dist/esm/swarm/SwarmCoordinator.d.ts.map +1 -0
- package/dist/esm/swarm/SwarmCoordinator.js +381 -0
- package/dist/esm/swarm/SwarmCoordinator.js.map +1 -0
- package/dist/esm/swarm/index.d.ts +8 -0
- package/dist/esm/swarm/index.d.ts.map +1 -0
- package/dist/esm/swarm/index.js +8 -0
- package/dist/esm/swarm/index.js.map +1 -0
- package/dist/esm/types.d.ts +120 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +10 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/logger.d.ts +23 -0
- package/dist/esm/utils/logger.d.ts.map +1 -0
- package/dist/esm/utils/logger.js +77 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +9 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +28 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/messaging/index.d.ts +43 -0
- package/dist/infrastructure/messaging/index.d.ts.map +1 -0
- package/dist/infrastructure/messaging/index.js +6 -0
- package/dist/infrastructure/messaging/index.js.map +1 -0
- package/dist/infrastructure/persistence/index.d.ts +62 -0
- package/dist/infrastructure/persistence/index.d.ts.map +1 -0
- package/dist/infrastructure/persistence/index.js +6 -0
- package/dist/infrastructure/persistence/index.js.map +1 -0
- package/dist/infrastructure/workers/index.d.ts +47 -0
- package/dist/infrastructure/workers/index.d.ts.map +1 -0
- package/dist/infrastructure/workers/index.js +16 -0
- package/dist/infrastructure/workers/index.js.map +1 -0
- package/dist/integration/index.d.ts +9 -0
- package/dist/integration/index.d.ts.map +1 -0
- package/dist/integration/index.js +25 -0
- package/dist/integration/index.js.map +1 -0
- package/dist/integration/providers/AnthropicProvider.d.ts +48 -0
- package/dist/integration/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/integration/providers/AnthropicProvider.js +297 -0
- package/dist/integration/providers/AnthropicProvider.js.map +1 -0
- package/dist/integration/providers/OpenRouterProvider.d.ts +62 -0
- package/dist/integration/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/integration/providers/OpenRouterProvider.js +452 -0
- package/dist/integration/providers/OpenRouterProvider.js.map +1 -0
- package/dist/integration/providers/index.d.ts +67 -0
- package/dist/integration/providers/index.d.ts.map +1 -0
- package/dist/integration/providers/index.js +16 -0
- package/dist/integration/providers/index.js.map +1 -0
- package/dist/integration/slack/index.d.ts +67 -0
- package/dist/integration/slack/index.d.ts.map +1 -0
- package/dist/integration/slack/index.js +6 -0
- package/dist/integration/slack/index.js.map +1 -0
- package/dist/integration/webhooks/index.d.ts +43 -0
- package/dist/integration/webhooks/index.d.ts.map +1 -0
- package/dist/integration/webhooks/index.js +6 -0
- package/dist/integration/webhooks/index.js.map +1 -0
- package/dist/integrations/index.d.ts +38 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +11 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/learning/embeddings/WasmEmbedder.d.ts +61 -0
- package/dist/learning/embeddings/WasmEmbedder.d.ts.map +1 -0
- package/dist/learning/embeddings/WasmEmbedder.js +224 -0
- package/dist/learning/embeddings/WasmEmbedder.js.map +1 -0
- package/dist/learning/embeddings/index.d.ts +35 -0
- package/dist/learning/embeddings/index.d.ts.map +1 -0
- package/dist/learning/embeddings/index.js +6 -0
- package/dist/learning/embeddings/index.js.map +1 -0
- package/dist/learning/index.d.ts +12 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +28 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/memory/MemoryManager.d.ts +155 -0
- package/dist/learning/memory/MemoryManager.d.ts.map +1 -0
- package/dist/learning/memory/MemoryManager.js +332 -0
- package/dist/learning/memory/MemoryManager.js.map +1 -0
- package/dist/learning/patterns/index.d.ts +64 -0
- package/dist/learning/patterns/index.d.ts.map +1 -0
- package/dist/learning/patterns/index.js +6 -0
- package/dist/learning/patterns/index.js.map +1 -0
- package/dist/learning/search/BM25Index.d.ts +88 -0
- package/dist/learning/search/BM25Index.d.ts.map +1 -0
- package/dist/learning/search/BM25Index.js +251 -0
- package/dist/learning/search/BM25Index.js.map +1 -0
- package/dist/learning/search/HybridSearch.d.ts +85 -0
- package/dist/learning/search/HybridSearch.d.ts.map +1 -0
- package/dist/learning/search/HybridSearch.js +243 -0
- package/dist/learning/search/HybridSearch.js.map +1 -0
- package/dist/learning/search/index.d.ts +10 -0
- package/dist/learning/search/index.d.ts.map +1 -0
- package/dist/learning/search/index.js +16 -0
- package/dist/learning/search/index.js.map +1 -0
- package/dist/learning/training/index.d.ts +95 -0
- package/dist/learning/training/index.d.ts.map +1 -0
- package/dist/learning/training/index.js +6 -0
- package/dist/learning/training/index.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +316 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +488 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +17 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/security/AIDefenceGuard.d.ts +212 -0
- package/dist/security/AIDefenceGuard.d.ts.map +1 -0
- package/dist/security/AIDefenceGuard.js +578 -0
- package/dist/security/AIDefenceGuard.js.map +1 -0
- package/dist/security/index.d.ts +8 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +18 -0
- package/dist/security/index.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +410 -0
- package/dist/server.js.map +1 -0
- package/dist/skills/index.d.ts +15 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +13 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/swarm/ByzantineConsensus.d.ts +110 -0
- package/dist/swarm/ByzantineConsensus.d.ts.map +1 -0
- package/dist/swarm/ByzantineConsensus.js +272 -0
- package/dist/swarm/ByzantineConsensus.js.map +1 -0
- package/dist/swarm/SwarmCoordinator.d.ts +141 -0
- package/dist/swarm/SwarmCoordinator.d.ts.map +1 -0
- package/dist/swarm/SwarmCoordinator.js +386 -0
- package/dist/swarm/SwarmCoordinator.js.map +1 -0
- package/dist/swarm/index.d.ts +8 -0
- package/dist/swarm/index.d.ts.map +1 -0
- package/dist/swarm/index.js +16 -0
- package/dist/swarm/index.js.map +1 -0
- package/dist/types.d.ts +120 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/logger.d.ts +23 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +80 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +139 -0
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor Command - System diagnostics and health checks
|
|
3
|
+
*
|
|
4
|
+
* Checks:
|
|
5
|
+
* - Node.js version
|
|
6
|
+
* - Required dependencies
|
|
7
|
+
* - Environment variables
|
|
8
|
+
* - Database connectivity
|
|
9
|
+
* - LLM provider connectivity
|
|
10
|
+
* - Memory system
|
|
11
|
+
* - Security configuration
|
|
12
|
+
* - Plugin system
|
|
13
|
+
*/
|
|
14
|
+
import { Command } from 'commander';
|
|
15
|
+
import chalk from 'chalk';
|
|
16
|
+
import ora from 'ora';
|
|
17
|
+
export function createDoctorCommand() {
|
|
18
|
+
const doctor = new Command('doctor');
|
|
19
|
+
doctor
|
|
20
|
+
.description('Run diagnostics and health checks')
|
|
21
|
+
.option('--fix', 'Attempt to fix issues automatically')
|
|
22
|
+
.option('--json', 'Output results as JSON')
|
|
23
|
+
.option('-v, --verbose', 'Show detailed information')
|
|
24
|
+
.action(async (options) => {
|
|
25
|
+
const results = [];
|
|
26
|
+
const spinner = ora('Running diagnostics...').start();
|
|
27
|
+
try {
|
|
28
|
+
// Check Node.js version
|
|
29
|
+
results.push(await checkNodeVersion());
|
|
30
|
+
// Check environment variables
|
|
31
|
+
results.push(...await checkEnvironment());
|
|
32
|
+
// Check dependencies
|
|
33
|
+
results.push(...await checkDependencies());
|
|
34
|
+
// Check database connectivity
|
|
35
|
+
results.push(await checkDatabase());
|
|
36
|
+
// Check LLM providers
|
|
37
|
+
results.push(...await checkLLMProviders());
|
|
38
|
+
// Check memory system
|
|
39
|
+
results.push(await checkMemorySystem());
|
|
40
|
+
// Check security configuration
|
|
41
|
+
results.push(await checkSecurity());
|
|
42
|
+
// Check plugin system
|
|
43
|
+
results.push(await checkPlugins());
|
|
44
|
+
// Check disk space
|
|
45
|
+
results.push(await checkDiskSpace());
|
|
46
|
+
spinner.stop();
|
|
47
|
+
if (options.json) {
|
|
48
|
+
console.log(JSON.stringify(results, null, 2));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Display results
|
|
52
|
+
console.log(chalk.bold('\n🏥 RuvBot Doctor Results\n'));
|
|
53
|
+
console.log('─'.repeat(60));
|
|
54
|
+
let passCount = 0;
|
|
55
|
+
let warnCount = 0;
|
|
56
|
+
let failCount = 0;
|
|
57
|
+
for (const result of results) {
|
|
58
|
+
const icon = result.status === 'pass' ? '✓' : result.status === 'warn' ? '⚠' : '✗';
|
|
59
|
+
const color = result.status === 'pass' ? chalk.green : result.status === 'warn' ? chalk.yellow : chalk.red;
|
|
60
|
+
console.log(color(`${icon} ${result.name}`));
|
|
61
|
+
if (options.verbose || result.status !== 'pass') {
|
|
62
|
+
console.log(chalk.gray(` ${result.message}`));
|
|
63
|
+
}
|
|
64
|
+
if (result.fix && result.status !== 'pass') {
|
|
65
|
+
console.log(chalk.cyan(` Fix: ${result.fix}`));
|
|
66
|
+
}
|
|
67
|
+
if (result.status === 'pass')
|
|
68
|
+
passCount++;
|
|
69
|
+
else if (result.status === 'warn')
|
|
70
|
+
warnCount++;
|
|
71
|
+
else
|
|
72
|
+
failCount++;
|
|
73
|
+
}
|
|
74
|
+
console.log('─'.repeat(60));
|
|
75
|
+
console.log(`\nSummary: ${chalk.green(passCount + ' passed')}, ` +
|
|
76
|
+
`${chalk.yellow(warnCount + ' warnings')}, ` +
|
|
77
|
+
`${chalk.red(failCount + ' failed')}`);
|
|
78
|
+
if (failCount > 0) {
|
|
79
|
+
console.log(chalk.red('\n⚠ Some checks failed. Run with --fix to attempt automatic fixes.'));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
else if (warnCount > 0) {
|
|
83
|
+
console.log(chalk.yellow('\n⚠ Some warnings detected. Review and address if needed.'));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log(chalk.green('\n✓ All checks passed! RuvBot is healthy.'));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
spinner.fail(chalk.red('Diagnostics failed'));
|
|
91
|
+
console.error(error);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return doctor;
|
|
96
|
+
}
|
|
97
|
+
async function checkNodeVersion() {
|
|
98
|
+
const version = process.version;
|
|
99
|
+
const major = parseInt(version.slice(1).split('.')[0], 10);
|
|
100
|
+
if (major >= 20) {
|
|
101
|
+
return { name: 'Node.js Version', status: 'pass', message: `${version} (recommended)` };
|
|
102
|
+
}
|
|
103
|
+
else if (major >= 18) {
|
|
104
|
+
return { name: 'Node.js Version', status: 'warn', message: `${version} (18+ supported, 20+ recommended)` };
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
return {
|
|
108
|
+
name: 'Node.js Version',
|
|
109
|
+
status: 'fail',
|
|
110
|
+
message: `${version} (requires 18+)`,
|
|
111
|
+
fix: 'Install Node.js 20 LTS from https://nodejs.org',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async function checkEnvironment() {
|
|
116
|
+
const results = [];
|
|
117
|
+
// Check for .env file
|
|
118
|
+
const fs = await import('fs/promises');
|
|
119
|
+
try {
|
|
120
|
+
await fs.access('.env');
|
|
121
|
+
results.push({ name: 'Environment File', status: 'pass', message: '.env file found' });
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
results.push({
|
|
125
|
+
name: 'Environment File',
|
|
126
|
+
status: 'warn',
|
|
127
|
+
message: 'No .env file found',
|
|
128
|
+
fix: 'Copy .env.example to .env and configure',
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
// Check critical environment variables
|
|
132
|
+
const criticalVars = ['ANTHROPIC_API_KEY', 'OPENROUTER_API_KEY', 'OPENAI_API_KEY'];
|
|
133
|
+
const hasApiKey = criticalVars.some((v) => process.env[v]);
|
|
134
|
+
if (hasApiKey) {
|
|
135
|
+
results.push({ name: 'LLM API Key', status: 'pass', message: 'At least one LLM API key configured' });
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
results.push({
|
|
139
|
+
name: 'LLM API Key',
|
|
140
|
+
status: 'warn',
|
|
141
|
+
message: 'No LLM API key found',
|
|
142
|
+
fix: 'Set ANTHROPIC_API_KEY or OPENROUTER_API_KEY in .env',
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return results;
|
|
146
|
+
}
|
|
147
|
+
async function checkDependencies() {
|
|
148
|
+
const results = [];
|
|
149
|
+
// Check if package.json exists
|
|
150
|
+
const fs = await import('fs/promises');
|
|
151
|
+
try {
|
|
152
|
+
const pkg = JSON.parse(await fs.readFile('package.json', 'utf-8'));
|
|
153
|
+
const hasRuvbot = pkg.dependencies?.['@ruvector/ruvbot'] || pkg.devDependencies?.['@ruvector/ruvbot'];
|
|
154
|
+
if (hasRuvbot) {
|
|
155
|
+
results.push({ name: 'RuvBot Package', status: 'pass', message: '@ruvector/ruvbot installed' });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// Not in a project directory, skip this check
|
|
160
|
+
}
|
|
161
|
+
// Check for optional dependencies
|
|
162
|
+
const optionalDeps = [
|
|
163
|
+
{ name: '@slack/bolt', desc: 'Slack integration' },
|
|
164
|
+
{ name: 'pg', desc: 'PostgreSQL support' },
|
|
165
|
+
{ name: 'ioredis', desc: 'Redis caching' },
|
|
166
|
+
];
|
|
167
|
+
for (const dep of optionalDeps) {
|
|
168
|
+
try {
|
|
169
|
+
await import(dep.name);
|
|
170
|
+
results.push({ name: dep.desc, status: 'pass', message: `${dep.name} available` });
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
results.push({
|
|
174
|
+
name: dep.desc,
|
|
175
|
+
status: 'warn',
|
|
176
|
+
message: `${dep.name} not installed (optional)`,
|
|
177
|
+
fix: `npm install ${dep.name}`,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return results;
|
|
182
|
+
}
|
|
183
|
+
async function checkDatabase() {
|
|
184
|
+
const storageType = process.env.RUVBOT_STORAGE_TYPE || 'sqlite';
|
|
185
|
+
if (storageType === 'sqlite') {
|
|
186
|
+
const fs = await import('fs/promises');
|
|
187
|
+
const dbPath = process.env.RUVBOT_SQLITE_PATH || './data/ruvbot.db';
|
|
188
|
+
try {
|
|
189
|
+
await fs.access(dbPath);
|
|
190
|
+
return { name: 'Database (SQLite)', status: 'pass', message: `Database found at ${dbPath}` };
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return {
|
|
194
|
+
name: 'Database (SQLite)',
|
|
195
|
+
status: 'warn',
|
|
196
|
+
message: `Database not found at ${dbPath}`,
|
|
197
|
+
fix: 'Run `ruvbot init` to create database',
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else if (storageType === 'postgres') {
|
|
202
|
+
const dbUrl = process.env.DATABASE_URL;
|
|
203
|
+
if (!dbUrl) {
|
|
204
|
+
return {
|
|
205
|
+
name: 'Database (PostgreSQL)',
|
|
206
|
+
status: 'fail',
|
|
207
|
+
message: 'DATABASE_URL not configured',
|
|
208
|
+
fix: 'Set DATABASE_URL in .env',
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
const { default: pg } = await import('pg');
|
|
213
|
+
const client = new pg.Client(dbUrl);
|
|
214
|
+
await client.connect();
|
|
215
|
+
await client.query('SELECT 1');
|
|
216
|
+
await client.end();
|
|
217
|
+
return { name: 'Database (PostgreSQL)', status: 'pass', message: 'Connection successful' };
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
return {
|
|
221
|
+
name: 'Database (PostgreSQL)',
|
|
222
|
+
status: 'fail',
|
|
223
|
+
message: `Connection failed: ${error.message}`,
|
|
224
|
+
fix: 'Check DATABASE_URL and ensure PostgreSQL is running',
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return { name: 'Database', status: 'pass', message: `Using ${storageType} storage` };
|
|
229
|
+
}
|
|
230
|
+
async function checkLLMProviders() {
|
|
231
|
+
const results = [];
|
|
232
|
+
// Check Anthropic
|
|
233
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
234
|
+
try {
|
|
235
|
+
const response = await fetch('https://api.anthropic.com/v1/messages', {
|
|
236
|
+
method: 'POST',
|
|
237
|
+
headers: {
|
|
238
|
+
'x-api-key': process.env.ANTHROPIC_API_KEY,
|
|
239
|
+
'anthropic-version': '2023-06-01',
|
|
240
|
+
'content-type': 'application/json',
|
|
241
|
+
},
|
|
242
|
+
body: JSON.stringify({
|
|
243
|
+
model: 'claude-3-haiku-20240307',
|
|
244
|
+
max_tokens: 1,
|
|
245
|
+
messages: [{ role: 'user', content: 'hi' }],
|
|
246
|
+
}),
|
|
247
|
+
});
|
|
248
|
+
if (response.ok || response.status === 400) {
|
|
249
|
+
// 400 means API key is valid but request is bad (expected with minimal request)
|
|
250
|
+
results.push({ name: 'Anthropic API', status: 'pass', message: 'API key valid' });
|
|
251
|
+
}
|
|
252
|
+
else if (response.status === 401) {
|
|
253
|
+
results.push({
|
|
254
|
+
name: 'Anthropic API',
|
|
255
|
+
status: 'fail',
|
|
256
|
+
message: 'Invalid API key',
|
|
257
|
+
fix: 'Check ANTHROPIC_API_KEY in .env',
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
results.push({ name: 'Anthropic API', status: 'warn', message: `Status: ${response.status}` });
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
results.push({
|
|
266
|
+
name: 'Anthropic API',
|
|
267
|
+
status: 'fail',
|
|
268
|
+
message: `Connection failed: ${error.message}`,
|
|
269
|
+
fix: 'Check network connectivity',
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Check OpenRouter
|
|
274
|
+
if (process.env.OPENROUTER_API_KEY) {
|
|
275
|
+
try {
|
|
276
|
+
const response = await fetch('https://openrouter.ai/api/v1/models', {
|
|
277
|
+
headers: { Authorization: `Bearer ${process.env.OPENROUTER_API_KEY}` },
|
|
278
|
+
});
|
|
279
|
+
if (response.ok) {
|
|
280
|
+
results.push({ name: 'OpenRouter API', status: 'pass', message: 'API key valid' });
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
results.push({
|
|
284
|
+
name: 'OpenRouter API',
|
|
285
|
+
status: 'fail',
|
|
286
|
+
message: 'Invalid API key',
|
|
287
|
+
fix: 'Check OPENROUTER_API_KEY in .env',
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
results.push({
|
|
293
|
+
name: 'OpenRouter API',
|
|
294
|
+
status: 'fail',
|
|
295
|
+
message: `Connection failed: ${error.message}`,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (results.length === 0) {
|
|
300
|
+
results.push({
|
|
301
|
+
name: 'LLM Providers',
|
|
302
|
+
status: 'warn',
|
|
303
|
+
message: 'No LLM providers configured',
|
|
304
|
+
fix: 'Set ANTHROPIC_API_KEY or OPENROUTER_API_KEY',
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
return results;
|
|
308
|
+
}
|
|
309
|
+
async function checkMemorySystem() {
|
|
310
|
+
const memoryPath = process.env.RUVBOT_MEMORY_PATH || './data/memory';
|
|
311
|
+
const fs = await import('fs/promises');
|
|
312
|
+
try {
|
|
313
|
+
await fs.access(memoryPath);
|
|
314
|
+
const stats = await fs.stat(memoryPath);
|
|
315
|
+
if (stats.isDirectory()) {
|
|
316
|
+
return { name: 'Memory System', status: 'pass', message: `Memory directory exists at ${memoryPath}` };
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
return {
|
|
321
|
+
name: 'Memory System',
|
|
322
|
+
status: 'warn',
|
|
323
|
+
message: `Memory directory not found at ${memoryPath}`,
|
|
324
|
+
fix: 'Run `ruvbot init` to create directories',
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
return { name: 'Memory System', status: 'pass', message: 'Ready' };
|
|
328
|
+
}
|
|
329
|
+
async function checkSecurity() {
|
|
330
|
+
const aidefenceEnabled = process.env.RUVBOT_AIDEFENCE_ENABLED !== 'false';
|
|
331
|
+
const piiEnabled = process.env.RUVBOT_PII_DETECTION !== 'false';
|
|
332
|
+
const auditEnabled = process.env.RUVBOT_AUDIT_LOG !== 'false';
|
|
333
|
+
const features = [];
|
|
334
|
+
if (aidefenceEnabled)
|
|
335
|
+
features.push('AI Defense');
|
|
336
|
+
if (piiEnabled)
|
|
337
|
+
features.push('PII Detection');
|
|
338
|
+
if (auditEnabled)
|
|
339
|
+
features.push('Audit Logging');
|
|
340
|
+
if (features.length === 0) {
|
|
341
|
+
return {
|
|
342
|
+
name: 'Security Configuration',
|
|
343
|
+
status: 'warn',
|
|
344
|
+
message: 'All security features disabled',
|
|
345
|
+
fix: 'Enable RUVBOT_AIDEFENCE_ENABLED=true in .env',
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
return {
|
|
349
|
+
name: 'Security Configuration',
|
|
350
|
+
status: 'pass',
|
|
351
|
+
message: `Enabled: ${features.join(', ')}`,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
async function checkPlugins() {
|
|
355
|
+
const pluginsEnabled = process.env.RUVBOT_PLUGINS_ENABLED !== 'false';
|
|
356
|
+
const pluginsDir = process.env.RUVBOT_PLUGINS_DIR || './plugins';
|
|
357
|
+
if (!pluginsEnabled) {
|
|
358
|
+
return { name: 'Plugin System', status: 'pass', message: 'Disabled' };
|
|
359
|
+
}
|
|
360
|
+
const fs = await import('fs/promises');
|
|
361
|
+
try {
|
|
362
|
+
const files = await fs.readdir(pluginsDir);
|
|
363
|
+
const plugins = files.filter((f) => f.endsWith('.js') || f.endsWith('.ts'));
|
|
364
|
+
return {
|
|
365
|
+
name: 'Plugin System',
|
|
366
|
+
status: 'pass',
|
|
367
|
+
message: `${plugins.length} plugin(s) found in ${pluginsDir}`,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
catch {
|
|
371
|
+
return {
|
|
372
|
+
name: 'Plugin System',
|
|
373
|
+
status: 'warn',
|
|
374
|
+
message: `Plugin directory not found at ${pluginsDir}`,
|
|
375
|
+
fix: `mkdir -p ${pluginsDir}`,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
async function checkDiskSpace() {
|
|
380
|
+
try {
|
|
381
|
+
const os = await import('os');
|
|
382
|
+
const { execSync } = await import('child_process');
|
|
383
|
+
// Get disk space (works on Unix-like systems)
|
|
384
|
+
const df = execSync('df -h . 2>/dev/null || echo "N/A"').toString().trim();
|
|
385
|
+
const lines = df.split('\n');
|
|
386
|
+
if (lines.length > 1) {
|
|
387
|
+
const parts = lines[1].split(/\s+/);
|
|
388
|
+
const available = parts[3];
|
|
389
|
+
const usePercent = parts[4];
|
|
390
|
+
const useNum = parseInt(usePercent, 10);
|
|
391
|
+
if (useNum > 90) {
|
|
392
|
+
return {
|
|
393
|
+
name: 'Disk Space',
|
|
394
|
+
status: 'fail',
|
|
395
|
+
message: `${usePercent} used, ${available} available`,
|
|
396
|
+
fix: 'Free up disk space',
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
else if (useNum > 80) {
|
|
400
|
+
return {
|
|
401
|
+
name: 'Disk Space',
|
|
402
|
+
status: 'warn',
|
|
403
|
+
message: `${usePercent} used, ${available} available`,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
return {
|
|
407
|
+
name: 'Disk Space',
|
|
408
|
+
status: 'pass',
|
|
409
|
+
message: `${available} available`,
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
catch {
|
|
414
|
+
// Disk check not available
|
|
415
|
+
}
|
|
416
|
+
return { name: 'Disk Space', status: 'pass', message: 'Check not available on this platform' };
|
|
417
|
+
}
|
|
418
|
+
export default createDoctorCommand;
|
|
419
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Commands Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all CLI command modules
|
|
5
|
+
*/
|
|
6
|
+
export { createDoctorCommand } from './doctor.js';
|
|
7
|
+
export { createMemoryCommand } from './memory.js';
|
|
8
|
+
export { createSecurityCommand } from './security.js';
|
|
9
|
+
export { createPluginsCommand } from './plugins.js';
|
|
10
|
+
export { createAgentCommand } from './agent.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Commands Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all CLI command modules
|
|
5
|
+
*/
|
|
6
|
+
export { createDoctorCommand } from './doctor.js';
|
|
7
|
+
export { createMemoryCommand } from './memory.js';
|
|
8
|
+
export { createSecurityCommand } from './security.js';
|
|
9
|
+
export { createPluginsCommand } from './plugins.js';
|
|
10
|
+
export { createAgentCommand } from './agent.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Command - Vector memory management
|
|
3
|
+
*
|
|
4
|
+
* Note: Full memory operations require initialized MemoryManager with
|
|
5
|
+
* vector index and embedder. This CLI provides basic operations and
|
|
6
|
+
* demonstrates the memory system capabilities.
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
export declare function createMemoryCommand(): Command;
|
|
10
|
+
export default createMemoryCommand;
|
|
11
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,mBAAmB,IAAI,OAAO,CA4K7C;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Command - Vector memory management
|
|
3
|
+
*
|
|
4
|
+
* Note: Full memory operations require initialized MemoryManager with
|
|
5
|
+
* vector index and embedder. This CLI provides basic operations and
|
|
6
|
+
* demonstrates the memory system capabilities.
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
export function createMemoryCommand() {
|
|
11
|
+
const memory = new Command('memory');
|
|
12
|
+
memory.description('Memory management commands');
|
|
13
|
+
// Stats command (doesn't require initialization)
|
|
14
|
+
memory
|
|
15
|
+
.command('stats')
|
|
16
|
+
.description('Show memory configuration')
|
|
17
|
+
.option('--json', 'Output as JSON')
|
|
18
|
+
.action(async (options) => {
|
|
19
|
+
try {
|
|
20
|
+
// Get stats from environment/config
|
|
21
|
+
const stats = {
|
|
22
|
+
configured: true,
|
|
23
|
+
dimensions: parseInt(process.env.RUVBOT_EMBEDDING_DIM || '384', 10),
|
|
24
|
+
maxVectors: parseInt(process.env.RUVBOT_MAX_VECTORS || '100000', 10),
|
|
25
|
+
indexType: 'HNSW',
|
|
26
|
+
hnswM: parseInt(process.env.RUVBOT_HNSW_M || '16', 10),
|
|
27
|
+
efConstruction: parseInt(process.env.RUVBOT_HNSW_EF_CONSTRUCTION || '200', 10),
|
|
28
|
+
memoryPath: process.env.RUVBOT_MEMORY_PATH || './data/memory',
|
|
29
|
+
};
|
|
30
|
+
if (options.json) {
|
|
31
|
+
console.log(JSON.stringify(stats, null, 2));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
console.log(chalk.bold('\n📊 Memory Configuration\n'));
|
|
35
|
+
console.log('─'.repeat(40));
|
|
36
|
+
console.log(`Dimensions: ${chalk.cyan(stats.dimensions)}`);
|
|
37
|
+
console.log(`Max Vectors: ${chalk.cyan(stats.maxVectors.toLocaleString())}`);
|
|
38
|
+
console.log(`Index Type: ${chalk.cyan(stats.indexType)}`);
|
|
39
|
+
console.log(`HNSW M: ${chalk.cyan(stats.hnswM)}`);
|
|
40
|
+
console.log(`EF Construction: ${chalk.cyan(stats.efConstruction)}`);
|
|
41
|
+
console.log(`Memory Path: ${chalk.cyan(stats.memoryPath)}`);
|
|
42
|
+
console.log('─'.repeat(40));
|
|
43
|
+
console.log(chalk.gray('\nNote: Start RuvBot server for full memory operations'));
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.error(chalk.red(`Stats failed: ${error.message}`));
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// Store command
|
|
51
|
+
memory
|
|
52
|
+
.command('store')
|
|
53
|
+
.description('Store content in memory (requires running server)')
|
|
54
|
+
.requiredOption('-c, --content <content>', 'Content to store')
|
|
55
|
+
.option('-t, --tags <tags>', 'Comma-separated tags')
|
|
56
|
+
.option('-i, --importance <importance>', 'Importance score (0-1)', '0.5')
|
|
57
|
+
.action(async (options) => {
|
|
58
|
+
console.log(chalk.yellow('\n⚠ Memory store requires a running RuvBot server'));
|
|
59
|
+
console.log(chalk.gray('\nTo store memory programmatically:'));
|
|
60
|
+
console.log(chalk.cyan(`
|
|
61
|
+
import { RuvBot } from '@ruvector/ruvbot';
|
|
62
|
+
|
|
63
|
+
const bot = new RuvBot(config);
|
|
64
|
+
await bot.start();
|
|
65
|
+
|
|
66
|
+
const entry = await bot.memory.store('${options.content}', {
|
|
67
|
+
tags: [${(options.tags || '').split(',').map((t) => `'${t.trim()}'`).join(', ')}],
|
|
68
|
+
importance: ${options.importance}
|
|
69
|
+
});
|
|
70
|
+
`));
|
|
71
|
+
console.log(chalk.gray('Or use the REST API:'));
|
|
72
|
+
console.log(chalk.cyan(`
|
|
73
|
+
curl -X POST http://localhost:3000/api/memory \\
|
|
74
|
+
-H "Content-Type: application/json" \\
|
|
75
|
+
-d '{"content": "${options.content}", "tags": [${(options.tags || '').split(',').map((t) => `"${t.trim()}"`).join(', ')}]}'
|
|
76
|
+
`));
|
|
77
|
+
});
|
|
78
|
+
// Search command
|
|
79
|
+
memory
|
|
80
|
+
.command('search')
|
|
81
|
+
.description('Search memory (requires running server)')
|
|
82
|
+
.requiredOption('-q, --query <query>', 'Search query')
|
|
83
|
+
.option('-l, --limit <limit>', 'Maximum results', '10')
|
|
84
|
+
.option('--threshold <threshold>', 'Similarity threshold (0-1)', '0.5')
|
|
85
|
+
.action(async (options) => {
|
|
86
|
+
console.log(chalk.yellow('\n⚠ Memory search requires a running RuvBot server'));
|
|
87
|
+
console.log(chalk.gray('\nTo search memory programmatically:'));
|
|
88
|
+
console.log(chalk.cyan(`
|
|
89
|
+
const results = await bot.memory.search('${options.query}', {
|
|
90
|
+
topK: ${options.limit},
|
|
91
|
+
threshold: ${options.threshold}
|
|
92
|
+
});
|
|
93
|
+
`));
|
|
94
|
+
console.log(chalk.gray('Or use the REST API:'));
|
|
95
|
+
console.log(chalk.cyan(`
|
|
96
|
+
curl "http://localhost:3000/api/memory/search?q=${encodeURIComponent(options.query)}&limit=${options.limit}"
|
|
97
|
+
`));
|
|
98
|
+
});
|
|
99
|
+
// Export command
|
|
100
|
+
memory
|
|
101
|
+
.command('export')
|
|
102
|
+
.description('Export memory to file (requires running server)')
|
|
103
|
+
.requiredOption('-o, --output <path>', 'Output file path')
|
|
104
|
+
.option('--format <format>', 'Format: json, jsonl', 'json')
|
|
105
|
+
.action(async (options) => {
|
|
106
|
+
console.log(chalk.yellow('\n⚠ Memory export requires a running RuvBot server'));
|
|
107
|
+
console.log(chalk.gray('\nTo export memory:'));
|
|
108
|
+
console.log(chalk.cyan(`
|
|
109
|
+
const data = await bot.memory.export();
|
|
110
|
+
await fs.writeFile('${options.output}', JSON.stringify(data, null, 2));
|
|
111
|
+
`));
|
|
112
|
+
});
|
|
113
|
+
// Import command
|
|
114
|
+
memory
|
|
115
|
+
.command('import')
|
|
116
|
+
.description('Import memory from file (requires running server)')
|
|
117
|
+
.requiredOption('-i, --input <path>', 'Input file path')
|
|
118
|
+
.action(async (options) => {
|
|
119
|
+
console.log(chalk.yellow('\n⚠ Memory import requires a running RuvBot server'));
|
|
120
|
+
console.log(chalk.gray('\nTo import memory:'));
|
|
121
|
+
console.log(chalk.cyan(`
|
|
122
|
+
const data = JSON.parse(await fs.readFile('${options.input}', 'utf-8'));
|
|
123
|
+
const count = await bot.memory.import(data);
|
|
124
|
+
console.log('Imported', count, 'entries');
|
|
125
|
+
`));
|
|
126
|
+
});
|
|
127
|
+
// Clear command
|
|
128
|
+
memory
|
|
129
|
+
.command('clear')
|
|
130
|
+
.description('Clear all memory (DANGEROUS - requires running server)')
|
|
131
|
+
.option('-y, --yes', 'Skip confirmation')
|
|
132
|
+
.action(async (options) => {
|
|
133
|
+
if (!options.yes) {
|
|
134
|
+
console.log(chalk.red('\n⚠ DANGER: This will clear ALL memory entries!'));
|
|
135
|
+
console.log(chalk.yellow('Use --yes flag to confirm'));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
console.log(chalk.yellow('\n⚠ Memory clear requires a running RuvBot server'));
|
|
139
|
+
console.log(chalk.gray('\nTo clear memory:'));
|
|
140
|
+
console.log(chalk.cyan(`
|
|
141
|
+
await bot.memory.clear();
|
|
142
|
+
`));
|
|
143
|
+
});
|
|
144
|
+
// Info command
|
|
145
|
+
memory
|
|
146
|
+
.command('info')
|
|
147
|
+
.description('Show memory system information')
|
|
148
|
+
.action(async () => {
|
|
149
|
+
console.log(chalk.bold('\n🧠 RuvBot Memory System\n'));
|
|
150
|
+
console.log('─'.repeat(50));
|
|
151
|
+
console.log(chalk.cyan('Features:'));
|
|
152
|
+
console.log(' • HNSW vector indexing (150x-12,500x faster search)');
|
|
153
|
+
console.log(' • Semantic similarity search');
|
|
154
|
+
console.log(' • Multi-source memory (conversation, learning, skill, user)');
|
|
155
|
+
console.log(' • Importance-based eviction');
|
|
156
|
+
console.log(' • TTL support for temporary memories');
|
|
157
|
+
console.log(' • Tag-based filtering');
|
|
158
|
+
console.log('');
|
|
159
|
+
console.log(chalk.cyan('Supported Embeddings:'));
|
|
160
|
+
console.log(' • MiniLM-L6-v2 (384 dimensions, default)');
|
|
161
|
+
console.log(' • Custom embedders via WASM');
|
|
162
|
+
console.log('');
|
|
163
|
+
console.log(chalk.cyan('Configuration (via .env):'));
|
|
164
|
+
console.log(' RUVBOT_EMBEDDING_DIM=384');
|
|
165
|
+
console.log(' RUVBOT_MAX_VECTORS=100000');
|
|
166
|
+
console.log(' RUVBOT_HNSW_M=16');
|
|
167
|
+
console.log(' RUVBOT_HNSW_EF_CONSTRUCTION=200');
|
|
168
|
+
console.log(' RUVBOT_MEMORY_PATH=./data/memory');
|
|
169
|
+
console.log('─'.repeat(50));
|
|
170
|
+
});
|
|
171
|
+
return memory;
|
|
172
|
+
}
|
|
173
|
+
export default createMemoryCommand;
|
|
174
|
+
//# sourceMappingURL=memory.js.map
|