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
package/.env.example ADDED
@@ -0,0 +1,49 @@
1
+ # OpenRouter Configuration
2
+ OPENROUTER_API_KEY=your_openrouter_api_key_here
3
+ OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
4
+
5
+ # Default Models (via OpenRouter)
6
+ DEFAULT_MODEL=anthropic/claude-3.5-sonnet
7
+ FAST_MODEL=anthropic/claude-3-haiku
8
+ EMBEDDING_MODEL=openai/text-embedding-3-small
9
+
10
+ # Database Configuration
11
+ DB_HOST=localhost
12
+ DB_PORT=5432
13
+ DB_USER=familyai
14
+ DB_PASSWORD=familyai123
15
+ DB_NAME=familyai
16
+ DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
17
+
18
+ # Redis Configuration
19
+ REDIS_HOST=localhost
20
+ REDIS_PORT=6379
21
+ REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}
22
+
23
+ # API Configuration
24
+ API_PORT=3000
25
+ API_HOST=0.0.0.0
26
+
27
+ # Safety Configuration
28
+ ENABLE_CONTENT_FILTER=true
29
+ ENABLE_PII_DETECTION=true
30
+ ENABLE_AUDIT_LOGGING=true
31
+ MAX_TOKENS_PER_REQUEST=4096
32
+ RATE_LIMIT_MAX=100
33
+ RATE_LIMIT_WINDOW_MS=60000
34
+
35
+ # Sandbox Configuration
36
+ SANDBOX_ENABLED=true
37
+ SANDBOX_TIMEOUT_MS=30000
38
+ SANDBOX_MEMORY_LIMIT_MB=256
39
+
40
+ # Logging
41
+ LOG_LEVEL=info
42
+ LOG_FORMAT=json
43
+
44
+ # Web Search (optional - for research agent)
45
+ TAVILY_API_KEY=your_tavily_api_key_here
46
+ SERP_API_KEY=your_serp_api_key_here
47
+
48
+ # Environment
49
+ NODE_ENV=development
package/README.md ADDED
@@ -0,0 +1,161 @@
1
+ # Family AI Agent
2
+
3
+ Multi-agent AI system with memory and autonomous capabilities. Built with TypeScript, LangGraph.js, and OpenRouter.
4
+
5
+ ## Features
6
+
7
+ - **Multi-Agent Architecture**: Supervisor agent routes tasks to specialized agents
8
+ - šŸ—£ļø **Kakak (Chat)**: General conversation and Q&A
9
+ - šŸ” **Researcher**: Web search and information gathering
10
+ - šŸ’» **Coder (Adik)**: Code generation, debugging, and review
11
+ - āš™ļø **Automator**: Task scheduling and workflow automation
12
+
13
+ - **Memory System**:
14
+ - Conversation memory (session context)
15
+ - Long-term memory (vector search with pgvector)
16
+ - Knowledge base (RAG for documents)
17
+
18
+ - **Safety Features**:
19
+ - Input validation and content filtering
20
+ - Output sanitization and PII detection
21
+ - Audit logging
22
+ - Sandboxed code execution (Docker)
23
+
24
+ ## Quick Start
25
+
26
+ ### Prerequisites
27
+
28
+ - Node.js 20+
29
+ - Docker & Docker Compose
30
+ - OpenRouter API key
31
+
32
+ ### Installation
33
+
34
+ ```bash
35
+ # Clone and install dependencies
36
+ npm install
37
+
38
+ # Copy environment file and configure
39
+ cp .env.example .env
40
+ # Edit .env with your OPENROUTER_API_KEY
41
+
42
+ # Start database
43
+ docker-compose up -d
44
+
45
+ # Run the CLI
46
+ npm run cli chat
47
+ ```
48
+
49
+ ### CLI Commands
50
+
51
+ ```bash
52
+ # Interactive chat mode
53
+ npm run cli chat
54
+
55
+ # Single question
56
+ npm run cli ask "How do I create a REST API in Node.js?"
57
+
58
+ # Upload document to knowledge base
59
+ npm run cli upload ./document.pdf
60
+
61
+ # Search knowledge base
62
+ npm run cli search "authentication patterns"
63
+
64
+ # Check system status
65
+ npm run cli status
66
+ ```
67
+
68
+ ## Programmatic Usage
69
+
70
+ ```typescript
71
+ import { quickStart } from 'family-ai-agent';
72
+
73
+ const ai = await quickStart();
74
+
75
+ // Ask questions
76
+ const response = await ai.ask("Write a function to calculate fibonacci");
77
+ console.log(response);
78
+
79
+ // Store memories
80
+ await ai.remember("User prefers TypeScript over JavaScript");
81
+
82
+ // Search memories
83
+ const memories = await ai.search("programming preferences");
84
+
85
+ // Cleanup
86
+ await ai.shutdown();
87
+ ```
88
+
89
+ ## Architecture
90
+
91
+ ```
92
+ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
93
+ │ CLI / API Interface │
94
+ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
95
+ │
96
+ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
97
+ │ Supervisor Agent (Coordinator) │
98
+ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │
99
+ │ │ Research │ Coding │Automation│ Chat │ │
100
+ │ │ Agent │ Agent │ Agent │ Agent │ │
101
+ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │
102
+ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
103
+ │
104
+ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
105
+ │ Memory Layer │
106
+ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │
107
+ │ │Conversation│ Long-term │ Knowledge Base │ │
108
+ │ │ Memory │ Memory │ (RAG) │ │
109
+ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │
110
+ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
111
+ ```
112
+
113
+ ## Configuration
114
+
115
+ Key environment variables:
116
+
117
+ | Variable | Description | Default |
118
+ |----------|-------------|---------|
119
+ | `OPENROUTER_API_KEY` | OpenRouter API key | Required |
120
+ | `DEFAULT_MODEL` | Default LLM model | `anthropic/claude-3.5-sonnet` |
121
+ | `DB_HOST` | PostgreSQL host | `localhost` |
122
+ | `ENABLE_CONTENT_FILTER` | Enable safety filters | `true` |
123
+ | `ENABLE_AUDIT_LOGGING` | Enable audit logs | `true` |
124
+
125
+ ## Development
126
+
127
+ ```bash
128
+ # Development mode with hot reload
129
+ npm run dev
130
+
131
+ # Build
132
+ npm run build
133
+
134
+ # Run tests
135
+ npm test
136
+
137
+ # Lint
138
+ npm run lint
139
+ ```
140
+
141
+ ## Project Structure
142
+
143
+ ```
144
+ src/
145
+ ā”œā”€ā”€ core/
146
+ │ ā”œā”€ā”€ agents/ # Agent implementations
147
+ │ └── orchestrator/ # LangGraph workflow
148
+ ā”œā”€ā”€ memory/
149
+ │ ā”œā”€ā”€ conversation/ # Session memory
150
+ │ ā”œā”€ā”€ longterm/ # Vector memory
151
+ │ └── knowledge-base/ # RAG system
152
+ ā”œā”€ā”€ safety/
153
+ │ └── guardrails/ # Input/output filtering
154
+ ā”œā”€ā”€ llm/ # OpenRouter client
155
+ ā”œā”€ā”€ api/ # REST API (future)
156
+ └── cli/ # CLI interface
157
+ ```
158
+
159
+ ## License
160
+
161
+ MIT
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,336 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import inquirer from 'inquirer';
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import boxen from 'boxen';
7
+ import { runOrchestrator } from '../core/orchestrator/graph.js';
8
+ import { getVectorStore } from '../memory/longterm/vector-store.js';
9
+ import { getConversationMemory } from '../memory/conversation/index.js';
10
+ import { getKnowledgeBase } from '../memory/knowledge-base/index.js';
11
+ import { validateInput } from '../safety/guardrails/input-guardrail.js';
12
+ import { validateOutput } from '../safety/guardrails/output-guardrail.js';
13
+ import { initDatabase, closePool } from '../database/client.js';
14
+ import { config } from '../config/index.js';
15
+ import { createLogger } from '../utils/logger.js';
16
+ import { nanoid } from 'nanoid';
17
+ const logger = createLogger('CLI');
18
+ const program = new Command();
19
+ // Display welcome banner
20
+ function showBanner() {
21
+ const banner = boxen(chalk.bold.cyan('Family AI Agent') +
22
+ '\n\n' +
23
+ chalk.white('Your AI Family - Ready to Help') +
24
+ '\n' +
25
+ chalk.gray('Kakak (Chat) | Researcher | Coder | Automator'), {
26
+ padding: 1,
27
+ margin: 1,
28
+ borderStyle: 'round',
29
+ borderColor: 'cyan',
30
+ });
31
+ console.log(banner);
32
+ }
33
+ // Interactive chat mode
34
+ async function startInteractiveChat() {
35
+ showBanner();
36
+ const threadId = `thread-${nanoid(8)}`;
37
+ const conversationMemory = getConversationMemory();
38
+ const vectorStore = getVectorStore();
39
+ console.log(chalk.gray(`\nSession: ${threadId}`));
40
+ console.log(chalk.gray('Type "exit" or "quit" to end the session'));
41
+ console.log(chalk.gray('Type "clear" to start a new conversation'));
42
+ console.log(chalk.gray('Type "memory" to view recent memories'));
43
+ console.log(chalk.gray('Type "help" for more commands\n'));
44
+ let conversationId = null;
45
+ while (true) {
46
+ try {
47
+ const { input } = await inquirer.prompt([
48
+ {
49
+ type: 'input',
50
+ name: 'input',
51
+ message: chalk.green('You:'),
52
+ prefix: '',
53
+ },
54
+ ]);
55
+ const trimmedInput = input.trim();
56
+ // Handle special commands
57
+ if (['exit', 'quit', 'bye'].includes(trimmedInput.toLowerCase())) {
58
+ console.log(chalk.cyan('\nGoodbye! See you next time. šŸ‘‹\n'));
59
+ break;
60
+ }
61
+ if (trimmedInput.toLowerCase() === 'clear') {
62
+ conversationId = null;
63
+ console.log(chalk.yellow('\nConversation cleared. Starting fresh!\n'));
64
+ continue;
65
+ }
66
+ if (trimmedInput.toLowerCase() === 'help') {
67
+ showHelp();
68
+ continue;
69
+ }
70
+ if (trimmedInput.toLowerCase() === 'memory') {
71
+ await showMemories();
72
+ continue;
73
+ }
74
+ if (!trimmedInput) {
75
+ continue;
76
+ }
77
+ // Validate input
78
+ const inputValidation = await validateInput(trimmedInput);
79
+ if (!inputValidation.valid) {
80
+ console.log(chalk.red(`\nāŒ ${inputValidation.blockedReason}\n`));
81
+ continue;
82
+ }
83
+ if (inputValidation.warnings.length > 0) {
84
+ for (const warning of inputValidation.warnings) {
85
+ console.log(chalk.yellow(`āš ļø ${warning}`));
86
+ }
87
+ }
88
+ // Create conversation if needed
89
+ if (!conversationId) {
90
+ conversationId = await conversationMemory.createConversation(threadId);
91
+ }
92
+ // Save user message
93
+ await conversationMemory.addMessage(conversationId, 'user', trimmedInput);
94
+ // Retrieve relevant memories
95
+ const memories = await vectorStore.search(trimmedInput, { limit: 3 });
96
+ // Show thinking indicator
97
+ const spinner = ora({
98
+ text: chalk.gray('Thinking...'),
99
+ spinner: 'dots',
100
+ }).start();
101
+ try {
102
+ // Run the orchestrator
103
+ const result = await runOrchestrator(inputValidation.sanitizedInput, { threadId, conversationId }, memories);
104
+ spinner.stop();
105
+ // Validate and display output
106
+ const outputValidation = validateOutput(result.response);
107
+ const response = outputValidation.sanitizedOutput;
108
+ if (outputValidation.warnings.length > 0) {
109
+ for (const warning of outputValidation.warnings) {
110
+ console.log(chalk.yellow(`āš ļø ${warning}`));
111
+ }
112
+ }
113
+ // Display response with agent info
114
+ const agentNames = result.activeAgents?.map((a) => a.name).join(', ') || 'AI';
115
+ console.log(chalk.cyan(`\n${agentNames}:`));
116
+ console.log(response);
117
+ console.log();
118
+ // Save assistant message
119
+ await conversationMemory.addMessage(conversationId, 'assistant', response);
120
+ // Store important information in long-term memory (simple heuristic)
121
+ if (response.length > 200) {
122
+ await vectorStore.store(`Q: ${trimmedInput}\nA: ${response.slice(0, 500)}`, 'episodic', { importance: 0.6, metadata: { threadId } });
123
+ }
124
+ }
125
+ catch (error) {
126
+ spinner.stop();
127
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
128
+ console.log(chalk.red(`\nāŒ Error: ${errorMessage}\n`));
129
+ logger.error('Chat error', { error: errorMessage });
130
+ }
131
+ }
132
+ catch (error) {
133
+ // Handle Ctrl+C gracefully
134
+ if (error.name === 'ExitPromptError') {
135
+ console.log(chalk.cyan('\n\nGoodbye! šŸ‘‹\n'));
136
+ break;
137
+ }
138
+ throw error;
139
+ }
140
+ }
141
+ }
142
+ // Show help
143
+ function showHelp() {
144
+ console.log(chalk.bold('\nšŸ“š Available Commands:\n'));
145
+ console.log(chalk.white(' exit, quit, bye') + chalk.gray(' - End the session'));
146
+ console.log(chalk.white(' clear') + chalk.gray(' - Start a new conversation'));
147
+ console.log(chalk.white(' memory') + chalk.gray(' - View recent memories'));
148
+ console.log(chalk.white(' help') + chalk.gray(' - Show this help message'));
149
+ console.log();
150
+ console.log(chalk.bold('šŸ’” Tips:\n'));
151
+ console.log(chalk.gray(' • Ask about coding, research, or automation'));
152
+ console.log(chalk.gray(' • The system will route to the best agent'));
153
+ console.log(chalk.gray(' • Memories are saved for future context'));
154
+ console.log();
155
+ }
156
+ // Show recent memories
157
+ async function showMemories() {
158
+ console.log(chalk.bold('\n🧠 Recent Memories:\n'));
159
+ try {
160
+ const vectorStore = getVectorStore();
161
+ const memories = await vectorStore.search('recent conversation', {
162
+ limit: 5,
163
+ minSimilarity: 0.3,
164
+ });
165
+ if (memories.length === 0) {
166
+ console.log(chalk.gray(' No memories stored yet.'));
167
+ }
168
+ else {
169
+ for (const memory of memories) {
170
+ console.log(chalk.white(` [${memory.type}] `) + chalk.gray(memory.content.slice(0, 100) + '...'));
171
+ }
172
+ }
173
+ }
174
+ catch {
175
+ console.log(chalk.gray(' Unable to retrieve memories.'));
176
+ }
177
+ console.log();
178
+ }
179
+ // Single query mode
180
+ async function runQuery(query) {
181
+ const spinner = ora('Processing...').start();
182
+ try {
183
+ const inputValidation = await validateInput(query);
184
+ if (!inputValidation.valid) {
185
+ spinner.fail(inputValidation.blockedReason);
186
+ return;
187
+ }
188
+ const vectorStore = getVectorStore();
189
+ const memories = await vectorStore.search(query, { limit: 3 });
190
+ const result = await runOrchestrator(inputValidation.sanitizedInput, {}, memories);
191
+ spinner.stop();
192
+ const outputValidation = validateOutput(result.response);
193
+ console.log(outputValidation.sanitizedOutput);
194
+ }
195
+ catch (error) {
196
+ spinner.fail('Query failed');
197
+ console.error(error instanceof Error ? error.message : 'Unknown error');
198
+ process.exit(1);
199
+ }
200
+ }
201
+ // Main program setup
202
+ program
203
+ .name('family-ai')
204
+ .description('Family AI Agent - Your AI Family for All Tasks')
205
+ .version('1.0.0');
206
+ program
207
+ .command('chat')
208
+ .description('Start interactive chat mode')
209
+ .action(async () => {
210
+ try {
211
+ await initDatabase();
212
+ await startInteractiveChat();
213
+ }
214
+ catch (error) {
215
+ console.error(chalk.red('Failed to start chat:'), error);
216
+ process.exit(1);
217
+ }
218
+ finally {
219
+ await closePool();
220
+ }
221
+ });
222
+ program
223
+ .command('ask <query>')
224
+ .description('Ask a single question')
225
+ .action(async (query) => {
226
+ try {
227
+ await initDatabase();
228
+ await runQuery(query);
229
+ }
230
+ catch (error) {
231
+ console.error(chalk.red('Failed:'), error);
232
+ process.exit(1);
233
+ }
234
+ finally {
235
+ await closePool();
236
+ }
237
+ });
238
+ program
239
+ .command('upload <filepath>')
240
+ .description('Upload a document to the knowledge base')
241
+ .action(async (filepath) => {
242
+ const spinner = ora('Uploading document...').start();
243
+ try {
244
+ await initDatabase();
245
+ const fs = await import('fs/promises');
246
+ const path = await import('path');
247
+ const content = await fs.readFile(filepath, 'utf-8');
248
+ const filename = path.basename(filepath);
249
+ const stats = await fs.stat(filepath);
250
+ const kb = getKnowledgeBase();
251
+ const docId = await kb.addDocument(content, filename, {
252
+ fileSize: stats.size,
253
+ fileType: path.extname(filepath),
254
+ });
255
+ spinner.succeed(`Document uploaded: ${docId}`);
256
+ }
257
+ catch (error) {
258
+ spinner.fail('Upload failed');
259
+ console.error(error instanceof Error ? error.message : 'Unknown error');
260
+ process.exit(1);
261
+ }
262
+ finally {
263
+ await closePool();
264
+ }
265
+ });
266
+ program
267
+ .command('search <query>')
268
+ .description('Search the knowledge base')
269
+ .option('-l, --limit <number>', 'Maximum results', '5')
270
+ .action(async (query, options) => {
271
+ const spinner = ora('Searching...').start();
272
+ try {
273
+ await initDatabase();
274
+ const kb = getKnowledgeBase();
275
+ const results = await kb.search(query, {
276
+ limit: parseInt(options.limit, 10),
277
+ });
278
+ spinner.stop();
279
+ if (results.length === 0) {
280
+ console.log(chalk.yellow('No results found.'));
281
+ }
282
+ else {
283
+ console.log(chalk.bold(`\nFound ${results.length} results:\n`));
284
+ for (const result of results) {
285
+ console.log(chalk.white(`šŸ“„ ${result.filename}`));
286
+ console.log(chalk.gray(` Similarity: ${(result.similarity * 100).toFixed(1)}%`));
287
+ console.log(chalk.gray(` ${result.content.slice(0, 150)}...`));
288
+ console.log();
289
+ }
290
+ }
291
+ }
292
+ catch (error) {
293
+ spinner.fail('Search failed');
294
+ console.error(error instanceof Error ? error.message : 'Unknown error');
295
+ process.exit(1);
296
+ }
297
+ finally {
298
+ await closePool();
299
+ }
300
+ });
301
+ program
302
+ .command('status')
303
+ .description('Show system status')
304
+ .action(async () => {
305
+ try {
306
+ await initDatabase();
307
+ console.log(chalk.bold('\nšŸ¤– Family AI Agent Status\n'));
308
+ console.log(chalk.white('Database:'), chalk.green('Connected'));
309
+ console.log(chalk.white('Environment:'), chalk.cyan(config.NODE_ENV));
310
+ console.log(chalk.white('Default Model:'), chalk.cyan(config.DEFAULT_MODEL));
311
+ console.log(chalk.white('Safety Filters:'), config.ENABLE_CONTENT_FILTER ? chalk.green('Enabled') : chalk.yellow('Disabled'));
312
+ console.log(chalk.white('Audit Logging:'), config.ENABLE_AUDIT_LOGGING ? chalk.green('Enabled') : chalk.yellow('Disabled'));
313
+ console.log();
314
+ }
315
+ catch (error) {
316
+ console.log(chalk.white('Database:'), chalk.red('Disconnected'));
317
+ console.error(error instanceof Error ? error.message : 'Unknown error');
318
+ }
319
+ finally {
320
+ await closePool();
321
+ }
322
+ });
323
+ // Handle unhandled rejections
324
+ process.on('unhandledRejection', (error) => {
325
+ console.error(chalk.red('Unhandled error:'), error);
326
+ process.exit(1);
327
+ });
328
+ // Parse command line arguments
329
+ program.parse();
330
+ // If no command specified, start interactive chat
331
+ if (!process.argv.slice(2).length) {
332
+ initDatabase()
333
+ .then(() => startInteractiveChat())
334
+ .finally(() => closePool());
335
+ }
336
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export declare const config: {
2
+ OPENROUTER_API_KEY: string;
3
+ OPENROUTER_BASE_URL: string;
4
+ DEFAULT_MODEL: string;
5
+ FAST_MODEL: string;
6
+ EMBEDDING_MODEL: string;
7
+ DB_HOST: string;
8
+ DB_PORT: number;
9
+ DB_USER: string;
10
+ DB_PASSWORD: string;
11
+ DB_NAME: string;
12
+ REDIS_HOST: string;
13
+ REDIS_PORT: number;
14
+ API_PORT: number;
15
+ API_HOST: string;
16
+ ENABLE_CONTENT_FILTER: boolean;
17
+ ENABLE_PII_DETECTION: boolean;
18
+ ENABLE_AUDIT_LOGGING: boolean;
19
+ MAX_TOKENS_PER_REQUEST: number;
20
+ RATE_LIMIT_MAX: number;
21
+ RATE_LIMIT_WINDOW_MS: number;
22
+ SANDBOX_ENABLED: boolean;
23
+ SANDBOX_TIMEOUT_MS: number;
24
+ SANDBOX_MEMORY_LIMIT_MB: number;
25
+ LOG_LEVEL: "debug" | "info" | "warn" | "error";
26
+ LOG_FORMAT: "json" | "pretty";
27
+ NODE_ENV: "development" | "production" | "test";
28
+ DATABASE_URL?: string | undefined;
29
+ REDIS_URL?: string | undefined;
30
+ TAVILY_API_KEY?: string | undefined;
31
+ SERP_API_KEY?: string | undefined;
32
+ };
33
+ export declare const getDatabaseUrl: () => string;
34
+ export declare const getRedisUrl: () => string;
35
+ export declare const isProduction: () => boolean;
36
+ export declare const isDevelopment: () => boolean;
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAuEA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAe,CAAC;AAEnC,eAAO,MAAM,cAAc,QAAO,MAGjC,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,MAG9B,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,OAA2C,CAAC;AAC5E,eAAO,MAAM,aAAa,QAAO,OAA4C,CAAC"}