claude-flow-novice 2.0.3 ā 2.0.4
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/dist/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- package/package.json +2 -2
|
@@ -1,646 +1,526 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Verification-Training Integration Module
|
|
3
3
|
* Connects verification results to the neural training system for continuous improvement
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import fs from 'fs/promises';
|
|
7
|
-
import path from 'path';
|
|
8
|
-
import { execSync } from 'child_process';
|
|
9
|
-
|
|
4
|
+
*/ import fs from "node:fs/promises";
|
|
5
|
+
import { execSync } from "child_process";
|
|
10
6
|
/**
|
|
11
7
|
* Integration between Verification and Training Systems
|
|
12
8
|
* Feeds verification results into training to improve agent performance
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
constructor() {
|
|
16
|
-
this.trainingDataPath = '.claude-flow/training/verification-data.jsonl';
|
|
17
|
-
this.modelPath = '.claude-flow/models/verification-model.json';
|
|
18
|
-
this.metricsPath = '.claude-flow/metrics/agent-performance.json';
|
|
19
|
-
this.learningRate = 0.1;
|
|
20
|
-
this.initialized = false;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
9
|
+
*/ export class VerificationTrainingIntegration {
|
|
10
|
+
/**
|
|
24
11
|
* Initialize the integration
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
12
|
+
*/ async initialize() {
|
|
13
|
+
// Ensure directories exist
|
|
14
|
+
const dirs = [
|
|
15
|
+
'.claude-flow/training',
|
|
16
|
+
'.claude-flow/models',
|
|
17
|
+
'.claude-flow/metrics'
|
|
18
|
+
];
|
|
19
|
+
for (const dir of dirs){
|
|
20
|
+
await fs.mkdir(dir, {
|
|
21
|
+
recursive: true
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
// Load or create model
|
|
25
|
+
await this.loadModel();
|
|
26
|
+
this.initialized = true;
|
|
27
|
+
console.log('ā
Verification-Training integration initialized');
|
|
32
28
|
}
|
|
33
|
-
|
|
34
|
-
// Load or create model
|
|
35
|
-
await this.loadModel();
|
|
36
|
-
this.initialized = true;
|
|
37
|
-
|
|
38
|
-
console.log('ā
Verification-Training integration initialized');
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
29
|
+
/**
|
|
42
30
|
* Feed verification results to training system
|
|
43
|
-
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
// Trigger incremental learning
|
|
74
|
-
await this.incrementalLearn(trainingData);
|
|
75
|
-
|
|
76
|
-
// Update performance metrics
|
|
77
|
-
await this.updatePerformanceMetrics(verification);
|
|
78
|
-
|
|
79
|
-
return trainingData;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Incremental learning from new verification data
|
|
84
|
-
*/
|
|
85
|
-
async incrementalLearn(trainingData) {
|
|
86
|
-
const model = await this.loadModel();
|
|
87
|
-
|
|
88
|
-
// Update agent reliability scores
|
|
89
|
-
const agentType = trainingData.input.agentType;
|
|
90
|
-
if (!model.agentReliability) model.agentReliability = {};
|
|
91
|
-
|
|
92
|
-
const currentReliability = model.agentReliability[agentType] || 0.5;
|
|
93
|
-
const newScore = trainingData.output.score;
|
|
94
|
-
|
|
95
|
-
// Exponential moving average for reliability
|
|
96
|
-
model.agentReliability[agentType] =
|
|
97
|
-
currentReliability * (1 - this.learningRate) + newScore * this.learningRate;
|
|
98
|
-
|
|
99
|
-
// Update verification patterns
|
|
100
|
-
if (!model.patterns) model.patterns = {};
|
|
101
|
-
const patternKey = `${agentType}_${trainingData.output.passed ? 'success' : 'failure'}`;
|
|
102
|
-
|
|
103
|
-
if (!model.patterns[patternKey]) {
|
|
104
|
-
model.patterns[patternKey] = {
|
|
105
|
-
count: 0,
|
|
106
|
-
avgScore: 0,
|
|
107
|
-
checks: {},
|
|
108
|
-
};
|
|
31
|
+
*/ async feedVerificationToTraining(verification) {
|
|
32
|
+
if (!this.initialized) await this.initialize();
|
|
33
|
+
// Extract training features from verification
|
|
34
|
+
const trainingData = {
|
|
35
|
+
input: {
|
|
36
|
+
taskId: verification.taskId,
|
|
37
|
+
agentType: verification.agentType,
|
|
38
|
+
timestamp: verification.timestamp,
|
|
39
|
+
mode: verification.mode || 'moderate',
|
|
40
|
+
checksPerformed: verification.results?.map((r)=>r.name) || []
|
|
41
|
+
},
|
|
42
|
+
output: {
|
|
43
|
+
score: verification.score,
|
|
44
|
+
passed: verification.passed,
|
|
45
|
+
threshold: verification.threshold
|
|
46
|
+
},
|
|
47
|
+
metadata: {
|
|
48
|
+
sessionId: process.env.SESSION_ID || 'default',
|
|
49
|
+
timestamp: new Date().toISOString()
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
// Append to training data
|
|
53
|
+
await this.appendTrainingData(trainingData);
|
|
54
|
+
// Update agent-specific model
|
|
55
|
+
await this.updateAgentModel(verification.agentType, verification);
|
|
56
|
+
// Trigger incremental learning
|
|
57
|
+
await this.incrementalLearn(trainingData);
|
|
58
|
+
// Update performance metrics
|
|
59
|
+
await this.updatePerformanceMetrics(verification);
|
|
60
|
+
return trainingData;
|
|
109
61
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Incremental learning from new verification data
|
|
64
|
+
*/ async incrementalLearn(trainingData) {
|
|
65
|
+
const model = await this.loadModel();
|
|
66
|
+
// Update agent reliability scores
|
|
67
|
+
const agentType = trainingData.input.agentType;
|
|
68
|
+
if (!model.agentReliability) model.agentReliability = {};
|
|
69
|
+
const currentReliability = model.agentReliability[agentType] || 0.5;
|
|
70
|
+
const newScore = trainingData.output.score;
|
|
71
|
+
// Exponential moving average for reliability
|
|
72
|
+
model.agentReliability[agentType] = currentReliability * (1 - this.learningRate) + newScore * this.learningRate;
|
|
73
|
+
// Update verification patterns
|
|
74
|
+
if (!model.patterns) model.patterns = {};
|
|
75
|
+
const patternKey = `${agentType}_${trainingData.output.passed ? 'success' : 'failure'}`;
|
|
76
|
+
if (!model.patterns[patternKey]) {
|
|
77
|
+
model.patterns[patternKey] = {
|
|
78
|
+
count: 0,
|
|
79
|
+
avgScore: 0,
|
|
80
|
+
checks: {}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const pattern = model.patterns[patternKey];
|
|
84
|
+
pattern.count++;
|
|
85
|
+
pattern.avgScore = (pattern.avgScore * (pattern.count - 1) + newScore) / pattern.count;
|
|
86
|
+
// Track which checks lead to success/failure
|
|
87
|
+
for (const check of trainingData.input.checksPerformed){
|
|
88
|
+
if (!pattern.checks[check]) {
|
|
89
|
+
pattern.checks[check] = {
|
|
90
|
+
success: 0,
|
|
91
|
+
failure: 0
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
pattern.checks[check][trainingData.output.passed ? 'success' : 'failure']++;
|
|
95
|
+
}
|
|
96
|
+
// Save updated model
|
|
97
|
+
await this.saveModel(model);
|
|
98
|
+
// Log learning progress
|
|
99
|
+
console.log(`š Learning update for ${agentType}: reliability ${model.agentReliability[agentType].toFixed(3)}`);
|
|
121
100
|
}
|
|
122
|
-
|
|
123
|
-
// Save updated model
|
|
124
|
-
await this.saveModel(model);
|
|
125
|
-
|
|
126
|
-
// Log learning progress
|
|
127
|
-
console.log(
|
|
128
|
-
`š Learning update for ${agentType}: reliability ${model.agentReliability[agentType].toFixed(3)}`,
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
101
|
+
/**
|
|
133
102
|
* Predict verification outcome based on historical data
|
|
134
|
-
*/
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
103
|
+
*/ async predictVerificationOutcome(taskType, agentType) {
|
|
104
|
+
const model = await this.loadModel();
|
|
105
|
+
// Get agent reliability
|
|
106
|
+
const reliability = model.agentReliability?.[agentType] || 0.5;
|
|
107
|
+
// Get pattern statistics
|
|
108
|
+
const successPattern = model.patterns?.[`${agentType}_success`];
|
|
109
|
+
const failurePattern = model.patterns?.[`${agentType}_failure`];
|
|
110
|
+
if (!successPattern && !failurePattern) {
|
|
111
|
+
return {
|
|
112
|
+
predictedScore: reliability,
|
|
113
|
+
confidence: 0.1,
|
|
114
|
+
recommendation: 'insufficient_data'
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// Calculate prediction
|
|
118
|
+
const totalCount = (successPattern?.count || 0) + (failurePattern?.count || 0);
|
|
119
|
+
const successRate = (successPattern?.count || 0) / totalCount;
|
|
120
|
+
const predictedScore = reliability * 0.7 + successRate * 0.3;
|
|
121
|
+
const confidence = Math.min(totalCount / 100, 1.0); // Confidence increases with data
|
|
122
|
+
// Generate recommendation
|
|
123
|
+
let recommendation = 'proceed';
|
|
124
|
+
if (predictedScore < 0.5) {
|
|
125
|
+
recommendation = 'use_different_agent';
|
|
126
|
+
} else if (predictedScore < 0.75) {
|
|
127
|
+
recommendation = 'add_additional_checks';
|
|
128
|
+
} else if (confidence < 0.3) {
|
|
129
|
+
recommendation = 'low_confidence_proceed_with_caution';
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
predictedScore,
|
|
133
|
+
confidence,
|
|
134
|
+
recommendation,
|
|
135
|
+
agentReliability: reliability,
|
|
136
|
+
historicalSuccessRate: successRate,
|
|
137
|
+
dataPoints: totalCount
|
|
138
|
+
};
|
|
168
139
|
}
|
|
169
|
-
|
|
170
|
-
return {
|
|
171
|
-
predictedScore,
|
|
172
|
-
confidence,
|
|
173
|
-
recommendation,
|
|
174
|
-
agentReliability: reliability,
|
|
175
|
-
historicalSuccessRate: successRate,
|
|
176
|
-
dataPoints: totalCount,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
140
|
+
/**
|
|
181
141
|
* Get agent recommendations based on task type
|
|
182
|
-
*/
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
142
|
+
*/ async recommendAgent(taskType) {
|
|
143
|
+
const model = await this.loadModel();
|
|
144
|
+
if (!model.agentReliability) {
|
|
145
|
+
return {
|
|
146
|
+
recommended: 'coder',
|
|
147
|
+
reason: 'no_historical_data'
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// Sort agents by reliability
|
|
151
|
+
const agents = Object.entries(model.agentReliability).sort(([, a], [, b])=>b - a);
|
|
152
|
+
if (agents.length === 0) {
|
|
153
|
+
return {
|
|
154
|
+
recommended: 'coder',
|
|
155
|
+
reason: 'no_agent_data'
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
const [bestAgent, bestScore] = agents[0];
|
|
159
|
+
return {
|
|
160
|
+
recommended: bestAgent,
|
|
161
|
+
reliability: bestScore,
|
|
162
|
+
alternatives: agents.slice(1, 3).map(([agent, score])=>({
|
|
163
|
+
agent,
|
|
164
|
+
reliability: score
|
|
165
|
+
})),
|
|
166
|
+
reason: `highest_reliability_score`
|
|
167
|
+
};
|
|
201
168
|
}
|
|
202
|
-
|
|
203
|
-
const [bestAgent, bestScore] = agents[0];
|
|
204
|
-
|
|
205
|
-
return {
|
|
206
|
-
recommended: bestAgent,
|
|
207
|
-
reliability: bestScore,
|
|
208
|
-
alternatives: agents.slice(1, 3).map(([agent, score]) => ({
|
|
209
|
-
agent,
|
|
210
|
-
reliability: score,
|
|
211
|
-
})),
|
|
212
|
-
reason: `highest_reliability_score`,
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
169
|
+
/**
|
|
217
170
|
* Update agent-specific model
|
|
218
|
-
*/
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
checkPerformance: {},
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// Update statistics
|
|
238
|
-
agentModel.totalTasks++;
|
|
239
|
-
if (verification.passed) agentModel.successfulTasks++;
|
|
240
|
-
|
|
241
|
-
// Update average score
|
|
242
|
-
agentModel.averageScore =
|
|
243
|
-
(agentModel.averageScore * (agentModel.totalTasks - 1) + verification.score) /
|
|
244
|
-
agentModel.totalTasks;
|
|
245
|
-
|
|
246
|
-
// Keep last 100 scores for trend analysis
|
|
247
|
-
agentModel.scoreHistory.push({
|
|
248
|
-
score: verification.score,
|
|
249
|
-
timestamp: verification.timestamp,
|
|
250
|
-
passed: verification.passed,
|
|
251
|
-
});
|
|
252
|
-
if (agentModel.scoreHistory.length > 100) {
|
|
253
|
-
agentModel.scoreHistory = agentModel.scoreHistory.slice(-100);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// Track performance by check type
|
|
257
|
-
if (verification.results) {
|
|
258
|
-
for (const result of verification.results) {
|
|
259
|
-
if (!agentModel.checkPerformance[result.name]) {
|
|
260
|
-
agentModel.checkPerformance[result.name] = {
|
|
261
|
-
total: 0,
|
|
262
|
-
passed: 0,
|
|
263
|
-
avgScore: 0,
|
|
264
|
-
};
|
|
171
|
+
*/ async updateAgentModel(agentType, verification) {
|
|
172
|
+
const modelFile = `.claude-flow/models/agent-${agentType}.json`;
|
|
173
|
+
let agentModel = {};
|
|
174
|
+
try {
|
|
175
|
+
const data = await fs.readFile(modelFile, 'utf8');
|
|
176
|
+
agentModel = JSON.parse(data);
|
|
177
|
+
} catch {
|
|
178
|
+
agentModel = {
|
|
179
|
+
agentType,
|
|
180
|
+
totalTasks: 0,
|
|
181
|
+
successfulTasks: 0,
|
|
182
|
+
averageScore: 0,
|
|
183
|
+
scoreHistory: [],
|
|
184
|
+
checkPerformance: {}
|
|
185
|
+
};
|
|
265
186
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
187
|
+
// Update statistics
|
|
188
|
+
agentModel.totalTasks++;
|
|
189
|
+
if (verification.passed) agentModel.successfulTasks++;
|
|
190
|
+
// Update average score
|
|
191
|
+
agentModel.averageScore = (agentModel.averageScore * (agentModel.totalTasks - 1) + verification.score) / agentModel.totalTasks;
|
|
192
|
+
// Keep last 100 scores for trend analysis
|
|
193
|
+
agentModel.scoreHistory.push({
|
|
194
|
+
score: verification.score,
|
|
195
|
+
timestamp: verification.timestamp,
|
|
196
|
+
passed: verification.passed
|
|
197
|
+
});
|
|
198
|
+
if (agentModel.scoreHistory.length > 100) {
|
|
199
|
+
agentModel.scoreHistory = agentModel.scoreHistory.slice(-100);
|
|
200
|
+
}
|
|
201
|
+
// Track performance by check type
|
|
202
|
+
if (verification.results) {
|
|
203
|
+
for (const result of verification.results){
|
|
204
|
+
if (!agentModel.checkPerformance[result.name]) {
|
|
205
|
+
agentModel.checkPerformance[result.name] = {
|
|
206
|
+
total: 0,
|
|
207
|
+
passed: 0,
|
|
208
|
+
avgScore: 0
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
const checkPerf = agentModel.checkPerformance[result.name];
|
|
212
|
+
checkPerf.total++;
|
|
213
|
+
if (result.passed) checkPerf.passed++;
|
|
214
|
+
checkPerf.avgScore = (checkPerf.avgScore * (checkPerf.total - 1) + result.score) / checkPerf.total;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Calculate performance trend (last 10 vs previous 10)
|
|
218
|
+
if (agentModel.scoreHistory.length >= 20) {
|
|
219
|
+
const recent10 = agentModel.scoreHistory.slice(-10);
|
|
220
|
+
const previous10 = agentModel.scoreHistory.slice(-20, -10);
|
|
221
|
+
const recentAvg = recent10.reduce((sum, h)=>sum + h.score, 0) / 10;
|
|
222
|
+
const previousAvg = previous10.reduce((sum, h)=>sum + h.score, 0) / 10;
|
|
223
|
+
agentModel.trend = {
|
|
224
|
+
direction: recentAvg > previousAvg ? 'improving' : 'declining',
|
|
225
|
+
change: recentAvg - previousAvg,
|
|
226
|
+
recentAverage: recentAvg,
|
|
227
|
+
previousAverage: previousAvg
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
// Save agent model
|
|
231
|
+
await fs.writeFile(modelFile, JSON.stringify(agentModel, null, 2));
|
|
232
|
+
// Log if agent is improving or declining
|
|
233
|
+
if (agentModel.trend) {
|
|
234
|
+
const emoji = agentModel.trend.direction === 'improving' ? 'š' : 'š';
|
|
235
|
+
console.log(`${emoji} Agent ${agentType} is ${agentModel.trend.direction} (${agentModel.trend.change > 0 ? '+' : ''}${agentModel.trend.change.toFixed(3)})`);
|
|
236
|
+
}
|
|
237
|
+
return agentModel;
|
|
300
238
|
}
|
|
301
|
-
|
|
302
|
-
return agentModel;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
/**
|
|
239
|
+
/**
|
|
306
240
|
* Generate training recommendations
|
|
307
|
-
*/
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
241
|
+
*/ async generateTrainingRecommendations() {
|
|
242
|
+
const model = await this.loadModel();
|
|
243
|
+
const recommendations = [];
|
|
244
|
+
// Check agent reliability
|
|
245
|
+
if (model.agentReliability) {
|
|
246
|
+
for (const [agent, reliability] of Object.entries(model.agentReliability)){
|
|
247
|
+
if (reliability < 0.7) {
|
|
248
|
+
recommendations.push({
|
|
249
|
+
type: 'retrain_agent',
|
|
250
|
+
agent,
|
|
251
|
+
currentReliability: reliability,
|
|
252
|
+
action: `Retrain ${agent} agent - reliability below 70%`
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
322
256
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
257
|
+
// Check patterns
|
|
258
|
+
if (model.patterns) {
|
|
259
|
+
for (const [pattern, data] of Object.entries(model.patterns)){
|
|
260
|
+
if (pattern.includes('failure') && data.count > 10) {
|
|
261
|
+
const [agentType] = pattern.split('_');
|
|
262
|
+
// Find most common failing checks
|
|
263
|
+
const failingChecks = Object.entries(data.checks || {}).filter(([, stats])=>stats.failure > stats.success).map(([check])=>check);
|
|
264
|
+
if (failingChecks.length > 0) {
|
|
265
|
+
recommendations.push({
|
|
266
|
+
type: 'improve_checks',
|
|
267
|
+
agent: agentType,
|
|
268
|
+
checks: failingChecks,
|
|
269
|
+
action: `Focus training on ${failingChecks.join(', ')} for ${agentType}`
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Check if we need more data
|
|
276
|
+
const totalDataPoints = Object.values(model.patterns || {}).reduce((sum, p)=>sum + p.count, 0);
|
|
277
|
+
if (totalDataPoints < 50) {
|
|
338
278
|
recommendations.push({
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
action: `Focus training on ${failingChecks.join(', ')} for ${agentType}`,
|
|
279
|
+
type: 'collect_more_data',
|
|
280
|
+
currentDataPoints: totalDataPoints,
|
|
281
|
+
action: 'Run more verification cycles to improve training accuracy'
|
|
343
282
|
});
|
|
344
|
-
}
|
|
345
283
|
}
|
|
346
|
-
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
// Check if we need more data
|
|
350
|
-
const totalDataPoints = Object.values(model.patterns || {}).reduce(
|
|
351
|
-
(sum, p) => sum + p.count,
|
|
352
|
-
0,
|
|
353
|
-
);
|
|
354
|
-
|
|
355
|
-
if (totalDataPoints < 50) {
|
|
356
|
-
recommendations.push({
|
|
357
|
-
type: 'collect_more_data',
|
|
358
|
-
currentDataPoints: totalDataPoints,
|
|
359
|
-
action: 'Run more verification cycles to improve training accuracy',
|
|
360
|
-
});
|
|
284
|
+
return recommendations;
|
|
361
285
|
}
|
|
362
|
-
|
|
363
|
-
return recommendations;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
/**
|
|
286
|
+
/**
|
|
367
287
|
* Update performance metrics
|
|
368
|
-
*/
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
288
|
+
*/ async updatePerformanceMetrics(verification) {
|
|
289
|
+
let metrics = {};
|
|
290
|
+
try {
|
|
291
|
+
const data = await fs.readFile(this.metricsPath, 'utf8');
|
|
292
|
+
metrics = JSON.parse(data);
|
|
293
|
+
} catch {
|
|
294
|
+
metrics = {
|
|
295
|
+
totalVerifications: 0,
|
|
296
|
+
passedVerifications: 0,
|
|
297
|
+
averageScore: 0,
|
|
298
|
+
byAgent: {},
|
|
299
|
+
byHour: {},
|
|
300
|
+
created: new Date().toISOString()
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
// Update totals
|
|
304
|
+
metrics.totalVerifications++;
|
|
305
|
+
if (verification.passed) metrics.passedVerifications++;
|
|
306
|
+
metrics.averageScore = (metrics.averageScore * (metrics.totalVerifications - 1) + verification.score) / metrics.totalVerifications;
|
|
307
|
+
// Update by agent
|
|
308
|
+
if (!metrics.byAgent[verification.agentType]) {
|
|
309
|
+
metrics.byAgent[verification.agentType] = {
|
|
310
|
+
total: 0,
|
|
311
|
+
passed: 0,
|
|
312
|
+
avgScore: 0
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
const agentMetrics = metrics.byAgent[verification.agentType];
|
|
316
|
+
agentMetrics.total++;
|
|
317
|
+
if (verification.passed) agentMetrics.passed++;
|
|
318
|
+
agentMetrics.avgScore = (agentMetrics.avgScore * (agentMetrics.total - 1) + verification.score) / agentMetrics.total;
|
|
319
|
+
// Update by hour (for pattern detection)
|
|
320
|
+
const hour = new Date().getHours();
|
|
321
|
+
if (!metrics.byHour[hour]) {
|
|
322
|
+
metrics.byHour[hour] = {
|
|
323
|
+
total: 0,
|
|
324
|
+
avgScore: 0
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
metrics.byHour[hour].total++;
|
|
328
|
+
metrics.byHour[hour].avgScore = (metrics.byHour[hour].avgScore * (metrics.byHour[hour].total - 1) + verification.score) / metrics.byHour[hour].total;
|
|
329
|
+
metrics.lastUpdated = new Date().toISOString();
|
|
330
|
+
await fs.writeFile(this.metricsPath, JSON.stringify(metrics, null, 2));
|
|
331
|
+
return metrics;
|
|
384
332
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
333
|
+
/**
|
|
334
|
+
* Train neural network for pattern recognition
|
|
335
|
+
*/ async trainNeuralPatterns() {
|
|
336
|
+
console.log('š§ Training neural patterns from verification data...');
|
|
337
|
+
try {
|
|
338
|
+
// Call the training command
|
|
339
|
+
const result = execSync('npx claude-flow-novice training neural-train --data .claude-flow/training/verification-data.jsonl --model verification-predictor --epochs 100', {
|
|
340
|
+
encoding: 'utf8',
|
|
341
|
+
stdio: 'pipe'
|
|
342
|
+
});
|
|
343
|
+
console.log('ā
Neural training completed');
|
|
344
|
+
return {
|
|
345
|
+
success: true,
|
|
346
|
+
output: result
|
|
347
|
+
};
|
|
348
|
+
} catch (error) {
|
|
349
|
+
console.error('ā Neural training failed:', error.message);
|
|
350
|
+
return {
|
|
351
|
+
success: false,
|
|
352
|
+
error: error.message
|
|
353
|
+
};
|
|
354
|
+
}
|
|
400
355
|
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
agentMetrics.avgScore =
|
|
406
|
-
(agentMetrics.avgScore * (agentMetrics.total - 1) + verification.score) / agentMetrics.total;
|
|
407
|
-
|
|
408
|
-
// Update by hour (for pattern detection)
|
|
409
|
-
const hour = new Date().getHours();
|
|
410
|
-
if (!metrics.byHour[hour]) {
|
|
411
|
-
metrics.byHour[hour] = {
|
|
412
|
-
total: 0,
|
|
413
|
-
avgScore: 0,
|
|
414
|
-
};
|
|
356
|
+
// Helper methods
|
|
357
|
+
async appendTrainingData(data) {
|
|
358
|
+
const line = JSON.stringify(data) + '\n';
|
|
359
|
+
await fs.appendFile(this.trainingDataPath, line);
|
|
415
360
|
}
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
* Train neural network for pattern recognition
|
|
430
|
-
*/
|
|
431
|
-
async trainNeuralPatterns() {
|
|
432
|
-
console.log('š§ Training neural patterns from verification data...');
|
|
433
|
-
|
|
434
|
-
try {
|
|
435
|
-
// Call the training command
|
|
436
|
-
const result = execSync(
|
|
437
|
-
'npx claude-flow-novice training neural-train --data .claude-flow/training/verification-data.jsonl --model verification-predictor --epochs 100',
|
|
438
|
-
{ encoding: 'utf8', stdio: 'pipe' },
|
|
439
|
-
);
|
|
440
|
-
|
|
441
|
-
console.log('ā
Neural training completed');
|
|
442
|
-
return { success: true, output: result };
|
|
443
|
-
} catch (error) {
|
|
444
|
-
console.error('ā Neural training failed:', error.message);
|
|
445
|
-
return { success: false, error: error.message };
|
|
361
|
+
async loadModel() {
|
|
362
|
+
try {
|
|
363
|
+
const data = await fs.readFile(this.modelPath, 'utf8');
|
|
364
|
+
return JSON.parse(data);
|
|
365
|
+
} catch {
|
|
366
|
+
return {
|
|
367
|
+
version: '1.0.0',
|
|
368
|
+
created: new Date().toISOString(),
|
|
369
|
+
agentReliability: {},
|
|
370
|
+
patterns: {},
|
|
371
|
+
checkWeights: {}
|
|
372
|
+
};
|
|
373
|
+
}
|
|
446
374
|
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
async appendTrainingData(data) {
|
|
452
|
-
const line = JSON.stringify(data) + '\n';
|
|
453
|
-
await fs.appendFile(this.trainingDataPath, line);
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
async loadModel() {
|
|
457
|
-
try {
|
|
458
|
-
const data = await fs.readFile(this.modelPath, 'utf8');
|
|
459
|
-
return JSON.parse(data);
|
|
460
|
-
} catch {
|
|
461
|
-
return {
|
|
462
|
-
version: '1.0.0',
|
|
463
|
-
created: new Date().toISOString(),
|
|
464
|
-
agentReliability: {},
|
|
465
|
-
patterns: {},
|
|
466
|
-
checkWeights: {},
|
|
467
|
-
};
|
|
375
|
+
async saveModel(model) {
|
|
376
|
+
model.lastUpdated = new Date().toISOString();
|
|
377
|
+
await fs.writeFile(this.modelPath, JSON.stringify(model, null, 2));
|
|
468
378
|
}
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
async saveModel(model) {
|
|
472
|
-
model.lastUpdated = new Date().toISOString();
|
|
473
|
-
await fs.writeFile(this.modelPath, JSON.stringify(model, null, 2));
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
/**
|
|
379
|
+
/**
|
|
477
380
|
* Get training status and statistics
|
|
478
|
-
*/
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
381
|
+
*/ async getTrainingStatus() {
|
|
382
|
+
const model = await this.loadModel();
|
|
383
|
+
const metrics = await this.loadMetrics();
|
|
384
|
+
// Count training data
|
|
385
|
+
let trainingDataCount = 0;
|
|
386
|
+
try {
|
|
387
|
+
const data = await fs.readFile(this.trainingDataPath, 'utf8');
|
|
388
|
+
trainingDataCount = data.split('\n').filter((line)=>line.trim()).length;
|
|
389
|
+
} catch {
|
|
390
|
+
// File doesn't exist
|
|
391
|
+
}
|
|
392
|
+
return {
|
|
393
|
+
modelVersion: model.version,
|
|
394
|
+
lastUpdated: model.lastUpdated,
|
|
395
|
+
trainingDataPoints: trainingDataCount,
|
|
396
|
+
agentReliability: model.agentReliability,
|
|
397
|
+
totalVerifications: metrics.totalVerifications || 0,
|
|
398
|
+
averageScore: metrics.averageScore || 0,
|
|
399
|
+
passRate: metrics.totalVerifications > 0 ? metrics.passedVerifications / metrics.totalVerifications : 0,
|
|
400
|
+
agentPerformance: metrics.byAgent || {},
|
|
401
|
+
recommendations: await this.generateTrainingRecommendations()
|
|
402
|
+
};
|
|
490
403
|
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
};
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
async loadMetrics() {
|
|
509
|
-
try {
|
|
510
|
-
const data = await fs.readFile(this.metricsPath, 'utf8');
|
|
511
|
-
return JSON.parse(data);
|
|
512
|
-
} catch {
|
|
513
|
-
return {};
|
|
404
|
+
async loadMetrics() {
|
|
405
|
+
try {
|
|
406
|
+
const data = await fs.readFile(this.metricsPath, 'utf8');
|
|
407
|
+
return JSON.parse(data);
|
|
408
|
+
} catch {
|
|
409
|
+
return {};
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
constructor(){
|
|
413
|
+
this.trainingDataPath = '.claude-flow/training/verification-data.jsonl';
|
|
414
|
+
this.modelPath = '.claude-flow/models/verification-model.json';
|
|
415
|
+
this.metricsPath = '.claude-flow/metrics/agent-performance.json';
|
|
416
|
+
this.learningRate = 0.1;
|
|
417
|
+
this.initialized = false;
|
|
514
418
|
}
|
|
515
|
-
}
|
|
516
419
|
}
|
|
517
|
-
|
|
518
420
|
/**
|
|
519
421
|
* CLI integration for verification-training
|
|
520
|
-
*/
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
console.log('\nš¤ Agent Reliability:');
|
|
620
|
-
for (const [agent, reliability] of Object.entries(status.agentReliability)) {
|
|
621
|
-
console.log(` ${agent}: ${(reliability * 100).toFixed(1)}%`);
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
if (status.recommendations.length > 0) {
|
|
626
|
-
console.log('\nš” Recommendations:');
|
|
627
|
-
for (const rec of status.recommendations) {
|
|
628
|
-
console.log(` ⢠${rec.action}`);
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
console.log('\nš Commands:');
|
|
633
|
-
console.log(' feed - Feed verification data to training');
|
|
634
|
-
console.log(' predict - Predict verification outcome');
|
|
635
|
-
console.log(' recommend - Get agent recommendation');
|
|
636
|
-
console.log(' train - Trigger neural training');
|
|
637
|
-
console.log(' status - Show training status');
|
|
638
|
-
break;
|
|
639
|
-
}
|
|
422
|
+
*/ export async function verificationTrainingCommand(args, flags) {
|
|
423
|
+
const integration = new VerificationTrainingIntegration();
|
|
424
|
+
await integration.initialize();
|
|
425
|
+
const subcommand = args[0] || 'status';
|
|
426
|
+
switch(subcommand){
|
|
427
|
+
case 'feed':
|
|
428
|
+
// Feed current verification data to training
|
|
429
|
+
const verificationFile = '.swarm/verification-memory.json';
|
|
430
|
+
try {
|
|
431
|
+
const data = await fs.readFile(verificationFile, 'utf8');
|
|
432
|
+
const memory = JSON.parse(data);
|
|
433
|
+
if (memory.history && memory.history.length > 0) {
|
|
434
|
+
console.log(`š Feeding ${memory.history.length} verification records to training...`);
|
|
435
|
+
for (const verification of memory.history){
|
|
436
|
+
await integration.feedVerificationToTraining(verification);
|
|
437
|
+
}
|
|
438
|
+
console.log('ā
Training data updated');
|
|
439
|
+
} else {
|
|
440
|
+
console.log('No verification history to feed');
|
|
441
|
+
}
|
|
442
|
+
} catch (error) {
|
|
443
|
+
console.error('Error reading verification data:', error.message);
|
|
444
|
+
}
|
|
445
|
+
break;
|
|
446
|
+
case 'predict':
|
|
447
|
+
// Predict verification outcome
|
|
448
|
+
const taskType = args[1] || 'default';
|
|
449
|
+
const agentType = args[2] || 'coder';
|
|
450
|
+
const prediction = await integration.predictVerificationOutcome(taskType, agentType);
|
|
451
|
+
console.log('\nš® Verification Prediction:');
|
|
452
|
+
console.log(` Predicted Score: ${prediction.predictedScore.toFixed(3)}`);
|
|
453
|
+
console.log(` Confidence: ${(prediction.confidence * 100).toFixed(1)}%`);
|
|
454
|
+
console.log(` Recommendation: ${prediction.recommendation}`);
|
|
455
|
+
console.log(` Historical Success Rate: ${(prediction.historicalSuccessRate * 100).toFixed(1)}%`);
|
|
456
|
+
console.log(` Data Points: ${prediction.dataPoints}`);
|
|
457
|
+
break;
|
|
458
|
+
case 'recommend':
|
|
459
|
+
// Get agent recommendation
|
|
460
|
+
const task = args[1] || 'default';
|
|
461
|
+
const recommendation = await integration.recommendAgent(task);
|
|
462
|
+
console.log('\nš¤ Agent Recommendation:');
|
|
463
|
+
console.log(` Recommended: ${recommendation.recommended}`);
|
|
464
|
+
console.log(` Reliability: ${(recommendation.reliability * 100).toFixed(1)}%`);
|
|
465
|
+
console.log(` Reason: ${recommendation.reason}`);
|
|
466
|
+
if (recommendation.alternatives && recommendation.alternatives.length > 0) {
|
|
467
|
+
console.log(' Alternatives:');
|
|
468
|
+
for (const alt of recommendation.alternatives){
|
|
469
|
+
console.log(` ⢠${alt.agent}: ${(alt.reliability * 100).toFixed(1)}%`);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
break;
|
|
473
|
+
case 'train':
|
|
474
|
+
// Trigger neural training
|
|
475
|
+
await integration.trainNeuralPatterns();
|
|
476
|
+
break;
|
|
477
|
+
case 'recommendations':
|
|
478
|
+
// Get training recommendations
|
|
479
|
+
const recs = await integration.generateTrainingRecommendations();
|
|
480
|
+
console.log('\nš” Training Recommendations:');
|
|
481
|
+
if (recs.length === 0) {
|
|
482
|
+
console.log(' No recommendations at this time');
|
|
483
|
+
} else {
|
|
484
|
+
for (const rec of recs){
|
|
485
|
+
console.log(` ⢠${rec.action}`);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
break;
|
|
489
|
+
case 'status':
|
|
490
|
+
default:
|
|
491
|
+
// Show training status
|
|
492
|
+
const status = await integration.getTrainingStatus();
|
|
493
|
+
console.log('\nš Verification-Training Status');
|
|
494
|
+
console.log('ā'.repeat(50));
|
|
495
|
+
console.log(`Model Version: ${status.modelVersion}`);
|
|
496
|
+
console.log(`Last Updated: ${status.lastUpdated || 'Never'}`);
|
|
497
|
+
console.log(`Training Data Points: ${status.trainingDataPoints}`);
|
|
498
|
+
console.log(`Total Verifications: ${status.totalVerifications}`);
|
|
499
|
+
console.log(`Average Score: ${status.averageScore.toFixed(3)}`);
|
|
500
|
+
console.log(`Pass Rate: ${(status.passRate * 100).toFixed(1)}%`);
|
|
501
|
+
if (Object.keys(status.agentReliability).length > 0) {
|
|
502
|
+
console.log('\nš¤ Agent Reliability:');
|
|
503
|
+
for (const [agent, reliability] of Object.entries(status.agentReliability)){
|
|
504
|
+
console.log(` ${agent}: ${(reliability * 100).toFixed(1)}%`);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
if (status.recommendations.length > 0) {
|
|
508
|
+
console.log('\nš” Recommendations:');
|
|
509
|
+
for (const rec of status.recommendations){
|
|
510
|
+
console.log(` ⢠${rec.action}`);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
console.log('\nš Commands:');
|
|
514
|
+
console.log(' feed - Feed verification data to training');
|
|
515
|
+
console.log(' predict - Predict verification outcome');
|
|
516
|
+
console.log(' recommend - Get agent recommendation');
|
|
517
|
+
console.log(' train - Trigger neural training');
|
|
518
|
+
console.log(' status - Show training status');
|
|
519
|
+
break;
|
|
520
|
+
}
|
|
640
521
|
}
|
|
641
|
-
|
|
642
522
|
// Export for use in other modules
|
|
643
523
|
export default {
|
|
644
|
-
|
|
645
|
-
|
|
524
|
+
VerificationTrainingIntegration,
|
|
525
|
+
verificationTrainingCommand
|
|
646
526
|
};
|