agentdb 2.0.0-alpha.2 → 2.0.0-alpha.2.2
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/agentdb.min.js +4 -4
- package/dist/simulation/cli.js +0 -0
- package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
- package/dist/src/cli/agentdb-cli.js +78 -0
- package/dist/src/cli/agentdb-cli.js.map +1 -1
- package/dist/src/cli/commands/init.js +3 -3
- package/dist/src/cli/commands/init.js.map +1 -1
- package/package.json +3 -3
- package/src/cli/agentdb-cli.ts +78 -0
- package/src/cli/commands/init.ts +3 -3
- package/dist/agentdb-advanced.js +0 -2110
- package/dist/agentdb-advanced.min.js +0 -1
- package/dist/backends/GraphBackend.d.ts +0 -196
- package/dist/backends/GraphBackend.d.ts.map +0 -1
- package/dist/backends/GraphBackend.js +0 -33
- package/dist/backends/GraphBackend.js.map +0 -1
- package/dist/backends/LearningBackend.d.ts +0 -148
- package/dist/backends/LearningBackend.d.ts.map +0 -1
- package/dist/backends/LearningBackend.js +0 -27
- package/dist/backends/LearningBackend.js.map +0 -1
- package/dist/backends/VectorBackend.d.ts +0 -119
- package/dist/backends/VectorBackend.d.ts.map +0 -1
- package/dist/backends/VectorBackend.js +0 -14
- package/dist/backends/VectorBackend.js.map +0 -1
- package/dist/backends/detector.d.ts +0 -81
- package/dist/backends/detector.d.ts.map +0 -1
- package/dist/backends/detector.js +0 -192
- package/dist/backends/detector.js.map +0 -1
- package/dist/backends/factory.d.ts +0 -50
- package/dist/backends/factory.d.ts.map +0 -1
- package/dist/backends/factory.js +0 -161
- package/dist/backends/factory.js.map +0 -1
- package/dist/backends/graph/GraphDatabaseAdapter.d.ts +0 -139
- package/dist/backends/graph/GraphDatabaseAdapter.d.ts.map +0 -1
- package/dist/backends/graph/GraphDatabaseAdapter.js +0 -194
- package/dist/backends/graph/GraphDatabaseAdapter.js.map +0 -1
- package/dist/backends/hnswlib/HNSWLibBackend.d.ts +0 -92
- package/dist/backends/hnswlib/HNSWLibBackend.d.ts.map +0 -1
- package/dist/backends/hnswlib/HNSWLibBackend.js +0 -316
- package/dist/backends/hnswlib/HNSWLibBackend.js.map +0 -1
- package/dist/backends/hnswlib/index.d.ts +0 -7
- package/dist/backends/hnswlib/index.d.ts.map +0 -1
- package/dist/backends/hnswlib/index.js +0 -7
- package/dist/backends/hnswlib/index.js.map +0 -1
- package/dist/backends/index.d.ts +0 -14
- package/dist/backends/index.d.ts.map +0 -1
- package/dist/backends/index.js +0 -13
- package/dist/backends/index.js.map +0 -1
- package/dist/backends/ruvector/RuVectorBackend.d.ts +0 -75
- package/dist/backends/ruvector/RuVectorBackend.d.ts.map +0 -1
- package/dist/backends/ruvector/RuVectorBackend.js +0 -198
- package/dist/backends/ruvector/RuVectorBackend.js.map +0 -1
- package/dist/backends/ruvector/RuVectorLearning.d.ts +0 -104
- package/dist/backends/ruvector/RuVectorLearning.d.ts.map +0 -1
- package/dist/backends/ruvector/RuVectorLearning.js +0 -177
- package/dist/backends/ruvector/RuVectorLearning.js.map +0 -1
- package/dist/backends/ruvector/index.d.ts +0 -9
- package/dist/backends/ruvector/index.d.ts.map +0 -1
- package/dist/backends/ruvector/index.js +0 -8
- package/dist/backends/ruvector/index.js.map +0 -1
- package/dist/benchmarks/wasm-vector-benchmark.d.ts +0 -10
- package/dist/benchmarks/wasm-vector-benchmark.d.ts.map +0 -1
- package/dist/benchmarks/wasm-vector-benchmark.js +0 -196
- package/dist/benchmarks/wasm-vector-benchmark.js.map +0 -1
- package/dist/browser/AdvancedFeatures.d.ts +0 -144
- package/dist/browser/AdvancedFeatures.d.ts.map +0 -1
- package/dist/browser/AdvancedFeatures.js +0 -430
- package/dist/browser/AdvancedFeatures.js.map +0 -1
- package/dist/browser/HNSWIndex.d.ts +0 -117
- package/dist/browser/HNSWIndex.d.ts.map +0 -1
- package/dist/browser/HNSWIndex.js +0 -402
- package/dist/browser/HNSWIndex.js.map +0 -1
- package/dist/browser/ProductQuantization.d.ts +0 -107
- package/dist/browser/ProductQuantization.d.ts.map +0 -1
- package/dist/browser/ProductQuantization.js +0 -337
- package/dist/browser/ProductQuantization.js.map +0 -1
- package/dist/browser/browser/AdvancedFeatures.d.ts +0 -144
- package/dist/browser/browser/AdvancedFeatures.d.ts.map +0 -1
- package/dist/browser/browser/AdvancedFeatures.js +0 -427
- package/dist/browser/browser/HNSWIndex.d.ts +0 -117
- package/dist/browser/browser/HNSWIndex.d.ts.map +0 -1
- package/dist/browser/browser/HNSWIndex.js +0 -402
- package/dist/browser/browser/ProductQuantization.d.ts +0 -107
- package/dist/browser/browser/ProductQuantization.d.ts.map +0 -1
- package/dist/browser/browser/ProductQuantization.js +0 -348
- package/dist/browser/browser/index.d.ts +0 -223
- package/dist/browser/browser/index.d.ts.map +0 -1
- package/dist/browser/browser/index.js +0 -233
- package/dist/browser/index.d.ts +0 -223
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -225
- package/dist/browser/index.js.map +0 -1
- package/dist/cli/agentdb-cli.d.ts +0 -154
- package/dist/cli/agentdb-cli.d.ts.map +0 -1
- package/dist/cli/agentdb-cli.js +0 -2273
- package/dist/cli/agentdb-cli.js.map +0 -1
- package/dist/cli/agentdb.db +0 -0
- package/dist/cli/commands/init.d.ts +0 -12
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -115
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/install-embeddings.d.ts +0 -10
- package/dist/cli/commands/install-embeddings.d.ts.map +0 -1
- package/dist/cli/commands/install-embeddings.js +0 -68
- package/dist/cli/commands/install-embeddings.js.map +0 -1
- package/dist/cli/commands/migrate.d.ts +0 -15
- package/dist/cli/commands/migrate.d.ts.map +0 -1
- package/dist/cli/commands/migrate.js +0 -425
- package/dist/cli/commands/migrate.js.map +0 -1
- package/dist/cli/commands/status.d.ts +0 -10
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js +0 -129
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/controllers/CausalMemoryGraph.d.ts +0 -126
- package/dist/controllers/CausalMemoryGraph.d.ts.map +0 -1
- package/dist/controllers/CausalMemoryGraph.js +0 -323
- package/dist/controllers/CausalMemoryGraph.js.map +0 -1
- package/dist/controllers/CausalRecall.d.ts +0 -139
- package/dist/controllers/CausalRecall.d.ts.map +0 -1
- package/dist/controllers/CausalRecall.js +0 -356
- package/dist/controllers/CausalRecall.js.map +0 -1
- package/dist/controllers/ContextSynthesizer.d.ts +0 -65
- package/dist/controllers/ContextSynthesizer.d.ts.map +0 -1
- package/dist/controllers/ContextSynthesizer.js +0 -208
- package/dist/controllers/ContextSynthesizer.js.map +0 -1
- package/dist/controllers/EmbeddingService.d.ts +0 -37
- package/dist/controllers/EmbeddingService.d.ts.map +0 -1
- package/dist/controllers/EmbeddingService.js +0 -136
- package/dist/controllers/EmbeddingService.js.map +0 -1
- package/dist/controllers/EnhancedEmbeddingService.d.ts +0 -50
- package/dist/controllers/EnhancedEmbeddingService.d.ts.map +0 -1
- package/dist/controllers/EnhancedEmbeddingService.js +0 -119
- package/dist/controllers/EnhancedEmbeddingService.js.map +0 -1
- package/dist/controllers/ExplainableRecall.d.ts +0 -163
- package/dist/controllers/ExplainableRecall.d.ts.map +0 -1
- package/dist/controllers/ExplainableRecall.js +0 -485
- package/dist/controllers/ExplainableRecall.js.map +0 -1
- package/dist/controllers/HNSWIndex.d.ts +0 -128
- package/dist/controllers/HNSWIndex.d.ts.map +0 -1
- package/dist/controllers/HNSWIndex.js +0 -361
- package/dist/controllers/HNSWIndex.js.map +0 -1
- package/dist/controllers/LearningSystem.d.ts +0 -195
- package/dist/controllers/LearningSystem.d.ts.map +0 -1
- package/dist/controllers/LearningSystem.js +0 -929
- package/dist/controllers/LearningSystem.js.map +0 -1
- package/dist/controllers/MMRDiversityRanker.d.ts +0 -50
- package/dist/controllers/MMRDiversityRanker.d.ts.map +0 -1
- package/dist/controllers/MMRDiversityRanker.js +0 -130
- package/dist/controllers/MMRDiversityRanker.js.map +0 -1
- package/dist/controllers/MetadataFilter.d.ts +0 -70
- package/dist/controllers/MetadataFilter.d.ts.map +0 -1
- package/dist/controllers/MetadataFilter.js +0 -243
- package/dist/controllers/MetadataFilter.js.map +0 -1
- package/dist/controllers/NightlyLearner.d.ts +0 -114
- package/dist/controllers/NightlyLearner.d.ts.map +0 -1
- package/dist/controllers/NightlyLearner.js +0 -394
- package/dist/controllers/NightlyLearner.js.map +0 -1
- package/dist/controllers/QUICClient.d.ts +0 -109
- package/dist/controllers/QUICClient.d.ts.map +0 -1
- package/dist/controllers/QUICClient.js +0 -299
- package/dist/controllers/QUICClient.js.map +0 -1
- package/dist/controllers/QUICServer.d.ts +0 -121
- package/dist/controllers/QUICServer.d.ts.map +0 -1
- package/dist/controllers/QUICServer.js +0 -383
- package/dist/controllers/QUICServer.js.map +0 -1
- package/dist/controllers/ReasoningBank.d.ts +0 -196
- package/dist/controllers/ReasoningBank.d.ts.map +0 -1
- package/dist/controllers/ReasoningBank.js +0 -494
- package/dist/controllers/ReasoningBank.js.map +0 -1
- package/dist/controllers/ReflexionMemory.d.ts +0 -125
- package/dist/controllers/ReflexionMemory.d.ts.map +0 -1
- package/dist/controllers/ReflexionMemory.js +0 -521
- package/dist/controllers/ReflexionMemory.js.map +0 -1
- package/dist/controllers/SkillLibrary.d.ts +0 -149
- package/dist/controllers/SkillLibrary.d.ts.map +0 -1
- package/dist/controllers/SkillLibrary.js +0 -547
- package/dist/controllers/SkillLibrary.js.map +0 -1
- package/dist/controllers/SyncCoordinator.d.ts +0 -120
- package/dist/controllers/SyncCoordinator.d.ts.map +0 -1
- package/dist/controllers/SyncCoordinator.js +0 -441
- package/dist/controllers/SyncCoordinator.js.map +0 -1
- package/dist/controllers/WASMVectorSearch.d.ts +0 -89
- package/dist/controllers/WASMVectorSearch.d.ts.map +0 -1
- package/dist/controllers/WASMVectorSearch.js +0 -234
- package/dist/controllers/WASMVectorSearch.js.map +0 -1
- package/dist/controllers/frontier-index.d.ts +0 -14
- package/dist/controllers/frontier-index.d.ts.map +0 -1
- package/dist/controllers/frontier-index.js +0 -10
- package/dist/controllers/frontier-index.js.map +0 -1
- package/dist/controllers/index.d.ts +0 -30
- package/dist/controllers/index.d.ts.map +0 -1
- package/dist/controllers/index.js +0 -18
- package/dist/controllers/index.js.map +0 -1
- package/dist/db-fallback.d.ts +0 -26
- package/dist/db-fallback.d.ts.map +0 -1
- package/dist/db-fallback.js +0 -264
- package/dist/db-fallback.js.map +0 -1
- package/dist/db-test.d.ts +0 -13
- package/dist/db-test.d.ts.map +0 -1
- package/dist/db-test.js +0 -55
- package/dist/db-test.js.map +0 -1
- package/dist/db-unified.d.ts +0 -76
- package/dist/db-unified.d.ts.map +0 -1
- package/dist/db-unified.js +0 -278
- package/dist/db-unified.js.map +0 -1
- package/dist/examples/quic-sync-example.d.ts +0 -9
- package/dist/examples/quic-sync-example.d.ts.map +0 -1
- package/dist/examples/quic-sync-example.js +0 -169
- package/dist/examples/quic-sync-example.js.map +0 -1
- package/dist/examples/wasm-vector-usage.d.ts +0 -12
- package/dist/examples/wasm-vector-usage.d.ts.map +0 -1
- package/dist/examples/wasm-vector-usage.js +0 -190
- package/dist/examples/wasm-vector-usage.js.map +0 -1
- package/dist/index.d.ts +0 -28
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -35
- package/dist/index.js.map +0 -1
- package/dist/malp/core/ccc.d.ts +0 -99
- package/dist/malp/core/ccc.d.ts.map +0 -1
- package/dist/malp/core/ccc.js +0 -181
- package/dist/malp/core/ccc.js.map +0 -1
- package/dist/malp/core/index.d.ts +0 -9
- package/dist/malp/core/index.d.ts.map +0 -1
- package/dist/malp/core/index.js +0 -9
- package/dist/malp/core/index.js.map +0 -1
- package/dist/malp/core/linalg.d.ts +0 -101
- package/dist/malp/core/linalg.d.ts.map +0 -1
- package/dist/malp/core/linalg.js +0 -278
- package/dist/malp/core/linalg.js.map +0 -1
- package/dist/malp/core/optimizer.d.ts +0 -68
- package/dist/malp/core/optimizer.d.ts.map +0 -1
- package/dist/malp/core/optimizer.js +0 -160
- package/dist/malp/core/optimizer.js.map +0 -1
- package/dist/malp/index.d.ts +0 -33
- package/dist/malp/index.d.ts.map +0 -1
- package/dist/malp/index.js +0 -37
- package/dist/malp/index.js.map +0 -1
- package/dist/malp/metrics/agreement.d.ts +0 -106
- package/dist/malp/metrics/agreement.d.ts.map +0 -1
- package/dist/malp/metrics/agreement.js +0 -199
- package/dist/malp/metrics/agreement.js.map +0 -1
- package/dist/malp/metrics/comparison.d.ts +0 -93
- package/dist/malp/metrics/comparison.d.ts.map +0 -1
- package/dist/malp/metrics/comparison.js +0 -256
- package/dist/malp/metrics/comparison.js.map +0 -1
- package/dist/malp/metrics/index.d.ts +0 -8
- package/dist/malp/metrics/index.d.ts.map +0 -1
- package/dist/malp/metrics/index.js +0 -8
- package/dist/malp/metrics/index.js.map +0 -1
- package/dist/malp/metrics/performance.d.ts +0 -61
- package/dist/malp/metrics/performance.d.ts.map +0 -1
- package/dist/malp/metrics/performance.js +0 -190
- package/dist/malp/metrics/performance.js.map +0 -1
- package/dist/malp/models/index.d.ts +0 -7
- package/dist/malp/models/index.d.ts.map +0 -1
- package/dist/malp/models/index.js +0 -7
- package/dist/malp/models/index.js.map +0 -1
- package/dist/malp/models/malp.d.ts +0 -116
- package/dist/malp/models/malp.d.ts.map +0 -1
- package/dist/malp/models/malp.js +0 -206
- package/dist/malp/models/malp.js.map +0 -1
- package/dist/malp/models/regressor.d.ts +0 -80
- package/dist/malp/models/regressor.d.ts.map +0 -1
- package/dist/malp/models/regressor.js +0 -229
- package/dist/malp/models/regressor.js.map +0 -1
- package/dist/malp/reasoningbank_validator.d.ts +0 -187
- package/dist/malp/reasoningbank_validator.d.ts.map +0 -1
- package/dist/malp/reasoningbank_validator.js +0 -246
- package/dist/malp/reasoningbank_validator.js.map +0 -1
- package/dist/malp/wasm_bindings.d.ts +0 -344
- package/dist/malp/wasm_bindings.d.ts.map +0 -1
- package/dist/malp/wasm_bindings.js +0 -9
- package/dist/malp/wasm_bindings.js.map +0 -1
- package/dist/mcp/agentdb-mcp-server.d.ts +0 -8
- package/dist/mcp/agentdb-mcp-server.d.ts.map +0 -1
- package/dist/mcp/agentdb-mcp-server.js +0 -2116
- package/dist/mcp/agentdb-mcp-server.js.map +0 -1
- package/dist/mcp/learning-tools-handlers.d.ts +0 -16
- package/dist/mcp/learning-tools-handlers.d.ts.map +0 -1
- package/dist/mcp/learning-tools-handlers.js +0 -105
- package/dist/mcp/learning-tools-handlers.js.map +0 -1
- package/dist/optimizations/BatchOperations.d.ts +0 -109
- package/dist/optimizations/BatchOperations.d.ts.map +0 -1
- package/dist/optimizations/BatchOperations.js +0 -407
- package/dist/optimizations/BatchOperations.js.map +0 -1
- package/dist/optimizations/QueryOptimizer.d.ts +0 -83
- package/dist/optimizations/QueryOptimizer.d.ts.map +0 -1
- package/dist/optimizations/QueryOptimizer.js +0 -228
- package/dist/optimizations/QueryOptimizer.js.map +0 -1
- package/dist/optimizations/ToolCache.d.ts +0 -137
- package/dist/optimizations/ToolCache.d.ts.map +0 -1
- package/dist/optimizations/ToolCache.js +0 -281
- package/dist/optimizations/ToolCache.js.map +0 -1
- package/dist/optimizations/index.d.ts +0 -10
- package/dist/optimizations/index.d.ts.map +0 -1
- package/dist/optimizations/index.js +0 -8
- package/dist/optimizations/index.js.map +0 -1
- package/dist/security/input-validation.d.ts +0 -109
- package/dist/security/input-validation.d.ts.map +0 -1
- package/dist/security/input-validation.js +0 -398
- package/dist/security/input-validation.js.map +0 -1
- package/dist/security/limits.d.ts +0 -150
- package/dist/security/limits.d.ts.map +0 -1
- package/dist/security/limits.js +0 -288
- package/dist/security/limits.js.map +0 -1
- package/dist/security/path-security.d.ts +0 -100
- package/dist/security/path-security.d.ts.map +0 -1
- package/dist/security/path-security.js +0 -337
- package/dist/security/path-security.js.map +0 -1
- package/dist/security/validation.d.ts +0 -95
- package/dist/security/validation.d.ts.map +0 -1
- package/dist/security/validation.js +0 -315
- package/dist/security/validation.js.map +0 -1
- package/dist/types/quic.d.ts +0 -518
- package/dist/types/quic.d.ts.map +0 -1
- package/dist/types/quic.js +0 -272
- package/dist/types/quic.js.map +0 -1
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentDB v2 Path Security Utilities
|
|
3
|
-
*
|
|
4
|
-
* Prevents path traversal attacks and ensures safe file operations:
|
|
5
|
-
* - Path validation and canonicalization
|
|
6
|
-
* - Symlink detection and handling
|
|
7
|
-
* - Safe file read/write operations
|
|
8
|
-
* - Temporary file cleanup
|
|
9
|
-
*/
|
|
10
|
-
import * as path from 'path';
|
|
11
|
-
import * as fs from 'fs';
|
|
12
|
-
import { SecurityError } from './limits.js';
|
|
13
|
-
/**
|
|
14
|
-
* Validate and sanitize file path
|
|
15
|
-
* Prevents path traversal attacks
|
|
16
|
-
*/
|
|
17
|
-
export function validatePath(filePath, baseDir) {
|
|
18
|
-
if (!filePath || typeof filePath !== 'string') {
|
|
19
|
-
throw new SecurityError('File path must be a non-empty string', 'INVALID_PATH');
|
|
20
|
-
}
|
|
21
|
-
if (!baseDir || typeof baseDir !== 'string') {
|
|
22
|
-
throw new SecurityError('Base directory must be a non-empty string', 'INVALID_BASE_DIR');
|
|
23
|
-
}
|
|
24
|
-
// Resolve to absolute paths
|
|
25
|
-
const resolvedBase = path.resolve(baseDir);
|
|
26
|
-
const resolvedPath = path.resolve(baseDir, filePath);
|
|
27
|
-
// Calculate relative path
|
|
28
|
-
const relativePath = path.relative(resolvedBase, resolvedPath);
|
|
29
|
-
// Check for path traversal attempts
|
|
30
|
-
if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
|
|
31
|
-
throw new SecurityError(`Path traversal attempt detected: ${filePath}`, 'PATH_TRAVERSAL');
|
|
32
|
-
}
|
|
33
|
-
// Additional security checks
|
|
34
|
-
if (filePath.includes('\x00')) {
|
|
35
|
-
throw new SecurityError('Path contains null bytes', 'NULL_BYTE_IN_PATH');
|
|
36
|
-
}
|
|
37
|
-
return resolvedPath;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Check if path is a symbolic link
|
|
41
|
-
*/
|
|
42
|
-
export async function isSymbolicLink(filePath) {
|
|
43
|
-
try {
|
|
44
|
-
const stats = await fs.promises.lstat(filePath);
|
|
45
|
-
return stats.isSymbolicLink();
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
// File doesn't exist
|
|
49
|
-
if (error.code === 'ENOENT') {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
throw error;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Secure file write operation
|
|
57
|
-
* Prevents writing to symbolic links and validates paths
|
|
58
|
-
*/
|
|
59
|
-
export async function secureWrite(filePath, data, baseDir, options) {
|
|
60
|
-
const safePath = validatePath(filePath, baseDir);
|
|
61
|
-
// Check if file exists and is a symlink
|
|
62
|
-
if (await isSymbolicLink(safePath)) {
|
|
63
|
-
throw new SecurityError('Cannot write to symbolic link', 'SYMLINK_WRITE_DENIED');
|
|
64
|
-
}
|
|
65
|
-
// Check if file exists and overwrite is not allowed
|
|
66
|
-
if (!options?.overwrite) {
|
|
67
|
-
try {
|
|
68
|
-
await fs.promises.access(safePath, fs.constants.F_OK);
|
|
69
|
-
throw new SecurityError('File already exists and overwrite is not allowed', 'FILE_EXISTS');
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
// File doesn't exist, which is what we want
|
|
73
|
-
if (error.code !== 'ENOENT') {
|
|
74
|
-
throw error;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// Ensure directory exists
|
|
79
|
-
const dir = path.dirname(safePath);
|
|
80
|
-
await fs.promises.mkdir(dir, { recursive: true });
|
|
81
|
-
// Write file with atomic operation (write to temp, then rename)
|
|
82
|
-
const tempPath = `${safePath}.tmp.${Date.now()}`;
|
|
83
|
-
try {
|
|
84
|
-
if (options?.encoding && typeof data === 'string') {
|
|
85
|
-
await fs.promises.writeFile(tempPath, data, { encoding: options.encoding });
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
await fs.promises.writeFile(tempPath, data);
|
|
89
|
-
}
|
|
90
|
-
// Atomic rename
|
|
91
|
-
await fs.promises.rename(tempPath, safePath);
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
// Clean up temp file on error
|
|
95
|
-
try {
|
|
96
|
-
await fs.promises.unlink(tempPath);
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
// Ignore cleanup errors
|
|
100
|
-
}
|
|
101
|
-
throw error;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Secure file read operation
|
|
106
|
-
* Validates paths and prevents symlink attacks
|
|
107
|
-
*/
|
|
108
|
-
export async function secureRead(filePath, baseDir, options) {
|
|
109
|
-
const safePath = validatePath(filePath, baseDir);
|
|
110
|
-
// Check for symlinks if not allowed
|
|
111
|
-
if (!options?.followSymlinks && await isSymbolicLink(safePath)) {
|
|
112
|
-
throw new SecurityError('Cannot read symbolic link', 'SYMLINK_READ_DENIED');
|
|
113
|
-
}
|
|
114
|
-
// Verify file exists and is readable
|
|
115
|
-
try {
|
|
116
|
-
await fs.promises.access(safePath, fs.constants.R_OK);
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
throw new SecurityError(`File not found or not readable: ${path.basename(filePath)}`, 'FILE_NOT_READABLE');
|
|
120
|
-
}
|
|
121
|
-
// Read file
|
|
122
|
-
if (options?.encoding) {
|
|
123
|
-
return await fs.promises.readFile(safePath, { encoding: options.encoding });
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
return await fs.promises.readFile(safePath);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Secure directory listing
|
|
131
|
-
* Prevents path traversal and filters out sensitive files
|
|
132
|
-
*/
|
|
133
|
-
export async function secureListDir(dirPath, baseDir, options) {
|
|
134
|
-
const safeDir = validatePath(dirPath, baseDir);
|
|
135
|
-
// Verify directory exists
|
|
136
|
-
try {
|
|
137
|
-
const stats = await fs.promises.stat(safeDir);
|
|
138
|
-
if (!stats.isDirectory()) {
|
|
139
|
-
throw new SecurityError('Path is not a directory', 'NOT_A_DIRECTORY');
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
if (error.code === 'ENOENT') {
|
|
144
|
-
throw new SecurityError('Directory not found', 'DIRECTORY_NOT_FOUND');
|
|
145
|
-
}
|
|
146
|
-
throw error;
|
|
147
|
-
}
|
|
148
|
-
const entries = await fs.promises.readdir(safeDir, { withFileTypes: true });
|
|
149
|
-
const files = [];
|
|
150
|
-
for (const entry of entries) {
|
|
151
|
-
// Skip dot files unless explicitly included
|
|
152
|
-
if (!options?.includeDotFiles && entry.name.startsWith('.')) {
|
|
153
|
-
continue;
|
|
154
|
-
}
|
|
155
|
-
const fullPath = path.join(dirPath, entry.name);
|
|
156
|
-
if (entry.isFile()) {
|
|
157
|
-
files.push(fullPath);
|
|
158
|
-
}
|
|
159
|
-
else if (entry.isDirectory() && options?.recursive) {
|
|
160
|
-
const subFiles = await secureListDir(fullPath, baseDir, options);
|
|
161
|
-
files.push(...subFiles);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
return files;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Secure file deletion
|
|
168
|
-
* Validates paths and prevents symlink attacks
|
|
169
|
-
*/
|
|
170
|
-
export async function secureDelete(filePath, baseDir, options) {
|
|
171
|
-
const safePath = validatePath(filePath, baseDir);
|
|
172
|
-
// Check if file is a symlink
|
|
173
|
-
if (await isSymbolicLink(safePath)) {
|
|
174
|
-
if (!options?.force) {
|
|
175
|
-
throw new SecurityError('Cannot delete symbolic link without force option', 'SYMLINK_DELETE_DENIED');
|
|
176
|
-
}
|
|
177
|
-
// Delete the symlink itself, not the target
|
|
178
|
-
await fs.promises.unlink(safePath);
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
// Delete file
|
|
182
|
-
try {
|
|
183
|
-
await fs.promises.unlink(safePath);
|
|
184
|
-
}
|
|
185
|
-
catch (error) {
|
|
186
|
-
if (error.code === 'ENOENT') {
|
|
187
|
-
// File doesn't exist, which is fine
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
throw error;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Temporary file manager with automatic cleanup
|
|
195
|
-
*/
|
|
196
|
-
export class TempFileManager {
|
|
197
|
-
tempFiles = new Set();
|
|
198
|
-
tempDir;
|
|
199
|
-
cleanupScheduled = false;
|
|
200
|
-
constructor(baseDir) {
|
|
201
|
-
this.tempDir = path.join(baseDir, '.tmp');
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Initialize temp directory
|
|
205
|
-
*/
|
|
206
|
-
async init() {
|
|
207
|
-
await fs.promises.mkdir(this.tempDir, { recursive: true });
|
|
208
|
-
// Schedule cleanup on process exit
|
|
209
|
-
if (!this.cleanupScheduled) {
|
|
210
|
-
process.on('exit', () => this.cleanupSync());
|
|
211
|
-
process.on('SIGINT', () => {
|
|
212
|
-
this.cleanupSync();
|
|
213
|
-
process.exit(0);
|
|
214
|
-
});
|
|
215
|
-
process.on('SIGTERM', () => {
|
|
216
|
-
this.cleanupSync();
|
|
217
|
-
process.exit(0);
|
|
218
|
-
});
|
|
219
|
-
this.cleanupScheduled = true;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Create a temporary file
|
|
224
|
-
*/
|
|
225
|
-
async createTempFile(prefix = 'agentdb') {
|
|
226
|
-
await this.init();
|
|
227
|
-
const filename = `${prefix}-${Date.now()}-${Math.random().toString(36).substring(7)}`;
|
|
228
|
-
const tempPath = path.join(this.tempDir, filename);
|
|
229
|
-
this.tempFiles.add(tempPath);
|
|
230
|
-
return tempPath;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Write to temporary file
|
|
234
|
-
*/
|
|
235
|
-
async writeTempFile(data, prefix = 'agentdb') {
|
|
236
|
-
const tempPath = await this.createTempFile(prefix);
|
|
237
|
-
await fs.promises.writeFile(tempPath, data);
|
|
238
|
-
return tempPath;
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Delete a specific temp file
|
|
242
|
-
*/
|
|
243
|
-
async deleteTempFile(tempPath) {
|
|
244
|
-
if (!this.tempFiles.has(tempPath)) {
|
|
245
|
-
throw new SecurityError('File is not managed by this temp file manager', 'NOT_TEMP_FILE');
|
|
246
|
-
}
|
|
247
|
-
try {
|
|
248
|
-
await fs.promises.unlink(tempPath);
|
|
249
|
-
this.tempFiles.delete(tempPath);
|
|
250
|
-
}
|
|
251
|
-
catch (error) {
|
|
252
|
-
if (error.code !== 'ENOENT') {
|
|
253
|
-
throw error;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Clean up all temporary files
|
|
259
|
-
*/
|
|
260
|
-
async cleanup() {
|
|
261
|
-
const deletePromises = Array.from(this.tempFiles).map(async (tempPath) => {
|
|
262
|
-
try {
|
|
263
|
-
await fs.promises.unlink(tempPath);
|
|
264
|
-
}
|
|
265
|
-
catch (error) {
|
|
266
|
-
// Ignore errors during cleanup
|
|
267
|
-
console.warn(`Failed to delete temp file: ${tempPath}`, error);
|
|
268
|
-
}
|
|
269
|
-
});
|
|
270
|
-
await Promise.all(deletePromises);
|
|
271
|
-
this.tempFiles.clear();
|
|
272
|
-
// Try to remove temp directory if empty
|
|
273
|
-
try {
|
|
274
|
-
await fs.promises.rmdir(this.tempDir);
|
|
275
|
-
}
|
|
276
|
-
catch {
|
|
277
|
-
// Directory not empty or doesn't exist, which is fine
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Synchronous cleanup for process exit
|
|
282
|
-
*/
|
|
283
|
-
cleanupSync() {
|
|
284
|
-
for (const tempPath of this.tempFiles) {
|
|
285
|
-
try {
|
|
286
|
-
fs.unlinkSync(tempPath);
|
|
287
|
-
}
|
|
288
|
-
catch {
|
|
289
|
-
// Ignore errors during cleanup
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
try {
|
|
293
|
-
fs.rmdirSync(this.tempDir);
|
|
294
|
-
}
|
|
295
|
-
catch {
|
|
296
|
-
// Directory not empty or doesn't exist
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Get list of managed temp files
|
|
301
|
-
*/
|
|
302
|
-
getTempFiles() {
|
|
303
|
-
return Array.from(this.tempFiles);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Ensure directory exists with safe permissions
|
|
308
|
-
*/
|
|
309
|
-
export async function ensureDir(dirPath, baseDir) {
|
|
310
|
-
const safeDir = validatePath(dirPath, baseDir);
|
|
311
|
-
await fs.promises.mkdir(safeDir, {
|
|
312
|
-
recursive: true,
|
|
313
|
-
mode: 0o755, // rwxr-xr-x
|
|
314
|
-
});
|
|
315
|
-
return safeDir;
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* Get safe file stats without following symlinks
|
|
319
|
-
*/
|
|
320
|
-
export async function safeStats(filePath, baseDir) {
|
|
321
|
-
const safePath = validatePath(filePath, baseDir);
|
|
322
|
-
return await fs.promises.lstat(safePath);
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Check if path exists within base directory
|
|
326
|
-
*/
|
|
327
|
-
export async function pathExists(filePath, baseDir) {
|
|
328
|
-
try {
|
|
329
|
-
const safePath = validatePath(filePath, baseDir);
|
|
330
|
-
await fs.promises.access(safePath, fs.constants.F_OK);
|
|
331
|
-
return true;
|
|
332
|
-
}
|
|
333
|
-
catch {
|
|
334
|
-
return false;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
//# sourceMappingURL=path-security.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"path-security.js","sourceRoot":"","sources":["../../src/security/path-security.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentDB v2 Security Validation
|
|
3
|
-
*
|
|
4
|
-
* Comprehensive input validation for RuVector integration:
|
|
5
|
-
* - Vector dimension and value validation (NaN/Infinity prevention)
|
|
6
|
-
* - ID sanitization (path traversal prevention)
|
|
7
|
-
* - Search options validation (bounds checking)
|
|
8
|
-
* - Cypher query parameter validation (injection prevention)
|
|
9
|
-
* - Metadata sanitization (sensitive data protection)
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Security limits for AgentDB v2
|
|
13
|
-
*/
|
|
14
|
-
export declare const SECURITY_LIMITS: {
|
|
15
|
-
readonly MAX_VECTORS: 10000000;
|
|
16
|
-
readonly MAX_DIMENSION: 4096;
|
|
17
|
-
readonly MAX_BATCH_SIZE: 10000;
|
|
18
|
-
readonly MAX_K: 10000;
|
|
19
|
-
readonly QUERY_TIMEOUT_MS: 30000;
|
|
20
|
-
readonly MAX_MEMORY_MB: 16384;
|
|
21
|
-
readonly MAX_ID_LENGTH: 256;
|
|
22
|
-
readonly MAX_METADATA_SIZE: 65536;
|
|
23
|
-
readonly MAX_LABEL_LENGTH: 128;
|
|
24
|
-
readonly MAX_PROPERTY_KEY_LENGTH: 128;
|
|
25
|
-
readonly MAX_CYPHER_PARAMS: 100;
|
|
26
|
-
readonly MIN_DIMENSION: 1;
|
|
27
|
-
readonly MIN_K: 1;
|
|
28
|
-
readonly MIN_THRESHOLD: 0;
|
|
29
|
-
readonly MAX_THRESHOLD: 1;
|
|
30
|
-
readonly MIN_EF_SEARCH: 1;
|
|
31
|
-
readonly MAX_EF_SEARCH: 1000;
|
|
32
|
-
readonly MIN_EF_CONSTRUCTION: 4;
|
|
33
|
-
readonly MAX_EF_CONSTRUCTION: 500;
|
|
34
|
-
readonly MAX_M: 64;
|
|
35
|
-
readonly MIN_M: 2;
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Validate vector embedding data
|
|
39
|
-
* Prevents NaN, Infinity, and dimension mismatches
|
|
40
|
-
*/
|
|
41
|
-
export declare function validateVector(embedding: Float32Array | number[], expectedDim: number, fieldName?: string): void;
|
|
42
|
-
/**
|
|
43
|
-
* Validate vector ID
|
|
44
|
-
* Prevents path traversal, excessive length, and malicious characters
|
|
45
|
-
*/
|
|
46
|
-
export declare function validateVectorId(id: string, fieldName?: string): string;
|
|
47
|
-
/**
|
|
48
|
-
* Validate search options
|
|
49
|
-
* Ensures k, threshold, and other parameters are within safe bounds
|
|
50
|
-
*/
|
|
51
|
-
export interface SearchOptions {
|
|
52
|
-
k?: number;
|
|
53
|
-
threshold?: number;
|
|
54
|
-
efSearch?: number;
|
|
55
|
-
filter?: Record<string, any>;
|
|
56
|
-
includeMetadata?: boolean;
|
|
57
|
-
includeVectors?: boolean;
|
|
58
|
-
}
|
|
59
|
-
export declare function validateSearchOptions(options: SearchOptions): SearchOptions;
|
|
60
|
-
/**
|
|
61
|
-
* Validate HNSW index parameters
|
|
62
|
-
*/
|
|
63
|
-
export interface HNSWParams {
|
|
64
|
-
M?: number;
|
|
65
|
-
efConstruction?: number;
|
|
66
|
-
efSearch?: number;
|
|
67
|
-
}
|
|
68
|
-
export declare function validateHNSWParams(params: HNSWParams): HNSWParams;
|
|
69
|
-
/**
|
|
70
|
-
* Sanitize metadata to prevent sensitive data exposure
|
|
71
|
-
* Removes fields that commonly contain secrets or PII
|
|
72
|
-
*/
|
|
73
|
-
export declare function sanitizeMetadata(metadata: Record<string, any>): Record<string, any>;
|
|
74
|
-
/**
|
|
75
|
-
* Validate Cypher query parameters for graph operations
|
|
76
|
-
* Prevents Cypher injection attacks
|
|
77
|
-
*/
|
|
78
|
-
export declare function validateCypherParams(params: Record<string, any>): Record<string, any>;
|
|
79
|
-
/**
|
|
80
|
-
* Validate graph node label
|
|
81
|
-
*/
|
|
82
|
-
export declare function validateLabel(label: string): string;
|
|
83
|
-
/**
|
|
84
|
-
* Validate batch size for bulk operations
|
|
85
|
-
*/
|
|
86
|
-
export declare function validateBatchSize(batchSize: number): number;
|
|
87
|
-
/**
|
|
88
|
-
* Validate vector count doesn't exceed limits
|
|
89
|
-
*/
|
|
90
|
-
export declare function validateVectorCount(count: number): void;
|
|
91
|
-
/**
|
|
92
|
-
* Safe logging that doesn't expose vectors or sensitive data
|
|
93
|
-
*/
|
|
94
|
-
export declare function safeLog(message: string, data?: any): void;
|
|
95
|
-
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/security/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;CAsBlB,CAAC;AAEX;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,YAAY,GAAG,MAAM,EAAE,EAClC,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAiB,GAC3B,IAAI,CAiDN;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,MAAM,CAsD7E;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAmG3E;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAkDjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAqDrB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+CrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmCnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkB3D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAQvD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CA0BzD"}
|