mirror of
https://github.com/ruvnet/ruflo.git
synced 2026-09-14 14:01:28 +08:00
5b71c7ac13
This commit closes the chain started inca0a6fa5c(standalone use recipes landed in repo but never reached npm because no version bumps shipped). ## Changes ### Module version bumps (alpha.43) - @claude-flow/memory → 3.0.0-alpha.17 (republish standalone use README) - @claude-flow/embeddings → 3.0.0-alpha.18 (republish standalone use README) - @claude-flow/security → 3.0.0-alpha.8 (republish standalone use README) - @claude-flow/neural → 3.0.0-alpha.9 (pin @ruvector/sona to 0.1.5, republish standalone use README) - @claude-flow/cli → 3.7.0-alpha.43 (repin to new modules above) - claude-flow → 3.7.0-alpha.43 (umbrella) - ruflo → 3.7.0-alpha.43 (umbrella) ### Umbrella bump (alpha.44) — npm download badges - @claude-flow/cli → 3.7.0-alpha.44 - claude-flow → 3.7.0-alpha.44 - ruflo → 3.7.0-alpha.44 ### Neural sona pin (root fix for #2022) @claude-flow/neural alpha.8 had `"@ruvector/sona": "latest"`, and @ruvector/sona@0.1.6 (current latest on npm) shipped as an empty publish — README + package.json only, no index.js or native bins. So every fresh `npm install @claude-flow/neural@alpha.8` broke at import time with `Cannot find package '.../node_modules/@ruvector/sona/index.js'`. Alpha.9 pins to the exact known-good 0.1.5 (which has index.js + 7 platform-specific .node bins). Will revert to a range once @ruvector/sona@0.1.7+ ships with content (tracked in #2022). ### npm download badges across every published package README Added `shields.io/npm/dm/<pkg>` (monthly downloads) badges to: - claims, cli-core, plugins (had no npm badges at all) - plugin-agent-federation, plugin-iot-cognitum (no npm badges) - browser, codex, mcp (had version badge, missing downloads) - umbrella root README (now badges both `ruflo` + `claude-flow`) The ruflo/README.md and v3/@claude-flow/cli/README.md auto-copy from root via prepublishOnly, so they inherit the new badges on publish. Packages that already carried downloads badges (aidefence, deployment, embeddings, guidance, hooks, integration, memory, neural, performance, providers, security, shared, swarm, testing) are unchanged. ## Live functional check on the published artifacts - Fresh `npm install @claude-flow/neural@3.0.0-alpha.9`: sona resolves to 0.1.5; `import('@claude-flow/neural')` returns A2CAlgorithm, BalancedMode, BaseModeImplementation, BatchMode, CuriosityModule, ... (was broken before alpha.9). - Standalone use sections fromca0a6fa5cnow visible on npmjs.com for memory@alpha.17, embeddings@alpha.18, security@alpha.8, neural@alpha.9. - npm dm/ badges resolve and render the current weekly download count. Co-Authored-By: RuFlo <ruv@ruv.net>
406 lines
11 KiB
Markdown
406 lines
11 KiB
Markdown
# @claude-flow/plugins
|
|
|
|
[](https://www.npmjs.com/package/@claude-flow/plugins)
|
|
[](https://www.npmjs.com/package/@claude-flow/plugins)
|
|
[](https://opensource.org/licenses/MIT)
|
|
|
|
**Unified Plugin SDK for Claude Flow V3**
|
|
|
|
A comprehensive plugin development framework providing workers, hooks, providers, and security utilities for building Claude Flow extensions.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install @claude-flow/plugins
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
### Create a Plugin with the Builder
|
|
|
|
```typescript
|
|
import { PluginBuilder, HookEvent, HookPriority } from '@claude-flow/plugins';
|
|
|
|
const myPlugin = new PluginBuilder('my-awesome-plugin', '1.0.0')
|
|
.withDescription('My awesome plugin for Claude Flow')
|
|
.withAuthor('Your Name')
|
|
.withMCPTools([
|
|
{
|
|
name: 'greet',
|
|
description: 'Greet a user',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
name: { type: 'string', description: 'Name to greet' }
|
|
},
|
|
required: ['name']
|
|
},
|
|
handler: async (input) => ({
|
|
content: [{ type: 'text', text: `Hello, ${input.name}!` }]
|
|
})
|
|
}
|
|
])
|
|
.withHooks([
|
|
{
|
|
event: HookEvent.PostTaskComplete,
|
|
priority: HookPriority.Normal,
|
|
handler: async (ctx) => {
|
|
console.log('Task completed:', ctx.data);
|
|
return { success: true };
|
|
}
|
|
}
|
|
])
|
|
.build();
|
|
|
|
// Register with the default registry
|
|
import { getDefaultRegistry } from '@claude-flow/plugins';
|
|
await getDefaultRegistry().register(myPlugin);
|
|
```
|
|
|
|
### Quick Plugin Creators
|
|
|
|
```typescript
|
|
import { createToolPlugin, createHooksPlugin, createWorkerPlugin } from '@claude-flow/plugins';
|
|
|
|
// Tool-only plugin
|
|
const toolPlugin = createToolPlugin('my-tools', '1.0.0', [
|
|
{ name: 'tool1', description: '...', inputSchema: {...}, handler: async () => {...} }
|
|
]);
|
|
|
|
// Hooks-only plugin
|
|
const hooksPlugin = createHooksPlugin('my-hooks', '1.0.0', [
|
|
{ event: HookEvent.PreTaskExecute, handler: async (ctx) => ({ success: true }) }
|
|
]);
|
|
|
|
// Worker plugin
|
|
const workerPlugin = createWorkerPlugin('my-workers', '1.0.0', [
|
|
{ type: 'coder', name: 'main-coder', capabilities: ['code-generation'] }
|
|
]);
|
|
```
|
|
|
|
## Features
|
|
|
|
### 🔧 MCP Tool Builder
|
|
|
|
```typescript
|
|
import { MCPToolBuilder } from '@claude-flow/plugins';
|
|
|
|
const tool = new MCPToolBuilder('calculate')
|
|
.withDescription('Perform calculations')
|
|
.addStringParam('expression', 'Math expression', { required: true })
|
|
.addBooleanParam('verbose', 'Show steps', { default: false })
|
|
.withHandler(async (input) => {
|
|
const result = eval(input.expression); // Use a safe evaluator in production!
|
|
return { content: [{ type: 'text', text: `Result: ${result}` }] };
|
|
})
|
|
.build();
|
|
```
|
|
|
|
### 🎣 Hook System
|
|
|
|
```typescript
|
|
import { HookBuilder, HookFactory, HookRegistry, HookEvent, HookPriority } from '@claude-flow/plugins';
|
|
|
|
// Create a custom hook with conditions
|
|
const hook = new HookBuilder(HookEvent.PreAgentSpawn)
|
|
.withName('validate-agent')
|
|
.withPriority(HookPriority.High)
|
|
.when((ctx) => ctx.data?.type === 'coder')
|
|
.transform((data) => ({ ...data, validated: true }))
|
|
.handle(async (ctx) => {
|
|
// Validation logic
|
|
return { success: true, data: ctx.data, modified: true };
|
|
})
|
|
.build();
|
|
|
|
// Pre-built hook factories
|
|
const logger = HookFactory.createLogger(HookEvent.PostTaskComplete, console);
|
|
const rateLimiter = HookFactory.createRateLimiter(HookEvent.PreToolCall, { maxPerMinute: 100 });
|
|
const validator = HookFactory.createValidator(HookEvent.PreAgentSpawn, (data) => data.type !== undefined);
|
|
```
|
|
|
|
### 👷 Worker Pool
|
|
|
|
```typescript
|
|
import { WorkerPool, WorkerFactory } from '@claude-flow/plugins';
|
|
|
|
// Create a worker pool
|
|
const pool = new WorkerPool({
|
|
minWorkers: 2,
|
|
maxWorkers: 10,
|
|
taskQueueSize: 100
|
|
});
|
|
|
|
// Spawn workers using factory
|
|
const coder = await pool.spawn(WorkerFactory.createCoder('main-coder'));
|
|
const reviewer = await pool.spawn(WorkerFactory.createReviewer('code-reviewer'));
|
|
const tester = await pool.spawn(WorkerFactory.createTester('test-runner'));
|
|
|
|
// Submit tasks
|
|
const result = await pool.submit({
|
|
id: 'task-1',
|
|
type: 'code-generation',
|
|
input: { prompt: 'Write a function...' }
|
|
});
|
|
|
|
// Shutdown
|
|
await pool.shutdown();
|
|
```
|
|
|
|
### 🤖 LLM Provider Integration
|
|
|
|
```typescript
|
|
import { ProviderRegistry, ProviderFactory, BaseLLMProvider } from '@claude-flow/plugins';
|
|
|
|
const registry = new ProviderRegistry({
|
|
fallbackChain: ['anthropic', 'openai'],
|
|
costOptimization: true
|
|
});
|
|
|
|
// Register built-in providers
|
|
class ClaudeProvider extends BaseLLMProvider {
|
|
constructor() {
|
|
super(ProviderFactory.createClaude());
|
|
}
|
|
|
|
async complete(request) {
|
|
// Implementation
|
|
}
|
|
}
|
|
|
|
registry.register(new ClaudeProvider());
|
|
|
|
// Execute with automatic fallback
|
|
const response = await registry.execute({
|
|
model: 'claude-sonnet-4-6',
|
|
messages: [{ role: 'user', content: 'Hello!' }]
|
|
});
|
|
```
|
|
|
|
### 🔗 Agentic Flow Integration
|
|
|
|
```typescript
|
|
import { AgenticFlowBridge, AgentDBBridge } from '@claude-flow/plugins';
|
|
|
|
// Swarm coordination
|
|
const agentic = new AgenticFlowBridge({ maxConcurrentAgents: 15 });
|
|
await agentic.initializeSwarm({ type: 'hierarchical', maxAgents: 15 });
|
|
|
|
const agent = await agentic.spawnAgent({
|
|
type: 'coder',
|
|
capabilities: ['typescript', 'react']
|
|
});
|
|
|
|
const result = await agentic.orchestrateTask({
|
|
taskType: 'code-generation',
|
|
input: { prompt: '...' },
|
|
agentId: agent.id
|
|
});
|
|
|
|
// Vector storage with AgentDB
|
|
const agentdb = new AgentDBBridge({ dimensions: 1536, indexType: 'hnsw' });
|
|
await agentdb.initialize();
|
|
|
|
await agentdb.store('doc-1', embeddings, { type: 'document' });
|
|
const similar = await agentdb.search(queryVector, { limit: 10 });
|
|
```
|
|
|
|
### 🔒 Security Utilities
|
|
|
|
```typescript
|
|
import { Security, createRateLimiter, createResourceLimiter } from '@claude-flow/plugins';
|
|
|
|
// Input validation
|
|
const name = Security.validateString(input, { minLength: 1, maxLength: 100 });
|
|
const count = Security.validateNumber(input, { min: 0, max: 1000, integer: true });
|
|
const path = Security.validatePath(input, { allowedExtensions: ['.ts', '.js'] });
|
|
|
|
// Safe path creation (prevents traversal attacks)
|
|
const safePath = Security.safePath('/project', 'src', userInput);
|
|
|
|
// Safe JSON parsing (prevents prototype pollution)
|
|
const data = Security.safeJsonParse<Config>(jsonString);
|
|
|
|
// Command validation
|
|
const cmd = Security.validateCommand('npm install', { allowedCommands: new Set(['npm', 'npx']) });
|
|
|
|
// Rate limiting
|
|
const limiter = createRateLimiter({ maxTokens: 100, refillRate: 10, refillInterval: 1000 });
|
|
if (limiter.tryAcquire()) {
|
|
// Proceed
|
|
}
|
|
|
|
// Resource limiting
|
|
const resourceLimiter = createResourceLimiter({ maxMemoryMB: 512, maxExecutionTime: 30000 });
|
|
const result = await resourceLimiter.enforce(async () => {
|
|
// Heavy computation
|
|
});
|
|
```
|
|
|
|
## API Reference
|
|
|
|
### Core Exports
|
|
|
|
| Export | Description |
|
|
|--------|-------------|
|
|
| `PluginBuilder` | Fluent builder for creating plugins |
|
|
| `BasePlugin` | Abstract base class for plugins |
|
|
| `PluginRegistry` | Plugin lifecycle management |
|
|
| `getDefaultRegistry()` | Get the default plugin registry |
|
|
|
|
### SDK Builders
|
|
|
|
| Export | Description |
|
|
|--------|-------------|
|
|
| `MCPToolBuilder` | Build MCP tools with parameters |
|
|
| `HookBuilder` | Build hooks with conditions and transformers |
|
|
| `WorkerBuilder` | Build worker definitions |
|
|
|
|
### Quick Creators
|
|
|
|
| Export | Description |
|
|
|--------|-------------|
|
|
| `createToolPlugin()` | Create a tool-only plugin |
|
|
| `createHooksPlugin()` | Create a hooks-only plugin |
|
|
| `createWorkerPlugin()` | Create a worker plugin |
|
|
| `createProviderPlugin()` | Create a provider plugin |
|
|
|
|
### Hook System
|
|
|
|
| Export | Description |
|
|
|--------|-------------|
|
|
| `HookRegistry` | Central hook management |
|
|
| `HookExecutor` | Execute hooks with patterns |
|
|
| `HookFactory` | Pre-built hook creators |
|
|
| `HookEvent` | All hook event types |
|
|
| `HookPriority` | Hook priority levels |
|
|
|
|
### Workers
|
|
|
|
| Export | Description |
|
|
|--------|-------------|
|
|
| `WorkerPool` | Managed worker pool |
|
|
| `WorkerInstance` | Individual worker |
|
|
| `WorkerFactory` | Worker definition factory |
|
|
|
|
### Providers
|
|
|
|
| Export | Description |
|
|
|--------|-------------|
|
|
| `ProviderRegistry` | LLM provider management |
|
|
| `BaseLLMProvider` | Base provider implementation |
|
|
| `ProviderFactory` | Provider definition factory |
|
|
|
|
### Integrations
|
|
|
|
| Export | Description |
|
|
|--------|-------------|
|
|
| `AgenticFlowBridge` | agentic-flow@alpha integration |
|
|
| `AgentDBBridge` | AgentDB vector storage |
|
|
|
|
### Security
|
|
|
|
| Export | Description |
|
|
|--------|-------------|
|
|
| `Security` | All security utilities |
|
|
| `validateString/Number/Boolean/Array/Enum` | Input validators |
|
|
| `safePath/safePathAsync` | Path security |
|
|
| `safeJsonParse/safeJsonStringify` | JSON security |
|
|
| `createRateLimiter` | Rate limiting |
|
|
| `createResourceLimiter` | Resource limiting |
|
|
|
|
## Hook Events
|
|
|
|
```typescript
|
|
enum HookEvent {
|
|
// Session lifecycle
|
|
SessionStart = 'session:start',
|
|
SessionEnd = 'session:end',
|
|
|
|
// Agent lifecycle
|
|
PreAgentSpawn = 'agent:pre-spawn',
|
|
PostAgentSpawn = 'agent:post-spawn',
|
|
PreAgentTerminate = 'agent:pre-terminate',
|
|
PostAgentTerminate = 'agent:post-terminate',
|
|
|
|
// Task lifecycle
|
|
PreTaskExecute = 'task:pre-execute',
|
|
PostTaskComplete = 'task:post-complete',
|
|
TaskError = 'task:error',
|
|
|
|
// Tool lifecycle
|
|
PreToolCall = 'tool:pre-call',
|
|
PostToolCall = 'tool:post-call',
|
|
|
|
// Memory operations
|
|
PreMemoryStore = 'memory:pre-store',
|
|
PostMemoryStore = 'memory:post-store',
|
|
PreMemoryRetrieve = 'memory:pre-retrieve',
|
|
PostMemoryRetrieve = 'memory:post-retrieve',
|
|
|
|
// Swarm coordination
|
|
SwarmInitialized = 'swarm:initialized',
|
|
SwarmShutdown = 'swarm:shutdown',
|
|
ConsensusReached = 'swarm:consensus-reached',
|
|
|
|
// File operations
|
|
PreFileRead = 'file:pre-read',
|
|
PostFileRead = 'file:post-read',
|
|
PreFileWrite = 'file:pre-write',
|
|
PostFileWrite = 'file:post-write',
|
|
|
|
// Commands
|
|
PreCommand = 'command:pre-execute',
|
|
PostCommand = 'command:post-execute',
|
|
|
|
// Learning
|
|
PatternLearned = 'learning:pattern-learned',
|
|
PatternApplied = 'learning:pattern-applied',
|
|
}
|
|
```
|
|
|
|
## Hook Priorities
|
|
|
|
```typescript
|
|
enum HookPriority {
|
|
Critical = 1000, // Run first, can abort
|
|
High = 750, // Important hooks
|
|
Normal = 500, // Default priority
|
|
Low = 250, // Less important
|
|
Deferred = 0, // Run last
|
|
}
|
|
```
|
|
|
|
## Worker Types
|
|
|
|
- `coder` - Code implementation
|
|
- `reviewer` - Code review
|
|
- `tester` - Test generation/execution
|
|
- `researcher` - Information gathering
|
|
- `planner` - Task planning
|
|
- `coordinator` - Multi-agent coordination
|
|
- `security` - Security analysis
|
|
- `performance` - Performance optimization
|
|
- `specialized` - Custom capabilities
|
|
- `long-running` - Background tasks
|
|
|
|
## Performance
|
|
|
|
| Metric | Target | Actual |
|
|
|--------|--------|--------|
|
|
| Plugin load time | < 50ms | ~20ms |
|
|
| Hook execution | < 1ms | ~0.5ms |
|
|
| Worker spawn | < 100ms | ~50ms |
|
|
| Vector search (10K) | < 10ms | ~5ms |
|
|
|
|
## Testing
|
|
|
|
```bash
|
|
npm test # Run all tests
|
|
npm run test:watch # Watch mode
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|