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,345 +1,320 @@
|
|
|
1
1
|
// agent-copier.js - Copy all agent files during initialization
|
|
2
|
-
import { promises as fs } from
|
|
3
|
-
import { join, dirname } from
|
|
4
|
-
import { fileURLToPath } from
|
|
5
|
-
|
|
2
|
+
import { promises as fs } from "fs";
|
|
3
|
+
import { join, dirname } from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
6
5
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
6
|
const __dirname = dirname(__filename);
|
|
8
|
-
|
|
9
7
|
/**
|
|
10
8
|
* Copy all agent files from the installed package to project directory
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
let sourceAgentsDir;
|
|
21
|
-
|
|
22
|
-
// Try local development first, then package, then cwd
|
|
23
|
-
try {
|
|
24
|
-
await fs.access(localAgentsDir);
|
|
25
|
-
sourceAgentsDir = localAgentsDir;
|
|
26
|
-
console.log(' 📁 Using local development agent files');
|
|
27
|
-
} catch {
|
|
9
|
+
*/ export async function copyAgentFiles(targetDir, options = {}) {
|
|
10
|
+
const { force = false, dryRun = false } = options;
|
|
11
|
+
// Path to agent files - try multiple locations
|
|
12
|
+
const packageAgentsDir = join(__dirname, '../../../../.claude/agents'); // From npm package
|
|
13
|
+
const localAgentsDir = '/workspaces/claude-code-flow/.claude/agents'; // Local development
|
|
14
|
+
const cwdAgentsDir = join(process.cwd(), '.claude/agents'); // Current working directory
|
|
15
|
+
let sourceAgentsDir;
|
|
16
|
+
// Try local development first, then package, then cwd
|
|
28
17
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
} catch
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
// Create target directory
|
|
51
|
-
if (!dryRun) {
|
|
52
|
-
await fs.mkdir(targetAgentsDir, { recursive: true });
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const copiedFiles = [];
|
|
56
|
-
const errors = [];
|
|
57
|
-
|
|
58
|
-
// Recursively copy all agent files
|
|
59
|
-
async function copyRecursive(srcDir, destDir) {
|
|
60
|
-
const items = await fs.readdir(srcDir, { withFileTypes: true });
|
|
61
|
-
|
|
62
|
-
for (const item of items) {
|
|
63
|
-
const srcPath = join(srcDir, item.name);
|
|
64
|
-
const destPath = join(destDir, item.name);
|
|
65
|
-
|
|
66
|
-
if (item.isDirectory()) {
|
|
67
|
-
if (!dryRun) {
|
|
68
|
-
await fs.mkdir(destPath, { recursive: true });
|
|
69
|
-
}
|
|
70
|
-
await copyRecursive(srcPath, destPath);
|
|
71
|
-
} else if (item.isFile() && item.name.endsWith('.md')) {
|
|
72
|
-
try {
|
|
73
|
-
// Check if file already exists
|
|
74
|
-
let shouldCopy = force;
|
|
75
|
-
if (!force) {
|
|
76
|
-
try {
|
|
77
|
-
await fs.access(destPath);
|
|
78
|
-
// File exists, skip unless force is true
|
|
79
|
-
continue;
|
|
80
|
-
} catch {
|
|
81
|
-
// File doesn't exist, safe to copy
|
|
82
|
-
shouldCopy = true;
|
|
83
|
-
}
|
|
18
|
+
await fs.access(localAgentsDir);
|
|
19
|
+
sourceAgentsDir = localAgentsDir;
|
|
20
|
+
console.log(' 📁 Using local development agent files');
|
|
21
|
+
} catch {
|
|
22
|
+
try {
|
|
23
|
+
await fs.access(packageAgentsDir);
|
|
24
|
+
sourceAgentsDir = packageAgentsDir;
|
|
25
|
+
console.log(' 📁 Using packaged agent files');
|
|
26
|
+
} catch {
|
|
27
|
+
try {
|
|
28
|
+
await fs.access(cwdAgentsDir);
|
|
29
|
+
sourceAgentsDir = cwdAgentsDir;
|
|
30
|
+
console.log(' 📁 Using current directory agent files');
|
|
31
|
+
} catch {
|
|
32
|
+
console.log(' ⚠️ No agent files found in any location');
|
|
33
|
+
return {
|
|
34
|
+
success: false,
|
|
35
|
+
error: 'Agent files not found'
|
|
36
|
+
};
|
|
84
37
|
}
|
|
85
|
-
|
|
86
|
-
if (shouldCopy && !dryRun) {
|
|
87
|
-
const content = await fs.readFile(srcPath, 'utf8');
|
|
88
|
-
await fs.writeFile(destPath, content, 'utf8');
|
|
89
|
-
copiedFiles.push(destPath.replace(targetDir + '/', ''));
|
|
90
|
-
} else if (dryRun) {
|
|
91
|
-
copiedFiles.push(destPath.replace(targetDir + '/', ''));
|
|
92
|
-
}
|
|
93
|
-
} catch (err) {
|
|
94
|
-
errors.push(`Failed to copy ${item.name}: ${err.message}`);
|
|
95
|
-
}
|
|
96
38
|
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
await copyRecursive(sourceAgentsDir, targetAgentsDir);
|
|
101
|
-
|
|
102
|
-
if (!dryRun && copiedFiles.length > 0) {
|
|
103
|
-
console.log(` ✅ Copied ${copiedFiles.length} agent files`);
|
|
104
|
-
console.log(' 📋 Agent system initialized with 64 specialized agents');
|
|
105
|
-
console.log(
|
|
106
|
-
' 🎯 Available categories: Core, Swarm, Consensus, Performance, GitHub, SPARC, Testing',
|
|
107
|
-
);
|
|
108
|
-
} else if (dryRun) {
|
|
109
|
-
console.log(` [DRY RUN] Would copy ${copiedFiles.length} agent files`);
|
|
110
39
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
40
|
+
const targetAgentsDir = join(targetDir, '.claude/agents');
|
|
41
|
+
console.log('📁 Copying agent system files...');
|
|
42
|
+
console.log(` 📂 Source: ${sourceAgentsDir}`);
|
|
43
|
+
console.log(` 📂 Target: ${targetAgentsDir}`);
|
|
44
|
+
try {
|
|
45
|
+
// Create target directory
|
|
46
|
+
if (!dryRun) {
|
|
47
|
+
await fs.mkdir(targetAgentsDir, {
|
|
48
|
+
recursive: true
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const copiedFiles = [];
|
|
52
|
+
const errors = [];
|
|
53
|
+
// Recursively copy all agent files
|
|
54
|
+
async function copyRecursive(srcDir, destDir) {
|
|
55
|
+
const items = await fs.readdir(srcDir, {
|
|
56
|
+
withFileTypes: true
|
|
57
|
+
});
|
|
58
|
+
for (const item of items){
|
|
59
|
+
const srcPath = join(srcDir, item.name);
|
|
60
|
+
const destPath = join(destDir, item.name);
|
|
61
|
+
if (item.isDirectory()) {
|
|
62
|
+
if (!dryRun) {
|
|
63
|
+
await fs.mkdir(destPath, {
|
|
64
|
+
recursive: true
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
await copyRecursive(srcPath, destPath);
|
|
68
|
+
} else if (item.isFile() && item.name.endsWith('.md')) {
|
|
69
|
+
try {
|
|
70
|
+
// Check if file already exists
|
|
71
|
+
let shouldCopy = force;
|
|
72
|
+
if (!force) {
|
|
73
|
+
try {
|
|
74
|
+
await fs.access(destPath);
|
|
75
|
+
continue;
|
|
76
|
+
} catch {
|
|
77
|
+
// File doesn't exist, safe to copy
|
|
78
|
+
shouldCopy = true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (shouldCopy && !dryRun) {
|
|
82
|
+
const content = await fs.readFile(srcPath, 'utf8');
|
|
83
|
+
await fs.writeFile(destPath, content, 'utf8');
|
|
84
|
+
copiedFiles.push(destPath.replace(targetDir + '/', ''));
|
|
85
|
+
} else if (dryRun) {
|
|
86
|
+
copiedFiles.push(destPath.replace(targetDir + '/', ''));
|
|
87
|
+
}
|
|
88
|
+
} catch (err) {
|
|
89
|
+
errors.push(`Failed to copy ${item.name}: ${err.message}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
await copyRecursive(sourceAgentsDir, targetAgentsDir);
|
|
95
|
+
if (!dryRun && copiedFiles.length > 0) {
|
|
96
|
+
console.log(` ✅ Copied ${copiedFiles.length} agent files`);
|
|
97
|
+
console.log(' 📋 Agent system initialized with 64 specialized agents');
|
|
98
|
+
console.log(' 🎯 Available categories: Core, Swarm, Consensus, Performance, GitHub, SPARC, Testing');
|
|
99
|
+
} else if (dryRun) {
|
|
100
|
+
console.log(` [DRY RUN] Would copy ${copiedFiles.length} agent files`);
|
|
101
|
+
}
|
|
102
|
+
if (errors.length > 0) {
|
|
103
|
+
console.log(' ⚠️ Some agent files could not be copied:');
|
|
104
|
+
errors.forEach((error)=>console.log(` - ${error}`));
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
success: true,
|
|
108
|
+
copiedFiles,
|
|
109
|
+
errors,
|
|
110
|
+
totalAgents: copiedFiles.length
|
|
111
|
+
};
|
|
112
|
+
} catch (err) {
|
|
113
|
+
console.log(` ❌ Failed to copy agent files: ${err.message}`);
|
|
114
|
+
return {
|
|
115
|
+
success: false,
|
|
116
|
+
error: err.message,
|
|
117
|
+
copiedFiles: [],
|
|
118
|
+
errors: [
|
|
119
|
+
err.message
|
|
120
|
+
]
|
|
121
|
+
};
|
|
115
122
|
}
|
|
116
|
-
|
|
117
|
-
return {
|
|
118
|
-
success: true,
|
|
119
|
-
copiedFiles,
|
|
120
|
-
errors,
|
|
121
|
-
totalAgents: copiedFiles.length,
|
|
122
|
-
};
|
|
123
|
-
} catch (err) {
|
|
124
|
-
console.log(` ❌ Failed to copy agent files: ${err.message}`);
|
|
125
|
-
return {
|
|
126
|
-
success: false,
|
|
127
|
-
error: err.message,
|
|
128
|
-
copiedFiles: [],
|
|
129
|
-
errors: [err.message],
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
123
|
}
|
|
133
|
-
|
|
134
124
|
/**
|
|
135
125
|
* Create agent directories structure
|
|
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
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
console.log(` ✅ Created ${agentDirs.length} agent directories`);
|
|
126
|
+
*/ export async function createAgentDirectories(targetDir, dryRun = false) {
|
|
127
|
+
const agentDirs = [
|
|
128
|
+
'.claude',
|
|
129
|
+
'.claude/agents',
|
|
130
|
+
'.claude/agents/core',
|
|
131
|
+
'.claude/agents/swarm',
|
|
132
|
+
'.claude/agents/hive-mind',
|
|
133
|
+
'.claude/agents/consensus',
|
|
134
|
+
'.claude/agents/optimization',
|
|
135
|
+
'.claude/agents/github',
|
|
136
|
+
'.claude/agents/sparc',
|
|
137
|
+
'.claude/agents/testing',
|
|
138
|
+
'.claude/agents/testing/unit',
|
|
139
|
+
'.claude/agents/testing/validation',
|
|
140
|
+
'.claude/agents/templates',
|
|
141
|
+
'.claude/agents/analysis',
|
|
142
|
+
'.claude/agents/analysis/code-review',
|
|
143
|
+
'.claude/agents/architecture',
|
|
144
|
+
'.claude/agents/architecture/system-design',
|
|
145
|
+
'.claude/agents/data',
|
|
146
|
+
'.claude/agents/data/ml',
|
|
147
|
+
'.claude/agents/development',
|
|
148
|
+
'.claude/agents/development/backend',
|
|
149
|
+
'.claude/agents/devops',
|
|
150
|
+
'.claude/agents/devops/ci-cd',
|
|
151
|
+
'.claude/agents/documentation',
|
|
152
|
+
'.claude/agents/documentation/api-docs',
|
|
153
|
+
'.claude/agents/specialized',
|
|
154
|
+
'.claude/agents/specialized/mobile',
|
|
155
|
+
'.claude/commands'
|
|
156
|
+
];
|
|
157
|
+
if (dryRun) {
|
|
158
|
+
console.log(` [DRY RUN] Would create ${agentDirs.length} agent directories`);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
for (const dir of agentDirs){
|
|
162
|
+
await fs.mkdir(join(targetDir, dir), {
|
|
163
|
+
recursive: true
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
console.log(` ✅ Created ${agentDirs.length} agent directories`);
|
|
179
167
|
}
|
|
180
|
-
|
|
181
168
|
/**
|
|
182
169
|
* Validate agent system after copying
|
|
183
|
-
*/
|
|
184
|
-
/**
|
|
170
|
+
*/ /**
|
|
185
171
|
* Copy all command files from the installed package to project directory
|
|
186
|
-
*/
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
let sourceCommandsDir;
|
|
196
|
-
|
|
197
|
-
// Try local development first, then package, then cwd
|
|
198
|
-
try {
|
|
199
|
-
await fs.access(localCommandsDir);
|
|
200
|
-
sourceCommandsDir = localCommandsDir;
|
|
201
|
-
console.log(' 📁 Using local development command files');
|
|
202
|
-
} catch {
|
|
172
|
+
*/ export async function copyCommandFiles(targetDir, options = {}) {
|
|
173
|
+
const { force = false, dryRun = false } = options;
|
|
174
|
+
// Path to command files - try multiple locations
|
|
175
|
+
const packageCommandsDir = join(__dirname, '../../../../.claude/commands'); // From npm package
|
|
176
|
+
const localCommandsDir = '/workspaces/claude-code-flow/.claude/commands'; // Local development
|
|
177
|
+
const cwdCommandsDir = join(process.cwd(), '.claude/commands'); // Current working directory
|
|
178
|
+
let sourceCommandsDir;
|
|
179
|
+
// Try local development first, then package, then cwd
|
|
203
180
|
try {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
} catch
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
console.log(` 📂 Target: ${targetCommandsDir}`);
|
|
224
|
-
|
|
225
|
-
try {
|
|
226
|
-
// Create target directory
|
|
227
|
-
if (!dryRun) {
|
|
228
|
-
await fs.mkdir(targetCommandsDir, { recursive: true });
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
const copiedFiles = [];
|
|
232
|
-
const errors = [];
|
|
233
|
-
|
|
234
|
-
// Recursively copy all command files
|
|
235
|
-
async function copyRecursive(srcDir, destDir) {
|
|
236
|
-
const items = await fs.readdir(srcDir, { withFileTypes: true });
|
|
237
|
-
|
|
238
|
-
for (const item of items) {
|
|
239
|
-
const srcPath = join(srcDir, item.name);
|
|
240
|
-
const destPath = join(destDir, item.name);
|
|
241
|
-
|
|
242
|
-
if (item.isDirectory()) {
|
|
243
|
-
if (!dryRun) {
|
|
244
|
-
await fs.mkdir(destPath, { recursive: true });
|
|
245
|
-
}
|
|
246
|
-
await copyRecursive(srcPath, destPath);
|
|
247
|
-
} else if (item.isFile() && item.name.endsWith('.md')) {
|
|
248
|
-
try {
|
|
249
|
-
// Check if file already exists
|
|
250
|
-
let shouldCopy = force;
|
|
251
|
-
if (!force) {
|
|
252
|
-
try {
|
|
253
|
-
await fs.access(destPath);
|
|
254
|
-
// File exists, skip unless force is true
|
|
255
|
-
continue;
|
|
256
|
-
} catch {
|
|
257
|
-
// File doesn't exist, safe to copy
|
|
258
|
-
shouldCopy = true;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
if (shouldCopy && !dryRun) {
|
|
263
|
-
const content = await fs.readFile(srcPath, 'utf8');
|
|
264
|
-
await fs.writeFile(destPath, content, 'utf8');
|
|
265
|
-
copiedFiles.push(destPath.replace(targetDir + '/', ''));
|
|
266
|
-
} else if (dryRun) {
|
|
267
|
-
copiedFiles.push(destPath.replace(targetDir + '/', ''));
|
|
181
|
+
await fs.access(localCommandsDir);
|
|
182
|
+
sourceCommandsDir = localCommandsDir;
|
|
183
|
+
console.log(' 📁 Using local development command files');
|
|
184
|
+
} catch {
|
|
185
|
+
try {
|
|
186
|
+
await fs.access(packageCommandsDir);
|
|
187
|
+
sourceCommandsDir = packageCommandsDir;
|
|
188
|
+
console.log(' 📁 Using packaged command files');
|
|
189
|
+
} catch {
|
|
190
|
+
try {
|
|
191
|
+
await fs.access(cwdCommandsDir);
|
|
192
|
+
sourceCommandsDir = cwdCommandsDir;
|
|
193
|
+
console.log(' 📁 Using current directory command files');
|
|
194
|
+
} catch {
|
|
195
|
+
console.log(' ⚠️ No command files found in any location');
|
|
196
|
+
return {
|
|
197
|
+
success: false,
|
|
198
|
+
error: 'Command files not found'
|
|
199
|
+
};
|
|
268
200
|
}
|
|
269
|
-
} catch (err) {
|
|
270
|
-
errors.push(`Failed to copy ${item.name}: ${err.message}`);
|
|
271
|
-
}
|
|
272
201
|
}
|
|
273
|
-
}
|
|
274
202
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
203
|
+
const targetCommandsDir = join(targetDir, '.claude/commands');
|
|
204
|
+
console.log('📁 Copying command system files...');
|
|
205
|
+
console.log(` 📂 Source: ${sourceCommandsDir}`);
|
|
206
|
+
console.log(` 📂 Target: ${targetCommandsDir}`);
|
|
207
|
+
try {
|
|
208
|
+
// Create target directory
|
|
209
|
+
if (!dryRun) {
|
|
210
|
+
await fs.mkdir(targetCommandsDir, {
|
|
211
|
+
recursive: true
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
const copiedFiles = [];
|
|
215
|
+
const errors = [];
|
|
216
|
+
// Recursively copy all command files
|
|
217
|
+
async function copyRecursive(srcDir, destDir) {
|
|
218
|
+
const items = await fs.readdir(srcDir, {
|
|
219
|
+
withFileTypes: true
|
|
220
|
+
});
|
|
221
|
+
for (const item of items){
|
|
222
|
+
const srcPath = join(srcDir, item.name);
|
|
223
|
+
const destPath = join(destDir, item.name);
|
|
224
|
+
if (item.isDirectory()) {
|
|
225
|
+
if (!dryRun) {
|
|
226
|
+
await fs.mkdir(destPath, {
|
|
227
|
+
recursive: true
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
await copyRecursive(srcPath, destPath);
|
|
231
|
+
} else if (item.isFile() && item.name.endsWith('.md')) {
|
|
232
|
+
try {
|
|
233
|
+
// Check if file already exists
|
|
234
|
+
let shouldCopy = force;
|
|
235
|
+
if (!force) {
|
|
236
|
+
try {
|
|
237
|
+
await fs.access(destPath);
|
|
238
|
+
continue;
|
|
239
|
+
} catch {
|
|
240
|
+
// File doesn't exist, safe to copy
|
|
241
|
+
shouldCopy = true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (shouldCopy && !dryRun) {
|
|
245
|
+
const content = await fs.readFile(srcPath, 'utf8');
|
|
246
|
+
await fs.writeFile(destPath, content, 'utf8');
|
|
247
|
+
copiedFiles.push(destPath.replace(targetDir + '/', ''));
|
|
248
|
+
} else if (dryRun) {
|
|
249
|
+
copiedFiles.push(destPath.replace(targetDir + '/', ''));
|
|
250
|
+
}
|
|
251
|
+
} catch (err) {
|
|
252
|
+
errors.push(`Failed to copy ${item.name}: ${err.message}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
await copyRecursive(sourceCommandsDir, targetCommandsDir);
|
|
258
|
+
if (!dryRun && copiedFiles.length > 0) {
|
|
259
|
+
console.log(` ✅ Copied ${copiedFiles.length} command files`);
|
|
260
|
+
console.log(' 📋 Command system initialized with comprehensive documentation');
|
|
261
|
+
console.log(' 🎯 Available categories: Analysis, Automation, GitHub, Hooks, Memory, Flow Nexus');
|
|
262
|
+
} else if (dryRun) {
|
|
263
|
+
console.log(` [DRY RUN] Would copy ${copiedFiles.length} command files`);
|
|
264
|
+
}
|
|
265
|
+
if (errors.length > 0) {
|
|
266
|
+
console.log(' ⚠️ Some command files could not be copied:');
|
|
267
|
+
errors.forEach((error)=>console.log(` - ${error}`));
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
success: true,
|
|
271
|
+
copiedFiles,
|
|
272
|
+
errors,
|
|
273
|
+
totalCommands: copiedFiles.length
|
|
274
|
+
};
|
|
275
|
+
} catch (err) {
|
|
276
|
+
console.log(` ❌ Failed to copy command files: ${err.message}`);
|
|
277
|
+
return {
|
|
278
|
+
success: false,
|
|
279
|
+
error: err.message,
|
|
280
|
+
copiedFiles: [],
|
|
281
|
+
errors: [
|
|
282
|
+
err.message
|
|
283
|
+
]
|
|
284
|
+
};
|
|
291
285
|
}
|
|
292
|
-
|
|
293
|
-
return {
|
|
294
|
-
success: true,
|
|
295
|
-
copiedFiles,
|
|
296
|
-
errors,
|
|
297
|
-
totalCommands: copiedFiles.length,
|
|
298
|
-
};
|
|
299
|
-
} catch (err) {
|
|
300
|
-
console.log(` ❌ Failed to copy command files: ${err.message}`);
|
|
301
|
-
return {
|
|
302
|
-
success: false,
|
|
303
|
-
error: err.message,
|
|
304
|
-
copiedFiles: [],
|
|
305
|
-
errors: [err.message],
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
286
|
}
|
|
309
|
-
|
|
310
287
|
export async function validateAgentSystem(targetDir) {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
288
|
+
const agentsDir = join(targetDir, '.claude/agents');
|
|
289
|
+
try {
|
|
290
|
+
const categories = await fs.readdir(agentsDir, {
|
|
291
|
+
withFileTypes: true
|
|
292
|
+
});
|
|
293
|
+
const agentCategories = categories.filter((item)=>item.isDirectory()).map((item)=>item.name);
|
|
294
|
+
let totalAgents = 0;
|
|
295
|
+
for (const category of agentCategories){
|
|
296
|
+
const categoryPath = join(agentsDir, category);
|
|
297
|
+
const items = await fs.readdir(categoryPath, {
|
|
298
|
+
withFileTypes: true
|
|
299
|
+
});
|
|
300
|
+
const agentFiles = items.filter((item)=>item.isFile() && item.name.endsWith('.md'));
|
|
301
|
+
totalAgents += agentFiles.length;
|
|
302
|
+
}
|
|
303
|
+
console.log(' 🔍 Agent system validation:');
|
|
304
|
+
console.log(` • Categories: ${agentCategories.length}`);
|
|
305
|
+
console.log(` • Total agents: ${totalAgents}`);
|
|
306
|
+
console.log(` • Categories: ${agentCategories.join(', ')}`);
|
|
307
|
+
return {
|
|
308
|
+
valid: totalAgents > 50,
|
|
309
|
+
categories: agentCategories.length,
|
|
310
|
+
totalAgents,
|
|
311
|
+
categoryNames: agentCategories
|
|
312
|
+
};
|
|
313
|
+
} catch (err) {
|
|
314
|
+
console.log(` ⚠️ Agent system validation failed: ${err.message}`);
|
|
315
|
+
return {
|
|
316
|
+
valid: false,
|
|
317
|
+
error: err.message
|
|
318
|
+
};
|
|
325
319
|
}
|
|
326
|
-
|
|
327
|
-
console.log(' 🔍 Agent system validation:');
|
|
328
|
-
console.log(` • Categories: ${agentCategories.length}`);
|
|
329
|
-
console.log(` • Total agents: ${totalAgents}`);
|
|
330
|
-
console.log(` • Categories: ${agentCategories.join(', ')}`);
|
|
331
|
-
|
|
332
|
-
return {
|
|
333
|
-
valid: totalAgents > 50, // Should have at least 50+ agents
|
|
334
|
-
categories: agentCategories.length,
|
|
335
|
-
totalAgents,
|
|
336
|
-
categoryNames: agentCategories,
|
|
337
|
-
};
|
|
338
|
-
} catch (err) {
|
|
339
|
-
console.log(` ⚠️ Agent system validation failed: ${err.message}`);
|
|
340
|
-
return {
|
|
341
|
-
valid: false,
|
|
342
|
-
error: err.message,
|
|
343
|
-
};
|
|
344
|
-
}
|
|
345
320
|
}
|