316 lines
7.9 KiB
Markdown
316 lines
7.9 KiB
Markdown
# Hotfix v1.2.1 - Critical Bug Fixes
|
|
|
|
**Release Date:** 2025-10-06
|
|
**Type:** Patch Release
|
|
**Fixes:** 2 critical issues found in v1.2.0
|
|
|
|
---
|
|
|
|
## Issues Fixed
|
|
|
|
### Issue #1: CLI Router Not Wired 🔴 CRITICAL - FIXED
|
|
|
|
**Problem:** The main CLI didn't route `mcp` subcommands to `mcp-manager.js`
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
npx agentic-flow mcp add # ❌ Started MCP server instead
|
|
npx agentic-flow mcp list # ❌ Started MCP server instead
|
|
```
|
|
|
|
**Root Cause:** The CLI parser detected `mcp` as a mode but didn't distinguish between MCP manager commands (add, list, remove) and MCP server commands (start, stop, status).
|
|
|
|
**Fix Applied:**
|
|
- Updated `src/utils/cli.ts` to detect MCP manager subcommands
|
|
- Added new mode `'mcp-manager'` to CliOptions
|
|
- Added routing in `src/cli-proxy.ts` to spawn mcp-manager.js for manager commands
|
|
|
|
**Result:** ✅ FIXED
|
|
```bash
|
|
npx agentic-flow mcp list # ✅ Now shows configured servers
|
|
npx agentic-flow mcp add # ✅ Now adds servers to config
|
|
```
|
|
|
|
**Test Output:**
|
|
```
|
|
$ node dist/cli-proxy.js mcp list
|
|
Configured MCP Servers:
|
|
|
|
✅ strange-loops (enabled)
|
|
Type: local
|
|
Command: npx -y strange-loops mcp start
|
|
Description: Strange Loops MCP server for testing
|
|
```
|
|
|
|
---
|
|
|
|
### Issue #2: Model Optimization Filter 🟡 ENHANCEMENT - FIXED
|
|
|
|
**Problem:** `--optimize` flag selected models without tool support (DeepSeek R1)
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
npx agentic-flow --agent coder --task "..." --optimize
|
|
# Selected: DeepSeek R1 (doesn't support tool use)
|
|
# Error: Tools not available
|
|
```
|
|
|
|
**Root Cause:** Model optimizer didn't filter by tool-use capability. All agents have MCP tools available, so models must support function calling.
|
|
|
|
**Fix Applied:**
|
|
1. Added `supports_tools` field to all models in MODEL_DATABASE
|
|
2. Set `deepseek-r1: supports_tools: false` (confirmed no tool support)
|
|
3. Added `requiresTools` parameter to OptimizationCriteria
|
|
4. Added filtering logic in `ModelOptimizer.optimize()`
|
|
5. Set `requiresTools: true` in cli-proxy.ts when optimizing
|
|
|
|
**Result:** ✅ FIXED
|
|
|
|
**Test Output:**
|
|
```javascript
|
|
// Test 1: WITH tool requirement (as used in CLI)
|
|
ModelOptimizer.optimize({
|
|
agent: 'coder',
|
|
task: 'Simple hello world',
|
|
priority: 'cost',
|
|
requiresTools: true // <-- Filters out DeepSeek R1
|
|
});
|
|
// Selected: DeepSeek Chat V3.1 (supports tools)
|
|
|
|
// Test 2: WITHOUT tool requirement
|
|
ModelOptimizer.optimize({
|
|
agent: 'coder',
|
|
task: 'Simple hello world',
|
|
priority: 'cost',
|
|
requiresTools: false
|
|
});
|
|
// Selected: DeepSeek R1 (cheapest, no tools needed)
|
|
```
|
|
|
|
---
|
|
|
|
## Files Changed
|
|
|
|
### src/utils/cli.ts
|
|
**Changes:**
|
|
- Added detection for MCP manager commands (add, list, remove, etc.)
|
|
- Added new mode: `'mcp-manager'`
|
|
- Router now distinguishes between MCP manager and MCP server commands
|
|
|
|
```typescript
|
|
// Check for MCP command
|
|
if (args[0] === 'mcp') {
|
|
const mcpSubcommand = args[1];
|
|
|
|
// MCP Manager commands (CLI configuration)
|
|
const managerCommands = ['add', 'list', 'remove', 'enable', 'disable', 'update', 'test', 'info', 'export', 'import'];
|
|
|
|
if (managerCommands.includes(mcpSubcommand)) {
|
|
options.mode = 'mcp-manager';
|
|
return options;
|
|
}
|
|
|
|
// MCP Server commands (start/stop server)
|
|
options.mode = 'mcp';
|
|
options.mcpCommand = mcpSubcommand || 'start';
|
|
options.mcpServer = args[2] || 'all';
|
|
return options;
|
|
}
|
|
```
|
|
|
|
### src/cli-proxy.ts
|
|
**Changes:**
|
|
- Added routing for `'mcp-manager'` mode
|
|
- Spawns `mcp-manager.js` with proper args
|
|
- Added `requiresTools: true` to model optimization
|
|
|
|
```typescript
|
|
if (options.mode === 'mcp-manager') {
|
|
// Handle MCP manager commands (add, list, remove, etc.)
|
|
const { spawn } = await import('child_process');
|
|
const { resolve, dirname } = await import('path');
|
|
const { fileURLToPath } = await import('url');
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = dirname(__filename);
|
|
const mcpManagerPath = resolve(__dirname, './cli/mcp-manager.js');
|
|
|
|
// Pass all args after 'mcp' to mcp-manager
|
|
const mcpArgs = process.argv.slice(3);
|
|
|
|
const proc = spawn('node', [mcpManagerPath, ...mcpArgs], {
|
|
stdio: 'inherit'
|
|
});
|
|
|
|
proc.on('exit', (code) => {
|
|
process.exit(code || 0);
|
|
});
|
|
|
|
process.on('SIGINT', () => proc.kill('SIGINT'));
|
|
process.on('SIGTERM', () => proc.kill('SIGTERM'));
|
|
return;
|
|
}
|
|
```
|
|
|
|
```typescript
|
|
// Apply model optimization if requested
|
|
if (options.optimize && options.agent && options.task) {
|
|
const recommendation = ModelOptimizer.optimize({
|
|
agent: options.agent,
|
|
task: options.task,
|
|
priority: options.optimizePriority || 'balanced',
|
|
maxCostPerTask: options.maxCost,
|
|
requiresTools: true // Agents have MCP tools available, so require tool support
|
|
});
|
|
```
|
|
|
|
### src/utils/modelOptimizer.ts
|
|
**Changes:**
|
|
- Added `requiresTools?: boolean` to OptimizationCriteria interface
|
|
- Added `supports_tools` field to all models in MODEL_DATABASE
|
|
- Added filtering logic to exclude models without tool support when required
|
|
|
|
```typescript
|
|
export interface OptimizationCriteria {
|
|
agent: string;
|
|
task: string;
|
|
priority?: 'quality' | 'balanced' | 'cost' | 'speed' | 'privacy';
|
|
maxCostPerTask?: number;
|
|
requiresReasoning?: boolean;
|
|
requiresMultimodal?: boolean;
|
|
requiresTools?: boolean; // NEW: Filter models that support tool/function calling
|
|
taskComplexity?: 'simple' | 'moderate' | 'complex' | 'expert';
|
|
}
|
|
```
|
|
|
|
```typescript
|
|
// Filter models that support tools if required
|
|
let availableModels = Object.entries(MODEL_DATABASE);
|
|
|
|
if (criteria.requiresTools) {
|
|
availableModels = availableModels.filter(([key, model]) => model.supports_tools !== false);
|
|
logger.info(`Filtered to ${availableModels.length} models with tool support`);
|
|
}
|
|
|
|
// Score all models
|
|
const scoredModels = availableModels.map(([key, model]) => {
|
|
// ... scoring logic
|
|
});
|
|
```
|
|
|
|
**Model Database Updates:**
|
|
```typescript
|
|
'deepseek-r1': {
|
|
// ...
|
|
supports_tools: false, // DeepSeek R1 does NOT support tool/function calling
|
|
weaknesses: ['newer-model', 'no-tool-use'],
|
|
// ...
|
|
},
|
|
'deepseek-chat-v3': {
|
|
// ...
|
|
supports_tools: true,
|
|
// ...
|
|
},
|
|
// All other models: supports_tools: true (except local ONNX)
|
|
```
|
|
|
|
---
|
|
|
|
## Test Results
|
|
|
|
### Test 1: MCP CLI Routing ✅ PASS
|
|
```bash
|
|
# Before (v1.2.0):
|
|
$ npx agentic-flow mcp list
|
|
Starting MCP server... (WRONG)
|
|
|
|
# After (v1.2.1):
|
|
$ npx agentic-flow mcp list
|
|
Configured MCP Servers:
|
|
✅ strange-loops (enabled)
|
|
```
|
|
|
|
### Test 2: Model Optimizer Tool Filtering ✅ PASS
|
|
```javascript
|
|
// WITH tool requirement (default for CLI)
|
|
Selected: DeepSeek Chat V3.1 (supports tools) ✅
|
|
|
|
// WITHOUT tool requirement
|
|
Selected: DeepSeek R1 (no tools, cheaper) ✅
|
|
```
|
|
|
|
### Test 3: End-to-End Agent Execution ✅ PASS
|
|
```bash
|
|
$ npx agentic-flow --agent coder --task "Create calculator" --optimize
|
|
Selected: Claude Sonnet 4.5 (supports tools) ✅
|
|
Agent successfully used MCP tools ✅
|
|
```
|
|
|
|
---
|
|
|
|
## Breaking Changes
|
|
|
|
**None.** This is a patch release with bug fixes only.
|
|
|
|
---
|
|
|
|
## Upgrade Instructions
|
|
|
|
### For Users
|
|
```bash
|
|
# Update globally
|
|
npm install -g agentic-flow@1.2.1
|
|
|
|
# Or use npx (always uses latest)
|
|
npx agentic-flow mcp list
|
|
```
|
|
|
|
### Verify Fix
|
|
```bash
|
|
# Test MCP CLI routing
|
|
npx agentic-flow mcp list
|
|
|
|
# Test model optimization
|
|
npx agentic-flow --agent coder --task "test" --optimize
|
|
# Should NOT select DeepSeek R1
|
|
```
|
|
|
|
---
|
|
|
|
## Version History
|
|
|
|
| Version | Date | Changes |
|
|
|---------|------|---------|
|
|
| 1.2.1 | 2025-10-06 | **HOTFIX** - MCP CLI routing + model optimizer tool filtering |
|
|
| 1.2.0 | 2025-10-06 | MCP CLI for user-friendly configuration |
|
|
| 1.1.14 | 2025-10-05 | OpenRouter proxy fix (80% success rate) |
|
|
|
|
---
|
|
|
|
## Credits
|
|
|
|
**Reported By:** Testing and validation
|
|
**Fixed By:** Claude Code
|
|
**Release Type:** Patch (Point Release)
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
✅ **Both Issues Fixed**
|
|
- MCP CLI commands now route correctly
|
|
- Model optimizer filters by tool support
|
|
|
|
✅ **All Tests Pass**
|
|
- MCP list/add commands work
|
|
- Optimization selects tool-supporting models
|
|
|
|
✅ **Ready for NPM Publish**
|
|
- Version: 1.2.1
|
|
- Type: Patch release
|
|
- Breaking changes: None
|
|
|
|
---
|
|
|
|
**Status:** ✅ READY FOR RELEASE
|