@exulu/backend 1.46.1 → 1.48.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/.agents/skills/mintlify/SKILL.md +347 -0
- package/.editorconfig +15 -0
- package/.eslintrc.json +52 -0
- package/.jscpd.json +18 -0
- package/.prettierignore +5 -0
- package/.prettierrc.json +12 -0
- package/CHANGELOG.md +2 -2
- package/README.md +747 -0
- package/SECURITY.md +5 -0
- package/dist/index.cjs +11747 -10227
- package/dist/index.d.cts +725 -667
- package/dist/index.d.ts +725 -667
- package/dist/index.js +12043 -10516
- package/ee/LICENSE.md +62 -0
- package/ee/agentic-retrieval/index.ts +1109 -0
- package/ee/documents/THIRD_PARTY_LICENSES/docling.txt +31 -0
- package/ee/documents/processing/build_pdf_processor.sh +35 -0
- package/ee/documents/processing/chunk_markdown.py +263 -0
- package/ee/documents/processing/doc_processor.ts +635 -0
- package/ee/documents/processing/pdf_processor.spec +115 -0
- package/ee/documents/processing/pdf_to_markdown.py +420 -0
- package/ee/documents/processing/requirements.txt +4 -0
- package/ee/entitlements.ts +49 -0
- package/ee/markdown.ts +686 -0
- package/ee/queues/decorator.ts +140 -0
- package/ee/queues/queues.ts +156 -0
- package/ee/queues/server.ts +6 -0
- package/ee/rbac-resolver.ts +51 -0
- package/ee/rbac-update.ts +111 -0
- package/ee/schemas.ts +348 -0
- package/ee/tokenizer.ts +80 -0
- package/ee/workers.ts +1423 -0
- package/eslint.config.js +88 -0
- package/jest.config.ts +25 -0
- package/license.md +73 -49
- package/mintlify-docs/.mintignore +7 -0
- package/mintlify-docs/AGENTS.md +33 -0
- package/mintlify-docs/CLAUDE.MD +50 -0
- package/mintlify-docs/CONTRIBUTING.md +32 -0
- package/mintlify-docs/LICENSE +21 -0
- package/mintlify-docs/README.md +55 -0
- package/mintlify-docs/ai-tools/claude-code.mdx +43 -0
- package/mintlify-docs/ai-tools/cursor.mdx +39 -0
- package/mintlify-docs/ai-tools/windsurf.mdx +39 -0
- package/mintlify-docs/api-reference/core-types/agent-types.mdx +110 -0
- package/mintlify-docs/api-reference/core-types/analytics-types.mdx +95 -0
- package/mintlify-docs/api-reference/core-types/configuration-types.mdx +83 -0
- package/mintlify-docs/api-reference/core-types/evaluation-types.mdx +106 -0
- package/mintlify-docs/api-reference/core-types/job-types.mdx +135 -0
- package/mintlify-docs/api-reference/core-types/overview.mdx +73 -0
- package/mintlify-docs/api-reference/core-types/prompt-types.mdx +102 -0
- package/mintlify-docs/api-reference/core-types/rbac-types.mdx +163 -0
- package/mintlify-docs/api-reference/core-types/session-types.mdx +77 -0
- package/mintlify-docs/api-reference/core-types/user-management.mdx +112 -0
- package/mintlify-docs/api-reference/core-types/workflow-types.mdx +88 -0
- package/mintlify-docs/api-reference/core-types.mdx +585 -0
- package/mintlify-docs/api-reference/dynamic-types.mdx +851 -0
- package/mintlify-docs/api-reference/endpoint/create.mdx +4 -0
- package/mintlify-docs/api-reference/endpoint/delete.mdx +4 -0
- package/mintlify-docs/api-reference/endpoint/get.mdx +4 -0
- package/mintlify-docs/api-reference/endpoint/webhook.mdx +4 -0
- package/mintlify-docs/api-reference/introduction.mdx +661 -0
- package/mintlify-docs/api-reference/mutations.mdx +1012 -0
- package/mintlify-docs/api-reference/openapi.json +217 -0
- package/mintlify-docs/api-reference/queries.mdx +1154 -0
- package/mintlify-docs/backend/introduction.mdx +218 -0
- package/mintlify-docs/changelog.mdx +387 -0
- package/mintlify-docs/community-edition.mdx +304 -0
- package/mintlify-docs/core/exulu-agent/api-reference.mdx +894 -0
- package/mintlify-docs/core/exulu-agent/configuration.mdx +690 -0
- package/mintlify-docs/core/exulu-agent/introduction.mdx +552 -0
- package/mintlify-docs/core/exulu-app/api-reference.mdx +481 -0
- package/mintlify-docs/core/exulu-app/configuration.mdx +319 -0
- package/mintlify-docs/core/exulu-app/introduction.mdx +117 -0
- package/mintlify-docs/core/exulu-authentication.mdx +810 -0
- package/mintlify-docs/core/exulu-chunkers/api-reference.mdx +1011 -0
- package/mintlify-docs/core/exulu-chunkers/configuration.mdx +596 -0
- package/mintlify-docs/core/exulu-chunkers/introduction.mdx +403 -0
- package/mintlify-docs/core/exulu-context/api-reference.mdx +911 -0
- package/mintlify-docs/core/exulu-context/configuration.mdx +648 -0
- package/mintlify-docs/core/exulu-context/introduction.mdx +394 -0
- package/mintlify-docs/core/exulu-database.mdx +811 -0
- package/mintlify-docs/core/exulu-default-agents.mdx +545 -0
- package/mintlify-docs/core/exulu-eval/api-reference.mdx +772 -0
- package/mintlify-docs/core/exulu-eval/configuration.mdx +680 -0
- package/mintlify-docs/core/exulu-eval/introduction.mdx +459 -0
- package/mintlify-docs/core/exulu-logging.mdx +464 -0
- package/mintlify-docs/core/exulu-otel.mdx +670 -0
- package/mintlify-docs/core/exulu-queues/api-reference.mdx +648 -0
- package/mintlify-docs/core/exulu-queues/configuration.mdx +650 -0
- package/mintlify-docs/core/exulu-queues/introduction.mdx +474 -0
- package/mintlify-docs/core/exulu-reranker/api-reference.mdx +630 -0
- package/mintlify-docs/core/exulu-reranker/configuration.mdx +663 -0
- package/mintlify-docs/core/exulu-reranker/introduction.mdx +516 -0
- package/mintlify-docs/core/exulu-tool/api-reference.mdx +723 -0
- package/mintlify-docs/core/exulu-tool/configuration.mdx +805 -0
- package/mintlify-docs/core/exulu-tool/introduction.mdx +539 -0
- package/mintlify-docs/core/exulu-variables/api-reference.mdx +699 -0
- package/mintlify-docs/core/exulu-variables/configuration.mdx +736 -0
- package/mintlify-docs/core/exulu-variables/introduction.mdx +511 -0
- package/mintlify-docs/development.mdx +94 -0
- package/mintlify-docs/docs.json +248 -0
- package/mintlify-docs/enterprise-edition.mdx +538 -0
- package/mintlify-docs/essentials/code.mdx +35 -0
- package/mintlify-docs/essentials/images.mdx +59 -0
- package/mintlify-docs/essentials/markdown.mdx +88 -0
- package/mintlify-docs/essentials/navigation.mdx +87 -0
- package/mintlify-docs/essentials/reusable-snippets.mdx +110 -0
- package/mintlify-docs/essentials/settings.mdx +318 -0
- package/mintlify-docs/favicon.svg +3 -0
- package/mintlify-docs/frontend/introduction.mdx +39 -0
- package/mintlify-docs/getting-started.mdx +267 -0
- package/mintlify-docs/guides/custom-agent.mdx +608 -0
- package/mintlify-docs/guides/first-agent.mdx +315 -0
- package/mintlify-docs/images/admin_ui.png +0 -0
- package/mintlify-docs/images/contexts.png +0 -0
- package/mintlify-docs/images/create_agents.png +0 -0
- package/mintlify-docs/images/evals.png +0 -0
- package/mintlify-docs/images/graphql.png +0 -0
- package/mintlify-docs/images/graphql_api.png +0 -0
- package/mintlify-docs/images/hero-dark.png +0 -0
- package/mintlify-docs/images/hero-light.png +0 -0
- package/mintlify-docs/images/hero.png +0 -0
- package/mintlify-docs/images/knowledge_sources.png +0 -0
- package/mintlify-docs/images/mcp.png +0 -0
- package/mintlify-docs/images/scaling.png +0 -0
- package/mintlify-docs/index.mdx +411 -0
- package/mintlify-docs/logo/dark.svg +9 -0
- package/mintlify-docs/logo/light.svg +9 -0
- package/mintlify-docs/partners.mdx +558 -0
- package/mintlify-docs/products.mdx +77 -0
- package/mintlify-docs/snippets/snippet-intro.mdx +4 -0
- package/mintlify-docs/styles.css +207 -0
- package/package.json +35 -4
- package/skills-lock.json +10 -0
- package/types/context-processor.ts +45 -0
- package/types/exulu-table-definition.ts +79 -0
- package/types/file-types.ts +18 -0
- package/types/models/agent.ts +10 -12
- package/types/models/exulu-agent-tool-config.ts +11 -0
- package/types/models/rate-limiter-rules.ts +7 -0
- package/types/provider-config.ts +21 -0
- package/types/queue-config.ts +16 -0
- package/types/rbac-rights-modes.ts +1 -0
- package/types/statistics.ts +20 -0
- package/types/workflow.ts +31 -0
- package/changelogs/10.11.2025_03.12.2025.md +0 -316
- package/documentation/logging.md +0 -122
- package/documentation/otel.md +0 -145
- package/types/models/agent-backend.ts +0 -15
- /package/{documentation → devops/documentation}/patch-older-releases.md +0 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/* Custom styles matching Exulu CI from frontend/app/globals.css */
|
|
2
|
+
|
|
3
|
+
/* Root variables matching brand colors */
|
|
4
|
+
:root {
|
|
5
|
+
--exulu-primary: hsl(257.9412, 100%, 60%);
|
|
6
|
+
--exulu-primary-light: hsl(257.9412, 100%, 68%);
|
|
7
|
+
--exulu-primary-dark: hsl(257.9412, 100%, 52%);
|
|
8
|
+
--exulu-accent: hsl(208.209, 100%, 73.7255%);
|
|
9
|
+
--exulu-radius: 0.4rem;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.dark {
|
|
13
|
+
--exulu-primary: hsl(257.6687, 100%, 68.0392%);
|
|
14
|
+
--exulu-primary-light: hsl(257.6687, 100%, 76%);
|
|
15
|
+
--exulu-primary-dark: hsl(257.6687, 100%, 60%);
|
|
16
|
+
--exulu-accent: hsl(208.209, 100%, 73.7255%);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Hero section gradients */
|
|
20
|
+
.hero-gradient {
|
|
21
|
+
background: linear-gradient(135deg, var(--exulu-primary) 0%, var(--exulu-primary-dark) 100%);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.hero-gradient-light {
|
|
25
|
+
background: linear-gradient(135deg, var(--exulu-primary-light) 0%, var(--exulu-primary) 100%);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Feature cards with hover effects */
|
|
29
|
+
.feature-card {
|
|
30
|
+
transition: all 0.3s ease;
|
|
31
|
+
border: 1px solid hsl(257.9412, 100%, 60%, 0.1);
|
|
32
|
+
border-radius: var(--exulu-radius);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.feature-card:hover {
|
|
36
|
+
transform: translateY(-4px);
|
|
37
|
+
box-shadow: 0 12px 24px hsl(257.9412, 100%, 60%, 0.15);
|
|
38
|
+
border-color: hsl(257.9412, 100%, 60%, 0.3);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Stats section */
|
|
42
|
+
.stat-item {
|
|
43
|
+
text-align: center;
|
|
44
|
+
padding: 2rem;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.stat-number {
|
|
48
|
+
font-size: 3rem;
|
|
49
|
+
font-weight: 700;
|
|
50
|
+
background: linear-gradient(135deg, var(--exulu-primary) 0%, var(--exulu-primary-light) 100%);
|
|
51
|
+
-webkit-background-clip: text;
|
|
52
|
+
-webkit-text-fill-color: transparent;
|
|
53
|
+
background-clip: text;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.stat-label {
|
|
57
|
+
font-size: 1rem;
|
|
58
|
+
color: #64748b;
|
|
59
|
+
margin-top: 0.5rem;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* CTA buttons */
|
|
63
|
+
.cta-primary {
|
|
64
|
+
background: linear-gradient(135deg, var(--exulu-primary) 0%, var(--exulu-primary-dark) 100%);
|
|
65
|
+
color: white;
|
|
66
|
+
padding: 1rem 2rem;
|
|
67
|
+
border-radius: var(--exulu-radius);
|
|
68
|
+
font-weight: 600;
|
|
69
|
+
text-decoration: none;
|
|
70
|
+
display: inline-block;
|
|
71
|
+
transition: all 0.3s ease;
|
|
72
|
+
box-shadow: 0 4px 6px hsl(257.9412, 100%, 60%, 0.2);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.cta-primary:hover {
|
|
76
|
+
transform: translateY(-2px);
|
|
77
|
+
box-shadow: 0 6px 12px hsl(257.9412, 100%, 60%, 0.3);
|
|
78
|
+
color: white;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.cta-secondary {
|
|
82
|
+
background: transparent;
|
|
83
|
+
color: var(--exulu-primary);
|
|
84
|
+
padding: 1rem 2rem;
|
|
85
|
+
border-radius: var(--exulu-radius);
|
|
86
|
+
font-weight: 600;
|
|
87
|
+
text-decoration: none;
|
|
88
|
+
display: inline-block;
|
|
89
|
+
border: 2px solid var(--exulu-primary);
|
|
90
|
+
transition: all 0.3s ease;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.cta-secondary:hover {
|
|
94
|
+
background: hsl(257.9412, 100%, 60%, 0.1);
|
|
95
|
+
transform: translateY(-2px);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* Section spacing */
|
|
99
|
+
.section-padding {
|
|
100
|
+
padding: 4rem 0;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* Badge styles */
|
|
104
|
+
.badge {
|
|
105
|
+
display: inline-block;
|
|
106
|
+
padding: 0.5rem 1rem;
|
|
107
|
+
background: hsl(257.9412, 100%, 60%, 0.1);
|
|
108
|
+
color: var(--exulu-primary);
|
|
109
|
+
border-radius: 9999px;
|
|
110
|
+
font-size: 0.875rem;
|
|
111
|
+
font-weight: 600;
|
|
112
|
+
margin-bottom: 1rem;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* Dark mode adjustments */
|
|
116
|
+
.dark .stat-label {
|
|
117
|
+
color: #94a3b8;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.dark .feature-card {
|
|
121
|
+
border-color: hsl(257.6687, 100%, 68.0392%, 0.2);
|
|
122
|
+
background: rgba(15, 23, 42, 0.5);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.dark .feature-card:hover {
|
|
126
|
+
border-color: hsl(257.6687, 100%, 68.0392%, 0.4);
|
|
127
|
+
background: rgba(15, 23, 42, 0.8);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* Testimonial styles */
|
|
131
|
+
.testimonial {
|
|
132
|
+
padding: 2rem;
|
|
133
|
+
border-left: 4px solid var(--exulu-primary);
|
|
134
|
+
background: hsl(257.9412, 100%, 60%, 0.05);
|
|
135
|
+
border-radius: var(--exulu-radius);
|
|
136
|
+
margin: 1rem 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.dark .testimonial {
|
|
140
|
+
background: hsl(257.6687, 100%, 68.0392%, 0.1);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* Logo showcase */
|
|
144
|
+
.logo-grid {
|
|
145
|
+
display: grid;
|
|
146
|
+
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
|
147
|
+
gap: 2rem;
|
|
148
|
+
align-items: center;
|
|
149
|
+
justify-items: center;
|
|
150
|
+
padding: 2rem 0;
|
|
151
|
+
opacity: 0.6;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.logo-grid img {
|
|
155
|
+
max-width: 120px;
|
|
156
|
+
height: auto;
|
|
157
|
+
filter: grayscale(100%);
|
|
158
|
+
transition: all 0.3s ease;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.logo-grid img:hover {
|
|
162
|
+
filter: grayscale(0%);
|
|
163
|
+
opacity: 1;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* Animated gradient text */
|
|
167
|
+
.gradient-text {
|
|
168
|
+
background: linear-gradient(135deg, var(--exulu-primary) 0%, var(--exulu-primary-light) 50%, var(--exulu-primary) 100%);
|
|
169
|
+
background-size: 200% auto;
|
|
170
|
+
-webkit-background-clip: text;
|
|
171
|
+
-webkit-text-fill-color: transparent;
|
|
172
|
+
background-clip: text;
|
|
173
|
+
animation: gradient 3s ease infinite;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
@keyframes gradient {
|
|
177
|
+
0%, 100% {
|
|
178
|
+
background-position: 0% center;
|
|
179
|
+
}
|
|
180
|
+
50% {
|
|
181
|
+
background-position: 100% center;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* Feature icons */
|
|
186
|
+
.feature-icon {
|
|
187
|
+
width: 3rem;
|
|
188
|
+
height: 3rem;
|
|
189
|
+
display: flex;
|
|
190
|
+
align-items: center;
|
|
191
|
+
justify-content: center;
|
|
192
|
+
background: linear-gradient(135deg, var(--exulu-primary) 0%, var(--exulu-primary-light) 100%);
|
|
193
|
+
border-radius: var(--exulu-radius);
|
|
194
|
+
color: white;
|
|
195
|
+
font-size: 1.5rem;
|
|
196
|
+
margin-bottom: 1rem;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/* Font customization matching CI */
|
|
200
|
+
body {
|
|
201
|
+
font-family: 'Inter', system-ui, sans-serif;
|
|
202
|
+
letter-spacing: -0.025em;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
code, pre {
|
|
206
|
+
font-family: 'JetBrains Mono', monospace;
|
|
207
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exulu/backend",
|
|
3
3
|
"author": "Qventu Bv.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.48.1",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"private": false,
|
|
7
7
|
"publishConfig": {
|
|
@@ -22,7 +22,23 @@
|
|
|
22
22
|
"build": "tsup",
|
|
23
23
|
"dev": "npm link && tsup --watch",
|
|
24
24
|
"prepare": "husky",
|
|
25
|
-
"semantic-release": "semantic-release"
|
|
25
|
+
"semantic-release": "semantic-release",
|
|
26
|
+
"test": "jest",
|
|
27
|
+
"test:watch": "jest --watch",
|
|
28
|
+
"test:coverage": "jest --coverage",
|
|
29
|
+
"lint": "eslint src --ext .ts",
|
|
30
|
+
"lint:errors": "eslint src --ext .ts --quiet",
|
|
31
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
32
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
33
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
34
|
+
"type-check": "tsc --noEmit",
|
|
35
|
+
"validate": "npm run type-check && npm run lint && npm run test",
|
|
36
|
+
"audit": "npm audit",
|
|
37
|
+
"audit:prod": "npm audit --omit=dev",
|
|
38
|
+
"audit:fix": "npm audit fix",
|
|
39
|
+
"cpd": "jscpd src --reporters console",
|
|
40
|
+
"cpd:report": "jscpd src --reporters console,html",
|
|
41
|
+
"cpd:view": "serve cpd-report/html -l 3001"
|
|
26
42
|
},
|
|
27
43
|
"keywords": [
|
|
28
44
|
"exulu"
|
|
@@ -37,11 +53,23 @@
|
|
|
37
53
|
"@types/cors": "^2.8.18",
|
|
38
54
|
"@types/express": "^5.0.1",
|
|
39
55
|
"@types/graphql-type-json": "^0.3.5",
|
|
56
|
+
"@types/jest": "^29.5.14",
|
|
40
57
|
"@types/node": "^22.14.0",
|
|
41
58
|
"@types/pg": "^8.15.1",
|
|
59
|
+
"@types/supertest": "^6.0.2",
|
|
60
|
+
"@typescript-eslint/eslint-plugin": "^8.20.0",
|
|
61
|
+
"@typescript-eslint/parser": "^8.20.0",
|
|
42
62
|
"conventional-changelog-atom": "^5.0.0",
|
|
63
|
+
"eslint": "^9.20.0",
|
|
43
64
|
"husky": "^9.1.7",
|
|
44
|
-
"
|
|
65
|
+
"jest": "^29.7.0",
|
|
66
|
+
"jscpd": "^4.0.8",
|
|
67
|
+
"prettier": "^3.4.2",
|
|
68
|
+
"semantic-release": "24.2.9",
|
|
69
|
+
"serve": "^14.2.6",
|
|
70
|
+
"supertest": "^7.0.0",
|
|
71
|
+
"ts-jest": "^29.2.5",
|
|
72
|
+
"tsc-alias": "^1.8.16",
|
|
45
73
|
"tsup": "^8.5.0",
|
|
46
74
|
"tsx": "^4.19.3"
|
|
47
75
|
},
|
|
@@ -54,6 +82,7 @@
|
|
|
54
82
|
"@ai-sdk/google-vertex": "^4.0.28",
|
|
55
83
|
"@ai-sdk/openai": "^3.0.18",
|
|
56
84
|
"@anthropic-ai/sdk": "^0.56.0",
|
|
85
|
+
"@apollo/server": "^5.4.0",
|
|
57
86
|
"@as-integrations/express5": "^1.0.0",
|
|
58
87
|
"@aws-sdk/client-s3": "^3.338.0",
|
|
59
88
|
"@aws-sdk/client-sts": "^3.338.0",
|
|
@@ -70,7 +99,6 @@
|
|
|
70
99
|
"@opentelemetry/winston-transport": "^0.14.1",
|
|
71
100
|
"@perplexity-ai/perplexity_ai": "^0.25.0",
|
|
72
101
|
"ai": "^6.0.49",
|
|
73
|
-
"apollo-server": "^3.13.0",
|
|
74
102
|
"bcryptjs": "^3.0.2",
|
|
75
103
|
"body-parser": "^2.2.0",
|
|
76
104
|
"bullmq": "^5.48.1",
|
|
@@ -94,6 +122,7 @@
|
|
|
94
122
|
"jsonwebtoken": "^9.0.2",
|
|
95
123
|
"knex": "^3.1.0",
|
|
96
124
|
"link": "^2.1.1",
|
|
125
|
+
"mammoth": "^1.11.0",
|
|
97
126
|
"natural": "^8.1.0",
|
|
98
127
|
"officeparser": "^5.2.2",
|
|
99
128
|
"openai": "^5.21.0",
|
|
@@ -103,9 +132,11 @@
|
|
|
103
132
|
"redis": "^4.7.0",
|
|
104
133
|
"reflect-metadata": "^0.2.2",
|
|
105
134
|
"tiktoken": "^1.0.21",
|
|
135
|
+
"turndown": "^7.2.2",
|
|
106
136
|
"uuid": "^11.1.0",
|
|
107
137
|
"wink-nlp": "^2.4.0",
|
|
108
138
|
"winston": "^3.17.0",
|
|
139
|
+
"word-extractor": "^1.0.4",
|
|
109
140
|
"zod": "^3.25.76",
|
|
110
141
|
"zod-to-json-schema": "^3.25.1",
|
|
111
142
|
"zodex": "^0.18.2"
|
package/skills-lock.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ExuluStorage } from "@SRC/exulu/storage";
|
|
2
|
+
import type { Item } from "./models/item";
|
|
3
|
+
import type { ExuluConfig } from "@SRC/exulu/app";
|
|
4
|
+
import type { ExuluQueueConfig } from "./queue-config";
|
|
5
|
+
|
|
6
|
+
export type ExuluContextProcessor = {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
filter: ({
|
|
10
|
+
item,
|
|
11
|
+
user,
|
|
12
|
+
role,
|
|
13
|
+
utils,
|
|
14
|
+
exuluConfig,
|
|
15
|
+
}: {
|
|
16
|
+
item: Item;
|
|
17
|
+
user?: number;
|
|
18
|
+
role?: string;
|
|
19
|
+
utils: {
|
|
20
|
+
storage: ExuluStorage;
|
|
21
|
+
};
|
|
22
|
+
exuluConfig: ExuluConfig;
|
|
23
|
+
}) => Promise<Item | undefined | null>;
|
|
24
|
+
execute: ({
|
|
25
|
+
item,
|
|
26
|
+
user,
|
|
27
|
+
role,
|
|
28
|
+
utils,
|
|
29
|
+
exuluConfig,
|
|
30
|
+
}: {
|
|
31
|
+
item: Item;
|
|
32
|
+
user?: number;
|
|
33
|
+
role?: string;
|
|
34
|
+
utils: {
|
|
35
|
+
storage: ExuluStorage;
|
|
36
|
+
};
|
|
37
|
+
exuluConfig: ExuluConfig;
|
|
38
|
+
}) => Promise<Item>;
|
|
39
|
+
config?: {
|
|
40
|
+
queue?: Promise<ExuluQueueConfig>;
|
|
41
|
+
timeoutInSeconds?: number; // 3 minutes default
|
|
42
|
+
trigger: "manual" | "onUpdate" | "onInsert" | "always";
|
|
43
|
+
generateEmbeddings?: boolean; // defines if embeddings are generated after the processor finishes executing
|
|
44
|
+
};
|
|
45
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { ExuluContextFieldDefinition } from "@SRC/exulu/context";
|
|
2
|
+
import type { ExuluContextProcessor } from "./context-processor";
|
|
3
|
+
|
|
4
|
+
export type ExuluTableDefinition = {
|
|
5
|
+
type?:
|
|
6
|
+
| "feedback"
|
|
7
|
+
| "test_cases"
|
|
8
|
+
| "eval_sets"
|
|
9
|
+
| "eval_runs"
|
|
10
|
+
| "agent_sessions"
|
|
11
|
+
| "agent_messages"
|
|
12
|
+
| "eval_results"
|
|
13
|
+
| "workflow_templates"
|
|
14
|
+
| "tracking"
|
|
15
|
+
| "rbac"
|
|
16
|
+
| "users"
|
|
17
|
+
| "variables"
|
|
18
|
+
| "roles"
|
|
19
|
+
| "agents"
|
|
20
|
+
| "items"
|
|
21
|
+
| "projects"
|
|
22
|
+
| "project_items"
|
|
23
|
+
| "platform_configurations"
|
|
24
|
+
| "job_results"
|
|
25
|
+
| "prompt_library"
|
|
26
|
+
| "prompt_favorites"
|
|
27
|
+
| "embedder_settings";
|
|
28
|
+
id?: string;
|
|
29
|
+
name: {
|
|
30
|
+
plural:
|
|
31
|
+
| "feedback"
|
|
32
|
+
| "test_cases"
|
|
33
|
+
| "eval_sets"
|
|
34
|
+
| "eval_runs"
|
|
35
|
+
| "agent_sessions"
|
|
36
|
+
| "agent_messages"
|
|
37
|
+
| "eval_results"
|
|
38
|
+
| "workflow_templates"
|
|
39
|
+
| "tracking"
|
|
40
|
+
| "rbac"
|
|
41
|
+
| "users"
|
|
42
|
+
| "variables"
|
|
43
|
+
| "roles"
|
|
44
|
+
| "agents"
|
|
45
|
+
| "projects"
|
|
46
|
+
| "project_items"
|
|
47
|
+
| "platform_configurations"
|
|
48
|
+
| "job_results"
|
|
49
|
+
| "prompt_library"
|
|
50
|
+
| "prompt_favorites"
|
|
51
|
+
| "embedder_settings";
|
|
52
|
+
singular:
|
|
53
|
+
| "feedback"
|
|
54
|
+
| "test_case"
|
|
55
|
+
| "eval_set"
|
|
56
|
+
| "eval_run"
|
|
57
|
+
| "agent_session"
|
|
58
|
+
| "agent_message"
|
|
59
|
+
| "eval_result"
|
|
60
|
+
| "workflow_template"
|
|
61
|
+
| "tracking"
|
|
62
|
+
| "rbac"
|
|
63
|
+
| "user"
|
|
64
|
+
| "variable"
|
|
65
|
+
| "role"
|
|
66
|
+
| "agent"
|
|
67
|
+
| "project"
|
|
68
|
+
| "project_item"
|
|
69
|
+
| "platform_configuration"
|
|
70
|
+
| "job_result"
|
|
71
|
+
| "prompt_library_item"
|
|
72
|
+
| "prompt_favorite"
|
|
73
|
+
| "embedder_setting";
|
|
74
|
+
};
|
|
75
|
+
processor?: ExuluContextProcessor;
|
|
76
|
+
fields: ExuluContextFieldDefinition[];
|
|
77
|
+
RBAC?: boolean;
|
|
78
|
+
graphql?: boolean;
|
|
79
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type allFileTypes = imageTypes | fileTypes | audioTypes | videoTypes;
|
|
2
|
+
type audioTypes = ".mp3" | ".wav" | ".m4a" | ".mp4" | ".mpeg";
|
|
3
|
+
type videoTypes = ".mp4" | ".m4a" | ".mp3" | ".mpeg" | ".wav";
|
|
4
|
+
type imageTypes = ".png" | ".jpg" | ".jpeg" | ".gif" | ".webp";
|
|
5
|
+
type fileTypes =
|
|
6
|
+
| ".pdf"
|
|
7
|
+
| ".docx"
|
|
8
|
+
| ".doc"
|
|
9
|
+
| ".xlsx"
|
|
10
|
+
| ".xls"
|
|
11
|
+
| ".csv"
|
|
12
|
+
| ".pptx"
|
|
13
|
+
| ".ppt"
|
|
14
|
+
| ".txt"
|
|
15
|
+
| ".md"
|
|
16
|
+
| ".json"
|
|
17
|
+
| ".srt"
|
|
18
|
+
| ".html";
|
package/types/models/agent.ts
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import type { ExuluProviderWorkflowConfig } from "@SRC/exulu/provider";
|
|
2
|
+
|
|
3
|
+
export interface ExuluAgent {
|
|
2
4
|
id: string;
|
|
3
5
|
modelName?: string;
|
|
4
6
|
providerName?: string;
|
|
5
|
-
|
|
7
|
+
provider: string;
|
|
8
|
+
source: "code" | "database";
|
|
6
9
|
memory?: string;
|
|
7
10
|
welcomemessage?: string;
|
|
8
11
|
type: "agent";
|
|
9
12
|
name: string;
|
|
10
13
|
image?: string;
|
|
11
14
|
providerapikey?: string;
|
|
12
|
-
workflows?:
|
|
13
|
-
enabled: boolean;
|
|
14
|
-
queue?: {
|
|
15
|
-
name: string;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
15
|
+
workflows?: ExuluProviderWorkflowConfig;
|
|
18
16
|
firewall?: {
|
|
19
17
|
enabled: boolean;
|
|
20
18
|
scanners?: {
|
|
@@ -28,6 +26,7 @@ export interface Agent {
|
|
|
28
26
|
active?: boolean;
|
|
29
27
|
description?: string;
|
|
30
28
|
instructions?: string;
|
|
29
|
+
feedback?: boolean;
|
|
31
30
|
slug?: string;
|
|
32
31
|
tools?: {
|
|
33
32
|
id: string;
|
|
@@ -51,20 +50,19 @@ export interface Agent {
|
|
|
51
50
|
video: videoTypes[];
|
|
52
51
|
}
|
|
53
52
|
// New RBAC fields
|
|
54
|
-
rights_mode?: 'private' | 'users' | 'roles' | 'public'
|
|
55
|
-
created_by?: string;
|
|
53
|
+
rights_mode?: 'private' | 'users' | 'roles' | 'public'
|
|
54
|
+
created_by?: string | number;
|
|
56
55
|
RBAC?: {
|
|
57
56
|
type?: string;
|
|
58
57
|
users?: Array<{ id: number; rights: 'read' | 'write' }>;
|
|
59
58
|
roles?: Array<{ id: string; rights: 'read' | 'write' }>;
|
|
60
|
-
/* projects?: Array<{ id: string; rights: 'read' | 'write' }>; */
|
|
61
59
|
};
|
|
62
60
|
createdAt?: string;
|
|
63
61
|
updatedAt?: string;
|
|
64
62
|
}
|
|
65
63
|
|
|
66
64
|
export type imageTypes = '.png' | '.jpg' | '.jpeg' | '.gif' | '.webp';
|
|
67
|
-
export type fileTypes = '.pdf' | '.docx' | '.xlsx' | '.xls' | '.csv' | '.pptx' | '.ppt';
|
|
65
|
+
export type fileTypes = '.pdf' | '.docx' | '.xlsx' | '.xls' | '.csv' | '.pptx' | '.ppt' | '.txt' | '.md' | '.json';
|
|
68
66
|
export type audioTypes = '.mp3' | '.wav' | '.m4a' | '.mp4' | '.mpeg';
|
|
69
67
|
export type videoTypes = '.mp4' | '.m4a' | '.mp3' | '.mpeg' | '.wav';
|
|
70
68
|
export type allFileTypes = imageTypes | fileTypes | audioTypes | videoTypes;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type ExuluAgentToolConfig = {
|
|
2
|
+
id: string;
|
|
3
|
+
type: string;
|
|
4
|
+
config: {
|
|
5
|
+
name: string;
|
|
6
|
+
variable: string | boolean | number; // is a variable name
|
|
7
|
+
type: "boolean" | "string" | "number" | "variable";
|
|
8
|
+
value?: any; // fetched on demand from the database based on the variable name
|
|
9
|
+
default?: string | boolean | number;
|
|
10
|
+
}[];
|
|
11
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type LanguageModel } from "ai";
|
|
2
|
+
|
|
3
|
+
export type ExuluProviderConfig = {
|
|
4
|
+
name: string;
|
|
5
|
+
instructions: string;
|
|
6
|
+
model: {
|
|
7
|
+
create: ({ apiKey }: { apiKey?: string | undefined }) => LanguageModel;
|
|
8
|
+
};
|
|
9
|
+
custom?: {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
}[];
|
|
13
|
+
memory?: {
|
|
14
|
+
lastMessages: number;
|
|
15
|
+
vector: boolean;
|
|
16
|
+
semanticRecall: {
|
|
17
|
+
topK: number;
|
|
18
|
+
messageRange: number;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Queue } from "bullmq";
|
|
2
|
+
|
|
3
|
+
export type ExuluQueueConfig = {
|
|
4
|
+
queue: Queue;
|
|
5
|
+
ratelimit: number;
|
|
6
|
+
timeoutInSeconds?: number; // 3 minutes default
|
|
7
|
+
concurrency: {
|
|
8
|
+
worker: number;
|
|
9
|
+
queue: number;
|
|
10
|
+
};
|
|
11
|
+
retries?: number;
|
|
12
|
+
backoff?: {
|
|
13
|
+
type: "exponential" | "linear";
|
|
14
|
+
delay: number; // in milliseconds
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ExuluRightsMode = "private" | "users" | "roles" | "public"; /* | "projects" */
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { STATISTICS_TYPE } from "./enums/statistics";
|
|
2
|
+
|
|
3
|
+
export type ExuluStatisticParams = Omit<ExuluStatistic, "total" | "name" | "type">;
|
|
4
|
+
|
|
5
|
+
export type ExuluStatistic = {
|
|
6
|
+
name: string;
|
|
7
|
+
label: string;
|
|
8
|
+
type: STATISTICS_TYPE;
|
|
9
|
+
trigger: STATISTICS_LABELS;
|
|
10
|
+
total: number;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type STATISTICS_LABELS =
|
|
14
|
+
| "tool"
|
|
15
|
+
| "agent"
|
|
16
|
+
| "flow"
|
|
17
|
+
| "api"
|
|
18
|
+
| "claude-code"
|
|
19
|
+
| "user"
|
|
20
|
+
| "processor";
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ExuluRightsMode } from "./rbac-rights-modes";
|
|
2
|
+
|
|
3
|
+
// Workflows in Exulu are "template conversations"
|
|
4
|
+
// that contain variables that can be set on each
|
|
5
|
+
// invocation. Basically they are a set of UIMessages
|
|
6
|
+
// that get run in the background on invocation instead
|
|
7
|
+
// of manually in a chat session.
|
|
8
|
+
export interface ExuluWorkflow {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
rights_mode?: ExuluRightsMode;
|
|
13
|
+
RBAC?: {
|
|
14
|
+
users?: Array<{ id: string; rights: "read" | "write" }>;
|
|
15
|
+
roles?: Array<{ id: string; rights: "read" | "write" }>;
|
|
16
|
+
};
|
|
17
|
+
created_by: number;
|
|
18
|
+
createdAt: string;
|
|
19
|
+
updatedAt: string;
|
|
20
|
+
agent: string;
|
|
21
|
+
steps_json?: WorkflowStep[];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface WorkflowStep {
|
|
25
|
+
id: string;
|
|
26
|
+
type: "user" | "assistant" | "tool";
|
|
27
|
+
content?: string;
|
|
28
|
+
contentExample?: string;
|
|
29
|
+
toolName?: string;
|
|
30
|
+
variablesUsed?: string[];
|
|
31
|
+
}
|