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,200 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import { copyPrompts, copyPromptsEnhanced } from "./prompt-copier-enhanced.js";
|
|
5
|
+
import { PromptConfigManager, PromptPathResolver, PromptValidator, createProgressBar, formatDuration } from "./prompt-utils.js";
|
|
6
|
+
const program = new Command();
|
|
7
|
+
program.name('prompt-copier').description('Robust prompt copying mechanism for Claude-Flow').version('1.0.0');
|
|
8
|
+
program.command('copy').description('Copy prompts from source to destination').option('-s, --source <path>', 'Source directory').option('-d, --destination <path>', 'Destination directory').option('-p, --profile <name>', 'Configuration profile to use').option('--no-backup', 'Disable backup creation').option('--no-verify', 'Disable file verification').option('--no-parallel', 'Disable parallel processing').option('--workers <number>', 'Number of worker threads', parseInt).option('--conflict <strategy>', 'Conflict resolution strategy', /^(skip|overwrite|backup|merge)$/).option('--include <patterns>', 'Include patterns (comma-separated)').option('--exclude <patterns>', 'Exclude patterns (comma-separated)').option('--dry-run', 'Show what would be copied without actually copying').option('--enhanced', 'Use enhanced copier with worker threads').action(async (options)=>{
|
|
9
|
+
try {
|
|
10
|
+
const configManager = new PromptConfigManager();
|
|
11
|
+
const config = await configManager.loadConfig();
|
|
12
|
+
let copyOptions;
|
|
13
|
+
if (options.profile) {
|
|
14
|
+
const profileOptions = configManager.getProfile(options.profile);
|
|
15
|
+
copyOptions = {
|
|
16
|
+
source: options.source || config.sourceDirectories[0],
|
|
17
|
+
destination: options.destination || config.destinationDirectory,
|
|
18
|
+
...profileOptions
|
|
19
|
+
};
|
|
20
|
+
} else {
|
|
21
|
+
copyOptions = {
|
|
22
|
+
source: options.source || config.sourceDirectories[0],
|
|
23
|
+
destination: options.destination || config.destinationDirectory,
|
|
24
|
+
backup: options.backup,
|
|
25
|
+
verify: options.verify,
|
|
26
|
+
parallel: options.parallel,
|
|
27
|
+
maxWorkers: options.workers || config.defaultOptions.maxWorkers,
|
|
28
|
+
conflictResolution: options.conflict || config.defaultOptions.conflictResolution,
|
|
29
|
+
includePatterns: options.include ? options.include.split(',') : config.defaultOptions.includePatterns,
|
|
30
|
+
excludePatterns: options.exclude ? options.exclude.split(',') : config.defaultOptions.excludePatterns,
|
|
31
|
+
dryRun: options.dryRun
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Create progress bar
|
|
35
|
+
let progressBar = null;
|
|
36
|
+
copyOptions.progressCallback = (progress)=>{
|
|
37
|
+
if (!progressBar) {
|
|
38
|
+
progressBar = createProgressBar(progress.total);
|
|
39
|
+
}
|
|
40
|
+
progressBar.update(progress.completed);
|
|
41
|
+
if (progress.completed === progress.total) {
|
|
42
|
+
progressBar.complete();
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
console.log('Starting prompt copy operation...');
|
|
46
|
+
console.log(`Source: ${copyOptions.source}`);
|
|
47
|
+
console.log(`Destination: ${copyOptions.destination}`);
|
|
48
|
+
console.log(`Options: ${JSON.stringify(copyOptions, null, 2)}`);
|
|
49
|
+
const copyFunction = options.enhanced ? copyPromptsEnhanced : copyPrompts;
|
|
50
|
+
const result = await copyFunction(copyOptions);
|
|
51
|
+
console.log('\n=== Copy Results ===');
|
|
52
|
+
console.log(`Success: ${result.success ? '✅' : '❌'}`);
|
|
53
|
+
console.log(`Total files: ${result.totalFiles}`);
|
|
54
|
+
console.log(`Copied: ${result.copiedFiles}`);
|
|
55
|
+
console.log(`Failed: ${result.failedFiles}`);
|
|
56
|
+
console.log(`Skipped: ${result.skippedFiles}`);
|
|
57
|
+
console.log(`Duration: ${formatDuration(result.duration)}`);
|
|
58
|
+
if (result.backupLocation) {
|
|
59
|
+
console.log(`Backup manifest: ${result.backupLocation}`);
|
|
60
|
+
}
|
|
61
|
+
if (result.errors.length > 0) {
|
|
62
|
+
console.log('\n=== Errors ===');
|
|
63
|
+
result.errors.forEach((error)=>{
|
|
64
|
+
console.log(`❌ ${error.file}: ${error.error} (${error.phase})`);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
} catch (error) {
|
|
68
|
+
console.error('Copy operation failed:', error);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
program.command('discover').description('Discover prompt directories in the current project').option('-b, --base <path>', 'Base path to search from', process.cwd()).action(async (options)=>{
|
|
73
|
+
try {
|
|
74
|
+
const resolver = new PromptPathResolver(options.base);
|
|
75
|
+
const directories = await resolver.discoverPromptDirectories();
|
|
76
|
+
console.log('Discovered prompt directories:');
|
|
77
|
+
directories.forEach((dir)=>{
|
|
78
|
+
console.log(` 📁 ${dir}`);
|
|
79
|
+
});
|
|
80
|
+
if (directories.length === 0) {
|
|
81
|
+
console.log(' No prompt directories found');
|
|
82
|
+
}
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.error('Discovery failed:', error);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
program.command('validate <path>').description('Validate prompt files').option('--recursive', 'Validate recursively').action(async (filePath, options)=>{
|
|
89
|
+
try {
|
|
90
|
+
const stats = await require('fs').promises.stat(filePath);
|
|
91
|
+
const files = [];
|
|
92
|
+
if (stats.isFile()) {
|
|
93
|
+
files.push(filePath);
|
|
94
|
+
} else if (stats.isDirectory()) {
|
|
95
|
+
// Scan directory for prompt files
|
|
96
|
+
const scanDir = async (dir)=>{
|
|
97
|
+
const entries = await require('fs').promises.readdir(dir, {
|
|
98
|
+
withFileTypes: true
|
|
99
|
+
});
|
|
100
|
+
for (const entry of entries){
|
|
101
|
+
const fullPath = path.join(dir, entry.name);
|
|
102
|
+
if (entry.isFile() && (entry.name.endsWith('.md') || entry.name.endsWith('.txt') || entry.name.endsWith('.prompt'))) {
|
|
103
|
+
files.push(fullPath);
|
|
104
|
+
} else if (entry.isDirectory() && options.recursive) {
|
|
105
|
+
await scanDir(fullPath);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
await scanDir(filePath);
|
|
110
|
+
}
|
|
111
|
+
console.log(`Validating ${files.length} files...`);
|
|
112
|
+
let validFiles = 0;
|
|
113
|
+
let invalidFiles = 0;
|
|
114
|
+
for (const file of files){
|
|
115
|
+
const result = await PromptValidator.validatePromptFile(file);
|
|
116
|
+
if (result.valid) {
|
|
117
|
+
validFiles++;
|
|
118
|
+
console.log(`✅ ${file}`);
|
|
119
|
+
} else {
|
|
120
|
+
invalidFiles++;
|
|
121
|
+
console.log(`❌ ${file}`);
|
|
122
|
+
result.issues.forEach((issue)=>{
|
|
123
|
+
console.log(` - ${issue}`);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (result.metadata && Object.keys(result.metadata).length > 0) {
|
|
127
|
+
console.log(` Metadata: ${JSON.stringify(result.metadata)}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
console.log(`\nValidation complete: ${validFiles} valid, ${invalidFiles} invalid`);
|
|
131
|
+
} catch (error) {
|
|
132
|
+
console.error('Validation failed:', error);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
program.command('config').description('Manage configuration').option('--init', 'Initialize default configuration').option('--show', 'Show current configuration').option('--profiles', 'List available profiles').action(async (options)=>{
|
|
137
|
+
try {
|
|
138
|
+
const configManager = new PromptConfigManager();
|
|
139
|
+
if (options.init) {
|
|
140
|
+
await configManager.saveConfig();
|
|
141
|
+
console.log('✅ Configuration initialized');
|
|
142
|
+
} else if (options.show) {
|
|
143
|
+
const config = await configManager.loadConfig();
|
|
144
|
+
console.log(JSON.stringify(config, null, 2));
|
|
145
|
+
} else if (options.profiles) {
|
|
146
|
+
const config = await configManager.loadConfig();
|
|
147
|
+
const profiles = configManager.listProfiles();
|
|
148
|
+
console.log('Available profiles:');
|
|
149
|
+
profiles.forEach((profile)=>{
|
|
150
|
+
console.log(` 📋 ${profile}`);
|
|
151
|
+
const profileOptions = configManager.getProfile(profile);
|
|
152
|
+
Object.entries(profileOptions).forEach(([key, value])=>{
|
|
153
|
+
console.log(` ${key}: ${JSON.stringify(value)}`);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
} else {
|
|
157
|
+
console.log('Use --init, --show, or --profiles');
|
|
158
|
+
}
|
|
159
|
+
} catch (error) {
|
|
160
|
+
console.error('Configuration operation failed:', error);
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
program.command('rollback <manifest>').description('Rollback from backup').action(async (manifestPath)=>{
|
|
165
|
+
try {
|
|
166
|
+
const { PromptCopier } = await import("./prompt-copier.js");
|
|
167
|
+
const copier = new PromptCopier({
|
|
168
|
+
source: '',
|
|
169
|
+
destination: ''
|
|
170
|
+
});
|
|
171
|
+
await copier.restoreFromBackup(manifestPath);
|
|
172
|
+
console.log('✅ Rollback completed');
|
|
173
|
+
} catch (error) {
|
|
174
|
+
console.error('Rollback failed:', error);
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
program.command('sync').description('Synchronize prompts between directories').option('-s, --source <path>', 'Source directory').option('-d, --destination <path>', 'Destination directory').option('--bidirectional', 'Enable bidirectional sync').option('--delete', 'Delete files not present in source').action(async (options)=>{
|
|
179
|
+
try {
|
|
180
|
+
// This would implement incremental sync functionality
|
|
181
|
+
console.log('Sync functionality not yet implemented');
|
|
182
|
+
console.log('Options:', options);
|
|
183
|
+
} catch (error) {
|
|
184
|
+
console.error('Sync failed:', error);
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
// Handle uncaught errors
|
|
189
|
+
process.on('uncaughtException', (error)=>{
|
|
190
|
+
console.error('Uncaught exception:', error);
|
|
191
|
+
process.exit(1);
|
|
192
|
+
});
|
|
193
|
+
process.on('unhandledRejection', (reason)=>{
|
|
194
|
+
console.error('Unhandled rejection:', reason);
|
|
195
|
+
process.exit(1);
|
|
196
|
+
});
|
|
197
|
+
if (require.main === module) {
|
|
198
|
+
program.parse();
|
|
199
|
+
}
|
|
200
|
+
export { program };
|
|
@@ -0,0 +1,202 @@
|
|
|
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
|
+
import * as fs from "node:fs/promises";
|
|
18
|
+
import * as path from "path";
|
|
19
|
+
import { Worker } from "worker_threads";
|
|
20
|
+
import { PromptCopier } from "./prompt-copier.js";
|
|
21
|
+
import { logger } from "../core/logger.js";
|
|
22
|
+
export class EnhancedPromptCopier extends PromptCopier {
|
|
23
|
+
async copyFilesParallel() {
|
|
24
|
+
const workerCount = Math.min(this.options.maxWorkers, this.fileQueue.length);
|
|
25
|
+
// Initialize worker pool
|
|
26
|
+
this.workerPool = await this.initializeWorkerPool(workerCount);
|
|
27
|
+
try {
|
|
28
|
+
// Process files using worker pool
|
|
29
|
+
await this.processWithWorkerPool();
|
|
30
|
+
} finally{
|
|
31
|
+
// Cleanup workers
|
|
32
|
+
await this.terminateWorkers();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async initializeWorkerPool(workerCount) {
|
|
36
|
+
const workers = [];
|
|
37
|
+
const pool = {
|
|
38
|
+
workers,
|
|
39
|
+
busy: new Set(),
|
|
40
|
+
queue: []
|
|
41
|
+
};
|
|
42
|
+
// Create workers
|
|
43
|
+
for(let i = 0; i < workerCount; i++){
|
|
44
|
+
const worker = new Worker(path.join(__dirname, 'workers', 'copy-worker.js'), {
|
|
45
|
+
workerData: {
|
|
46
|
+
workerId: i
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
// Setup worker message handler
|
|
50
|
+
worker.on('message', (result)=>{
|
|
51
|
+
this.handleWorkerResult(result, i, pool);
|
|
52
|
+
});
|
|
53
|
+
worker.on('error', (error)=>{
|
|
54
|
+
logger.error(`Worker ${i} error:`, error);
|
|
55
|
+
this.errors.push({
|
|
56
|
+
file: 'worker',
|
|
57
|
+
error: error instanceof Error ? error.message : String(error),
|
|
58
|
+
phase: 'write'
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
workers.push(worker);
|
|
62
|
+
}
|
|
63
|
+
return pool;
|
|
64
|
+
}
|
|
65
|
+
async processWithWorkerPool() {
|
|
66
|
+
const chunkSize = Math.max(1, Math.floor(this.fileQueue.length / this.workerPool.workers.length / 2));
|
|
67
|
+
const chunks = [];
|
|
68
|
+
// Create chunks for better distribution
|
|
69
|
+
for(let i = 0; i < this.fileQueue.length; i += chunkSize){
|
|
70
|
+
chunks.push(this.fileQueue.slice(i, i + chunkSize));
|
|
71
|
+
}
|
|
72
|
+
// Process chunks
|
|
73
|
+
const promises = [];
|
|
74
|
+
for (const chunk of chunks){
|
|
75
|
+
promises.push(this.processChunkWithWorker(chunk));
|
|
76
|
+
}
|
|
77
|
+
await Promise.all(promises);
|
|
78
|
+
}
|
|
79
|
+
async processChunkWithWorker(chunk) {
|
|
80
|
+
return new Promise((resolve, reject)=>{
|
|
81
|
+
const pool = this.workerPool;
|
|
82
|
+
const tryAssignWork = ()=>{
|
|
83
|
+
// Find available worker
|
|
84
|
+
const availableWorkerIndex = pool.workers.findIndex((_, index)=>!pool.busy.has(index));
|
|
85
|
+
if (availableWorkerIndex === -1) {
|
|
86
|
+
// No workers available, queue the work
|
|
87
|
+
pool.queue.push(tryAssignWork);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Mark worker as busy
|
|
91
|
+
pool.busy.add(availableWorkerIndex);
|
|
92
|
+
// Prepare worker data
|
|
93
|
+
const workerData = {
|
|
94
|
+
files: chunk.map((file)=>({
|
|
95
|
+
sourcePath: file.path,
|
|
96
|
+
destPath: path.join(this.options.destination, file.relativePath),
|
|
97
|
+
permissions: this.options.preservePermissions ? file.permissions : undefined,
|
|
98
|
+
verify: this.options.verify
|
|
99
|
+
})),
|
|
100
|
+
workerId: availableWorkerIndex
|
|
101
|
+
};
|
|
102
|
+
let remainingFiles = chunk.length;
|
|
103
|
+
const chunkResults = [];
|
|
104
|
+
// Setup temporary message handler for this chunk
|
|
105
|
+
const messageHandler = (result)=>{
|
|
106
|
+
chunkResults.push(result);
|
|
107
|
+
remainingFiles--;
|
|
108
|
+
if (remainingFiles === 0) {
|
|
109
|
+
// Chunk complete
|
|
110
|
+
pool.workers[availableWorkerIndex].off('message', messageHandler);
|
|
111
|
+
pool.busy.delete(availableWorkerIndex);
|
|
112
|
+
// Process next queued work
|
|
113
|
+
if (pool.queue.length > 0) {
|
|
114
|
+
const nextWork = pool.queue.shift();
|
|
115
|
+
nextWork();
|
|
116
|
+
}
|
|
117
|
+
// Process results
|
|
118
|
+
this.processChunkResults(chunk, chunkResults);
|
|
119
|
+
resolve();
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
pool.workers[availableWorkerIndex].on('message', messageHandler);
|
|
123
|
+
pool.workers[availableWorkerIndex].postMessage(workerData);
|
|
124
|
+
};
|
|
125
|
+
tryAssignWork();
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
processChunkResults(chunk, results) {
|
|
129
|
+
for (const result of results){
|
|
130
|
+
if (result.success) {
|
|
131
|
+
this.copiedFiles.add(result.file);
|
|
132
|
+
if (result.hash) {
|
|
133
|
+
this.workerResults.set(result.file, {
|
|
134
|
+
hash: result.hash
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
} else {
|
|
138
|
+
this.errors.push({
|
|
139
|
+
file: result.file,
|
|
140
|
+
error: result.error,
|
|
141
|
+
phase: 'write'
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Report progress through the callback if available
|
|
146
|
+
if (this.options.progressCallback) {
|
|
147
|
+
this.options.progressCallback(this.copiedFiles.size, this.totalFiles);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
handleWorkerResult(result, workerId, pool) {
|
|
151
|
+
// This is a fallback handler, actual handling happens in processChunkWithWorker
|
|
152
|
+
logger.debug(`Worker ${workerId} result:`, result);
|
|
153
|
+
}
|
|
154
|
+
async terminateWorkers() {
|
|
155
|
+
if (!this.workerPool) return;
|
|
156
|
+
const terminationPromises = this.workerPool.workers.map((worker)=>worker.terminate());
|
|
157
|
+
await Promise.all(terminationPromises);
|
|
158
|
+
this.workerPool = undefined;
|
|
159
|
+
}
|
|
160
|
+
// Override verification to use worker results
|
|
161
|
+
async verifyFiles() {
|
|
162
|
+
logger.info('Verifying copied files...');
|
|
163
|
+
for (const file of this.fileQueue){
|
|
164
|
+
if (!this.copiedFiles.has(file.path)) continue;
|
|
165
|
+
try {
|
|
166
|
+
const destPath = path.join(this.options.destination, file.relativePath);
|
|
167
|
+
// Verify file exists
|
|
168
|
+
if (!await this.fileExists(destPath)) {
|
|
169
|
+
throw new Error('Destination file not found');
|
|
170
|
+
}
|
|
171
|
+
// Verify size
|
|
172
|
+
const destStats = await fs.stat(destPath);
|
|
173
|
+
const sourceStats = await fs.stat(file.path);
|
|
174
|
+
if (destStats.size !== sourceStats.size) {
|
|
175
|
+
throw new Error(`Size mismatch: ${destStats.size} != ${sourceStats.size}`);
|
|
176
|
+
}
|
|
177
|
+
// Use hash from worker if available
|
|
178
|
+
const workerResult = this.workerResults.get(file.path);
|
|
179
|
+
if (workerResult?.hash) {
|
|
180
|
+
const sourceHash = await this.calculateFileHash(file.path);
|
|
181
|
+
if (sourceHash !== workerResult.hash) {
|
|
182
|
+
throw new Error(`Hash mismatch: ${sourceHash} != ${workerResult.hash}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
} catch (error) {
|
|
186
|
+
this.errors.push({
|
|
187
|
+
file: file.path,
|
|
188
|
+
error: error instanceof Error ? error.message : String(error),
|
|
189
|
+
phase: 'verify'
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
constructor(options){
|
|
195
|
+
super(options), _define_property(this, "workerPool", void 0), _define_property(this, "workerResults", new Map());
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Export enhanced copy function
|
|
199
|
+
export async function copyPromptsEnhanced(options) {
|
|
200
|
+
const copier = new EnhancedPromptCopier(options);
|
|
201
|
+
return copier.copy();
|
|
202
|
+
}
|