@ixo/common 1.1.2 → 1.1.4

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 (104) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/ai/models/openai.d.ts +16 -0
  3. package/dist/ai/models/openai.d.ts.map +1 -1
  4. package/dist/ai/models/openai.js +26 -0
  5. package/dist/ai/models/openai.js.map +1 -1
  6. package/dist/ai/nodes/generic-chat/generic-chat.node.d.ts +1 -1
  7. package/dist/ai/nodes/index.d.ts +0 -1
  8. package/dist/ai/nodes/index.d.ts.map +1 -1
  9. package/dist/ai/nodes/index.js +0 -1
  10. package/dist/ai/nodes/index.js.map +1 -1
  11. package/dist/ai/semantic-router-factory/create-semantic-router.d.ts +1 -2
  12. package/dist/ai/semantic-router-factory/create-semantic-router.d.ts.map +1 -1
  13. package/dist/ai/semantic-router-factory/create-semantic-router.js +2 -3
  14. package/dist/ai/semantic-router-factory/create-semantic-router.js.map +1 -1
  15. package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.d.ts +1 -1
  16. package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.d.ts.map +1 -1
  17. package/dist/ai/tools/index.d.ts +0 -1
  18. package/dist/ai/tools/index.d.ts.map +1 -1
  19. package/dist/ai/tools/index.js +0 -1
  20. package/dist/ai/tools/index.js.map +1 -1
  21. package/dist/ai/tools/parser-action-tool.d.ts +1 -1
  22. package/dist/ai/tools/parser-action-tool.d.ts.map +1 -1
  23. package/dist/ai/tools/parser-action-tool.js +10 -3
  24. package/dist/ai/tools/parser-action-tool.js.map +1 -1
  25. package/dist/ai/tools/parser-browser-tool.d.ts +1 -1
  26. package/dist/ai/tools/parser-browser-tool.d.ts.map +1 -1
  27. package/dist/ai/tools/scrape-web-page.d.ts +1 -1
  28. package/dist/ai/tools/scrape-web-page.d.ts.map +1 -1
  29. package/dist/ai/tools/web-search-tool.d.ts +1 -1
  30. package/dist/ai/tools/web-search-tool.d.ts.map +1 -1
  31. package/dist/ai/utils/load-file.d.ts +1 -0
  32. package/dist/ai/utils/load-file.d.ts.map +1 -1
  33. package/dist/ai/utils/load-file.js +8 -0
  34. package/dist/ai/utils/load-file.js.map +1 -1
  35. package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.d.ts +10 -0
  36. package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.d.ts.map +1 -1
  37. package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.js +4 -1
  38. package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.js.map +1 -1
  39. package/dist/ai/utils/verify-matrix-openId-token.js +2 -2
  40. package/dist/ai/utils/verify-matrix-openId-token.js.map +1 -1
  41. package/dist/services/env/env.service.js.map +1 -1
  42. package/dist/services/memory-engine/memory-engine.service.d.ts +22 -16
  43. package/dist/services/memory-engine/memory-engine.service.d.ts.map +1 -1
  44. package/dist/services/memory-engine/memory-engine.service.js +136 -111
  45. package/dist/services/memory-engine/memory-engine.service.js.map +1 -1
  46. package/dist/services/memory-engine/types.d.ts +16 -0
  47. package/dist/services/memory-engine/types.d.ts.map +1 -1
  48. package/dist/services/memory-engine/types.js +4 -1
  49. package/dist/services/memory-engine/types.js.map +1 -1
  50. package/dist/services/session-manager/dto.d.ts +7 -0
  51. package/dist/services/session-manager/dto.d.ts.map +1 -1
  52. package/dist/services/session-manager/dto.js +42 -0
  53. package/dist/services/session-manager/dto.js.map +1 -1
  54. package/dist/services/session-manager/session-manager.service.d.ts +2 -2
  55. package/dist/services/session-manager/session-manager.service.d.ts.map +1 -1
  56. package/dist/services/session-manager/session-manager.service.js +81 -36
  57. package/dist/services/session-manager/session-manager.service.js.map +1 -1
  58. package/dist/utils/get-user-subscription.d.ts +2 -1
  59. package/dist/utils/get-user-subscription.d.ts.map +1 -1
  60. package/dist/utils/get-user-subscription.js +11 -7
  61. package/dist/utils/get-user-subscription.js.map +1 -1
  62. package/package.json +24 -25
  63. package/src/ai/models/openai.ts +31 -0
  64. package/src/ai/nodes/index.ts +0 -1
  65. package/src/ai/semantic-router-factory/create-semantic-router.test.ts +0 -3
  66. package/src/ai/semantic-router-factory/create-semantic-router.ts +2 -7
  67. package/src/ai/tools/index.ts +0 -1
  68. package/src/ai/tools/parser-action-tool.ts +19 -3
  69. package/src/ai/utils/load-file.ts +17 -0
  70. package/src/ai/utils/transformGraphStateMessageToListMessageResponse.ts +18 -1
  71. package/src/ai/utils/verify-matrix-openId-token.ts +2 -2
  72. package/src/services/env/env.service.ts +1 -1
  73. package/src/services/memory-engine/memory-engine.service.ts +228 -240
  74. package/src/services/memory-engine/types.ts +34 -0
  75. package/src/services/session-manager/dto.ts +30 -0
  76. package/src/services/session-manager/session-manager.service.ts +98 -38
  77. package/src/utils/get-user-subscription.ts +13 -6
  78. package/tsconfig.tsbuildinfo +1 -1
  79. package/dist/ai/nodes/find-docs/find-docs.prompt.d.ts +0 -3
  80. package/dist/ai/nodes/find-docs/find-docs.prompt.d.ts.map +0 -1
  81. package/dist/ai/nodes/find-docs/find-docs.prompt.js +0 -61
  82. package/dist/ai/nodes/find-docs/find-docs.prompt.js.map +0 -1
  83. package/dist/ai/nodes/find-docs/index.d.ts +0 -3
  84. package/dist/ai/nodes/find-docs/index.d.ts.map +0 -1
  85. package/dist/ai/nodes/find-docs/index.js +0 -3
  86. package/dist/ai/nodes/find-docs/index.js.map +0 -1
  87. package/dist/ai/nodes/find-docs/node.d.ts +0 -17
  88. package/dist/ai/nodes/find-docs/node.d.ts.map +0 -1
  89. package/dist/ai/nodes/find-docs/node.js +0 -46
  90. package/dist/ai/nodes/find-docs/node.js.map +0 -1
  91. package/dist/ai/tools/retriever-tool/index.d.ts +0 -2
  92. package/dist/ai/tools/retriever-tool/index.d.ts.map +0 -1
  93. package/dist/ai/tools/retriever-tool/index.js +0 -2
  94. package/dist/ai/tools/retriever-tool/index.js.map +0 -1
  95. package/dist/ai/tools/retriever-tool/retriever-tool.d.ts +0 -18
  96. package/dist/ai/tools/retriever-tool/retriever-tool.d.ts.map +0 -1
  97. package/dist/ai/tools/retriever-tool/retriever-tool.js +0 -62
  98. package/dist/ai/tools/retriever-tool/retriever-tool.js.map +0 -1
  99. package/src/ai/nodes/find-docs/find-docs.prompt.ts +0 -61
  100. package/src/ai/nodes/find-docs/index.ts +0 -2
  101. package/src/ai/nodes/find-docs/node.ts +0 -83
  102. package/src/ai/tools/retriever-tool/index.ts +0 -1
  103. package/src/ai/tools/retriever-tool/retriever-tool.test.ts +0 -163
  104. package/src/ai/tools/retriever-tool/retriever-tool.ts +0 -107
@@ -1,7 +1,7 @@
1
1
  import { Logger } from '@ixo/logger';
2
2
  import { MatrixManager } from '@ixo/matrix';
3
3
  import { getMatrixHomeServerCroppedForDid } from '@ixo/oracles-chain-client';
4
- import { getChatOpenAiModel } from '../../ai/index.js';
4
+ import { getChatOpenAiModel, getLLMProvider, getOpenRouterChatModel, getProviderConfig, } from '../../ai/index.js';
5
5
  export class SessionManagerService {
6
6
  syncService;
7
7
  matrixManger;
@@ -18,17 +18,25 @@ export class SessionManagerService {
18
18
  if (messages.length === 0) {
19
19
  return 'Untitled';
20
20
  }
21
- const llm = getChatOpenAiModel({
22
- model: 'meta-llama/llama-3.1-8b-instruct',
23
- temperature: 0.3,
24
- apiKey: process.env.OPEN_ROUTER_API_KEY,
25
- timeout: 20 * 1000 * 60,
26
- configuration: {
27
- baseURL: 'https://openrouter.ai/api/v1',
28
- },
29
- });
30
- const response = await llm.invoke(`Based on this messages messages, Add a title for this convo and only based on the messages? MAKE SURE TO ONLY RESPOND WITH THE TITLE.
31
-
21
+ const provider = getLLMProvider();
22
+ const config = getProviderConfig();
23
+ const llm = provider === 'openrouter'
24
+ ? getOpenRouterChatModel({
25
+ model: 'meta-llama/llama-3.1-8b-instruct',
26
+ temperature: 0.3,
27
+ timeout: 60_000,
28
+ })
29
+ : getChatOpenAiModel({
30
+ model: 'meta-llama/Meta-Llama-3.1-8B-Instruct',
31
+ temperature: 0.3,
32
+ apiKey: config.apiKey,
33
+ timeout: 60_000,
34
+ configuration: {
35
+ baseURL: config.baseURL,
36
+ },
37
+ });
38
+ const response = await llm.invoke(`Based on this messages messages, Add a title for this convo and only based on the messages? MAKE SURE TO ONLY RESPOND WITH THE TITLE.
39
+
32
40
  ## RESPONSE FORMAT
33
41
  ONLY RESPOND WITH THE TITLE not anything else that title will be saved to the store directly from your response so generated based on the messages.
34
42
 
@@ -81,7 +89,7 @@ ___________________________________________________________
81
89
  db.prepare('UPDATE sessions SET last_processed_count = ? WHERE session_id = ?').run(lastProcessedCount, sessionId);
82
90
  return;
83
91
  }
84
- async syncSessionSet({ sessionId, did, messages, oracleEntityDid, oracleName, roomId: _roomId, lastProcessedCount, oracleDid, userContext, slackThreadTs, }) {
92
+ async syncSessionSet({ sessionId, did, messages, oracleEntityDid, oracleName, roomId, lastProcessedCount, oracleDid, userContext, slackThreadTs, }) {
85
93
  const db = await this.syncService.getUserDatabase(did);
86
94
  const selectedSession = await this.getSession(sessionId, did, false);
87
95
  if (!selectedSession) {
@@ -96,12 +104,13 @@ ___________________________________________________________
96
104
  oracleEntityDid,
97
105
  oracleDid,
98
106
  userContext,
107
+ roomId,
99
108
  slackThreadTs,
100
109
  };
101
110
  db.prepare(`
102
111
  INSERT INTO sessions (
103
- session_id, title, last_updated_at, created_at, oracle_name,
104
- oracle_did, oracle_entity_did, last_processed_count,
112
+ session_id, title, last_updated_at, created_at, oracle_name,
113
+ oracle_did, oracle_entity_did, last_processed_count,
105
114
  user_context, room_id, slack_thread_ts
106
115
  )
107
116
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -118,6 +127,18 @@ ___________________________________________________________
118
127
  messages,
119
128
  })
120
129
  : selectedSession.title;
130
+ if (allowTitleUpdate && roomId && title) {
131
+ this.matrixManger
132
+ .editMessage({
133
+ messageId: sessionId,
134
+ roomId,
135
+ message: title,
136
+ isOracleAdmin: true,
137
+ })
138
+ .catch((err) => {
139
+ Logger.error('Failed to update conversation title in Matrix:', err);
140
+ });
141
+ }
121
142
  const lastUpdatedAt = new Date().toISOString();
122
143
  const updatedSession = {
123
144
  ...selectedSession,
@@ -127,7 +148,7 @@ ___________________________________________________________
127
148
  slackThreadTs,
128
149
  };
129
150
  db.prepare(`
130
- UPDATE sessions
151
+ UPDATE sessions
131
152
  SET title = ?, last_updated_at = ?, last_processed_count = ?, slack_thread_ts = ?
132
153
  WHERE session_id = ?
133
154
  `).run(updatedSession.title ?? null, lastUpdatedAt, updatedSession.lastProcessedCount ?? null, updatedSession.slackThreadTs ?? null, sessionId);
@@ -136,11 +157,11 @@ ___________________________________________________________
136
157
  async getSession(sessionId, did, throwOnNotFound = true) {
137
158
  const db = await this.syncService.getUserDatabase(did);
138
159
  const row = db
139
- .prepare(`SELECT
160
+ .prepare(`SELECT
140
161
  session_id, title, last_updated_at, created_at, oracle_name,
141
162
  oracle_did, oracle_entity_did, last_processed_count,
142
163
  user_context, room_id, slack_thread_ts
143
- FROM sessions
164
+ FROM sessions
144
165
  WHERE session_id = ?`)
145
166
  .get(sessionId);
146
167
  const selectedSession = row
@@ -172,16 +193,29 @@ ___________________________________________________________
172
193
  const db = await this.syncService.getUserDatabase(listSessionsDto.did);
173
194
  const limit = listSessionsDto.limit ?? 20;
174
195
  const offset = listSessionsDto.offset ?? 0;
175
- const rows = db
176
- .prepare(`SELECT
196
+ const hasRoomFilter = !!listSessionsDto.roomId;
197
+ const sql = hasRoomFilter
198
+ ? `SELECT
199
+ session_id, title, last_updated_at, created_at, oracle_name,
200
+ oracle_did, oracle_entity_did, last_processed_count,
201
+ user_context, room_id, slack_thread_ts,
202
+ COUNT(*) OVER() as total
203
+ FROM sessions
204
+ WHERE room_id = ?
205
+ ORDER BY last_updated_at DESC
206
+ LIMIT ? OFFSET ?`
207
+ : `SELECT
177
208
  session_id, title, last_updated_at, created_at, oracle_name,
178
209
  oracle_did, oracle_entity_did, last_processed_count,
179
210
  user_context, room_id, slack_thread_ts,
180
211
  COUNT(*) OVER() as total
181
- FROM sessions
212
+ FROM sessions
182
213
  ORDER BY last_updated_at DESC
183
- LIMIT ? OFFSET ?`)
184
- .all(limit, offset);
214
+ LIMIT ? OFFSET ?`;
215
+ const params = hasRoomFilter
216
+ ? [listSessionsDto.roomId, limit, offset]
217
+ : [limit, offset];
218
+ const rows = db.prepare(sql).all(...params);
185
219
  const total = rows[0]?.total ?? 0;
186
220
  const sessions = rows.map((row) => ({
187
221
  sessionId: row.session_id,
@@ -200,30 +234,41 @@ ___________________________________________________________
200
234
  }));
201
235
  return { sessions, total };
202
236
  }
203
- async createSession(createSessionDto) {
237
+ async createSession(createSessionDto, overrideEventId) {
204
238
  const userHomeServer = createSessionDto.homeServer ||
205
239
  (await getMatrixHomeServerCroppedForDid(createSessionDto.did));
206
- const { roomId } = await this.matrixManger.getOracleRoomIdWithHomeServer({
207
- userDid: createSessionDto.did,
208
- oracleEntityDid: createSessionDto.oracleEntityDid,
209
- userHomeServer,
210
- });
240
+ let roomId = createSessionDto.roomId;
241
+ if (!roomId) {
242
+ const resolved = await this.matrixManger.getOracleRoomIdWithHomeServer({
243
+ userDid: createSessionDto.did,
244
+ oracleEntityDid: createSessionDto.oracleEntityDid,
245
+ userHomeServer,
246
+ });
247
+ roomId = resolved.roomId;
248
+ }
211
249
  if (!roomId) {
212
250
  throw new Error('Room ID not found');
213
251
  }
214
- const eventId = await this.matrixManger.sendMessage({
215
- message: 'New Conversation Started',
216
- roomId,
217
- isOracleAdmin: true,
218
- });
252
+ const eventId = overrideEventId ??
253
+ (await this.matrixManger.sendMessage({
254
+ message: 'New Conversation Started',
255
+ roomId,
256
+ isOracleAdmin: true,
257
+ }));
219
258
  let userContext;
220
- if (this.memoryEngineService) {
259
+ if (this.memoryEngineService &&
260
+ (createSessionDto.ucanInvocation ||
261
+ (createSessionDto.oracleToken && createSessionDto.userToken))) {
221
262
  try {
222
263
  Logger.debug('Gathering user context from Memory Engine');
223
264
  userContext = await this.memoryEngineService.gatherUserContext({
224
265
  oracleDid: createSessionDto.oracleDid,
225
- userDid: createSessionDto.did,
226
266
  roomId,
267
+ oracleToken: createSessionDto.oracleToken ?? '',
268
+ userToken: createSessionDto.userToken ?? '',
269
+ oracleHomeServer: createSessionDto.oracleHomeServer ?? '',
270
+ userHomeServer: createSessionDto.userHomeServer ?? '',
271
+ ucanInvocation: createSessionDto.ucanInvocation,
227
272
  });
228
273
  }
229
274
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.service.js","sourceRoot":"","sources":["../../../src/services/session-manager/session-manager.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.service.js","sourceRoot":"","sources":["../../../src/services/session-manager/session-manager.service.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export interface GetUserSubscriptionParams {
16
16
  network: 'mainnet' | 'testnet' | 'devnet';
17
17
  bearerToken: string;
18
18
  subscriptionUrl?: string;
19
+ authType?: 'ucan';
19
20
  }
20
- export declare const getUserSubscription: ({ bearerToken, network, subscriptionUrl: _subscriptionUrl, }: GetUserSubscriptionParams) => Promise<GetMySubscriptionsResponseDto | null>;
21
+ export declare const getUserSubscription: ({ bearerToken, network, subscriptionUrl: _subscriptionUrl, authType, }: GetUserSubscriptionParams) => Promise<GetMySubscriptionsResponseDto | null>;
21
22
  //# sourceMappingURL=get-user-subscription.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-user-subscription.d.ts","sourceRoot":"","sources":["../../src/utils/get-user-subscription.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B,GACtC,SAAS,SAAS,GAAG,SAAS,GAAG,QAAQ,WAO1C,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,6BAA6B;IAC5C,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;IACvD,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,mBAAmB,GAAU,8DAIvC,yBAAyB,KAAG,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAyC1E,CAAC"}
1
+ {"version":3,"file":"get-user-subscription.d.ts","sourceRoot":"","sources":["../../src/utils/get-user-subscription.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B,GACtC,SAAS,SAAS,GAAG,SAAS,GAAG,QAAQ,WAO1C,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,6BAA6B;IAC5C,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;IACvD,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,mBAAmB,GAAU,wEAKvC,yBAAyB,KAAG,OAAO,CAAC,6BAA6B,GAAG,IAAI,CA6C1E,CAAC"}
@@ -6,19 +6,23 @@ export const getSubscriptionUrlByNetwork = (network) => {
6
6
  devnet: 'https://subscriptions-api.ixo-api.workers.dev',
7
7
  }[network];
8
8
  };
9
- export const getUserSubscription = async ({ bearerToken, network, subscriptionUrl: _subscriptionUrl, }) => {
9
+ export const getUserSubscription = async ({ bearerToken, network, subscriptionUrl: _subscriptionUrl, authType, }) => {
10
10
  const subscriptionUrl = _subscriptionUrl ?? getSubscriptionUrlByNetwork(network);
11
11
  try {
12
12
  Logger.debug('Fetching user subscription from:', subscriptionUrl);
13
+ const headers = {
14
+ Authorization: `Bearer ${bearerToken}`,
15
+ 'Content-Type': 'application/json',
16
+ };
17
+ if (authType === 'ucan') {
18
+ headers['X-Auth-Type'] = 'ucan';
19
+ }
13
20
  const response = await fetch(`${subscriptionUrl.endsWith('/') ? subscriptionUrl.slice(0, -1) : subscriptionUrl}/api/v1/subscriptions`, {
14
21
  method: 'GET',
15
- headers: {
16
- Authorization: `Bearer ${bearerToken}`,
17
- 'Content-Type': 'application/json',
18
- },
22
+ headers,
19
23
  });
20
24
  if (!response.ok) {
21
- console.error(`Failed to fetch user subscription: ${response.status} ${response.statusText}`);
25
+ Logger.error(`Failed to fetch user subscription: ${response.status} ${response.statusText}`);
22
26
  return null;
23
27
  }
24
28
  const data = await response.json();
@@ -37,7 +41,7 @@ export const getUserSubscription = async ({ bearerToken, network, subscriptionUr
37
41
  };
38
42
  }
39
43
  catch (error) {
40
- console.error('Error fetching user subscription:', error);
44
+ Logger.error('Error fetching user subscription:', error);
41
45
  return null;
42
46
  }
43
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"get-user-subscription.js","sourceRoot":"","sources":["../../src/utils/get-user-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,OAAyC,EACzC,EAAE;IACF,OAAO;QACL,OAAO,EAAE,uDAAuD;QAChE,OAAO,EAAE,uDAAuD;QAChE,MAAM,EAAE,+CAA+C;KACxD,CAAC,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AA4BF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,WAAW,EACX,OAAO,EACP,eAAe,EAAE,gBAAgB,GACP,EAAiD,EAAE;IAC7E,MAAM,eAAe,GACnB,gBAAgB,IAAI,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,eAAe,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,uBAAuB,EACxG;YACE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;aACnC;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CACX,sCAAsC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC/E,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,IAAmC,CAAC;QACzD,OAAO;YACL,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;YAC/C,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,eAAe,EAAE,YAAY,CAAC,eAAe;YAC7C,YAAY,EAAE,YAAY,CAAC,YAAY;YACvC,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,YAAY,EAAE,YAAY,CAAC,YAAY;SACxC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"get-user-subscription.js","sourceRoot":"","sources":["../../src/utils/get-user-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,OAAyC,EACzC,EAAE;IACF,OAAO;QACL,OAAO,EAAE,uDAAuD;QAChE,OAAO,EAAE,uDAAuD;QAChE,MAAM,EAAE,+CAA+C;KACxD,CAAC,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AA8BF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,WAAW,EACX,OAAO,EACP,eAAe,EAAE,gBAAgB,EACjC,QAAQ,GACkB,EAAiD,EAAE;IAC7E,MAAM,eAAe,GACnB,gBAAgB,IAAI,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,eAAe,CAAC,CAAC;QAClE,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,UAAU,WAAW,EAAE;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,OAAO,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;QAClC,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,uBAAuB,EACxG;YACE,MAAM,EAAE,KAAK;YACb,OAAO;SACR,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CACV,sCAAsC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC/E,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,IAAmC,CAAC;QACzD,OAAO;YACL,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;YAC/C,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,eAAe,EAAE,YAAY,CAAC,eAAe;YAC7C,YAAY,EAAE,YAAY,CAAC,YAAY;YACvC,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,YAAY,EAAE,YAAY,CAAC,YAAY;SACxC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ixo/common",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -24,32 +24,31 @@
24
24
  }
25
25
  },
26
26
  "devDependencies": {
27
- "@langchain/langgraph-checkpoint-validation": "^1.0.0",
27
+ "@langchain/langgraph-checkpoint-validation": "^1.0.9",
28
28
  "@testcontainers/postgresql": "^10.16.0",
29
29
  "@types/better-sqlite3": "^7.6.13",
30
30
  "@types/node": "^22.7.3",
31
31
  "@types/store": "^2.0.5",
32
- "better-sqlite3": "^12.4.6",
32
+ "better-sqlite3": "^12.9.0",
33
33
  "testcontainers": "^10.16.0",
34
34
  "typescript": "^5.3.3",
35
- "@ixo/data-store": "^1.0.1",
36
35
  "@ixo/eslint-config": "2.0.0",
37
- "@ixo/oracles-events": "^1.0.3",
38
- "@ixo/typescript-config": "1.0.0",
39
- "@ixo/vitest-config": "1.0.0"
36
+ "@ixo/oracles-events": "^1.0.4",
37
+ "@ixo/vitest-config": "1.0.0",
38
+ "@ixo/typescript-config": "1.0.0"
40
39
  },
41
40
  "dependencies": {
42
41
  "@cosmjs/proto-signing": "^0.33.0",
43
42
  "@cosmjs/stargate": "^0.33.0",
44
43
  "@ixo/impactxclient-sdk": "^2.3.1",
45
- "@langchain/community": "^1.0.4",
46
- "@langchain/core": "1.0.6",
47
- "@langchain/langgraph": "1.0.2",
48
- "@langchain/langgraph-checkpoint": "^1.0.0",
49
- "@langchain/langgraph-checkpoint-sqlite": "^1.0.0",
50
- "@langchain/openai": "^1.1.2",
51
- "@langchain/textsplitters": "^1.0.0",
52
- "@tavily/core": "0.0.2",
44
+ "@langchain/community": "^1.1.27",
45
+ "@langchain/core": "^1.1.42",
46
+ "@langchain/langgraph": "^1.2.9",
47
+ "@langchain/langgraph-checkpoint": "^1.0.1",
48
+ "@langchain/langgraph-checkpoint-sqlite": "^1.0.1",
49
+ "@langchain/openai": "^1.4.5",
50
+ "@langchain/textsplitters": "^1.0.1",
51
+ "@tavily/core": "0.7.2",
53
52
  "axios": "^1.7.9",
54
53
  "axios-retry": "^4.5.0",
55
54
  "class-transformer": "^0.5.1",
@@ -57,18 +56,18 @@
57
56
  "dotenv": "^16.4.5",
58
57
  "duck-duck-scrape": "^2.2.5",
59
58
  "html-to-text": "9.0.5",
60
- "langchain": "1.0.6",
61
- "langfuse": "^3.38.5",
62
- "langsmith": "^0.1.61",
63
- "mammoth": "1.8.0",
64
- "openai": "^6.9.1",
65
- "pdf-parse": "^1.1.1",
66
- "playwright": "^1.51.0",
59
+ "langchain": "^1.3.5",
60
+ "langsmith": "^0.5.25",
61
+ "mammoth": "1.12.0",
62
+ "openai": "^6.34.0",
63
+ "pdf-parse": "2.4.5",
64
+ "playwright": "^1.59.1",
65
+ "node-emoji": "^2.2.0",
67
66
  "store": "^2.0.12",
68
- "zod": "^4.1.12",
67
+ "zod": "^4.3.6",
69
68
  "@ixo/logger": "0.0.2",
70
- "@ixo/oracles-chain-client": "1.2.0",
71
- "@ixo/matrix": "1.2.2"
69
+ "@ixo/oracles-chain-client": "1.2.2",
70
+ "@ixo/matrix": "1.2.31"
72
71
  },
73
72
  "scripts": {
74
73
  "build": "tsc && tsc-alias",
@@ -8,6 +8,37 @@ import {
8
8
  } from '@langchain/openai';
9
9
  import OpenAI, { type ClientOptions } from 'openai';
10
10
 
11
+ export type LLMProvider = 'openrouter' | 'nebius';
12
+
13
+ export function getLLMProvider(): LLMProvider {
14
+ const raw = (process.env.LLM_PROVIDER ?? 'openrouter').toLowerCase();
15
+ if (raw === 'nebius') return 'nebius';
16
+ return 'openrouter';
17
+ }
18
+
19
+ /** Provider-aware base URL and API key. */
20
+ export function getProviderConfig() {
21
+ const provider = getLLMProvider();
22
+
23
+ if (provider === 'nebius') {
24
+ return {
25
+ provider,
26
+ baseURL: 'https://api.tokenfactory.nebius.com/v1/',
27
+ apiKey: process.env.NEBIUS_API_KEY ?? '',
28
+ headers: {} as Record<string, string>,
29
+ };
30
+ }
31
+
32
+ return {
33
+ provider,
34
+ baseURL: 'https://openrouter.ai/api/v1',
35
+ apiKey: process.env.OPEN_ROUTER_API_KEY ?? '',
36
+ headers: {
37
+ 'HTTP-Referer': 'oracle-app.com',
38
+ 'X-Title': process.env.ORACLE_NAME ?? 'Oracle App',
39
+ },
40
+ };
41
+ }
11
42
  const getChatOpenAiModel = (params?: ChatOpenAIFields): ChatOpenAI =>
12
43
  new ChatOpenAI({
13
44
  temperature: 0.2,
@@ -1,3 +1,2 @@
1
1
  export * from './create-fake-node.js';
2
- export * from './find-docs/index.js';
3
2
  export * from './generic-chat/index.js';
@@ -2,9 +2,6 @@ import { createSemanticRouter } from './create-semantic-router.js';
2
2
 
3
3
  const parse = vi.fn();
4
4
  const create = vi.fn();
5
- vi.mock('langfuse', () => ({
6
- observeOpenAI: vi.fn((client: unknown) => client),
7
- }));
8
5
  vi.mock('openai', () => ({
9
6
  OpenAI: vi.fn().mockImplementation(() => {
10
7
  function fn(): unknown {
@@ -1,6 +1,5 @@
1
1
  import { Logger } from '@ixo/logger';
2
2
  import { PromptTemplate } from '@langchain/core/prompts';
3
- import { type LangfuseConfig, observeOpenAI } from 'langfuse';
4
3
  import { OpenAI } from 'openai';
5
4
  import { zodResponseFormat } from 'openai/helpers/zod';
6
5
  import z from 'zod';
@@ -39,10 +38,7 @@ export const createSemanticRouter = <
39
38
  | 'gpt-4.1-nano'
40
39
  | 'gpt-4.1-mini' = 'gpt-4.1-mini',
41
40
  isComplex = false,
42
- ): ((
43
- state: EnsureKeys<Record<string, unknown>, K>,
44
- traceConfig?: LangfuseConfig,
45
- ) => Promise<keyof R>) => {
41
+ ): ((state: EnsureKeys<Record<string, unknown>, K>) => Promise<keyof R>) => {
46
42
  const keys = validateRoutes(routes, basedOn);
47
43
  const schema = z.object({
48
44
  nextRoute: z.enum(
@@ -52,7 +48,6 @@ export const createSemanticRouter = <
52
48
  });
53
49
  return async <T extends Record<string, unknown>>(
54
50
  state: EnsureKeys<T, K>,
55
- traceConfig?: LangfuseConfig,
56
51
  ): Promise<keyof R> => {
57
52
  const selectedValues = {} as Record<string, string | object>;
58
53
  for (const key of basedOn) {
@@ -72,7 +67,7 @@ export const createSemanticRouter = <
72
67
  // find the route that matches the state
73
68
  const prompt = PromptTemplate.fromTemplate(semanticRouterPrompt);
74
69
 
75
- const client = observeOpenAI(new OpenAI(), traceConfig);
70
+ const client = new OpenAI();
76
71
  const promptWithState = await prompt.format({
77
72
  routes: jsonToYaml(routes),
78
73
  state: jsonToYaml(selectedValues),
@@ -1,7 +1,6 @@
1
1
  export * from './ask-ixo-guru/index.js';
2
2
  export * from './browser-tool-caller.js';
3
3
  export * from './parser-browser-tool.js';
4
- export * from './retriever-tool/index.js';
5
4
  export * from './scrape-web-page.js';
6
5
  export * from './web-search-tool.js';
7
6
  export * from './log-action-to-matrix.js';
@@ -1,5 +1,6 @@
1
1
  import { type IRunnableConfigWithRequiredFields } from '@ixo/matrix';
2
2
  import { tool } from '@langchain/core/tools';
3
+ import { randomUUID } from 'node:crypto';
3
4
  import { callAgAction } from './action-caller.js';
4
5
  import { logActionToMatrix } from './log-action-to-matrix.js';
5
6
 
@@ -16,19 +17,34 @@ export function parserActionTool(action: IParseAgActionParams) {
16
17
  async (input, runnableConfig) => {
17
18
  const { configurable } =
18
19
  runnableConfig as IRunnableConfigWithRequiredFields;
19
- const { thread_id: sessionId, requestId, configs } = configurable;
20
+ // Prefer explicit `sessionId` sub-agent wrappers set this to the real
21
+ // user WS session so routing works from nested contexts. Fall back to
22
+ // `thread_id` for direct invocations from the main agent (where
23
+ // thread_id IS the user's session).
24
+ const sessionIdField = (configurable as { sessionId?: unknown })
25
+ .sessionId;
26
+ const sessionId =
27
+ typeof sessionIdField === 'string' && sessionIdField.length > 0
28
+ ? sessionIdField
29
+ : configurable.thread_id;
30
+ const { requestId, configs } = configurable;
20
31
 
21
32
  if (!sessionId) {
22
33
  throw new Error('sessionId is required for AG-UI actions');
23
34
  }
24
35
 
36
+ // Unique toolCallId per invocation. Protects against:
37
+ // - Multiple tool calls sharing one requestId (React key collisions)
38
+ // - Any future code path that forgets to propagate requestId
39
+ const toolCallId = `ag_${requestId ?? 'noreq'}_${randomUUID().slice(0, 8)}`;
40
+
25
41
  // Call the action and WAIT for result from frontend
26
42
  const result = await callAgAction({
27
43
  sessionId,
28
- toolCallId: `ag_${requestId}`,
44
+ toolCallId,
29
45
  toolName: name,
30
46
  args: input as Record<string, unknown>,
31
- timeout: 5000, // 5 seconds
47
+ timeout: 15000, // 15 seconds
32
48
  });
33
49
 
34
50
  if (configs?.matrix.roomId) {
@@ -107,6 +107,23 @@ export const loadFile = async (
107
107
  }
108
108
  };
109
109
 
110
+ /**
111
+ * Loads a file from a buffer and returns processed content.
112
+ * Useful when you already have the file data (e.g., downloaded from Matrix).
113
+ */
114
+ export const loadFileFromBuffer = async (
115
+ buffer: Buffer,
116
+ mimetype: string,
117
+ filename?: string,
118
+ ): Promise<Document[]> => {
119
+ const fileType = determineFileType(filename ?? '', mimetype);
120
+ if (!fileType) {
121
+ throw new Error(`Unsupported file type: ${mimetype}`);
122
+ }
123
+ const blob = new Blob([buffer], { type: mimetype });
124
+ return processFile(blob, fileType);
125
+ };
126
+
110
127
  const processFile = async (
111
128
  blob: Blob,
112
129
  fileType: SupportedFileType,
@@ -5,6 +5,7 @@ import {
5
5
  } from '@langchain/core/messages';
6
6
  import { isUUID } from 'class-validator';
7
7
  import crypto from 'node:crypto';
8
+ import { emojify } from 'node-emoji';
8
9
 
9
10
  interface ToolCall {
10
11
  name: string;
@@ -14,6 +15,15 @@ interface ToolCall {
14
15
  output?: string;
15
16
  }
16
17
 
18
+ export interface AttachmentMeta {
19
+ filename: string;
20
+ mimetype: string;
21
+ size?: number;
22
+ mxcUri?: string;
23
+ eventId?: string;
24
+ category: string;
25
+ }
26
+
17
27
  interface MessageDto {
18
28
  id: string;
19
29
  type: 'ai' | 'human';
@@ -22,6 +32,7 @@ interface MessageDto {
22
32
  reasoning?: string;
23
33
  isComplete?: boolean;
24
34
  isReasoning?: boolean;
35
+ attachment?: AttachmentMeta;
25
36
  }
26
37
 
27
38
  export interface ListOracleMessagesResponse {
@@ -36,6 +47,7 @@ export interface CleanAdditionalKwargs {
36
47
  type: string;
37
48
  text: string;
38
49
  }>;
50
+ attachment?: AttachmentMeta;
39
51
  [key: string]: unknown; // Allow additional properties for LangChain compatibility
40
52
  }
41
53
 
@@ -55,9 +67,13 @@ export function transformGraphStateMessageToListMessageResponse(
55
67
  message.additional_kwargs as CleanAdditionalKwargs;
56
68
  const reasoning = additionalKwargs?.reasoning;
57
69
 
70
+ // Extract attachment metadata for human messages
71
+ const attachment =
72
+ message.type === 'human' ? additionalKwargs?.attachment : undefined;
73
+
58
74
  acc.push({
59
75
  type: message.type === 'ai' ? 'ai' : 'human',
60
- content: String(message.content),
76
+ content: emojify(String(message.content)),
61
77
  id: uuidFromString(message.id ?? String(message.content)),
62
78
  toolCalls: (message as AIMessage).tool_calls?.map((toolCall) => ({
63
79
  name: toolCall.name,
@@ -68,6 +84,7 @@ export function transformGraphStateMessageToListMessageResponse(
68
84
  reasoning,
69
85
  isComplete: true, // Messages from DB are always complete
70
86
  isReasoning: false, // since this is not a reasoning message and the request is done
87
+ ...(attachment && { attachment }),
71
88
  });
72
89
  }
73
90
  if (toolMsg) {
@@ -16,7 +16,7 @@ export async function verifyMatrixOpenIdToken(
16
16
 
17
17
  if (response.ok) {
18
18
  const userInfo = (await response.json()) as { sub: string };
19
- console.log('User info from server:', userInfo);
19
+ Logger.info('User info from server:', userInfo);
20
20
 
21
21
  return {
22
22
  isValid: true,
@@ -36,7 +36,7 @@ export async function verifyMatrixOpenIdToken(
36
36
  const errorMessage = error instanceof Error ? error.message : String(error);
37
37
  const errorStack = error instanceof Error ? error.stack : undefined;
38
38
 
39
- console.error(
39
+ Logger.error(
40
40
  'Error verifying Matrix OpenID token:',
41
41
  errorMessage,
42
42
  errorStack,
@@ -11,7 +11,7 @@ export class EnvService<T extends z.ZodType> {
11
11
  private constructor(schema: T, onError?: (error: z.ZodError) => void) {
12
12
  try {
13
13
  // Parse and validate environment variables
14
- this.validatedEnv = schema.parse(process.env) as z.infer<T>;
14
+ this.validatedEnv = schema.parse(process.env) as unknown as z.infer<T>;
15
15
  } catch (error) {
16
16
  if (error instanceof z.ZodError) {
17
17
  if (onError) {