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.
- package/.env.example +49 -0
- package/README.md +161 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +336 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/index.d.ts +37 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +68 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/models.d.ts +17 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +128 -0
- package/dist/config/models.js.map +1 -0
- package/dist/core/agents/agent-factory.d.ts +31 -0
- package/dist/core/agents/agent-factory.d.ts.map +1 -0
- package/dist/core/agents/agent-factory.js +151 -0
- package/dist/core/agents/agent-factory.js.map +1 -0
- package/dist/core/agents/base-agent.d.ts +51 -0
- package/dist/core/agents/base-agent.d.ts.map +1 -0
- package/dist/core/agents/base-agent.js +245 -0
- package/dist/core/agents/base-agent.js.map +1 -0
- package/dist/core/agents/index.d.ts +8 -0
- package/dist/core/agents/index.d.ts.map +1 -0
- package/dist/core/agents/index.js +9 -0
- package/dist/core/agents/index.js.map +1 -0
- package/dist/core/agents/personalities/automation.d.ts +14 -0
- package/dist/core/agents/personalities/automation.d.ts.map +1 -0
- package/dist/core/agents/personalities/automation.js +146 -0
- package/dist/core/agents/personalities/automation.js.map +1 -0
- package/dist/core/agents/personalities/chat.d.ts +10 -0
- package/dist/core/agents/personalities/chat.d.ts.map +1 -0
- package/dist/core/agents/personalities/chat.js +132 -0
- package/dist/core/agents/personalities/chat.js.map +1 -0
- package/dist/core/agents/personalities/coding.d.ts +16 -0
- package/dist/core/agents/personalities/coding.d.ts.map +1 -0
- package/dist/core/agents/personalities/coding.js +166 -0
- package/dist/core/agents/personalities/coding.js.map +1 -0
- package/dist/core/agents/personalities/research.d.ts +13 -0
- package/dist/core/agents/personalities/research.d.ts.map +1 -0
- package/dist/core/agents/personalities/research.js +133 -0
- package/dist/core/agents/personalities/research.js.map +1 -0
- package/dist/core/agents/types.d.ts +102 -0
- package/dist/core/agents/types.d.ts.map +1 -0
- package/dist/core/agents/types.js +2 -0
- package/dist/core/agents/types.js.map +1 -0
- package/dist/core/orchestrator/graph.d.ts +118 -0
- package/dist/core/orchestrator/graph.d.ts.map +1 -0
- package/dist/core/orchestrator/graph.js +233 -0
- package/dist/core/orchestrator/graph.js.map +1 -0
- package/dist/database/client.d.ts +19 -0
- package/dist/database/client.d.ts.map +1 -0
- package/dist/database/client.js +95 -0
- package/dist/database/client.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/openrouter-client.d.ts +45 -0
- package/dist/llm/openrouter-client.d.ts.map +1 -0
- package/dist/llm/openrouter-client.js +155 -0
- package/dist/llm/openrouter-client.js.map +1 -0
- package/dist/memory/conversation/index.d.ts +37 -0
- package/dist/memory/conversation/index.d.ts.map +1 -0
- package/dist/memory/conversation/index.js +196 -0
- package/dist/memory/conversation/index.js.map +1 -0
- package/dist/memory/index.d.ts +4 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +5 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/knowledge-base/index.d.ts +51 -0
- package/dist/memory/knowledge-base/index.d.ts.map +1 -0
- package/dist/memory/knowledge-base/index.js +222 -0
- package/dist/memory/knowledge-base/index.js.map +1 -0
- package/dist/memory/longterm/vector-store.d.ts +44 -0
- package/dist/memory/longterm/vector-store.d.ts.map +1 -0
- package/dist/memory/longterm/vector-store.js +229 -0
- package/dist/memory/longterm/vector-store.js.map +1 -0
- package/dist/safety/audit-logger.d.ts +68 -0
- package/dist/safety/audit-logger.d.ts.map +1 -0
- package/dist/safety/audit-logger.js +215 -0
- package/dist/safety/audit-logger.js.map +1 -0
- package/dist/safety/guardrails/input-guardrail.d.ts +21 -0
- package/dist/safety/guardrails/input-guardrail.d.ts.map +1 -0
- package/dist/safety/guardrails/input-guardrail.js +145 -0
- package/dist/safety/guardrails/input-guardrail.js.map +1 -0
- package/dist/safety/guardrails/output-guardrail.d.ts +18 -0
- package/dist/safety/guardrails/output-guardrail.d.ts.map +1 -0
- package/dist/safety/guardrails/output-guardrail.js +125 -0
- package/dist/safety/guardrails/output-guardrail.js.map +1 -0
- package/dist/safety/index.d.ts +4 -0
- package/dist/safety/index.d.ts.map +1 -0
- package/dist/safety/index.js +5 -0
- package/dist/safety/index.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +94 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/logger.js.map +1 -0
- package/docker/init-db.sql +149 -0
- package/docker/sandbox/Dockerfile.sandbox +29 -0
- package/docker-compose.yml +61 -0
- package/package.json +80 -0
- package/src/cli/index.ts +392 -0
- package/src/config/index.ts +85 -0
- package/src/config/models.ts +156 -0
- package/src/core/agents/agent-factory.ts +192 -0
- package/src/core/agents/base-agent.ts +333 -0
- package/src/core/agents/index.ts +27 -0
- package/src/core/agents/personalities/automation.ts +202 -0
- package/src/core/agents/personalities/chat.ts +159 -0
- package/src/core/agents/personalities/coding.ts +227 -0
- package/src/core/agents/personalities/research.ts +177 -0
- package/src/core/agents/types.ts +124 -0
- package/src/core/orchestrator/graph.ts +305 -0
- package/src/database/client.ts +109 -0
- package/src/index.ts +104 -0
- package/src/llm/openrouter-client.ts +218 -0
- package/src/memory/conversation/index.ts +313 -0
- package/src/memory/index.ts +23 -0
- package/src/memory/knowledge-base/index.ts +357 -0
- package/src/memory/longterm/vector-store.ts +364 -0
- package/src/safety/audit-logger.ts +357 -0
- package/src/safety/guardrails/input-guardrail.ts +191 -0
- package/src/safety/guardrails/output-guardrail.ts +160 -0
- package/src/safety/index.ts +21 -0
- package/src/utils/errors.ts +120 -0
- package/src/utils/logger.ts +74 -0
- 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 @@
|
|
|
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"}
|