@inkeep/agents-core 0.35.2 → 0.35.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.
@@ -1,13 +1,6 @@
1
- import { getLogger } from './chunk-W3L4M7FO.js';
1
+ import { loadEnvironmentFiles, env } from './chunk-4RVJB4KV.js';
2
+ import { getLogger } from './chunk-DN4B564Y.js';
2
3
  import { CredentialStoreType, MCPTransportType } from './chunk-YFHT5M2R.js';
3
- import { schema_exports, projects } from './chunk-NFYCSHD3.js';
4
- import { organization } from './chunk-NOPEANIU.js';
5
- import fs from 'fs';
6
- import os from 'os';
7
- import path, { dirname, join } from 'path';
8
- import dotenv from 'dotenv';
9
- import { expand } from 'dotenv-expand';
10
- import { findUpSync } from 'find-up';
11
4
  import { z } from 'zod';
12
5
  import { customAlphabet } from 'nanoid';
13
6
  import { scrypt, randomBytes, timingSafeEqual } from 'crypto';
@@ -23,61 +16,8 @@ import { tool } from 'ai';
23
16
  import { asyncExitHook, gracefulExit } from 'exit-hook';
24
17
  import { match } from 'ts-pattern';
25
18
  import { SignJWT, jwtVerify } from 'jose';
19
+ import { Composio } from '@composio/core';
26
20
  import { SpanStatusCode, trace } from '@opentelemetry/api';
27
- import { fileURLToPath } from 'url';
28
- import { PGlite } from '@electric-sql/pglite';
29
- import { sql } from 'drizzle-orm';
30
- import { drizzle } from 'drizzle-orm/pglite';
31
- import { migrate } from 'drizzle-orm/pglite/migrator';
32
-
33
- var loadEnvironmentFiles = () => {
34
- const environmentFiles = [];
35
- const currentEnv = path.resolve(process.cwd(), ".env");
36
- if (fs.existsSync(currentEnv)) {
37
- environmentFiles.push(currentEnv);
38
- }
39
- const rootEnv = findUpSync(".env", { cwd: path.dirname(process.cwd()) });
40
- if (rootEnv) {
41
- if (rootEnv !== currentEnv) {
42
- environmentFiles.push(rootEnv);
43
- }
44
- }
45
- const userConfigPath = path.join(os.homedir(), ".inkeep", "config");
46
- if (fs.existsSync(userConfigPath)) {
47
- dotenv.config({ path: userConfigPath, override: true, quiet: true });
48
- }
49
- if (environmentFiles.length > 0) {
50
- dotenv.config({
51
- path: environmentFiles,
52
- override: false,
53
- quiet: true
54
- });
55
- expand({ processEnv: process.env });
56
- }
57
- };
58
- loadEnvironmentFiles();
59
- var envSchema = z.object({
60
- ENVIRONMENT: z.enum(["development", "production", "pentest", "test"]).optional(),
61
- DATABASE_URL: z.string().optional(),
62
- POSTGRES_POOL_SIZE: z.string().optional(),
63
- INKEEP_AGENTS_JWT_SIGNING_SECRET: z.string().min(32, "INKEEP_AGENTS_JWT_SIGNING_SECRET must be at least 32 characters").optional()
64
- });
65
- var parseEnv = () => {
66
- try {
67
- const parsedEnv = envSchema.parse(process.env);
68
- return parsedEnv;
69
- } catch (error) {
70
- if (error instanceof z.ZodError) {
71
- const missingVars = error.issues.map((issue) => issue.path.join("."));
72
- throw new Error(
73
- `\u274C Invalid environment variables: ${missingVars.join(", ")}
74
- ${error.message}`
75
- );
76
- }
77
- throw error;
78
- }
79
- };
80
- var env = parseEnv();
81
21
 
82
22
  // src/constants/execution-limits-shared/defaults.ts
83
23
  var executionLimitsSharedDefaults = {
@@ -834,7 +774,324 @@ async function verifyAuthorizationHeader(authHeader) {
834
774
  }
835
775
  return verifyServiceToken(token);
836
776
  }
837
- var logger3 = getLogger("tracer");
777
+ var logger3 = getLogger("composio-client");
778
+ var TOOLKIT_TO_CATEGORY = {
779
+ github: "development",
780
+ gitlab: "development",
781
+ bitbucket: "development",
782
+ jira: "project_management",
783
+ asana: "project_management",
784
+ linear: "project_management",
785
+ trello: "project_management",
786
+ monday: "project_management",
787
+ slack: "communication",
788
+ discord: "communication",
789
+ teams: "communication",
790
+ zoom: "communication",
791
+ notion: "knowledge",
792
+ confluence: "knowledge",
793
+ docs: "knowledge",
794
+ drive: "storage",
795
+ dropbox: "storage",
796
+ box: "storage",
797
+ stripe: "payments",
798
+ paypal: "payments",
799
+ square: "payments",
800
+ gmail: "communication",
801
+ outlook: "communication",
802
+ calendar: "productivity",
803
+ sheets: "productivity",
804
+ airtable: "database",
805
+ salesforce: "crm",
806
+ hubspot: "crm",
807
+ zendesk: "communication",
808
+ intercom: "communication"
809
+ };
810
+ var composio = null;
811
+ function getComposioInstance() {
812
+ if (!process.env.COMPOSIO_API_KEY) {
813
+ return null;
814
+ }
815
+ if (!composio) {
816
+ composio = new Composio({
817
+ apiKey: process.env.COMPOSIO_API_KEY
818
+ });
819
+ }
820
+ return composio;
821
+ }
822
+ function deriveComposioUserId(tenantId, projectId) {
823
+ const SEPARATOR = "||";
824
+ return `${tenantId}${SEPARATOR}${projectId}`;
825
+ }
826
+ function extractComposioServerId(mcpUrl) {
827
+ if (!mcpUrl.includes("composio.dev")) {
828
+ return null;
829
+ }
830
+ try {
831
+ const urlObj = new URL(mcpUrl);
832
+ const pathParts = urlObj.pathname.split("/");
833
+ const mcpIndex = pathParts.indexOf("mcp");
834
+ if (mcpIndex !== -1 && pathParts[mcpIndex + 1]) {
835
+ return pathParts[mcpIndex + 1];
836
+ }
837
+ return null;
838
+ } catch {
839
+ return null;
840
+ }
841
+ }
842
+ function addUserIdToUrl(url, userId) {
843
+ const urlObj = new URL(url);
844
+ urlObj.searchParams.set("user_id", userId);
845
+ urlObj.searchParams.delete("transport");
846
+ return urlObj.toString();
847
+ }
848
+ async function deleteComposioConnectedAccount(accountId) {
849
+ const composioInstance = getComposioInstance();
850
+ if (!composioInstance) {
851
+ logger3.info({}, "Composio not configured, skipping account deletion");
852
+ return false;
853
+ }
854
+ try {
855
+ await composioInstance.connectedAccounts.delete(accountId);
856
+ return true;
857
+ } catch (error) {
858
+ logger3.warn({ error }, "Error deleting Composio connected account");
859
+ return false;
860
+ }
861
+ }
862
+ async function fetchComposioConnectedAccounts(derivedUserId) {
863
+ const composioInstance = getComposioInstance();
864
+ if (!composioInstance) {
865
+ logger3.info({}, "Composio not configured, skipping connected accounts fetch");
866
+ return null;
867
+ }
868
+ try {
869
+ const connectedAccounts = await composioInstance.connectedAccounts.list({
870
+ userIds: [derivedUserId]
871
+ });
872
+ return connectedAccounts;
873
+ } catch (error) {
874
+ logger3.error({ error }, "Error fetching Composio connected accounts");
875
+ return null;
876
+ }
877
+ }
878
+ async function isComposioMCPServerAuthenticated(tenantId, projectId, mcpServerUrl) {
879
+ const composioApiKey = process.env.COMPOSIO_API_KEY;
880
+ if (!composioApiKey) {
881
+ logger3.info({}, "Composio API key not configured, skipping auth check");
882
+ return false;
883
+ }
884
+ const serverId = extractComposioServerId(mcpServerUrl);
885
+ if (!serverId) {
886
+ logger3.info({ mcpServerUrl }, "Could not extract Composio server ID from URL");
887
+ return false;
888
+ }
889
+ const derivedUserId = deriveComposioUserId(tenantId, projectId);
890
+ const composioInstance = getComposioInstance();
891
+ if (!composioInstance) {
892
+ logger3.info({}, "Composio not configured, skipping auth check");
893
+ return false;
894
+ }
895
+ try {
896
+ const composioMcpServer = await composioInstance.mcp.get(serverId);
897
+ const firstAuthConfigId = composioMcpServer.authConfigIds.length > 0 ? composioMcpServer.authConfigIds[0] : null;
898
+ if (!firstAuthConfigId) {
899
+ return false;
900
+ }
901
+ const connectedAccounts = await fetchComposioConnectedAccounts(derivedUserId);
902
+ if (!connectedAccounts) {
903
+ return false;
904
+ }
905
+ const activeAccount = connectedAccounts.items.find(
906
+ (account) => account.authConfig.id === firstAuthConfigId && account.status === "ACTIVE"
907
+ );
908
+ return !!activeAccount;
909
+ } catch (error) {
910
+ logger3.error({ error, mcpServerUrl }, "Error checking Composio authentication status");
911
+ return false;
912
+ }
913
+ }
914
+ function transformComposioServerData(composioMcpServer, isAuthenticated, url, thirdPartyConnectAccountUrl) {
915
+ const firstToolkit = composioMcpServer.toolkits[0];
916
+ const category = firstToolkit ? TOOLKIT_TO_CATEGORY[firstToolkit] || "integration" : "integration";
917
+ const imageUrl = composioMcpServer.toolkitIcons?.[firstToolkit];
918
+ const description = composioMcpServer.toolkits.length > 0 ? `${composioMcpServer.toolkits.slice(0, 3).join(", ")} integration${composioMcpServer.toolkits.length > 1 ? "s" : ""} via Composio` : "Integration via Composio";
919
+ return {
920
+ id: composioMcpServer.id,
921
+ name: composioMcpServer.name,
922
+ url,
923
+ transport: MCPTransportType.streamableHttp,
924
+ imageUrl,
925
+ category,
926
+ description,
927
+ isOpen: isAuthenticated,
928
+ thirdPartyConnectAccountUrl
929
+ };
930
+ }
931
+ async function ensureComposioAccount(composioMcpServer, derivedUserId, initiatedAccounts) {
932
+ const firstAuthConfigId = composioMcpServer.authConfigIds[0];
933
+ if (!firstAuthConfigId) {
934
+ logger3.error({ serverId: composioMcpServer.id }, "No auth config ID found for MCP server");
935
+ return null;
936
+ }
937
+ const existingInitiatedAccount = initiatedAccounts.find(
938
+ (account) => account.authConfig.id === firstAuthConfigId
939
+ );
940
+ if (existingInitiatedAccount) {
941
+ await deleteComposioConnectedAccount(existingInitiatedAccount.id);
942
+ }
943
+ try {
944
+ const composioInstance = getComposioInstance();
945
+ if (!composioInstance) {
946
+ logger3.error({ serverId: composioMcpServer.id }, "Composio not configured");
947
+ return null;
948
+ }
949
+ const createAccountResponse = await composioInstance.connectedAccounts.link(
950
+ derivedUserId,
951
+ firstAuthConfigId
952
+ );
953
+ return createAccountResponse.redirectUrl ?? null;
954
+ } catch (error) {
955
+ logger3.error(
956
+ { serverId: composioMcpServer.id, error },
957
+ "Error creating connected account for MCP server"
958
+ );
959
+ return null;
960
+ }
961
+ }
962
+ async function transformComposioServer(composioMcpServer, authenticatedAuthConfigIds, initiatedAccounts, derivedUserId) {
963
+ const isAuthenticated = composioMcpServer.authConfigIds.some(
964
+ (authConfigId) => authenticatedAuthConfigIds.has(authConfigId)
965
+ );
966
+ let url = composioMcpServer.MCPUrl;
967
+ let thirdPartyConnectAccountUrl;
968
+ if (isAuthenticated) {
969
+ url = addUserIdToUrl(url, derivedUserId);
970
+ } else {
971
+ const redirectUrl = await ensureComposioAccount(
972
+ composioMcpServer,
973
+ derivedUserId,
974
+ initiatedAccounts
975
+ );
976
+ if (!redirectUrl) {
977
+ return null;
978
+ }
979
+ thirdPartyConnectAccountUrl = redirectUrl;
980
+ url = addUserIdToUrl(url, derivedUserId);
981
+ }
982
+ return transformComposioServerData(
983
+ composioMcpServer,
984
+ isAuthenticated,
985
+ url,
986
+ thirdPartyConnectAccountUrl
987
+ );
988
+ }
989
+ async function fetchComposioServers(tenantId, projectId) {
990
+ const composioApiKey = process.env.COMPOSIO_API_KEY;
991
+ if (!composioApiKey) {
992
+ logger3.info({}, "COMPOSIO_API_KEY not configured, skipping Composio servers");
993
+ return [];
994
+ }
995
+ const derivedUserId = deriveComposioUserId(tenantId, projectId);
996
+ const composioInstance = getComposioInstance();
997
+ if (!composioInstance) {
998
+ logger3.info({}, "Composio not configured, returning empty list");
999
+ return [];
1000
+ }
1001
+ try {
1002
+ const composioMcpServers = await composioInstance.mcp.list({
1003
+ limit: 100,
1004
+ toolkits: [],
1005
+ page: 1,
1006
+ authConfigs: []
1007
+ });
1008
+ const userConnectedAccounts = await composioInstance.connectedAccounts.list({
1009
+ userIds: [derivedUserId]
1010
+ });
1011
+ const activeAccounts = userConnectedAccounts?.items.filter(
1012
+ (account) => account.status === "ACTIVE"
1013
+ );
1014
+ const initiatedAccounts = userConnectedAccounts?.items.filter(
1015
+ (account) => account.status === "INITIATED"
1016
+ );
1017
+ const authenticatedAuthConfigIds = new Set(
1018
+ activeAccounts?.map((account) => account.authConfig.id) ?? []
1019
+ );
1020
+ const transformedServers = await Promise.all(
1021
+ composioMcpServers?.items.map(
1022
+ (server) => transformComposioServer(
1023
+ server,
1024
+ authenticatedAuthConfigIds,
1025
+ initiatedAccounts ?? [],
1026
+ derivedUserId
1027
+ )
1028
+ )
1029
+ );
1030
+ const validServers = transformedServers.filter(
1031
+ (server) => server !== null
1032
+ );
1033
+ return validServers;
1034
+ } catch (error) {
1035
+ logger3.error({ error }, "Failed to fetch Composio servers");
1036
+ return [];
1037
+ }
1038
+ }
1039
+ async function fetchSingleComposioServer(tenantId, projectId, mcpServerUrl) {
1040
+ const composioApiKey = process.env.COMPOSIO_API_KEY;
1041
+ if (!composioApiKey) {
1042
+ logger3.debug({}, "COMPOSIO_API_KEY not configured");
1043
+ return null;
1044
+ }
1045
+ const derivedUserId = deriveComposioUserId(tenantId, projectId);
1046
+ const composioInstance = getComposioInstance();
1047
+ if (!composioInstance) {
1048
+ logger3.info({}, "Composio not configured, returning null");
1049
+ return null;
1050
+ }
1051
+ try {
1052
+ const serverId = extractComposioServerId(mcpServerUrl);
1053
+ if (!serverId) {
1054
+ logger3.error({ mcpServerUrl }, "Could not extract Composio server ID from URL");
1055
+ return null;
1056
+ }
1057
+ const composioMcpServer = await composioInstance.mcp.get(serverId);
1058
+ const userConnectedAccounts = await composioInstance.connectedAccounts.list({
1059
+ userIds: [derivedUserId]
1060
+ });
1061
+ const activeAccounts = userConnectedAccounts?.items.filter(
1062
+ (account) => account.status === "ACTIVE"
1063
+ );
1064
+ const initiatedAccounts = userConnectedAccounts?.items.filter(
1065
+ (account) => account.status === "INITIATED"
1066
+ );
1067
+ const authenticatedAuthConfigIds = new Set(
1068
+ activeAccounts?.map((account) => account.authConfig.id) ?? []
1069
+ );
1070
+ const transformedServer = await transformComposioServer(
1071
+ composioMcpServer,
1072
+ authenticatedAuthConfigIds,
1073
+ initiatedAccounts ?? [],
1074
+ derivedUserId
1075
+ );
1076
+ return transformedServer;
1077
+ } catch (error) {
1078
+ logger3.error({ error, mcpServerUrl }, "Failed to fetch single Composio server");
1079
+ return null;
1080
+ }
1081
+ }
1082
+
1083
+ // src/utils/third-party-mcp-servers/third-party-check.ts
1084
+ var logger4 = getLogger("third-party-check");
1085
+ async function isThirdPartyMCPServerAuthenticated(tenantId, projectId, mcpServerUrl) {
1086
+ const composioServerId = extractComposioServerId(mcpServerUrl);
1087
+ if (composioServerId) {
1088
+ logger4.debug({ mcpServerUrl }, "Detected Composio MCP server, checking auth status");
1089
+ return isComposioMCPServerAuthenticated(tenantId, projectId, mcpServerUrl);
1090
+ }
1091
+ logger4.info({ mcpServerUrl }, "Unknown third-party MCP server provider");
1092
+ return false;
1093
+ }
1094
+ var logger5 = getLogger("tracer");
838
1095
  var createNoOpSpan = () => ({
839
1096
  setAttributes: () => ({}),
840
1097
  recordException: () => ({}),
@@ -863,86 +1120,23 @@ var noopTracer = {
863
1120
  return createNoOpSpan();
864
1121
  }
865
1122
  };
866
- function setSpanWithError(span, error, logger4, logMessage) {
1123
+ function setSpanWithError(span, error, logger6, logMessage) {
867
1124
  span.recordException(error);
868
1125
  span.setStatus({
869
1126
  code: SpanStatusCode.ERROR,
870
1127
  message: error.message
871
1128
  });
872
- if (logger4 && logMessage) {
873
- logger4.error({ error: error.message }, logMessage);
1129
+ if (logger6 && logMessage) {
1130
+ logger6.error({ error: error.message }, logMessage);
874
1131
  }
875
1132
  }
876
1133
  function getTracer(serviceName, serviceVersion) {
877
1134
  try {
878
1135
  return trace.getTracer(serviceName, serviceVersion);
879
1136
  } catch (_error) {
880
- logger3.debug({}, "OpenTelemetry tracer not available, using no-op tracer");
1137
+ logger5.debug({}, "OpenTelemetry tracer not available, using no-op tracer");
881
1138
  return noopTracer;
882
1139
  }
883
1140
  }
884
- var FILENAME = fileURLToPath(import.meta.url);
885
- var DIRNAME = dirname(FILENAME);
886
- async function createTestDatabaseClient(drizzleDir) {
887
- const client = new PGlite();
888
- const db = drizzle(client, { schema: schema_exports });
889
- try {
890
- if (!drizzleDir) {
891
- drizzleDir = join(DIRNAME, "../../drizzle");
892
- }
893
- await migrate(db, { migrationsFolder: drizzleDir });
894
- } catch (error) {
895
- console.error("Failed to initialize test database schema:", error);
896
- throw error;
897
- }
898
- return db;
899
- }
900
- async function cleanupTestDatabase(db) {
901
- try {
902
- const result = await db.execute(
903
- sql.raw(`
904
- SELECT tablename
905
- FROM pg_tables
906
- WHERE schemaname = 'public'
907
- `)
908
- );
909
- const tables = result.rows.map((row) => row.tablename);
910
- if (tables.length === 0) {
911
- return;
912
- }
913
- const tableList = tables.map((t) => `"${t}"`).join(", ");
914
- await db.execute(sql.raw(`TRUNCATE TABLE ${tableList} RESTART IDENTITY CASCADE`));
915
- } catch (error) {
916
- console.debug("Could not clean test database:", error);
917
- }
918
- }
919
- async function closeTestDatabase(db) {
920
- try {
921
- if ("close" in db && typeof db.close === "function") {
922
- db.close();
923
- }
924
- } catch (error) {
925
- console.debug("Error closing database:", error);
926
- }
927
- }
928
- async function createTestOrganization(db, tenantId) {
929
- const slug = tenantId.replace(/^test-tenant-/, "").substring(0, 50);
930
- await db.insert(organization).values({
931
- id: tenantId,
932
- name: `Test Organization ${tenantId}`,
933
- slug,
934
- createdAt: /* @__PURE__ */ new Date(),
935
- metadata: null
936
- }).onConflictDoNothing();
937
- }
938
- async function createTestProject(db, tenantId, projectId = "default") {
939
- await createTestOrganization(db, tenantId);
940
- await db.insert(projects).values({
941
- tenantId,
942
- id: projectId,
943
- name: `Test Project ${projectId}`,
944
- description: `Test project for ${projectId}`
945
- }).onConflictDoNothing();
946
- }
947
1141
 
948
- 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, cleanupTestDatabase, closeTestDatabase, commonCreateErrorResponses, commonDeleteErrorResponses, commonGetErrorResponses, commonUpdateErrorResponses, createApiError, createExecutionContext, createTestDatabaseClient, createTestOrganization, createTestProject, env, errorResponseSchema, errorSchemaFactory, executionLimitsSharedDefaults, extractPublicId, generateApiKey, generateId, generateServiceToken, getConversationId, getCredentialStoreLookupKeyFromRetrievalParams, getRequestExecutionContext, getTracer, handleApiError, hashApiKey, isApiKeyExpired, loadEnvironmentFiles, maskApiKey, normalizeDateString, problemDetailsSchema, setSpanWithError, validateApiKey, validateTargetAgent, validateTenantId, verifyAuthorizationHeader, verifyServiceToken };
1142
+ 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, validateApiKey, validateTargetAgent, validateTenantId, verifyAuthorizationHeader, verifyServiceToken };
@@ -1,8 +1,7 @@
1
- import { z } from 'zod';
2
1
  import pino from 'pino';
3
2
  import pinoPretty from 'pino-pretty';
4
3
 
5
- // src/utils/schema-conversion.ts
4
+ // src/utils/logger.ts
6
5
  var PinoLogger = class {
7
6
  constructor(name, config = {}) {
8
7
  this.name = name;
@@ -128,22 +127,22 @@ var LoggerFactory = class {
128
127
  */
129
128
  getLogger(name) {
130
129
  if (this.loggers.has(name)) {
131
- const logger3 = this.loggers.get(name);
132
- if (!logger3) {
130
+ const logger2 = this.loggers.get(name);
131
+ if (!logger2) {
133
132
  throw new Error(`Logger '${name}' not found in cache`);
134
133
  }
135
- return logger3;
134
+ return logger2;
136
135
  }
137
- let logger2;
136
+ let logger;
138
137
  if (this.config.loggerFactory) {
139
- logger2 = this.config.loggerFactory(name);
138
+ logger = this.config.loggerFactory(name);
140
139
  } else if (this.config.defaultLogger) {
141
- logger2 = this.config.defaultLogger;
140
+ logger = this.config.defaultLogger;
142
141
  } else {
143
- logger2 = new PinoLogger(name, this.config.pinoConfig);
142
+ logger = new PinoLogger(name, this.config.pinoConfig);
144
143
  }
145
- this.loggers.set(name, logger2);
146
- return logger2;
144
+ this.loggers.set(name, logger);
145
+ return logger;
147
146
  }
148
147
  /**
149
148
  * Reset factory to default state
@@ -158,64 +157,4 @@ function getLogger(name) {
158
157
  return loggerFactory.getLogger(name);
159
158
  }
160
159
 
161
- // src/utils/schema-conversion.ts
162
- var logger = getLogger("schema-conversion");
163
- function convertZodToJsonSchema(zodSchema) {
164
- try {
165
- const jsonSchema = z.toJSONSchema(zodSchema);
166
- if (jsonSchema.$schema) {
167
- delete jsonSchema.$schema;
168
- }
169
- return jsonSchema;
170
- } catch (error) {
171
- logger.error(
172
- {
173
- error: error instanceof Error ? error.message : "Unknown error",
174
- stack: error instanceof Error ? error.stack : void 0
175
- },
176
- "Failed to convert Zod schema to JSON Schema"
177
- );
178
- throw new Error("Failed to convert Zod schema to JSON Schema");
179
- }
180
- }
181
- var preview = (schema) => {
182
- schema._def.inPreview = true;
183
- return schema;
184
- };
185
- function convertZodToJsonSchemaWithPreview(zodSchema) {
186
- const jsonSchema = convertZodToJsonSchema(zodSchema);
187
- if (zodSchema instanceof z.ZodObject && jsonSchema.properties) {
188
- const shape = zodSchema.shape;
189
- for (const [key, fieldSchema] of Object.entries(shape)) {
190
- if (fieldSchema?._def?.inPreview === true) {
191
- jsonSchema.properties[key].inPreview = true;
192
- }
193
- }
194
- }
195
- return jsonSchema;
196
- }
197
- function isZodSchema(value) {
198
- return value?._def?.type === "object";
199
- }
200
- function extractPreviewFields(schema) {
201
- const previewFields = [];
202
- if (schema instanceof z.ZodObject) {
203
- const shape = schema.shape;
204
- for (const [key, fieldSchema] of Object.entries(shape)) {
205
- if (fieldSchema?._def?.inPreview === true) {
206
- previewFields.push(key);
207
- }
208
- }
209
- return previewFields;
210
- }
211
- if (schema?.type === "object" && schema.properties) {
212
- for (const [key, prop] of Object.entries(schema.properties)) {
213
- if (prop.inPreview === true) {
214
- previewFields.push(key);
215
- }
216
- }
217
- }
218
- return previewFields;
219
- }
220
-
221
- export { PinoLogger, convertZodToJsonSchema, convertZodToJsonSchemaWithPreview, extractPreviewFields, getLogger, isZodSchema, loggerFactory, preview };
160
+ export { PinoLogger, getLogger, loggerFactory };