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,92 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Claude-Flow Migration Tool
|
|
4
|
+
* Helps existing projects migrate to optimized prompts and configurations
|
|
5
|
+
*/ import { Command } from "@cliffy/command";
|
|
6
|
+
import { MigrationRunner } from "./migration-runner.js";
|
|
7
|
+
import { MigrationAnalyzer } from "./migration-analyzer.js";
|
|
8
|
+
import { logger } from "./logger.js";
|
|
9
|
+
import * as path from "path";
|
|
10
|
+
const program = new Command();
|
|
11
|
+
program.name('claude-flow-migrate').description('Migrate existing claude-flow-novice projects to optimized prompts').version('1.0.0');
|
|
12
|
+
program.command('analyze [path]').description('Analyze existing project for migration readiness').option('-d, --detailed', 'Show detailed analysis').option('-o, --output <file>', 'Output analysis to file').action(async (projectPath = '.', options)=>{
|
|
13
|
+
try {
|
|
14
|
+
const analyzer = new MigrationAnalyzer();
|
|
15
|
+
const analysis = await analyzer.analyze(path.resolve(projectPath));
|
|
16
|
+
if (options.output) {
|
|
17
|
+
await analyzer.saveAnalysis(analysis, options.output);
|
|
18
|
+
logger.success(`Analysis saved to ${options.output}`);
|
|
19
|
+
}
|
|
20
|
+
analyzer.printAnalysis(analysis, options.detailed);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
logger.error('Analysis failed:', error);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
program.command('migrate [path]').description('Migrate project to optimized prompts').option('-s, --strategy <type>', 'Migration strategy: full, selective, merge', 'selective').option('-b, --backup <dir>', 'Backup directory', '.claude-backup').option('-f, --force', 'Force migration without prompts').option('--dry-run', 'Simulate migration without making changes').option('--preserve-custom', 'Preserve custom commands and configurations').option('--skip-validation', 'Skip post-migration validation').action(async (projectPath = '.', options)=>{
|
|
27
|
+
try {
|
|
28
|
+
const runner = new MigrationRunner({
|
|
29
|
+
projectPath: path.resolve(projectPath),
|
|
30
|
+
strategy: options.strategy,
|
|
31
|
+
backupDir: options.backup,
|
|
32
|
+
force: options.force,
|
|
33
|
+
dryRun: options.dryRun,
|
|
34
|
+
preserveCustom: options.preserveCustom,
|
|
35
|
+
skipValidation: options.skipValidation
|
|
36
|
+
});
|
|
37
|
+
await runner.run();
|
|
38
|
+
} catch (error) {
|
|
39
|
+
logger.error('Migration failed:', error);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
program.command('rollback [path]').description('Rollback to previous configuration').option('-b, --backup <dir>', 'Backup directory to restore from', '.claude-backup').option('-t, --timestamp <time>', 'Restore from specific timestamp').option('-f, --force', 'Force rollback without prompts').action(async (projectPath = '.', options)=>{
|
|
44
|
+
try {
|
|
45
|
+
const runner = new MigrationRunner({
|
|
46
|
+
projectPath: path.resolve(projectPath),
|
|
47
|
+
strategy: 'full',
|
|
48
|
+
backupDir: options.backup,
|
|
49
|
+
force: options.force
|
|
50
|
+
});
|
|
51
|
+
await runner.rollback(options.timestamp);
|
|
52
|
+
} catch (error) {
|
|
53
|
+
logger.error('Rollback failed:', error);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
program.command('validate [path]').description('Validate migration was successful').option('-v, --verbose', 'Show detailed validation results').action(async (projectPath = '.', options)=>{
|
|
58
|
+
try {
|
|
59
|
+
const runner = new MigrationRunner({
|
|
60
|
+
projectPath: path.resolve(projectPath),
|
|
61
|
+
strategy: 'full'
|
|
62
|
+
});
|
|
63
|
+
const isValid = await runner.validate(options.verbose);
|
|
64
|
+
if (isValid) {
|
|
65
|
+
logger.success('Migration validated successfully!');
|
|
66
|
+
} else {
|
|
67
|
+
logger.error('Migration validation failed');
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
} catch (error) {
|
|
71
|
+
logger.error('Validation failed:', error);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
program.command('list-backups [path]').description('List available backups').option('-b, --backup <dir>', 'Backup directory', '.claude-backup').action(async (projectPath = '.', options)=>{
|
|
76
|
+
try {
|
|
77
|
+
const runner = new MigrationRunner({
|
|
78
|
+
projectPath: path.resolve(projectPath),
|
|
79
|
+
strategy: 'full',
|
|
80
|
+
backupDir: options.backup
|
|
81
|
+
});
|
|
82
|
+
await runner.listBackups();
|
|
83
|
+
} catch (error) {
|
|
84
|
+
logger.error('Failed to list backups:', error);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Show help if no command provided
|
|
89
|
+
if (!process.argv.slice(2).length) {
|
|
90
|
+
program.outputHelp();
|
|
91
|
+
}
|
|
92
|
+
program.parse(process.argv);
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
import * as process from "node:process";
|
|
15
|
+
/**
|
|
16
|
+
* Migration Logger - Structured logging for migration operations
|
|
17
|
+
*/ import * as fs from "fs-extra";
|
|
18
|
+
import * as path from "path";
|
|
19
|
+
import * as chalk from "chalk";
|
|
20
|
+
export class MigrationLogger {
|
|
21
|
+
info(message, context) {
|
|
22
|
+
this.log('info', message, context);
|
|
23
|
+
console.log(chalk.blue(`ā¹ļø ${message}`));
|
|
24
|
+
}
|
|
25
|
+
warn(message, context) {
|
|
26
|
+
this.log('warn', message, context);
|
|
27
|
+
console.log(chalk.yellow(`ā ļø ${message}`));
|
|
28
|
+
}
|
|
29
|
+
error(message, error, context) {
|
|
30
|
+
this.log('error', message, context, error?.stack);
|
|
31
|
+
console.log(chalk.red(`ā ${message}`));
|
|
32
|
+
if (error && (error instanceof Error ? error.message : String(error)) !== message) {
|
|
33
|
+
console.log(chalk.red(` ${error instanceof Error ? error.message : String(error)}`));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
success(message, context) {
|
|
37
|
+
this.log('success', message, context);
|
|
38
|
+
console.log(chalk.green(`ā
${message}`));
|
|
39
|
+
}
|
|
40
|
+
debug(message, context) {
|
|
41
|
+
if (process.env.DEBUG === 'true' || process.env.NODE_ENV === 'development') {
|
|
42
|
+
this.log('debug', message, context);
|
|
43
|
+
console.log(chalk.gray(`š ${message}`));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
log(level, message, context, stack) {
|
|
47
|
+
const entry = {
|
|
48
|
+
timestamp: new Date(),
|
|
49
|
+
level,
|
|
50
|
+
message,
|
|
51
|
+
context,
|
|
52
|
+
stack
|
|
53
|
+
};
|
|
54
|
+
this.entries.push(entry);
|
|
55
|
+
if (this.logFile) {
|
|
56
|
+
this.writeToFile(entry);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async writeToFile(entry) {
|
|
60
|
+
if (!this.logFile) return;
|
|
61
|
+
try {
|
|
62
|
+
const logDir = path.dirname(this.logFile);
|
|
63
|
+
await fs.ensureDir(logDir);
|
|
64
|
+
const logLine = JSON.stringify(entry) + '\n';
|
|
65
|
+
await fs.appendFile(this.logFile, logLine);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
// Prevent recursive logging
|
|
68
|
+
console.error('Failed to write to log file:', error instanceof Error ? error.message : String(error));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async saveToFile(filePath) {
|
|
72
|
+
await fs.ensureDir(path.dirname(filePath));
|
|
73
|
+
await fs.writeJson(filePath, this.entries, {
|
|
74
|
+
spaces: 2
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
getEntries() {
|
|
78
|
+
return [
|
|
79
|
+
...this.entries
|
|
80
|
+
];
|
|
81
|
+
}
|
|
82
|
+
getEntriesByLevel(level) {
|
|
83
|
+
return this.entries.filter((entry)=>entry.level === level);
|
|
84
|
+
}
|
|
85
|
+
clear() {
|
|
86
|
+
this.entries = [];
|
|
87
|
+
}
|
|
88
|
+
printSummary() {
|
|
89
|
+
const summary = {
|
|
90
|
+
total: this.entries.length,
|
|
91
|
+
info: this.getEntriesByLevel('info').length,
|
|
92
|
+
warn: this.getEntriesByLevel('warn').length,
|
|
93
|
+
error: this.getEntriesByLevel('error').length,
|
|
94
|
+
success: this.getEntriesByLevel('success').length,
|
|
95
|
+
debug: this.getEntriesByLevel('debug').length
|
|
96
|
+
};
|
|
97
|
+
console.log(chalk.bold('\nš Migration Log Summary'));
|
|
98
|
+
console.log(chalk.gray('ā'.repeat(30)));
|
|
99
|
+
console.log(`Total entries: ${summary.total}`);
|
|
100
|
+
console.log(`${chalk.blue('Info:')} ${summary.info}`);
|
|
101
|
+
console.log(`${chalk.green('Success:')} ${summary.success}`);
|
|
102
|
+
console.log(`${chalk.yellow('Warnings:')} ${summary.warn}`);
|
|
103
|
+
console.log(`${chalk.red('Errors:')} ${summary.error}`);
|
|
104
|
+
if (summary.debug > 0) {
|
|
105
|
+
console.log(`${chalk.gray('Debug:')} ${summary.debug}`);
|
|
106
|
+
}
|
|
107
|
+
console.log(chalk.gray('ā'.repeat(30)));
|
|
108
|
+
}
|
|
109
|
+
constructor(logFile){
|
|
110
|
+
_define_property(this, "logFile", void 0);
|
|
111
|
+
_define_property(this, "entries", []);
|
|
112
|
+
this.logFile = logFile;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Global logger instance
|
|
116
|
+
export const logger = new MigrationLogger();
|
|
117
|
+
// Set log file if in production
|
|
118
|
+
if (process.env.NODE_ENV === 'production') {
|
|
119
|
+
const logFile = path.join(process.cwd(), 'logs', 'migration.log');
|
|
120
|
+
logger['logFile'] = logFile;
|
|
121
|
+
}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Analyzer - Analyzes existing projects for migration readiness
|
|
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 crypto from "crypto";
|
|
19
|
+
import { logger } from "./logger.js";
|
|
20
|
+
import * as chalk from "chalk";
|
|
21
|
+
import { glob } from "glob";
|
|
22
|
+
export class MigrationAnalyzer {
|
|
23
|
+
async analyze(projectPath) {
|
|
24
|
+
logger.info(`Analyzing project at ${projectPath}...`);
|
|
25
|
+
const analysis = {
|
|
26
|
+
projectPath,
|
|
27
|
+
hasClaudeFolder: false,
|
|
28
|
+
hasOptimizedPrompts: false,
|
|
29
|
+
customCommands: [],
|
|
30
|
+
customConfigurations: {},
|
|
31
|
+
conflictingFiles: [],
|
|
32
|
+
migrationRisks: [],
|
|
33
|
+
recommendations: [],
|
|
34
|
+
timestamp: new Date()
|
|
35
|
+
};
|
|
36
|
+
// Check for .claude folder
|
|
37
|
+
const claudePath = path.join(projectPath, '.claude');
|
|
38
|
+
if (await fs.pathExists(claudePath)) {
|
|
39
|
+
analysis.hasClaudeFolder = true;
|
|
40
|
+
// Analyze existing commands
|
|
41
|
+
await this.analyzeCommands(claudePath, analysis);
|
|
42
|
+
// Check for optimized prompts
|
|
43
|
+
await this.checkOptimizedPrompts(claudePath, analysis);
|
|
44
|
+
// Analyze configurations
|
|
45
|
+
await this.analyzeConfigurations(projectPath, analysis);
|
|
46
|
+
// Detect conflicts
|
|
47
|
+
await this.detectConflicts(projectPath, analysis);
|
|
48
|
+
}
|
|
49
|
+
// Generate risks and recommendations
|
|
50
|
+
this.assessRisks(analysis);
|
|
51
|
+
this.generateRecommendations(analysis);
|
|
52
|
+
return analysis;
|
|
53
|
+
}
|
|
54
|
+
async analyzeCommands(claudePath, analysis) {
|
|
55
|
+
const commandsPath = path.join(claudePath, 'commands');
|
|
56
|
+
if (await fs.pathExists(commandsPath)) {
|
|
57
|
+
const files = await glob('**/*.md', {
|
|
58
|
+
cwd: commandsPath
|
|
59
|
+
});
|
|
60
|
+
for (const file of files){
|
|
61
|
+
const commandName = path.basename(file, '.md');
|
|
62
|
+
if (!this.optimizedCommands.includes(commandName)) {
|
|
63
|
+
analysis.customCommands.push(commandName);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async checkOptimizedPrompts(claudePath, analysis) {
|
|
69
|
+
// Check for key optimized prompt files
|
|
70
|
+
const optimizedFiles = [
|
|
71
|
+
'BATCHTOOLS_GUIDE.md',
|
|
72
|
+
'BATCHTOOLS_BEST_PRACTICES.md',
|
|
73
|
+
'MIGRATION_GUIDE.md',
|
|
74
|
+
'PERFORMANCE_BENCHMARKS.md'
|
|
75
|
+
];
|
|
76
|
+
let hasOptimized = 0;
|
|
77
|
+
for (const file of optimizedFiles){
|
|
78
|
+
if (await fs.pathExists(path.join(claudePath, file))) {
|
|
79
|
+
hasOptimized++;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
analysis.hasOptimizedPrompts = hasOptimized >= 2;
|
|
83
|
+
}
|
|
84
|
+
async analyzeConfigurations(projectPath, analysis) {
|
|
85
|
+
// Check for CLAUDE.md
|
|
86
|
+
const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
|
|
87
|
+
if (await fs.pathExists(claudeMdPath)) {
|
|
88
|
+
const content = await fs.readFile(claudeMdPath, 'utf-8');
|
|
89
|
+
analysis.customConfigurations['CLAUDE.md'] = {
|
|
90
|
+
exists: true,
|
|
91
|
+
size: content.length,
|
|
92
|
+
hasCustomContent: !content.includes('SPARC Development Environment')
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Check for .roomodes
|
|
96
|
+
const roomodesPath = path.join(projectPath, '.roomodes');
|
|
97
|
+
if (await fs.pathExists(roomodesPath)) {
|
|
98
|
+
try {
|
|
99
|
+
const roomodes = await fs.readJson(roomodesPath);
|
|
100
|
+
analysis.customConfigurations['.roomodes'] = {
|
|
101
|
+
exists: true,
|
|
102
|
+
modeCount: Object.keys(roomodes).length,
|
|
103
|
+
customModes: Object.keys(roomodes).filter((mode)=>![
|
|
104
|
+
'architect',
|
|
105
|
+
'code',
|
|
106
|
+
'tdd',
|
|
107
|
+
'debug',
|
|
108
|
+
'docs-writer'
|
|
109
|
+
].includes(mode))
|
|
110
|
+
};
|
|
111
|
+
} catch (error) {
|
|
112
|
+
analysis.migrationRisks.push({
|
|
113
|
+
level: 'medium',
|
|
114
|
+
description: 'Invalid .roomodes file',
|
|
115
|
+
file: roomodesPath,
|
|
116
|
+
mitigation: 'File will be backed up and replaced'
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async detectConflicts(projectPath, analysis) {
|
|
122
|
+
// Check for files that might conflict with migration
|
|
123
|
+
const potentialConflicts = [
|
|
124
|
+
'.claude/commands/sparc.md',
|
|
125
|
+
'.claude/BATCHTOOLS_GUIDE.md',
|
|
126
|
+
'memory/memory-store.json',
|
|
127
|
+
'coordination/config.json'
|
|
128
|
+
];
|
|
129
|
+
for (const file of potentialConflicts){
|
|
130
|
+
const filePath = path.join(projectPath, file);
|
|
131
|
+
if (await fs.pathExists(filePath)) {
|
|
132
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
133
|
+
const checksum = crypto.createHash('md5').update(content).digest('hex');
|
|
134
|
+
// Check if it's a custom version
|
|
135
|
+
if (!this.isStandardFile(file, checksum)) {
|
|
136
|
+
analysis.conflictingFiles.push(file);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
isStandardFile(file, checksum) {
|
|
142
|
+
// This would contain checksums of standard files
|
|
143
|
+
// For now, we'll assume all existing files are potentially custom
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
assessRisks(analysis) {
|
|
147
|
+
// High risk: Custom commands that might be overwritten
|
|
148
|
+
if (analysis.customCommands.length > 0) {
|
|
149
|
+
analysis.migrationRisks.push({
|
|
150
|
+
level: 'high',
|
|
151
|
+
description: `Found ${analysis.customCommands.length} custom commands that may be affected`,
|
|
152
|
+
mitigation: 'Use --preserve-custom flag or selective migration'
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
// Medium risk: Existing optimized prompts
|
|
156
|
+
if (analysis.hasOptimizedPrompts) {
|
|
157
|
+
analysis.migrationRisks.push({
|
|
158
|
+
level: 'medium',
|
|
159
|
+
description: 'Project already has some optimized prompts',
|
|
160
|
+
mitigation: 'Consider using merge strategy to preserve customizations'
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
// Low risk: No .claude folder
|
|
164
|
+
if (!analysis.hasClaudeFolder) {
|
|
165
|
+
analysis.migrationRisks.push({
|
|
166
|
+
level: 'low',
|
|
167
|
+
description: 'No existing .claude folder found',
|
|
168
|
+
mitigation: 'Fresh installation will be performed'
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// High risk: Conflicting files
|
|
172
|
+
if (analysis.conflictingFiles.length > 0) {
|
|
173
|
+
analysis.migrationRisks.push({
|
|
174
|
+
level: 'high',
|
|
175
|
+
description: `${analysis.conflictingFiles.length} files may have custom modifications`,
|
|
176
|
+
mitigation: 'Files will be backed up before migration'
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
generateRecommendations(analysis) {
|
|
181
|
+
// Strategy recommendations
|
|
182
|
+
if (analysis.customCommands.length > 0 || analysis.conflictingFiles.length > 0) {
|
|
183
|
+
analysis.recommendations.push('Use "selective" or "merge" strategy to preserve customizations');
|
|
184
|
+
} else if (!analysis.hasClaudeFolder) {
|
|
185
|
+
analysis.recommendations.push('Use "full" strategy for clean installation');
|
|
186
|
+
}
|
|
187
|
+
// Backup recommendations
|
|
188
|
+
if (analysis.hasClaudeFolder) {
|
|
189
|
+
analysis.recommendations.push('Create a backup before migration (automatic with default settings)');
|
|
190
|
+
}
|
|
191
|
+
// Custom command recommendations
|
|
192
|
+
if (analysis.customCommands.length > 0) {
|
|
193
|
+
analysis.recommendations.push(`Review custom commands: ${analysis.customCommands.join(', ')}`);
|
|
194
|
+
}
|
|
195
|
+
// Validation recommendations
|
|
196
|
+
if (analysis.migrationRisks.some((r)=>r.level === 'high')) {
|
|
197
|
+
analysis.recommendations.push('Run with --dry-run first to preview changes');
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
printAnalysis(analysis, detailed = false) {
|
|
201
|
+
console.log(chalk.bold('\nš Migration Analysis Report'));
|
|
202
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
203
|
+
console.log(`\n${chalk.bold('Project:')} ${analysis.projectPath}`);
|
|
204
|
+
console.log(`${chalk.bold('Timestamp:')} ${analysis.timestamp.toISOString()}`);
|
|
205
|
+
// Status
|
|
206
|
+
console.log(chalk.bold('\nš Current Status:'));
|
|
207
|
+
console.log(` ⢠.claude folder: ${analysis.hasClaudeFolder ? chalk.green('ā') : chalk.red('ā')}`);
|
|
208
|
+
console.log(` ⢠Optimized prompts: ${analysis.hasOptimizedPrompts ? chalk.green('ā') : chalk.red('ā')}`);
|
|
209
|
+
console.log(` ⢠Custom commands: ${analysis.customCommands.length > 0 ? chalk.yellow(analysis.customCommands.length) : chalk.green('0')}`);
|
|
210
|
+
console.log(` ⢠Conflicts: ${analysis.conflictingFiles.length > 0 ? chalk.yellow(analysis.conflictingFiles.length) : chalk.green('0')}`);
|
|
211
|
+
// Risks
|
|
212
|
+
if (analysis.migrationRisks.length > 0) {
|
|
213
|
+
console.log(chalk.bold('\nā ļø Migration Risks:'));
|
|
214
|
+
analysis.migrationRisks.forEach((risk)=>{
|
|
215
|
+
const icon = risk.level === 'high' ? 'š“' : risk.level === 'medium' ? 'š”' : 'š¢';
|
|
216
|
+
console.log(` ${icon} ${chalk.bold(risk.level.toUpperCase())}: ${risk.description}`);
|
|
217
|
+
if (risk.mitigation) {
|
|
218
|
+
console.log(` ${chalk.gray('ā')} ${chalk.italic(risk.mitigation)}`);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
// Recommendations
|
|
223
|
+
if (analysis.recommendations.length > 0) {
|
|
224
|
+
console.log(chalk.bold('\nš” Recommendations:'));
|
|
225
|
+
analysis.recommendations.forEach((rec)=>{
|
|
226
|
+
console.log(` ⢠${rec}`);
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
// Detailed information
|
|
230
|
+
if (detailed) {
|
|
231
|
+
if (analysis.customCommands.length > 0) {
|
|
232
|
+
console.log(chalk.bold('\nš§ Custom Commands:'));
|
|
233
|
+
analysis.customCommands.forEach((cmd)=>{
|
|
234
|
+
console.log(` ⢠${cmd}`);
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
if (analysis.conflictingFiles.length > 0) {
|
|
238
|
+
console.log(chalk.bold('\nš Conflicting Files:'));
|
|
239
|
+
analysis.conflictingFiles.forEach((file)=>{
|
|
240
|
+
console.log(` ⢠${file}`);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
if (Object.keys(analysis.customConfigurations).length > 0) {
|
|
244
|
+
console.log(chalk.bold('\nāļø Configurations:'));
|
|
245
|
+
Object.entries(analysis.customConfigurations).forEach(([file, config])=>{
|
|
246
|
+
console.log(` ⢠${file}: ${JSON.stringify(config, null, 2)}`);
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
console.log(chalk.gray('\n' + 'ā'.repeat(50)));
|
|
251
|
+
}
|
|
252
|
+
async saveAnalysis(analysis, outputPath) {
|
|
253
|
+
await fs.writeJson(outputPath, analysis, {
|
|
254
|
+
spaces: 2
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
constructor(){
|
|
258
|
+
_define_property(this, "optimizedCommands", [
|
|
259
|
+
'sparc',
|
|
260
|
+
'sparc-architect',
|
|
261
|
+
'sparc-code',
|
|
262
|
+
'sparc-tdd',
|
|
263
|
+
'claude-flow-help',
|
|
264
|
+
'claude-flow-memory',
|
|
265
|
+
'claude-flow-swarm'
|
|
266
|
+
]);
|
|
267
|
+
}
|
|
268
|
+
}
|