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,354 +1,307 @@
|
|
|
1
|
-
import { promises as fs } from
|
|
1
|
+
import { promises as fs } from "fs";
|
|
2
2
|
// config-validator.js - Configuration file validation
|
|
3
|
-
|
|
4
3
|
export class ConfigValidator {
|
|
5
|
-
|
|
6
|
-
this.workingDir = workingDir;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
4
|
+
/**
|
|
10
5
|
* Validate .roomodes configuration file
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
6
|
+
*/ async validateRoomodes() {
|
|
7
|
+
const result = {
|
|
8
|
+
success: true,
|
|
9
|
+
errors: [],
|
|
10
|
+
warnings: [],
|
|
11
|
+
config: null
|
|
12
|
+
};
|
|
13
|
+
const roomodesPath = `${this.workingDir}/.roomodes`;
|
|
14
|
+
try {
|
|
15
|
+
// Check if file exists
|
|
16
|
+
const stat = await fs.stat(roomodesPath);
|
|
17
|
+
if (!stat.isFile) {
|
|
18
|
+
result.success = false;
|
|
19
|
+
result.errors.push('.roomodes exists but is not a file');
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
// Read and parse JSON
|
|
23
|
+
const content = await fs.readFile(roomodesPath, 'utf8');
|
|
24
|
+
try {
|
|
25
|
+
const config = JSON.parse(content);
|
|
26
|
+
result.config = config;
|
|
27
|
+
// Validate structure
|
|
28
|
+
const validationResult = this.validateRoomodesStructure(config);
|
|
29
|
+
if (!validationResult.valid) {
|
|
30
|
+
result.success = false;
|
|
31
|
+
result.errors.push(...validationResult.errors);
|
|
32
|
+
}
|
|
33
|
+
result.warnings.push(...validationResult.warnings);
|
|
34
|
+
} catch (jsonError) {
|
|
35
|
+
result.success = false;
|
|
36
|
+
result.errors.push(`Invalid JSON in .roomodes: ${jsonError.message}`);
|
|
37
|
+
}
|
|
38
|
+
} catch (error) {
|
|
39
|
+
if (error instanceof Deno.errors.NotFound) {
|
|
40
|
+
result.warnings.push('.roomodes file not found - SPARC features may not be available');
|
|
41
|
+
} else {
|
|
42
|
+
result.success = false;
|
|
43
|
+
result.errors.push(`Could not read .roomodes: ${error.message}`);
|
|
44
|
+
}
|
|
43
45
|
}
|
|
44
|
-
result
|
|
45
|
-
} catch (jsonError) {
|
|
46
|
-
result.success = false;
|
|
47
|
-
result.errors.push(`Invalid JSON in .roomodes: ${jsonError.message}`);
|
|
48
|
-
}
|
|
49
|
-
} catch (error) {
|
|
50
|
-
if (error instanceof Deno.errors.NotFound) {
|
|
51
|
-
result.warnings.push('.roomodes file not found - SPARC features may not be available');
|
|
52
|
-
} else {
|
|
53
|
-
result.success = false;
|
|
54
|
-
result.errors.push(`Could not read .roomodes: ${error.message}`);
|
|
55
|
-
}
|
|
46
|
+
return result;
|
|
56
47
|
}
|
|
57
|
-
|
|
58
|
-
return result;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
48
|
+
/**
|
|
62
49
|
* Validate CLAUDE.md configuration
|
|
63
|
-
*/
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
50
|
+
*/ async validateClaudeMd() {
|
|
51
|
+
const result = {
|
|
52
|
+
success: true,
|
|
53
|
+
errors: [],
|
|
54
|
+
warnings: [],
|
|
55
|
+
content: null
|
|
56
|
+
};
|
|
57
|
+
const claudeMdPath = `${this.workingDir}/CLAUDE.md`;
|
|
58
|
+
try {
|
|
59
|
+
const content = await fs.readFile(claudeMdPath, 'utf8');
|
|
60
|
+
result.content = content;
|
|
61
|
+
// Check for required sections
|
|
62
|
+
const requiredSections = [
|
|
63
|
+
'# Claude Code Configuration',
|
|
64
|
+
'## Project Overview',
|
|
65
|
+
'## SPARC Development Commands'
|
|
66
|
+
];
|
|
67
|
+
for (const section of requiredSections){
|
|
68
|
+
if (!content.includes(section)) {
|
|
69
|
+
result.warnings.push(`Missing recommended section: ${section}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Check for important command patterns
|
|
73
|
+
const importantCommands = [
|
|
74
|
+
'npx claude-flow-novice sparc',
|
|
75
|
+
'npm run build',
|
|
76
|
+
'npm run test'
|
|
77
|
+
];
|
|
78
|
+
for (const command of importantCommands){
|
|
79
|
+
if (!content.includes(command)) {
|
|
80
|
+
result.warnings.push(`Missing important command reference: ${command}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Check file size
|
|
84
|
+
if (content.length < 100) {
|
|
85
|
+
result.success = false;
|
|
86
|
+
result.errors.push('CLAUDE.md appears to be too short or empty');
|
|
87
|
+
}
|
|
88
|
+
} catch (error) {
|
|
89
|
+
result.success = false;
|
|
90
|
+
result.errors.push(`Could not read CLAUDE.md: ${error.message}`);
|
|
88
91
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
// Check for important command patterns
|
|
92
|
-
const importantCommands = ['npx claude-flow-novice sparc', 'npm run build', 'npm run test'];
|
|
93
|
-
|
|
94
|
-
for (const command of importantCommands) {
|
|
95
|
-
if (!content.includes(command)) {
|
|
96
|
-
result.warnings.push(`Missing important command reference: ${command}`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Check file size
|
|
101
|
-
if (content.length < 100) {
|
|
102
|
-
result.success = false;
|
|
103
|
-
result.errors.push('CLAUDE.md appears to be too short or empty');
|
|
104
|
-
}
|
|
105
|
-
} catch (error) {
|
|
106
|
-
result.success = false;
|
|
107
|
-
result.errors.push(`Could not read CLAUDE.md: ${error.message}`);
|
|
92
|
+
return result;
|
|
108
93
|
}
|
|
109
|
-
|
|
110
|
-
return result;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
94
|
+
/**
|
|
114
95
|
* Validate memory configuration
|
|
115
|
-
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
96
|
+
*/ async validateMemoryConfig() {
|
|
97
|
+
const result = {
|
|
98
|
+
success: true,
|
|
99
|
+
errors: [],
|
|
100
|
+
warnings: [],
|
|
101
|
+
data: null
|
|
102
|
+
};
|
|
103
|
+
const memoryDataPath = `${this.workingDir}/memory/claude-flow-data.json`;
|
|
104
|
+
try {
|
|
105
|
+
const content = await fs.readFile(memoryDataPath, 'utf8');
|
|
106
|
+
try {
|
|
107
|
+
const data = JSON.parse(content);
|
|
108
|
+
result.data = data;
|
|
109
|
+
// Validate structure
|
|
110
|
+
const validationResult = this.validateMemoryDataStructure(data);
|
|
111
|
+
if (!validationResult.valid) {
|
|
112
|
+
result.success = false;
|
|
113
|
+
result.errors.push(...validationResult.errors);
|
|
114
|
+
}
|
|
115
|
+
result.warnings.push(...validationResult.warnings);
|
|
116
|
+
} catch (jsonError) {
|
|
117
|
+
result.success = false;
|
|
118
|
+
result.errors.push(`Invalid JSON in memory data: ${jsonError.message}`);
|
|
119
|
+
}
|
|
120
|
+
} catch (error) {
|
|
121
|
+
result.success = false;
|
|
122
|
+
result.errors.push(`Could not read memory data: ${error.message}`);
|
|
138
123
|
}
|
|
139
|
-
result
|
|
140
|
-
} catch (jsonError) {
|
|
141
|
-
result.success = false;
|
|
142
|
-
result.errors.push(`Invalid JSON in memory data: ${jsonError.message}`);
|
|
143
|
-
}
|
|
144
|
-
} catch (error) {
|
|
145
|
-
result.success = false;
|
|
146
|
-
result.errors.push(`Could not read memory data: ${error.message}`);
|
|
124
|
+
return result;
|
|
147
125
|
}
|
|
148
|
-
|
|
149
|
-
return result;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
126
|
+
/**
|
|
153
127
|
* Validate coordination configuration
|
|
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
|
-
|
|
128
|
+
*/ async validateCoordinationConfig() {
|
|
129
|
+
const result = {
|
|
130
|
+
success: true,
|
|
131
|
+
errors: [],
|
|
132
|
+
warnings: [],
|
|
133
|
+
content: null
|
|
134
|
+
};
|
|
135
|
+
const coordinationPath = `${this.workingDir}/coordination.md`;
|
|
136
|
+
try {
|
|
137
|
+
const content = await fs.readFile(coordinationPath, 'utf8');
|
|
138
|
+
result.content = content;
|
|
139
|
+
// Check for required sections
|
|
140
|
+
const requiredSections = [
|
|
141
|
+
'# Multi-Agent Coordination',
|
|
142
|
+
'## Agent Coordination Patterns',
|
|
143
|
+
'## Memory Management'
|
|
144
|
+
];
|
|
145
|
+
for (const section of requiredSections){
|
|
146
|
+
if (!content.includes(section)) {
|
|
147
|
+
result.warnings.push(`Missing recommended section in coordination.md: ${section}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Check file size
|
|
151
|
+
if (content.length < 50) {
|
|
152
|
+
result.warnings.push('coordination.md appears to be very short');
|
|
153
|
+
}
|
|
154
|
+
} catch (error) {
|
|
155
|
+
result.success = false;
|
|
156
|
+
result.errors.push(`Could not read coordination.md: ${error.message}`);
|
|
179
157
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
// Check file size
|
|
183
|
-
if (content.length < 50) {
|
|
184
|
-
result.warnings.push('coordination.md appears to be very short');
|
|
185
|
-
}
|
|
186
|
-
} catch (error) {
|
|
187
|
-
result.success = false;
|
|
188
|
-
result.errors.push(`Could not read coordination.md: ${error.message}`);
|
|
158
|
+
return result;
|
|
189
159
|
}
|
|
190
|
-
|
|
191
|
-
return result;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
160
|
+
/**
|
|
195
161
|
* Validate executable configuration
|
|
196
|
-
*/
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
162
|
+
*/ async validateExecutable() {
|
|
163
|
+
const result = {
|
|
164
|
+
success: true,
|
|
165
|
+
errors: [],
|
|
166
|
+
warnings: []
|
|
167
|
+
};
|
|
168
|
+
const executablePath = `${this.workingDir}/claude-flow`;
|
|
169
|
+
try {
|
|
170
|
+
const stat = await fs.stat(executablePath);
|
|
171
|
+
if (!stat.isFile) {
|
|
172
|
+
result.success = false;
|
|
173
|
+
result.errors.push('claude-flow-novice executable is not a file');
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
// Check if executable (on Unix systems)
|
|
177
|
+
if (Deno.build.os !== 'windows') {
|
|
178
|
+
const isExecutable = (stat.mode & 0o111) !== 0;
|
|
179
|
+
if (!isExecutable) {
|
|
180
|
+
result.warnings.push('claude-flow-novice file is not executable');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Read and validate content
|
|
184
|
+
const content = await fs.readFile(executablePath, 'utf8');
|
|
185
|
+
// Check for required elements
|
|
186
|
+
if (content.includes('#!/usr/bin/env')) {
|
|
187
|
+
// Script file
|
|
188
|
+
if (!content.includes('claude-flow') && !content.includes('deno run')) {
|
|
189
|
+
result.warnings.push('Executable script may not be properly configured');
|
|
190
|
+
}
|
|
191
|
+
} else {
|
|
192
|
+
result.warnings.push('Executable may not have proper shebang');
|
|
193
|
+
}
|
|
194
|
+
} catch (error) {
|
|
195
|
+
result.success = false;
|
|
196
|
+
result.errors.push(`Could not validate executable: ${error.message}`);
|
|
197
|
+
}
|
|
212
198
|
return result;
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
199
|
+
}
|
|
200
|
+
// Helper methods
|
|
201
|
+
validateRoomodesStructure(config) {
|
|
202
|
+
const result = {
|
|
203
|
+
valid: true,
|
|
204
|
+
errors: [],
|
|
205
|
+
warnings: []
|
|
206
|
+
};
|
|
207
|
+
// Check top-level structure
|
|
208
|
+
if (typeof config !== 'object' || config === null) {
|
|
209
|
+
result.valid = false;
|
|
210
|
+
result.errors.push('.roomodes must be a JSON object');
|
|
211
|
+
return result;
|
|
220
212
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
result.warnings.push('Executable script may not be properly configured');
|
|
213
|
+
// Check for required fields
|
|
214
|
+
const requiredFields = [
|
|
215
|
+
'modes',
|
|
216
|
+
'version'
|
|
217
|
+
];
|
|
218
|
+
for (const field of requiredFields){
|
|
219
|
+
if (!(field in config)) {
|
|
220
|
+
result.warnings.push(`Missing recommended field in .roomodes: ${field}`);
|
|
221
|
+
}
|
|
231
222
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
const result = {
|
|
247
|
-
valid: true,
|
|
248
|
-
errors: [],
|
|
249
|
-
warnings: [],
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
// Check top-level structure
|
|
253
|
-
if (typeof config !== 'object' || config === null) {
|
|
254
|
-
result.valid = false;
|
|
255
|
-
result.errors.push('.roomodes must be a JSON object');
|
|
256
|
-
return result;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// Check for required fields
|
|
260
|
-
const requiredFields = ['modes', 'version'];
|
|
261
|
-
for (const field of requiredFields) {
|
|
262
|
-
if (!(field in config)) {
|
|
263
|
-
result.warnings.push(`Missing recommended field in .roomodes: ${field}`);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
// Validate modes if present
|
|
268
|
-
if ('modes' in config) {
|
|
269
|
-
if (typeof config.modes !== 'object' || config.modes === null) {
|
|
270
|
-
result.valid = false;
|
|
271
|
-
result.errors.push('.roomodes modes must be an object');
|
|
272
|
-
} else {
|
|
273
|
-
// Check each mode
|
|
274
|
-
for (const [modeName, modeConfig] of Object.entries(config.modes)) {
|
|
275
|
-
const modeValidation = this.validateModeConfig(modeName, modeConfig);
|
|
276
|
-
if (!modeValidation.valid) {
|
|
277
|
-
result.warnings.push(...modeValidation.errors.map((err) => `Mode ${modeName}: ${err}`));
|
|
278
|
-
}
|
|
223
|
+
// Validate modes if present
|
|
224
|
+
if ('modes' in config) {
|
|
225
|
+
if (typeof config.modes !== 'object' || config.modes === null) {
|
|
226
|
+
result.valid = false;
|
|
227
|
+
result.errors.push('.roomodes modes must be an object');
|
|
228
|
+
} else {
|
|
229
|
+
// Check each mode
|
|
230
|
+
for (const [modeName, modeConfig] of Object.entries(config.modes)){
|
|
231
|
+
const modeValidation = this.validateModeConfig(modeName, modeConfig);
|
|
232
|
+
if (!modeValidation.valid) {
|
|
233
|
+
result.warnings.push(...modeValidation.errors.map((err)=>`Mode ${modeName}: ${err}`));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
279
237
|
}
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
return result;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
validateModeConfig(modeName, modeConfig) {
|
|
287
|
-
const result = {
|
|
288
|
-
valid: true,
|
|
289
|
-
errors: [],
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
if (typeof modeConfig !== 'object' || modeConfig === null) {
|
|
293
|
-
result.valid = false;
|
|
294
|
-
result.errors.push('mode configuration must be an object');
|
|
295
|
-
return result;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
// Check for recommended fields
|
|
299
|
-
const recommendedFields = ['description', 'persona', 'tools'];
|
|
300
|
-
for (const field of recommendedFields) {
|
|
301
|
-
if (!(field in modeConfig)) {
|
|
302
|
-
result.errors.push(`missing recommended field: ${field}`);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
// Validate specific fields
|
|
307
|
-
if ('tools' in modeConfig && !Array.isArray(modeConfig.tools)) {
|
|
308
|
-
result.errors.push('tools must be an array');
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
if ('description' in modeConfig && typeof modeConfig.description !== 'string') {
|
|
312
|
-
result.errors.push('description must be a string');
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
return result;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
validateMemoryDataStructure(data) {
|
|
319
|
-
const result = {
|
|
320
|
-
valid: true,
|
|
321
|
-
errors: [],
|
|
322
|
-
warnings: [],
|
|
323
|
-
};
|
|
324
|
-
|
|
325
|
-
if (typeof data !== 'object' || data === null) {
|
|
326
|
-
result.valid = false;
|
|
327
|
-
result.errors.push('Memory data must be a JSON object');
|
|
328
|
-
return result;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
// Check for required fields
|
|
332
|
-
const requiredFields = ['agents', 'tasks', 'lastUpdated'];
|
|
333
|
-
for (const field of requiredFields) {
|
|
334
|
-
if (!(field in data)) {
|
|
335
|
-
result.warnings.push(`Missing field in memory data: ${field}`);
|
|
336
|
-
}
|
|
238
|
+
return result;
|
|
337
239
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
240
|
+
validateModeConfig(modeName, modeConfig) {
|
|
241
|
+
const result = {
|
|
242
|
+
valid: true,
|
|
243
|
+
errors: []
|
|
244
|
+
};
|
|
245
|
+
if (typeof modeConfig !== 'object' || modeConfig === null) {
|
|
246
|
+
result.valid = false;
|
|
247
|
+
result.errors.push('mode configuration must be an object');
|
|
248
|
+
return result;
|
|
249
|
+
}
|
|
250
|
+
// Check for recommended fields
|
|
251
|
+
const recommendedFields = [
|
|
252
|
+
'description',
|
|
253
|
+
'persona',
|
|
254
|
+
'tools'
|
|
255
|
+
];
|
|
256
|
+
for (const field of recommendedFields){
|
|
257
|
+
if (!(field in modeConfig)) {
|
|
258
|
+
result.errors.push(`missing recommended field: ${field}`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// Validate specific fields
|
|
262
|
+
if ('tools' in modeConfig && !Array.isArray(modeConfig.tools)) {
|
|
263
|
+
result.errors.push('tools must be an array');
|
|
264
|
+
}
|
|
265
|
+
if ('description' in modeConfig && typeof modeConfig.description !== 'string') {
|
|
266
|
+
result.errors.push('description must be a string');
|
|
267
|
+
}
|
|
268
|
+
return result;
|
|
342
269
|
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
270
|
+
validateMemoryDataStructure(data) {
|
|
271
|
+
const result = {
|
|
272
|
+
valid: true,
|
|
273
|
+
errors: [],
|
|
274
|
+
warnings: []
|
|
275
|
+
};
|
|
276
|
+
if (typeof data !== 'object' || data === null) {
|
|
277
|
+
result.valid = false;
|
|
278
|
+
result.errors.push('Memory data must be a JSON object');
|
|
279
|
+
return result;
|
|
280
|
+
}
|
|
281
|
+
// Check for required fields
|
|
282
|
+
const requiredFields = [
|
|
283
|
+
'agents',
|
|
284
|
+
'tasks',
|
|
285
|
+
'lastUpdated'
|
|
286
|
+
];
|
|
287
|
+
for (const field of requiredFields){
|
|
288
|
+
if (!(field in data)) {
|
|
289
|
+
result.warnings.push(`Missing field in memory data: ${field}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// Validate field types
|
|
293
|
+
if ('agents' in data && !Array.isArray(data.agents)) {
|
|
294
|
+
result.errors.push('agents must be an array');
|
|
295
|
+
}
|
|
296
|
+
if ('tasks' in data && !Array.isArray(data.tasks)) {
|
|
297
|
+
result.errors.push('tasks must be an array');
|
|
298
|
+
}
|
|
299
|
+
if ('lastUpdated' in data && typeof data.lastUpdated !== 'number') {
|
|
300
|
+
result.warnings.push('lastUpdated should be a timestamp number');
|
|
301
|
+
}
|
|
302
|
+
return result;
|
|
346
303
|
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
result.warnings.push('lastUpdated should be a timestamp number');
|
|
304
|
+
constructor(workingDir){
|
|
305
|
+
this.workingDir = workingDir;
|
|
350
306
|
}
|
|
351
|
-
|
|
352
|
-
return result;
|
|
353
|
-
}
|
|
354
307
|
}
|