@claude-flow/cli 3.1.0-alpha.9 → 3.5.1
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/.claude/agents/core/coder.md +1 -1
- package/.claude/agents/core/planner.md +2 -2
- package/.claude/agents/core/researcher.md +1 -1
- package/.claude/agents/core/reviewer.md +1 -1
- package/.claude/agents/core/tester.md +1 -1
- package/.claude/agents/data/data-ml-model.md +4 -4
- package/.claude/agents/development/dev-backend-api.md +4 -4
- package/.claude/agents/documentation/docs-api-openapi.md +4 -4
- package/.claude/agents/github/code-review-swarm.md +2 -2
- package/.claude/agents/github/issue-tracker.md +2 -2
- package/.claude/agents/github/pr-manager.md +2 -2
- package/.claude/agents/github/release-manager.md +2 -2
- package/.claude/agents/github/workflow-automation.md +2 -2
- package/.claude/agents/sparc/architecture.md +3 -3
- package/.claude/agents/sparc/pseudocode.md +2 -2
- package/.claude/agents/sparc/refinement.md +3 -3
- package/.claude/agents/sparc/specification.md +2 -2
- package/.claude/agents/swarm/adaptive-coordinator.md +1 -1
- package/.claude/agents/swarm/hierarchical-coordinator.md +1 -1
- package/.claude/agents/swarm/mesh-coordinator.md +1 -1
- package/.claude/agents/templates/base-template-generator.md +3 -3
- package/.claude/agents/templates/sparc-coordinator.md +3 -3
- package/.claude/helpers/auto-memory-hook.mjs +350 -0
- package/.claude/helpers/hook-handler.cjs +232 -0
- package/.claude/helpers/intelligence.cjs +916 -0
- package/.claude/helpers/session.js +8 -0
- package/.claude/helpers/statusline.cjs +96 -28
- package/.claude/settings.json +86 -141
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +2 -2
- package/.claude/skills/swarm-orchestration/SKILL.md +1 -1
- package/README.md +910 -475
- package/bin/preinstall.cjs +2 -0
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +45 -2
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +292 -82
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +48 -4
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/executor.d.ts +8 -2
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +315 -43
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.d.ts +18 -0
- package/dist/src/init/helpers-generator.d.ts.map +1 -1
- package/dist/src/init/helpers-generator.js +498 -0
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/mcp-generator.d.ts +0 -1
- package/dist/src/init/mcp-generator.d.ts.map +1 -1
- package/dist/src/init/mcp-generator.js +32 -16
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +138 -95
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.d.ts +16 -8
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +506 -930
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +8 -0
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js +7 -0
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +4 -0
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.d.ts +30 -0
- package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/agentdb-tools.js +557 -0
- package/dist/src/mcp-tools/agentdb-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 +184 -32
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +32 -27
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +34 -6
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +407 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge.js +1493 -0
- package/dist/src/memory/memory-bridge.js.map +1 -0
- package/dist/src/memory/memory-initializer.d.ts +3 -0
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +125 -1
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -1
- package/dist/src/ruvector/enhanced-model-router.js +25 -15
- package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
- package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
- package/dist/src/services/agentic-flow-bridge.d.ts.map +1 -0
- package/dist/src/services/agentic-flow-bridge.js +95 -0
- package/dist/src/services/agentic-flow-bridge.js.map +1 -0
- package/dist/src/services/ruvector-training.d.ts +2 -1
- package/dist/src/services/ruvector-training.d.ts.map +1 -1
- package/dist/src/services/ruvector-training.js +1 -2
- package/dist/src/services/ruvector-training.js.map +1 -1
- package/dist/src/update/validator.js +1 -1
- package/dist/src/update/validator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -6
|
@@ -32,7 +32,7 @@ const preEditCommand = {
|
|
|
32
32
|
short: 'f',
|
|
33
33
|
description: 'File path to edit',
|
|
34
34
|
type: 'string',
|
|
35
|
-
required:
|
|
35
|
+
required: false
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
name: 'operation',
|
|
@@ -53,12 +53,9 @@ const preEditCommand = {
|
|
|
53
53
|
{ command: 'claude-flow hooks pre-edit -f src/api.ts -o refactor', description: 'Pre-edit with operation type' }
|
|
54
54
|
],
|
|
55
55
|
action: async (ctx) => {
|
|
56
|
-
|
|
56
|
+
// Default file to 'unknown' for backward compatibility (env var may be empty)
|
|
57
|
+
const filePath = ctx.args[0] || ctx.flags.file || 'unknown';
|
|
57
58
|
const operation = ctx.flags.operation || 'update';
|
|
58
|
-
if (!filePath) {
|
|
59
|
-
output.printError('File path is required. Use --file or -f flag.');
|
|
60
|
-
return { success: false, exitCode: 1 };
|
|
61
|
-
}
|
|
62
59
|
output.printInfo(`Analyzing context for: ${output.highlight(filePath)}`);
|
|
63
60
|
try {
|
|
64
61
|
// Call MCP tool for pre-edit hook
|
|
@@ -134,14 +131,14 @@ const postEditCommand = {
|
|
|
134
131
|
short: 'f',
|
|
135
132
|
description: 'File path that was edited',
|
|
136
133
|
type: 'string',
|
|
137
|
-
required:
|
|
134
|
+
required: false
|
|
138
135
|
},
|
|
139
136
|
{
|
|
140
137
|
name: 'success',
|
|
141
138
|
short: 's',
|
|
142
139
|
description: 'Whether the edit was successful',
|
|
143
140
|
type: 'boolean',
|
|
144
|
-
required:
|
|
141
|
+
required: false
|
|
145
142
|
},
|
|
146
143
|
{
|
|
147
144
|
name: 'outcome',
|
|
@@ -161,16 +158,10 @@ const postEditCommand = {
|
|
|
161
158
|
{ command: 'claude-flow hooks post-edit -f src/api.ts --success false -o "Type error"', description: 'Record failed edit' }
|
|
162
159
|
],
|
|
163
160
|
action: async (ctx) => {
|
|
164
|
-
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
return { success: false, exitCode: 1 };
|
|
169
|
-
}
|
|
170
|
-
if (success === undefined) {
|
|
171
|
-
output.printError('Success flag is required. Use --success true/false.');
|
|
172
|
-
return { success: false, exitCode: 1 };
|
|
173
|
-
}
|
|
161
|
+
// Default file to 'unknown' for backward compatibility (env var may be empty)
|
|
162
|
+
const filePath = ctx.args[0] || ctx.flags.file || 'unknown';
|
|
163
|
+
// Default success to true for backward compatibility (PostToolUse = success, PostToolUseFailure = failure)
|
|
164
|
+
const success = ctx.flags.success !== undefined ? ctx.flags.success : true;
|
|
174
165
|
output.printInfo(`Recording outcome for: ${output.highlight(filePath)}`);
|
|
175
166
|
try {
|
|
176
167
|
// Parse metrics if provided
|
|
@@ -339,7 +330,7 @@ const postCommandCommand = {
|
|
|
339
330
|
short: 's',
|
|
340
331
|
description: 'Whether the command succeeded',
|
|
341
332
|
type: 'boolean',
|
|
342
|
-
required:
|
|
333
|
+
required: false
|
|
343
334
|
},
|
|
344
335
|
{
|
|
345
336
|
name: 'exit-code',
|
|
@@ -361,15 +352,12 @@ const postCommandCommand = {
|
|
|
361
352
|
],
|
|
362
353
|
action: async (ctx) => {
|
|
363
354
|
const command = ctx.args[0] || ctx.flags.command;
|
|
364
|
-
|
|
355
|
+
// Default success to true for backward compatibility
|
|
356
|
+
const success = ctx.flags.success !== undefined ? ctx.flags.success : true;
|
|
365
357
|
if (!command) {
|
|
366
358
|
output.printError('Command is required. Use --command or -c flag.');
|
|
367
359
|
return { success: false, exitCode: 1 };
|
|
368
360
|
}
|
|
369
|
-
if (success === undefined) {
|
|
370
|
-
output.printError('Success flag is required. Use --success true/false.');
|
|
371
|
-
return { success: false, exitCode: 1 };
|
|
372
|
-
}
|
|
373
361
|
output.printInfo(`Recording command outcome: ${output.highlight(command)}`);
|
|
374
362
|
try {
|
|
375
363
|
// Call MCP tool for post-command hook
|
|
@@ -927,13 +915,14 @@ const metricsCommand = {
|
|
|
927
915
|
]
|
|
928
916
|
});
|
|
929
917
|
if (v3Dashboard && result.performance) {
|
|
918
|
+
const p = result.performance;
|
|
930
919
|
output.writeln();
|
|
931
920
|
output.writeln(output.bold('🚀 V3 Performance Gains'));
|
|
932
921
|
output.printList([
|
|
933
|
-
`Flash Attention: ${output.success(
|
|
934
|
-
`Memory Reduction: ${output.success(
|
|
935
|
-
`Search Improvement: ${output.success(
|
|
936
|
-
`Token Reduction: ${output.success(
|
|
922
|
+
`Flash Attention: ${output.success(p.flashAttention ?? 'N/A')}`,
|
|
923
|
+
`Memory Reduction: ${output.success(p.memoryReduction ?? 'N/A')}`,
|
|
924
|
+
`Search Improvement: ${output.success(p.searchImprovement ?? 'N/A')}`,
|
|
925
|
+
`Token Reduction: ${output.success(p.tokenReduction ?? 'N/A')}`
|
|
937
926
|
]);
|
|
938
927
|
}
|
|
939
928
|
return { success: true, data: result };
|
|
@@ -1305,7 +1294,7 @@ const postTaskCommand = {
|
|
|
1305
1294
|
short: 's',
|
|
1306
1295
|
description: 'Whether the task succeeded',
|
|
1307
1296
|
type: 'boolean',
|
|
1308
|
-
required:
|
|
1297
|
+
required: false
|
|
1309
1298
|
},
|
|
1310
1299
|
{
|
|
1311
1300
|
name: 'quality',
|
|
@@ -1327,11 +1316,8 @@ const postTaskCommand = {
|
|
|
1327
1316
|
action: async (ctx) => {
|
|
1328
1317
|
// Auto-generate task ID if not provided
|
|
1329
1318
|
const taskId = ctx.flags.taskId || `task_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
output.printError('Success flag is required. Use --success true/false.');
|
|
1333
|
-
return { success: false, exitCode: 1 };
|
|
1334
|
-
}
|
|
1319
|
+
// Default success to true for backward compatibility
|
|
1320
|
+
const success = ctx.flags.success !== undefined ? ctx.flags.success : true;
|
|
1335
1321
|
output.printInfo(`Recording outcome for task: ${output.highlight(taskId)}`);
|
|
1336
1322
|
try {
|
|
1337
1323
|
const result = await callMCPTool('hooks_post-task', {
|
|
@@ -1649,19 +1635,20 @@ const intelligenceCommand = {
|
|
|
1649
1635
|
// SONA Component
|
|
1650
1636
|
output.writeln();
|
|
1651
1637
|
output.writeln(output.bold('🧠 SONA (Sub-0.05ms Learning)'));
|
|
1652
|
-
|
|
1638
|
+
const sona = result.components?.sona;
|
|
1639
|
+
if (sona?.enabled) {
|
|
1653
1640
|
output.printTable({
|
|
1654
1641
|
columns: [
|
|
1655
1642
|
{ key: 'metric', header: 'Metric', width: 25 },
|
|
1656
1643
|
{ key: 'value', header: 'Value', width: 20, align: 'right' }
|
|
1657
1644
|
],
|
|
1658
1645
|
data: [
|
|
1659
|
-
{ metric: 'Status', value: formatIntelligenceStatus(
|
|
1660
|
-
{ metric: 'Learning Time', value: `${
|
|
1661
|
-
{ metric: 'Adaptation Time', value: `${
|
|
1662
|
-
{ metric: 'Trajectories', value:
|
|
1663
|
-
{ metric: 'Patterns Learned', value:
|
|
1664
|
-
{ metric: 'Avg Quality', value: `${(
|
|
1646
|
+
{ metric: 'Status', value: formatIntelligenceStatus(sona.status) },
|
|
1647
|
+
{ metric: 'Learning Time', value: `${(sona.learningTimeMs ?? 0).toFixed(3)}ms` },
|
|
1648
|
+
{ metric: 'Adaptation Time', value: `${(sona.adaptationTimeMs ?? 0).toFixed(3)}ms` },
|
|
1649
|
+
{ metric: 'Trajectories', value: sona.trajectoriesRecorded ?? 0 },
|
|
1650
|
+
{ metric: 'Patterns Learned', value: sona.patternsLearned ?? 0 },
|
|
1651
|
+
{ metric: 'Avg Quality', value: `${((sona.avgQuality ?? 0) * 100).toFixed(1)}%` }
|
|
1665
1652
|
]
|
|
1666
1653
|
});
|
|
1667
1654
|
}
|
|
@@ -1671,17 +1658,18 @@ const intelligenceCommand = {
|
|
|
1671
1658
|
// MoE Component
|
|
1672
1659
|
output.writeln();
|
|
1673
1660
|
output.writeln(output.bold('🔀 Mixture of Experts (MoE)'));
|
|
1674
|
-
|
|
1661
|
+
const moe = result.components?.moe;
|
|
1662
|
+
if (moe?.enabled) {
|
|
1675
1663
|
output.printTable({
|
|
1676
1664
|
columns: [
|
|
1677
1665
|
{ key: 'metric', header: 'Metric', width: 25 },
|
|
1678
1666
|
{ key: 'value', header: 'Value', width: 20, align: 'right' }
|
|
1679
1667
|
],
|
|
1680
1668
|
data: [
|
|
1681
|
-
{ metric: 'Status', value: formatIntelligenceStatus(
|
|
1682
|
-
{ metric: 'Active Experts', value:
|
|
1683
|
-
{ metric: 'Routing Accuracy', value: `${(
|
|
1684
|
-
{ metric: 'Load Balance', value: `${(
|
|
1669
|
+
{ metric: 'Status', value: formatIntelligenceStatus(moe.status) },
|
|
1670
|
+
{ metric: 'Active Experts', value: moe.expertsActive ?? 0 },
|
|
1671
|
+
{ metric: 'Routing Accuracy', value: `${((moe.routingAccuracy ?? 0) * 100).toFixed(1)}%` },
|
|
1672
|
+
{ metric: 'Load Balance', value: `${((moe.loadBalance ?? 0) * 100).toFixed(1)}%` }
|
|
1685
1673
|
]
|
|
1686
1674
|
});
|
|
1687
1675
|
}
|
|
@@ -1691,18 +1679,19 @@ const intelligenceCommand = {
|
|
|
1691
1679
|
// HNSW Component
|
|
1692
1680
|
output.writeln();
|
|
1693
1681
|
output.writeln(output.bold('🔍 HNSW (150x Faster Search)'));
|
|
1694
|
-
|
|
1682
|
+
const hnsw = result.components?.hnsw;
|
|
1683
|
+
if (hnsw?.enabled) {
|
|
1695
1684
|
output.printTable({
|
|
1696
1685
|
columns: [
|
|
1697
1686
|
{ key: 'metric', header: 'Metric', width: 25 },
|
|
1698
1687
|
{ key: 'value', header: 'Value', width: 20, align: 'right' }
|
|
1699
1688
|
],
|
|
1700
1689
|
data: [
|
|
1701
|
-
{ metric: 'Status', value: formatIntelligenceStatus(
|
|
1702
|
-
{ metric: 'Index Size', value:
|
|
1703
|
-
{ metric: 'Search Speedup', value: output.success(
|
|
1704
|
-
{ metric: 'Memory Usage', value:
|
|
1705
|
-
{ metric: 'Dimension', value:
|
|
1690
|
+
{ metric: 'Status', value: formatIntelligenceStatus(hnsw.status) },
|
|
1691
|
+
{ metric: 'Index Size', value: (hnsw.indexSize ?? 0).toLocaleString() },
|
|
1692
|
+
{ metric: 'Search Speedup', value: output.success(hnsw.searchSpeedup ?? 'N/A') },
|
|
1693
|
+
{ metric: 'Memory Usage', value: hnsw.memoryUsage ?? 'N/A' },
|
|
1694
|
+
{ metric: 'Dimension', value: hnsw.dimension ?? 384 }
|
|
1706
1695
|
]
|
|
1707
1696
|
});
|
|
1708
1697
|
}
|
|
@@ -1712,28 +1701,37 @@ const intelligenceCommand = {
|
|
|
1712
1701
|
// Embeddings
|
|
1713
1702
|
output.writeln();
|
|
1714
1703
|
output.writeln(output.bold('📦 Embeddings (ONNX)'));
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1704
|
+
const emb = result.components?.embeddings;
|
|
1705
|
+
if (emb) {
|
|
1706
|
+
output.printTable({
|
|
1707
|
+
columns: [
|
|
1708
|
+
{ key: 'metric', header: 'Metric', width: 25 },
|
|
1709
|
+
{ key: 'value', header: 'Value', width: 20, align: 'right' }
|
|
1710
|
+
],
|
|
1711
|
+
data: [
|
|
1712
|
+
{ metric: 'Provider', value: emb.provider ?? 'N/A' },
|
|
1713
|
+
{ metric: 'Model', value: emb.model ?? 'N/A' },
|
|
1714
|
+
{ metric: 'Dimension', value: emb.dimension ?? 384 },
|
|
1715
|
+
{ metric: 'Cache Hit Rate', value: `${((emb.cacheHitRate ?? 0) * 100).toFixed(1)}%` }
|
|
1716
|
+
]
|
|
1717
|
+
});
|
|
1718
|
+
}
|
|
1719
|
+
else {
|
|
1720
|
+
output.writeln(output.dim(' Not initialized'));
|
|
1721
|
+
}
|
|
1727
1722
|
// V3 Performance
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1723
|
+
const perf = result.performance;
|
|
1724
|
+
if (perf) {
|
|
1725
|
+
output.writeln();
|
|
1726
|
+
output.writeln(output.bold('🚀 V3 Performance Gains'));
|
|
1727
|
+
output.printList([
|
|
1728
|
+
`Flash Attention: ${output.success(perf.flashAttention ?? 'N/A')}`,
|
|
1729
|
+
`Memory Reduction: ${output.success(perf.memoryReduction ?? 'N/A')}`,
|
|
1730
|
+
`Search Improvement: ${output.success(perf.searchImprovement ?? 'N/A')}`,
|
|
1731
|
+
`Token Reduction: ${output.success(perf.tokenReduction ?? 'N/A')}`,
|
|
1732
|
+
`SWE-Bench Score: ${output.success(perf.sweBenchScore ?? 'N/A')}`
|
|
1733
|
+
]);
|
|
1734
|
+
}
|
|
1737
1735
|
return { success: true, data: result };
|
|
1738
1736
|
}
|
|
1739
1737
|
catch (error) {
|
|
@@ -3154,17 +3152,22 @@ const tokenOptimizeCommand = {
|
|
|
3154
3152
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3155
3153
|
let reasoningBank = null;
|
|
3156
3154
|
try {
|
|
3157
|
-
// Check if agentic-flow is available
|
|
3158
|
-
const
|
|
3159
|
-
if (
|
|
3155
|
+
// Check if agentic-flow v3 is available
|
|
3156
|
+
const rb = await import('agentic-flow/reasoningbank').catch(() => null);
|
|
3157
|
+
if (rb) {
|
|
3160
3158
|
agenticFlowAvailable = true;
|
|
3161
|
-
|
|
3162
|
-
const rb = await import('agentic-flow/reasoningbank').catch(() => null);
|
|
3163
|
-
if (rb && typeof rb.retrieveMemories === 'function') {
|
|
3159
|
+
if (typeof rb.retrieveMemories === 'function') {
|
|
3164
3160
|
reasoningBank = rb;
|
|
3165
3161
|
}
|
|
3166
3162
|
}
|
|
3167
|
-
|
|
3163
|
+
else {
|
|
3164
|
+
// Legacy check for older agentic-flow
|
|
3165
|
+
const af = await import('agentic-flow').catch(() => null);
|
|
3166
|
+
if (af)
|
|
3167
|
+
agenticFlowAvailable = true;
|
|
3168
|
+
}
|
|
3169
|
+
const versionLabel = agenticFlowAvailable ? `agentic-flow v3 detected (ReasoningBank: ${reasoningBank ? 'active' : 'unavailable'})` : 'agentic-flow not available (using fallbacks)';
|
|
3170
|
+
spinner.succeed(versionLabel);
|
|
3168
3171
|
output.writeln();
|
|
3169
3172
|
// Anti-drift config (hardcoded optimal values from research)
|
|
3170
3173
|
const config = {
|
|
@@ -3447,6 +3450,205 @@ const modelStatsCommand = {
|
|
|
3447
3450
|
}
|
|
3448
3451
|
}
|
|
3449
3452
|
};
|
|
3453
|
+
// Teammate Idle command - Agent Teams integration
|
|
3454
|
+
const teammateIdleCommand = {
|
|
3455
|
+
name: 'teammate-idle',
|
|
3456
|
+
description: 'Handle idle teammate in Agent Teams - auto-assign tasks or notify lead',
|
|
3457
|
+
options: [
|
|
3458
|
+
{
|
|
3459
|
+
name: 'auto-assign',
|
|
3460
|
+
short: 'a',
|
|
3461
|
+
description: 'Automatically assign pending tasks to idle teammate',
|
|
3462
|
+
type: 'boolean',
|
|
3463
|
+
default: true
|
|
3464
|
+
},
|
|
3465
|
+
{
|
|
3466
|
+
name: 'check-task-list',
|
|
3467
|
+
short: 'c',
|
|
3468
|
+
description: 'Check shared task list for available work',
|
|
3469
|
+
type: 'boolean',
|
|
3470
|
+
default: true
|
|
3471
|
+
},
|
|
3472
|
+
{
|
|
3473
|
+
name: 'teammate-id',
|
|
3474
|
+
short: 't',
|
|
3475
|
+
description: 'ID of the idle teammate',
|
|
3476
|
+
type: 'string'
|
|
3477
|
+
},
|
|
3478
|
+
{
|
|
3479
|
+
name: 'team-name',
|
|
3480
|
+
description: 'Team name for context',
|
|
3481
|
+
type: 'string'
|
|
3482
|
+
}
|
|
3483
|
+
],
|
|
3484
|
+
examples: [
|
|
3485
|
+
{ command: 'claude-flow hooks teammate-idle --auto-assign true', description: 'Auto-assign tasks to idle teammate' },
|
|
3486
|
+
{ command: 'claude-flow hooks teammate-idle -t worker-1 --check-task-list', description: 'Check tasks for specific teammate' }
|
|
3487
|
+
],
|
|
3488
|
+
action: async (ctx) => {
|
|
3489
|
+
const autoAssign = ctx.flags.autoAssign !== false;
|
|
3490
|
+
const checkTaskList = ctx.flags.checkTaskList !== false;
|
|
3491
|
+
const teammateId = ctx.flags.teammateId;
|
|
3492
|
+
const teamName = ctx.flags.teamName;
|
|
3493
|
+
if (ctx.flags.format !== 'json') {
|
|
3494
|
+
output.printInfo(`Teammate idle hook triggered${teammateId ? ` for: ${output.highlight(teammateId)}` : ''}`);
|
|
3495
|
+
}
|
|
3496
|
+
try {
|
|
3497
|
+
const result = await callMCPTool('hooks_teammate-idle', {
|
|
3498
|
+
autoAssign,
|
|
3499
|
+
checkTaskList,
|
|
3500
|
+
teammateId,
|
|
3501
|
+
teamName,
|
|
3502
|
+
timestamp: Date.now(),
|
|
3503
|
+
});
|
|
3504
|
+
if (ctx.flags.format === 'json') {
|
|
3505
|
+
output.printJson(result);
|
|
3506
|
+
return { success: true, data: result };
|
|
3507
|
+
}
|
|
3508
|
+
output.writeln();
|
|
3509
|
+
if (result.action === 'assigned' && result.taskAssigned) {
|
|
3510
|
+
output.printSuccess(`Task assigned: ${result.taskAssigned.subject}`);
|
|
3511
|
+
output.printList([
|
|
3512
|
+
`Task ID: ${result.taskAssigned.taskId}`,
|
|
3513
|
+
`Priority: ${result.taskAssigned.priority}`,
|
|
3514
|
+
`Pending tasks remaining: ${result.pendingTasks}`
|
|
3515
|
+
]);
|
|
3516
|
+
}
|
|
3517
|
+
else if (result.action === 'waiting') {
|
|
3518
|
+
output.printInfo('No pending tasks available - teammate waiting for work');
|
|
3519
|
+
}
|
|
3520
|
+
else {
|
|
3521
|
+
output.printInfo(`Team lead notified: ${result.message}`);
|
|
3522
|
+
}
|
|
3523
|
+
return { success: true, data: result };
|
|
3524
|
+
}
|
|
3525
|
+
catch (error) {
|
|
3526
|
+
// Graceful fallback - don't fail hard, just report
|
|
3527
|
+
if (ctx.flags.format === 'json') {
|
|
3528
|
+
output.printJson({ success: true, action: 'waiting', message: 'Teammate idle - no MCP server' });
|
|
3529
|
+
}
|
|
3530
|
+
else {
|
|
3531
|
+
output.printInfo('Teammate idle - awaiting task assignment');
|
|
3532
|
+
}
|
|
3533
|
+
return { success: true };
|
|
3534
|
+
}
|
|
3535
|
+
}
|
|
3536
|
+
};
|
|
3537
|
+
// Task Completed command - Agent Teams integration
|
|
3538
|
+
const taskCompletedCommand = {
|
|
3539
|
+
name: 'task-completed',
|
|
3540
|
+
description: 'Handle task completion in Agent Teams - train patterns and notify lead',
|
|
3541
|
+
options: [
|
|
3542
|
+
{
|
|
3543
|
+
name: 'task-id',
|
|
3544
|
+
short: 'i',
|
|
3545
|
+
description: 'ID of the completed task',
|
|
3546
|
+
type: 'string',
|
|
3547
|
+
required: true
|
|
3548
|
+
},
|
|
3549
|
+
{
|
|
3550
|
+
name: 'train-patterns',
|
|
3551
|
+
short: 'p',
|
|
3552
|
+
description: 'Train neural patterns from successful task',
|
|
3553
|
+
type: 'boolean',
|
|
3554
|
+
default: true
|
|
3555
|
+
},
|
|
3556
|
+
{
|
|
3557
|
+
name: 'notify-lead',
|
|
3558
|
+
short: 'n',
|
|
3559
|
+
description: 'Notify team lead of task completion',
|
|
3560
|
+
type: 'boolean',
|
|
3561
|
+
default: true
|
|
3562
|
+
},
|
|
3563
|
+
{
|
|
3564
|
+
name: 'success',
|
|
3565
|
+
short: 's',
|
|
3566
|
+
description: 'Whether the task succeeded',
|
|
3567
|
+
type: 'boolean',
|
|
3568
|
+
default: true
|
|
3569
|
+
},
|
|
3570
|
+
{
|
|
3571
|
+
name: 'quality',
|
|
3572
|
+
short: 'q',
|
|
3573
|
+
description: 'Quality score (0-1)',
|
|
3574
|
+
type: 'number'
|
|
3575
|
+
},
|
|
3576
|
+
{
|
|
3577
|
+
name: 'teammate-id',
|
|
3578
|
+
short: 't',
|
|
3579
|
+
description: 'ID of the teammate that completed the task',
|
|
3580
|
+
type: 'string'
|
|
3581
|
+
}
|
|
3582
|
+
],
|
|
3583
|
+
examples: [
|
|
3584
|
+
{ command: 'claude-flow hooks task-completed -i task-123 --train-patterns', description: 'Complete task and train patterns' },
|
|
3585
|
+
{ command: 'claude-flow hooks task-completed -i task-456 --notify-lead --quality 0.95', description: 'Complete with quality score' }
|
|
3586
|
+
],
|
|
3587
|
+
action: async (ctx) => {
|
|
3588
|
+
const taskId = ctx.args[0] || ctx.flags.taskId;
|
|
3589
|
+
const trainPatterns = ctx.flags.trainPatterns !== false;
|
|
3590
|
+
const notifyLead = ctx.flags.notifyLead !== false;
|
|
3591
|
+
const success = ctx.flags.success !== false;
|
|
3592
|
+
const quality = ctx.flags.quality;
|
|
3593
|
+
const teammateId = ctx.flags.teammateId;
|
|
3594
|
+
if (!taskId) {
|
|
3595
|
+
output.printError('Task ID is required. Use --task-id or -i flag.');
|
|
3596
|
+
return { success: false, exitCode: 1 };
|
|
3597
|
+
}
|
|
3598
|
+
if (ctx.flags.format !== 'json') {
|
|
3599
|
+
output.printInfo(`Task completed: ${output.highlight(taskId)}`);
|
|
3600
|
+
}
|
|
3601
|
+
try {
|
|
3602
|
+
const result = await callMCPTool('hooks_task-completed', {
|
|
3603
|
+
taskId,
|
|
3604
|
+
trainPatterns,
|
|
3605
|
+
notifyLead,
|
|
3606
|
+
success,
|
|
3607
|
+
quality,
|
|
3608
|
+
teammateId,
|
|
3609
|
+
timestamp: Date.now(),
|
|
3610
|
+
});
|
|
3611
|
+
if (ctx.flags.format === 'json') {
|
|
3612
|
+
output.printJson(result);
|
|
3613
|
+
return { success: true, data: result };
|
|
3614
|
+
}
|
|
3615
|
+
output.writeln();
|
|
3616
|
+
output.printSuccess(`Task ${taskId} marked complete`);
|
|
3617
|
+
output.writeln();
|
|
3618
|
+
output.writeln(output.bold('Completion Metrics'));
|
|
3619
|
+
output.printTable({
|
|
3620
|
+
columns: [
|
|
3621
|
+
{ key: 'metric', header: 'Metric', width: 25 },
|
|
3622
|
+
{ key: 'value', header: 'Value', width: 20, align: 'right' }
|
|
3623
|
+
],
|
|
3624
|
+
data: [
|
|
3625
|
+
{ metric: 'Patterns Learned', value: result.patternsLearned },
|
|
3626
|
+
{ metric: 'Quality Score', value: quality ? `${(quality * 100).toFixed(0)}%` : 'N/A' },
|
|
3627
|
+
{ metric: 'Lead Notified', value: result.leadNotified ? 'Yes' : 'No' },
|
|
3628
|
+
{ metric: 'Learning Updates', value: result.metrics?.learningUpdates || 0 }
|
|
3629
|
+
]
|
|
3630
|
+
});
|
|
3631
|
+
if (result.nextTask) {
|
|
3632
|
+
output.writeln();
|
|
3633
|
+
output.printInfo(`Next available task: ${result.nextTask.subject}`);
|
|
3634
|
+
}
|
|
3635
|
+
return { success: true, data: result };
|
|
3636
|
+
}
|
|
3637
|
+
catch (error) {
|
|
3638
|
+
// Graceful fallback
|
|
3639
|
+
if (ctx.flags.format === 'json') {
|
|
3640
|
+
output.printJson({ success: true, taskId, message: 'Task completed - patterns pending' });
|
|
3641
|
+
}
|
|
3642
|
+
else {
|
|
3643
|
+
output.printSuccess(`Task ${taskId} completed`);
|
|
3644
|
+
if (trainPatterns) {
|
|
3645
|
+
output.printInfo('Pattern training queued for next sync');
|
|
3646
|
+
}
|
|
3647
|
+
}
|
|
3648
|
+
return { success: true };
|
|
3649
|
+
}
|
|
3650
|
+
}
|
|
3651
|
+
};
|
|
3450
3652
|
// Main hooks command
|
|
3451
3653
|
export const hooksCommand = {
|
|
3452
3654
|
name: 'hooks',
|
|
@@ -3486,6 +3688,9 @@ export const hooksCommand = {
|
|
|
3486
3688
|
sessionStartCommand,
|
|
3487
3689
|
preBashCommand,
|
|
3488
3690
|
postBashCommand,
|
|
3691
|
+
// Agent Teams integration
|
|
3692
|
+
teammateIdleCommand,
|
|
3693
|
+
taskCompletedCommand,
|
|
3489
3694
|
],
|
|
3490
3695
|
options: [],
|
|
3491
3696
|
examples: [
|
|
@@ -3528,7 +3733,11 @@ export const hooksCommand = {
|
|
|
3528
3733
|
`${output.highlight('token-optimize')} - Token optimization (30-50% savings)`,
|
|
3529
3734
|
`${output.highlight('model-route')} - Route to optimal model (haiku/sonnet/opus)`,
|
|
3530
3735
|
`${output.highlight('model-outcome')} - Record model routing outcome`,
|
|
3531
|
-
`${output.highlight('model-stats')} - View model routing statistics
|
|
3736
|
+
`${output.highlight('model-stats')} - View model routing statistics`,
|
|
3737
|
+
'',
|
|
3738
|
+
output.bold('Agent Teams:'),
|
|
3739
|
+
`${output.highlight('teammate-idle')} - Handle idle teammate (auto-assign tasks)`,
|
|
3740
|
+
`${output.highlight('task-completed')} - Handle task completion (train patterns)`
|
|
3532
3741
|
]);
|
|
3533
3742
|
output.writeln();
|
|
3534
3743
|
output.writeln('Run "claude-flow hooks <subcommand> --help" for subcommand help');
|
|
@@ -3540,7 +3749,8 @@ export const hooksCommand = {
|
|
|
3540
3749
|
'🔍 AgentDB integration (150x faster search)',
|
|
3541
3750
|
'📊 84.8% SWE-Bench solve rate',
|
|
3542
3751
|
'🎯 32.3% token reduction',
|
|
3543
|
-
'🚀 2.8-4.4x speed improvement'
|
|
3752
|
+
'🚀 2.8-4.4x speed improvement',
|
|
3753
|
+
'👥 Agent Teams integration (auto task assignment)'
|
|
3544
3754
|
]);
|
|
3545
3755
|
return { success: true };
|
|
3546
3756
|
}
|