@m6d/cortex-server 1.1.1 → 1.2.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.
Files changed (46) hide show
  1. package/README.md +38 -38
  2. package/dist/src/ai/interceptors/{resolve-captured-files.d.ts → request-interceptor.d.ts} +3 -2
  3. package/dist/src/config.d.ts +6 -3
  4. package/dist/src/factory.d.ts +13 -1
  5. package/dist/src/index.d.ts +2 -0
  6. package/dist/src/ws/index.d.ts +1 -1
  7. package/package.json +54 -54
  8. package/src/adapters/database.ts +21 -28
  9. package/src/adapters/minio.ts +69 -69
  10. package/src/adapters/mssql.ts +167 -195
  11. package/src/adapters/storage.ts +4 -4
  12. package/src/ai/fetch.ts +31 -31
  13. package/src/ai/helpers.ts +18 -22
  14. package/src/ai/index.ts +106 -114
  15. package/src/ai/interceptors/request-interceptor.ts +61 -0
  16. package/src/ai/prompt.ts +80 -83
  17. package/src/ai/tools/call-endpoint.tool.ts +75 -82
  18. package/src/ai/tools/capture-files.tool.ts +15 -17
  19. package/src/ai/tools/execute-code.tool.ts +73 -80
  20. package/src/ai/tools/query-graph.tool.ts +17 -17
  21. package/src/auth/middleware.ts +51 -51
  22. package/src/cli/extract-endpoints.ts +436 -474
  23. package/src/config.ts +128 -135
  24. package/src/db/migrate.ts +13 -13
  25. package/src/db/migrations/20260309012148_cloudy_maria_hill/snapshot.json +303 -303
  26. package/src/db/schema.ts +46 -58
  27. package/src/factory.ts +136 -139
  28. package/src/graph/generate-cypher.ts +97 -97
  29. package/src/graph/helpers.ts +37 -37
  30. package/src/graph/index.ts +20 -20
  31. package/src/graph/neo4j.ts +82 -89
  32. package/src/graph/resolver.ts +201 -211
  33. package/src/graph/seed.ts +101 -114
  34. package/src/graph/types.ts +88 -88
  35. package/src/graph/validate.ts +55 -57
  36. package/src/index.ts +12 -5
  37. package/src/routes/chat.ts +23 -23
  38. package/src/routes/files.ts +75 -80
  39. package/src/routes/threads.ts +52 -54
  40. package/src/routes/ws.ts +22 -22
  41. package/src/types.ts +30 -30
  42. package/src/ws/connections.ts +11 -11
  43. package/src/ws/events.ts +2 -2
  44. package/src/ws/index.ts +1 -5
  45. package/src/ws/notify.ts +4 -4
  46. package/src/ai/interceptors/resolve-captured-files.ts +0 -64
package/src/config.ts CHANGED
@@ -1,156 +1,149 @@
1
- import type { UIMessage } from "ai";
1
+ import type { Tool, ToolSet, UIMessage } from "ai";
2
2
  import type { DatabaseAdapter } from "./adapters/database";
3
3
  import type { StorageAdapter } from "./adapters/storage";
4
4
  import type { DomainDef } from "./graph/types.ts";
5
+ import type { RequestInterceptorOptions } from "./ai/interceptors/request-interceptor.ts";
5
6
 
6
7
  export type KnowledgeConfig = {
7
- swagger?: { url: string };
8
- domains?: Record<string, DomainDef>;
8
+ swagger?: { url: string };
9
+ domains?: Record<string, DomainDef>;
9
10
  };
10
11
 
11
12
  export type DatabaseConfig = {
12
- type: "mssql";
13
- connectionString: string;
13
+ type: "mssql";
14
+ connectionString: string;
14
15
  };
15
16
 
16
17
  export type StorageConfig = {
17
- endPoint: string;
18
- port: number;
19
- useSSL: boolean;
20
- accessKey: string;
21
- secretKey: string;
22
- bucketName?: string;
18
+ endPoint: string;
19
+ port: number;
20
+ useSSL: boolean;
21
+ accessKey: string;
22
+ secretKey: string;
23
+ bucketName?: string;
23
24
  };
24
25
 
25
26
  export type CortexAgentDefinition = {
26
- systemPrompt:
27
- | string
28
- | ((session: Record<string, unknown> | null) => string | Promise<string>);
29
- tools?: Record<string, unknown>;
30
- backendFetch?: {
31
- baseUrl: string;
32
- apiKey: string;
33
- headers?: Record<string, string>;
34
- transformRequestBody?: (
35
- body: Record<string, unknown>,
36
- context: { token: string },
37
- ) => Promise<Record<string, unknown>>;
38
- };
39
- loadSessionData?: (token: string) => Promise<Record<string, unknown>>;
40
- onToolCall?: (toolCall: {
41
- toolName: string;
42
- toolCallId: string;
43
- args: Record<string, unknown>;
44
- }) => void;
45
- onStreamFinish?: (result: {
46
- messages: UIMessage[];
47
- isAborted: boolean;
48
- }) => void;
49
- model?: {
50
- baseURL: string;
51
- apiKey: string;
52
- modelName: string;
53
- providerName?: string;
54
- };
55
- embedding?: {
56
- baseURL: string;
57
- apiKey: string;
58
- modelName: string;
59
- dimension: number;
60
- };
61
- neo4j?: {
62
- url: string;
63
- user: string;
64
- password: string;
65
- };
66
- reranker?: {
67
- url: string;
68
- apiKey: string;
69
- };
70
- knowledge?: KnowledgeConfig | null;
27
+ systemPrompt: string | ((session: Record<string, unknown> | null) => string | Promise<string>);
28
+ tools?: ToolSet;
29
+ backendFetch?: {
30
+ baseUrl: string;
31
+ apiKey: string;
32
+ headers?: Record<string, string>;
33
+ transformRequestBody?: (
34
+ body: Record<string, unknown>,
35
+ context: { token: string },
36
+ ) => Promise<Record<string, unknown>>;
37
+ interceptor?: RequestInterceptorOptions;
38
+ };
39
+ loadSessionData?: (token: string) => Promise<Record<string, unknown>>;
40
+ onToolCall?: (toolCall: {
41
+ toolName: string;
42
+ toolCallId: string;
43
+ args: Record<string, unknown>;
44
+ }) => void;
45
+ onStreamFinish?: (result: { messages: UIMessage[]; isAborted: boolean }) => void;
46
+ model?: {
47
+ baseURL: string;
48
+ apiKey: string;
49
+ modelName: string;
50
+ providerName?: string;
51
+ };
52
+ embedding?: {
53
+ baseURL: string;
54
+ apiKey: string;
55
+ modelName: string;
56
+ dimension: number;
57
+ };
58
+ neo4j?: {
59
+ url: string;
60
+ user: string;
61
+ password: string;
62
+ };
63
+ reranker?: {
64
+ url: string;
65
+ apiKey: string;
66
+ };
67
+ knowledge?: KnowledgeConfig | null;
71
68
  };
72
69
 
73
70
  export type ResolvedCortexAgentConfig = {
74
- db: DatabaseAdapter;
75
- storage: StorageAdapter;
76
- model: {
77
- baseURL: string;
78
- apiKey: string;
79
- modelName: string;
80
- providerName?: string;
81
- };
82
- embedding: {
83
- baseURL: string;
84
- apiKey: string;
85
- modelName: string;
86
- dimension: number;
87
- };
88
- neo4j: {
89
- url: string;
90
- user: string;
91
- password: string;
92
- };
93
- reranker?: {
94
- url: string;
95
- apiKey: string;
96
- };
97
- systemPrompt:
98
- | string
99
- | ((session: Record<string, unknown> | null) => string | Promise<string>);
100
- tools?: Record<string, unknown>;
101
- backendFetch?: {
102
- baseUrl: string;
103
- apiKey: string;
104
- headers?: Record<string, string>;
105
- transformRequestBody?: (
106
- body: Record<string, unknown>,
107
- context: { token: string },
108
- ) => Promise<Record<string, unknown>>;
109
- };
110
- loadSessionData?: (token: string) => Promise<Record<string, unknown>>;
111
- onToolCall?: (toolCall: {
112
- toolName: string;
113
- toolCallId: string;
114
- args: Record<string, unknown>;
115
- }) => void;
116
- onStreamFinish?: (result: {
117
- messages: UIMessage[];
118
- isAborted: boolean;
119
- }) => void;
120
- knowledge?: KnowledgeConfig;
71
+ db: DatabaseAdapter;
72
+ storage: StorageAdapter;
73
+ model: {
74
+ baseURL: string;
75
+ apiKey: string;
76
+ modelName: string;
77
+ providerName?: string;
78
+ };
79
+ embedding: {
80
+ baseURL: string;
81
+ apiKey: string;
82
+ modelName: string;
83
+ dimension: number;
84
+ };
85
+ neo4j: {
86
+ url: string;
87
+ user: string;
88
+ password: string;
89
+ };
90
+ reranker?: {
91
+ url: string;
92
+ apiKey: string;
93
+ };
94
+ systemPrompt: string | ((session: Record<string, unknown> | null) => string | Promise<string>);
95
+ tools?: ToolSet;
96
+ backendFetch?: {
97
+ baseUrl: string;
98
+ apiKey: string;
99
+ headers?: Record<string, string>;
100
+ transformRequestBody?: (
101
+ body: Record<string, unknown>,
102
+ context: { token: string },
103
+ ) => Promise<Record<string, unknown>>;
104
+ interceptor?: RequestInterceptorOptions;
105
+ };
106
+ loadSessionData?: (token: string) => Promise<Record<string, unknown>>;
107
+ onToolCall?: (toolCall: {
108
+ toolName: string;
109
+ toolCallId: string;
110
+ args: Record<string, unknown>;
111
+ }) => void;
112
+ onStreamFinish?: (result: { messages: UIMessage[]; isAborted: boolean }) => void;
113
+ knowledge?: KnowledgeConfig;
121
114
  };
122
115
 
123
116
  export type CortexConfig = {
124
- port?: number;
125
- database: DatabaseConfig;
126
- storage: StorageConfig;
127
- auth: {
128
- jwksUri: string;
129
- issuer: string;
130
- tokenExtractor?: (req: Request) => string | null;
131
- cookieName?: string;
132
- };
133
- model: {
134
- baseURL: string;
135
- apiKey: string;
136
- modelName: string;
137
- providerName?: string;
138
- };
139
- embedding: {
140
- baseURL: string;
141
- apiKey: string;
142
- modelName: string;
143
- dimension: number;
144
- };
145
- neo4j: {
146
- url: string;
147
- user: string;
148
- password: string;
149
- };
150
- reranker?: {
151
- url: string;
152
- apiKey: string;
153
- };
154
- knowledge?: KnowledgeConfig;
155
- agents: Record<string, CortexAgentDefinition>;
117
+ port?: number;
118
+ database: DatabaseConfig;
119
+ storage: StorageConfig;
120
+ auth: {
121
+ jwksUri: string;
122
+ issuer: string;
123
+ tokenExtractor?: (req: Request) => string | null;
124
+ cookieName?: string;
125
+ };
126
+ model: {
127
+ baseURL: string;
128
+ apiKey: string;
129
+ modelName: string;
130
+ providerName?: string;
131
+ };
132
+ embedding: {
133
+ baseURL: string;
134
+ apiKey: string;
135
+ modelName: string;
136
+ dimension: number;
137
+ };
138
+ neo4j: {
139
+ url: string;
140
+ user: string;
141
+ password: string;
142
+ };
143
+ reranker?: {
144
+ url: string;
145
+ apiKey: string;
146
+ };
147
+ knowledge?: KnowledgeConfig;
148
+ agents: Record<string, CortexAgentDefinition>;
156
149
  };
package/src/db/migrate.ts CHANGED
@@ -4,18 +4,18 @@ import { migrate } from "drizzle-orm/node-mssql/migrator";
4
4
  import { resolve } from "path";
5
5
 
6
6
  export async function runMigrations(connectionString: string) {
7
- const pool = new mssql.ConnectionPool(connectionString);
8
- await pool.connect();
7
+ const pool = new mssql.ConnectionPool(connectionString);
8
+ await pool.connect();
9
9
 
10
- try {
11
- const db = drizzle({ client: pool, casing: "snake_case" });
12
- const migrationsFolder = resolve(import.meta.dir, "migrations");
13
- console.log("[cortex-server] Running migrations from:", migrationsFolder);
14
- await migrate(db, { migrationsFolder });
15
- console.log("[cortex-server] Migrations complete");
16
- } catch (e) {
17
- console.log(e);
18
- } finally {
19
- await pool.close();
20
- }
10
+ try {
11
+ const db = drizzle({ client: pool, casing: "snake_case" });
12
+ const migrationsFolder = resolve(import.meta.dir, "migrations");
13
+ console.log("[cortex-server] Running migrations from:", migrationsFolder);
14
+ await migrate(db, { migrationsFolder });
15
+ console.log("[cortex-server] Migrations complete");
16
+ } catch (e) {
17
+ console.log(e);
18
+ } finally {
19
+ await pool.close();
20
+ }
21
21
  }