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,522 @@
|
|
|
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 { dirname } from "node:path";
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
16
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
|
+
/**
|
|
18
|
+
* Migration Runner - Executes migration strategies
|
|
19
|
+
*/ import * as fs from "fs-extra";
|
|
20
|
+
import * as path from "path";
|
|
21
|
+
import * as crypto from "crypto";
|
|
22
|
+
import { MigrationAnalyzer } from "./migration-analyzer.js";
|
|
23
|
+
import { logger } from "./logger.js";
|
|
24
|
+
import { ProgressReporter } from "./progress-reporter.js";
|
|
25
|
+
import { MigrationValidator } from "./migration-validator.js";
|
|
26
|
+
import { glob } from "glob";
|
|
27
|
+
import * as inquirer from "inquirer";
|
|
28
|
+
import * as chalk from "chalk";
|
|
29
|
+
export class MigrationRunner {
|
|
30
|
+
async run() {
|
|
31
|
+
const result = {
|
|
32
|
+
success: false,
|
|
33
|
+
filesModified: [],
|
|
34
|
+
filesCreated: [],
|
|
35
|
+
filesBackedUp: [],
|
|
36
|
+
errors: [],
|
|
37
|
+
warnings: []
|
|
38
|
+
};
|
|
39
|
+
try {
|
|
40
|
+
// Analyze project
|
|
41
|
+
this.progress.start('analyzing', 'Analyzing project...');
|
|
42
|
+
const analysis = await this.analyzer.analyze(this.options.projectPath);
|
|
43
|
+
// Show analysis and confirm
|
|
44
|
+
if (!this.options.force && !this.options.dryRun) {
|
|
45
|
+
this.analyzer.printAnalysis(analysis);
|
|
46
|
+
const confirm = await this.confirmMigration(analysis);
|
|
47
|
+
if (!confirm) {
|
|
48
|
+
logger.info('Migration cancelled');
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Create backup
|
|
53
|
+
if (!this.options.dryRun && analysis.hasClaudeFolder) {
|
|
54
|
+
this.progress.update('backing-up', 'Creating backup...');
|
|
55
|
+
const backup = await this.createBackup();
|
|
56
|
+
result.rollbackPath = backup.timestamp.toISOString();
|
|
57
|
+
result.filesBackedUp = backup.files.map((f)=>f.path);
|
|
58
|
+
}
|
|
59
|
+
// Execute migration based on strategy
|
|
60
|
+
this.progress.update('migrating', 'Migrating files...');
|
|
61
|
+
switch(this.options.strategy){
|
|
62
|
+
case 'full':
|
|
63
|
+
await this.fullMigration(result);
|
|
64
|
+
break;
|
|
65
|
+
case 'selective':
|
|
66
|
+
await this.selectiveMigration(result, analysis);
|
|
67
|
+
break;
|
|
68
|
+
case 'merge':
|
|
69
|
+
await this.mergeMigration(result, analysis);
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
// Validate migration
|
|
73
|
+
if (!this.options.skipValidation && !this.options.dryRun) {
|
|
74
|
+
this.progress.update('validating', 'Validating migration...');
|
|
75
|
+
const validation = await this.validator.validate(this.options.projectPath);
|
|
76
|
+
if (!validation.valid) {
|
|
77
|
+
result.errors.push(...validation.errors.map((e)=>({
|
|
78
|
+
error: e
|
|
79
|
+
})));
|
|
80
|
+
result.warnings.push(...validation.warnings);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
result.success = result.errors.length === 0;
|
|
84
|
+
this.progress.complete(result.success ? 'Migration completed successfully!' : 'Migration completed with errors');
|
|
85
|
+
// Print summary
|
|
86
|
+
this.printSummary(result);
|
|
87
|
+
} catch (error) {
|
|
88
|
+
result.errors.push({
|
|
89
|
+
error: error instanceof Error ? error.message : String(error),
|
|
90
|
+
stack: error.stack
|
|
91
|
+
});
|
|
92
|
+
this.progress.error('Migration failed');
|
|
93
|
+
// Attempt rollback on failure
|
|
94
|
+
if (result.rollbackPath && !this.options.dryRun) {
|
|
95
|
+
logger.warn('Attempting automatic rollback...');
|
|
96
|
+
try {
|
|
97
|
+
await this.rollback(result.rollbackPath);
|
|
98
|
+
logger.success('Rollback completed');
|
|
99
|
+
} catch (rollbackError) {
|
|
100
|
+
logger.error('Rollback failed:', rollbackError);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
async fullMigration(result) {
|
|
107
|
+
const sourcePath = path.join(__dirname, '../../.claude');
|
|
108
|
+
const targetPath = path.join(this.options.projectPath, '.claude');
|
|
109
|
+
if (this.options.dryRun) {
|
|
110
|
+
logger.info('[DRY RUN] Would replace entire .claude folder');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// Remove existing .claude folder
|
|
114
|
+
if (await fs.pathExists(targetPath)) {
|
|
115
|
+
await fs.remove(targetPath);
|
|
116
|
+
}
|
|
117
|
+
// Copy new .claude folder
|
|
118
|
+
await fs.copy(sourcePath, targetPath);
|
|
119
|
+
result.filesCreated.push('.claude');
|
|
120
|
+
// Copy other required files
|
|
121
|
+
await this.copyRequiredFiles(result);
|
|
122
|
+
}
|
|
123
|
+
async selectiveMigration(result, analysis) {
|
|
124
|
+
const sourcePath = path.join(__dirname, '../../.claude');
|
|
125
|
+
const targetPath = path.join(this.options.projectPath, '.claude');
|
|
126
|
+
// Ensure target directory exists
|
|
127
|
+
await fs.ensureDir(targetPath);
|
|
128
|
+
// Migrate commands selectively
|
|
129
|
+
const commandsSource = path.join(sourcePath, 'commands');
|
|
130
|
+
const commandsTarget = path.join(targetPath, 'commands');
|
|
131
|
+
await fs.ensureDir(commandsTarget);
|
|
132
|
+
// Copy optimized commands
|
|
133
|
+
for (const command of this.manifest.files.commands){
|
|
134
|
+
const sourceFile = path.join(commandsSource, command.source);
|
|
135
|
+
const targetFile = path.join(commandsTarget, command.target);
|
|
136
|
+
if (this.options.preserveCustom && analysis.customCommands.includes(path.basename(command.target, '.md'))) {
|
|
137
|
+
result.warnings.push(`Skipped ${command.target} (custom command preserved)`);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (this.options.dryRun) {
|
|
141
|
+
logger.info(`[DRY RUN] Would copy ${command.source} to ${command.target}`);
|
|
142
|
+
} else {
|
|
143
|
+
await fs.copy(sourceFile, targetFile, {
|
|
144
|
+
overwrite: true
|
|
145
|
+
});
|
|
146
|
+
result.filesCreated.push(command.target);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Copy optimization guides
|
|
150
|
+
const guides = [
|
|
151
|
+
'BATCHTOOLS_GUIDE.md',
|
|
152
|
+
'BATCHTOOLS_BEST_PRACTICES.md',
|
|
153
|
+
'MIGRATION_GUIDE.md',
|
|
154
|
+
'PERFORMANCE_BENCHMARKS.md'
|
|
155
|
+
];
|
|
156
|
+
for (const guide of guides){
|
|
157
|
+
const sourceFile = path.join(sourcePath, guide);
|
|
158
|
+
const targetFile = path.join(targetPath, guide);
|
|
159
|
+
if (await fs.pathExists(sourceFile)) {
|
|
160
|
+
if (this.options.dryRun) {
|
|
161
|
+
logger.info(`[DRY RUN] Would copy ${guide}`);
|
|
162
|
+
} else {
|
|
163
|
+
await fs.copy(sourceFile, targetFile, {
|
|
164
|
+
overwrite: true
|
|
165
|
+
});
|
|
166
|
+
result.filesCreated.push(guide);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Update configurations
|
|
171
|
+
await this.updateConfigurations(result);
|
|
172
|
+
}
|
|
173
|
+
async mergeMigration(result, analysis) {
|
|
174
|
+
// Similar to selective but merges configurations
|
|
175
|
+
await this.selectiveMigration(result, analysis);
|
|
176
|
+
// Merge configurations
|
|
177
|
+
if (!this.options.dryRun) {
|
|
178
|
+
await this.mergeConfigurations(result, analysis);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async mergeConfigurations(result, analysis) {
|
|
182
|
+
// Merge CLAUDE.md
|
|
183
|
+
const claudeMdPath = path.join(this.options.projectPath, 'CLAUDE.md');
|
|
184
|
+
if (await fs.pathExists(claudeMdPath)) {
|
|
185
|
+
const existingContent = await fs.readFile(claudeMdPath, 'utf-8');
|
|
186
|
+
const newContent = await this.getMergedClaudeMd(existingContent);
|
|
187
|
+
await fs.writeFile(claudeMdPath, newContent);
|
|
188
|
+
result.filesModified.push('CLAUDE.md');
|
|
189
|
+
}
|
|
190
|
+
// Merge .roomodes
|
|
191
|
+
const roomodesPath = path.join(this.options.projectPath, '.roomodes');
|
|
192
|
+
if (await fs.pathExists(roomodesPath)) {
|
|
193
|
+
const existing = await fs.readJson(roomodesPath);
|
|
194
|
+
const updated = await this.getMergedRoomodes(existing);
|
|
195
|
+
await fs.writeJson(roomodesPath, updated, {
|
|
196
|
+
spaces: 2
|
|
197
|
+
});
|
|
198
|
+
result.filesModified.push('.roomodes');
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async copyRequiredFiles(result) {
|
|
202
|
+
const files = [
|
|
203
|
+
{
|
|
204
|
+
source: 'CLAUDE.md',
|
|
205
|
+
target: 'CLAUDE.md'
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
source: '.roomodes',
|
|
209
|
+
target: '.roomodes'
|
|
210
|
+
}
|
|
211
|
+
];
|
|
212
|
+
for (const file of files){
|
|
213
|
+
const sourcePath = path.join(__dirname, '../../', file.source);
|
|
214
|
+
const targetPath = path.join(this.options.projectPath, file.target);
|
|
215
|
+
if (await fs.pathExists(sourcePath)) {
|
|
216
|
+
if (this.options.dryRun) {
|
|
217
|
+
logger.info(`[DRY RUN] Would copy ${file.source}`);
|
|
218
|
+
} else {
|
|
219
|
+
await fs.copy(sourcePath, targetPath, {
|
|
220
|
+
overwrite: true
|
|
221
|
+
});
|
|
222
|
+
result.filesCreated.push(file.target);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
async updateConfigurations(result) {
|
|
228
|
+
// Update package.json scripts if needed
|
|
229
|
+
const packageJsonPath = path.join(this.options.projectPath, 'package.json');
|
|
230
|
+
if (await fs.pathExists(packageJsonPath)) {
|
|
231
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
232
|
+
if (!packageJson.scripts) {
|
|
233
|
+
packageJson.scripts = {};
|
|
234
|
+
}
|
|
235
|
+
const scripts = {
|
|
236
|
+
migrate: 'claude-flow-novice migrate',
|
|
237
|
+
'migrate:analyze': 'claude-flow-novice migrate analyze',
|
|
238
|
+
'migrate:rollback': 'claude-flow-novice migrate rollback'
|
|
239
|
+
};
|
|
240
|
+
let modified = false;
|
|
241
|
+
for (const [name, command] of Object.entries(scripts)){
|
|
242
|
+
if (!packageJson.scripts[name]) {
|
|
243
|
+
packageJson.scripts[name] = command;
|
|
244
|
+
modified = true;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (modified && !this.options.dryRun) {
|
|
248
|
+
await fs.writeJson(packageJsonPath, packageJson, {
|
|
249
|
+
spaces: 2
|
|
250
|
+
});
|
|
251
|
+
result.filesModified.push('package.json');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
async createBackup() {
|
|
256
|
+
const backupDir = path.join(this.options.projectPath, this.options.backupDir || '.claude-backup');
|
|
257
|
+
const timestamp = new Date();
|
|
258
|
+
const backupPath = path.join(backupDir, timestamp.toISOString().replace(/:/g, '-'));
|
|
259
|
+
await fs.ensureDir(backupPath);
|
|
260
|
+
const backup = {
|
|
261
|
+
timestamp,
|
|
262
|
+
version: '1.0.0',
|
|
263
|
+
files: [],
|
|
264
|
+
metadata: {
|
|
265
|
+
strategy: this.options.strategy,
|
|
266
|
+
projectPath: this.options.projectPath
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
// Backup .claude folder
|
|
270
|
+
const claudePath = path.join(this.options.projectPath, '.claude');
|
|
271
|
+
if (await fs.pathExists(claudePath)) {
|
|
272
|
+
await fs.copy(claudePath, path.join(backupPath, '.claude'));
|
|
273
|
+
// Record backed up files
|
|
274
|
+
const files = await glob('**/*', {
|
|
275
|
+
cwd: claudePath,
|
|
276
|
+
nodir: true
|
|
277
|
+
});
|
|
278
|
+
for (const file of files){
|
|
279
|
+
const content = await fs.readFile(path.join(claudePath, file), 'utf-8');
|
|
280
|
+
backup.files.push({
|
|
281
|
+
path: `.claude/${file}`,
|
|
282
|
+
content,
|
|
283
|
+
checksum: crypto.createHash('md5').update(content).digest('hex')
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// Backup other important files
|
|
288
|
+
const importantFiles = [
|
|
289
|
+
'CLAUDE.md',
|
|
290
|
+
'.roomodes',
|
|
291
|
+
'package.json'
|
|
292
|
+
];
|
|
293
|
+
for (const file of importantFiles){
|
|
294
|
+
const filePath = path.join(this.options.projectPath, file);
|
|
295
|
+
if (await fs.pathExists(filePath)) {
|
|
296
|
+
await fs.copy(filePath, path.join(backupPath, file));
|
|
297
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
298
|
+
backup.files.push({
|
|
299
|
+
path: file,
|
|
300
|
+
content,
|
|
301
|
+
checksum: crypto.createHash('md5').update(content).digest('hex')
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Save backup manifest
|
|
306
|
+
await fs.writeJson(path.join(backupPath, 'backup.json'), backup, {
|
|
307
|
+
spaces: 2
|
|
308
|
+
});
|
|
309
|
+
logger.success(`Backup created at ${backupPath}`);
|
|
310
|
+
return backup;
|
|
311
|
+
}
|
|
312
|
+
async rollback(timestamp) {
|
|
313
|
+
const backupDir = path.join(this.options.projectPath, this.options.backupDir || '.claude-backup');
|
|
314
|
+
if (!await fs.pathExists(backupDir)) {
|
|
315
|
+
throw new Error('No backups found');
|
|
316
|
+
}
|
|
317
|
+
let backupPath;
|
|
318
|
+
if (timestamp) {
|
|
319
|
+
backupPath = path.join(backupDir, timestamp);
|
|
320
|
+
} else {
|
|
321
|
+
// Use most recent backup
|
|
322
|
+
const backups = await fs.readdir(backupDir);
|
|
323
|
+
if (backups.length === 0) {
|
|
324
|
+
throw new Error('No backups found');
|
|
325
|
+
}
|
|
326
|
+
backups.sort().reverse();
|
|
327
|
+
backupPath = path.join(backupDir, backups[0]);
|
|
328
|
+
}
|
|
329
|
+
if (!await fs.pathExists(backupPath)) {
|
|
330
|
+
throw new Error(`Backup not found: ${backupPath}`);
|
|
331
|
+
}
|
|
332
|
+
logger.info(`Rolling back from ${backupPath}...`);
|
|
333
|
+
// Confirm rollback
|
|
334
|
+
if (!this.options.force) {
|
|
335
|
+
const confirm = await inquirer.prompt([
|
|
336
|
+
{
|
|
337
|
+
type: 'confirm',
|
|
338
|
+
name: 'proceed',
|
|
339
|
+
message: 'Are you sure you want to rollback? This will overwrite current files.',
|
|
340
|
+
default: false
|
|
341
|
+
}
|
|
342
|
+
]);
|
|
343
|
+
if (!confirm.proceed) {
|
|
344
|
+
logger.info('Rollback cancelled');
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Restore files
|
|
349
|
+
const backup = await fs.readJson(path.join(backupPath, 'backup.json'));
|
|
350
|
+
for (const file of backup.files){
|
|
351
|
+
const targetPath = path.join(this.options.projectPath, file.path);
|
|
352
|
+
await fs.ensureDir(path.dirname(targetPath));
|
|
353
|
+
await fs.writeFile(targetPath, file.content);
|
|
354
|
+
}
|
|
355
|
+
logger.success('Rollback completed successfully');
|
|
356
|
+
}
|
|
357
|
+
async validate(verbose = false) {
|
|
358
|
+
const validation = await this.validator.validate(this.options.projectPath);
|
|
359
|
+
if (verbose) {
|
|
360
|
+
this.validator.printValidation(validation);
|
|
361
|
+
}
|
|
362
|
+
return validation.valid;
|
|
363
|
+
}
|
|
364
|
+
async listBackups() {
|
|
365
|
+
const backupDir = path.join(this.options.projectPath, this.options.backupDir || '.claude-backup');
|
|
366
|
+
if (!await fs.pathExists(backupDir)) {
|
|
367
|
+
logger.info('No backups found');
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
const backups = await fs.readdir(backupDir);
|
|
371
|
+
if (backups.length === 0) {
|
|
372
|
+
logger.info('No backups found');
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
console.log(chalk.bold('\nš¦ Available Backups'));
|
|
376
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
377
|
+
for (const backup of backups.sort().reverse()){
|
|
378
|
+
const backupPath = path.join(backupDir, backup);
|
|
379
|
+
const stats = await fs.stat(backupPath);
|
|
380
|
+
const manifest = await fs.readJson(path.join(backupPath, 'backup.json')).catch(()=>null);
|
|
381
|
+
console.log(`\n${chalk.bold(backup)}`);
|
|
382
|
+
console.log(` Created: ${stats.mtime.toLocaleString()}`);
|
|
383
|
+
console.log(` Size: ${(stats.size / 1024).toFixed(2)} KB`);
|
|
384
|
+
if (manifest) {
|
|
385
|
+
console.log(` Version: ${manifest.version}`);
|
|
386
|
+
console.log(` Strategy: ${manifest.metadata.strategy}`);
|
|
387
|
+
console.log(` Files: ${manifest.files.length}`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
console.log(chalk.gray('\n' + 'ā'.repeat(50)));
|
|
391
|
+
}
|
|
392
|
+
async confirmMigration(analysis) {
|
|
393
|
+
const questions = [
|
|
394
|
+
{
|
|
395
|
+
type: 'confirm',
|
|
396
|
+
name: 'proceed',
|
|
397
|
+
message: `Proceed with ${this.options.strategy} migration?`,
|
|
398
|
+
default: true
|
|
399
|
+
}
|
|
400
|
+
];
|
|
401
|
+
if (analysis.customCommands.length > 0 && !this.options.preserveCustom) {
|
|
402
|
+
questions.unshift({
|
|
403
|
+
type: 'confirm',
|
|
404
|
+
name: 'preserveCustom',
|
|
405
|
+
message: `Found ${analysis.customCommands.length} custom commands. Preserve them?`,
|
|
406
|
+
default: true
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
const answers = await inquirer.prompt(questions);
|
|
410
|
+
if (answers.preserveCustom) {
|
|
411
|
+
this.options.preserveCustom = true;
|
|
412
|
+
}
|
|
413
|
+
return answers.proceed;
|
|
414
|
+
}
|
|
415
|
+
loadManifest() {
|
|
416
|
+
// This would normally load from a manifest file
|
|
417
|
+
return {
|
|
418
|
+
version: '1.0.0',
|
|
419
|
+
files: {
|
|
420
|
+
commands: [
|
|
421
|
+
{
|
|
422
|
+
source: 'sparc.md',
|
|
423
|
+
target: 'sparc.md'
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
source: 'sparc/architect.md',
|
|
427
|
+
target: 'sparc-architect.md'
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
source: 'sparc/code.md',
|
|
431
|
+
target: 'sparc-code.md'
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
source: 'sparc/tdd.md',
|
|
435
|
+
target: 'sparc-tdd.md'
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
source: 'claude-flow-help.md',
|
|
439
|
+
target: 'claude-flow-help.md'
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
source: 'claude-flow-memory.md',
|
|
443
|
+
target: 'claude-flow-memory.md'
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
source: 'claude-flow-swarm.md',
|
|
447
|
+
target: 'claude-flow-swarm.md'
|
|
448
|
+
}
|
|
449
|
+
],
|
|
450
|
+
configurations: {},
|
|
451
|
+
templates: {}
|
|
452
|
+
}
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
async getMergedClaudeMd(existingContent) {
|
|
456
|
+
// Merge logic for CLAUDE.md
|
|
457
|
+
const templatePath = path.join(__dirname, '../../CLAUDE.md');
|
|
458
|
+
const templateContent = await fs.readFile(templatePath, 'utf-8');
|
|
459
|
+
// Simple merge: append custom content to template
|
|
460
|
+
if (!existingContent.includes('SPARC Development Environment')) {
|
|
461
|
+
return templateContent + '\n\n## Previous Configuration\n\n' + existingContent;
|
|
462
|
+
}
|
|
463
|
+
return templateContent;
|
|
464
|
+
}
|
|
465
|
+
async getMergedRoomodes(existing) {
|
|
466
|
+
const templatePath = path.join(__dirname, '../../.roomodes');
|
|
467
|
+
const template = await fs.readJson(templatePath);
|
|
468
|
+
// Merge custom modes with template
|
|
469
|
+
const merged = {
|
|
470
|
+
...template
|
|
471
|
+
};
|
|
472
|
+
for (const [mode, config] of Object.entries(existing)){
|
|
473
|
+
if (!merged[mode]) {
|
|
474
|
+
merged[mode] = config;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
return merged;
|
|
478
|
+
}
|
|
479
|
+
printSummary(result) {
|
|
480
|
+
console.log(chalk.bold('\nš Migration Summary'));
|
|
481
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
482
|
+
console.log(`\n${chalk.bold('Status:')} ${result.success ? chalk.green('Success') : chalk.red('Failed')}`);
|
|
483
|
+
if (result.filesCreated.length > 0) {
|
|
484
|
+
console.log(`\n${chalk.bold('Files Created:')} ${chalk.green(result.filesCreated.length)}`);
|
|
485
|
+
if (result.filesCreated.length <= 10) {
|
|
486
|
+
result.filesCreated.forEach((file)=>console.log(` ⢠${file}`));
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
if (result.filesModified.length > 0) {
|
|
490
|
+
console.log(`\n${chalk.bold('Files Modified:')} ${chalk.yellow(result.filesModified.length)}`);
|
|
491
|
+
result.filesModified.forEach((file)=>console.log(` ⢠${file}`));
|
|
492
|
+
}
|
|
493
|
+
if (result.filesBackedUp.length > 0) {
|
|
494
|
+
console.log(`\n${chalk.bold('Files Backed Up:')} ${chalk.blue(result.filesBackedUp.length)}`);
|
|
495
|
+
}
|
|
496
|
+
if (result.warnings.length > 0) {
|
|
497
|
+
console.log(`\n${chalk.bold('Warnings:')}`);
|
|
498
|
+
result.warnings.forEach((warning)=>console.log(` ā ļø ${warning}`));
|
|
499
|
+
}
|
|
500
|
+
if (result.errors.length > 0) {
|
|
501
|
+
console.log(`\n${chalk.bold('Errors:')}`);
|
|
502
|
+
result.errors.forEach((error)=>console.log(` ā ${error.error}`));
|
|
503
|
+
}
|
|
504
|
+
if (result.rollbackPath) {
|
|
505
|
+
console.log(`\n${chalk.bold('Rollback Available:')} ${result.rollbackPath}`);
|
|
506
|
+
console.log(chalk.gray(` Run "claude-flow-novice migrate rollback -t ${result.rollbackPath}" to revert`));
|
|
507
|
+
}
|
|
508
|
+
console.log(chalk.gray('\n' + 'ā'.repeat(50)));
|
|
509
|
+
}
|
|
510
|
+
constructor(options){
|
|
511
|
+
_define_property(this, "options", void 0);
|
|
512
|
+
_define_property(this, "progress", void 0);
|
|
513
|
+
_define_property(this, "analyzer", void 0);
|
|
514
|
+
_define_property(this, "validator", void 0);
|
|
515
|
+
_define_property(this, "manifest", void 0);
|
|
516
|
+
this.options = options;
|
|
517
|
+
this.progress = new ProgressReporter();
|
|
518
|
+
this.analyzer = new MigrationAnalyzer();
|
|
519
|
+
this.validator = new MigrationValidator();
|
|
520
|
+
this.manifest = this.loadManifest();
|
|
521
|
+
}
|
|
522
|
+
}
|