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
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Validator - Validates successful migration
|
|
3
|
+
*/ function _define_property(obj, key, value) {
|
|
4
|
+
if (key in obj) {
|
|
5
|
+
Object.defineProperty(obj, key, {
|
|
6
|
+
value: value,
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
writable: true
|
|
10
|
+
});
|
|
11
|
+
} else {
|
|
12
|
+
obj[key] = value;
|
|
13
|
+
}
|
|
14
|
+
return obj;
|
|
15
|
+
}
|
|
16
|
+
import * as fs from "fs-extra";
|
|
17
|
+
import * as path from "path";
|
|
18
|
+
import * as chalk from "chalk";
|
|
19
|
+
import { glob } from "glob";
|
|
20
|
+
export class MigrationValidator {
|
|
21
|
+
async validate(projectPath) {
|
|
22
|
+
const result = {
|
|
23
|
+
valid: true,
|
|
24
|
+
checks: [],
|
|
25
|
+
errors: [],
|
|
26
|
+
warnings: []
|
|
27
|
+
};
|
|
28
|
+
// Check file structure
|
|
29
|
+
await this.validateFileStructure(projectPath, result);
|
|
30
|
+
// Check command files
|
|
31
|
+
await this.validateCommandFiles(projectPath, result);
|
|
32
|
+
// Check configuration files
|
|
33
|
+
await this.validateConfiguration(projectPath, result);
|
|
34
|
+
// Check file integrity
|
|
35
|
+
await this.validateFileIntegrity(projectPath, result);
|
|
36
|
+
// Check functionality
|
|
37
|
+
await this.validateFunctionality(projectPath, result);
|
|
38
|
+
// Overall validation
|
|
39
|
+
result.valid = result.errors.length === 0;
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
async validateFileStructure(projectPath, result) {
|
|
43
|
+
const check = {
|
|
44
|
+
name: 'File Structure',
|
|
45
|
+
passed: true
|
|
46
|
+
};
|
|
47
|
+
// Check .claude directory exists
|
|
48
|
+
const claudePath = path.join(projectPath, '.claude');
|
|
49
|
+
if (!await fs.pathExists(claudePath)) {
|
|
50
|
+
check.passed = false;
|
|
51
|
+
result.errors.push('.claude directory not found');
|
|
52
|
+
}
|
|
53
|
+
// Check commands directory
|
|
54
|
+
const commandsPath = path.join(claudePath, 'commands');
|
|
55
|
+
if (!await fs.pathExists(commandsPath)) {
|
|
56
|
+
check.passed = false;
|
|
57
|
+
result.errors.push('.claude/commands directory not found');
|
|
58
|
+
}
|
|
59
|
+
// Check required files
|
|
60
|
+
for (const file of this.requiredFiles){
|
|
61
|
+
const filePath = path.join(projectPath, file);
|
|
62
|
+
if (!await fs.pathExists(filePath)) {
|
|
63
|
+
check.passed = false;
|
|
64
|
+
result.errors.push(`Required file missing: ${file}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
result.checks.push(check);
|
|
68
|
+
}
|
|
69
|
+
async validateCommandFiles(projectPath, result) {
|
|
70
|
+
const check = {
|
|
71
|
+
name: 'Command Files',
|
|
72
|
+
passed: true
|
|
73
|
+
};
|
|
74
|
+
const commandsPath = path.join(projectPath, '.claude/commands');
|
|
75
|
+
if (await fs.pathExists(commandsPath)) {
|
|
76
|
+
for (const command of this.requiredCommands){
|
|
77
|
+
const commandFile = path.join(commandsPath, `${command}.md`);
|
|
78
|
+
const sparcCommandFile = path.join(commandsPath, 'sparc', `${command.replace('sparc-', '')}.md`);
|
|
79
|
+
const hasMainFile = await fs.pathExists(commandFile);
|
|
80
|
+
const hasSparcFile = await fs.pathExists(sparcCommandFile);
|
|
81
|
+
if (!hasMainFile && !hasSparcFile) {
|
|
82
|
+
check.passed = false;
|
|
83
|
+
result.errors.push(`Command file missing: ${command}.md`);
|
|
84
|
+
} else {
|
|
85
|
+
// Validate file content
|
|
86
|
+
const filePath = hasMainFile ? commandFile : sparcCommandFile;
|
|
87
|
+
await this.validateCommandFileContent(filePath, command, result);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
check.passed = false;
|
|
92
|
+
result.errors.push('Commands directory not found');
|
|
93
|
+
}
|
|
94
|
+
result.checks.push(check);
|
|
95
|
+
}
|
|
96
|
+
async validateCommandFileContent(filePath, command, result) {
|
|
97
|
+
try {
|
|
98
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
99
|
+
// Check for minimum content requirements
|
|
100
|
+
const hasDescription = content.includes('description') || content.includes('Description');
|
|
101
|
+
const hasInstructions = content.length > 100; // Minimum content length
|
|
102
|
+
if (!hasDescription) {
|
|
103
|
+
result.warnings.push(`Command ${command} may be missing description`);
|
|
104
|
+
}
|
|
105
|
+
if (!hasInstructions) {
|
|
106
|
+
result.warnings.push(`Command ${command} may have insufficient content`);
|
|
107
|
+
}
|
|
108
|
+
// Check for optimization indicators
|
|
109
|
+
const hasOptimizedContent = content.includes('optimization') || content.includes('performance') || content.includes('efficient');
|
|
110
|
+
if (!hasOptimizedContent && command.includes('sparc')) {
|
|
111
|
+
result.warnings.push(`SPARC command ${command} may not be optimized`);
|
|
112
|
+
}
|
|
113
|
+
} catch (error) {
|
|
114
|
+
result.errors.push(`Failed to validate ${command}: ${error instanceof Error ? error.message : String(error)}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async validateConfiguration(projectPath, result) {
|
|
118
|
+
const check = {
|
|
119
|
+
name: 'Configuration Files',
|
|
120
|
+
passed: true
|
|
121
|
+
};
|
|
122
|
+
// Check CLAUDE.md
|
|
123
|
+
const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
|
|
124
|
+
if (await fs.pathExists(claudeMdPath)) {
|
|
125
|
+
const content = await fs.readFile(claudeMdPath, 'utf-8');
|
|
126
|
+
// Check for SPARC configuration
|
|
127
|
+
if (!content.includes('SPARC')) {
|
|
128
|
+
result.warnings.push('CLAUDE.md may not include SPARC configuration');
|
|
129
|
+
}
|
|
130
|
+
// Check for key sections
|
|
131
|
+
const requiredSections = [
|
|
132
|
+
'Project Overview',
|
|
133
|
+
'SPARC Development',
|
|
134
|
+
'Memory Integration'
|
|
135
|
+
];
|
|
136
|
+
for (const section of requiredSections){
|
|
137
|
+
if (!content.includes(section)) {
|
|
138
|
+
result.warnings.push(`CLAUDE.md missing section: ${section}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
} else {
|
|
142
|
+
result.warnings.push('CLAUDE.md not found');
|
|
143
|
+
}
|
|
144
|
+
// Check .roomodes
|
|
145
|
+
const roomodesPath = path.join(projectPath, '.roomodes');
|
|
146
|
+
if (await fs.pathExists(roomodesPath)) {
|
|
147
|
+
try {
|
|
148
|
+
const roomodes = await fs.readJson(roomodesPath);
|
|
149
|
+
const requiredModes = [
|
|
150
|
+
'architect',
|
|
151
|
+
'code',
|
|
152
|
+
'tdd',
|
|
153
|
+
'debug'
|
|
154
|
+
];
|
|
155
|
+
for (const mode of requiredModes){
|
|
156
|
+
if (!roomodes[mode]) {
|
|
157
|
+
result.warnings.push(`Missing SPARC mode: ${mode}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
} catch (error) {
|
|
161
|
+
result.errors.push(`Invalid .roomodes file: ${error instanceof Error ? error.message : String(error)}`);
|
|
162
|
+
check.passed = false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
result.checks.push(check);
|
|
166
|
+
}
|
|
167
|
+
async validateFileIntegrity(projectPath, result) {
|
|
168
|
+
const check = {
|
|
169
|
+
name: 'File Integrity',
|
|
170
|
+
passed: true
|
|
171
|
+
};
|
|
172
|
+
// Check for corrupted files
|
|
173
|
+
const claudePath = path.join(projectPath, '.claude');
|
|
174
|
+
if (await fs.pathExists(claudePath)) {
|
|
175
|
+
const files = await glob('**/*.md', {
|
|
176
|
+
cwd: claudePath
|
|
177
|
+
});
|
|
178
|
+
for (const file of files){
|
|
179
|
+
try {
|
|
180
|
+
const content = await fs.readFile(path.join(claudePath, file), 'utf-8');
|
|
181
|
+
// Basic integrity checks
|
|
182
|
+
if (content.length === 0) {
|
|
183
|
+
result.errors.push(`Empty file: ${file}`);
|
|
184
|
+
check.passed = false;
|
|
185
|
+
}
|
|
186
|
+
// Check for binary data in text files
|
|
187
|
+
if (content.includes('\0')) {
|
|
188
|
+
result.errors.push(`Corrupted text file: ${file}`);
|
|
189
|
+
check.passed = false;
|
|
190
|
+
}
|
|
191
|
+
} catch (error) {
|
|
192
|
+
result.errors.push(`Cannot read file ${file}: ${error instanceof Error ? error.message : String(error)}`);
|
|
193
|
+
check.passed = false;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
result.checks.push(check);
|
|
198
|
+
}
|
|
199
|
+
async validateFunctionality(projectPath, result) {
|
|
200
|
+
const check = {
|
|
201
|
+
name: 'Functionality',
|
|
202
|
+
passed: true
|
|
203
|
+
};
|
|
204
|
+
// Check directory permissions
|
|
205
|
+
const claudePath = path.join(projectPath, '.claude');
|
|
206
|
+
if (await fs.pathExists(claudePath)) {
|
|
207
|
+
try {
|
|
208
|
+
// Test write permissions
|
|
209
|
+
const testFile = path.join(claudePath, '.test-write');
|
|
210
|
+
await fs.writeFile(testFile, 'test');
|
|
211
|
+
await fs.remove(testFile);
|
|
212
|
+
} catch (error) {
|
|
213
|
+
result.warnings.push('.claude directory may not be writable');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Check for potential conflicts
|
|
217
|
+
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
218
|
+
if (await fs.pathExists(packageJsonPath)) {
|
|
219
|
+
try {
|
|
220
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
221
|
+
// Check for script conflicts
|
|
222
|
+
const scripts = packageJson.scripts || {};
|
|
223
|
+
const conflictingScripts = Object.keys(scripts).filter((script)=>script.startsWith('claude-flow') || script.startsWith('sparc'));
|
|
224
|
+
if (conflictingScripts.length > 0) {
|
|
225
|
+
result.warnings.push(`Potential script conflicts: ${conflictingScripts.join(', ')}`);
|
|
226
|
+
}
|
|
227
|
+
} catch (error) {
|
|
228
|
+
result.warnings.push('Could not validate package.json');
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
result.checks.push(check);
|
|
232
|
+
}
|
|
233
|
+
printValidation(validation) {
|
|
234
|
+
console.log(chalk.bold('\nā
Migration Validation Report'));
|
|
235
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
236
|
+
console.log(`\n${chalk.bold('Overall Status:')} ${validation.valid ? chalk.green('ā Valid') : chalk.red('ā Invalid')}`);
|
|
237
|
+
// Show checks
|
|
238
|
+
console.log(chalk.bold('\nš Validation Checks:'));
|
|
239
|
+
validation.checks.forEach((check)=>{
|
|
240
|
+
const status = check.passed ? chalk.green('ā') : chalk.red('ā');
|
|
241
|
+
console.log(` ${status} ${check.name}`);
|
|
242
|
+
if (check.message) {
|
|
243
|
+
console.log(` ${chalk.gray(check.message)}`);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
// Show errors
|
|
247
|
+
if (validation.errors.length > 0) {
|
|
248
|
+
console.log(chalk.bold('\nā Errors:'));
|
|
249
|
+
validation.errors.forEach((error)=>{
|
|
250
|
+
console.log(` ⢠${chalk.red(error)}`);
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
// Show warnings
|
|
254
|
+
if (validation.warnings.length > 0) {
|
|
255
|
+
console.log(chalk.bold('\nā ļø Warnings:'));
|
|
256
|
+
validation.warnings.forEach((warning)=>{
|
|
257
|
+
console.log(` ⢠${chalk.yellow(warning)}`);
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
console.log(chalk.gray('\n' + 'ā'.repeat(50)));
|
|
261
|
+
if (validation.valid) {
|
|
262
|
+
console.log(chalk.green('\nš Migration validation passed! Your project is ready to use optimized prompts.'));
|
|
263
|
+
} else {
|
|
264
|
+
console.log(chalk.red('\nā ļø Migration validation failed. Please address the errors above.'));
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
constructor(){
|
|
268
|
+
_define_property(this, "requiredFiles", [
|
|
269
|
+
'.claude/commands/sparc.md',
|
|
270
|
+
'.claude/commands/claude-flow-help.md',
|
|
271
|
+
'.claude/commands/claude-flow-memory.md',
|
|
272
|
+
'.claude/BATCHTOOLS_GUIDE.md',
|
|
273
|
+
'.claude/BATCHTOOLS_BEST_PRACTICES.md'
|
|
274
|
+
]);
|
|
275
|
+
_define_property(this, "requiredCommands", [
|
|
276
|
+
'sparc',
|
|
277
|
+
'sparc-architect',
|
|
278
|
+
'sparc-code',
|
|
279
|
+
'sparc-tdd',
|
|
280
|
+
'claude-flow-help',
|
|
281
|
+
'claude-flow-memory',
|
|
282
|
+
'claude-flow-swarm'
|
|
283
|
+
]);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Reporter - Provides visual feedback during migration
|
|
3
|
+
*/ function _define_property(obj, key, value) {
|
|
4
|
+
if (key in obj) {
|
|
5
|
+
Object.defineProperty(obj, key, {
|
|
6
|
+
value: value,
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
writable: true
|
|
10
|
+
});
|
|
11
|
+
} else {
|
|
12
|
+
obj[key] = value;
|
|
13
|
+
}
|
|
14
|
+
return obj;
|
|
15
|
+
}
|
|
16
|
+
import * as chalk from "chalk";
|
|
17
|
+
export class ProgressReporter {
|
|
18
|
+
start(phase, message) {
|
|
19
|
+
this.progress.phase = phase;
|
|
20
|
+
this.progress.current = message;
|
|
21
|
+
this.startTime = new Date();
|
|
22
|
+
console.log(chalk.bold(`\nš Starting ${phase}...`));
|
|
23
|
+
this.startSpinner();
|
|
24
|
+
}
|
|
25
|
+
update(phase, message, completed, total) {
|
|
26
|
+
this.progress.phase = phase;
|
|
27
|
+
this.progress.current = message;
|
|
28
|
+
if (completed !== undefined) {
|
|
29
|
+
this.progress.completed = completed;
|
|
30
|
+
}
|
|
31
|
+
if (total !== undefined) {
|
|
32
|
+
this.progress.total = total;
|
|
33
|
+
}
|
|
34
|
+
this.updateDisplay();
|
|
35
|
+
}
|
|
36
|
+
complete(message) {
|
|
37
|
+
this.stopSpinner();
|
|
38
|
+
const duration = new Date().getTime() - this.startTime.getTime();
|
|
39
|
+
const seconds = (duration / 1000).toFixed(2);
|
|
40
|
+
console.log(chalk.green(`\nā
${message}`));
|
|
41
|
+
console.log(chalk.gray(` Completed in ${seconds}s`));
|
|
42
|
+
if (this.progress.warnings > 0) {
|
|
43
|
+
console.log(chalk.yellow(` ${this.progress.warnings} warnings`));
|
|
44
|
+
}
|
|
45
|
+
if (this.progress.errors > 0) {
|
|
46
|
+
console.log(chalk.red(` ${this.progress.errors} errors`));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
error(message) {
|
|
50
|
+
this.stopSpinner();
|
|
51
|
+
console.log(chalk.red(`\nā ${message}`));
|
|
52
|
+
this.progress.errors++;
|
|
53
|
+
}
|
|
54
|
+
warning(message) {
|
|
55
|
+
console.log(chalk.yellow(`ā ļø ${message}`));
|
|
56
|
+
this.progress.warnings++;
|
|
57
|
+
}
|
|
58
|
+
info(message) {
|
|
59
|
+
console.log(chalk.blue(`ā¹ļø ${message}`));
|
|
60
|
+
}
|
|
61
|
+
startSpinner() {
|
|
62
|
+
this.intervalId = setInterval(()=>{
|
|
63
|
+
this.spinnerIndex = (this.spinnerIndex + 1) % this.spinner.length;
|
|
64
|
+
this.updateDisplay();
|
|
65
|
+
}, 100);
|
|
66
|
+
}
|
|
67
|
+
stopSpinner() {
|
|
68
|
+
if (this.intervalId) {
|
|
69
|
+
clearInterval(this.intervalId);
|
|
70
|
+
this.intervalId = null;
|
|
71
|
+
}
|
|
72
|
+
// Clear the spinner line
|
|
73
|
+
process.stdout.write('\r\x1b[K');
|
|
74
|
+
}
|
|
75
|
+
updateDisplay() {
|
|
76
|
+
const spinner = this.spinner[this.spinnerIndex];
|
|
77
|
+
const phase = this.getPhaseDisplay();
|
|
78
|
+
const progress = this.getProgressDisplay();
|
|
79
|
+
const message = `${spinner} ${phase} ${progress} ${this.progress.current}`;
|
|
80
|
+
// Clear line and write new message
|
|
81
|
+
process.stdout.write('\r\x1b[K' + message);
|
|
82
|
+
}
|
|
83
|
+
getPhaseDisplay() {
|
|
84
|
+
const phases = {
|
|
85
|
+
analyzing: chalk.blue('š Analyzing'),
|
|
86
|
+
'backing-up': chalk.yellow('š¾ Backing up'),
|
|
87
|
+
migrating: chalk.green('š Migrating'),
|
|
88
|
+
validating: chalk.cyan('ā
Validating'),
|
|
89
|
+
complete: chalk.green('ā
Complete')
|
|
90
|
+
};
|
|
91
|
+
return phases[this.progress.phase] || chalk.gray('ā³ Processing');
|
|
92
|
+
}
|
|
93
|
+
getProgressDisplay() {
|
|
94
|
+
if (this.progress.total > 0) {
|
|
95
|
+
const percentage = Math.round(this.progress.completed / this.progress.total * 100);
|
|
96
|
+
const progressBar = this.createProgressBar(percentage);
|
|
97
|
+
return `${progressBar} ${this.progress.completed}/${this.progress.total} (${percentage}%)`;
|
|
98
|
+
}
|
|
99
|
+
return '';
|
|
100
|
+
}
|
|
101
|
+
createProgressBar(percentage, width = 20) {
|
|
102
|
+
const filled = Math.round(percentage / 100 * width);
|
|
103
|
+
const empty = width - filled;
|
|
104
|
+
const filledBar = 'ā'.repeat(filled);
|
|
105
|
+
const emptyBar = 'ā'.repeat(empty);
|
|
106
|
+
return chalk.green(filledBar) + chalk.gray(emptyBar);
|
|
107
|
+
}
|
|
108
|
+
setTotal(total) {
|
|
109
|
+
this.progress.total = total;
|
|
110
|
+
}
|
|
111
|
+
increment(message) {
|
|
112
|
+
this.progress.completed++;
|
|
113
|
+
if (message) {
|
|
114
|
+
this.progress.current = message;
|
|
115
|
+
}
|
|
116
|
+
this.updateDisplay();
|
|
117
|
+
}
|
|
118
|
+
getProgress() {
|
|
119
|
+
return {
|
|
120
|
+
...this.progress
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
constructor(){
|
|
124
|
+
_define_property(this, "progress", void 0);
|
|
125
|
+
_define_property(this, "startTime", void 0);
|
|
126
|
+
_define_property(this, "spinner", [
|
|
127
|
+
'ā ',
|
|
128
|
+
'ā ',
|
|
129
|
+
'ā ¹',
|
|
130
|
+
'ā ø',
|
|
131
|
+
'ā ¼',
|
|
132
|
+
'ā “',
|
|
133
|
+
'ā ¦',
|
|
134
|
+
'ā §',
|
|
135
|
+
'ā ',
|
|
136
|
+
'ā '
|
|
137
|
+
]);
|
|
138
|
+
_define_property(this, "spinnerIndex", 0);
|
|
139
|
+
_define_property(this, "intervalId", null);
|
|
140
|
+
this.progress = {
|
|
141
|
+
total: 0,
|
|
142
|
+
completed: 0,
|
|
143
|
+
current: '',
|
|
144
|
+
phase: 'analyzing',
|
|
145
|
+
errors: 0,
|
|
146
|
+
warnings: 0
|
|
147
|
+
};
|
|
148
|
+
this.startTime = new Date();
|
|
149
|
+
}
|
|
150
|
+
}
|