vesper-memory 0.3.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/.env.example +28 -0
- package/CHANGELOG.md +137 -0
- package/LICENSE +21 -0
- package/README.md +665 -0
- package/config/sqlite-schema.sql +413 -0
- package/dist/benchmark/index.d.ts +18 -0
- package/dist/benchmark/index.d.ts.map +1 -0
- package/dist/benchmark/index.js +19 -0
- package/dist/benchmark/index.js.map +1 -0
- package/dist/benchmark/metrics-collector.d.ts +90 -0
- package/dist/benchmark/metrics-collector.d.ts.map +1 -0
- package/dist/benchmark/metrics-collector.js +196 -0
- package/dist/benchmark/metrics-collector.js.map +1 -0
- package/dist/benchmark/report-generator.d.ts +35 -0
- package/dist/benchmark/report-generator.d.ts.map +1 -0
- package/dist/benchmark/report-generator.js +221 -0
- package/dist/benchmark/report-generator.js.map +1 -0
- package/dist/benchmark/runner.d.ts +30 -0
- package/dist/benchmark/runner.d.ts.map +1 -0
- package/dist/benchmark/runner.js +308 -0
- package/dist/benchmark/runner.js.map +1 -0
- package/dist/benchmark/scenarios/context-recall.d.ts +65 -0
- package/dist/benchmark/scenarios/context-recall.d.ts.map +1 -0
- package/dist/benchmark/scenarios/context-recall.js +180 -0
- package/dist/benchmark/scenarios/context-recall.js.map +1 -0
- package/dist/benchmark/scenarios/index.d.ts +34 -0
- package/dist/benchmark/scenarios/index.d.ts.map +1 -0
- package/dist/benchmark/scenarios/index.js +230 -0
- package/dist/benchmark/scenarios/index.js.map +1 -0
- package/dist/benchmark/statistics.d.ts +125 -0
- package/dist/benchmark/statistics.d.ts.map +1 -0
- package/dist/benchmark/statistics.js +520 -0
- package/dist/benchmark/statistics.js.map +1 -0
- package/dist/benchmark/types.d.ts +458 -0
- package/dist/benchmark/types.d.ts.map +1 -0
- package/dist/benchmark/types.js +297 -0
- package/dist/benchmark/types.js.map +1 -0
- package/dist/cli 2.js +583 -0
- package/dist/cli.d 2.ts +8 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts 2.map +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +583 -0
- package/dist/cli.js 2.map +1 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/rate-limits.d.ts +76 -0
- package/dist/config/rate-limits.d.ts.map +1 -0
- package/dist/config/rate-limits.js +161 -0
- package/dist/config/rate-limits.js.map +1 -0
- package/dist/config 2/rate-limits.d.ts +76 -0
- package/dist/config 2/rate-limits.d.ts.map +1 -0
- package/dist/config 2/rate-limits.js +161 -0
- package/dist/config 2/rate-limits.js.map +1 -0
- package/dist/consolidation/pipeline.d.ts +52 -0
- package/dist/consolidation/pipeline.d.ts.map +1 -0
- package/dist/consolidation/pipeline.js +193 -0
- package/dist/consolidation/pipeline.js.map +1 -0
- package/dist/consolidation 2/pipeline.d.ts +52 -0
- package/dist/consolidation 2/pipeline.d.ts.map +1 -0
- package/dist/consolidation 2/pipeline.js +193 -0
- package/dist/consolidation 2/pipeline.js.map +1 -0
- package/dist/embeddings/client.d.ts +95 -0
- package/dist/embeddings/client.d.ts.map +1 -0
- package/dist/embeddings/client.js +162 -0
- package/dist/embeddings/client.js.map +1 -0
- package/dist/embeddings 2/client.d.ts +94 -0
- package/dist/embeddings 2/client.d.ts.map +1 -0
- package/dist/embeddings 2/client.js +144 -0
- package/dist/embeddings 2/client.js.map +1 -0
- package/dist/memory-layers/semantic-memory.d.ts +76 -0
- package/dist/memory-layers/semantic-memory.d.ts.map +1 -0
- package/dist/memory-layers/semantic-memory.js +231 -0
- package/dist/memory-layers/semantic-memory.js.map +1 -0
- package/dist/memory-layers/skill-library.d.ts +25 -0
- package/dist/memory-layers/skill-library.d.ts.map +1 -0
- package/dist/memory-layers/skill-library.js +54 -0
- package/dist/memory-layers/skill-library.js.map +1 -0
- package/dist/memory-layers/working-memory.d.ts +57 -0
- package/dist/memory-layers/working-memory.d.ts.map +1 -0
- package/dist/memory-layers/working-memory.js +153 -0
- package/dist/memory-layers/working-memory.js.map +1 -0
- package/dist/memory-layers 2/semantic-memory.d.ts +33 -0
- package/dist/memory-layers 2/semantic-memory.d.ts.map +1 -0
- package/dist/memory-layers 2/semantic-memory.js +114 -0
- package/dist/memory-layers 2/semantic-memory.js.map +1 -0
- package/dist/memory-layers 2/skill-library.d.ts +25 -0
- package/dist/memory-layers 2/skill-library.d.ts.map +1 -0
- package/dist/memory-layers 2/skill-library.js +54 -0
- package/dist/memory-layers 2/skill-library.js.map +1 -0
- package/dist/memory-layers 2/working-memory.d.ts +57 -0
- package/dist/memory-layers 2/working-memory.d.ts.map +1 -0
- package/dist/memory-layers 2/working-memory.js +153 -0
- package/dist/memory-layers 2/working-memory.js.map +1 -0
- package/dist/middleware/auth.d.ts +287 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +610 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware 2/auth.d.ts +287 -0
- package/dist/middleware 2/auth.d.ts.map +1 -0
- package/dist/middleware 2/auth.js +610 -0
- package/dist/middleware 2/auth.js.map +1 -0
- package/dist/monitoring/health.d.ts +241 -0
- package/dist/monitoring/health.d.ts.map +1 -0
- package/dist/monitoring/health.js +649 -0
- package/dist/monitoring/health.js.map +1 -0
- package/dist/monitoring/metrics.d.ts +153 -0
- package/dist/monitoring/metrics.d.ts.map +1 -0
- package/dist/monitoring/metrics.js +349 -0
- package/dist/monitoring/metrics.js.map +1 -0
- package/dist/monitoring 2/health.d.ts +241 -0
- package/dist/monitoring 2/health.d.ts.map +1 -0
- package/dist/monitoring 2/health.js +649 -0
- package/dist/monitoring 2/health.js.map +1 -0
- package/dist/monitoring 2/metrics.d.ts +153 -0
- package/dist/monitoring 2/metrics.d.ts.map +1 -0
- package/dist/monitoring 2/metrics.js +349 -0
- package/dist/monitoring 2/metrics.js.map +1 -0
- package/dist/retrieval/hybrid-search.d.ts +186 -0
- package/dist/retrieval/hybrid-search.d.ts.map +1 -0
- package/dist/retrieval/hybrid-search.js +330 -0
- package/dist/retrieval/hybrid-search.js.map +1 -0
- package/dist/retrieval 2/hybrid-search.d.ts +186 -0
- package/dist/retrieval 2/hybrid-search.d.ts.map +1 -0
- package/dist/retrieval 2/hybrid-search.js +327 -0
- package/dist/retrieval 2/hybrid-search.js.map +1 -0
- package/dist/router/smart-router.d.ts +157 -0
- package/dist/router/smart-router.d.ts.map +1 -0
- package/dist/router/smart-router.js +524 -0
- package/dist/router/smart-router.js.map +1 -0
- package/dist/router 2/smart-router.d.ts +111 -0
- package/dist/router 2/smart-router.d.ts.map +1 -0
- package/dist/router 2/smart-router.js +383 -0
- package/dist/router 2/smart-router.js.map +1 -0
- package/dist/security/rate-limit-middleware.d.ts +119 -0
- package/dist/security/rate-limit-middleware.d.ts.map +1 -0
- package/dist/security/rate-limit-middleware.js +193 -0
- package/dist/security/rate-limit-middleware.js.map +1 -0
- package/dist/security 2/rate-limit-middleware.d.ts +119 -0
- package/dist/security 2/rate-limit-middleware.d.ts.map +1 -0
- package/dist/security 2/rate-limit-middleware.js +193 -0
- package/dist/security 2/rate-limit-middleware.js.map +1 -0
- package/dist/server 2.js +861 -0
- package/dist/server-wrapper 2.js +170 -0
- package/dist/server-wrapper.d 2.ts +12 -0
- package/dist/server-wrapper.d.ts +12 -0
- package/dist/server-wrapper.d.ts 2.map +1 -0
- package/dist/server-wrapper.d.ts.map +1 -0
- package/dist/server-wrapper.js +170 -0
- package/dist/server-wrapper.js 2.map +1 -0
- package/dist/server-wrapper.js.map +1 -0
- package/dist/server.d 2.ts +14 -0
- package/dist/server.d.ts +14 -0
- package/dist/server.d.ts 2.map +1 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +656 -0
- package/dist/server.js 2.map +1 -0
- package/dist/server.js.map +1 -0
- package/dist/synthesis/conflict-detector.d.ts +43 -0
- package/dist/synthesis/conflict-detector.d.ts.map +1 -0
- package/dist/synthesis/conflict-detector.js +125 -0
- package/dist/synthesis/conflict-detector.js.map +1 -0
- package/dist/synthesis 2/conflict-detector.d.ts +43 -0
- package/dist/synthesis 2/conflict-detector.d.ts.map +1 -0
- package/dist/synthesis 2/conflict-detector.js +125 -0
- package/dist/synthesis 2/conflict-detector.js.map +1 -0
- package/dist/utils/monitoring.d.ts +25 -0
- package/dist/utils/monitoring.d.ts.map +1 -0
- package/dist/utils/monitoring.js +41 -0
- package/dist/utils/monitoring.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +97 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +166 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/validation.d.ts +139 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +195 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils 2/monitoring.d.ts +25 -0
- package/dist/utils 2/monitoring.d.ts.map +1 -0
- package/dist/utils 2/monitoring.js +41 -0
- package/dist/utils 2/monitoring.js.map +1 -0
- package/dist/utils 2/rate-limiter.d.ts +97 -0
- package/dist/utils 2/rate-limiter.d.ts.map +1 -0
- package/dist/utils 2/rate-limiter.js +166 -0
- package/dist/utils 2/rate-limiter.js.map +1 -0
- package/dist/utils 2/validation.d.ts +139 -0
- package/dist/utils 2/validation.d.ts.map +1 -0
- package/dist/utils 2/validation.js +195 -0
- package/dist/utils 2/validation.js.map +1 -0
- package/docker-compose.yml +65 -0
- package/embedding-service/Dockerfile +29 -0
- package/embedding-service/README.md +68 -0
- package/embedding-service/requirements.txt +6 -0
- package/embedding-service/server.py +110 -0
- package/package.json +92 -0
- package/scripts/FRESH_INSTALL.md +280 -0
- package/scripts/README.md +101 -0
- package/scripts/ensure-infrastructure.sh +38 -0
- package/scripts/fresh-install-auto.sh +96 -0
- package/scripts/fresh-install.sh +167 -0
- package/scripts/health-check.sh +72 -0
- package/scripts/init-qdrant.ts +201 -0
- package/scripts/postinstall.js +94 -0
- package/scripts/run-accuracy-benchmark.ts +1237 -0
- package/scripts/run-real-benchmark.ts +581 -0
- package/scripts/test-mcp-server.sh +38 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limiting Configuration
|
|
3
|
+
*
|
|
4
|
+
* Defines tier-based rate limits for MCP tools.
|
|
5
|
+
* Configurable via environment variables.
|
|
6
|
+
*
|
|
7
|
+
* Security: Implements SEC-HIGH-001 from security audit
|
|
8
|
+
*/
|
|
9
|
+
import { RateLimitConfig } from "../utils/rate-limiter.js";
|
|
10
|
+
/**
|
|
11
|
+
* Available rate limit tiers
|
|
12
|
+
*
|
|
13
|
+
* Note: "unlimited" is the highest tier (not "enterprise")
|
|
14
|
+
* This matches the tier naming in auth.ts and postgres-auth-schema.sql
|
|
15
|
+
*/
|
|
16
|
+
export type TierName = "standard" | "premium" | "unlimited";
|
|
17
|
+
/**
|
|
18
|
+
* Tier-based rate limits for all MCP operations
|
|
19
|
+
*
|
|
20
|
+
* Limits are per-minute unless otherwise specified.
|
|
21
|
+
*
|
|
22
|
+
* | Tier | store_memory | retrieve_memory | list_recent | get_stats |
|
|
23
|
+
* |------|-------------|-----------------|-------------|-----------|
|
|
24
|
+
* | standard | 100/min | 300/min | 60/min | 30/min |
|
|
25
|
+
* | premium | 500/min | 1000/min | 200/min | 100/min |
|
|
26
|
+
* | unlimited | no limit | no limit | no limit | no limit |
|
|
27
|
+
*/
|
|
28
|
+
export declare const TIER_LIMITS: Record<TierName, Record<string, RateLimitConfig>>;
|
|
29
|
+
/**
|
|
30
|
+
* Legacy export for backwards compatibility
|
|
31
|
+
*/
|
|
32
|
+
export declare const RATE_LIMIT_TIERS: Record<TierName, Record<string, RateLimitConfig>>;
|
|
33
|
+
/**
|
|
34
|
+
* Get rate limits for a specific tier
|
|
35
|
+
*
|
|
36
|
+
* @param tier - The tier name
|
|
37
|
+
* @returns Rate limit configuration for all operations
|
|
38
|
+
*/
|
|
39
|
+
export declare function getTierLimits(tier: TierName): Record<string, RateLimitConfig>;
|
|
40
|
+
/**
|
|
41
|
+
* Configuration from environment variables
|
|
42
|
+
*/
|
|
43
|
+
export interface RateLimitEnvConfig {
|
|
44
|
+
/** Default tier for users without explicit tier assignment */
|
|
45
|
+
defaultTier: TierName;
|
|
46
|
+
/** Whether to allow requests when Redis is unavailable (default: false - fail closed) */
|
|
47
|
+
failOpen: boolean;
|
|
48
|
+
/** Custom limits that override tier defaults */
|
|
49
|
+
customLimits?: Record<string, number>;
|
|
50
|
+
/** Emergency fallback limit when Redis is down (only used with failOpen: false) */
|
|
51
|
+
emergencyLimit: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Read rate limit configuration from environment variables
|
|
55
|
+
*
|
|
56
|
+
* Environment variables:
|
|
57
|
+
* - RATE_LIMIT_DEFAULT_TIER: Default tier (standard|premium|unlimited)
|
|
58
|
+
* - RATE_LIMIT_FAIL_OPEN: Whether to allow requests when Redis is down (true|false)
|
|
59
|
+
* - RATE_LIMIT_STORE_MEMORY: Override store_memory limit
|
|
60
|
+
* - RATE_LIMIT_RETRIEVE_MEMORY: Override retrieve_memory limit
|
|
61
|
+
* - RATE_LIMIT_LIST_RECENT: Override list_recent limit
|
|
62
|
+
* - RATE_LIMIT_GET_STATS: Override get_stats limit
|
|
63
|
+
* - RATE_LIMIT_EMERGENCY: Emergency in-memory limit when Redis is down
|
|
64
|
+
*
|
|
65
|
+
* @returns Rate limit configuration
|
|
66
|
+
*/
|
|
67
|
+
export declare function getRateLimitConfigFromEnv(): RateLimitEnvConfig;
|
|
68
|
+
/**
|
|
69
|
+
* Build rate limit configuration by merging tier defaults with custom limits
|
|
70
|
+
*
|
|
71
|
+
* @param tier - Base tier
|
|
72
|
+
* @param customLimits - Custom limit overrides
|
|
73
|
+
* @returns Merged rate limit configuration
|
|
74
|
+
*/
|
|
75
|
+
export declare function buildRateLimitConfig(tier: TierName, customLimits?: Record<string, number>): Record<string, RateLimitConfig>;
|
|
76
|
+
//# sourceMappingURL=rate-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limits.d.ts","sourceRoot":"","sources":["../../src/config/rate-limits.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAyDzE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,mDAAc,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAE7E;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,WAAW,EAAE,QAAQ,CAAC;IAEtB,yFAAyF;IACzF,QAAQ,EAAE,OAAO,CAAC;IAElB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEtC,mFAAmF;IACnF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,IAAI,kBAAkB,CA0C9D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAoBjC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limiting Configuration
|
|
3
|
+
*
|
|
4
|
+
* Defines tier-based rate limits for MCP tools.
|
|
5
|
+
* Configurable via environment variables.
|
|
6
|
+
*
|
|
7
|
+
* Security: Implements SEC-HIGH-001 from security audit
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Tier-based rate limits for all MCP operations
|
|
11
|
+
*
|
|
12
|
+
* Limits are per-minute unless otherwise specified.
|
|
13
|
+
*
|
|
14
|
+
* | Tier | store_memory | retrieve_memory | list_recent | get_stats |
|
|
15
|
+
* |------|-------------|-----------------|-------------|-----------|
|
|
16
|
+
* | standard | 100/min | 300/min | 60/min | 30/min |
|
|
17
|
+
* | premium | 500/min | 1000/min | 200/min | 100/min |
|
|
18
|
+
* | unlimited | no limit | no limit | no limit | no limit |
|
|
19
|
+
*/
|
|
20
|
+
export const TIER_LIMITS = {
|
|
21
|
+
standard: {
|
|
22
|
+
store_memory: {
|
|
23
|
+
maxRequests: 100,
|
|
24
|
+
windowSeconds: 60,
|
|
25
|
+
},
|
|
26
|
+
retrieve_memory: {
|
|
27
|
+
maxRequests: 300,
|
|
28
|
+
windowSeconds: 60,
|
|
29
|
+
},
|
|
30
|
+
list_recent: {
|
|
31
|
+
maxRequests: 60,
|
|
32
|
+
windowSeconds: 60,
|
|
33
|
+
},
|
|
34
|
+
get_stats: {
|
|
35
|
+
maxRequests: 30,
|
|
36
|
+
windowSeconds: 60,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
premium: {
|
|
40
|
+
store_memory: {
|
|
41
|
+
maxRequests: 500,
|
|
42
|
+
windowSeconds: 60,
|
|
43
|
+
},
|
|
44
|
+
retrieve_memory: {
|
|
45
|
+
maxRequests: 1000,
|
|
46
|
+
windowSeconds: 60,
|
|
47
|
+
},
|
|
48
|
+
list_recent: {
|
|
49
|
+
maxRequests: 200,
|
|
50
|
+
windowSeconds: 60,
|
|
51
|
+
},
|
|
52
|
+
get_stats: {
|
|
53
|
+
maxRequests: 100,
|
|
54
|
+
windowSeconds: 60,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
unlimited: {
|
|
58
|
+
// Use very high values (effectively no limit) for unlimited tier
|
|
59
|
+
// We avoid actual infinity to prevent edge cases in Redis
|
|
60
|
+
store_memory: {
|
|
61
|
+
maxRequests: 1000000,
|
|
62
|
+
windowSeconds: 60,
|
|
63
|
+
},
|
|
64
|
+
retrieve_memory: {
|
|
65
|
+
maxRequests: 1000000,
|
|
66
|
+
windowSeconds: 60,
|
|
67
|
+
},
|
|
68
|
+
list_recent: {
|
|
69
|
+
maxRequests: 1000000,
|
|
70
|
+
windowSeconds: 60,
|
|
71
|
+
},
|
|
72
|
+
get_stats: {
|
|
73
|
+
maxRequests: 1000000,
|
|
74
|
+
windowSeconds: 60,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Legacy export for backwards compatibility
|
|
80
|
+
*/
|
|
81
|
+
export const RATE_LIMIT_TIERS = TIER_LIMITS;
|
|
82
|
+
/**
|
|
83
|
+
* Get rate limits for a specific tier
|
|
84
|
+
*
|
|
85
|
+
* @param tier - The tier name
|
|
86
|
+
* @returns Rate limit configuration for all operations
|
|
87
|
+
*/
|
|
88
|
+
export function getTierLimits(tier) {
|
|
89
|
+
return TIER_LIMITS[tier] || TIER_LIMITS.standard;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Read rate limit configuration from environment variables
|
|
93
|
+
*
|
|
94
|
+
* Environment variables:
|
|
95
|
+
* - RATE_LIMIT_DEFAULT_TIER: Default tier (standard|premium|unlimited)
|
|
96
|
+
* - RATE_LIMIT_FAIL_OPEN: Whether to allow requests when Redis is down (true|false)
|
|
97
|
+
* - RATE_LIMIT_STORE_MEMORY: Override store_memory limit
|
|
98
|
+
* - RATE_LIMIT_RETRIEVE_MEMORY: Override retrieve_memory limit
|
|
99
|
+
* - RATE_LIMIT_LIST_RECENT: Override list_recent limit
|
|
100
|
+
* - RATE_LIMIT_GET_STATS: Override get_stats limit
|
|
101
|
+
* - RATE_LIMIT_EMERGENCY: Emergency in-memory limit when Redis is down
|
|
102
|
+
*
|
|
103
|
+
* @returns Rate limit configuration
|
|
104
|
+
*/
|
|
105
|
+
export function getRateLimitConfigFromEnv() {
|
|
106
|
+
const defaultTier = (process.env.RATE_LIMIT_DEFAULT_TIER || "standard");
|
|
107
|
+
// Security: Default to fail closed (deny requests when Redis is unavailable)
|
|
108
|
+
const failOpenEnv = process.env.RATE_LIMIT_FAIL_OPEN;
|
|
109
|
+
const failOpen = failOpenEnv === "true";
|
|
110
|
+
// Parse custom limits from environment
|
|
111
|
+
const customLimits = {};
|
|
112
|
+
const storeMemoryLimit = process.env.RATE_LIMIT_STORE_MEMORY;
|
|
113
|
+
if (storeMemoryLimit) {
|
|
114
|
+
customLimits.store_memory = parseInt(storeMemoryLimit, 10);
|
|
115
|
+
}
|
|
116
|
+
const retrieveMemoryLimit = process.env.RATE_LIMIT_RETRIEVE_MEMORY;
|
|
117
|
+
if (retrieveMemoryLimit) {
|
|
118
|
+
customLimits.retrieve_memory = parseInt(retrieveMemoryLimit, 10);
|
|
119
|
+
}
|
|
120
|
+
const listRecentLimit = process.env.RATE_LIMIT_LIST_RECENT;
|
|
121
|
+
if (listRecentLimit) {
|
|
122
|
+
customLimits.list_recent = parseInt(listRecentLimit, 10);
|
|
123
|
+
}
|
|
124
|
+
const getStatsLimit = process.env.RATE_LIMIT_GET_STATS;
|
|
125
|
+
if (getStatsLimit) {
|
|
126
|
+
customLimits.get_stats = parseInt(getStatsLimit, 10);
|
|
127
|
+
}
|
|
128
|
+
// Emergency limit for in-memory fallback (very conservative)
|
|
129
|
+
const emergencyLimit = parseInt(process.env.RATE_LIMIT_EMERGENCY || "10", 10);
|
|
130
|
+
return {
|
|
131
|
+
defaultTier,
|
|
132
|
+
failOpen,
|
|
133
|
+
customLimits: Object.keys(customLimits).length > 0 ? customLimits : undefined,
|
|
134
|
+
emergencyLimit,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Build rate limit configuration by merging tier defaults with custom limits
|
|
139
|
+
*
|
|
140
|
+
* @param tier - Base tier
|
|
141
|
+
* @param customLimits - Custom limit overrides
|
|
142
|
+
* @returns Merged rate limit configuration
|
|
143
|
+
*/
|
|
144
|
+
export function buildRateLimitConfig(tier, customLimits) {
|
|
145
|
+
const tierLimits = getTierLimits(tier);
|
|
146
|
+
if (!customLimits) {
|
|
147
|
+
return tierLimits;
|
|
148
|
+
}
|
|
149
|
+
// Merge custom limits with tier defaults
|
|
150
|
+
const merged = { ...tierLimits };
|
|
151
|
+
for (const [operation, maxRequests] of Object.entries(customLimits)) {
|
|
152
|
+
if (merged[operation]) {
|
|
153
|
+
merged[operation] = {
|
|
154
|
+
...merged[operation],
|
|
155
|
+
maxRequests,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return merged;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=rate-limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limits.js","sourceRoot":"","sources":["../../src/config/rate-limits.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limiting Configuration
|
|
3
|
+
*
|
|
4
|
+
* Defines tier-based rate limits for MCP tools.
|
|
5
|
+
* Configurable via environment variables.
|
|
6
|
+
*
|
|
7
|
+
* Security: Implements SEC-HIGH-001 from security audit
|
|
8
|
+
*/
|
|
9
|
+
import { RateLimitConfig } from "../utils/rate-limiter.js";
|
|
10
|
+
/**
|
|
11
|
+
* Available rate limit tiers
|
|
12
|
+
*
|
|
13
|
+
* Note: "unlimited" is the highest tier (not "enterprise")
|
|
14
|
+
* This matches the tier naming in auth.ts and postgres-auth-schema.sql
|
|
15
|
+
*/
|
|
16
|
+
export type TierName = "standard" | "premium" | "unlimited";
|
|
17
|
+
/**
|
|
18
|
+
* Tier-based rate limits for all MCP operations
|
|
19
|
+
*
|
|
20
|
+
* Limits are per-minute unless otherwise specified.
|
|
21
|
+
*
|
|
22
|
+
* | Tier | store_memory | retrieve_memory | list_recent | get_stats |
|
|
23
|
+
* |------|-------------|-----------------|-------------|-----------|
|
|
24
|
+
* | standard | 100/min | 300/min | 60/min | 30/min |
|
|
25
|
+
* | premium | 500/min | 1000/min | 200/min | 100/min |
|
|
26
|
+
* | unlimited | no limit | no limit | no limit | no limit |
|
|
27
|
+
*/
|
|
28
|
+
export declare const TIER_LIMITS: Record<TierName, Record<string, RateLimitConfig>>;
|
|
29
|
+
/**
|
|
30
|
+
* Legacy export for backwards compatibility
|
|
31
|
+
*/
|
|
32
|
+
export declare const RATE_LIMIT_TIERS: Record<TierName, Record<string, RateLimitConfig>>;
|
|
33
|
+
/**
|
|
34
|
+
* Get rate limits for a specific tier
|
|
35
|
+
*
|
|
36
|
+
* @param tier - The tier name
|
|
37
|
+
* @returns Rate limit configuration for all operations
|
|
38
|
+
*/
|
|
39
|
+
export declare function getTierLimits(tier: TierName): Record<string, RateLimitConfig>;
|
|
40
|
+
/**
|
|
41
|
+
* Configuration from environment variables
|
|
42
|
+
*/
|
|
43
|
+
export interface RateLimitEnvConfig {
|
|
44
|
+
/** Default tier for users without explicit tier assignment */
|
|
45
|
+
defaultTier: TierName;
|
|
46
|
+
/** Whether to allow requests when Redis is unavailable (default: false - fail closed) */
|
|
47
|
+
failOpen: boolean;
|
|
48
|
+
/** Custom limits that override tier defaults */
|
|
49
|
+
customLimits?: Record<string, number>;
|
|
50
|
+
/** Emergency fallback limit when Redis is down (only used with failOpen: false) */
|
|
51
|
+
emergencyLimit: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Read rate limit configuration from environment variables
|
|
55
|
+
*
|
|
56
|
+
* Environment variables:
|
|
57
|
+
* - RATE_LIMIT_DEFAULT_TIER: Default tier (standard|premium|unlimited)
|
|
58
|
+
* - RATE_LIMIT_FAIL_OPEN: Whether to allow requests when Redis is down (true|false)
|
|
59
|
+
* - RATE_LIMIT_STORE_MEMORY: Override store_memory limit
|
|
60
|
+
* - RATE_LIMIT_RETRIEVE_MEMORY: Override retrieve_memory limit
|
|
61
|
+
* - RATE_LIMIT_LIST_RECENT: Override list_recent limit
|
|
62
|
+
* - RATE_LIMIT_GET_STATS: Override get_stats limit
|
|
63
|
+
* - RATE_LIMIT_EMERGENCY: Emergency in-memory limit when Redis is down
|
|
64
|
+
*
|
|
65
|
+
* @returns Rate limit configuration
|
|
66
|
+
*/
|
|
67
|
+
export declare function getRateLimitConfigFromEnv(): RateLimitEnvConfig;
|
|
68
|
+
/**
|
|
69
|
+
* Build rate limit configuration by merging tier defaults with custom limits
|
|
70
|
+
*
|
|
71
|
+
* @param tier - Base tier
|
|
72
|
+
* @param customLimits - Custom limit overrides
|
|
73
|
+
* @returns Merged rate limit configuration
|
|
74
|
+
*/
|
|
75
|
+
export declare function buildRateLimitConfig(tier: TierName, customLimits?: Record<string, number>): Record<string, RateLimitConfig>;
|
|
76
|
+
//# sourceMappingURL=rate-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limits.d.ts","sourceRoot":"","sources":["../../src/config/rate-limits.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAyDzE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,mDAAc,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAE7E;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,WAAW,EAAE,QAAQ,CAAC;IAEtB,yFAAyF;IACzF,QAAQ,EAAE,OAAO,CAAC;IAElB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEtC,mFAAmF;IACnF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,IAAI,kBAAkB,CA0C9D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAoBjC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limiting Configuration
|
|
3
|
+
*
|
|
4
|
+
* Defines tier-based rate limits for MCP tools.
|
|
5
|
+
* Configurable via environment variables.
|
|
6
|
+
*
|
|
7
|
+
* Security: Implements SEC-HIGH-001 from security audit
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Tier-based rate limits for all MCP operations
|
|
11
|
+
*
|
|
12
|
+
* Limits are per-minute unless otherwise specified.
|
|
13
|
+
*
|
|
14
|
+
* | Tier | store_memory | retrieve_memory | list_recent | get_stats |
|
|
15
|
+
* |------|-------------|-----------------|-------------|-----------|
|
|
16
|
+
* | standard | 100/min | 300/min | 60/min | 30/min |
|
|
17
|
+
* | premium | 500/min | 1000/min | 200/min | 100/min |
|
|
18
|
+
* | unlimited | no limit | no limit | no limit | no limit |
|
|
19
|
+
*/
|
|
20
|
+
export const TIER_LIMITS = {
|
|
21
|
+
standard: {
|
|
22
|
+
store_memory: {
|
|
23
|
+
maxRequests: 100,
|
|
24
|
+
windowSeconds: 60,
|
|
25
|
+
},
|
|
26
|
+
retrieve_memory: {
|
|
27
|
+
maxRequests: 300,
|
|
28
|
+
windowSeconds: 60,
|
|
29
|
+
},
|
|
30
|
+
list_recent: {
|
|
31
|
+
maxRequests: 60,
|
|
32
|
+
windowSeconds: 60,
|
|
33
|
+
},
|
|
34
|
+
get_stats: {
|
|
35
|
+
maxRequests: 30,
|
|
36
|
+
windowSeconds: 60,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
premium: {
|
|
40
|
+
store_memory: {
|
|
41
|
+
maxRequests: 500,
|
|
42
|
+
windowSeconds: 60,
|
|
43
|
+
},
|
|
44
|
+
retrieve_memory: {
|
|
45
|
+
maxRequests: 1000,
|
|
46
|
+
windowSeconds: 60,
|
|
47
|
+
},
|
|
48
|
+
list_recent: {
|
|
49
|
+
maxRequests: 200,
|
|
50
|
+
windowSeconds: 60,
|
|
51
|
+
},
|
|
52
|
+
get_stats: {
|
|
53
|
+
maxRequests: 100,
|
|
54
|
+
windowSeconds: 60,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
unlimited: {
|
|
58
|
+
// Use very high values (effectively no limit) for unlimited tier
|
|
59
|
+
// We avoid actual infinity to prevent edge cases in Redis
|
|
60
|
+
store_memory: {
|
|
61
|
+
maxRequests: 1000000,
|
|
62
|
+
windowSeconds: 60,
|
|
63
|
+
},
|
|
64
|
+
retrieve_memory: {
|
|
65
|
+
maxRequests: 1000000,
|
|
66
|
+
windowSeconds: 60,
|
|
67
|
+
},
|
|
68
|
+
list_recent: {
|
|
69
|
+
maxRequests: 1000000,
|
|
70
|
+
windowSeconds: 60,
|
|
71
|
+
},
|
|
72
|
+
get_stats: {
|
|
73
|
+
maxRequests: 1000000,
|
|
74
|
+
windowSeconds: 60,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Legacy export for backwards compatibility
|
|
80
|
+
*/
|
|
81
|
+
export const RATE_LIMIT_TIERS = TIER_LIMITS;
|
|
82
|
+
/**
|
|
83
|
+
* Get rate limits for a specific tier
|
|
84
|
+
*
|
|
85
|
+
* @param tier - The tier name
|
|
86
|
+
* @returns Rate limit configuration for all operations
|
|
87
|
+
*/
|
|
88
|
+
export function getTierLimits(tier) {
|
|
89
|
+
return TIER_LIMITS[tier] || TIER_LIMITS.standard;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Read rate limit configuration from environment variables
|
|
93
|
+
*
|
|
94
|
+
* Environment variables:
|
|
95
|
+
* - RATE_LIMIT_DEFAULT_TIER: Default tier (standard|premium|unlimited)
|
|
96
|
+
* - RATE_LIMIT_FAIL_OPEN: Whether to allow requests when Redis is down (true|false)
|
|
97
|
+
* - RATE_LIMIT_STORE_MEMORY: Override store_memory limit
|
|
98
|
+
* - RATE_LIMIT_RETRIEVE_MEMORY: Override retrieve_memory limit
|
|
99
|
+
* - RATE_LIMIT_LIST_RECENT: Override list_recent limit
|
|
100
|
+
* - RATE_LIMIT_GET_STATS: Override get_stats limit
|
|
101
|
+
* - RATE_LIMIT_EMERGENCY: Emergency in-memory limit when Redis is down
|
|
102
|
+
*
|
|
103
|
+
* @returns Rate limit configuration
|
|
104
|
+
*/
|
|
105
|
+
export function getRateLimitConfigFromEnv() {
|
|
106
|
+
const defaultTier = (process.env.RATE_LIMIT_DEFAULT_TIER || "standard");
|
|
107
|
+
// Security: Default to fail closed (deny requests when Redis is unavailable)
|
|
108
|
+
const failOpenEnv = process.env.RATE_LIMIT_FAIL_OPEN;
|
|
109
|
+
const failOpen = failOpenEnv === "true";
|
|
110
|
+
// Parse custom limits from environment
|
|
111
|
+
const customLimits = {};
|
|
112
|
+
const storeMemoryLimit = process.env.RATE_LIMIT_STORE_MEMORY;
|
|
113
|
+
if (storeMemoryLimit) {
|
|
114
|
+
customLimits.store_memory = parseInt(storeMemoryLimit, 10);
|
|
115
|
+
}
|
|
116
|
+
const retrieveMemoryLimit = process.env.RATE_LIMIT_RETRIEVE_MEMORY;
|
|
117
|
+
if (retrieveMemoryLimit) {
|
|
118
|
+
customLimits.retrieve_memory = parseInt(retrieveMemoryLimit, 10);
|
|
119
|
+
}
|
|
120
|
+
const listRecentLimit = process.env.RATE_LIMIT_LIST_RECENT;
|
|
121
|
+
if (listRecentLimit) {
|
|
122
|
+
customLimits.list_recent = parseInt(listRecentLimit, 10);
|
|
123
|
+
}
|
|
124
|
+
const getStatsLimit = process.env.RATE_LIMIT_GET_STATS;
|
|
125
|
+
if (getStatsLimit) {
|
|
126
|
+
customLimits.get_stats = parseInt(getStatsLimit, 10);
|
|
127
|
+
}
|
|
128
|
+
// Emergency limit for in-memory fallback (very conservative)
|
|
129
|
+
const emergencyLimit = parseInt(process.env.RATE_LIMIT_EMERGENCY || "10", 10);
|
|
130
|
+
return {
|
|
131
|
+
defaultTier,
|
|
132
|
+
failOpen,
|
|
133
|
+
customLimits: Object.keys(customLimits).length > 0 ? customLimits : undefined,
|
|
134
|
+
emergencyLimit,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Build rate limit configuration by merging tier defaults with custom limits
|
|
139
|
+
*
|
|
140
|
+
* @param tier - Base tier
|
|
141
|
+
* @param customLimits - Custom limit overrides
|
|
142
|
+
* @returns Merged rate limit configuration
|
|
143
|
+
*/
|
|
144
|
+
export function buildRateLimitConfig(tier, customLimits) {
|
|
145
|
+
const tierLimits = getTierLimits(tier);
|
|
146
|
+
if (!customLimits) {
|
|
147
|
+
return tierLimits;
|
|
148
|
+
}
|
|
149
|
+
// Merge custom limits with tier defaults
|
|
150
|
+
const merged = { ...tierLimits };
|
|
151
|
+
for (const [operation, maxRequests] of Object.entries(customLimits)) {
|
|
152
|
+
if (merged[operation]) {
|
|
153
|
+
merged[operation] = {
|
|
154
|
+
...merged[operation],
|
|
155
|
+
maxRequests,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return merged;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=rate-limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limits.js","sourceRoot":"","sources":["../../src/config/rate-limits.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consolidation Pipeline - v3.0 Implementation
|
|
3
|
+
*
|
|
4
|
+
* Nightly process: working → semantic memory transformation.
|
|
5
|
+
* Runs at 3 AM, extracts knowledge, applies decay, detects conflicts.
|
|
6
|
+
*/
|
|
7
|
+
import { WorkingMemoryLayer } from '../memory-layers/working-memory.js';
|
|
8
|
+
import { SemanticMemoryLayer } from '../memory-layers/semantic-memory.js';
|
|
9
|
+
import { SkillLibrary } from '../memory-layers/skill-library.js';
|
|
10
|
+
import Database from 'better-sqlite3';
|
|
11
|
+
export interface ConsolidationStats {
|
|
12
|
+
memoriesProcessed: number;
|
|
13
|
+
entitiesExtracted: number;
|
|
14
|
+
relationshipsCreated: number;
|
|
15
|
+
conflictsDetected: number;
|
|
16
|
+
memoriesPruned: number;
|
|
17
|
+
skillsExtracted: number;
|
|
18
|
+
duration: number;
|
|
19
|
+
}
|
|
20
|
+
export declare class ConsolidationPipeline {
|
|
21
|
+
private workingMemory;
|
|
22
|
+
private semanticMemory;
|
|
23
|
+
private skillLibrary;
|
|
24
|
+
private db;
|
|
25
|
+
constructor(workingMemory: WorkingMemoryLayer, semanticMemory: SemanticMemoryLayer, skillLibrary: SkillLibrary, db: Database.Database);
|
|
26
|
+
/**
|
|
27
|
+
* Run full consolidation cycle
|
|
28
|
+
*/
|
|
29
|
+
consolidate(): Promise<ConsolidationStats>;
|
|
30
|
+
/**
|
|
31
|
+
* Extract entities and relationships from memory
|
|
32
|
+
* Simple keyword-based extraction (will enhance with LLM later)
|
|
33
|
+
*/
|
|
34
|
+
private extractKnowledge;
|
|
35
|
+
/**
|
|
36
|
+
* Detect simple conflicts (temporal impossibilities, contradictions)
|
|
37
|
+
*/
|
|
38
|
+
private detectConflicts;
|
|
39
|
+
/**
|
|
40
|
+
* Prune low-value memories
|
|
41
|
+
*/
|
|
42
|
+
private pruneMemories;
|
|
43
|
+
/**
|
|
44
|
+
* Extract skills from positive interactions
|
|
45
|
+
*/
|
|
46
|
+
private extractSkills;
|
|
47
|
+
/**
|
|
48
|
+
* Create backup for rollback capability
|
|
49
|
+
*/
|
|
50
|
+
private createBackup;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/consolidation/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,EAAE,CAAoB;gBAG5B,aAAa,EAAE,kBAAkB,EACjC,cAAc,EAAE,mBAAmB,EACnC,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAQvB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA8DhD;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA+CvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,OAAO,CAAC,YAAY;CAcrB"}
|