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
package/README.md
ADDED
|
@@ -0,0 +1,850 @@
|
|
|
1
|
+
# RuvBot
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@ruvector/ruvbot)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[]()
|
|
8
|
+
|
|
9
|
+
**Enterprise-Grade Self-Learning AI Assistant with Military-Strength Security**
|
|
10
|
+
|
|
11
|
+
**Live Demo**: https://ruvbot-875130704813.us-central1.run.app
|
|
12
|
+
|
|
13
|
+
## Table of Contents
|
|
14
|
+
|
|
15
|
+
- [Why RuvBot?](#why-ruvbot-over-clawdbot)
|
|
16
|
+
- [Comparison](#ruvbot-vs-clawdbot-comparison)
|
|
17
|
+
- [Requirements](#requirements)
|
|
18
|
+
- [Quick Start](#quick-start)
|
|
19
|
+
- [Configuration](#configuration)
|
|
20
|
+
- [API Usage](#api-usage)
|
|
21
|
+
- [Security](#security-architecture-6-layers---why-this-matters)
|
|
22
|
+
- [LLM Providers](#llm-providers---gemini-25-default)
|
|
23
|
+
- [TypeScript](#typescript-support)
|
|
24
|
+
- [Events & Hooks](#events--hooks)
|
|
25
|
+
- [Streaming](#streaming-responses)
|
|
26
|
+
- [Migration](#migration-from-clawdbot)
|
|
27
|
+
- [Troubleshooting](#troubleshooting)
|
|
28
|
+
- [Development](#development)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
RuvBot is a next-generation personal AI assistant powered by RuVector's WASM vector operations. It addresses **critical security gaps found in Clawdbot** while delivering 150x faster performance, self-learning neural architecture, and enterprise-grade multi-tenancy.
|
|
33
|
+
|
|
34
|
+
## Why RuvBot Over Clawdbot?
|
|
35
|
+
|
|
36
|
+
**Clawdbot lacks essential security protections** that are mandatory for production AI deployments:
|
|
37
|
+
|
|
38
|
+
- **No prompt injection defense** - Clawdbot is vulnerable to adversarial prompts
|
|
39
|
+
- **No jailbreak detection** - Users can bypass system instructions
|
|
40
|
+
- **No PII protection** - Sensitive data leakage risk
|
|
41
|
+
- **No input sanitization** - Control character and unicode attacks possible
|
|
42
|
+
- **Single-tenant only** - No enterprise data isolation
|
|
43
|
+
|
|
44
|
+
**RuvBot solves all of these** with a 6-layer security architecture and AIDefence integration.
|
|
45
|
+
|
|
46
|
+
## RuvBot vs Clawdbot Comparison
|
|
47
|
+
|
|
48
|
+
| Feature | Clawdbot | RuvBot | Improvement |
|
|
49
|
+
|---------|----------|--------|-------------|
|
|
50
|
+
| **Security** | Basic validation | 6-layer + AIDefence | **Critical upgrade** |
|
|
51
|
+
| **Prompt Injection** | Vulnerable | Protected (<5ms) | **Essential protection** |
|
|
52
|
+
| **PII Protection** | None | Full detection + masking | **Compliance-ready** |
|
|
53
|
+
| **Vector Search** | Linear search | HNSW-indexed | **150x-12,500x faster** |
|
|
54
|
+
| **Embeddings** | External API | Local WASM | **75x faster**, no network latency |
|
|
55
|
+
| **Learning** | Static | SONA adaptive | Self-improving with EWC++ |
|
|
56
|
+
| **Multi-tenancy** | Single-user | Full RLS | Enterprise isolation |
|
|
57
|
+
| **LLM Models** | Single provider | 12+ models (Gemini 2.5, Claude, GPT) | **Full flexibility** |
|
|
58
|
+
| **Cold Start** | ~3s | ~500ms | **6x faster** |
|
|
59
|
+
|
|
60
|
+
## Performance Benchmarks
|
|
61
|
+
|
|
62
|
+
| Operation | Clawdbot | RuvBot | Speedup |
|
|
63
|
+
|-----------|----------|--------|---------|
|
|
64
|
+
| Embedding generation | 200ms (API) | 2.7ms (WASM) | **74x** |
|
|
65
|
+
| Vector search (10K) | 50ms | <1ms | **50x** |
|
|
66
|
+
| Vector search (100K) | 500ms+ | <5ms | **100x** |
|
|
67
|
+
| Session restore | 100ms | 10ms | **10x** |
|
|
68
|
+
| Skill invocation | 50ms | 5ms | **10x** |
|
|
69
|
+
|
|
70
|
+
## Features
|
|
71
|
+
|
|
72
|
+
- **Self-Learning**: SONA adaptive learning with trajectory tracking and pattern extraction
|
|
73
|
+
- **WASM Embeddings**: High-performance vector operations using RuVector WASM bindings
|
|
74
|
+
- **Vector Memory**: HNSW-indexed semantic memory with 150x-12,500x faster search
|
|
75
|
+
- **Multi-Platform**: Slack, Discord, webhook, REST API, and CLI interfaces
|
|
76
|
+
- **Extensible Skills**: Plugin architecture for custom capabilities with hot-reload
|
|
77
|
+
- **Multi-Tenancy**: Enterprise-ready with PostgreSQL row-level security
|
|
78
|
+
- **Background Workers**: 12 specialized worker types via agentic-flow
|
|
79
|
+
- **LLM Routing**: Intelligent 3-tier routing for optimal cost/performance
|
|
80
|
+
|
|
81
|
+
## Requirements
|
|
82
|
+
|
|
83
|
+
- **Node.js**: 18.0.0 or higher
|
|
84
|
+
- **npm**: 9.0.0 or higher
|
|
85
|
+
- **API Key**: OpenRouter (recommended) or Anthropic
|
|
86
|
+
|
|
87
|
+
## Quick Start
|
|
88
|
+
|
|
89
|
+
### Install via curl
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
curl -fsSL https://get.ruvector.dev/ruvbot | bash
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Or with custom settings:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
RUVBOT_VERSION=0.1.0 \
|
|
99
|
+
RUVBOT_INSTALL_DIR=/opt/ruvbot \
|
|
100
|
+
curl -fsSL https://get.ruvector.dev/ruvbot | bash
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Install via npm/npx
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Run directly
|
|
107
|
+
npx @ruvector/ruvbot start
|
|
108
|
+
|
|
109
|
+
# Or install globally
|
|
110
|
+
npm install -g @ruvector/ruvbot
|
|
111
|
+
ruvbot start
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Configuration
|
|
115
|
+
|
|
116
|
+
### Environment Variables
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# LLM Provider (required - choose one)
|
|
120
|
+
# Option 1: OpenRouter (RECOMMENDED - access to Gemini 2.5, Claude, GPT, etc.)
|
|
121
|
+
export OPENROUTER_API_KEY=sk-or-xxx
|
|
122
|
+
|
|
123
|
+
# Option 2: Anthropic Direct
|
|
124
|
+
export ANTHROPIC_API_KEY=sk-ant-xxx
|
|
125
|
+
|
|
126
|
+
# Slack Integration (optional)
|
|
127
|
+
export SLACK_BOT_TOKEN=xoxb-xxx
|
|
128
|
+
export SLACK_SIGNING_SECRET=xxx
|
|
129
|
+
export SLACK_APP_TOKEN=xapp-xxx
|
|
130
|
+
|
|
131
|
+
# Discord Integration (optional)
|
|
132
|
+
export DISCORD_TOKEN=xxx
|
|
133
|
+
export DISCORD_CLIENT_ID=xxx
|
|
134
|
+
|
|
135
|
+
# Server Configuration
|
|
136
|
+
export RUVBOT_PORT=3000
|
|
137
|
+
export RUVBOT_LOG_LEVEL=info
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Configuration File
|
|
141
|
+
|
|
142
|
+
Create `ruvbot.config.json`:
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"name": "my-ruvbot",
|
|
147
|
+
"api": {
|
|
148
|
+
"enabled": true,
|
|
149
|
+
"port": 3000,
|
|
150
|
+
"host": "0.0.0.0"
|
|
151
|
+
},
|
|
152
|
+
"storage": {
|
|
153
|
+
"type": "sqlite",
|
|
154
|
+
"path": "./data/ruvbot.db"
|
|
155
|
+
},
|
|
156
|
+
"memory": {
|
|
157
|
+
"dimensions": 384,
|
|
158
|
+
"maxVectors": 100000,
|
|
159
|
+
"indexType": "hnsw"
|
|
160
|
+
},
|
|
161
|
+
"skills": {
|
|
162
|
+
"enabled": ["search", "summarize", "code", "memory"]
|
|
163
|
+
},
|
|
164
|
+
"slack": {
|
|
165
|
+
"enabled": true,
|
|
166
|
+
"socketMode": true
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## CLI Commands
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Initialize in current directory
|
|
175
|
+
ruvbot init
|
|
176
|
+
|
|
177
|
+
# Start the bot server
|
|
178
|
+
ruvbot start [--port 3000] [--debug]
|
|
179
|
+
|
|
180
|
+
# Check status
|
|
181
|
+
ruvbot status
|
|
182
|
+
|
|
183
|
+
# Manage skills
|
|
184
|
+
ruvbot skills list
|
|
185
|
+
ruvbot skills add <name>
|
|
186
|
+
|
|
187
|
+
# Run diagnostics
|
|
188
|
+
ruvbot doctor
|
|
189
|
+
|
|
190
|
+
# Show configuration
|
|
191
|
+
ruvbot config --show
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## API Usage
|
|
195
|
+
|
|
196
|
+
### REST API Endpoints
|
|
197
|
+
|
|
198
|
+
| Endpoint | Method | Description |
|
|
199
|
+
|----------|--------|-------------|
|
|
200
|
+
| `/health` | GET | Health check (Cloud Run ready) |
|
|
201
|
+
| `/ready` | GET | Readiness check |
|
|
202
|
+
| `/api/status` | GET | Bot status and metrics |
|
|
203
|
+
| `/api/models` | GET | List available LLM models |
|
|
204
|
+
| `/api/agents` | GET/POST | Agent management |
|
|
205
|
+
| `/api/sessions` | GET/POST | Session management |
|
|
206
|
+
| `/api/sessions/:id/chat` | POST | Send message with AIDefence |
|
|
207
|
+
|
|
208
|
+
### Quick Start
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# Check health
|
|
212
|
+
curl https://your-ruvbot.run.app/health
|
|
213
|
+
|
|
214
|
+
# List available models
|
|
215
|
+
curl https://your-ruvbot.run.app/api/models
|
|
216
|
+
|
|
217
|
+
# Create a session
|
|
218
|
+
curl -X POST https://your-ruvbot.run.app/api/sessions \
|
|
219
|
+
-H "Content-Type: application/json" \
|
|
220
|
+
-d '{"agentId": "default-agent"}'
|
|
221
|
+
|
|
222
|
+
# Chat (with automatic AIDefence protection)
|
|
223
|
+
curl -X POST https://your-ruvbot.run.app/api/sessions/{id}/chat \
|
|
224
|
+
-H "Content-Type: application/json" \
|
|
225
|
+
-d '{"message": "Hello, RuvBot!"}'
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Programmatic Usage
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
import { RuvBot, createRuvBot } from '@ruvector/ruvbot';
|
|
232
|
+
|
|
233
|
+
// Create bot instance
|
|
234
|
+
const bot = createRuvBot({
|
|
235
|
+
config: {
|
|
236
|
+
llm: {
|
|
237
|
+
provider: 'anthropic',
|
|
238
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
239
|
+
},
|
|
240
|
+
memory: {
|
|
241
|
+
dimensions: 384,
|
|
242
|
+
maxVectors: 100000,
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
// Start the bot
|
|
248
|
+
await bot.start();
|
|
249
|
+
|
|
250
|
+
// Spawn an agent
|
|
251
|
+
const agent = await bot.spawnAgent({
|
|
252
|
+
id: 'assistant',
|
|
253
|
+
name: 'My Assistant',
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// Create a session
|
|
257
|
+
const session = await bot.createSession(agent.id, {
|
|
258
|
+
userId: 'user-123',
|
|
259
|
+
platform: 'api',
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
// Chat
|
|
263
|
+
const response = await bot.chat(session.id, 'What can you help me with?');
|
|
264
|
+
console.log(response.content);
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## Architecture
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
271
|
+
│ RuvBot │
|
|
272
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
273
|
+
│ REST API │ GraphQL │ Slack Adapter │ Discord │ Webhooks │
|
|
274
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
275
|
+
│ Core Application Layer │
|
|
276
|
+
│ AgentManager │ SessionStore │ SkillRegistry │ MemoryManager │
|
|
277
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
278
|
+
│ Learning Layer │
|
|
279
|
+
│ SONA Trainer │ Pattern Extractor │ Trajectory Store │ EWC++ │
|
|
280
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
281
|
+
│ Infrastructure Layer │
|
|
282
|
+
│ RuVector WASM │ PostgreSQL │ RuvLLM │ agentic-flow Workers │
|
|
283
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## Intelligent LLM Routing (3-Tier)
|
|
287
|
+
|
|
288
|
+
| Tier | Handler | Latency | Cost | Use Cases |
|
|
289
|
+
|------|---------|---------|------|-----------|
|
|
290
|
+
| **1** | Agent Booster | <1ms | $0 | Simple transforms, formatting |
|
|
291
|
+
| **2** | Haiku | ~500ms | $0.0002 | Simple tasks, bug fixes |
|
|
292
|
+
| **3** | Sonnet/Opus | 2-5s | $0.003-$0.015 | Complex reasoning, architecture |
|
|
293
|
+
|
|
294
|
+
Benefits: **75% cost reduction**, **352x faster** for Tier 1 tasks.
|
|
295
|
+
|
|
296
|
+
## Security Architecture (6 Layers) - Why This Matters
|
|
297
|
+
|
|
298
|
+
**Clawdbot's security model is fundamentally insufficient for production AI:**
|
|
299
|
+
|
|
300
|
+
| Vulnerability | Clawdbot | RuvBot |
|
|
301
|
+
|--------------|----------|--------|
|
|
302
|
+
| Prompt Injection | **VULNERABLE** | Protected (<5ms) |
|
|
303
|
+
| Jailbreak Attacks | **VULNERABLE** | Detected + blocked |
|
|
304
|
+
| PII Data Leakage | **UNPROTECTED** | Auto-masked |
|
|
305
|
+
| Control Characters | **UNFILTERED** | Sanitized |
|
|
306
|
+
| Homoglyph Attacks | **VULNERABLE** | Normalized |
|
|
307
|
+
| Multi-tenant Isolation | **NONE** | PostgreSQL RLS |
|
|
308
|
+
|
|
309
|
+
**RuvBot's Defense-in-Depth Architecture:**
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
313
|
+
│ Layer 1: Transport (TLS 1.3, HSTS, cert pinning) │
|
|
314
|
+
│ Layer 2: Authentication (JWT RS256, OAuth 2.0, rate limiting) │
|
|
315
|
+
│ Layer 3: Authorization (RBAC, claims, tenant isolation) │
|
|
316
|
+
│ Layer 4: Data Protection (AES-256-GCM, key rotation) │
|
|
317
|
+
│ Layer 5: AIDefence (prompt injection, jailbreak, PII) │
|
|
318
|
+
│ Layer 6: WASM Sandbox (memory isolation, resource limits) │
|
|
319
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
Compliance Ready: **GDPR**, **SOC 2**, **HIPAA** (configurable).
|
|
323
|
+
|
|
324
|
+
## AI Defense (aidefence Integration) - Critical for Production
|
|
325
|
+
|
|
326
|
+
**Every production AI system needs adversarial defense.** Clawdbot has none. RuvBot integrates [aidefence](https://www.npmjs.com/package/aidefence) for military-grade protection.
|
|
327
|
+
|
|
328
|
+
### Threat Detection (<10ms latency)
|
|
329
|
+
|
|
330
|
+
- **Prompt Injection Detection** - 50+ injection pattern signatures
|
|
331
|
+
- **Jailbreak Prevention** - DAN, bypass, unlimited mode, roleplay attacks
|
|
332
|
+
- **PII Protection** - Email, phone, SSN, credit cards, API keys, IP addresses
|
|
333
|
+
- **Unicode Normalization** - Homoglyph and encoding attack prevention
|
|
334
|
+
- **Behavioral Analysis** - User baseline deviation detection
|
|
335
|
+
- **Response Validation** - Prevents LLM from leaking injected content
|
|
336
|
+
- **Audit Logging** - Full threat tracking for compliance
|
|
337
|
+
|
|
338
|
+
### Usage
|
|
339
|
+
|
|
340
|
+
```typescript
|
|
341
|
+
import { createAIDefenceGuard, createAIDefenceMiddleware } from '@ruvector/ruvbot';
|
|
342
|
+
|
|
343
|
+
// Create guard
|
|
344
|
+
const guard = createAIDefenceGuard({
|
|
345
|
+
detectPromptInjection: true,
|
|
346
|
+
detectJailbreak: true,
|
|
347
|
+
detectPII: true,
|
|
348
|
+
blockThreshold: 'medium',
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
// Analyze input
|
|
352
|
+
const result = await guard.analyze(userInput);
|
|
353
|
+
if (!result.safe) {
|
|
354
|
+
console.log('Threats:', result.threats);
|
|
355
|
+
const safeInput = result.sanitizedInput;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// Or use middleware
|
|
359
|
+
const middleware = createAIDefenceMiddleware();
|
|
360
|
+
const { allowed, sanitizedInput } = await middleware.validateInput(input);
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### Threat Detection
|
|
364
|
+
|
|
365
|
+
| Threat | Severity | Latency |
|
|
366
|
+
|--------|----------|---------|
|
|
367
|
+
| Prompt Injection | High | <5ms |
|
|
368
|
+
| Jailbreak | Critical | <5ms |
|
|
369
|
+
| PII Exposure | Medium-Critical | <3ms |
|
|
370
|
+
| Control Characters | Medium | <1ms |
|
|
371
|
+
|
|
372
|
+
See [ADR-014: AIDefence Integration](docs/adr/ADR-014-aidefence-integration.md) for details.
|
|
373
|
+
|
|
374
|
+
## Plugin System
|
|
375
|
+
|
|
376
|
+
RuvBot includes an extensible plugin system inspired by claude-flow's IPFS-based registry.
|
|
377
|
+
|
|
378
|
+
### Features
|
|
379
|
+
|
|
380
|
+
- **Plugin Discovery**: Auto-load plugins from `./plugins` directory
|
|
381
|
+
- **Lifecycle Management**: Install, enable, disable, unload plugins
|
|
382
|
+
- **Hot-Reload**: Dynamic plugin loading without restart
|
|
383
|
+
- **Sandboxed Execution**: Permission-based access control
|
|
384
|
+
- **IPFS Registry**: Optional decentralized plugin distribution
|
|
385
|
+
|
|
386
|
+
### Usage
|
|
387
|
+
|
|
388
|
+
```typescript
|
|
389
|
+
import { createPluginManager } from '@ruvector/ruvbot';
|
|
390
|
+
|
|
391
|
+
// Create and initialize plugin manager
|
|
392
|
+
const plugins = createPluginManager({
|
|
393
|
+
pluginsDir: './plugins',
|
|
394
|
+
autoLoad: true,
|
|
395
|
+
});
|
|
396
|
+
await plugins.initialize();
|
|
397
|
+
|
|
398
|
+
// List plugins and skills
|
|
399
|
+
console.log(plugins.listPlugins());
|
|
400
|
+
const skills = plugins.getPluginSkills();
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### Plugin Permissions
|
|
404
|
+
|
|
405
|
+
| Permission | Description |
|
|
406
|
+
|------------|-------------|
|
|
407
|
+
| `memory:read` | Read from memory store |
|
|
408
|
+
| `memory:write` | Write to memory store |
|
|
409
|
+
| `skill:register` | Register new skills |
|
|
410
|
+
| `llm:invoke` | Invoke LLM providers |
|
|
411
|
+
| `http:outbound` | Make external HTTP requests |
|
|
412
|
+
|
|
413
|
+
## Background Workers
|
|
414
|
+
|
|
415
|
+
| Worker | Priority | Purpose |
|
|
416
|
+
|--------|----------|---------|
|
|
417
|
+
| `ultralearn` | normal | Deep knowledge acquisition |
|
|
418
|
+
| `optimize` | high | Performance optimization |
|
|
419
|
+
| `consolidate` | low | Memory consolidation (EWC++) |
|
|
420
|
+
| `predict` | normal | Predictive preloading |
|
|
421
|
+
| `audit` | critical | Security analysis |
|
|
422
|
+
| `map` | normal | Codebase/context mapping |
|
|
423
|
+
| `deepdive` | normal | Deep code analysis |
|
|
424
|
+
| `document` | normal | Auto-documentation |
|
|
425
|
+
| `refactor` | normal | Refactoring suggestions |
|
|
426
|
+
| `benchmark` | normal | Performance benchmarking |
|
|
427
|
+
| `testgaps` | normal | Test coverage analysis |
|
|
428
|
+
| `preload` | low | Resource preloading |
|
|
429
|
+
|
|
430
|
+
## Skills
|
|
431
|
+
|
|
432
|
+
### Built-in Skills
|
|
433
|
+
|
|
434
|
+
| Skill | Description | SOTA Feature |
|
|
435
|
+
|-------|-------------|--------------|
|
|
436
|
+
| `search` | Semantic search across memory | HNSW O(log n) search |
|
|
437
|
+
| `summarize` | Generate concise summaries | Multi-level summarization |
|
|
438
|
+
| `code` | Code generation & analysis | AST-aware with context |
|
|
439
|
+
| `memory` | Long-term memory storage | SONA learning integration |
|
|
440
|
+
| `reasoning` | Multi-step reasoning | Chain-of-thought |
|
|
441
|
+
| `extraction` | Entity & pattern extraction | Named entity recognition |
|
|
442
|
+
|
|
443
|
+
### Self-Learning Pipeline
|
|
444
|
+
|
|
445
|
+
```
|
|
446
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
447
|
+
│ User Query ──► Agent Response ──► Outcome ──► Pattern Store │
|
|
448
|
+
│ │ │ │ │ │
|
|
449
|
+
│ ▼ ▼ ▼ ▼ │
|
|
450
|
+
│ Embedding Action Log Reward Score Neural Update │
|
|
451
|
+
│ │
|
|
452
|
+
│ SONA 4-Step: RETRIEVE → JUDGE → DISTILL → CONSOLIDATE │
|
|
453
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
### Custom Skills
|
|
457
|
+
|
|
458
|
+
Create custom skills in the `skills/` directory:
|
|
459
|
+
|
|
460
|
+
```typescript
|
|
461
|
+
// skills/my-skill.ts
|
|
462
|
+
import { defineSkill } from '@ruvector/ruvbot';
|
|
463
|
+
|
|
464
|
+
export default defineSkill({
|
|
465
|
+
name: 'my-skill',
|
|
466
|
+
description: 'Custom skill description',
|
|
467
|
+
inputs: [
|
|
468
|
+
{ name: 'query', type: 'string', required: true }
|
|
469
|
+
],
|
|
470
|
+
async execute(params, context) {
|
|
471
|
+
return {
|
|
472
|
+
success: true,
|
|
473
|
+
data: `Processed: ${params.query}`,
|
|
474
|
+
};
|
|
475
|
+
},
|
|
476
|
+
});
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
## Memory System
|
|
480
|
+
|
|
481
|
+
RuvBot uses HNSW-indexed vector memory for fast semantic search:
|
|
482
|
+
|
|
483
|
+
```typescript
|
|
484
|
+
import { MemoryManager, createWasmEmbedder } from '@ruvector/ruvbot/learning';
|
|
485
|
+
|
|
486
|
+
const embedder = createWasmEmbedder({ dimensions: 384 });
|
|
487
|
+
const memory = new MemoryManager({
|
|
488
|
+
config: { dimensions: 384, maxVectors: 100000, indexType: 'hnsw' },
|
|
489
|
+
embedder,
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
// Store a memory
|
|
493
|
+
await memory.store('Important information', {
|
|
494
|
+
source: 'user',
|
|
495
|
+
tags: ['important'],
|
|
496
|
+
importance: 0.9,
|
|
497
|
+
});
|
|
498
|
+
|
|
499
|
+
// Search memories
|
|
500
|
+
const results = await memory.search('find important info', {
|
|
501
|
+
topK: 5,
|
|
502
|
+
threshold: 0.7,
|
|
503
|
+
});
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
## Docker
|
|
507
|
+
|
|
508
|
+
```yaml
|
|
509
|
+
# docker-compose.yml
|
|
510
|
+
version: '3.8'
|
|
511
|
+
services:
|
|
512
|
+
ruvbot:
|
|
513
|
+
image: ruvector/ruvbot:latest
|
|
514
|
+
ports:
|
|
515
|
+
- "3000:3000"
|
|
516
|
+
environment:
|
|
517
|
+
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
|
|
518
|
+
- SLACK_BOT_TOKEN=${SLACK_BOT_TOKEN}
|
|
519
|
+
volumes:
|
|
520
|
+
- ./data:/app/data
|
|
521
|
+
- ./skills:/app/skills
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
## Google Cloud Deployment
|
|
525
|
+
|
|
526
|
+
RuvBot includes cost-optimized Google Cloud Platform deployment (~$15-20/month for low traffic).
|
|
527
|
+
|
|
528
|
+
### Quick Deploy
|
|
529
|
+
|
|
530
|
+
```bash
|
|
531
|
+
# Set environment variables
|
|
532
|
+
export ANTHROPIC_API_KEY="sk-ant-..."
|
|
533
|
+
export PROJECT_ID="my-gcp-project"
|
|
534
|
+
|
|
535
|
+
# Deploy with script
|
|
536
|
+
./deploy/gcp/deploy.sh --project-id $PROJECT_ID
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
### Terraform (Infrastructure as Code)
|
|
540
|
+
|
|
541
|
+
```bash
|
|
542
|
+
cd deploy/gcp/terraform
|
|
543
|
+
terraform init
|
|
544
|
+
terraform apply \
|
|
545
|
+
-var="project_id=my-project" \
|
|
546
|
+
-var="anthropic_api_key=$ANTHROPIC_API_KEY"
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
### Cost Breakdown
|
|
550
|
+
|
|
551
|
+
| Service | Configuration | Monthly Cost |
|
|
552
|
+
|---------|---------------|--------------|
|
|
553
|
+
| Cloud Run | 0-10 instances, 512Mi | ~$0-5 (free tier) |
|
|
554
|
+
| Cloud SQL | db-f1-micro PostgreSQL | ~$10-15 |
|
|
555
|
+
| Secret Manager | 3-5 secrets | ~$0.18 |
|
|
556
|
+
| Cloud Storage | Standard | ~$0.02/GB |
|
|
557
|
+
| **Total** | | **~$15-20/month** |
|
|
558
|
+
|
|
559
|
+
### Features
|
|
560
|
+
|
|
561
|
+
- **Serverless**: Scale to zero when not in use
|
|
562
|
+
- **Managed Database**: Cloud SQL PostgreSQL with automatic backups
|
|
563
|
+
- **Secure Secrets**: Secret Manager for API keys
|
|
564
|
+
- **CI/CD**: Cloud Build pipeline included
|
|
565
|
+
- **Terraform**: Full infrastructure as code support
|
|
566
|
+
|
|
567
|
+
See [ADR-013: GCP Deployment](docs/adr/ADR-013-gcp-deployment.md) for architecture details.
|
|
568
|
+
|
|
569
|
+
## LLM Providers - Gemini 2.5 Default
|
|
570
|
+
|
|
571
|
+
RuvBot supports 12+ models with **Gemini 2.5 Pro as the recommended default** for optimal cost/performance.
|
|
572
|
+
|
|
573
|
+
### Available Models (via REST API)
|
|
574
|
+
|
|
575
|
+
```bash
|
|
576
|
+
curl https://your-ruvbot.run.app/api/models
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
| Model | Provider | Use Case | Recommended |
|
|
580
|
+
|-------|----------|----------|-------------|
|
|
581
|
+
| **Gemini 2.5 Pro** | OpenRouter | General + Reasoning | **Default** |
|
|
582
|
+
| Gemini 2.0 Flash | OpenRouter | Fast responses | Speed-critical |
|
|
583
|
+
| Gemini 2.0 Flash Thinking | OpenRouter | Reasoning (FREE) | Budget |
|
|
584
|
+
| Claude 3.5 Sonnet | Anthropic/OpenRouter | Complex analysis | Quality |
|
|
585
|
+
| Claude 3 Opus | Anthropic/OpenRouter | Deep reasoning | Premium |
|
|
586
|
+
| GPT-4o | OpenRouter | General | Alternative |
|
|
587
|
+
| O1 Preview | OpenRouter | Advanced reasoning | Complex |
|
|
588
|
+
| Qwen QwQ-32B | OpenRouter | Math + Reasoning | Cost-effective |
|
|
589
|
+
| DeepSeek R1 | OpenRouter | Open-source reasoning | Privacy |
|
|
590
|
+
| Llama 3.1 405B | OpenRouter | Large context | Enterprise |
|
|
591
|
+
|
|
592
|
+
### OpenRouter (Default - 200+ Models)
|
|
593
|
+
|
|
594
|
+
```typescript
|
|
595
|
+
import { createOpenRouterProvider } from '@ruvector/ruvbot';
|
|
596
|
+
|
|
597
|
+
// Gemini 2.5 Pro (recommended)
|
|
598
|
+
const provider = createOpenRouterProvider({
|
|
599
|
+
apiKey: process.env.OPENROUTER_API_KEY,
|
|
600
|
+
model: 'google/gemini-2.5-pro-preview-05-06',
|
|
601
|
+
});
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
### Anthropic (Direct)
|
|
605
|
+
|
|
606
|
+
```typescript
|
|
607
|
+
import { createAnthropicProvider } from '@ruvector/ruvbot';
|
|
608
|
+
|
|
609
|
+
const provider = createAnthropicProvider({
|
|
610
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
611
|
+
model: 'claude-3-5-sonnet-20241022',
|
|
612
|
+
});
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
See [ADR-012: LLM Providers](docs/adr/ADR-012-llm-providers.md) for details.
|
|
616
|
+
|
|
617
|
+
## TypeScript Support
|
|
618
|
+
|
|
619
|
+
RuvBot is written in TypeScript and provides full type definitions:
|
|
620
|
+
|
|
621
|
+
```typescript
|
|
622
|
+
import type {
|
|
623
|
+
RuvBot,
|
|
624
|
+
RuvBotOptions,
|
|
625
|
+
Agent,
|
|
626
|
+
AgentConfig,
|
|
627
|
+
Session,
|
|
628
|
+
Message,
|
|
629
|
+
BotConfig,
|
|
630
|
+
} from '@ruvector/ruvbot';
|
|
631
|
+
|
|
632
|
+
// Full IntelliSense support
|
|
633
|
+
const bot = createRuvBot({
|
|
634
|
+
config: {
|
|
635
|
+
name: 'MyBot',
|
|
636
|
+
llm: { provider: 'anthropic', apiKey: '...' },
|
|
637
|
+
},
|
|
638
|
+
});
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
## Events & Hooks
|
|
642
|
+
|
|
643
|
+
RuvBot emits events for lifecycle and message handling:
|
|
644
|
+
|
|
645
|
+
```typescript
|
|
646
|
+
import { createRuvBot } from '@ruvector/ruvbot';
|
|
647
|
+
|
|
648
|
+
const bot = createRuvBot();
|
|
649
|
+
|
|
650
|
+
// Lifecycle events
|
|
651
|
+
bot.on('ready', () => console.log('Bot is ready'));
|
|
652
|
+
bot.on('shutdown', () => console.log('Bot shutting down'));
|
|
653
|
+
bot.on('error', (error) => console.error('Error:', error));
|
|
654
|
+
|
|
655
|
+
// Agent events
|
|
656
|
+
bot.on('agent:spawn', (agent) => console.log('Agent spawned:', agent.id));
|
|
657
|
+
bot.on('agent:stop', (agentId) => console.log('Agent stopped:', agentId));
|
|
658
|
+
|
|
659
|
+
// Session events
|
|
660
|
+
bot.on('session:create', (session) => console.log('Session created:', session.id));
|
|
661
|
+
bot.on('session:end', (sessionId) => console.log('Session ended:', sessionId));
|
|
662
|
+
|
|
663
|
+
// Message events
|
|
664
|
+
bot.on('message', (message, session) => {
|
|
665
|
+
console.log(`[${message.role}]: ${message.content}`);
|
|
666
|
+
});
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
## Streaming Responses
|
|
670
|
+
|
|
671
|
+
RuvBot supports streaming for real-time responses:
|
|
672
|
+
|
|
673
|
+
```typescript
|
|
674
|
+
import { createRuvBot } from '@ruvector/ruvbot';
|
|
675
|
+
|
|
676
|
+
const bot = createRuvBot({
|
|
677
|
+
config: {
|
|
678
|
+
llm: {
|
|
679
|
+
provider: 'anthropic',
|
|
680
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
681
|
+
streaming: true, // Enable streaming
|
|
682
|
+
},
|
|
683
|
+
},
|
|
684
|
+
});
|
|
685
|
+
|
|
686
|
+
// Streaming is handled automatically in chat responses
|
|
687
|
+
const response = await bot.chat(sessionId, 'Tell me a story');
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
## Migration from Clawdbot
|
|
691
|
+
|
|
692
|
+
RuvBot provides a seamless migration path from Clawdbot:
|
|
693
|
+
|
|
694
|
+
### 1. Export Clawdbot Data
|
|
695
|
+
|
|
696
|
+
```bash
|
|
697
|
+
# Export your Clawdbot data
|
|
698
|
+
clawdbot export --format json > clawdbot-data.json
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
### 2. Install RuvBot
|
|
702
|
+
|
|
703
|
+
```bash
|
|
704
|
+
npm install -g @ruvector/ruvbot
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
### 3. Import Data
|
|
708
|
+
|
|
709
|
+
```bash
|
|
710
|
+
ruvbot import --from-clawdbot clawdbot-data.json
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
### 4. Verify Migration
|
|
714
|
+
|
|
715
|
+
```bash
|
|
716
|
+
ruvbot doctor --verify-migration
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
### Key Differences
|
|
720
|
+
|
|
721
|
+
| Aspect | Clawdbot | RuvBot |
|
|
722
|
+
|--------|----------|--------|
|
|
723
|
+
| Config file | `clawdbot.config.json` | `ruvbot.config.json` |
|
|
724
|
+
| Environment prefix | `CLAWDBOT_` | `RUVBOT_` |
|
|
725
|
+
| Skills directory | `./skills` | `./skills` (compatible) |
|
|
726
|
+
| Memory storage | SQLite | SQLite + PostgreSQL + HNSW |
|
|
727
|
+
|
|
728
|
+
### Skill Compatibility
|
|
729
|
+
|
|
730
|
+
All 52 Clawdbot skills are compatible with RuvBot. Simply copy your `skills/` directory.
|
|
731
|
+
|
|
732
|
+
## Troubleshooting
|
|
733
|
+
|
|
734
|
+
### Common Issues
|
|
735
|
+
|
|
736
|
+
**LLM not configured**
|
|
737
|
+
```
|
|
738
|
+
[RuvBot] LLM not configured. Received: "..."
|
|
739
|
+
```
|
|
740
|
+
Solution: Set `OPENROUTER_API_KEY` or `ANTHROPIC_API_KEY` environment variable.
|
|
741
|
+
|
|
742
|
+
**Agent not found**
|
|
743
|
+
```
|
|
744
|
+
Error: Agent with ID xxx not found
|
|
745
|
+
```
|
|
746
|
+
Solution: Create an agent first with `bot.spawnAgent()` or use `default-agent`.
|
|
747
|
+
|
|
748
|
+
**Session expired**
|
|
749
|
+
```
|
|
750
|
+
Error: Session with ID xxx not found
|
|
751
|
+
```
|
|
752
|
+
Solution: Sessions expire after 1 hour by default. Create a new session.
|
|
753
|
+
|
|
754
|
+
**Memory search returns empty**
|
|
755
|
+
```
|
|
756
|
+
No results found
|
|
757
|
+
```
|
|
758
|
+
Solution: Ensure you've stored memories first and the HNSW index is initialized.
|
|
759
|
+
|
|
760
|
+
### Debug Mode
|
|
761
|
+
|
|
762
|
+
```bash
|
|
763
|
+
# Enable debug logging
|
|
764
|
+
export LOG_LEVEL=debug
|
|
765
|
+
ruvbot start --debug
|
|
766
|
+
```
|
|
767
|
+
|
|
768
|
+
### Health Check
|
|
769
|
+
|
|
770
|
+
```bash
|
|
771
|
+
# Check service health
|
|
772
|
+
curl https://your-ruvbot.run.app/health
|
|
773
|
+
|
|
774
|
+
# Run diagnostics
|
|
775
|
+
ruvbot doctor
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
## Development
|
|
779
|
+
|
|
780
|
+
```bash
|
|
781
|
+
# Clone the repository
|
|
782
|
+
git clone https://github.com/ruvnet/ruvector.git
|
|
783
|
+
cd ruvector/npm/packages/ruvbot
|
|
784
|
+
|
|
785
|
+
# Install dependencies
|
|
786
|
+
npm install
|
|
787
|
+
|
|
788
|
+
# Run in development mode
|
|
789
|
+
npm run dev
|
|
790
|
+
|
|
791
|
+
# Run tests
|
|
792
|
+
npm test
|
|
793
|
+
|
|
794
|
+
# Run tests with coverage
|
|
795
|
+
npm run test:coverage
|
|
796
|
+
|
|
797
|
+
# Type check
|
|
798
|
+
npm run typecheck
|
|
799
|
+
|
|
800
|
+
# Build
|
|
801
|
+
npm run build
|
|
802
|
+
```
|
|
803
|
+
|
|
804
|
+
## Dependencies
|
|
805
|
+
|
|
806
|
+
| Package | Purpose |
|
|
807
|
+
|---------|---------|
|
|
808
|
+
| `@ruvector/ruvllm` | LLM orchestration with SONA learning |
|
|
809
|
+
| `@ruvector/wasm-unified` | WASM vector operations |
|
|
810
|
+
| `@ruvector/postgres-cli` | PostgreSQL vector storage |
|
|
811
|
+
| `fastify` | REST API server |
|
|
812
|
+
| `@slack/bolt` | Slack integration |
|
|
813
|
+
|
|
814
|
+
## What's New in v0.1.0
|
|
815
|
+
|
|
816
|
+
- **Gemini 2.5 Pro Support** - Default model with state-of-the-art reasoning
|
|
817
|
+
- **12+ LLM Models** - Gemini, Claude, GPT, Qwen, DeepSeek, Llama
|
|
818
|
+
- **AIDefence Integration** - Military-grade adversarial protection
|
|
819
|
+
- **6-Layer Security** - Defense-in-depth architecture
|
|
820
|
+
- **HNSW Vector Search** - 150x-12,500x faster than linear search
|
|
821
|
+
- **SONA Learning** - Self-optimizing neural architecture
|
|
822
|
+
- **Cloud Run Ready** - Serverless deployment with scale-to-zero
|
|
823
|
+
- **Multi-tenancy** - PostgreSQL RLS for enterprise isolation
|
|
824
|
+
|
|
825
|
+
## License
|
|
826
|
+
|
|
827
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
828
|
+
|
|
829
|
+
## Contributing
|
|
830
|
+
|
|
831
|
+
See [CONTRIBUTING.md](../../CONTRIBUTING.md) for contribution guidelines.
|
|
832
|
+
|
|
833
|
+
## Links
|
|
834
|
+
|
|
835
|
+
- **Live Demo**: https://ruvbot-875130704813.us-central1.run.app
|
|
836
|
+
- **npm Package**: https://www.npmjs.com/package/@ruvector/ruvbot
|
|
837
|
+
- **Repository**: https://github.com/ruvnet/ruvector
|
|
838
|
+
- **Issues**: https://github.com/ruvnet/ruvector/issues
|
|
839
|
+
- **Documentation**: https://github.com/ruvnet/ruvector/tree/main/npm/packages/ruvbot
|
|
840
|
+
- **Feature Comparison**: [docs/FEATURE_COMPARISON.md](docs/FEATURE_COMPARISON.md)
|
|
841
|
+
- **ADR Documents**: [docs/adr/](docs/adr/)
|
|
842
|
+
|
|
843
|
+
## Support
|
|
844
|
+
|
|
845
|
+
- **GitHub Issues**: https://github.com/ruvnet/ruvector/issues
|
|
846
|
+
- **Discussions**: https://github.com/ruvnet/ruvector/discussions
|
|
847
|
+
|
|
848
|
+
---
|
|
849
|
+
|
|
850
|
+
Made with security in mind by the RuVector Team
|