@claude-flow/cli 3.0.0-alpha.2 → 3.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +172 -6
- package/bin/cli.js +0 -0
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +43 -27
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze.d.ts +19 -0
- package/dist/src/commands/analyze.d.ts.map +1 -0
- package/dist/src/commands/analyze.js +1823 -0
- package/dist/src/commands/analyze.js.map +1 -0
- package/dist/src/commands/claims.d.ts +10 -0
- package/dist/src/commands/claims.d.ts.map +1 -0
- package/dist/src/commands/claims.js +288 -0
- package/dist/src/commands/claims.js.map +1 -0
- package/dist/src/commands/completions.d.ts +10 -0
- package/dist/src/commands/completions.d.ts.map +1 -0
- package/dist/src/commands/completions.js +539 -0
- package/dist/src/commands/completions.js.map +1 -0
- package/dist/src/commands/config.js +2 -2
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/daemon.d.ts +8 -0
- package/dist/src/commands/daemon.d.ts.map +1 -0
- package/dist/src/commands/daemon.js +545 -0
- package/dist/src/commands/daemon.js.map +1 -0
- package/dist/src/commands/deployment.d.ts +10 -0
- package/dist/src/commands/deployment.d.ts.map +1 -0
- package/dist/src/commands/deployment.js +289 -0
- package/dist/src/commands/deployment.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +10 -0
- package/dist/src/commands/doctor.d.ts.map +1 -0
- package/dist/src/commands/doctor.js +429 -0
- package/dist/src/commands/doctor.js.map +1 -0
- package/dist/src/commands/embeddings.d.ts +18 -0
- package/dist/src/commands/embeddings.d.ts.map +1 -0
- package/dist/src/commands/embeddings.js +616 -0
- package/dist/src/commands/embeddings.js.map +1 -0
- package/dist/src/commands/hive-mind.d.ts.map +1 -1
- package/dist/src/commands/hive-mind.js +252 -35
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +326 -2
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +13 -0
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +52 -1
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/mcp.js +4 -4
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory.d.ts.map +1 -1
- package/dist/src/commands/memory.js +236 -170
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/migrate.js +1 -1
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/neural.d.ts +10 -0
- package/dist/src/commands/neural.d.ts.map +1 -0
- package/dist/src/commands/neural.js +224 -0
- package/dist/src/commands/neural.js.map +1 -0
- package/dist/src/commands/performance.d.ts +10 -0
- package/dist/src/commands/performance.d.ts.map +1 -0
- package/dist/src/commands/performance.js +262 -0
- package/dist/src/commands/performance.js.map +1 -0
- package/dist/src/commands/plugins.d.ts +10 -0
- package/dist/src/commands/plugins.d.ts.map +1 -0
- package/dist/src/commands/plugins.js +280 -0
- package/dist/src/commands/plugins.js.map +1 -0
- package/dist/src/commands/process.d.ts.map +1 -1
- package/dist/src/commands/process.js +95 -20
- package/dist/src/commands/process.js.map +1 -1
- package/dist/src/commands/providers.d.ts +10 -0
- package/dist/src/commands/providers.d.ts.map +1 -0
- package/dist/src/commands/providers.js +232 -0
- package/dist/src/commands/providers.js.map +1 -0
- package/dist/src/commands/route.d.ts +16 -0
- package/dist/src/commands/route.d.ts.map +1 -0
- package/dist/src/commands/route.js +603 -0
- package/dist/src/commands/route.js.map +1 -0
- package/dist/src/commands/security.d.ts +10 -0
- package/dist/src/commands/security.d.ts.map +1 -0
- package/dist/src/commands/security.js +261 -0
- package/dist/src/commands/security.js.map +1 -0
- package/dist/src/commands/start.js +2 -2
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +26 -2
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/swarm.js +6 -6
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +63 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts.map +1 -1
- package/dist/src/init/claudemd-generator.js +218 -362
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +5 -0
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +22 -12
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +17 -1
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.d.ts.map +1 -1
- package/dist/src/mcp-server.js +5 -0
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +350 -14
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
- package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/analyze-tools.js +317 -0
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -0
- package/dist/src/mcp-tools/config-tools.d.ts +1 -1
- package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +262 -15
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
- package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/hive-mind-tools.js +447 -0
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +80 -15
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +6 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +6 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +157 -9
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/session-tools.d.ts +8 -0
- package/dist/src/mcp-tools/session-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/session-tools.js +315 -0
- package/dist/src/mcp-tools/session-tools.js.map +1 -0
- package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +37 -2
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.d.ts +8 -0
- package/dist/src/mcp-tools/task-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/task-tools.js +302 -0
- package/dist/src/mcp-tools/task-tools.js.map +1 -0
- package/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
- package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/workflow-tools.js +481 -0
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -0
- package/dist/src/output.d.ts +16 -0
- package/dist/src/output.d.ts.map +1 -1
- package/dist/src/output.js +42 -0
- package/dist/src/output.js.map +1 -1
- package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
- package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/ast-analyzer.js +277 -0
- package/dist/src/ruvector/ast-analyzer.js.map +1 -0
- package/dist/src/ruvector/coverage-router.d.ts +145 -0
- package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
- package/dist/src/ruvector/coverage-router.js +451 -0
- package/dist/src/ruvector/coverage-router.js.map +1 -0
- package/dist/src/ruvector/coverage-tools.d.ts +33 -0
- package/dist/src/ruvector/coverage-tools.d.ts.map +1 -0
- package/dist/src/ruvector/coverage-tools.js +157 -0
- package/dist/src/ruvector/coverage-tools.js.map +1 -0
- package/dist/src/ruvector/diff-classifier.d.ts +154 -0
- package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
- package/dist/src/ruvector/diff-classifier.js +508 -0
- package/dist/src/ruvector/diff-classifier.js.map +1 -0
- package/dist/src/ruvector/graph-analyzer.d.ts +174 -0
- package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/graph-analyzer.js +878 -0
- package/dist/src/ruvector/graph-analyzer.js.map +1 -0
- package/dist/src/ruvector/index.d.ts +27 -0
- package/dist/src/ruvector/index.d.ts.map +1 -0
- package/dist/src/ruvector/index.js +47 -0
- package/dist/src/ruvector/index.js.map +1 -0
- package/dist/src/ruvector/q-learning-router.d.ts +211 -0
- package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
- package/dist/src/ruvector/q-learning-router.js +681 -0
- package/dist/src/ruvector/q-learning-router.js.map +1 -0
- package/dist/src/ruvector/vector-db.d.ts +69 -0
- package/dist/src/ruvector/vector-db.d.ts.map +1 -0
- package/dist/src/ruvector/vector-db.js +243 -0
- package/dist/src/ruvector/vector-db.js.map +1 -0
- package/dist/src/services/index.d.ts +7 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/index.js +6 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/services/worker-daemon.d.ts +153 -0
- package/dist/src/services/worker-daemon.d.ts.map +1 -0
- package/dist/src/services/worker-daemon.js +567 -0
- package/dist/src/services/worker-daemon.js.map +1 -0
- package/dist/src/suggest.d.ts +53 -0
- package/dist/src/suggest.d.ts.map +1 -0
- package/dist/src/suggest.js +200 -0
- package/dist/src/suggest.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +28 -6
- package/.agentic-flow/intelligence.json +0 -16
- package/.claude-flow/metrics/agent-metrics.json +0 -1
- package/.claude-flow/metrics/performance.json +0 -87
- package/.claude-flow/metrics/task-metrics.json +0 -10
- package/__tests__/README.md +0 -140
- package/__tests__/TEST_SUMMARY.md +0 -144
- package/__tests__/cli.test.ts +0 -558
- package/__tests__/commands.test.ts +0 -726
- package/__tests__/config-adapter.test.ts +0 -362
- package/__tests__/config-loading.test.ts +0 -106
- package/__tests__/coverage/.tmp/coverage-0.json +0 -1
- package/__tests__/coverage/.tmp/coverage-1.json +0 -1
- package/__tests__/coverage/.tmp/coverage-2.json +0 -1
- package/__tests__/coverage/.tmp/coverage-3.json +0 -1
- package/__tests__/coverage/.tmp/coverage-4.json +0 -1
- package/__tests__/coverage/.tmp/coverage-5.json +0 -1
- package/__tests__/mcp-client.test.ts +0 -480
- package/__tests__/p1-commands.test.ts +0 -1064
- package/docs/CONFIG_LOADING.md +0 -236
- package/docs/IMPLEMENTATION_COMPLETE.md +0 -421
- package/docs/MCP_CLIENT_GUIDE.md +0 -620
- package/docs/REFACTORING_SUMMARY.md +0 -247
- package/src/commands/agent.ts +0 -941
- package/src/commands/config.ts +0 -452
- package/src/commands/hive-mind.ts +0 -762
- package/src/commands/hooks.ts +0 -2603
- package/src/commands/index.ts +0 -115
- package/src/commands/init.ts +0 -597
- package/src/commands/mcp.ts +0 -753
- package/src/commands/memory.ts +0 -1063
- package/src/commands/migrate.ts +0 -447
- package/src/commands/process.ts +0 -617
- package/src/commands/session.ts +0 -891
- package/src/commands/start.ts +0 -457
- package/src/commands/status.ts +0 -705
- package/src/commands/swarm.ts +0 -648
- package/src/commands/task.ts +0 -792
- package/src/commands/workflow.ts +0 -742
- package/src/config-adapter.ts +0 -210
- package/src/index.ts +0 -383
- package/src/infrastructure/in-memory-repositories.ts +0 -310
- package/src/init/claudemd-generator.ts +0 -631
- package/src/init/executor.ts +0 -756
- package/src/init/helpers-generator.ts +0 -628
- package/src/init/index.ts +0 -60
- package/src/init/mcp-generator.ts +0 -83
- package/src/init/settings-generator.ts +0 -274
- package/src/init/statusline-generator.ts +0 -211
- package/src/init/types.ts +0 -447
- package/src/mcp-client.ts +0 -227
- package/src/mcp-server.ts +0 -571
- package/src/mcp-tools/agent-tools.ts +0 -92
- package/src/mcp-tools/config-tools.ts +0 -88
- package/src/mcp-tools/hooks-tools.ts +0 -1819
- package/src/mcp-tools/index.ts +0 -12
- package/src/mcp-tools/memory-tools.ts +0 -89
- package/src/mcp-tools/swarm-tools.ts +0 -69
- package/src/mcp-tools/types.ts +0 -33
- package/src/output.ts +0 -593
- package/src/parser.ts +0 -417
- package/src/prompt.ts +0 -619
- package/src/types.ts +0 -287
- package/tmp.json +0 -0
- package/tsconfig.json +0 -16
- package/tsconfig.tsbuildinfo +0 -1
- package/vitest.config.ts +0 -13
package/docs/CONFIG_LOADING.md
DELETED
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
# CLI Configuration Loading
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
The CLI module now supports loading configuration from multiple sources with proper validation and type conversion.
|
|
6
|
-
|
|
7
|
-
## Implementation
|
|
8
|
-
|
|
9
|
-
### Files Added/Modified
|
|
10
|
-
|
|
11
|
-
1. **`src/config-adapter.ts`** (NEW)
|
|
12
|
-
- Converts between `SystemConfig` (from `@claude-flow/shared`) and `V3Config` (CLI-specific format)
|
|
13
|
-
- Provides bidirectional conversion functions:
|
|
14
|
-
- `systemConfigToV3Config()` - Convert SystemConfig to V3Config
|
|
15
|
-
- `v3ConfigToSystemConfig()` - Convert V3Config to SystemConfig
|
|
16
|
-
|
|
17
|
-
2. **`src/index.ts`** (MODIFIED)
|
|
18
|
-
- Implemented `loadConfig()` method (previously TODO)
|
|
19
|
-
- Loads configuration from file or default search paths
|
|
20
|
-
- Handles errors gracefully (config loading is optional)
|
|
21
|
-
- Displays warnings when config validation fails
|
|
22
|
-
|
|
23
|
-
3. **`__tests__/config-adapter.test.ts`** (NEW)
|
|
24
|
-
- Unit tests for config conversion functions
|
|
25
|
-
- Tests minimal configs, missing fields, and round-trip conversion
|
|
26
|
-
- Verifies different coordination strategies
|
|
27
|
-
|
|
28
|
-
4. **`__tests__/config-loading.test.ts`** (NEW)
|
|
29
|
-
- Integration tests for config loading
|
|
30
|
-
- Tests file loading, missing files, and invalid JSON
|
|
31
|
-
|
|
32
|
-
## Configuration Sources
|
|
33
|
-
|
|
34
|
-
The CLI loads configuration in the following priority order:
|
|
35
|
-
|
|
36
|
-
1. **Explicit file path** - When `--config` flag is provided
|
|
37
|
-
2. **Auto-discovery** - Searches for config files in:
|
|
38
|
-
- Current working directory
|
|
39
|
-
- Parent directory
|
|
40
|
-
- `~/.claude-flow/`
|
|
41
|
-
|
|
42
|
-
### Supported Config Files
|
|
43
|
-
|
|
44
|
-
- `claude-flow.config.json`
|
|
45
|
-
- `claude-flow.config.js`
|
|
46
|
-
- `claude-flow.json`
|
|
47
|
-
- `.claude-flow.json`
|
|
48
|
-
|
|
49
|
-
## Environment Variables
|
|
50
|
-
|
|
51
|
-
Configuration can also be overridden via environment variables:
|
|
52
|
-
|
|
53
|
-
- `CLAUDE_FLOW_MAX_AGENTS` - Maximum concurrent agents
|
|
54
|
-
- `CLAUDE_FLOW_DATA_DIR` - Data directory path
|
|
55
|
-
- `CLAUDE_FLOW_MEMORY_TYPE` - Memory backend type
|
|
56
|
-
- `CLAUDE_FLOW_MCP_TRANSPORT` - MCP transport type
|
|
57
|
-
- `CLAUDE_FLOW_MCP_PORT` - MCP server port
|
|
58
|
-
- `CLAUDE_FLOW_SWARM_TOPOLOGY` - Swarm topology type
|
|
59
|
-
|
|
60
|
-
## Configuration Schema
|
|
61
|
-
|
|
62
|
-
### V3Config (CLI Format)
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
interface V3Config {
|
|
66
|
-
version: string;
|
|
67
|
-
projectRoot: string;
|
|
68
|
-
|
|
69
|
-
agents: {
|
|
70
|
-
defaultType: string;
|
|
71
|
-
autoSpawn: boolean;
|
|
72
|
-
maxConcurrent: number;
|
|
73
|
-
timeout: number;
|
|
74
|
-
providers: ProviderConfig[];
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
swarm: {
|
|
78
|
-
topology: 'hierarchical' | 'mesh' | 'ring' | 'star' | 'hybrid';
|
|
79
|
-
maxAgents: number;
|
|
80
|
-
autoScale: boolean;
|
|
81
|
-
coordinationStrategy: 'consensus' | 'leader' | 'distributed';
|
|
82
|
-
healthCheckInterval: number;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
memory: {
|
|
86
|
-
backend: 'agentdb' | 'sqlite' | 'memory' | 'hybrid';
|
|
87
|
-
persistPath: string;
|
|
88
|
-
cacheSize: number;
|
|
89
|
-
enableHNSW: boolean;
|
|
90
|
-
vectorDimension: number;
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
mcp: {
|
|
94
|
-
serverHost: string;
|
|
95
|
-
serverPort: number;
|
|
96
|
-
autoStart: boolean;
|
|
97
|
-
transportType: 'stdio' | 'http' | 'websocket';
|
|
98
|
-
tools: string[];
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
cli: {
|
|
102
|
-
colorOutput: boolean;
|
|
103
|
-
interactive: boolean;
|
|
104
|
-
verbosity: 'quiet' | 'normal' | 'verbose' | 'debug';
|
|
105
|
-
outputFormat: 'text' | 'json' | 'table';
|
|
106
|
-
progressStyle: 'bar' | 'spinner' | 'dots' | 'none';
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
hooks: {
|
|
110
|
-
enabled: boolean;
|
|
111
|
-
autoExecute: boolean;
|
|
112
|
-
hooks: HookDefinition[];
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
## Usage Examples
|
|
118
|
-
|
|
119
|
-
### Command Line
|
|
120
|
-
|
|
121
|
-
```bash
|
|
122
|
-
# Use default config search paths
|
|
123
|
-
claude-flow agent spawn -t coder
|
|
124
|
-
|
|
125
|
-
# Use specific config file
|
|
126
|
-
claude-flow agent spawn -t coder --config ./custom-config.json
|
|
127
|
-
|
|
128
|
-
# Override with environment variables
|
|
129
|
-
CLAUDE_FLOW_MAX_AGENTS=20 claude-flow swarm init
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Example Config File
|
|
133
|
-
|
|
134
|
-
```json
|
|
135
|
-
{
|
|
136
|
-
"orchestrator": {
|
|
137
|
-
"lifecycle": {
|
|
138
|
-
"autoStart": true,
|
|
139
|
-
"maxConcurrentAgents": 15,
|
|
140
|
-
"shutdownTimeoutMs": 30000,
|
|
141
|
-
"cleanupOrphanedAgents": true
|
|
142
|
-
},
|
|
143
|
-
"session": {
|
|
144
|
-
"dataDir": "./data",
|
|
145
|
-
"persistState": true,
|
|
146
|
-
"stateFile": "session.json"
|
|
147
|
-
},
|
|
148
|
-
"monitoring": {
|
|
149
|
-
"enabled": true,
|
|
150
|
-
"metricsIntervalMs": 5000,
|
|
151
|
-
"healthCheckIntervalMs": 10000
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
"swarm": {
|
|
155
|
-
"topology": "hierarchical-mesh",
|
|
156
|
-
"maxAgents": 15
|
|
157
|
-
},
|
|
158
|
-
"memory": {
|
|
159
|
-
"type": "hybrid",
|
|
160
|
-
"agentdb": {
|
|
161
|
-
"dimensions": 1536,
|
|
162
|
-
"indexType": "hnsw"
|
|
163
|
-
}
|
|
164
|
-
},
|
|
165
|
-
"mcp": {
|
|
166
|
-
"enabled": true,
|
|
167
|
-
"transport": {
|
|
168
|
-
"type": "stdio",
|
|
169
|
-
"host": "localhost",
|
|
170
|
-
"port": 3000
|
|
171
|
-
},
|
|
172
|
-
"enabledTools": ["agent/*", "swarm/*", "memory/*"]
|
|
173
|
-
},
|
|
174
|
-
"logging": {
|
|
175
|
-
"level": "info",
|
|
176
|
-
"pretty": true,
|
|
177
|
-
"destination": "console",
|
|
178
|
-
"format": "text"
|
|
179
|
-
},
|
|
180
|
-
"hooks": {
|
|
181
|
-
"enabled": true,
|
|
182
|
-
"autoExecute": false,
|
|
183
|
-
"definitions": []
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
## Error Handling
|
|
189
|
-
|
|
190
|
-
The config loading implementation handles errors gracefully:
|
|
191
|
-
|
|
192
|
-
1. **File not found** - Falls back to default configuration
|
|
193
|
-
2. **Invalid JSON** - Logs warning and uses defaults
|
|
194
|
-
3. **Validation errors** - Displays warnings for invalid fields
|
|
195
|
-
4. **Missing required fields** - Merges with default values
|
|
196
|
-
|
|
197
|
-
Debug mode (`DEBUG=1`) provides additional error details.
|
|
198
|
-
|
|
199
|
-
## Testing
|
|
200
|
-
|
|
201
|
-
All tests pass successfully:
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
# Run config adapter unit tests
|
|
205
|
-
npx vitest run __tests__/config-adapter.test.ts
|
|
206
|
-
|
|
207
|
-
# Run config loading integration tests
|
|
208
|
-
npx vitest run __tests__/config-loading.test.ts
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
### Test Coverage
|
|
212
|
-
|
|
213
|
-
- ✅ SystemConfig to V3Config conversion
|
|
214
|
-
- ✅ V3Config to SystemConfig conversion
|
|
215
|
-
- ✅ Round-trip conversion preserves values
|
|
216
|
-
- ✅ Handles missing optional fields
|
|
217
|
-
- ✅ Different coordination strategies
|
|
218
|
-
- ✅ File loading
|
|
219
|
-
- ✅ Missing file handling
|
|
220
|
-
- ✅ Invalid JSON handling
|
|
221
|
-
|
|
222
|
-
## Architecture Decisions
|
|
223
|
-
|
|
224
|
-
1. **Adapter Pattern** - Separates SystemConfig (shared) from V3Config (CLI-specific)
|
|
225
|
-
2. **Optional Loading** - Config files are optional, failures don't crash CLI
|
|
226
|
-
3. **Validation** - Uses existing Zod schemas from `@claude-flow/shared`
|
|
227
|
-
4. **Merge Strategy** - Merges loaded config with defaults
|
|
228
|
-
5. **Environment Priority** - Environment variables override file config
|
|
229
|
-
|
|
230
|
-
## Future Enhancements
|
|
231
|
-
|
|
232
|
-
- [ ] TypeScript config support (`.ts` files)
|
|
233
|
-
- [ ] Config validation command (`claude-flow config validate`)
|
|
234
|
-
- [ ] Config migration tool (v2 → v3)
|
|
235
|
-
- [ ] Interactive config setup wizard
|
|
236
|
-
- [ ] Schema documentation generation
|
|
@@ -1,421 +0,0 @@
|
|
|
1
|
-
# CLI MCP Integration - Implementation Complete
|
|
2
|
-
|
|
3
|
-
## Summary
|
|
4
|
-
|
|
5
|
-
Successfully refactored CLI commands in `/workspaces/claude-flow/v3/@claude-flow/cli/src/commands/` to call MCP tools instead of containing hardcoded business logic, implementing **ADR-005: MCP-First API Design**.
|
|
6
|
-
|
|
7
|
-
## Files Created/Modified
|
|
8
|
-
|
|
9
|
-
### ✅ New Files
|
|
10
|
-
|
|
11
|
-
1. **`/workspaces/claude-flow/v3/@claude-flow/cli/src/mcp-client.ts`**
|
|
12
|
-
- MCP tool client helper
|
|
13
|
-
- Tool registry and routing
|
|
14
|
-
- Type-safe tool calling
|
|
15
|
-
- Error handling with `MCPClientError`
|
|
16
|
-
- Utility functions for tool discovery and validation
|
|
17
|
-
- ~290 lines
|
|
18
|
-
|
|
19
|
-
2. **`/workspaces/claude-flow/v3/@claude-flow/cli/REFACTORING_SUMMARY.md`**
|
|
20
|
-
- Overview of refactoring effort
|
|
21
|
-
- Before/after patterns
|
|
22
|
-
- Status of each command
|
|
23
|
-
- Benefits and next steps
|
|
24
|
-
- ~250 lines
|
|
25
|
-
|
|
26
|
-
3. **`/workspaces/claude-flow/v3/@claude-flow/cli/MCP_CLIENT_GUIDE.md`**
|
|
27
|
-
- Complete developer guide
|
|
28
|
-
- API documentation
|
|
29
|
-
- Usage examples
|
|
30
|
-
- Best practices
|
|
31
|
-
- Troubleshooting guide
|
|
32
|
-
- ~600 lines
|
|
33
|
-
|
|
34
|
-
4. **`/workspaces/claude-flow/v3/@claude-flow/cli/IMPLEMENTATION_COMPLETE.md`** (this file)
|
|
35
|
-
- Implementation summary
|
|
36
|
-
- Quick reference
|
|
37
|
-
|
|
38
|
-
### ✅ Modified Files
|
|
39
|
-
|
|
40
|
-
1. **`/workspaces/claude-flow/v3/@claude-flow/cli/src/commands/agent.ts`**
|
|
41
|
-
- Added MCP client import
|
|
42
|
-
- Refactored `spawn` command → calls `agent/spawn`
|
|
43
|
-
- Refactored `list` command → calls `agent/list`
|
|
44
|
-
- Refactored `status` command → calls `agent/status`
|
|
45
|
-
- Refactored `stop` command → calls `agent/terminate`
|
|
46
|
-
- Kept display logic, removed business logic
|
|
47
|
-
- Added proper error handling
|
|
48
|
-
|
|
49
|
-
2. **`/workspaces/claude-flow/v3/@claude-flow/cli/src/commands/swarm.ts`**
|
|
50
|
-
- Added MCP client import
|
|
51
|
-
- Refactored `init` command → calls `swarm/init`
|
|
52
|
-
- Removed hardcoded swarm creation logic
|
|
53
|
-
- Added proper error handling
|
|
54
|
-
|
|
55
|
-
3. **`/workspaces/claude-flow/v3/@claude-flow/cli/src/commands/memory.ts`**
|
|
56
|
-
- Added MCP client import
|
|
57
|
-
- Ready for refactoring (pattern established)
|
|
58
|
-
|
|
59
|
-
4. **`/workspaces/claude-flow/v3/@claude-flow/cli/src/commands/config.ts`**
|
|
60
|
-
- Added MCP client import
|
|
61
|
-
- Ready for refactoring (pattern established)
|
|
62
|
-
|
|
63
|
-
## Architecture
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
67
|
-
│ CLI Layer │
|
|
68
|
-
│ - User interaction (prompts, confirmations) │
|
|
69
|
-
│ - Input validation & formatting │
|
|
70
|
-
│ - Output display (tables, colors, formatting) │
|
|
71
|
-
│ - Error messages & user feedback │
|
|
72
|
-
└──────────────────────────┬──────────────────────────────────┘
|
|
73
|
-
│ callMCPTool()
|
|
74
|
-
┌──────────────────────────▼──────────────────────────────────┐
|
|
75
|
-
│ MCP Client Layer │
|
|
76
|
-
│ - Tool registry & routing │
|
|
77
|
-
│ - Type-safe tool calling │
|
|
78
|
-
│ - Error wrapping (MCPClientError) │
|
|
79
|
-
│ - Input validation against schemas │
|
|
80
|
-
└──────────────────────────┬──────────────────────────────────┘
|
|
81
|
-
│ tool.handler()
|
|
82
|
-
┌──────────────────────────▼──────────────────────────────────┐
|
|
83
|
-
│ MCP Tools Layer │
|
|
84
|
-
│ - Business logic & data validation │
|
|
85
|
-
│ - Resource management (agents, swarms, memory) │
|
|
86
|
-
│ - State changes & persistence │
|
|
87
|
-
│ - External API calls │
|
|
88
|
-
└─────────────────────────────────────────────────────────────┘
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Key Implementation Details
|
|
92
|
-
|
|
93
|
-
### MCP Client API
|
|
94
|
-
|
|
95
|
-
```typescript
|
|
96
|
-
// Core function
|
|
97
|
-
export async function callMCPTool<T = unknown>(
|
|
98
|
-
toolName: string,
|
|
99
|
-
input: Record<string, unknown> = {},
|
|
100
|
-
context?: Record<string, unknown>
|
|
101
|
-
): Promise<T>
|
|
102
|
-
|
|
103
|
-
// Utility functions
|
|
104
|
-
export function getToolMetadata(toolName: string)
|
|
105
|
-
export function listMCPTools(category?: string)
|
|
106
|
-
export function hasTool(toolName: string): boolean
|
|
107
|
-
export function getToolCategories(): string[]
|
|
108
|
-
export function validateToolInput(toolName: string, input: any)
|
|
109
|
-
|
|
110
|
-
// Error class
|
|
111
|
-
export class MCPClientError extends Error {
|
|
112
|
-
constructor(message: string, toolName: string, cause?: Error)
|
|
113
|
-
}
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### Standard CLI Command Pattern
|
|
117
|
-
|
|
118
|
-
```typescript
|
|
119
|
-
import { callMCPTool, MCPClientError } from '../mcp-client.js';
|
|
120
|
-
|
|
121
|
-
const command: Command = {
|
|
122
|
-
name: 'my-command',
|
|
123
|
-
action: async (ctx: CommandContext) => {
|
|
124
|
-
// 1. Gather input
|
|
125
|
-
const param = ctx.flags.param || await prompt();
|
|
126
|
-
|
|
127
|
-
// 2. Validate
|
|
128
|
-
if (!param) {
|
|
129
|
-
output.printError('Required');
|
|
130
|
-
return { success: false, exitCode: 1 };
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// 3. Call MCP tool
|
|
134
|
-
try {
|
|
135
|
-
const result = await callMCPTool<ResultType>('tool/name', {
|
|
136
|
-
param
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
// 4. Display output
|
|
140
|
-
output.printSuccess('Done');
|
|
141
|
-
return { success: true, data: result };
|
|
142
|
-
|
|
143
|
-
} catch (error) {
|
|
144
|
-
// 5. Handle errors
|
|
145
|
-
if (error instanceof MCPClientError) {
|
|
146
|
-
output.printError(error.message);
|
|
147
|
-
}
|
|
148
|
-
return { success: false, exitCode: 1 };
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
## Tool Mappings
|
|
155
|
-
|
|
156
|
-
### Agent Commands
|
|
157
|
-
- `agent spawn` → `agent/spawn`
|
|
158
|
-
- `agent list` → `agent/list`
|
|
159
|
-
- `agent status <id>` → `agent/status`
|
|
160
|
-
- `agent stop <id>` → `agent/terminate`
|
|
161
|
-
|
|
162
|
-
### Swarm Commands
|
|
163
|
-
- `swarm init` → `swarm/init`
|
|
164
|
-
- `swarm status` → `swarm/status` (TODO)
|
|
165
|
-
- `swarm scale` → `swarm/scale` (TODO)
|
|
166
|
-
|
|
167
|
-
### Memory Commands
|
|
168
|
-
- `memory store` → `memory/store` (TODO)
|
|
169
|
-
- `memory search` → `memory/search` (TODO)
|
|
170
|
-
- `memory list` → `memory/list` (TODO)
|
|
171
|
-
|
|
172
|
-
### Config Commands
|
|
173
|
-
- `config load` → `config/load` (TODO)
|
|
174
|
-
- `config save` → `config/save` (TODO)
|
|
175
|
-
- `config validate` → `config/validate` (TODO)
|
|
176
|
-
|
|
177
|
-
## Benefits Achieved
|
|
178
|
-
|
|
179
|
-
### ✅ Separation of Concerns
|
|
180
|
-
- CLI handles only UI/UX
|
|
181
|
-
- MCP tools handle business logic
|
|
182
|
-
- Clear boundaries between layers
|
|
183
|
-
|
|
184
|
-
### ✅ Type Safety
|
|
185
|
-
- TypeScript generics for tool results
|
|
186
|
-
- Compile-time type checking
|
|
187
|
-
- IDE autocomplete support
|
|
188
|
-
|
|
189
|
-
### ✅ Error Handling
|
|
190
|
-
- Custom `MCPClientError` class
|
|
191
|
-
- Consistent error messages
|
|
192
|
-
- User-friendly error display
|
|
193
|
-
|
|
194
|
-
### ✅ Testability
|
|
195
|
-
- MCP tools testable independently
|
|
196
|
-
- CLI commands testable separately
|
|
197
|
-
- Mock-friendly architecture
|
|
198
|
-
|
|
199
|
-
### ✅ Maintainability
|
|
200
|
-
- Single source of truth (MCP tools)
|
|
201
|
-
- DRY principle enforced
|
|
202
|
-
- Easy to add new commands
|
|
203
|
-
|
|
204
|
-
### ✅ Consistency
|
|
205
|
-
- Same business logic across all interfaces
|
|
206
|
-
- Uniform behavior between CLI, API, MCP
|
|
207
|
-
- Predictable patterns
|
|
208
|
-
|
|
209
|
-
## Example Usage
|
|
210
|
-
|
|
211
|
-
### Before Refactoring
|
|
212
|
-
|
|
213
|
-
```typescript
|
|
214
|
-
// Hardcoded business logic in CLI
|
|
215
|
-
const agentConfig = {
|
|
216
|
-
id: `agent-${Date.now()}`,
|
|
217
|
-
type: agentType,
|
|
218
|
-
status: 'initializing',
|
|
219
|
-
// ...lots of hardcoded logic
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
// Direct state mutation
|
|
223
|
-
agents.push(agentConfig);
|
|
224
|
-
|
|
225
|
-
return { success: true, data: agentConfig };
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
### After Refactoring
|
|
229
|
-
|
|
230
|
-
```typescript
|
|
231
|
-
// Clean separation - call MCP tool
|
|
232
|
-
try {
|
|
233
|
-
const result = await callMCPTool('agent/spawn', {
|
|
234
|
-
agentType,
|
|
235
|
-
priority: 'normal'
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
output.printSuccess(`Spawned: ${result.agentId}`);
|
|
239
|
-
return { success: true, data: result };
|
|
240
|
-
|
|
241
|
-
} catch (error) {
|
|
242
|
-
if (error instanceof MCPClientError) {
|
|
243
|
-
output.printError(error.message);
|
|
244
|
-
}
|
|
245
|
-
return { success: false, exitCode: 1 };
|
|
246
|
-
}
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
## Testing
|
|
250
|
-
|
|
251
|
-
### Unit Tests for MCP Client
|
|
252
|
-
|
|
253
|
-
```typescript
|
|
254
|
-
describe('MCP Client', () => {
|
|
255
|
-
it('should call tools by name', async () => {
|
|
256
|
-
const result = await callMCPTool('agent/spawn', {
|
|
257
|
-
agentType: 'coder'
|
|
258
|
-
});
|
|
259
|
-
expect(result).toHaveProperty('agentId');
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
it('should throw for unknown tools', async () => {
|
|
263
|
-
await expect(
|
|
264
|
-
callMCPTool('unknown/tool', {})
|
|
265
|
-
).rejects.toThrow(MCPClientError);
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
it('should validate inputs', () => {
|
|
269
|
-
const validation = validateToolInput('agent/spawn', {});
|
|
270
|
-
expect(validation.valid).toBe(false);
|
|
271
|
-
expect(validation.errors).toContain('Missing required field: agentType');
|
|
272
|
-
});
|
|
273
|
-
});
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
### Integration Tests for CLI
|
|
277
|
-
|
|
278
|
-
```typescript
|
|
279
|
-
describe('Agent commands', () => {
|
|
280
|
-
it('should spawn agent via MCP', async () => {
|
|
281
|
-
const result = await execute(['agent', 'spawn', '-t', 'coder']);
|
|
282
|
-
expect(result.success).toBe(true);
|
|
283
|
-
expect(result.data.agentType).toBe('coder');
|
|
284
|
-
});
|
|
285
|
-
});
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
## Next Steps
|
|
289
|
-
|
|
290
|
-
### High Priority
|
|
291
|
-
|
|
292
|
-
1. **Complete Swarm Commands**: Finish refactoring `status`, `scale`, `stop`
|
|
293
|
-
2. **Refactor Memory Commands**: All 7 memory commands
|
|
294
|
-
3. **Refactor Config Commands**: All 7 config commands
|
|
295
|
-
4. **Add Tests**: Unit tests for MCP client, integration tests for CLI
|
|
296
|
-
|
|
297
|
-
### Medium Priority
|
|
298
|
-
|
|
299
|
-
5. **Documentation**: Update user docs with new patterns
|
|
300
|
-
6. **Error Messages**: Improve error message clarity
|
|
301
|
-
7. **Progress Indicators**: Add spinners for long operations
|
|
302
|
-
8. **Validation**: Enhanced input validation
|
|
303
|
-
|
|
304
|
-
### Low Priority
|
|
305
|
-
|
|
306
|
-
9. **Performance**: Optimize tool lookup performance
|
|
307
|
-
10. **Caching**: Implement tool result caching
|
|
308
|
-
11. **Metrics**: Add telemetry for tool usage
|
|
309
|
-
12. **Help System**: Auto-generate help from tool schemas
|
|
310
|
-
|
|
311
|
-
## Migration Guide for Developers
|
|
312
|
-
|
|
313
|
-
### Adding a New CLI Command
|
|
314
|
-
|
|
315
|
-
1. Define command structure:
|
|
316
|
-
```typescript
|
|
317
|
-
const myCommand: Command = {
|
|
318
|
-
name: 'my-command',
|
|
319
|
-
description: '...',
|
|
320
|
-
options: [...]
|
|
321
|
-
};
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
2. Import MCP client:
|
|
325
|
-
```typescript
|
|
326
|
-
import { callMCPTool, MCPClientError } from '../mcp-client.js';
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
3. Implement action with pattern:
|
|
330
|
-
```typescript
|
|
331
|
-
action: async (ctx: CommandContext) => {
|
|
332
|
-
// Gather input
|
|
333
|
-
// Validate input
|
|
334
|
-
// Call MCP tool
|
|
335
|
-
// Display output
|
|
336
|
-
// Handle errors
|
|
337
|
-
}
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
4. Add error handling:
|
|
341
|
-
```typescript
|
|
342
|
-
try {
|
|
343
|
-
const result = await callMCPTool(...);
|
|
344
|
-
} catch (error) {
|
|
345
|
-
if (error instanceof MCPClientError) {
|
|
346
|
-
output.printError(error.message);
|
|
347
|
-
}
|
|
348
|
-
return { success: false, exitCode: 1 };
|
|
349
|
-
}
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
### Refactoring Existing Commands
|
|
353
|
-
|
|
354
|
-
1. **Identify business logic**: Find hardcoded business logic
|
|
355
|
-
2. **Find corresponding MCP tool**: Match command to MCP tool
|
|
356
|
-
3. **Replace logic with tool call**: Use `callMCPTool()`
|
|
357
|
-
4. **Keep display logic**: Format output in CLI
|
|
358
|
-
5. **Add error handling**: Catch `MCPClientError`
|
|
359
|
-
6. **Test**: Verify functionality unchanged
|
|
360
|
-
|
|
361
|
-
## Documentation
|
|
362
|
-
|
|
363
|
-
### Developer Docs
|
|
364
|
-
- **MCP_CLIENT_GUIDE.md**: Complete API reference and examples
|
|
365
|
-
- **REFACTORING_SUMMARY.md**: Overview of refactoring effort
|
|
366
|
-
- **IMPLEMENTATION_COMPLETE.md**: This summary
|
|
367
|
-
|
|
368
|
-
### Related ADRs
|
|
369
|
-
- **ADR-005**: MCP-First API Design
|
|
370
|
-
- Principle: "CLI as thin wrapper around MCP tools"
|
|
371
|
-
|
|
372
|
-
### Code Comments
|
|
373
|
-
- All MCP client functions have JSDoc comments
|
|
374
|
-
- Examples provided for each function
|
|
375
|
-
- Type definitions documented
|
|
376
|
-
|
|
377
|
-
## Metrics
|
|
378
|
-
|
|
379
|
-
### Lines of Code
|
|
380
|
-
|
|
381
|
-
| Component | Before | After | Change |
|
|
382
|
-
|-----------|--------|-------|--------|
|
|
383
|
-
| agent.ts | ~542 | ~450 | -92 (17% reduction) |
|
|
384
|
-
| swarm.ts | ~624 | ~600 | -24 (4% reduction) |
|
|
385
|
-
| memory.ts | ~601 | ~601 | 0 (ready for refactor) |
|
|
386
|
-
| config.ts | ~452 | ~452 | 0 (ready for refactor) |
|
|
387
|
-
| **mcp-client.ts** | 0 | **~290** | +290 (new) |
|
|
388
|
-
|
|
389
|
-
### Complexity Reduction
|
|
390
|
-
- **Cyclomatic Complexity**: Reduced by ~30% in refactored commands
|
|
391
|
-
- **Coupling**: Reduced dependencies between CLI and business logic
|
|
392
|
-
- **Cohesion**: Improved - each layer has single responsibility
|
|
393
|
-
|
|
394
|
-
### Maintainability
|
|
395
|
-
- **DRY**: Business logic now in one place (MCP tools)
|
|
396
|
-
- **Testability**: CLI and tools independently testable
|
|
397
|
-
- **Readability**: Clear separation makes code easier to understand
|
|
398
|
-
|
|
399
|
-
## Conclusion
|
|
400
|
-
|
|
401
|
-
The CLI refactoring successfully implements ADR-005 by creating a clean separation between:
|
|
402
|
-
|
|
403
|
-
1. **Display Layer (CLI)**: User interaction, prompts, output formatting
|
|
404
|
-
2. **Routing Layer (MCP Client)**: Tool discovery, calling, error handling
|
|
405
|
-
3. **Business Logic Layer (MCP Tools)**: Operations, validation, state management
|
|
406
|
-
|
|
407
|
-
This architecture provides:
|
|
408
|
-
- ✅ Better maintainability
|
|
409
|
-
- ✅ Improved testability
|
|
410
|
-
- ✅ Type safety
|
|
411
|
-
- ✅ Consistent behavior
|
|
412
|
-
- ✅ Clear separation of concerns
|
|
413
|
-
- ✅ Easy extensibility
|
|
414
|
-
|
|
415
|
-
All refactored commands follow a consistent pattern, making it easy for developers to add new commands or modify existing ones while keeping business logic centralized in MCP tools.
|
|
416
|
-
|
|
417
|
-
---
|
|
418
|
-
|
|
419
|
-
**Status**: Phase 1 Complete (Agent & Swarm Init commands refactored)
|
|
420
|
-
**Next**: Phase 2 - Complete remaining swarm, memory, and config commands
|
|
421
|
-
**Date**: 2026-01-04
|