@exulu/backend 1.4.0 → 1.4.1
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/CHANGELOG.md +3 -3
- package/dist/index.cjs +11 -6
- package/dist/index.js +11 -6
- package/package.json +1 -1
- package/README.md +0 -176
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
## [1.4.1](https://github.com/Qventu/exulu-backend/compare/v1.4.0...v1.4.1) (2025-07-31)
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
###
|
|
4
|
+
### Bug Fixes
|
|
5
5
|
|
|
6
|
-
*
|
|
6
|
+
* add debugging for db connect ([ed1713a](https://github.com/Qventu/exulu-backend/commit/ed1713a89902c5c9c6314790448facf66017afbc))
|
|
7
7
|
|
|
8
8
|
# [1.1.0](https://github.com/Qventu/exulu-backend/compare/v1.0.1...v1.1.0) (2025-07-30)
|
|
9
9
|
|
package/dist/index.cjs
CHANGED
|
@@ -120,7 +120,12 @@ var db = {};
|
|
|
120
120
|
async function postgresClient() {
|
|
121
121
|
if (!db["exulu"]) {
|
|
122
122
|
try {
|
|
123
|
-
console.log("[EXULU]
|
|
123
|
+
console.log("[EXULU] Connecting to exulu database.");
|
|
124
|
+
console.log("[EXULU] POSTGRES_DB_HOST:", process.env.POSTGRES_DB_HOST);
|
|
125
|
+
console.log("[EXULU] POSTGRES_DB_PORT:", process.env.POSTGRES_DB_PORT);
|
|
126
|
+
console.log("[EXULU] POSTGRES_DB_USER:", process.env.POSTGRES_DB_USER);
|
|
127
|
+
console.log("[EXULU] POSTGRES_DB_PASSWORD:", process.env.POSTGRES_DB_PASSWORD);
|
|
128
|
+
console.log("[EXULU] POSTGRES_DB_SSL:", process.env.POSTGRES_DB_SSL);
|
|
124
129
|
const knex = (0, import_knex.default)({
|
|
125
130
|
client: "pg",
|
|
126
131
|
connection: {
|
|
@@ -726,7 +731,7 @@ var up = async function(knex) {
|
|
|
726
731
|
}
|
|
727
732
|
};
|
|
728
733
|
var execute = async () => {
|
|
729
|
-
console.log("[EXULU] Initializing database.");
|
|
734
|
+
console.log("[EXULU] Initializing Exulu IMP database.");
|
|
730
735
|
const { db: db2 } = await postgresClient();
|
|
731
736
|
await up(db2);
|
|
732
737
|
console.log("[EXULU] Inserting default user and admin role.");
|
|
@@ -4385,14 +4390,14 @@ var preprocessInputs = async (data) => {
|
|
|
4385
4390
|
return data;
|
|
4386
4391
|
};
|
|
4387
4392
|
var getPresignedFileUrl = async (key) => {
|
|
4388
|
-
if (!process.env.
|
|
4389
|
-
throw new Error("Missing process.env.
|
|
4393
|
+
if (!process.env.NEXT_BACKEND) {
|
|
4394
|
+
throw new Error("Missing process.env.NEXT_BACKEND");
|
|
4390
4395
|
}
|
|
4391
4396
|
if (!process.env.INTERNAL_SECRET) {
|
|
4392
|
-
throw new Error("Missing process.env.
|
|
4397
|
+
throw new Error("Missing process.env.NEXT_BACKEND");
|
|
4393
4398
|
}
|
|
4394
4399
|
console.log(`[EXULU] fetching presigned url for file with key: ${key}`);
|
|
4395
|
-
let url = `${process.env.
|
|
4400
|
+
let url = `${process.env.NEXT_BACKEND}/s3/download?key=${key}`;
|
|
4396
4401
|
const response = await fetch(url, {
|
|
4397
4402
|
method: "GET",
|
|
4398
4403
|
headers: {
|
package/dist/index.js
CHANGED
|
@@ -77,7 +77,12 @@ var db = {};
|
|
|
77
77
|
async function postgresClient() {
|
|
78
78
|
if (!db["exulu"]) {
|
|
79
79
|
try {
|
|
80
|
-
console.log("[EXULU]
|
|
80
|
+
console.log("[EXULU] Connecting to exulu database.");
|
|
81
|
+
console.log("[EXULU] POSTGRES_DB_HOST:", process.env.POSTGRES_DB_HOST);
|
|
82
|
+
console.log("[EXULU] POSTGRES_DB_PORT:", process.env.POSTGRES_DB_PORT);
|
|
83
|
+
console.log("[EXULU] POSTGRES_DB_USER:", process.env.POSTGRES_DB_USER);
|
|
84
|
+
console.log("[EXULU] POSTGRES_DB_PASSWORD:", process.env.POSTGRES_DB_PASSWORD);
|
|
85
|
+
console.log("[EXULU] POSTGRES_DB_SSL:", process.env.POSTGRES_DB_SSL);
|
|
81
86
|
const knex = Knex({
|
|
82
87
|
client: "pg",
|
|
83
88
|
connection: {
|
|
@@ -683,7 +688,7 @@ var up = async function(knex) {
|
|
|
683
688
|
}
|
|
684
689
|
};
|
|
685
690
|
var execute = async () => {
|
|
686
|
-
console.log("[EXULU] Initializing database.");
|
|
691
|
+
console.log("[EXULU] Initializing Exulu IMP database.");
|
|
687
692
|
const { db: db2 } = await postgresClient();
|
|
688
693
|
await up(db2);
|
|
689
694
|
console.log("[EXULU] Inserting default user and admin role.");
|
|
@@ -4342,14 +4347,14 @@ var preprocessInputs = async (data) => {
|
|
|
4342
4347
|
return data;
|
|
4343
4348
|
};
|
|
4344
4349
|
var getPresignedFileUrl = async (key) => {
|
|
4345
|
-
if (!process.env.
|
|
4346
|
-
throw new Error("Missing process.env.
|
|
4350
|
+
if (!process.env.NEXT_BACKEND) {
|
|
4351
|
+
throw new Error("Missing process.env.NEXT_BACKEND");
|
|
4347
4352
|
}
|
|
4348
4353
|
if (!process.env.INTERNAL_SECRET) {
|
|
4349
|
-
throw new Error("Missing process.env.
|
|
4354
|
+
throw new Error("Missing process.env.NEXT_BACKEND");
|
|
4350
4355
|
}
|
|
4351
4356
|
console.log(`[EXULU] fetching presigned url for file with key: ${key}`);
|
|
4352
|
-
let url = `${process.env.
|
|
4357
|
+
let url = `${process.env.NEXT_BACKEND}/s3/download?key=${key}`;
|
|
4353
4358
|
const response = await fetch(url, {
|
|
4354
4359
|
method: "GET",
|
|
4355
4360
|
headers: {
|
package/package.json
CHANGED
package/README.md
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
# Exulu - AI Agent Management Platform
|
|
2
|
-
|
|
3
|
-
<div align="center">
|
|
4
|
-
|
|
5
|
-

|
|
6
|
-
|
|
7
|
-
**A powerful platform for creating, managing, and orchestrating AI agents with enterprise-grade features**
|
|
8
|
-
|
|
9
|
-
[](https://nodejs.org/)
|
|
10
|
-
[](https://www.typescriptlang.org/)
|
|
11
|
-
[](LICENSE)
|
|
12
|
-
|
|
13
|
-
</div>
|
|
14
|
-
|
|
15
|
-
## 🚀 Overview
|
|
16
|
-
|
|
17
|
-
Exulu is a comprehensive AI agent management platform that enables you to create, deploy, and orchestrate intelligent agents with enterprise-grade features. Built with TypeScript, it provides a robust backend infrastructure and modern frontend interface for seamless agent management and interaction.
|
|
18
|
-
|
|
19
|
-
### Key Features
|
|
20
|
-
|
|
21
|
-
- 🤖 **AI Agent Management**: Create and manage multiple AI agents with different capabilities
|
|
22
|
-
- 🔧 **Tool Integration**: Extend agent capabilities with custom tools and workflows
|
|
23
|
-
- 🗄️ **Vector Database**: PostgreSQL with pgvector for semantic search and RAG
|
|
24
|
-
- 📊 **Queue Management**: BullMQ for background job processing
|
|
25
|
-
- 🔐 **Authentication**: JWT and NextAuth support with role-based access
|
|
26
|
-
- 📝 **GraphQL API**: Flexible API with Apollo Server integration
|
|
27
|
-
- 🎯 **Agent Evaluation**: Built-in evaluation framework for agent performance
|
|
28
|
-
- 🔄 **Workflow Orchestration**: Create complex multi-agent workflows
|
|
29
|
-
- 📦 **File Management**: S3-compatible storage with Uppy integration
|
|
30
|
-
- 🎨 **Modern UI**: Next.js frontend.
|
|
31
|
-
|
|
32
|
-
## 🏗️ Architecture
|
|
33
|
-
|
|
34
|
-
The overall project is organized into 5 main repositories:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
1. Backend: Express.js server with endpoints for agents, contexts, jobs, users, roles and workflows.
|
|
38
|
-
2. Frontend: Next.js application.
|
|
39
|
-
3. Example: example Exulu implementation with example agents, contexts and tools.
|
|
40
|
-
4. CLI: command-line interface tools.
|
|
41
|
-
5. Tools: catalogue of ExuluTools that can be installed and added to agents.
|
|
42
|
-
6. Agents: catalogue of template agents you can install and add to your Exulu instance.
|
|
43
|
-
|
|
44
|
-
### Core Components
|
|
45
|
-
|
|
46
|
-
- **ExuluApp**: Main application class that initializes the platform
|
|
47
|
-
- **Agents**: AI agent definitions with configurable capabilities
|
|
48
|
-
- **Tools**: Available actions and utilities for agents
|
|
49
|
-
- **Contexts**: Vectorized knowledge sources agents can search through and use in their reasoning and response
|
|
50
|
-
- **Workflows**: Predefined agent interaction patterns
|
|
51
|
-
- **Embedders**: Text embedding models for semantic search
|
|
52
|
-
|
|
53
|
-
## 🛠️ Prerequisites
|
|
54
|
-
|
|
55
|
-
- **Node.js** (v20.10.0 or higher)
|
|
56
|
-
- **PostgreSQL** with pgvector extension
|
|
57
|
-
- **Redis** (optional, for BullMQ workers)
|
|
58
|
-
- **Docker** (optional, for containerized deployment)
|
|
59
|
-
|
|
60
|
-
## 📚 Usage Examples
|
|
61
|
-
|
|
62
|
-
### Creating an Agent
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
import { ExuluApp, ExuluAgent } from "@exulu/backend";
|
|
66
|
-
|
|
67
|
-
const exulu = new ExuluApp();
|
|
68
|
-
|
|
69
|
-
const myAgent = new ExuluAgent({
|
|
70
|
-
id: "my-custom-agent",
|
|
71
|
-
name: "My Custom Agent",
|
|
72
|
-
description: "A custom AI agent for specific tasks",
|
|
73
|
-
type: "agent",
|
|
74
|
-
capabilities: {
|
|
75
|
-
tools: true,
|
|
76
|
-
images: [],
|
|
77
|
-
files: [],
|
|
78
|
-
audio: [],
|
|
79
|
-
video: []
|
|
80
|
-
},
|
|
81
|
-
config: {
|
|
82
|
-
model: "gpt-4",
|
|
83
|
-
// ... other configuration
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
const server = await exulu.create({
|
|
88
|
-
config: {
|
|
89
|
-
workers: { enabled: false },
|
|
90
|
-
MCP: { enabled: true }
|
|
91
|
-
},
|
|
92
|
-
contexts: [],
|
|
93
|
-
tools: [],
|
|
94
|
-
agents: [myAgent],
|
|
95
|
-
workflows: []
|
|
96
|
-
});
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Using the CLI
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
# Install CLI globally
|
|
103
|
-
npm install -g @exulu/cli
|
|
104
|
-
|
|
105
|
-
# Run CLI
|
|
106
|
-
exulu
|
|
107
|
-
|
|
108
|
-
# Available commands:
|
|
109
|
-
# - Start Claude Code
|
|
110
|
-
# - List agents
|
|
111
|
-
# - List contexts
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## 🔧 Configuration
|
|
115
|
-
|
|
116
|
-
### Environment Variables
|
|
117
|
-
|
|
118
|
-
Create `.env` files in both `frontend/` and `backend/` directories. Use the `.env.preview` files for reference.
|
|
119
|
-
|
|
120
|
-
#### Backend Environment Variables
|
|
121
|
-
|
|
122
|
-
```env
|
|
123
|
-
# Database
|
|
124
|
-
DATABASE_URL=postgresql://username:password@localhost:5432/exulu
|
|
125
|
-
REDIS_URL=redis://localhost:6379
|
|
126
|
-
|
|
127
|
-
# Authentication
|
|
128
|
-
JWT_SECRET=your-jwt-secret
|
|
129
|
-
NEXTAUTH_SECRET=your-nextauth-secret
|
|
130
|
-
|
|
131
|
-
# AI Providers
|
|
132
|
-
OPENAI_API_KEY=your-openai-key
|
|
133
|
-
ANTHROPIC_API_KEY=your-anthropic-key
|
|
134
|
-
|
|
135
|
-
# File Storage
|
|
136
|
-
S3_BUCKET=your-s3-bucket
|
|
137
|
-
S3_REGION=your-s3-region
|
|
138
|
-
AWS_ACCESS_KEY_ID=your-aws-key
|
|
139
|
-
AWS_SECRET_ACCESS_KEY=your-aws-secret
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
#### Frontend Environment Variables
|
|
143
|
-
|
|
144
|
-
```env
|
|
145
|
-
# API Configuration
|
|
146
|
-
NEXT_PUBLIC_API_URL=http://localhost:9001
|
|
147
|
-
NEXT_PUBLIC_GRAPHQL_URL=http://localhost:9001/graphql
|
|
148
|
-
|
|
149
|
-
# Authentication
|
|
150
|
-
NEXTAUTH_URL=http://localhost:3020
|
|
151
|
-
NEXTAUTH_SECRET=your-nextauth-secret
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### Development Guidelines
|
|
155
|
-
|
|
156
|
-
- Follow TypeScript best practices
|
|
157
|
-
- Use conventional commits
|
|
158
|
-
- Write comprehensive tests
|
|
159
|
-
- Update documentation
|
|
160
|
-
- Follow the existing code style
|
|
161
|
-
|
|
162
|
-
## 📄 License
|
|
163
|
-
|
|
164
|
-
This project is licensed under a private license - see the [LICENSE](LICENSE) file for details.
|
|
165
|
-
|
|
166
|
-
## 👥 Authors
|
|
167
|
-
|
|
168
|
-
- **Qventu Bv.** - *Initial work*
|
|
169
|
-
|
|
170
|
-
---
|
|
171
|
-
|
|
172
|
-
<div align="center">
|
|
173
|
-
|
|
174
|
-
**Exulu** - Intelligence Management Platform
|
|
175
|
-
|
|
176
|
-
</div>
|