@inkeep/agents-core 0.0.0-dev-20251124223719 → 0.0.0-dev-20251124234228

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 (35) hide show
  1. package/dist/auth/auth.d.ts +3 -3
  2. package/dist/auth/auth.js +4 -3
  3. package/dist/{auth-detection-CGqhPDnj.d.ts → auth-detection-7G0Dxt55.d.ts} +11 -0
  4. package/dist/{chunk-32YRH2S7.js → chunk-6XW4J5LI.js} +1 -1
  5. package/dist/{chunk-SLQW43IV.js → chunk-ATWIYWOU.js} +1 -1
  6. package/dist/chunk-CMNLBV2A.js +39 -0
  7. package/dist/{chunk-ICZLNCX7.js → chunk-K3UNCRSA.js} +330 -40
  8. package/dist/{chunk-SG75RA63.js → chunk-K54FZSDH.js} +1 -1
  9. package/dist/{chunk-TGESM3JG.js → chunk-MQMMFK2K.js} +14 -3
  10. package/dist/{chunk-VQXQOGJU.js → chunk-N7TIJHWC.js} +6 -6
  11. package/dist/{chunk-Q5U2SVA6.js → chunk-NMBNWFIZ.js} +4 -1
  12. package/dist/{chunk-NFYCSHD3.js → chunk-OHZDHXP7.js} +1 -0
  13. package/dist/{client-CnpNkGsH.d.ts → client-B_3j-V4-.d.ts} +1 -1
  14. package/dist/client-exports.d.ts +6 -3
  15. package/dist/client-exports.js +3 -3
  16. package/dist/constants/schema-validation/index.js +1 -1
  17. package/dist/credential-stores/index.d.ts +3 -3
  18. package/dist/db/schema.d.ts +2 -2
  19. package/dist/db/schema.js +1 -1
  20. package/dist/db/test-client.d.ts +3 -3
  21. package/dist/db/test-client.js +1 -1
  22. package/dist/index.d.ts +126 -9
  23. package/dist/index.js +275 -57
  24. package/dist/{schema-Cgkp_geg.d.ts → schema-DKbG39on.d.ts} +24 -1
  25. package/dist/server-BXoUiBMg.d.ts +127 -0
  26. package/dist/types/index.d.ts +33 -113
  27. package/dist/types/index.js +1 -1
  28. package/dist/{utility-C_tTZ7-k.d.ts → utility-Lo5NoRHK.d.ts} +141 -11
  29. package/dist/validation/index.d.ts +2 -2
  30. package/dist/validation/index.js +2 -2
  31. package/drizzle/{0001_fair_malice.sql → 0001_calm_sheva_callister.sql} +1 -16
  32. package/drizzle/meta/0001_snapshot.json +7 -1
  33. package/drizzle/meta/_journal.json +2 -2
  34. package/package.json +7 -1
  35. package/dist/chunk-H2F72PDA.js +0 -15
@@ -1,4 +1,4 @@
1
- import { loadEnvironmentFiles, env } from './chunk-Q5U2SVA6.js';
1
+ import { loadEnvironmentFiles, env } from './chunk-NMBNWFIZ.js';
2
2
  import { getLogger } from './chunk-DN4B564Y.js';
3
3
  import { CredentialStoreType, MCPTransportType } from './chunk-YFHT5M2R.js';
4
4
  import { external_exports } from './chunk-OUXC23J7.js';
@@ -14,6 +14,12 @@ import { CallToolResultSchema } from '@modelcontextprotocol/sdk/types.js';
14
14
  import { tool } from 'ai';
15
15
  import { asyncExitHook, gracefulExit } from 'exit-hook';
16
16
  import { match } from 'ts-pattern';
17
+ import { createAnthropic, anthropic } from '@ai-sdk/anthropic';
18
+ import { createGateway, gateway } from '@ai-sdk/gateway';
19
+ import { createGoogleGenerativeAI, google } from '@ai-sdk/google';
20
+ import { createOpenAI, openai } from '@ai-sdk/openai';
21
+ import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
22
+ import { createOpenRouter, openrouter } from '@openrouter/ai-sdk-provider';
17
23
  import * as jose from 'jose';
18
24
  import { SignJWT, jwtVerify } from 'jose';
19
25
  import { Composio } from '@composio/core';
@@ -179,10 +185,17 @@ function normalizeDateString(dateString) {
179
185
  }
180
186
  const pgTimestampPattern = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(\.\d{1,3})?$/;
181
187
  if (pgTimestampPattern.test(dateString)) {
182
- return dateString.replace(" ", "T") + "Z";
188
+ return `${dateString.replace(" ", "T")}Z`;
183
189
  }
184
190
  return dateString;
185
191
  }
192
+ function toISODateString(dateValue) {
193
+ if (typeof dateValue === "string") {
194
+ const normalized = normalizeDateString(dateValue);
195
+ return typeof normalized === "string" ? normalized : normalized.toISOString();
196
+ }
197
+ return dateValue.toISOString();
198
+ }
186
199
  var ErrorCode = external_exports.enum([
187
200
  "bad_request",
188
201
  "unauthorized",
@@ -462,6 +475,28 @@ function getRequestExecutionContext(c) {
462
475
  }
463
476
  return executionContext;
464
477
  }
478
+
479
+ // src/utils/format-messages.ts
480
+ function formatMessagesForLLM(messages) {
481
+ return messages.map((message) => {
482
+ const role = message.role === "user" ? "user" : message.role === "agent" ? "assistant" : "system";
483
+ const content = typeof message.content === "object" && message.content && "text" in message.content ? message.content.text : String(message.content || "");
484
+ return {
485
+ role,
486
+ content,
487
+ timestamp: message.createdAt,
488
+ fromSubAgentId: message.fromSubAgentId
489
+ };
490
+ });
491
+ }
492
+ function formatMessagesForLLMContext(messages) {
493
+ const formattedMessages = formatMessagesForLLM(messages);
494
+ return formattedMessages.map((msg) => {
495
+ const roleLabel = msg.role === "user" ? "User" : msg.role === "assistant" ? "Agent" : "System";
496
+ const agentInfo = msg.fromSubAgentId ? ` (${msg.fromSubAgentId})` : "";
497
+ return `${roleLabel}${agentInfo}: ${msg.content}`;
498
+ }).join("\n\n");
499
+ }
465
500
  var McpClient = class {
466
501
  name;
467
502
  client;
@@ -598,6 +633,9 @@ var McpClient = class {
598
633
  case "array":
599
634
  zodType = external_exports.array(external_exports.any());
600
635
  break;
636
+ case "object":
637
+ zodType = createZodSchema(propDef);
638
+ break;
601
639
  default:
602
640
  zodType = external_exports.any();
603
641
  }
@@ -636,7 +674,259 @@ var McpClient = class {
636
674
  return results;
637
675
  }
638
676
  };
639
- var logger2 = getLogger("service-token-auth");
677
+ var logger2 = getLogger("ModelFactory");
678
+ var nimDefault = createOpenAICompatible({
679
+ name: "nim",
680
+ baseURL: "https://integrate.api.nvidia.com/v1",
681
+ headers: {
682
+ Authorization: `Bearer ${process.env.NIM_API_KEY}`
683
+ }
684
+ });
685
+ var ModelFactory = class _ModelFactory {
686
+ /**
687
+ * Create a provider instance with custom configuration
688
+ */
689
+ static createProvider(provider, config) {
690
+ switch (provider) {
691
+ case "anthropic":
692
+ return createAnthropic(config);
693
+ case "openai":
694
+ return createOpenAI(config);
695
+ case "google":
696
+ return createGoogleGenerativeAI(config);
697
+ case "openrouter":
698
+ return {
699
+ ...createOpenRouter(config),
700
+ textEmbeddingModel: () => {
701
+ throw new Error("OpenRouter does not support text embeddings");
702
+ },
703
+ imageModel: () => {
704
+ throw new Error("OpenRouter does not support image generation");
705
+ }
706
+ };
707
+ case "gateway":
708
+ return createGateway(config);
709
+ case "nim": {
710
+ const nimConfig = {
711
+ name: "nim",
712
+ baseURL: "https://integrate.api.nvidia.com/v1",
713
+ headers: {
714
+ Authorization: `Bearer ${process.env.NIM_API_KEY}`
715
+ },
716
+ ...config
717
+ };
718
+ return createOpenAICompatible(nimConfig);
719
+ }
720
+ case "custom": {
721
+ if (!config.baseURL && !config.baseUrl) {
722
+ throw new Error(
723
+ "Custom provider requires baseURL. Please provide it in providerOptions.baseURL or providerOptions.baseUrl"
724
+ );
725
+ }
726
+ const customConfig = {
727
+ name: "custom",
728
+ baseURL: config.baseURL || config.baseUrl,
729
+ headers: {
730
+ ...process.env.CUSTOM_LLM_API_KEY && {
731
+ Authorization: `Bearer ${process.env.CUSTOM_LLM_API_KEY}`
732
+ },
733
+ ...config.headers || {}
734
+ },
735
+ ...config
736
+ };
737
+ logger2.info(
738
+ {
739
+ config: {
740
+ baseURL: customConfig.baseURL,
741
+ hasApiKey: !!process.env.CUSTOM_LLM_API_KEY,
742
+ apiKeyPrefix: `${process.env.CUSTOM_LLM_API_KEY?.substring(0, 10)}...`,
743
+ headers: Object.keys(customConfig.headers || {})
744
+ }
745
+ },
746
+ "Creating custom OpenAI-compatible provider"
747
+ );
748
+ return createOpenAICompatible(customConfig);
749
+ }
750
+ default:
751
+ throw new Error(`Unsupported provider: ${provider}`);
752
+ }
753
+ }
754
+ /**
755
+ * Extract provider configuration from providerOptions
756
+ * Only includes settings that go to the provider constructor (baseURL, apiKey, etc.)
757
+ */
758
+ static extractProviderConfig(providerOptions) {
759
+ if (!providerOptions) {
760
+ return {};
761
+ }
762
+ const providerConfig = {};
763
+ if (providerOptions.baseUrl || providerOptions.baseURL) {
764
+ providerConfig.baseURL = providerOptions.baseUrl || providerOptions.baseURL;
765
+ }
766
+ if (providerOptions.headers) {
767
+ providerConfig.headers = providerOptions.headers;
768
+ }
769
+ if (providerOptions.gateway) {
770
+ Object.assign(providerConfig, providerOptions.gateway);
771
+ }
772
+ if (providerOptions.nim) {
773
+ Object.assign(providerConfig, providerOptions.nim);
774
+ }
775
+ if (providerOptions.custom) {
776
+ Object.assign(providerConfig, providerOptions.custom);
777
+ }
778
+ return providerConfig;
779
+ }
780
+ /**
781
+ * Create a language model instance from configuration
782
+ * Throws error if no config provided - models must be configured at project level
783
+ */
784
+ static createModel(config) {
785
+ if (!config?.model?.trim()) {
786
+ throw new Error(
787
+ "Model configuration is required. Please configure models at the project level."
788
+ );
789
+ }
790
+ const modelSettings = config;
791
+ if (!modelSettings.model) {
792
+ throw new Error("Model configuration is required");
793
+ }
794
+ const modelString = modelSettings.model.trim();
795
+ const { provider, modelName } = _ModelFactory.parseModelString(modelString);
796
+ logger2.debug(
797
+ {
798
+ provider,
799
+ model: modelName,
800
+ fullModelString: modelSettings.model,
801
+ hasProviderOptions: !!modelSettings.providerOptions
802
+ },
803
+ "Creating language model from config"
804
+ );
805
+ const providerConfig = _ModelFactory.extractProviderConfig(modelSettings.providerOptions);
806
+ if (Object.keys(providerConfig).length > 0) {
807
+ logger2.info({ config: providerConfig }, `Applying custom ${provider} provider configuration`);
808
+ const customProvider = _ModelFactory.createProvider(provider, providerConfig);
809
+ return customProvider.languageModel(modelName);
810
+ }
811
+ switch (provider) {
812
+ case "anthropic":
813
+ return anthropic(modelName);
814
+ case "openai":
815
+ return openai(modelName);
816
+ case "google":
817
+ return google(modelName);
818
+ case "openrouter":
819
+ return openrouter(modelName);
820
+ case "gateway":
821
+ return gateway(modelName);
822
+ case "nim":
823
+ return nimDefault(modelName);
824
+ case "custom":
825
+ throw new Error(
826
+ "Custom provider requires configuration. Please provide baseURL in providerOptions.custom.baseURL or providerOptions.baseURL"
827
+ );
828
+ default:
829
+ throw new Error(
830
+ `Unsupported provider: ${provider}. Supported providers are: ${_ModelFactory.BUILT_IN_PROVIDERS.join(", ")}. To access other models, use OpenRouter (openrouter/model-id), Vercel AI Gateway (gateway/model-id), NVIDIA NIM (nim/model-id), or Custom OpenAI-compatible (custom/model-id).`
831
+ );
832
+ }
833
+ }
834
+ /**
835
+ * Built-in providers that have special handling
836
+ */
837
+ static BUILT_IN_PROVIDERS = [
838
+ "anthropic",
839
+ "openai",
840
+ "google",
841
+ "openrouter",
842
+ "gateway",
843
+ "nim",
844
+ "custom"
845
+ ];
846
+ /**
847
+ * Parse model string to extract provider and model name
848
+ * Examples: "anthropic/claude-sonnet-4" -> { provider: "anthropic", modelName: "claude-sonnet-4" }
849
+ * "openrouter/anthropic/claude-sonnet-4" -> { provider: "openrouter", modelName: "anthropic/claude-sonnet-4" }
850
+ * "claude-sonnet-4" -> { provider: "anthropic", modelName: "claude-sonnet-4" } (default to anthropic)
851
+ */
852
+ static parseModelString(modelString) {
853
+ if (modelString.includes("/")) {
854
+ const [provider, ...modelParts] = modelString.split("/");
855
+ const normalizedProvider = provider.toLowerCase();
856
+ if (!_ModelFactory.BUILT_IN_PROVIDERS.includes(normalizedProvider)) {
857
+ throw new Error(
858
+ `Unsupported provider: ${normalizedProvider}. Supported providers are: ${_ModelFactory.BUILT_IN_PROVIDERS.join(", ")}. To access other models, use OpenRouter (openrouter/model-id), Vercel AI Gateway (gateway/model-id), NVIDIA NIM (nim/model-id), or Custom OpenAI-compatible (custom/model-id).`
859
+ );
860
+ }
861
+ return {
862
+ provider: normalizedProvider,
863
+ modelName: modelParts.join("/")
864
+ };
865
+ }
866
+ throw new Error(`No provider specified in model string: ${modelString}`);
867
+ }
868
+ /**
869
+ * Get generation parameters from provider options
870
+ * These are parameters that get passed to generateText/streamText calls
871
+ */
872
+ static getGenerationParams(providerOptions) {
873
+ if (!providerOptions) {
874
+ return {};
875
+ }
876
+ const excludedKeys = ["apiKey", "baseURL", "baseUrl", "maxDuration", "headers", "gateway", "nim", "custom"];
877
+ const params = {};
878
+ for (const [key, value] of Object.entries(providerOptions)) {
879
+ if (!excludedKeys.includes(key) && value !== void 0) {
880
+ params[key] = value;
881
+ }
882
+ }
883
+ return params;
884
+ }
885
+ /**
886
+ * Prepare complete generation configuration from model settings
887
+ * Returns model instance and generation parameters ready to spread into generateText/streamText
888
+ * Includes maxDuration if specified in provider options (in seconds, following Vercel standard)
889
+ */
890
+ static prepareGenerationConfig(modelSettings) {
891
+ const modelString = modelSettings?.model?.trim();
892
+ const model = _ModelFactory.createModel({
893
+ model: modelString,
894
+ providerOptions: modelSettings?.providerOptions
895
+ });
896
+ const generationParams = _ModelFactory.getGenerationParams(modelSettings?.providerOptions);
897
+ const maxDuration = modelSettings?.providerOptions?.maxDuration;
898
+ return {
899
+ model,
900
+ ...generationParams,
901
+ ...maxDuration !== void 0 && { maxDuration }
902
+ };
903
+ }
904
+ /**
905
+ * Validate model settingsuration
906
+ * Basic validation only - let AI SDK handle parameter-specific validation
907
+ */
908
+ static validateConfig(config) {
909
+ const errors = [];
910
+ if (!config.model) {
911
+ errors.push("Model name is required");
912
+ }
913
+ if (config.providerOptions) {
914
+ if (config.providerOptions.apiKey) {
915
+ errors.push(
916
+ "API keys should not be stored in provider options. Use environment variables (ANTHROPIC_API_KEY, OPENAI_API_KEY) or credential store instead."
917
+ );
918
+ }
919
+ if (config.providerOptions.maxDuration !== void 0) {
920
+ const maxDuration = config.providerOptions.maxDuration;
921
+ if (typeof maxDuration !== "number" || maxDuration <= 0) {
922
+ errors.push("maxDuration must be a positive number (in seconds)");
923
+ }
924
+ }
925
+ }
926
+ return errors;
927
+ }
928
+ };
929
+ var logger3 = getLogger("service-token-auth");
640
930
  function getJwtSecret() {
641
931
  const secret = env.INKEEP_AGENTS_JWT_SIGNING_SECRET;
642
932
  const dev_secret = "insecure-dev-secret-change-in-production-min-32-chars";
@@ -646,7 +936,7 @@ function getJwtSecret() {
646
936
  "INKEEP_AGENTS_JWT_SIGNING_SECRET environment variable is required in production"
647
937
  );
648
938
  }
649
- logger2.warn(
939
+ logger3.warn(
650
940
  {},
651
941
  "INKEEP_AGENTS_JWT_SIGNING_SECRET not set, using insecure default. DO NOT USE IN PRODUCTION!"
652
942
  );
@@ -661,7 +951,7 @@ async function generateServiceToken(params) {
661
951
  tenantId: params.tenantId,
662
952
  projectId: params.projectId
663
953
  }).setProtectedHeader({ alg: "HS256", typ: "JWT" }).setIssuer("inkeep-agents").setSubject(params.originAgentId).setAudience(params.targetAgentId).setIssuedAt().setExpirationTime("5m").sign(secret);
664
- logger2.debug(
954
+ logger3.debug(
665
955
  {
666
956
  originAgentId: params.originAgentId,
667
957
  targetAgentId: params.targetAgentId,
@@ -671,7 +961,7 @@ async function generateServiceToken(params) {
671
961
  );
672
962
  return token;
673
963
  } catch (error) {
674
- logger2.error({ error }, "Failed to generate service token");
964
+ logger3.error({ error }, "Failed to generate service token");
675
965
  throw new Error("Failed to generate service token");
676
966
  }
677
967
  }
@@ -683,7 +973,7 @@ async function verifyServiceToken(token) {
683
973
  algorithms: ["HS256"]
684
974
  });
685
975
  if (typeof payload.sub !== "string" || typeof payload.aud !== "string" || typeof payload.tenantId !== "string" || typeof payload.projectId !== "string") {
686
- logger2.warn({ payload }, "Invalid service token: missing required claims");
976
+ logger3.warn({ payload }, "Invalid service token: missing required claims");
687
977
  return {
688
978
  valid: false,
689
979
  error: "Invalid token: missing required claims"
@@ -698,7 +988,7 @@ async function verifyServiceToken(token) {
698
988
  iat: payload.iat,
699
989
  exp: payload.exp
700
990
  };
701
- logger2.debug(
991
+ logger3.debug(
702
992
  {
703
993
  originAgentId: validPayload.sub,
704
994
  targetAgentId: validPayload.aud,
@@ -712,13 +1002,13 @@ async function verifyServiceToken(token) {
712
1002
  };
713
1003
  } catch (error) {
714
1004
  if (error instanceof Error) {
715
- logger2.warn({ error: error.message }, "Team agent token verification failed");
1005
+ logger3.warn({ error: error.message }, "Team agent token verification failed");
716
1006
  return {
717
1007
  valid: false,
718
1008
  error: error.message
719
1009
  };
720
1010
  }
721
- logger2.warn({ error }, "Team agent token verification failed with unknown error");
1011
+ logger3.warn({ error }, "Team agent token verification failed with unknown error");
722
1012
  return {
723
1013
  valid: false,
724
1014
  error: "Token verification failed"
@@ -727,7 +1017,7 @@ async function verifyServiceToken(token) {
727
1017
  }
728
1018
  function validateTenantId(payload, expectedTenantId) {
729
1019
  if (payload.tenantId !== expectedTenantId) {
730
- logger2.warn(
1020
+ logger3.warn(
731
1021
  {
732
1022
  tokenTenantId: payload.tenantId,
733
1023
  expectedTenantId,
@@ -742,7 +1032,7 @@ function validateTenantId(payload, expectedTenantId) {
742
1032
  }
743
1033
  function validateTargetAgent(payload, expectedTargetAgentId) {
744
1034
  if (payload.aud !== expectedTargetAgentId) {
745
- logger2.warn(
1035
+ logger3.warn(
746
1036
  {
747
1037
  tokenTargetAgentId: payload.aud,
748
1038
  expectedTargetAgentId,
@@ -793,7 +1083,7 @@ async function verifyTempToken(publicKeyPem, token) {
793
1083
  }
794
1084
  return payload;
795
1085
  }
796
- var logger3 = getLogger("composio-client");
1086
+ var logger4 = getLogger("composio-client");
797
1087
  var TOOLKIT_TO_CATEGORY = {
798
1088
  github: "development",
799
1089
  gitlab: "development",
@@ -867,21 +1157,21 @@ function addUserIdToUrl(url, userId) {
867
1157
  async function deleteComposioConnectedAccount(accountId) {
868
1158
  const composioInstance = getComposioInstance();
869
1159
  if (!composioInstance) {
870
- logger3.info({}, "Composio not configured, skipping account deletion");
1160
+ logger4.info({}, "Composio not configured, skipping account deletion");
871
1161
  return false;
872
1162
  }
873
1163
  try {
874
1164
  await composioInstance.connectedAccounts.delete(accountId);
875
1165
  return true;
876
1166
  } catch (error) {
877
- logger3.warn({ error }, "Error deleting Composio connected account");
1167
+ logger4.warn({ error }, "Error deleting Composio connected account");
878
1168
  return false;
879
1169
  }
880
1170
  }
881
1171
  async function fetchComposioConnectedAccounts(derivedUserId) {
882
1172
  const composioInstance = getComposioInstance();
883
1173
  if (!composioInstance) {
884
- logger3.info({}, "Composio not configured, skipping connected accounts fetch");
1174
+ logger4.info({}, "Composio not configured, skipping connected accounts fetch");
885
1175
  return null;
886
1176
  }
887
1177
  try {
@@ -890,25 +1180,25 @@ async function fetchComposioConnectedAccounts(derivedUserId) {
890
1180
  });
891
1181
  return connectedAccounts;
892
1182
  } catch (error) {
893
- logger3.error({ error }, "Error fetching Composio connected accounts");
1183
+ logger4.error({ error }, "Error fetching Composio connected accounts");
894
1184
  return null;
895
1185
  }
896
1186
  }
897
1187
  async function isComposioMCPServerAuthenticated(tenantId, projectId, mcpServerUrl) {
898
1188
  const composioApiKey = process.env.COMPOSIO_API_KEY;
899
1189
  if (!composioApiKey) {
900
- logger3.info({}, "Composio API key not configured, skipping auth check");
1190
+ logger4.info({}, "Composio API key not configured, skipping auth check");
901
1191
  return false;
902
1192
  }
903
1193
  const serverId = extractComposioServerId(mcpServerUrl);
904
1194
  if (!serverId) {
905
- logger3.info({ mcpServerUrl }, "Could not extract Composio server ID from URL");
1195
+ logger4.info({ mcpServerUrl }, "Could not extract Composio server ID from URL");
906
1196
  return false;
907
1197
  }
908
1198
  const derivedUserId = deriveComposioUserId(tenantId, projectId);
909
1199
  const composioInstance = getComposioInstance();
910
1200
  if (!composioInstance) {
911
- logger3.info({}, "Composio not configured, skipping auth check");
1201
+ logger4.info({}, "Composio not configured, skipping auth check");
912
1202
  return false;
913
1203
  }
914
1204
  try {
@@ -926,7 +1216,7 @@ async function isComposioMCPServerAuthenticated(tenantId, projectId, mcpServerUr
926
1216
  );
927
1217
  return !!activeAccount;
928
1218
  } catch (error) {
929
- logger3.error({ error, mcpServerUrl }, "Error checking Composio authentication status");
1219
+ logger4.error({ error, mcpServerUrl }, "Error checking Composio authentication status");
930
1220
  return false;
931
1221
  }
932
1222
  }
@@ -950,7 +1240,7 @@ function transformComposioServerData(composioMcpServer, isAuthenticated, url, th
950
1240
  async function ensureComposioAccount(composioMcpServer, derivedUserId, initiatedAccounts) {
951
1241
  const firstAuthConfigId = composioMcpServer.authConfigIds[0];
952
1242
  if (!firstAuthConfigId) {
953
- logger3.error({ serverId: composioMcpServer.id }, "No auth config ID found for MCP server");
1243
+ logger4.error({ serverId: composioMcpServer.id }, "No auth config ID found for MCP server");
954
1244
  return null;
955
1245
  }
956
1246
  const existingInitiatedAccount = initiatedAccounts.find(
@@ -962,7 +1252,7 @@ async function ensureComposioAccount(composioMcpServer, derivedUserId, initiated
962
1252
  try {
963
1253
  const composioInstance = getComposioInstance();
964
1254
  if (!composioInstance) {
965
- logger3.error({ serverId: composioMcpServer.id }, "Composio not configured");
1255
+ logger4.error({ serverId: composioMcpServer.id }, "Composio not configured");
966
1256
  return null;
967
1257
  }
968
1258
  const createAccountResponse = await composioInstance.connectedAccounts.link(
@@ -971,7 +1261,7 @@ async function ensureComposioAccount(composioMcpServer, derivedUserId, initiated
971
1261
  );
972
1262
  return createAccountResponse.redirectUrl ?? null;
973
1263
  } catch (error) {
974
- logger3.error(
1264
+ logger4.error(
975
1265
  { serverId: composioMcpServer.id, error },
976
1266
  "Error creating connected account for MCP server"
977
1267
  );
@@ -1008,13 +1298,13 @@ async function transformComposioServer(composioMcpServer, authenticatedAuthConfi
1008
1298
  async function fetchComposioServers(tenantId, projectId) {
1009
1299
  const composioApiKey = process.env.COMPOSIO_API_KEY;
1010
1300
  if (!composioApiKey) {
1011
- logger3.info({}, "COMPOSIO_API_KEY not configured, skipping Composio servers");
1301
+ logger4.info({}, "COMPOSIO_API_KEY not configured, skipping Composio servers");
1012
1302
  return [];
1013
1303
  }
1014
1304
  const derivedUserId = deriveComposioUserId(tenantId, projectId);
1015
1305
  const composioInstance = getComposioInstance();
1016
1306
  if (!composioInstance) {
1017
- logger3.info({}, "Composio not configured, returning empty list");
1307
+ logger4.info({}, "Composio not configured, returning empty list");
1018
1308
  return [];
1019
1309
  }
1020
1310
  try {
@@ -1051,26 +1341,26 @@ async function fetchComposioServers(tenantId, projectId) {
1051
1341
  );
1052
1342
  return validServers;
1053
1343
  } catch (error) {
1054
- logger3.error({ error }, "Failed to fetch Composio servers");
1344
+ logger4.error({ error }, "Failed to fetch Composio servers");
1055
1345
  return [];
1056
1346
  }
1057
1347
  }
1058
1348
  async function fetchSingleComposioServer(tenantId, projectId, mcpServerUrl) {
1059
1349
  const composioApiKey = process.env.COMPOSIO_API_KEY;
1060
1350
  if (!composioApiKey) {
1061
- logger3.debug({}, "COMPOSIO_API_KEY not configured");
1351
+ logger4.debug({}, "COMPOSIO_API_KEY not configured");
1062
1352
  return null;
1063
1353
  }
1064
1354
  const derivedUserId = deriveComposioUserId(tenantId, projectId);
1065
1355
  const composioInstance = getComposioInstance();
1066
1356
  if (!composioInstance) {
1067
- logger3.info({}, "Composio not configured, returning null");
1357
+ logger4.info({}, "Composio not configured, returning null");
1068
1358
  return null;
1069
1359
  }
1070
1360
  try {
1071
1361
  const serverId = extractComposioServerId(mcpServerUrl);
1072
1362
  if (!serverId) {
1073
- logger3.error({ mcpServerUrl }, "Could not extract Composio server ID from URL");
1363
+ logger4.error({ mcpServerUrl }, "Could not extract Composio server ID from URL");
1074
1364
  return null;
1075
1365
  }
1076
1366
  const composioMcpServer = await composioInstance.mcp.get(serverId);
@@ -1094,23 +1384,23 @@ async function fetchSingleComposioServer(tenantId, projectId, mcpServerUrl) {
1094
1384
  );
1095
1385
  return transformedServer;
1096
1386
  } catch (error) {
1097
- logger3.error({ error, mcpServerUrl }, "Failed to fetch single Composio server");
1387
+ logger4.error({ error, mcpServerUrl }, "Failed to fetch single Composio server");
1098
1388
  return null;
1099
1389
  }
1100
1390
  }
1101
1391
 
1102
1392
  // src/utils/third-party-mcp-servers/third-party-check.ts
1103
- var logger4 = getLogger("third-party-check");
1393
+ var logger5 = getLogger("third-party-check");
1104
1394
  async function isThirdPartyMCPServerAuthenticated(tenantId, projectId, mcpServerUrl) {
1105
1395
  const composioServerId = extractComposioServerId(mcpServerUrl);
1106
1396
  if (composioServerId) {
1107
- logger4.debug({ mcpServerUrl }, "Detected Composio MCP server, checking auth status");
1397
+ logger5.debug({ mcpServerUrl }, "Detected Composio MCP server, checking auth status");
1108
1398
  return isComposioMCPServerAuthenticated(tenantId, projectId, mcpServerUrl);
1109
1399
  }
1110
- logger4.info({ mcpServerUrl }, "Unknown third-party MCP server provider");
1400
+ logger5.info({ mcpServerUrl }, "Unknown third-party MCP server provider");
1111
1401
  return false;
1112
1402
  }
1113
- var logger5 = getLogger("tracer");
1403
+ var logger6 = getLogger("tracer");
1114
1404
  var createNoOpSpan = () => ({
1115
1405
  setAttributes: () => ({}),
1116
1406
  recordException: () => ({}),
@@ -1139,23 +1429,23 @@ var noopTracer = {
1139
1429
  return createNoOpSpan();
1140
1430
  }
1141
1431
  };
1142
- function setSpanWithError(span, error, logger6, logMessage) {
1432
+ function setSpanWithError(span, error, logger7, logMessage) {
1143
1433
  span.recordException(error);
1144
1434
  span.setStatus({
1145
1435
  code: SpanStatusCode.ERROR,
1146
1436
  message: error.message
1147
1437
  });
1148
- if (logger6 && logMessage) {
1149
- logger6.error({ error: error.message }, logMessage);
1438
+ if (logger7 && logMessage) {
1439
+ logger7.error({ error: error.message }, logMessage);
1150
1440
  }
1151
1441
  }
1152
1442
  function getTracer(serviceName, serviceVersion) {
1153
1443
  try {
1154
1444
  return trace.getTracer(serviceName, serviceVersion);
1155
1445
  } catch (_error) {
1156
- logger5.debug({}, "OpenTelemetry tracer not available, using no-op tracer");
1446
+ logger6.debug({}, "OpenTelemetry tracer not available, using no-op tracer");
1157
1447
  return noopTracer;
1158
1448
  }
1159
1449
  }
1160
1450
 
1161
- export { CONVERSATION_HISTORY_DEFAULT_LIMIT, CONVERSATION_HISTORY_MAX_OUTPUT_TOKENS_DEFAULT, ERROR_DOCS_BASE_URL, ErrorCode, MCP_TOOL_CONNECTION_TIMEOUT_MS, MCP_TOOL_INITIAL_RECONNECTION_DELAY_MS, MCP_TOOL_MAX_RECONNECTION_DELAY_MS, MCP_TOOL_MAX_RETRIES, MCP_TOOL_RECONNECTION_DELAY_GROWTH_FACTOR, McpClient, commonCreateErrorResponses, commonDeleteErrorResponses, commonGetErrorResponses, commonUpdateErrorResponses, createApiError, createExecutionContext, errorResponseSchema, errorSchemaFactory, executionLimitsSharedDefaults, extractComposioServerId, extractPublicId, fetchComposioServers, fetchSingleComposioServer, generateApiKey, generateId, generateServiceToken, getConversationId, getCredentialStoreLookupKeyFromRetrievalParams, getRequestExecutionContext, getTracer, handleApiError, hashApiKey, isApiKeyExpired, isComposioMCPServerAuthenticated, isThirdPartyMCPServerAuthenticated, maskApiKey, normalizeDateString, problemDetailsSchema, setSpanWithError, signTempToken, validateApiKey, validateTargetAgent, validateTenantId, verifyAuthorizationHeader, verifyServiceToken, verifyTempToken };
1451
+ export { CONVERSATION_HISTORY_DEFAULT_LIMIT, CONVERSATION_HISTORY_MAX_OUTPUT_TOKENS_DEFAULT, ERROR_DOCS_BASE_URL, ErrorCode, MCP_TOOL_CONNECTION_TIMEOUT_MS, MCP_TOOL_INITIAL_RECONNECTION_DELAY_MS, MCP_TOOL_MAX_RECONNECTION_DELAY_MS, MCP_TOOL_MAX_RETRIES, MCP_TOOL_RECONNECTION_DELAY_GROWTH_FACTOR, McpClient, ModelFactory, commonCreateErrorResponses, commonDeleteErrorResponses, commonGetErrorResponses, commonUpdateErrorResponses, createApiError, createExecutionContext, errorResponseSchema, errorSchemaFactory, executionLimitsSharedDefaults, extractComposioServerId, extractPublicId, fetchComposioServers, fetchSingleComposioServer, formatMessagesForLLM, formatMessagesForLLMContext, generateApiKey, generateId, generateServiceToken, getConversationId, getCredentialStoreLookupKeyFromRetrievalParams, getRequestExecutionContext, getTracer, handleApiError, hashApiKey, isApiKeyExpired, isComposioMCPServerAuthenticated, isThirdPartyMCPServerAuthenticated, maskApiKey, normalizeDateString, problemDetailsSchema, setSpanWithError, signTempToken, toISODateString, validateApiKey, validateTargetAgent, validateTenantId, verifyAuthorizationHeader, verifyServiceToken, verifyTempToken };
@@ -1,4 +1,4 @@
1
- import { schema_exports, projects } from './chunk-NFYCSHD3.js';
1
+ import { schema_exports, projects } from './chunk-OHZDHXP7.js';
2
2
  import { organization } from './chunk-NOPEANIU.js';
3
3
  import { dirname, join } from 'path';
4
4
  import { fileURLToPath } from 'url';
@@ -10,7 +10,10 @@ var SPAN_NAMES = {
10
10
  CONTEXT_HANDLE: "context.handle_context_resolution",
11
11
  AGENT_GENERATION: "agent.generate",
12
12
  CONTEXT_FETCHER: "context-fetcher.http-request",
13
- ARTIFACT_PROCESSING: "agent_session.process_artifact"
13
+ ARTIFACT_PROCESSING: "agent_session.process_artifact",
14
+ TOOL_APPROVAL_REQUESTED: "tool.approval_requested",
15
+ TOOL_APPROVAL_APPROVED: "tool.approval_approved",
16
+ TOOL_APPROVAL_DENIED: "tool.approval_denied"
14
17
  };
15
18
  var AI_OPERATIONS = {
16
19
  GENERATE_TEXT: "ai.generateText.doGenerate",
@@ -55,6 +58,8 @@ var SPAN_KEYS = {
55
58
  AI_TOOL_CALL_ID: "ai.toolCall.id",
56
59
  AI_TOOL_TYPE: "ai.toolType",
57
60
  TOOL_PURPOSE: "tool.purpose",
61
+ TOOL_NAME: "tool.name",
62
+ TOOL_CALL_ID: "tool.callId",
58
63
  // Token usage
59
64
  GEN_AI_USAGE_INPUT_TOKENS: "gen_ai.usage.input_tokens",
60
65
  GEN_AI_USAGE_OUTPUT_TOKENS: "gen_ai.usage.output_tokens",
@@ -99,7 +104,10 @@ var ACTIVITY_TYPES = {
99
104
  USER_MESSAGE: "user_message",
100
105
  AI_ASSISTANT_MESSAGE: "ai_assistant_message",
101
106
  AI_MODEL_STREAMED_TEXT: "ai_model_streamed_text",
102
- AI_MODEL_STREAMED_OBJECT: "ai_model_streamed_object"
107
+ AI_MODEL_STREAMED_OBJECT: "ai_model_streamed_object",
108
+ TOOL_APPROVAL_REQUESTED: "tool_approval_requested",
109
+ TOOL_APPROVAL_APPROVED: "tool_approval_approved",
110
+ TOOL_APPROVAL_DENIED: "tool_approval_denied"
103
111
  };
104
112
  var ACTIVITY_STATUS = {
105
113
  SUCCESS: "success",
@@ -231,7 +239,10 @@ var QUERY_EXPRESSIONS = {
231
239
  DURATION_SPANS: "durationSpans",
232
240
  AGENT_GENERATIONS: "agentGenerations",
233
241
  SPANS_WITH_ERRORS: "spansWithErrors",
234
- ARTIFACT_PROCESSING: "artifactProcessing"
242
+ ARTIFACT_PROCESSING: "artifactProcessing",
243
+ TOOL_APPROVAL_REQUESTED: "toolApprovalRequested",
244
+ TOOL_APPROVAL_APPROVED: "toolApprovalApproved",
245
+ TOOL_APPROVAL_DENIED: "toolApprovalDenied"
235
246
  };
236
247
  var REDUCE_OPERATIONS = {
237
248
  SUM: "sum",