family-ai-agent 1.0.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.
Files changed (132) hide show
  1. package/.env.example +49 -0
  2. package/README.md +161 -0
  3. package/dist/cli/index.d.ts +3 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +336 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/config/index.d.ts +37 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +68 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/config/models.d.ts +17 -0
  12. package/dist/config/models.d.ts.map +1 -0
  13. package/dist/config/models.js +128 -0
  14. package/dist/config/models.js.map +1 -0
  15. package/dist/core/agents/agent-factory.d.ts +31 -0
  16. package/dist/core/agents/agent-factory.d.ts.map +1 -0
  17. package/dist/core/agents/agent-factory.js +151 -0
  18. package/dist/core/agents/agent-factory.js.map +1 -0
  19. package/dist/core/agents/base-agent.d.ts +51 -0
  20. package/dist/core/agents/base-agent.d.ts.map +1 -0
  21. package/dist/core/agents/base-agent.js +245 -0
  22. package/dist/core/agents/base-agent.js.map +1 -0
  23. package/dist/core/agents/index.d.ts +8 -0
  24. package/dist/core/agents/index.d.ts.map +1 -0
  25. package/dist/core/agents/index.js +9 -0
  26. package/dist/core/agents/index.js.map +1 -0
  27. package/dist/core/agents/personalities/automation.d.ts +14 -0
  28. package/dist/core/agents/personalities/automation.d.ts.map +1 -0
  29. package/dist/core/agents/personalities/automation.js +146 -0
  30. package/dist/core/agents/personalities/automation.js.map +1 -0
  31. package/dist/core/agents/personalities/chat.d.ts +10 -0
  32. package/dist/core/agents/personalities/chat.d.ts.map +1 -0
  33. package/dist/core/agents/personalities/chat.js +132 -0
  34. package/dist/core/agents/personalities/chat.js.map +1 -0
  35. package/dist/core/agents/personalities/coding.d.ts +16 -0
  36. package/dist/core/agents/personalities/coding.d.ts.map +1 -0
  37. package/dist/core/agents/personalities/coding.js +166 -0
  38. package/dist/core/agents/personalities/coding.js.map +1 -0
  39. package/dist/core/agents/personalities/research.d.ts +13 -0
  40. package/dist/core/agents/personalities/research.d.ts.map +1 -0
  41. package/dist/core/agents/personalities/research.js +133 -0
  42. package/dist/core/agents/personalities/research.js.map +1 -0
  43. package/dist/core/agents/types.d.ts +102 -0
  44. package/dist/core/agents/types.d.ts.map +1 -0
  45. package/dist/core/agents/types.js +2 -0
  46. package/dist/core/agents/types.js.map +1 -0
  47. package/dist/core/orchestrator/graph.d.ts +118 -0
  48. package/dist/core/orchestrator/graph.d.ts.map +1 -0
  49. package/dist/core/orchestrator/graph.js +233 -0
  50. package/dist/core/orchestrator/graph.js.map +1 -0
  51. package/dist/database/client.d.ts +19 -0
  52. package/dist/database/client.d.ts.map +1 -0
  53. package/dist/database/client.js +95 -0
  54. package/dist/database/client.js.map +1 -0
  55. package/dist/index.d.ts +41 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +67 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/llm/openrouter-client.d.ts +45 -0
  60. package/dist/llm/openrouter-client.d.ts.map +1 -0
  61. package/dist/llm/openrouter-client.js +155 -0
  62. package/dist/llm/openrouter-client.js.map +1 -0
  63. package/dist/memory/conversation/index.d.ts +37 -0
  64. package/dist/memory/conversation/index.d.ts.map +1 -0
  65. package/dist/memory/conversation/index.js +196 -0
  66. package/dist/memory/conversation/index.js.map +1 -0
  67. package/dist/memory/index.d.ts +4 -0
  68. package/dist/memory/index.d.ts.map +1 -0
  69. package/dist/memory/index.js +5 -0
  70. package/dist/memory/index.js.map +1 -0
  71. package/dist/memory/knowledge-base/index.d.ts +51 -0
  72. package/dist/memory/knowledge-base/index.d.ts.map +1 -0
  73. package/dist/memory/knowledge-base/index.js +222 -0
  74. package/dist/memory/knowledge-base/index.js.map +1 -0
  75. package/dist/memory/longterm/vector-store.d.ts +44 -0
  76. package/dist/memory/longterm/vector-store.d.ts.map +1 -0
  77. package/dist/memory/longterm/vector-store.js +229 -0
  78. package/dist/memory/longterm/vector-store.js.map +1 -0
  79. package/dist/safety/audit-logger.d.ts +68 -0
  80. package/dist/safety/audit-logger.d.ts.map +1 -0
  81. package/dist/safety/audit-logger.js +215 -0
  82. package/dist/safety/audit-logger.js.map +1 -0
  83. package/dist/safety/guardrails/input-guardrail.d.ts +21 -0
  84. package/dist/safety/guardrails/input-guardrail.d.ts.map +1 -0
  85. package/dist/safety/guardrails/input-guardrail.js +145 -0
  86. package/dist/safety/guardrails/input-guardrail.js.map +1 -0
  87. package/dist/safety/guardrails/output-guardrail.d.ts +18 -0
  88. package/dist/safety/guardrails/output-guardrail.d.ts.map +1 -0
  89. package/dist/safety/guardrails/output-guardrail.js +125 -0
  90. package/dist/safety/guardrails/output-guardrail.js.map +1 -0
  91. package/dist/safety/index.d.ts +4 -0
  92. package/dist/safety/index.d.ts.map +1 -0
  93. package/dist/safety/index.js +5 -0
  94. package/dist/safety/index.js.map +1 -0
  95. package/dist/utils/errors.d.ts +36 -0
  96. package/dist/utils/errors.d.ts.map +1 -0
  97. package/dist/utils/errors.js +94 -0
  98. package/dist/utils/errors.js.map +1 -0
  99. package/dist/utils/logger.d.ts +8 -0
  100. package/dist/utils/logger.d.ts.map +1 -0
  101. package/dist/utils/logger.js +47 -0
  102. package/dist/utils/logger.js.map +1 -0
  103. package/docker/init-db.sql +149 -0
  104. package/docker/sandbox/Dockerfile.sandbox +29 -0
  105. package/docker-compose.yml +61 -0
  106. package/package.json +80 -0
  107. package/src/cli/index.ts +392 -0
  108. package/src/config/index.ts +85 -0
  109. package/src/config/models.ts +156 -0
  110. package/src/core/agents/agent-factory.ts +192 -0
  111. package/src/core/agents/base-agent.ts +333 -0
  112. package/src/core/agents/index.ts +27 -0
  113. package/src/core/agents/personalities/automation.ts +202 -0
  114. package/src/core/agents/personalities/chat.ts +159 -0
  115. package/src/core/agents/personalities/coding.ts +227 -0
  116. package/src/core/agents/personalities/research.ts +177 -0
  117. package/src/core/agents/types.ts +124 -0
  118. package/src/core/orchestrator/graph.ts +305 -0
  119. package/src/database/client.ts +109 -0
  120. package/src/index.ts +104 -0
  121. package/src/llm/openrouter-client.ts +218 -0
  122. package/src/memory/conversation/index.ts +313 -0
  123. package/src/memory/index.ts +23 -0
  124. package/src/memory/knowledge-base/index.ts +357 -0
  125. package/src/memory/longterm/vector-store.ts +364 -0
  126. package/src/safety/audit-logger.ts +357 -0
  127. package/src/safety/guardrails/input-guardrail.ts +191 -0
  128. package/src/safety/guardrails/output-guardrail.ts +160 -0
  129. package/src/safety/index.ts +21 -0
  130. package/src/utils/errors.ts +120 -0
  131. package/src/utils/logger.ts +74 -0
  132. package/tsconfig.json +37 -0
@@ -0,0 +1,155 @@
1
+ import { ChatOpenAI } from '@langchain/openai';
2
+ import { OpenAIEmbeddings } from '@langchain/openai';
3
+ import { config } from '../config/index.js';
4
+ import { getModelConfig } from '../config/models.js';
5
+ import { LLMError } from '../utils/errors.js';
6
+ import { createLogger } from '../utils/logger.js';
7
+ const logger = createLogger('OpenRouterClient');
8
+ export class OpenRouterClient {
9
+ defaultModel;
10
+ fastModel;
11
+ embeddingModel;
12
+ chatModels = new Map();
13
+ embeddings = null;
14
+ constructor() {
15
+ this.defaultModel = config.DEFAULT_MODEL;
16
+ this.fastModel = config.FAST_MODEL;
17
+ this.embeddingModel = config.EMBEDDING_MODEL;
18
+ }
19
+ getChatModel(modelId, options = {}) {
20
+ const cacheKey = `${modelId}-${JSON.stringify(options)}`;
21
+ if (!this.chatModels.has(cacheKey)) {
22
+ const modelConfig = getModelConfig(modelId);
23
+ const chatModel = new ChatOpenAI({
24
+ modelName: modelId,
25
+ openAIApiKey: config.OPENROUTER_API_KEY,
26
+ temperature: options.temperature ?? 0.7,
27
+ maxTokens: options.maxTokens ?? modelConfig?.maxOutput ?? 4096,
28
+ topP: options.topP,
29
+ frequencyPenalty: options.frequencyPenalty,
30
+ presencePenalty: options.presencePenalty,
31
+ stop: options.stop,
32
+ streaming: options.streaming ?? false,
33
+ configuration: {
34
+ baseURL: config.OPENROUTER_BASE_URL,
35
+ defaultHeaders: {
36
+ 'HTTP-Referer': 'https://family-ai-agent.local',
37
+ 'X-Title': 'Family AI Agent',
38
+ },
39
+ },
40
+ });
41
+ this.chatModels.set(cacheKey, chatModel);
42
+ }
43
+ return this.chatModels.get(cacheKey);
44
+ }
45
+ getEmbeddings() {
46
+ if (!this.embeddings) {
47
+ this.embeddings = new OpenAIEmbeddings({
48
+ modelName: this.embeddingModel,
49
+ openAIApiKey: config.OPENROUTER_API_KEY,
50
+ configuration: {
51
+ baseURL: config.OPENROUTER_BASE_URL,
52
+ },
53
+ });
54
+ }
55
+ return this.embeddings;
56
+ }
57
+ // Get a LangChain ChatModel for use with agents
58
+ getChatModelForAgent(options = {}) {
59
+ const modelId = options.model ?? this.defaultModel;
60
+ return this.getChatModel(modelId, {
61
+ ...options,
62
+ streaming: true, // Enable streaming for agents
63
+ });
64
+ }
65
+ // Get a fast model for quick operations
66
+ getFastModel(options = {}) {
67
+ return this.getChatModel(this.fastModel, options);
68
+ }
69
+ // Simple completion method
70
+ async complete(messages, options = {}) {
71
+ const modelId = options.model ?? this.defaultModel;
72
+ const model = this.getChatModel(modelId, options);
73
+ try {
74
+ logger.debug('Sending completion request', { model: modelId });
75
+ const startTime = Date.now();
76
+ const response = await model.invoke(messages);
77
+ const duration = Date.now() - startTime;
78
+ logger.debug('Completion received', { model: modelId, duration });
79
+ return {
80
+ content: typeof response.content === 'string'
81
+ ? response.content
82
+ : JSON.stringify(response.content),
83
+ model: modelId,
84
+ usage: {
85
+ promptTokens: response.usage_metadata?.input_tokens ?? 0,
86
+ completionTokens: response.usage_metadata?.output_tokens ?? 0,
87
+ totalTokens: response.usage_metadata?.total_tokens ?? 0,
88
+ },
89
+ finishReason: response.response_metadata?.finish_reason ?? 'stop',
90
+ };
91
+ }
92
+ catch (error) {
93
+ logger.error('Completion failed', { model: modelId, error });
94
+ throw new LLMError(`Failed to get completion from ${modelId}: ${error instanceof Error ? error.message : 'Unknown error'}`, { model: modelId, originalError: String(error) });
95
+ }
96
+ }
97
+ // Stream completion
98
+ async *streamComplete(messages, options = {}) {
99
+ const modelId = options.model ?? this.defaultModel;
100
+ const model = this.getChatModel(modelId, { ...options, streaming: true });
101
+ try {
102
+ logger.debug('Starting stream completion', { model: modelId });
103
+ const stream = await model.stream(messages);
104
+ for await (const chunk of stream) {
105
+ if (typeof chunk.content === 'string') {
106
+ yield chunk.content;
107
+ }
108
+ }
109
+ }
110
+ catch (error) {
111
+ logger.error('Stream completion failed', { model: modelId, error });
112
+ throw new LLMError(`Failed to stream completion from ${modelId}: ${error instanceof Error ? error.message : 'Unknown error'}`, { model: modelId, originalError: String(error) });
113
+ }
114
+ }
115
+ // Generate embeddings for text
116
+ async embed(texts) {
117
+ try {
118
+ const embeddings = this.getEmbeddings();
119
+ return await embeddings.embedDocuments(texts);
120
+ }
121
+ catch (error) {
122
+ logger.error('Embedding generation failed', { error });
123
+ throw new LLMError(`Failed to generate embeddings: ${error instanceof Error ? error.message : 'Unknown error'}`, { originalError: String(error) });
124
+ }
125
+ }
126
+ // Generate single embedding
127
+ async embedQuery(text) {
128
+ try {
129
+ const embeddings = this.getEmbeddings();
130
+ return await embeddings.embedQuery(text);
131
+ }
132
+ catch (error) {
133
+ logger.error('Query embedding failed', { error });
134
+ throw new LLMError(`Failed to generate query embedding: ${error instanceof Error ? error.message : 'Unknown error'}`, { originalError: String(error) });
135
+ }
136
+ }
137
+ // Get model info
138
+ getModelInfo(modelId) {
139
+ return getModelConfig(modelId ?? this.defaultModel);
140
+ }
141
+ // List available models
142
+ getAvailableModels() {
143
+ return [this.defaultModel, this.fastModel];
144
+ }
145
+ }
146
+ // Singleton instance
147
+ let clientInstance = null;
148
+ export function getOpenRouterClient() {
149
+ if (!clientInstance) {
150
+ clientInstance = new OpenRouterClient();
151
+ }
152
+ return clientInstance;
153
+ }
154
+ export default OpenRouterClient;
155
+ //# sourceMappingURL=openrouter-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-client.js","sourceRoot":"","sources":["../../src/llm/openrouter-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { BaseMessage } from '@langchain/core/messages';
2
+ export interface Conversation {
3
+ id: string;
4
+ threadId: string;
5
+ userId?: string;
6
+ createdAt: Date;
7
+ updatedAt: Date;
8
+ }
9
+ export interface Message {
10
+ id: string;
11
+ conversationId: string;
12
+ role: 'user' | 'assistant' | 'system';
13
+ content: string;
14
+ metadata: Record<string, unknown>;
15
+ createdAt: Date;
16
+ }
17
+ export declare class ConversationMemory {
18
+ createConversation(threadId: string, userId?: string): Promise<string>;
19
+ getConversation(threadId: string): Promise<Conversation | null>;
20
+ getOrCreateConversation(threadId: string, userId?: string): Promise<string>;
21
+ addMessage(conversationId: string, role: 'user' | 'assistant' | 'system', content: string, metadata?: Record<string, unknown>): Promise<string>;
22
+ getMessages(conversationId: string, options?: {
23
+ limit?: number;
24
+ offset?: number;
25
+ }): Promise<Message[]>;
26
+ getMessagesAsLangChain(conversationId: string): Promise<BaseMessage[]>;
27
+ getRecentMessages(conversationId: string, maxMessages?: number): Promise<Message[]>;
28
+ deleteConversation(conversationId: string): Promise<void>;
29
+ getConversationCount(userId: string): Promise<number>;
30
+ listConversations(userId: string, options?: {
31
+ limit?: number;
32
+ offset?: number;
33
+ }): Promise<Conversation[]>;
34
+ }
35
+ export declare function getConversationMemory(): ConversationMemory;
36
+ export default ConversationMemory;
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/conversation/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK5D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,qBAAa,kBAAkB;IAEvB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BtE,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAmC/D,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAS3E,UAAU,CACd,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,EACrC,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,OAAO,CAAC,MAAM,CAAC;IA8BZ,WAAW,CACf,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAChD,OAAO,CAAC,OAAO,EAAE,CAAC;IAqCf,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkBtE,iBAAiB,CACrB,cAAc,EAAE,MAAM,EACtB,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,OAAO,EAAE,CAAC;IAoCf,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzD,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBrD,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAChD,OAAO,CAAC,YAAY,EAAE,CAAC;CAiC3B;AAKD,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,196 @@
1
+ import { query } from '../../database/client.js';
2
+ import { createLogger, logMemoryOperation } from '../../utils/logger.js';
3
+ import { MemoryError } from '../../utils/errors.js';
4
+ import { HumanMessage, AIMessage, SystemMessage } from '@langchain/core/messages';
5
+ const logger = createLogger('ConversationMemory');
6
+ export class ConversationMemory {
7
+ // Create a new conversation
8
+ async createConversation(threadId, userId) {
9
+ try {
10
+ const result = await query(`INSERT INTO conversations (thread_id, user_id)
11
+ VALUES ($1, $2)
12
+ RETURNING id`, [threadId, userId ?? null]);
13
+ const conversationId = result.rows[0]?.id;
14
+ if (!conversationId) {
15
+ throw new MemoryError('Failed to create conversation');
16
+ }
17
+ logMemoryOperation('write', 'conversation', {
18
+ conversationId,
19
+ threadId,
20
+ });
21
+ return conversationId;
22
+ }
23
+ catch (error) {
24
+ logger.error('Failed to create conversation', { error });
25
+ throw new MemoryError(`Failed to create conversation: ${error instanceof Error ? error.message : 'Unknown error'}`);
26
+ }
27
+ }
28
+ // Get conversation by thread ID
29
+ async getConversation(threadId) {
30
+ try {
31
+ const result = await query(`SELECT id, thread_id, user_id, created_at, updated_at
32
+ FROM conversations WHERE thread_id = $1`, [threadId]);
33
+ if (result.rows.length === 0) {
34
+ return null;
35
+ }
36
+ const row = result.rows[0];
37
+ return {
38
+ id: row.id,
39
+ threadId: row.thread_id,
40
+ userId: row.user_id ?? undefined,
41
+ createdAt: row.created_at,
42
+ updatedAt: row.updated_at,
43
+ };
44
+ }
45
+ catch (error) {
46
+ logger.error('Failed to get conversation', { error });
47
+ throw new MemoryError(`Failed to get conversation: ${error instanceof Error ? error.message : 'Unknown error'}`);
48
+ }
49
+ }
50
+ // Get or create conversation
51
+ async getOrCreateConversation(threadId, userId) {
52
+ const existing = await this.getConversation(threadId);
53
+ if (existing) {
54
+ return existing.id;
55
+ }
56
+ return this.createConversation(threadId, userId);
57
+ }
58
+ // Add message to conversation
59
+ async addMessage(conversationId, role, content, metadata = {}) {
60
+ try {
61
+ const result = await query(`INSERT INTO messages (conversation_id, role, content, metadata)
62
+ VALUES ($1, $2, $3, $4)
63
+ RETURNING id`, [conversationId, role, content, JSON.stringify(metadata)]);
64
+ const messageId = result.rows[0]?.id;
65
+ if (!messageId) {
66
+ throw new MemoryError('Failed to add message');
67
+ }
68
+ // Update conversation timestamp
69
+ await query('UPDATE conversations SET updated_at = NOW() WHERE id = $1', [conversationId]);
70
+ return messageId;
71
+ }
72
+ catch (error) {
73
+ logger.error('Failed to add message', { error });
74
+ throw new MemoryError(`Failed to add message: ${error instanceof Error ? error.message : 'Unknown error'}`);
75
+ }
76
+ }
77
+ // Get messages for a conversation
78
+ async getMessages(conversationId, options = {}) {
79
+ const { limit = 50, offset = 0 } = options;
80
+ try {
81
+ const result = await query(`SELECT id, conversation_id, role, content, metadata, created_at
82
+ FROM messages
83
+ WHERE conversation_id = $1
84
+ ORDER BY created_at ASC
85
+ LIMIT $2 OFFSET $3`, [conversationId, limit, offset]);
86
+ return result.rows.map((row) => ({
87
+ id: row.id,
88
+ conversationId: row.conversation_id,
89
+ role: row.role,
90
+ content: row.content,
91
+ metadata: row.metadata,
92
+ createdAt: row.created_at,
93
+ }));
94
+ }
95
+ catch (error) {
96
+ logger.error('Failed to get messages', { error });
97
+ throw new MemoryError(`Failed to get messages: ${error instanceof Error ? error.message : 'Unknown error'}`);
98
+ }
99
+ }
100
+ // Convert messages to LangChain format
101
+ async getMessagesAsLangChain(conversationId) {
102
+ const messages = await this.getMessages(conversationId);
103
+ return messages.map((msg) => {
104
+ switch (msg.role) {
105
+ case 'user':
106
+ return new HumanMessage({ content: msg.content });
107
+ case 'assistant':
108
+ return new AIMessage({ content: msg.content });
109
+ case 'system':
110
+ return new SystemMessage({ content: msg.content });
111
+ default:
112
+ return new HumanMessage({ content: msg.content });
113
+ }
114
+ });
115
+ }
116
+ // Get recent messages (for context window)
117
+ async getRecentMessages(conversationId, maxMessages = 10) {
118
+ try {
119
+ const result = await query(`SELECT id, conversation_id, role, content, metadata, created_at
120
+ FROM messages
121
+ WHERE conversation_id = $1
122
+ ORDER BY created_at DESC
123
+ LIMIT $2`, [conversationId, maxMessages]);
124
+ // Reverse to get chronological order
125
+ return result.rows.reverse().map((row) => ({
126
+ id: row.id,
127
+ conversationId: row.conversation_id,
128
+ role: row.role,
129
+ content: row.content,
130
+ metadata: row.metadata,
131
+ createdAt: row.created_at,
132
+ }));
133
+ }
134
+ catch (error) {
135
+ logger.error('Failed to get recent messages', { error });
136
+ throw new MemoryError(`Failed to get recent messages: ${error instanceof Error ? error.message : 'Unknown error'}`);
137
+ }
138
+ }
139
+ // Delete conversation and all messages
140
+ async deleteConversation(conversationId) {
141
+ try {
142
+ await query('DELETE FROM conversations WHERE id = $1', [conversationId]);
143
+ logMemoryOperation('write', 'conversation', {
144
+ conversationId,
145
+ action: 'delete',
146
+ });
147
+ }
148
+ catch (error) {
149
+ logger.error('Failed to delete conversation', { error });
150
+ throw new MemoryError(`Failed to delete conversation: ${error instanceof Error ? error.message : 'Unknown error'}`);
151
+ }
152
+ }
153
+ // Get conversation count for user
154
+ async getConversationCount(userId) {
155
+ try {
156
+ const result = await query('SELECT COUNT(*) as count FROM conversations WHERE user_id = $1', [userId]);
157
+ return parseInt(result.rows[0]?.count ?? '0', 10);
158
+ }
159
+ catch (error) {
160
+ logger.error('Failed to get conversation count', { error });
161
+ throw new MemoryError(`Failed to get conversation count: ${error instanceof Error ? error.message : 'Unknown error'}`);
162
+ }
163
+ }
164
+ // List user's conversations
165
+ async listConversations(userId, options = {}) {
166
+ const { limit = 20, offset = 0 } = options;
167
+ try {
168
+ const result = await query(`SELECT id, thread_id, user_id, created_at, updated_at
169
+ FROM conversations
170
+ WHERE user_id = $1
171
+ ORDER BY updated_at DESC
172
+ LIMIT $2 OFFSET $3`, [userId, limit, offset]);
173
+ return result.rows.map((row) => ({
174
+ id: row.id,
175
+ threadId: row.thread_id,
176
+ userId: row.user_id ?? undefined,
177
+ createdAt: row.created_at,
178
+ updatedAt: row.updated_at,
179
+ }));
180
+ }
181
+ catch (error) {
182
+ logger.error('Failed to list conversations', { error });
183
+ throw new MemoryError(`Failed to list conversations: ${error instanceof Error ? error.message : 'Unknown error'}`);
184
+ }
185
+ }
186
+ }
187
+ // Singleton instance
188
+ let memoryInstance = null;
189
+ export function getConversationMemory() {
190
+ if (!memoryInstance) {
191
+ memoryInstance = new ConversationMemory();
192
+ }
193
+ return memoryInstance;
194
+ }
195
+ export default ConversationMemory;
196
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/conversation/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { VectorStore, getVectorStore, type MemoryType, type MemoryEntry, type SearchOptions, } from './longterm/vector-store.js';
2
+ export { ConversationMemory, getConversationMemory, type Conversation, type Message, } from './conversation/index.js';
3
+ export { KnowledgeBase, getKnowledgeBase, type Document, type DocumentChunk, type SearchResult, } from './knowledge-base/index.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,cAAc,EACd,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,OAAO,GACb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Memory module exports
2
+ export { VectorStore, getVectorStore, } from './longterm/vector-store.js';
3
+ export { ConversationMemory, getConversationMemory, } from './conversation/index.js';
4
+ export { KnowledgeBase, getKnowledgeBase, } from './knowledge-base/index.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EACL,WAAW,EACX,cAAc,GAIf,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GAGtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,aAAa,EACb,gBAAgB,GAIjB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,51 @@
1
+ export interface Document {
2
+ id: string;
3
+ userId?: string;
4
+ filename: string;
5
+ fileType?: string;
6
+ fileSize?: number;
7
+ content?: string;
8
+ metadata: Record<string, unknown>;
9
+ createdAt: Date;
10
+ }
11
+ export interface DocumentChunk {
12
+ id: string;
13
+ documentId: string;
14
+ chunkIndex: number;
15
+ content: string;
16
+ metadata: Record<string, unknown>;
17
+ }
18
+ export interface SearchResult {
19
+ documentId: string;
20
+ chunkId: string;
21
+ content: string;
22
+ similarity: number;
23
+ metadata: Record<string, unknown>;
24
+ filename: string;
25
+ }
26
+ export declare class KnowledgeBase {
27
+ private client;
28
+ private textSplitter;
29
+ addDocument(content: string, filename: string, options?: {
30
+ userId?: string;
31
+ fileType?: string;
32
+ fileSize?: number;
33
+ metadata?: Record<string, unknown>;
34
+ }): Promise<string>;
35
+ search(queryText: string, options?: {
36
+ userId?: string;
37
+ limit?: number;
38
+ minSimilarity?: number;
39
+ }): Promise<SearchResult[]>;
40
+ getDocument(id: string): Promise<Document | null>;
41
+ listDocuments(userId: string, options?: {
42
+ limit?: number;
43
+ offset?: number;
44
+ }): Promise<Document[]>;
45
+ deleteDocument(id: string): Promise<void>;
46
+ getDocumentChunks(documentId: string): Promise<DocumentChunk[]>;
47
+ getDocumentCount(userId: string): Promise<number>;
48
+ }
49
+ export declare function getKnowledgeBase(): KnowledgeBase;
50
+ export default KnowledgeBase;
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/knowledge-base/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,YAAY,CAIjB;IAGG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,GACL,OAAO,CAAC,MAAM,CAAC;IAuEZ,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;KACnB,GACL,OAAO,CAAC,YAAY,EAAE,CAAC;IAmEpB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAyCjD,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAChD,OAAO,CAAC,QAAQ,EAAE,CAAC;IAuChB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgC/D,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAcxD;AAKD,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED,eAAe,aAAa,CAAC"}