@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.
Files changed (151) hide show
  1. package/.agents/skills/mintlify/SKILL.md +347 -0
  2. package/.editorconfig +15 -0
  3. package/.eslintrc.json +52 -0
  4. package/.jscpd.json +18 -0
  5. package/.prettierignore +5 -0
  6. package/.prettierrc.json +12 -0
  7. package/CHANGELOG.md +2 -2
  8. package/README.md +747 -0
  9. package/SECURITY.md +5 -0
  10. package/dist/index.cjs +11747 -10227
  11. package/dist/index.d.cts +725 -667
  12. package/dist/index.d.ts +725 -667
  13. package/dist/index.js +12043 -10516
  14. package/ee/LICENSE.md +62 -0
  15. package/ee/agentic-retrieval/index.ts +1109 -0
  16. package/ee/documents/THIRD_PARTY_LICENSES/docling.txt +31 -0
  17. package/ee/documents/processing/build_pdf_processor.sh +35 -0
  18. package/ee/documents/processing/chunk_markdown.py +263 -0
  19. package/ee/documents/processing/doc_processor.ts +635 -0
  20. package/ee/documents/processing/pdf_processor.spec +115 -0
  21. package/ee/documents/processing/pdf_to_markdown.py +420 -0
  22. package/ee/documents/processing/requirements.txt +4 -0
  23. package/ee/entitlements.ts +49 -0
  24. package/ee/markdown.ts +686 -0
  25. package/ee/queues/decorator.ts +140 -0
  26. package/ee/queues/queues.ts +156 -0
  27. package/ee/queues/server.ts +6 -0
  28. package/ee/rbac-resolver.ts +51 -0
  29. package/ee/rbac-update.ts +111 -0
  30. package/ee/schemas.ts +348 -0
  31. package/ee/tokenizer.ts +80 -0
  32. package/ee/workers.ts +1423 -0
  33. package/eslint.config.js +88 -0
  34. package/jest.config.ts +25 -0
  35. package/license.md +73 -49
  36. package/mintlify-docs/.mintignore +7 -0
  37. package/mintlify-docs/AGENTS.md +33 -0
  38. package/mintlify-docs/CLAUDE.MD +50 -0
  39. package/mintlify-docs/CONTRIBUTING.md +32 -0
  40. package/mintlify-docs/LICENSE +21 -0
  41. package/mintlify-docs/README.md +55 -0
  42. package/mintlify-docs/ai-tools/claude-code.mdx +43 -0
  43. package/mintlify-docs/ai-tools/cursor.mdx +39 -0
  44. package/mintlify-docs/ai-tools/windsurf.mdx +39 -0
  45. package/mintlify-docs/api-reference/core-types/agent-types.mdx +110 -0
  46. package/mintlify-docs/api-reference/core-types/analytics-types.mdx +95 -0
  47. package/mintlify-docs/api-reference/core-types/configuration-types.mdx +83 -0
  48. package/mintlify-docs/api-reference/core-types/evaluation-types.mdx +106 -0
  49. package/mintlify-docs/api-reference/core-types/job-types.mdx +135 -0
  50. package/mintlify-docs/api-reference/core-types/overview.mdx +73 -0
  51. package/mintlify-docs/api-reference/core-types/prompt-types.mdx +102 -0
  52. package/mintlify-docs/api-reference/core-types/rbac-types.mdx +163 -0
  53. package/mintlify-docs/api-reference/core-types/session-types.mdx +77 -0
  54. package/mintlify-docs/api-reference/core-types/user-management.mdx +112 -0
  55. package/mintlify-docs/api-reference/core-types/workflow-types.mdx +88 -0
  56. package/mintlify-docs/api-reference/core-types.mdx +585 -0
  57. package/mintlify-docs/api-reference/dynamic-types.mdx +851 -0
  58. package/mintlify-docs/api-reference/endpoint/create.mdx +4 -0
  59. package/mintlify-docs/api-reference/endpoint/delete.mdx +4 -0
  60. package/mintlify-docs/api-reference/endpoint/get.mdx +4 -0
  61. package/mintlify-docs/api-reference/endpoint/webhook.mdx +4 -0
  62. package/mintlify-docs/api-reference/introduction.mdx +661 -0
  63. package/mintlify-docs/api-reference/mutations.mdx +1012 -0
  64. package/mintlify-docs/api-reference/openapi.json +217 -0
  65. package/mintlify-docs/api-reference/queries.mdx +1154 -0
  66. package/mintlify-docs/backend/introduction.mdx +218 -0
  67. package/mintlify-docs/changelog.mdx +387 -0
  68. package/mintlify-docs/community-edition.mdx +304 -0
  69. package/mintlify-docs/core/exulu-agent/api-reference.mdx +894 -0
  70. package/mintlify-docs/core/exulu-agent/configuration.mdx +690 -0
  71. package/mintlify-docs/core/exulu-agent/introduction.mdx +552 -0
  72. package/mintlify-docs/core/exulu-app/api-reference.mdx +481 -0
  73. package/mintlify-docs/core/exulu-app/configuration.mdx +319 -0
  74. package/mintlify-docs/core/exulu-app/introduction.mdx +117 -0
  75. package/mintlify-docs/core/exulu-authentication.mdx +810 -0
  76. package/mintlify-docs/core/exulu-chunkers/api-reference.mdx +1011 -0
  77. package/mintlify-docs/core/exulu-chunkers/configuration.mdx +596 -0
  78. package/mintlify-docs/core/exulu-chunkers/introduction.mdx +403 -0
  79. package/mintlify-docs/core/exulu-context/api-reference.mdx +911 -0
  80. package/mintlify-docs/core/exulu-context/configuration.mdx +648 -0
  81. package/mintlify-docs/core/exulu-context/introduction.mdx +394 -0
  82. package/mintlify-docs/core/exulu-database.mdx +811 -0
  83. package/mintlify-docs/core/exulu-default-agents.mdx +545 -0
  84. package/mintlify-docs/core/exulu-eval/api-reference.mdx +772 -0
  85. package/mintlify-docs/core/exulu-eval/configuration.mdx +680 -0
  86. package/mintlify-docs/core/exulu-eval/introduction.mdx +459 -0
  87. package/mintlify-docs/core/exulu-logging.mdx +464 -0
  88. package/mintlify-docs/core/exulu-otel.mdx +670 -0
  89. package/mintlify-docs/core/exulu-queues/api-reference.mdx +648 -0
  90. package/mintlify-docs/core/exulu-queues/configuration.mdx +650 -0
  91. package/mintlify-docs/core/exulu-queues/introduction.mdx +474 -0
  92. package/mintlify-docs/core/exulu-reranker/api-reference.mdx +630 -0
  93. package/mintlify-docs/core/exulu-reranker/configuration.mdx +663 -0
  94. package/mintlify-docs/core/exulu-reranker/introduction.mdx +516 -0
  95. package/mintlify-docs/core/exulu-tool/api-reference.mdx +723 -0
  96. package/mintlify-docs/core/exulu-tool/configuration.mdx +805 -0
  97. package/mintlify-docs/core/exulu-tool/introduction.mdx +539 -0
  98. package/mintlify-docs/core/exulu-variables/api-reference.mdx +699 -0
  99. package/mintlify-docs/core/exulu-variables/configuration.mdx +736 -0
  100. package/mintlify-docs/core/exulu-variables/introduction.mdx +511 -0
  101. package/mintlify-docs/development.mdx +94 -0
  102. package/mintlify-docs/docs.json +248 -0
  103. package/mintlify-docs/enterprise-edition.mdx +538 -0
  104. package/mintlify-docs/essentials/code.mdx +35 -0
  105. package/mintlify-docs/essentials/images.mdx +59 -0
  106. package/mintlify-docs/essentials/markdown.mdx +88 -0
  107. package/mintlify-docs/essentials/navigation.mdx +87 -0
  108. package/mintlify-docs/essentials/reusable-snippets.mdx +110 -0
  109. package/mintlify-docs/essentials/settings.mdx +318 -0
  110. package/mintlify-docs/favicon.svg +3 -0
  111. package/mintlify-docs/frontend/introduction.mdx +39 -0
  112. package/mintlify-docs/getting-started.mdx +267 -0
  113. package/mintlify-docs/guides/custom-agent.mdx +608 -0
  114. package/mintlify-docs/guides/first-agent.mdx +315 -0
  115. package/mintlify-docs/images/admin_ui.png +0 -0
  116. package/mintlify-docs/images/contexts.png +0 -0
  117. package/mintlify-docs/images/create_agents.png +0 -0
  118. package/mintlify-docs/images/evals.png +0 -0
  119. package/mintlify-docs/images/graphql.png +0 -0
  120. package/mintlify-docs/images/graphql_api.png +0 -0
  121. package/mintlify-docs/images/hero-dark.png +0 -0
  122. package/mintlify-docs/images/hero-light.png +0 -0
  123. package/mintlify-docs/images/hero.png +0 -0
  124. package/mintlify-docs/images/knowledge_sources.png +0 -0
  125. package/mintlify-docs/images/mcp.png +0 -0
  126. package/mintlify-docs/images/scaling.png +0 -0
  127. package/mintlify-docs/index.mdx +411 -0
  128. package/mintlify-docs/logo/dark.svg +9 -0
  129. package/mintlify-docs/logo/light.svg +9 -0
  130. package/mintlify-docs/partners.mdx +558 -0
  131. package/mintlify-docs/products.mdx +77 -0
  132. package/mintlify-docs/snippets/snippet-intro.mdx +4 -0
  133. package/mintlify-docs/styles.css +207 -0
  134. package/package.json +35 -4
  135. package/skills-lock.json +10 -0
  136. package/types/context-processor.ts +45 -0
  137. package/types/exulu-table-definition.ts +79 -0
  138. package/types/file-types.ts +18 -0
  139. package/types/models/agent.ts +10 -12
  140. package/types/models/exulu-agent-tool-config.ts +11 -0
  141. package/types/models/rate-limiter-rules.ts +7 -0
  142. package/types/provider-config.ts +21 -0
  143. package/types/queue-config.ts +16 -0
  144. package/types/rbac-rights-modes.ts +1 -0
  145. package/types/statistics.ts +20 -0
  146. package/types/workflow.ts +31 -0
  147. package/changelogs/10.11.2025_03.12.2025.md +0 -316
  148. package/documentation/logging.md +0 -122
  149. package/documentation/otel.md +0 -145
  150. package/types/models/agent-backend.ts +0 -15
  151. /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.46.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
- "semantic-release": "^24.2.7",
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"
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 1,
3
+ "skills": {
4
+ "mintlify": {
5
+ "source": "mintlify.com",
6
+ "sourceType": "well-known",
7
+ "computedHash": "fc61ab6703f692dc2c215e74327a8998d02987ca9571084440be20e7ecad6b46"
8
+ }
9
+ }
10
+ }
@@ -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";
@@ -1,20 +1,18 @@
1
- export interface Agent {
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
- backend: string;
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' /* | 'projects' */;
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,7 @@
1
+ export interface RateLimiterRule {
2
+ name?: string; // optional, if not provided the rate limiter uses the agent id for the queue name
3
+ rate_limit: {
4
+ time: number; // time until usage expires in seconds
5
+ limit: number;
6
+ };
7
+ }
@@ -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
+ }