agentic-qe 2.3.4 → 2.4.0
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/CHANGELOG.md +72 -0
- package/README.md +1 -1
- package/dist/agents/ApiContractValidatorAgent.d.ts +5 -0
- package/dist/agents/ApiContractValidatorAgent.d.ts.map +1 -1
- package/dist/agents/ApiContractValidatorAgent.js +41 -0
- package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
- package/dist/agents/BaseAgent.d.ts +56 -49
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +208 -604
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +5 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.js +47 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +26 -0
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +149 -1
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.d.ts +5 -0
- package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.js +41 -0
- package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +7 -2
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +48 -104
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts +5 -0
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +51 -0
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/PerformanceTesterAgent.d.ts +5 -0
- package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
- package/dist/agents/PerformanceTesterAgent.js +44 -0
- package/dist/agents/PerformanceTesterAgent.js.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.d.ts +5 -0
- package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.js +46 -0
- package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
- package/dist/agents/QXPartnerAgent.js +52 -0
- package/dist/agents/QXPartnerAgent.js.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts +5 -0
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.js +45 -0
- package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.d.ts +40 -0
- package/dist/agents/QualityGateAgent.d.ts.map +1 -1
- package/dist/agents/QualityGateAgent.js +227 -1
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts +5 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.js +46 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.d.ts +5 -0
- package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.js +42 -0
- package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
- package/dist/agents/SecurityScannerAgent.d.ts +5 -0
- package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
- package/dist/agents/SecurityScannerAgent.js +39 -0
- package/dist/agents/SecurityScannerAgent.js.map +1 -1
- package/dist/agents/TestDataArchitectAgent.d.ts +5 -0
- package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
- package/dist/agents/TestDataArchitectAgent.js +46 -0
- package/dist/agents/TestDataArchitectAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts +6 -1
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +52 -46
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +5 -0
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +51 -35
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/adapters/CoordinatorAdapter.d.ts +47 -0
- package/dist/agents/adapters/CoordinatorAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/CoordinatorAdapter.js +266 -0
- package/dist/agents/adapters/CoordinatorAdapter.js.map +1 -0
- package/dist/agents/adapters/LearningEngineAdapter.d.ts +45 -0
- package/dist/agents/adapters/LearningEngineAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/LearningEngineAdapter.js +279 -0
- package/dist/agents/adapters/LearningEngineAdapter.js.map +1 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.d.ts +45 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.js +128 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.js.map +1 -0
- package/dist/agents/adapters/MemoryServiceAdapter.d.ts +96 -0
- package/dist/agents/adapters/MemoryServiceAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/MemoryServiceAdapter.js +266 -0
- package/dist/agents/adapters/MemoryServiceAdapter.js.map +1 -0
- package/dist/agents/adapters/index.d.ts +14 -0
- package/dist/agents/adapters/index.d.ts.map +1 -0
- package/dist/agents/adapters/index.js +25 -0
- package/dist/agents/adapters/index.js.map +1 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +17 -8
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/index.js +68 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/cache/BinaryCacheBuilder.d.ts +84 -0
- package/dist/core/cache/BinaryCacheBuilder.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheBuilder.js +225 -0
- package/dist/core/cache/BinaryCacheBuilder.js.map +1 -0
- package/dist/core/cache/BinaryCacheManager.d.ts +142 -0
- package/dist/core/cache/BinaryCacheManager.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheManager.js +354 -0
- package/dist/core/cache/BinaryCacheManager.js.map +1 -0
- package/dist/core/cache/BinaryCacheReader.d.ts +129 -0
- package/dist/core/cache/BinaryCacheReader.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheReader.js +243 -0
- package/dist/core/cache/BinaryCacheReader.js.map +1 -0
- package/dist/core/cache/BinaryMetadataCache.d.ts +533 -0
- package/dist/core/cache/BinaryMetadataCache.d.ts.map +1 -0
- package/dist/core/cache/BinaryMetadataCache.js +142 -0
- package/dist/core/cache/BinaryMetadataCache.js.map +1 -0
- package/dist/core/cache/CacheInvalidator.d.ts +103 -0
- package/dist/core/cache/CacheInvalidator.d.ts.map +1 -0
- package/dist/core/cache/CacheInvalidator.js +152 -0
- package/dist/core/cache/CacheInvalidator.js.map +1 -0
- package/dist/core/cache/CacheValidator.d.ts +69 -0
- package/dist/core/cache/CacheValidator.d.ts.map +1 -0
- package/dist/core/cache/CacheValidator.js +189 -0
- package/dist/core/cache/CacheValidator.js.map +1 -0
- package/dist/core/cache/MessagePackSerializer.d.ts +163 -0
- package/dist/core/cache/MessagePackSerializer.d.ts.map +1 -0
- package/dist/core/cache/MessagePackSerializer.js +274 -0
- package/dist/core/cache/MessagePackSerializer.js.map +1 -0
- package/dist/core/cache/index.d.ts +58 -0
- package/dist/core/cache/index.d.ts.map +1 -0
- package/dist/core/cache/index.js +102 -0
- package/dist/core/cache/index.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +18 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/core/memory/PatternStoreFactory.d.ts +28 -0
- package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -1
- package/dist/core/memory/PatternStoreFactory.js +68 -3
- package/dist/core/memory/PatternStoreFactory.js.map +1 -1
- package/dist/core/platform/FileOperations.d.ts +124 -0
- package/dist/core/platform/FileOperations.d.ts.map +1 -0
- package/dist/core/platform/FileOperations.js +371 -0
- package/dist/core/platform/FileOperations.js.map +1 -0
- package/dist/core/platform/PlatformDetector.d.ts +53 -0
- package/dist/core/platform/PlatformDetector.d.ts.map +1 -0
- package/dist/core/platform/PlatformDetector.js +251 -0
- package/dist/core/platform/PlatformDetector.js.map +1 -0
- package/dist/core/platform/index.d.ts +12 -0
- package/dist/core/platform/index.d.ts.map +1 -0
- package/dist/core/platform/index.js +28 -0
- package/dist/core/platform/index.js.map +1 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.d.ts +74 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.js +200 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.js.map +1 -0
- package/dist/core/strategies/AgentCoordinationStrategy.d.ts +157 -0
- package/dist/core/strategies/AgentCoordinationStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentCoordinationStrategy.js +12 -0
- package/dist/core/strategies/AgentCoordinationStrategy.js.map +1 -0
- package/dist/core/strategies/AgentLearningStrategy.d.ts +200 -0
- package/dist/core/strategies/AgentLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentLearningStrategy.js +13 -0
- package/dist/core/strategies/AgentLearningStrategy.js.map +1 -0
- package/dist/core/strategies/AgentLifecycleStrategy.d.ts +116 -0
- package/dist/core/strategies/AgentLifecycleStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentLifecycleStrategy.js +12 -0
- package/dist/core/strategies/AgentLifecycleStrategy.js.map +1 -0
- package/dist/core/strategies/AgentMemoryStrategy.d.ts +154 -0
- package/dist/core/strategies/AgentMemoryStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentMemoryStrategy.js +13 -0
- package/dist/core/strategies/AgentMemoryStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.d.ts +105 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.js +332 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultLearningStrategy.d.ts +120 -0
- package/dist/core/strategies/DefaultLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultLearningStrategy.js +365 -0
- package/dist/core/strategies/DefaultLearningStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.d.ts +129 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.js +297 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultMemoryStrategy.d.ts +91 -0
- package/dist/core/strategies/DefaultMemoryStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultMemoryStrategy.js +257 -0
- package/dist/core/strategies/DefaultMemoryStrategy.js.map +1 -0
- package/dist/core/strategies/DistributedMemoryStrategy.d.ts +85 -0
- package/dist/core/strategies/DistributedMemoryStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DistributedMemoryStrategy.js +126 -0
- package/dist/core/strategies/DistributedMemoryStrategy.js.map +1 -0
- package/dist/core/strategies/index.d.ts +95 -0
- package/dist/core/strategies/index.d.ts.map +1 -0
- package/dist/core/strategies/index.js +65 -0
- package/dist/core/strategies/index.js.map +1 -0
- package/dist/learning/PerformanceOptimizer.js +2 -2
- package/dist/learning/PerformanceOptimizer.js.map +1 -1
- package/dist/learning/capture/ExperienceExtractor.d.ts +219 -0
- package/dist/learning/capture/ExperienceExtractor.d.ts.map +1 -0
- package/dist/learning/capture/ExperienceExtractor.js +536 -0
- package/dist/learning/capture/ExperienceExtractor.js.map +1 -0
- package/dist/learning/capture/ExperienceStore.d.ts +196 -0
- package/dist/learning/capture/ExperienceStore.d.ts.map +1 -0
- package/dist/learning/capture/ExperienceStore.js +453 -0
- package/dist/learning/capture/ExperienceStore.js.map +1 -0
- package/dist/learning/scheduler/SleepScheduler.d.ts +2 -0
- package/dist/learning/scheduler/SleepScheduler.d.ts.map +1 -1
- package/dist/learning/scheduler/SleepScheduler.js +2 -0
- package/dist/learning/scheduler/SleepScheduler.js.map +1 -1
- package/dist/learning/synthesis/ClusteringEngine.d.ts +122 -0
- package/dist/learning/synthesis/ClusteringEngine.d.ts.map +1 -0
- package/dist/learning/synthesis/ClusteringEngine.js +356 -0
- package/dist/learning/synthesis/ClusteringEngine.js.map +1 -0
- package/dist/learning/transfer/TransferRegistry.d.ts +245 -0
- package/dist/learning/transfer/TransferRegistry.d.ts.map +1 -0
- package/dist/learning/transfer/TransferRegistry.js +410 -0
- package/dist/learning/transfer/TransferRegistry.js.map +1 -0
- package/dist/mcp/handlers/base-handler.d.ts +28 -1
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -1
- package/dist/mcp/handlers/base-handler.js +41 -0
- package/dist/mcp/handlers/base-handler.js.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.d.ts +11 -0
- package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.js +297 -4
- package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts +6 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +34 -3
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/output/AIActionSuggester.d.ts +98 -0
- package/dist/output/AIActionSuggester.d.ts.map +1 -0
- package/dist/output/AIActionSuggester.js +499 -0
- package/dist/output/AIActionSuggester.js.map +1 -0
- package/dist/output/CLIOutputHelper.d.ts +169 -0
- package/dist/output/CLIOutputHelper.d.ts.map +1 -0
- package/dist/output/CLIOutputHelper.js +320 -0
- package/dist/output/CLIOutputHelper.js.map +1 -0
- package/dist/output/OutputFormatter.d.ts +764 -0
- package/dist/output/OutputFormatter.d.ts.map +1 -0
- package/dist/output/OutputFormatter.js +125 -0
- package/dist/output/OutputFormatter.js.map +1 -0
- package/dist/output/OutputFormatterImpl.d.ts +131 -0
- package/dist/output/OutputFormatterImpl.d.ts.map +1 -0
- package/dist/output/OutputFormatterImpl.js +556 -0
- package/dist/output/OutputFormatterImpl.js.map +1 -0
- package/dist/output/examples.d.ts +38 -0
- package/dist/output/examples.d.ts.map +1 -0
- package/dist/output/examples.js +503 -0
- package/dist/output/examples.js.map +1 -0
- package/dist/output/index.d.ts +16 -0
- package/dist/output/index.d.ts.map +1 -0
- package/dist/output/index.js +58 -0
- package/dist/output/index.js.map +1 -0
- package/package.json +4 -1
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FileOperations - Platform-optimized file operations
|
|
4
|
+
*
|
|
5
|
+
* Provides file copy/clone operations that leverage platform-specific
|
|
6
|
+
* features like APFS clonefile (macOS) and reflink (Linux btrfs/xfs)
|
|
7
|
+
* for 50-100x performance improvements.
|
|
8
|
+
*
|
|
9
|
+
* @module core/platform/FileOperations
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
+
}) : function(o, v) {
|
|
26
|
+
o["default"] = v;
|
|
27
|
+
});
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.CopyStrategy = void 0;
|
|
47
|
+
exports.copyFile = copyFile;
|
|
48
|
+
exports.copyDirectory = copyDirectory;
|
|
49
|
+
exports.cloneForIsolation = cloneForIsolation;
|
|
50
|
+
exports.linkFixture = linkFixture;
|
|
51
|
+
exports.getCopyCapabilities = getCopyCapabilities;
|
|
52
|
+
exports.benchmarkCopy = benchmarkCopy;
|
|
53
|
+
const fs = __importStar(require("fs"));
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
const PlatformDetector_1 = require("./PlatformDetector");
|
|
56
|
+
/**
|
|
57
|
+
* Copy strategy used for a file operation
|
|
58
|
+
*/
|
|
59
|
+
var CopyStrategy;
|
|
60
|
+
(function (CopyStrategy) {
|
|
61
|
+
/** Copy-on-write clone (fastest) */
|
|
62
|
+
CopyStrategy["REFLINK"] = "reflink";
|
|
63
|
+
/** Filesystem hardlink (instant, shares data) */
|
|
64
|
+
CopyStrategy["HARDLINK"] = "hardlink";
|
|
65
|
+
/** Kernel-space copy (fast) */
|
|
66
|
+
CopyStrategy["KERNEL"] = "kernel";
|
|
67
|
+
/** Userspace copy (fallback) */
|
|
68
|
+
CopyStrategy["USERSPACE"] = "userspace";
|
|
69
|
+
})(CopyStrategy || (exports.CopyStrategy = CopyStrategy = {}));
|
|
70
|
+
/**
|
|
71
|
+
* Copy a file using the optimal strategy for the platform
|
|
72
|
+
*
|
|
73
|
+
* Priority: reflink > kernel copy > userspace copy
|
|
74
|
+
*
|
|
75
|
+
* @param source - Source file path
|
|
76
|
+
* @param destination - Destination file path
|
|
77
|
+
* @param options - Copy options
|
|
78
|
+
* @returns Copy result with strategy and timing info
|
|
79
|
+
*/
|
|
80
|
+
async function copyFile(source, destination, options = {}) {
|
|
81
|
+
const startTime = performance.now();
|
|
82
|
+
const sourcePath = path.resolve(source);
|
|
83
|
+
const destPath = path.resolve(destination);
|
|
84
|
+
// Check source exists
|
|
85
|
+
let stats;
|
|
86
|
+
try {
|
|
87
|
+
stats = await fs.promises.stat(sourcePath);
|
|
88
|
+
if (!stats.isFile()) {
|
|
89
|
+
throw new Error(`Source is not a file: ${sourcePath}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
return {
|
|
94
|
+
source: sourcePath,
|
|
95
|
+
destination: destPath,
|
|
96
|
+
strategy: CopyStrategy.USERSPACE,
|
|
97
|
+
duration: performance.now() - startTime,
|
|
98
|
+
size: 0,
|
|
99
|
+
success: false,
|
|
100
|
+
error: err.message,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Create parent directory if needed
|
|
104
|
+
if (options.recursive) {
|
|
105
|
+
await fs.promises.mkdir(path.dirname(destPath), { recursive: true });
|
|
106
|
+
}
|
|
107
|
+
// Handle overwrite
|
|
108
|
+
if (!options.overwrite) {
|
|
109
|
+
try {
|
|
110
|
+
await fs.promises.access(destPath);
|
|
111
|
+
return {
|
|
112
|
+
source: sourcePath,
|
|
113
|
+
destination: destPath,
|
|
114
|
+
strategy: CopyStrategy.USERSPACE,
|
|
115
|
+
duration: performance.now() - startTime,
|
|
116
|
+
size: stats.size,
|
|
117
|
+
success: false,
|
|
118
|
+
error: 'Destination already exists',
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// File doesn't exist, continue
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Determine strategy
|
|
126
|
+
let strategy = options.strategy;
|
|
127
|
+
if (!strategy) {
|
|
128
|
+
const caps = await (0, PlatformDetector_1.detectCapabilities)(sourcePath);
|
|
129
|
+
strategy = caps.supportsReflink ? CopyStrategy.REFLINK : CopyStrategy.KERNEL;
|
|
130
|
+
}
|
|
131
|
+
// Execute copy with fallback chain
|
|
132
|
+
let usedStrategy = strategy;
|
|
133
|
+
let error;
|
|
134
|
+
try {
|
|
135
|
+
switch (strategy) {
|
|
136
|
+
case CopyStrategy.REFLINK:
|
|
137
|
+
try {
|
|
138
|
+
await fs.promises.copyFile(sourcePath, destPath, fs.constants.COPYFILE_FICLONE_FORCE);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Reflink failed, try kernel copy
|
|
142
|
+
usedStrategy = CopyStrategy.KERNEL;
|
|
143
|
+
await fs.promises.copyFile(sourcePath, destPath, fs.constants.COPYFILE_FICLONE);
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
146
|
+
case CopyStrategy.HARDLINK:
|
|
147
|
+
try {
|
|
148
|
+
await fs.promises.link(sourcePath, destPath);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Hardlink failed, fallback to copy
|
|
152
|
+
usedStrategy = CopyStrategy.KERNEL;
|
|
153
|
+
await fs.promises.copyFile(sourcePath, destPath, fs.constants.COPYFILE_FICLONE);
|
|
154
|
+
}
|
|
155
|
+
break;
|
|
156
|
+
case CopyStrategy.KERNEL:
|
|
157
|
+
await fs.promises.copyFile(sourcePath, destPath, fs.constants.COPYFILE_FICLONE);
|
|
158
|
+
break;
|
|
159
|
+
case CopyStrategy.USERSPACE:
|
|
160
|
+
default:
|
|
161
|
+
await fs.promises.copyFile(sourcePath, destPath);
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
// Preserve timestamps if requested
|
|
165
|
+
if (options.preserveTimestamps) {
|
|
166
|
+
const srcStats = await fs.promises.stat(sourcePath);
|
|
167
|
+
await fs.promises.utimes(destPath, srcStats.atime, srcStats.mtime);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
error = err.message;
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
source: sourcePath,
|
|
175
|
+
destination: destPath,
|
|
176
|
+
strategy: usedStrategy,
|
|
177
|
+
duration: performance.now() - startTime,
|
|
178
|
+
size: stats.size,
|
|
179
|
+
success: !error,
|
|
180
|
+
error,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Copy a directory recursively using optimal strategies
|
|
185
|
+
*
|
|
186
|
+
* @param source - Source directory path
|
|
187
|
+
* @param destination - Destination directory path
|
|
188
|
+
* @param options - Copy options
|
|
189
|
+
* @returns Array of copy results for all files
|
|
190
|
+
*/
|
|
191
|
+
async function copyDirectory(source, destination, options = {}) {
|
|
192
|
+
const sourcePath = path.resolve(source);
|
|
193
|
+
const destPath = path.resolve(destination);
|
|
194
|
+
// Check source is a directory
|
|
195
|
+
const stats = await fs.promises.stat(sourcePath);
|
|
196
|
+
if (!stats.isDirectory()) {
|
|
197
|
+
throw new Error(`Source is not a directory: ${sourcePath}`);
|
|
198
|
+
}
|
|
199
|
+
// Create destination directory
|
|
200
|
+
await fs.promises.mkdir(destPath, { recursive: true });
|
|
201
|
+
// Get all entries
|
|
202
|
+
const entries = await fs.promises.readdir(sourcePath, { withFileTypes: true });
|
|
203
|
+
const results = [];
|
|
204
|
+
// Process entries in parallel with concurrency limit
|
|
205
|
+
const CONCURRENCY = 10;
|
|
206
|
+
const chunks = [];
|
|
207
|
+
for (let i = 0; i < entries.length; i += CONCURRENCY) {
|
|
208
|
+
chunks.push(entries.slice(i, i + CONCURRENCY));
|
|
209
|
+
}
|
|
210
|
+
for (const chunk of chunks) {
|
|
211
|
+
const chunkResults = await Promise.all(chunk.map(async (entry) => {
|
|
212
|
+
const srcEntryPath = path.join(sourcePath, entry.name);
|
|
213
|
+
const destEntryPath = path.join(destPath, entry.name);
|
|
214
|
+
if (entry.isDirectory()) {
|
|
215
|
+
return copyDirectory(srcEntryPath, destEntryPath, options);
|
|
216
|
+
}
|
|
217
|
+
else if (entry.isFile()) {
|
|
218
|
+
return [await copyFile(srcEntryPath, destEntryPath, options)];
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
// Symlinks, etc. - skip for now
|
|
222
|
+
return [];
|
|
223
|
+
}
|
|
224
|
+
}));
|
|
225
|
+
results.push(...chunkResults.flat());
|
|
226
|
+
}
|
|
227
|
+
return results;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Clone a directory for test isolation
|
|
231
|
+
*
|
|
232
|
+
* Optimized for creating isolated test workspaces with COW cloning.
|
|
233
|
+
*
|
|
234
|
+
* @param source - Source directory path
|
|
235
|
+
* @param destination - Destination directory path
|
|
236
|
+
* @returns Clone result summary
|
|
237
|
+
*/
|
|
238
|
+
async function cloneForIsolation(source, destination) {
|
|
239
|
+
const startTime = performance.now();
|
|
240
|
+
const results = await copyDirectory(source, destination, {
|
|
241
|
+
overwrite: true,
|
|
242
|
+
recursive: true,
|
|
243
|
+
});
|
|
244
|
+
const errors = results.filter(r => !r.success).map(r => r.error || 'Unknown error');
|
|
245
|
+
const successResults = results.filter(r => r.success);
|
|
246
|
+
// Determine predominant strategy used
|
|
247
|
+
const strategyCount = new Map();
|
|
248
|
+
for (const r of successResults) {
|
|
249
|
+
strategyCount.set(r.strategy, (strategyCount.get(r.strategy) || 0) + 1);
|
|
250
|
+
}
|
|
251
|
+
let predominantStrategy = CopyStrategy.USERSPACE;
|
|
252
|
+
let maxCount = 0;
|
|
253
|
+
for (const [strategy, count] of strategyCount) {
|
|
254
|
+
if (count > maxCount) {
|
|
255
|
+
maxCount = count;
|
|
256
|
+
predominantStrategy = strategy;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return {
|
|
260
|
+
success: errors.length === 0,
|
|
261
|
+
filesCloned: successResults.length,
|
|
262
|
+
totalSize: successResults.reduce((sum, r) => sum + r.size, 0),
|
|
263
|
+
duration: performance.now() - startTime,
|
|
264
|
+
strategy: predominantStrategy,
|
|
265
|
+
errors,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Create a read-only fixture copy using hardlinks
|
|
270
|
+
*
|
|
271
|
+
* Useful for test fixtures that won't be modified.
|
|
272
|
+
*
|
|
273
|
+
* @param source - Source file path
|
|
274
|
+
* @param destination - Destination file path
|
|
275
|
+
* @returns Copy result
|
|
276
|
+
*/
|
|
277
|
+
async function linkFixture(source, destination) {
|
|
278
|
+
return copyFile(source, destination, {
|
|
279
|
+
strategy: CopyStrategy.HARDLINK,
|
|
280
|
+
recursive: true,
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Get platform copy capabilities summary
|
|
285
|
+
*/
|
|
286
|
+
async function getCopyCapabilities() {
|
|
287
|
+
const caps = await (0, PlatformDetector_1.detectCapabilities)();
|
|
288
|
+
let optimalStrategy;
|
|
289
|
+
let expectedSpeedup;
|
|
290
|
+
if (caps.supportsReflink) {
|
|
291
|
+
optimalStrategy = CopyStrategy.REFLINK;
|
|
292
|
+
expectedSpeedup = '100-1000x';
|
|
293
|
+
}
|
|
294
|
+
else if (caps.supportsCopyFileRange) {
|
|
295
|
+
optimalStrategy = CopyStrategy.KERNEL;
|
|
296
|
+
expectedSpeedup = '2-5x';
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
optimalStrategy = CopyStrategy.USERSPACE;
|
|
300
|
+
expectedSpeedup = '1x (baseline)';
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
platform: caps.platform,
|
|
304
|
+
filesystem: caps.filesystem,
|
|
305
|
+
optimalStrategy,
|
|
306
|
+
expectedSpeedup,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Benchmark copy operations for the current platform
|
|
311
|
+
*
|
|
312
|
+
* @param testPath - Path to run benchmark in
|
|
313
|
+
* @returns Benchmark results
|
|
314
|
+
*/
|
|
315
|
+
async function benchmarkCopy(testPath = '/tmp') {
|
|
316
|
+
const testDir = path.join(testPath, '.copy-benchmark');
|
|
317
|
+
const testData = Buffer.alloc(1024 * 1024, 'x'); // 1MB test file
|
|
318
|
+
try {
|
|
319
|
+
await fs.promises.mkdir(testDir, { recursive: true });
|
|
320
|
+
const srcFile = path.join(testDir, 'src.tmp');
|
|
321
|
+
await fs.promises.writeFile(srcFile, testData);
|
|
322
|
+
const results = {
|
|
323
|
+
reflink: null,
|
|
324
|
+
kernel: null,
|
|
325
|
+
userspace: 0,
|
|
326
|
+
};
|
|
327
|
+
// Benchmark reflink
|
|
328
|
+
try {
|
|
329
|
+
const destReflink = path.join(testDir, 'dest-reflink.tmp');
|
|
330
|
+
const startReflink = performance.now();
|
|
331
|
+
await fs.promises.copyFile(srcFile, destReflink, fs.constants.COPYFILE_FICLONE_FORCE);
|
|
332
|
+
results.reflink = performance.now() - startReflink;
|
|
333
|
+
await fs.promises.unlink(destReflink);
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
// Reflink not supported
|
|
337
|
+
}
|
|
338
|
+
// Benchmark kernel copy
|
|
339
|
+
const destKernel = path.join(testDir, 'dest-kernel.tmp');
|
|
340
|
+
const startKernel = performance.now();
|
|
341
|
+
await fs.promises.copyFile(srcFile, destKernel, fs.constants.COPYFILE_FICLONE);
|
|
342
|
+
results.kernel = performance.now() - startKernel;
|
|
343
|
+
await fs.promises.unlink(destKernel);
|
|
344
|
+
// Benchmark userspace copy
|
|
345
|
+
const destUser = path.join(testDir, 'dest-user.tmp');
|
|
346
|
+
const startUser = performance.now();
|
|
347
|
+
await fs.promises.copyFile(srcFile, destUser);
|
|
348
|
+
results.userspace = performance.now() - startUser;
|
|
349
|
+
await fs.promises.unlink(destUser);
|
|
350
|
+
// Calculate improvement
|
|
351
|
+
let improvement = '1x';
|
|
352
|
+
if (results.reflink !== null) {
|
|
353
|
+
const factor = Math.round(results.userspace / results.reflink);
|
|
354
|
+
improvement = `${factor}x (reflink)`;
|
|
355
|
+
}
|
|
356
|
+
else if (results.kernel !== null && results.kernel < results.userspace) {
|
|
357
|
+
const factor = Math.round(results.userspace / results.kernel);
|
|
358
|
+
improvement = `${factor}x (kernel)`;
|
|
359
|
+
}
|
|
360
|
+
return { ...results, improvement };
|
|
361
|
+
}
|
|
362
|
+
finally {
|
|
363
|
+
try {
|
|
364
|
+
await fs.promises.rm(testDir, { recursive: true, force: true });
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
// Ignore cleanup errors
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=FileOperations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileOperations.js","sourceRoot":"","sources":["../../../src/core/platform/FileOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlatformDetector - Detects platform capabilities for optimized file operations
|
|
3
|
+
*
|
|
4
|
+
* Identifies filesystem features like reflink (copy-on-write) support
|
|
5
|
+
* to enable 100x+ performance improvements for file operations.
|
|
6
|
+
*
|
|
7
|
+
* @module core/platform/PlatformDetector
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Platform capabilities for file operations
|
|
12
|
+
*/
|
|
13
|
+
export interface PlatformCapabilities {
|
|
14
|
+
/** Platform identifier (darwin, linux, win32, etc.) */
|
|
15
|
+
platform: NodeJS.Platform;
|
|
16
|
+
/** Detected filesystem type */
|
|
17
|
+
filesystem: string;
|
|
18
|
+
/** Whether reflink/clonefile is supported */
|
|
19
|
+
supportsReflink: boolean;
|
|
20
|
+
/** Whether hardlinks are supported */
|
|
21
|
+
supportsHardlinks: boolean;
|
|
22
|
+
/** Whether copy_file_range is available */
|
|
23
|
+
supportsCopyFileRange: boolean;
|
|
24
|
+
/** Node.js copyFile flags to use */
|
|
25
|
+
recommendedCopyFlags: number;
|
|
26
|
+
/** Human-readable capability summary */
|
|
27
|
+
summary: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Detect platform capabilities for a given path
|
|
31
|
+
*
|
|
32
|
+
* @param targetPath - Path to check capabilities for (uses tmpdir if not specified)
|
|
33
|
+
* @returns Platform capabilities object
|
|
34
|
+
*/
|
|
35
|
+
export declare function detectCapabilities(targetPath?: string): Promise<PlatformCapabilities>;
|
|
36
|
+
/**
|
|
37
|
+
* Test if reflink actually works for a given path
|
|
38
|
+
*
|
|
39
|
+
* This performs an actual file clone test to verify capabilities.
|
|
40
|
+
*
|
|
41
|
+
* @param targetPath - Path to test
|
|
42
|
+
* @returns True if reflink works
|
|
43
|
+
*/
|
|
44
|
+
export declare function testReflinkSupport(targetPath: string): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Clear the capabilities cache
|
|
47
|
+
*/
|
|
48
|
+
export declare function clearCapabilitiesCache(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Get a quick summary of current platform capabilities
|
|
51
|
+
*/
|
|
52
|
+
export declare function getQuickSummary(): Promise<string>;
|
|
53
|
+
//# sourceMappingURL=PlatformDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlatformDetector.d.ts","sourceRoot":"","sources":["../../../src/core/platform/PlatformDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,eAAe,EAAE,OAAO,CAAC;IACzB,sCAAsC;IACtC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,oCAAoC;IACpC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,GAAE,MAAoB,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CA0D/B;AAuGD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA2B7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAGvD"}
|