@dcyfr/ai 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +27 -1
  3. package/README.md +359 -23
  4. package/bin/cli.js +12 -0
  5. package/bin/tui/config-wizard.js +107 -0
  6. package/bin/tui/validation-dashboard.js +123 -0
  7. package/bin/tui.js +259 -0
  8. package/dist/ai/agents/agent-loader.d.ts.map +1 -1
  9. package/dist/ai/agents/agent-loader.js +4 -2
  10. package/dist/ai/agents/agent-loader.js.map +1 -1
  11. package/dist/ai/index.d.ts +2 -0
  12. package/dist/ai/index.d.ts.map +1 -1
  13. package/dist/ai/index.js +2 -0
  14. package/dist/ai/index.js.map +1 -1
  15. package/dist/ai/mcp/index.d.ts +14 -2
  16. package/dist/ai/mcp/index.d.ts.map +1 -1
  17. package/dist/ai/mcp/index.js +11 -1
  18. package/dist/ai/mcp/index.js.map +1 -1
  19. package/dist/ai/mcp/servers/analytics/index.d.ts +19 -0
  20. package/dist/ai/mcp/servers/analytics/index.d.ts.map +1 -0
  21. package/dist/ai/mcp/servers/analytics/index.js +556 -0
  22. package/dist/ai/mcp/servers/analytics/index.js.map +1 -0
  23. package/dist/ai/mcp/servers/content-manager/content-provider.d.ts +61 -0
  24. package/dist/ai/mcp/servers/content-manager/content-provider.d.ts.map +1 -0
  25. package/dist/ai/mcp/servers/content-manager/content-provider.js +8 -0
  26. package/dist/ai/mcp/servers/content-manager/content-provider.js.map +1 -0
  27. package/dist/ai/mcp/servers/content-manager/index.d.ts +19 -0
  28. package/dist/ai/mcp/servers/content-manager/index.d.ts.map +1 -0
  29. package/dist/ai/mcp/servers/content-manager/index.js +236 -0
  30. package/dist/ai/mcp/servers/content-manager/index.js.map +1 -0
  31. package/dist/ai/mcp/servers/design-tokens/index.d.ts +19 -0
  32. package/dist/ai/mcp/servers/design-tokens/index.d.ts.map +1 -0
  33. package/dist/ai/mcp/servers/design-tokens/index.js +422 -0
  34. package/dist/ai/mcp/servers/design-tokens/index.js.map +1 -0
  35. package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts +59 -0
  36. package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts.map +1 -0
  37. package/dist/ai/mcp/servers/design-tokens/token-provider.js +8 -0
  38. package/dist/ai/mcp/servers/design-tokens/token-provider.js.map +1 -0
  39. package/dist/ai/mcp/servers/promptintel/index.d.ts +19 -0
  40. package/dist/ai/mcp/servers/promptintel/index.d.ts.map +1 -0
  41. package/dist/ai/mcp/servers/promptintel/index.js +323 -0
  42. package/dist/ai/mcp/servers/promptintel/index.js.map +1 -0
  43. package/dist/ai/mcp/servers/shared/cache.d.ts +62 -0
  44. package/dist/ai/mcp/servers/shared/cache.d.ts.map +1 -0
  45. package/dist/ai/mcp/servers/shared/cache.js +117 -0
  46. package/dist/ai/mcp/servers/shared/cache.js.map +1 -0
  47. package/dist/ai/mcp/servers/shared/promptintel-client.d.ts +53 -0
  48. package/dist/ai/mcp/servers/shared/promptintel-client.d.ts.map +1 -0
  49. package/dist/ai/mcp/servers/shared/promptintel-client.js +185 -0
  50. package/dist/ai/mcp/servers/shared/promptintel-client.js.map +1 -0
  51. package/dist/ai/mcp/servers/shared/promptintel-types.d.ts +85 -0
  52. package/dist/ai/mcp/servers/shared/promptintel-types.d.ts.map +1 -0
  53. package/dist/ai/mcp/servers/shared/promptintel-types.js +7 -0
  54. package/dist/ai/mcp/servers/shared/promptintel-types.js.map +1 -0
  55. package/dist/ai/mcp/servers/shared/rate-limiter.d.ts +54 -0
  56. package/dist/ai/mcp/servers/shared/rate-limiter.d.ts.map +1 -0
  57. package/dist/ai/mcp/servers/shared/rate-limiter.js +122 -0
  58. package/dist/ai/mcp/servers/shared/rate-limiter.js.map +1 -0
  59. package/dist/ai/mcp/servers/shared/redis-client.d.ts +54 -0
  60. package/dist/ai/mcp/servers/shared/redis-client.d.ts.map +1 -0
  61. package/dist/ai/mcp/servers/shared/redis-client.js +225 -0
  62. package/dist/ai/mcp/servers/shared/redis-client.js.map +1 -0
  63. package/dist/ai/mcp/servers/shared/types.d.ts +292 -0
  64. package/dist/ai/mcp/servers/shared/types.d.ts.map +1 -0
  65. package/dist/ai/mcp/servers/shared/types.js +6 -0
  66. package/dist/ai/mcp/servers/shared/types.js.map +1 -0
  67. package/dist/ai/mcp/servers/shared/utils.d.ts +41 -0
  68. package/dist/ai/mcp/servers/shared/utils.d.ts.map +1 -0
  69. package/dist/ai/mcp/servers/shared/utils.js +183 -0
  70. package/dist/ai/mcp/servers/shared/utils.js.map +1 -0
  71. package/dist/ai/memory/config.d.ts +87 -0
  72. package/dist/ai/memory/config.d.ts.map +1 -0
  73. package/dist/ai/memory/config.js +154 -0
  74. package/dist/ai/memory/config.js.map +1 -0
  75. package/dist/ai/memory/dcyfr-memory.d.ts +63 -0
  76. package/dist/ai/memory/dcyfr-memory.d.ts.map +1 -0
  77. package/dist/ai/memory/dcyfr-memory.js +270 -0
  78. package/dist/ai/memory/dcyfr-memory.js.map +1 -0
  79. package/dist/ai/memory/index.d.ts +15 -0
  80. package/dist/ai/memory/index.d.ts.map +1 -0
  81. package/dist/ai/memory/index.js +15 -0
  82. package/dist/ai/memory/index.js.map +1 -0
  83. package/dist/ai/memory/mem0-client.d.ts +108 -0
  84. package/dist/ai/memory/mem0-client.d.ts.map +1 -0
  85. package/dist/ai/memory/mem0-client.js +166 -0
  86. package/dist/ai/memory/mem0-client.js.map +1 -0
  87. package/dist/ai/memory/types.d.ts +175 -0
  88. package/dist/ai/memory/types.d.ts.map +1 -0
  89. package/dist/ai/memory/types.js +10 -0
  90. package/dist/ai/memory/types.js.map +1 -0
  91. package/package.json +46 -8
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Shared utilities for MCP servers
3
+ * Common functions used across Analytics, Design Token, and Content Manager MCPs
4
+ */
5
+ // ============================================================================
6
+ // Error Handling
7
+ // ============================================================================
8
+ export class MCPToolError extends Error {
9
+ code;
10
+ details;
11
+ constructor(code, message, details) {
12
+ super(message);
13
+ this.code = code;
14
+ this.details = details;
15
+ this.name = "MCPToolError";
16
+ }
17
+ toJSON() {
18
+ return {
19
+ code: this.code,
20
+ message: this.message,
21
+ details: this.details,
22
+ };
23
+ }
24
+ }
25
+ export function handleToolError(error) {
26
+ if (error instanceof MCPToolError) {
27
+ return `Error [${error.code}]: ${error.message}`;
28
+ }
29
+ if (error instanceof Error) {
30
+ return `Error: ${error.message}`;
31
+ }
32
+ return `Unknown error: ${String(error)}`;
33
+ }
34
+ // ============================================================================
35
+ // Environment Helpers
36
+ // ============================================================================
37
+ export function isProduction() {
38
+ return (process.env.NODE_ENV === "production" ||
39
+ process.env.VERCEL_ENV === "production");
40
+ }
41
+ export function isDevelopment() {
42
+ return (process.env.NODE_ENV === "development" ||
43
+ process.env.VERCEL_ENV === "development");
44
+ }
45
+ export function getEnvironment() {
46
+ if (process.env.VERCEL_ENV) {
47
+ return process.env.VERCEL_ENV;
48
+ }
49
+ if (process.env.NODE_ENV === "production")
50
+ return "production";
51
+ if (process.env.NODE_ENV === "development")
52
+ return "development";
53
+ return "development";
54
+ }
55
+ // ============================================================================
56
+ // Data Filtering
57
+ // ============================================================================
58
+ /**
59
+ * Filters out test/demo data in production environments
60
+ */
61
+ export function filterProductionData(items) {
62
+ if (!isProduction()) {
63
+ return items;
64
+ }
65
+ // In production, exclude test data
66
+ return items.filter((item) => !item.isTest);
67
+ }
68
+ /**
69
+ * Warns if using fallback/demo data in production
70
+ */
71
+ export function warnProductionFallback(dataSource) {
72
+ if (isProduction()) {
73
+ console.error(`❌ CRITICAL: Using demo/fallback data in production (${dataSource})`);
74
+ }
75
+ }
76
+ // ============================================================================
77
+ // Time Helpers
78
+ // ============================================================================
79
+ export function getTimeRangeMs(range) {
80
+ const now = Date.now();
81
+ switch (range) {
82
+ case "1h":
83
+ return 60 * 60 * 1000; // 1 hour
84
+ case "24h":
85
+ return 24 * 60 * 60 * 1000;
86
+ case "7d":
87
+ return 7 * 24 * 60 * 60 * 1000;
88
+ case "30d":
89
+ return 30 * 24 * 60 * 60 * 1000;
90
+ case "all":
91
+ return now; // All time
92
+ default:
93
+ return 7 * 24 * 60 * 60 * 1000; // Default to 7 days
94
+ }
95
+ }
96
+ export function isWithinTimeRange(timestamp, range) {
97
+ if (range === "all")
98
+ return true;
99
+ const now = Date.now();
100
+ const rangeMs = getTimeRangeMs(range);
101
+ return now - timestamp <= rangeMs;
102
+ }
103
+ // ============================================================================
104
+ // String Helpers
105
+ // ============================================================================
106
+ export function sanitizePath(path) {
107
+ // Remove leading/trailing slashes, normalize
108
+ return path.replace(/^\/+|\/+$/g, "").toLowerCase();
109
+ }
110
+ export function extractSlug(filePath) {
111
+ // Extract slug from file path (e.g., "blog/my-post.mdx" -> "my-post")
112
+ const parts = filePath.split("/");
113
+ const fileName = parts[parts.length - 1] || "";
114
+ return fileName.replace(/\.(mdx?|tsx?)$/, "");
115
+ }
116
+ export function calculateReadingTime(wordCount) {
117
+ // Average reading speed: 200 words per minute
118
+ const wordsPerMinute = 200;
119
+ return Math.ceil(wordCount / wordsPerMinute);
120
+ }
121
+ // ============================================================================
122
+ // Array Helpers
123
+ // ============================================================================
124
+ export function dedupe(items) {
125
+ return Array.from(new Set(items));
126
+ }
127
+ export function sortByProperty(items, property, direction = "desc") {
128
+ return [...items].sort((a, b) => {
129
+ const aVal = a[property];
130
+ const bVal = b[property];
131
+ if (typeof aVal === "number" && typeof bVal === "number") {
132
+ return direction === "asc" ? aVal - bVal : bVal - aVal;
133
+ }
134
+ if (typeof aVal === "string" && typeof bVal === "string") {
135
+ return direction === "asc"
136
+ ? aVal.localeCompare(bVal)
137
+ : bVal.localeCompare(aVal);
138
+ }
139
+ return 0;
140
+ });
141
+ }
142
+ export function limitResults(items, limit) {
143
+ if (!limit || limit <= 0)
144
+ return items;
145
+ return items.slice(0, limit);
146
+ }
147
+ // ============================================================================
148
+ // Validation Helpers
149
+ // ============================================================================
150
+ export function isValidUrl(url) {
151
+ try {
152
+ new URL(url);
153
+ return true;
154
+ }
155
+ catch {
156
+ return false;
157
+ }
158
+ }
159
+ export function isValidPath(path) {
160
+ // Basic validation: starts with /, contains no special chars except - and _
161
+ return /^\/[\w\-\/]*$/.test(path);
162
+ }
163
+ // ============================================================================
164
+ // Performance Helpers
165
+ // ============================================================================
166
+ export async function measurePerformance(operation, label) {
167
+ const start = performance.now();
168
+ const result = await operation();
169
+ const durationMs = performance.now() - start;
170
+ if (durationMs > 500) {
171
+ console.warn(`⚠️ Performance warning: ${label} took ${durationMs.toFixed(2)}ms`);
172
+ }
173
+ return { result, durationMs };
174
+ }
175
+ // ============================================================================
176
+ // Logging Helpers
177
+ // ============================================================================
178
+ export function logToolExecution(toolName, params, success, durationMs) {
179
+ const status = success ? "✅" : "❌";
180
+ const duration = durationMs ? ` (${durationMs.toFixed(2)}ms)` : "";
181
+ console.warn(`${status} ${toolName}`, params, duration);
182
+ }
183
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Memory Layer Configuration Module
3
+ *
4
+ * Loads and validates environment variables for mem0 memory integration.
5
+ * Supports multiple vector database backends (Qdrant, Pinecone, Weaviate).
6
+ *
7
+ * @module @dcyfr/ai/memory/config
8
+ */
9
+ /**
10
+ * Supported vector database providers
11
+ */
12
+ export type VectorDBProvider = 'qdrant' | 'pinecone' | 'weaviate';
13
+ /**
14
+ * Vector database configuration
15
+ */
16
+ export interface VectorDBConfig {
17
+ provider: VectorDBProvider;
18
+ url?: string;
19
+ apiKey?: string;
20
+ environment?: string;
21
+ index?: string;
22
+ }
23
+ /**
24
+ * LLM configuration for mem0 embeddings
25
+ */
26
+ export interface LLMConfig {
27
+ provider: 'openai' | 'anthropic' | 'custom';
28
+ apiKey?: string;
29
+ model?: string;
30
+ embeddingModel?: string;
31
+ }
32
+ /**
33
+ * Complete memory system configuration
34
+ */
35
+ export interface MemoryConfig {
36
+ vectorDB: VectorDBConfig;
37
+ llm: LLMConfig;
38
+ caching?: {
39
+ enabled: boolean;
40
+ ttl: number;
41
+ maxSize: number;
42
+ };
43
+ }
44
+ /**
45
+ * Default configuration for local development
46
+ */
47
+ export declare const DEFAULT_CONFIG: MemoryConfig;
48
+ /**
49
+ * Load memory configuration from environment variables
50
+ *
51
+ * Environment variables:
52
+ * - VECTOR_DB_PROVIDER: 'qdrant' | 'pinecone' | 'weaviate'
53
+ * - VECTOR_DB_URL: Database URL (for Qdrant, Weaviate)
54
+ * - VECTOR_DB_API_KEY: API key (for Pinecone, authenticated Qdrant)
55
+ * - VECTOR_DB_ENVIRONMENT: Pinecone environment
56
+ * - VECTOR_DB_INDEX: Index/collection name
57
+ * - LLM_PROVIDER: 'openai' | 'anthropic' | 'custom'
58
+ * - LLM_API_KEY: LLM API key (defaults to OPENAI_API_KEY if provider=openai)
59
+ * - LLM_MODEL: Model name
60
+ * - LLM_EMBEDDING_MODEL: Embedding model name
61
+ * - MEMORY_CACHE_ENABLED: 'true' | 'false'
62
+ * - MEMORY_CACHE_TTL: Cache TTL in seconds
63
+ * - MEMORY_CACHE_MAX_SIZE: Max cache entries
64
+ *
65
+ * @returns Complete memory configuration
66
+ * @throws Error if required environment variables are missing
67
+ */
68
+ export declare function loadMemoryConfig(): MemoryConfig;
69
+ /**
70
+ * Validate memory configuration
71
+ *
72
+ * Ensures all required fields are present based on vector DB provider.
73
+ *
74
+ * @param config - Configuration to validate
75
+ * @throws Error if configuration is invalid or missing required fields
76
+ */
77
+ export declare function validateMemoryConfig(config: MemoryConfig): void;
78
+ /**
79
+ * Get validated memory configuration
80
+ *
81
+ * Convenience function that loads and validates configuration in one call.
82
+ *
83
+ * @returns Validated memory configuration
84
+ * @throws Error if configuration is invalid
85
+ */
86
+ export declare function getMemoryConfig(): MemoryConfig;
87
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../packages/ai/memory/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,YAgB5B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CA0C/C;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAwD/D;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAI9C"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Memory Layer Configuration Module
3
+ *
4
+ * Loads and validates environment variables for mem0 memory integration.
5
+ * Supports multiple vector database backends (Qdrant, Pinecone, Weaviate).
6
+ *
7
+ * @module @dcyfr/ai/memory/config
8
+ */
9
+ /**
10
+ * Default configuration for local development
11
+ */
12
+ export const DEFAULT_CONFIG = {
13
+ vectorDB: {
14
+ provider: 'qdrant',
15
+ url: 'http://localhost:6333',
16
+ index: 'dcyfr_memories',
17
+ },
18
+ llm: {
19
+ provider: 'openai',
20
+ model: 'gpt-4',
21
+ embeddingModel: 'text-embedding-3-small',
22
+ },
23
+ caching: {
24
+ enabled: true,
25
+ ttl: 300, // 5 minutes
26
+ maxSize: 1000, // 1000 recent searches
27
+ },
28
+ };
29
+ /**
30
+ * Load memory configuration from environment variables
31
+ *
32
+ * Environment variables:
33
+ * - VECTOR_DB_PROVIDER: 'qdrant' | 'pinecone' | 'weaviate'
34
+ * - VECTOR_DB_URL: Database URL (for Qdrant, Weaviate)
35
+ * - VECTOR_DB_API_KEY: API key (for Pinecone, authenticated Qdrant)
36
+ * - VECTOR_DB_ENVIRONMENT: Pinecone environment
37
+ * - VECTOR_DB_INDEX: Index/collection name
38
+ * - LLM_PROVIDER: 'openai' | 'anthropic' | 'custom'
39
+ * - LLM_API_KEY: LLM API key (defaults to OPENAI_API_KEY if provider=openai)
40
+ * - LLM_MODEL: Model name
41
+ * - LLM_EMBEDDING_MODEL: Embedding model name
42
+ * - MEMORY_CACHE_ENABLED: 'true' | 'false'
43
+ * - MEMORY_CACHE_TTL: Cache TTL in seconds
44
+ * - MEMORY_CACHE_MAX_SIZE: Max cache entries
45
+ *
46
+ * @returns Complete memory configuration
47
+ * @throws Error if required environment variables are missing
48
+ */
49
+ export function loadMemoryConfig() {
50
+ const env = process.env;
51
+ // Vector DB configuration
52
+ const vectorDBProvider = (env.VECTOR_DB_PROVIDER || 'qdrant');
53
+ const vectorDBConfig = {
54
+ provider: vectorDBProvider,
55
+ url: env.VECTOR_DB_URL,
56
+ apiKey: env.VECTOR_DB_API_KEY,
57
+ environment: env.VECTOR_DB_ENVIRONMENT,
58
+ index: env.VECTOR_DB_INDEX || 'dcyfr_memories',
59
+ };
60
+ // Apply defaults based on provider
61
+ if (vectorDBProvider === 'qdrant' && !vectorDBConfig.url) {
62
+ vectorDBConfig.url = DEFAULT_CONFIG.vectorDB.url;
63
+ }
64
+ // LLM configuration
65
+ const llmProvider = (env.LLM_PROVIDER || 'openai');
66
+ const llmApiKey = env.LLM_API_KEY || (llmProvider === 'openai' ? env.OPENAI_API_KEY : undefined);
67
+ const llmConfig = {
68
+ provider: llmProvider,
69
+ apiKey: llmApiKey,
70
+ model: env.LLM_MODEL || DEFAULT_CONFIG.llm.model,
71
+ embeddingModel: env.LLM_EMBEDDING_MODEL || DEFAULT_CONFIG.llm.embeddingModel,
72
+ };
73
+ // Caching configuration
74
+ const cachingConfig = {
75
+ enabled: env.MEMORY_CACHE_ENABLED !== 'false', // Default true
76
+ ttl: parseInt(env.MEMORY_CACHE_TTL || '300', 10),
77
+ maxSize: parseInt(env.MEMORY_CACHE_MAX_SIZE || '1000', 10),
78
+ };
79
+ return {
80
+ vectorDB: vectorDBConfig,
81
+ llm: llmConfig,
82
+ caching: cachingConfig,
83
+ };
84
+ }
85
+ /**
86
+ * Validate memory configuration
87
+ *
88
+ * Ensures all required fields are present based on vector DB provider.
89
+ *
90
+ * @param config - Configuration to validate
91
+ * @throws Error if configuration is invalid or missing required fields
92
+ */
93
+ export function validateMemoryConfig(config) {
94
+ const { vectorDB, llm } = config;
95
+ // Validate vector DB configuration
96
+ if (!vectorDB.provider) {
97
+ throw new Error('VECTOR_DB_PROVIDER is required');
98
+ }
99
+ switch (vectorDB.provider) {
100
+ case 'qdrant':
101
+ if (!vectorDB.url) {
102
+ throw new Error('VECTOR_DB_URL is required for Qdrant');
103
+ }
104
+ break;
105
+ case 'pinecone':
106
+ if (!vectorDB.apiKey) {
107
+ throw new Error('VECTOR_DB_API_KEY is required for Pinecone');
108
+ }
109
+ if (!vectorDB.environment) {
110
+ throw new Error('VECTOR_DB_ENVIRONMENT is required for Pinecone');
111
+ }
112
+ break;
113
+ case 'weaviate':
114
+ if (!vectorDB.url) {
115
+ throw new Error('VECTOR_DB_URL is required for Weaviate');
116
+ }
117
+ break;
118
+ default:
119
+ throw new Error(`Unsupported vector DB provider: ${vectorDB.provider}`);
120
+ }
121
+ // Validate LLM configuration
122
+ if (!llm.provider) {
123
+ throw new Error('LLM_PROVIDER is required');
124
+ }
125
+ if (llm.provider === 'openai' && !llm.apiKey) {
126
+ throw new Error('LLM_API_KEY or OPENAI_API_KEY is required for OpenAI provider');
127
+ }
128
+ if (!llm.embeddingModel) {
129
+ throw new Error('LLM_EMBEDDING_MODEL is required');
130
+ }
131
+ // Validate caching configuration
132
+ if (config.caching) {
133
+ if (config.caching.ttl <= 0) {
134
+ throw new Error('MEMORY_CACHE_TTL must be greater than 0');
135
+ }
136
+ if (config.caching.maxSize <= 0) {
137
+ throw new Error('MEMORY_CACHE_MAX_SIZE must be greater than 0');
138
+ }
139
+ }
140
+ }
141
+ /**
142
+ * Get validated memory configuration
143
+ *
144
+ * Convenience function that loads and validates configuration in one call.
145
+ *
146
+ * @returns Validated memory configuration
147
+ * @throws Error if configuration is invalid
148
+ */
149
+ export function getMemoryConfig() {
150
+ const config = loadMemoryConfig();
151
+ validateMemoryConfig(config);
152
+ return config;
153
+ }
154
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../packages/ai/memory/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * DCYFR Memory implementation wrapping mem0 OSS client
3
+ */
4
+ import type { DCYFRMemory, Memory, MemorySearchResult, MemoryContext } from './types.js';
5
+ /**
6
+ * DCYFRMemory implementation using mem0 OSS as the backend
7
+ */
8
+ export declare class DCYFRMemoryImpl implements DCYFRMemory {
9
+ private mem0ClientPromise;
10
+ /**
11
+ * Lazy initialization of mem0 client
12
+ */
13
+ private ensureInitialized;
14
+ /**
15
+ * Add memory associated with a specific user
16
+ */
17
+ addUserMemory(userId: string, message: string, context?: MemoryContext): Promise<string>;
18
+ /**
19
+ * Search user memories using semantic search
20
+ */
21
+ searchUserMemories(userId: string, query: string, limit?: number): Promise<MemorySearchResult[]>;
22
+ /**
23
+ * Get all memories for a user
24
+ */
25
+ getUserMemories(userId: string, topic?: string): Promise<Memory[]>;
26
+ /**
27
+ * Delete all memories for a user
28
+ */
29
+ deleteUserMemories(userId: string): Promise<void>;
30
+ /**
31
+ * Store agent workflow state
32
+ */
33
+ addAgentMemory(agentId: string, sessionId: string, state: Record<string, unknown>): Promise<string>;
34
+ /**
35
+ * Search agent memories
36
+ */
37
+ searchAgentMemories(agentId: string, query: string, limit?: number): Promise<MemorySearchResult[]>;
38
+ /**
39
+ * Get agent workflow state for a specific session
40
+ */
41
+ getAgentState(agentId: string, sessionId: string): Promise<Record<string, unknown> | null>;
42
+ /**
43
+ * Add temporary session context with TTL
44
+ */
45
+ addSessionMemory(sessionId: string, message: string, ttl?: number): Promise<string>;
46
+ /**
47
+ * Get concatenated session context (filters out expired memories)
48
+ */
49
+ getSessionContext(sessionId: string): Promise<string>;
50
+ /**
51
+ * Delete all memories for a session
52
+ */
53
+ deleteSessionMemories(sessionId: string): Promise<void>;
54
+ }
55
+ /**
56
+ * Get singleton DCYFRMemory instance
57
+ */
58
+ export declare function getMemory(): DCYFRMemory;
59
+ /**
60
+ * Reset memory instance (for testing)
61
+ */
62
+ export declare function resetMemory(): void;
63
+ //# sourceMappingURL=dcyfr-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dcyfr-memory.d.ts","sourceRoot":"","sources":["../../../packages/ai/memory/dcyfr-memory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,kBAAkB,EAClB,aAAa,EAEd,MAAM,YAAY,CAAC;AAUpB;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,iBAAiB,CAA6B;IAEtD;;OAEG;YACW,iBAAiB;IAW/B;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,MAAM,CAAC;IAoBlB;;OAEG;IACG,kBAAkB,CACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAmC,GACzC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAyBhC;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBxE;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAavD;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,MAAM,CAAC;IAuBlB;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAoC,GAC1C,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA0BhC;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAwB1C;;OAEG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAAa,GACjB,OAAO,CAAC,MAAM,CAAC;IAqBlB;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2B3D;;OAEG;IACG,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ9D;AAQD;;GAEG;AACH,wBAAgB,SAAS,IAAI,WAAW,CAKvC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}