@exulu/backend 1.57.0 → 1.59.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/dist/index.d.cts CHANGED
@@ -10,6 +10,7 @@ import { z } from 'zod';
10
10
  import { Tiktoken } from 'tiktoken/lite';
11
11
  import models from 'tiktoken/model_to_encoding.json';
12
12
 
13
+ type ApiKeyScopeMode = "admin" | "agents";
13
14
  type User = {
14
15
  id: number;
15
16
  firstname?: string;
@@ -20,6 +21,8 @@ type User = {
20
21
  anthropic_token?: string;
21
22
  super_admin?: boolean;
22
23
  favourite_agents?: string[];
24
+ scope_mode?: ApiKeyScopeMode;
25
+ agent_ids?: string[];
23
26
  role: {
24
27
  id: string;
25
28
  name: string;
@@ -39,8 +42,12 @@ type ExuluProviderConfig = {
39
42
  name: string;
40
43
  instructions: string;
41
44
  model: {
42
- create: ({ apiKey }: {
45
+ create: ({ apiKey, user, role, project, agent }: {
43
46
  apiKey?: string | undefined;
47
+ user?: number;
48
+ role?: string;
49
+ project?: string;
50
+ agent?: string;
44
51
  }) => LanguageModel;
45
52
  };
46
53
  custom?: {
@@ -57,11 +64,21 @@ type ExuluProviderConfig = {
57
64
  };
58
65
  };
59
66
 
67
+ type AgentRateLimitBucket = {
68
+ limit: number;
69
+ window_seconds: number;
70
+ };
71
+ type AgentRateLimits = {
72
+ requests?: AgentRateLimitBucket;
73
+ input_tokens?: AgentRateLimitBucket;
74
+ output_tokens?: AgentRateLimitBucket;
75
+ };
60
76
  interface ExuluAgent {
61
77
  id: string;
62
78
  modelName?: string;
63
79
  providerName?: string;
64
- provider: string;
80
+ /** @deprecated Hydrated for read compatibility; the underlying DB column is gone. */
81
+ provider?: string;
65
82
  source: "code" | "database";
66
83
  memory?: string;
67
84
  welcomemessage?: string;
@@ -69,7 +86,8 @@ interface ExuluAgent {
69
86
  type: "agent";
70
87
  name: string;
71
88
  image?: string;
72
- providerapikey?: string;
89
+ /** FK to models.id — replaces legacy provider + providerapikey columns. */
90
+ model?: string;
73
91
  workflows?: ExuluProviderWorkflowConfig;
74
92
  firewall?: {
75
93
  enabled: boolean;
@@ -85,6 +103,7 @@ interface ExuluAgent {
85
103
  description?: string;
86
104
  instructions?: string;
87
105
  feedback?: boolean;
106
+ suggestions_enabled?: boolean;
88
107
  slug?: string;
89
108
  tools?: {
90
109
  id: string;
@@ -124,6 +143,7 @@ interface ExuluAgent {
124
143
  rights: 'read' | 'write';
125
144
  }>;
126
145
  };
146
+ rate_limits?: AgentRateLimits;
127
147
  createdAt?: string;
128
148
  updatedAt?: string;
129
149
  }
@@ -168,7 +188,7 @@ declare class ExuluTool {
168
188
  description: string;
169
189
  category: string;
170
190
  inputSchema?: z.ZodType;
171
- type: "context" | "function" | "agent" | "web_search";
191
+ type: "context" | "function" | "agent" | "web_search" | "skill";
172
192
  tool: Tool;
173
193
  needsApproval: boolean;
174
194
  config: {
@@ -183,7 +203,7 @@ declare class ExuluTool {
183
203
  description: string;
184
204
  category?: string;
185
205
  inputSchema?: z.ZodType;
186
- type: "context" | "function" | "agent" | "web_search";
206
+ type: "context" | "function" | "agent" | "web_search" | "skill";
187
207
  config: {
188
208
  name: string;
189
209
  description: string;
@@ -699,6 +719,17 @@ type ExuluAgentToolConfig = {
699
719
  }[];
700
720
  };
701
721
 
722
+ type ExuluSkill = {
723
+ id: string;
724
+ name: string;
725
+ description: string;
726
+ s3folder: string;
727
+ tags: string[];
728
+ usage_count: number;
729
+ favorite_count: number;
730
+ current_version: number;
731
+ };
732
+
702
733
  type ExuluProviderWorkflowConfig = {
703
734
  enabled: boolean;
704
735
  queue?: Promise<ExuluQueueConfig>;
@@ -721,7 +752,6 @@ interface ExuluProviderParams {
721
752
  audio: audioTypes$1[];
722
753
  video: videoTypes$1[];
723
754
  };
724
- outputSchema?: z.ZodType;
725
755
  rateLimit?: RateLimiterRule;
726
756
  }
727
757
  declare class ExuluProvider {
@@ -739,8 +769,12 @@ declare class ExuluProvider {
739
769
  rateLimit?: RateLimiterRule;
740
770
  config?: ExuluProviderConfig | undefined;
741
771
  model?: {
742
- create: ({ apiKey }: {
772
+ create: ({ apiKey, user, role, project, agent }: {
743
773
  apiKey?: string | undefined;
774
+ user?: number;
775
+ role?: string;
776
+ project?: string;
777
+ agent?: string;
744
778
  }) => LanguageModel;
745
779
  };
746
780
  capabilities: {
@@ -754,7 +788,7 @@ declare class ExuluProvider {
754
788
  get providerName(): string;
755
789
  get modelName(): string;
756
790
  tool: (instance: string, providers: ExuluProvider[], contexts: ExuluContext[], rerankers: ExuluReranker[]) => Promise<ExuluTool | null>;
757
- generateSync: ({ prompt, req, user, session, inputMessages, approvedTools, currentTools, allExuluTools, statistics, toolConfigs, providerapikey, contexts, rerankers, exuluConfig, outputSchema, agent, instructions, maxStepCount, }: {
791
+ generateSync: ({ prompt, req, user, session, inputMessages, approvedTools, currentTools, currentSkills, allExuluTools, statistics, toolConfigs, providerapikey, languageModel, contexts, rerankers, exuluConfig, agent, instructions, maxStepCount, onTokenUsage, }: {
758
792
  prompt?: string;
759
793
  user?: User;
760
794
  maxStepCount?: number;
@@ -764,15 +798,20 @@ declare class ExuluProvider {
764
798
  approvedTools?: string[];
765
799
  inputMessages?: UIMessage[];
766
800
  currentTools?: ExuluTool[];
801
+ currentSkills?: ExuluSkill[];
767
802
  allExuluTools?: ExuluTool[];
768
803
  statistics?: ExuluStatisticParams;
769
804
  toolConfigs?: ExuluAgentToolConfig[];
770
805
  providerapikey?: string | undefined;
806
+ languageModel: LanguageModel;
771
807
  contexts?: ExuluContext[] | undefined;
772
808
  rerankers?: ExuluReranker[] | undefined;
773
809
  exuluConfig?: ExuluConfig;
774
810
  instructions?: string;
775
- outputSchema?: z.ZodTypeAny;
811
+ onTokenUsage?: (usage: {
812
+ inputTokens: number;
813
+ outputTokens: number;
814
+ }) => Promise<void> | void;
776
815
  }) => Promise<any>;
777
816
  /**
778
817
  * Convert file parts in messages to OpenAI Responses API compatible format.
@@ -782,7 +821,7 @@ declare class ExuluProvider {
782
821
  * - Image files -> image parts (which ARE supported by Responses API)
783
822
  */
784
823
  private processFilePartsInMessages;
785
- generateStream: ({ user, session, agent, message, previousMessages, currentTools, approvedTools, allExuluTools, toolConfigs, providerapikey, contexts, rerankers, exuluConfig, instructions, req, maxStepCount }: {
824
+ generateStream: ({ user, session, agent, message, previousMessages, currentTools, currentSkills, approvedTools, allExuluTools, toolConfigs, providerapikey, languageModel, contexts, rerankers, exuluConfig, instructions, req, maxStepCount }: {
786
825
  user?: User;
787
826
  session?: string;
788
827
  agent?: ExuluAgent;
@@ -790,10 +829,12 @@ declare class ExuluProvider {
790
829
  message?: UIMessage;
791
830
  previousMessages?: UIMessage[];
792
831
  currentTools?: ExuluTool[];
832
+ currentSkills?: ExuluSkill[];
793
833
  approvedTools?: string[];
794
834
  allExuluTools?: ExuluTool[];
795
835
  toolConfigs?: ExuluAgentToolConfig[];
796
836
  providerapikey?: string | undefined;
837
+ languageModel: LanguageModel;
797
838
  contexts?: ExuluContext[] | undefined;
798
839
  rerankers?: ExuluReranker[] | undefined;
799
840
  exuluConfig?: ExuluConfig;
@@ -886,6 +927,14 @@ type ExuluConfig = {
886
927
  privacy?: {
887
928
  systemPromptPersonalization?: boolean;
888
929
  };
930
+ /**
931
+ * When true, ExuluApp.create() throws if any required system binary
932
+ * (pandoc / soffice / pdftoppm — needed by built-in skills like docx) is
933
+ * missing. When false or unset, the missing deps are logged as a warning
934
+ * and the app continues to start; skills that need the binary will fail
935
+ * at use time instead. Recommended `true` in production deployments.
936
+ */
937
+ requireSystemDependencies?: boolean;
889
938
  };
890
939
  declare class ExuluApp {
891
940
  private _providers;
@@ -1916,12 +1965,6 @@ declare class MarkdownChunker {
1916
1965
  }[]>;
1917
1966
  }
1918
1967
 
1919
- /**
1920
- * Python Environment Setup Utility
1921
- *
1922
- * Provides functions to set up and validate the Python environment for Exulu backend.
1923
- * This can be called manually by package consumers or run automatically on install.
1924
- */
1925
1968
  /**
1926
1969
  * Options for Python environment setup
1927
1970
  */
@@ -2093,6 +2136,7 @@ declare const ExuluDefaultProviders: {
2093
2136
  vertexGemini25Flash: ExuluProvider;
2094
2137
  vertexGemini25Pro: ExuluProvider;
2095
2138
  vertexGemini3Pro: ExuluProvider;
2139
+ vertexLlamaScout4: ExuluProvider;
2096
2140
  };
2097
2141
  openai: {
2098
2142
  gpt5Mini: ExuluProvider;
@@ -2134,11 +2178,13 @@ declare const ExuluOtel: {
2134
2178
  };
2135
2179
 
2136
2180
  declare const ExuluDatabase: {
2137
- init: ({ contexts }: {
2181
+ init: ({ contexts, litellm }: {
2138
2182
  contexts: ExuluContext[];
2183
+ litellm?: boolean;
2139
2184
  }) => Promise<void>;
2140
- update: ({ contexts }: {
2185
+ update: ({ contexts, litellm }: {
2141
2186
  contexts: ExuluContext[];
2187
+ litellm?: boolean;
2142
2188
  }) => Promise<void>;
2143
2189
  api: {
2144
2190
  key: {
package/dist/index.d.ts CHANGED
@@ -10,6 +10,7 @@ import { z } from 'zod';
10
10
  import { Tiktoken } from 'tiktoken/lite';
11
11
  import models from 'tiktoken/model_to_encoding.json';
12
12
 
13
+ type ApiKeyScopeMode = "admin" | "agents";
13
14
  type User = {
14
15
  id: number;
15
16
  firstname?: string;
@@ -20,6 +21,8 @@ type User = {
20
21
  anthropic_token?: string;
21
22
  super_admin?: boolean;
22
23
  favourite_agents?: string[];
24
+ scope_mode?: ApiKeyScopeMode;
25
+ agent_ids?: string[];
23
26
  role: {
24
27
  id: string;
25
28
  name: string;
@@ -39,8 +42,12 @@ type ExuluProviderConfig = {
39
42
  name: string;
40
43
  instructions: string;
41
44
  model: {
42
- create: ({ apiKey }: {
45
+ create: ({ apiKey, user, role, project, agent }: {
43
46
  apiKey?: string | undefined;
47
+ user?: number;
48
+ role?: string;
49
+ project?: string;
50
+ agent?: string;
44
51
  }) => LanguageModel;
45
52
  };
46
53
  custom?: {
@@ -57,11 +64,21 @@ type ExuluProviderConfig = {
57
64
  };
58
65
  };
59
66
 
67
+ type AgentRateLimitBucket = {
68
+ limit: number;
69
+ window_seconds: number;
70
+ };
71
+ type AgentRateLimits = {
72
+ requests?: AgentRateLimitBucket;
73
+ input_tokens?: AgentRateLimitBucket;
74
+ output_tokens?: AgentRateLimitBucket;
75
+ };
60
76
  interface ExuluAgent {
61
77
  id: string;
62
78
  modelName?: string;
63
79
  providerName?: string;
64
- provider: string;
80
+ /** @deprecated Hydrated for read compatibility; the underlying DB column is gone. */
81
+ provider?: string;
65
82
  source: "code" | "database";
66
83
  memory?: string;
67
84
  welcomemessage?: string;
@@ -69,7 +86,8 @@ interface ExuluAgent {
69
86
  type: "agent";
70
87
  name: string;
71
88
  image?: string;
72
- providerapikey?: string;
89
+ /** FK to models.id — replaces legacy provider + providerapikey columns. */
90
+ model?: string;
73
91
  workflows?: ExuluProviderWorkflowConfig;
74
92
  firewall?: {
75
93
  enabled: boolean;
@@ -85,6 +103,7 @@ interface ExuluAgent {
85
103
  description?: string;
86
104
  instructions?: string;
87
105
  feedback?: boolean;
106
+ suggestions_enabled?: boolean;
88
107
  slug?: string;
89
108
  tools?: {
90
109
  id: string;
@@ -124,6 +143,7 @@ interface ExuluAgent {
124
143
  rights: 'read' | 'write';
125
144
  }>;
126
145
  };
146
+ rate_limits?: AgentRateLimits;
127
147
  createdAt?: string;
128
148
  updatedAt?: string;
129
149
  }
@@ -168,7 +188,7 @@ declare class ExuluTool {
168
188
  description: string;
169
189
  category: string;
170
190
  inputSchema?: z.ZodType;
171
- type: "context" | "function" | "agent" | "web_search";
191
+ type: "context" | "function" | "agent" | "web_search" | "skill";
172
192
  tool: Tool;
173
193
  needsApproval: boolean;
174
194
  config: {
@@ -183,7 +203,7 @@ declare class ExuluTool {
183
203
  description: string;
184
204
  category?: string;
185
205
  inputSchema?: z.ZodType;
186
- type: "context" | "function" | "agent" | "web_search";
206
+ type: "context" | "function" | "agent" | "web_search" | "skill";
187
207
  config: {
188
208
  name: string;
189
209
  description: string;
@@ -699,6 +719,17 @@ type ExuluAgentToolConfig = {
699
719
  }[];
700
720
  };
701
721
 
722
+ type ExuluSkill = {
723
+ id: string;
724
+ name: string;
725
+ description: string;
726
+ s3folder: string;
727
+ tags: string[];
728
+ usage_count: number;
729
+ favorite_count: number;
730
+ current_version: number;
731
+ };
732
+
702
733
  type ExuluProviderWorkflowConfig = {
703
734
  enabled: boolean;
704
735
  queue?: Promise<ExuluQueueConfig>;
@@ -721,7 +752,6 @@ interface ExuluProviderParams {
721
752
  audio: audioTypes$1[];
722
753
  video: videoTypes$1[];
723
754
  };
724
- outputSchema?: z.ZodType;
725
755
  rateLimit?: RateLimiterRule;
726
756
  }
727
757
  declare class ExuluProvider {
@@ -739,8 +769,12 @@ declare class ExuluProvider {
739
769
  rateLimit?: RateLimiterRule;
740
770
  config?: ExuluProviderConfig | undefined;
741
771
  model?: {
742
- create: ({ apiKey }: {
772
+ create: ({ apiKey, user, role, project, agent }: {
743
773
  apiKey?: string | undefined;
774
+ user?: number;
775
+ role?: string;
776
+ project?: string;
777
+ agent?: string;
744
778
  }) => LanguageModel;
745
779
  };
746
780
  capabilities: {
@@ -754,7 +788,7 @@ declare class ExuluProvider {
754
788
  get providerName(): string;
755
789
  get modelName(): string;
756
790
  tool: (instance: string, providers: ExuluProvider[], contexts: ExuluContext[], rerankers: ExuluReranker[]) => Promise<ExuluTool | null>;
757
- generateSync: ({ prompt, req, user, session, inputMessages, approvedTools, currentTools, allExuluTools, statistics, toolConfigs, providerapikey, contexts, rerankers, exuluConfig, outputSchema, agent, instructions, maxStepCount, }: {
791
+ generateSync: ({ prompt, req, user, session, inputMessages, approvedTools, currentTools, currentSkills, allExuluTools, statistics, toolConfigs, providerapikey, languageModel, contexts, rerankers, exuluConfig, agent, instructions, maxStepCount, onTokenUsage, }: {
758
792
  prompt?: string;
759
793
  user?: User;
760
794
  maxStepCount?: number;
@@ -764,15 +798,20 @@ declare class ExuluProvider {
764
798
  approvedTools?: string[];
765
799
  inputMessages?: UIMessage[];
766
800
  currentTools?: ExuluTool[];
801
+ currentSkills?: ExuluSkill[];
767
802
  allExuluTools?: ExuluTool[];
768
803
  statistics?: ExuluStatisticParams;
769
804
  toolConfigs?: ExuluAgentToolConfig[];
770
805
  providerapikey?: string | undefined;
806
+ languageModel: LanguageModel;
771
807
  contexts?: ExuluContext[] | undefined;
772
808
  rerankers?: ExuluReranker[] | undefined;
773
809
  exuluConfig?: ExuluConfig;
774
810
  instructions?: string;
775
- outputSchema?: z.ZodTypeAny;
811
+ onTokenUsage?: (usage: {
812
+ inputTokens: number;
813
+ outputTokens: number;
814
+ }) => Promise<void> | void;
776
815
  }) => Promise<any>;
777
816
  /**
778
817
  * Convert file parts in messages to OpenAI Responses API compatible format.
@@ -782,7 +821,7 @@ declare class ExuluProvider {
782
821
  * - Image files -> image parts (which ARE supported by Responses API)
783
822
  */
784
823
  private processFilePartsInMessages;
785
- generateStream: ({ user, session, agent, message, previousMessages, currentTools, approvedTools, allExuluTools, toolConfigs, providerapikey, contexts, rerankers, exuluConfig, instructions, req, maxStepCount }: {
824
+ generateStream: ({ user, session, agent, message, previousMessages, currentTools, currentSkills, approvedTools, allExuluTools, toolConfigs, providerapikey, languageModel, contexts, rerankers, exuluConfig, instructions, req, maxStepCount }: {
786
825
  user?: User;
787
826
  session?: string;
788
827
  agent?: ExuluAgent;
@@ -790,10 +829,12 @@ declare class ExuluProvider {
790
829
  message?: UIMessage;
791
830
  previousMessages?: UIMessage[];
792
831
  currentTools?: ExuluTool[];
832
+ currentSkills?: ExuluSkill[];
793
833
  approvedTools?: string[];
794
834
  allExuluTools?: ExuluTool[];
795
835
  toolConfigs?: ExuluAgentToolConfig[];
796
836
  providerapikey?: string | undefined;
837
+ languageModel: LanguageModel;
797
838
  contexts?: ExuluContext[] | undefined;
798
839
  rerankers?: ExuluReranker[] | undefined;
799
840
  exuluConfig?: ExuluConfig;
@@ -886,6 +927,14 @@ type ExuluConfig = {
886
927
  privacy?: {
887
928
  systemPromptPersonalization?: boolean;
888
929
  };
930
+ /**
931
+ * When true, ExuluApp.create() throws if any required system binary
932
+ * (pandoc / soffice / pdftoppm — needed by built-in skills like docx) is
933
+ * missing. When false or unset, the missing deps are logged as a warning
934
+ * and the app continues to start; skills that need the binary will fail
935
+ * at use time instead. Recommended `true` in production deployments.
936
+ */
937
+ requireSystemDependencies?: boolean;
889
938
  };
890
939
  declare class ExuluApp {
891
940
  private _providers;
@@ -1916,12 +1965,6 @@ declare class MarkdownChunker {
1916
1965
  }[]>;
1917
1966
  }
1918
1967
 
1919
- /**
1920
- * Python Environment Setup Utility
1921
- *
1922
- * Provides functions to set up and validate the Python environment for Exulu backend.
1923
- * This can be called manually by package consumers or run automatically on install.
1924
- */
1925
1968
  /**
1926
1969
  * Options for Python environment setup
1927
1970
  */
@@ -2093,6 +2136,7 @@ declare const ExuluDefaultProviders: {
2093
2136
  vertexGemini25Flash: ExuluProvider;
2094
2137
  vertexGemini25Pro: ExuluProvider;
2095
2138
  vertexGemini3Pro: ExuluProvider;
2139
+ vertexLlamaScout4: ExuluProvider;
2096
2140
  };
2097
2141
  openai: {
2098
2142
  gpt5Mini: ExuluProvider;
@@ -2134,11 +2178,13 @@ declare const ExuluOtel: {
2134
2178
  };
2135
2179
 
2136
2180
  declare const ExuluDatabase: {
2137
- init: ({ contexts }: {
2181
+ init: ({ contexts, litellm }: {
2138
2182
  contexts: ExuluContext[];
2183
+ litellm?: boolean;
2139
2184
  }) => Promise<void>;
2140
- update: ({ contexts }: {
2185
+ update: ({ contexts, litellm }: {
2141
2186
  contexts: ExuluContext[];
2187
+ litellm?: boolean;
2142
2188
  }) => Promise<void>;
2143
2189
  api: {
2144
2190
  key: {