fmp-ai-tools 0.0.11-beta.2 → 0.0.11-beta.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,44 +1,184 @@
1
1
  import * as _openai_agents from '@openai/agents';
2
2
  import { Tool } from '@openai/agents';
3
3
 
4
- declare const getCompanyProfile: _openai_agents.FunctionTool<unknown, any, string>;
4
+ declare const getCompanyProfile: _openai_agents.FunctionTool<unknown, {
5
+ type: "object";
6
+ properties: Record<string, any>;
7
+ required: string[];
8
+ additionalProperties: false;
9
+ }, string>;
5
10
 
6
- declare const getEarningsCalendar: _openai_agents.FunctionTool<unknown, any, string>;
7
- declare const getEconomicCalendar: _openai_agents.FunctionTool<unknown, any, string>;
11
+ declare const getEarningsCalendar: _openai_agents.FunctionTool<unknown, {
12
+ type: "object";
13
+ properties: Record<string, any>;
14
+ required: string[];
15
+ additionalProperties: false;
16
+ }, string>;
17
+ declare const getEconomicCalendar: _openai_agents.FunctionTool<unknown, {
18
+ type: "object";
19
+ properties: Record<string, any>;
20
+ required: string[];
21
+ additionalProperties: false;
22
+ }, string>;
8
23
 
9
- declare const getTreasuryRates: _openai_agents.FunctionTool<unknown, any, string>;
10
- declare const getEconomicIndicators: _openai_agents.FunctionTool<unknown, any, string>;
24
+ declare const getTreasuryRates: _openai_agents.FunctionTool<unknown, {
25
+ type: "object";
26
+ properties: Record<string, any>;
27
+ required: string[];
28
+ additionalProperties: false;
29
+ }, string>;
30
+ declare const getEconomicIndicators: _openai_agents.FunctionTool<unknown, {
31
+ type: "object";
32
+ properties: Record<string, any>;
33
+ required: string[];
34
+ additionalProperties: false;
35
+ }, string>;
11
36
 
12
- declare const getETFHoldings: _openai_agents.FunctionTool<unknown, any, string>;
13
- declare const getETFProfile: _openai_agents.FunctionTool<unknown, any, string>;
37
+ declare const getETFHoldings: _openai_agents.FunctionTool<unknown, {
38
+ type: "object";
39
+ properties: Record<string, any>;
40
+ required: string[];
41
+ additionalProperties: false;
42
+ }, string>;
43
+ declare const getETFProfile: _openai_agents.FunctionTool<unknown, {
44
+ type: "object";
45
+ properties: Record<string, any>;
46
+ required: string[];
47
+ additionalProperties: false;
48
+ }, string>;
14
49
 
15
- declare const getBalanceSheet: _openai_agents.FunctionTool<unknown, any, string>;
16
- declare const getIncomeStatement: _openai_agents.FunctionTool<unknown, any, string>;
17
- declare const getCashFlowStatement: _openai_agents.FunctionTool<unknown, any, string>;
18
- declare const getFinancialRatios: _openai_agents.FunctionTool<unknown, any, string>;
50
+ declare const getBalanceSheet: _openai_agents.FunctionTool<unknown, {
51
+ type: "object";
52
+ properties: Record<string, any>;
53
+ required: string[];
54
+ additionalProperties: false;
55
+ }, string>;
56
+ declare const getIncomeStatement: _openai_agents.FunctionTool<unknown, {
57
+ type: "object";
58
+ properties: Record<string, any>;
59
+ required: string[];
60
+ additionalProperties: false;
61
+ }, string>;
62
+ declare const getCashFlowStatement: _openai_agents.FunctionTool<unknown, {
63
+ type: "object";
64
+ properties: Record<string, any>;
65
+ required: string[];
66
+ additionalProperties: false;
67
+ }, string>;
68
+ declare const getFinancialRatios: _openai_agents.FunctionTool<unknown, {
69
+ type: "object";
70
+ properties: Record<string, any>;
71
+ required: string[];
72
+ additionalProperties: false;
73
+ }, string>;
19
74
 
20
- declare const getInsiderTrading: _openai_agents.FunctionTool<unknown, any, string>;
75
+ declare const getInsiderTrading: _openai_agents.FunctionTool<unknown, {
76
+ type: "object";
77
+ properties: Record<string, any>;
78
+ required: string[];
79
+ additionalProperties: false;
80
+ }, string>;
21
81
 
22
- declare const getInstitutionalHolders: _openai_agents.FunctionTool<unknown, any, string>;
82
+ declare const getInstitutionalHolders: _openai_agents.FunctionTool<unknown, {
83
+ type: "object";
84
+ properties: Record<string, any>;
85
+ required: string[];
86
+ additionalProperties: false;
87
+ }, string>;
23
88
 
24
- declare const getMarketPerformance: _openai_agents.FunctionTool<unknown, any, string>;
25
- declare const getSectorPerformance: _openai_agents.FunctionTool<unknown, any, string>;
26
- declare const getGainers: _openai_agents.FunctionTool<unknown, any, string>;
27
- declare const getLosers: _openai_agents.FunctionTool<unknown, any, string>;
28
- declare const getMostActive: _openai_agents.FunctionTool<unknown, any, string>;
89
+ declare const getMarketPerformance: _openai_agents.FunctionTool<unknown, {
90
+ type: "object";
91
+ properties: Record<string, any>;
92
+ required: string[];
93
+ additionalProperties: false;
94
+ }, string>;
95
+ declare const getSectorPerformance: _openai_agents.FunctionTool<unknown, {
96
+ type: "object";
97
+ properties: Record<string, any>;
98
+ required: string[];
99
+ additionalProperties: false;
100
+ }, string>;
101
+ declare const getGainers: _openai_agents.FunctionTool<unknown, {
102
+ type: "object";
103
+ properties: Record<string, any>;
104
+ required: string[];
105
+ additionalProperties: false;
106
+ }, string>;
107
+ declare const getLosers: _openai_agents.FunctionTool<unknown, {
108
+ type: "object";
109
+ properties: Record<string, any>;
110
+ required: string[];
111
+ additionalProperties: false;
112
+ }, string>;
113
+ declare const getMostActive: _openai_agents.FunctionTool<unknown, {
114
+ type: "object";
115
+ properties: Record<string, any>;
116
+ required: string[];
117
+ additionalProperties: false;
118
+ }, string>;
29
119
 
30
- declare const getStockQuote: _openai_agents.FunctionTool<unknown, any, string>;
120
+ declare const getStockQuote: _openai_agents.FunctionTool<unknown, {
121
+ type: "object";
122
+ properties: Record<string, any>;
123
+ required: string[];
124
+ additionalProperties: false;
125
+ }, string>;
31
126
 
32
- declare const getSenateTrading: _openai_agents.FunctionTool<unknown, any, string>;
33
- declare const getHouseTrading: _openai_agents.FunctionTool<unknown, any, string>;
34
- declare const getSenateTradingByName: _openai_agents.FunctionTool<unknown, any, string>;
35
- declare const getHouseTradingByName: _openai_agents.FunctionTool<unknown, any, string>;
36
- declare const getSenateTradingRSSFeed: _openai_agents.FunctionTool<unknown, any, string>;
37
- declare const getHouseTradingRSSFeed: _openai_agents.FunctionTool<unknown, any, string>;
127
+ declare const getSenateTrading: _openai_agents.FunctionTool<unknown, {
128
+ type: "object";
129
+ properties: Record<string, any>;
130
+ required: string[];
131
+ additionalProperties: false;
132
+ }, string>;
133
+ declare const getHouseTrading: _openai_agents.FunctionTool<unknown, {
134
+ type: "object";
135
+ properties: Record<string, any>;
136
+ required: string[];
137
+ additionalProperties: false;
138
+ }, string>;
139
+ declare const getSenateTradingByName: _openai_agents.FunctionTool<unknown, {
140
+ type: "object";
141
+ properties: Record<string, any>;
142
+ required: string[];
143
+ additionalProperties: false;
144
+ }, string>;
145
+ declare const getHouseTradingByName: _openai_agents.FunctionTool<unknown, {
146
+ type: "object";
147
+ properties: Record<string, any>;
148
+ required: string[];
149
+ additionalProperties: false;
150
+ }, string>;
151
+ declare const getSenateTradingRSSFeed: _openai_agents.FunctionTool<unknown, {
152
+ type: "object";
153
+ properties: Record<string, any>;
154
+ required: string[];
155
+ additionalProperties: false;
156
+ }, string>;
157
+ declare const getHouseTradingRSSFeed: _openai_agents.FunctionTool<unknown, {
158
+ type: "object";
159
+ properties: Record<string, any>;
160
+ required: string[];
161
+ additionalProperties: false;
162
+ }, string>;
38
163
 
39
- declare const getMarketCap: _openai_agents.FunctionTool<unknown, any, string>;
40
- declare const getStockSplits: _openai_agents.FunctionTool<unknown, any, string>;
41
- declare const getDividendHistory: _openai_agents.FunctionTool<unknown, any, string>;
164
+ declare const getMarketCap: _openai_agents.FunctionTool<unknown, {
165
+ type: "object";
166
+ properties: Record<string, any>;
167
+ required: string[];
168
+ additionalProperties: false;
169
+ }, string>;
170
+ declare const getStockSplits: _openai_agents.FunctionTool<unknown, {
171
+ type: "object";
172
+ properties: Record<string, any>;
173
+ required: string[];
174
+ additionalProperties: false;
175
+ }, string>;
176
+ declare const getDividendHistory: _openai_agents.FunctionTool<unknown, {
177
+ type: "object";
178
+ properties: Record<string, any>;
179
+ required: string[];
180
+ additionalProperties: false;
181
+ }, string>;
42
182
 
43
183
  declare const companyTools: Tool<unknown>[];
44
184
  declare const calendarTools: Tool<unknown>[];
@@ -1,44 +1,184 @@
1
1
  import * as _openai_agents from '@openai/agents';
2
2
  import { Tool } from '@openai/agents';
3
3
 
4
- declare const getCompanyProfile: _openai_agents.FunctionTool<unknown, any, string>;
4
+ declare const getCompanyProfile: _openai_agents.FunctionTool<unknown, {
5
+ type: "object";
6
+ properties: Record<string, any>;
7
+ required: string[];
8
+ additionalProperties: false;
9
+ }, string>;
5
10
 
6
- declare const getEarningsCalendar: _openai_agents.FunctionTool<unknown, any, string>;
7
- declare const getEconomicCalendar: _openai_agents.FunctionTool<unknown, any, string>;
11
+ declare const getEarningsCalendar: _openai_agents.FunctionTool<unknown, {
12
+ type: "object";
13
+ properties: Record<string, any>;
14
+ required: string[];
15
+ additionalProperties: false;
16
+ }, string>;
17
+ declare const getEconomicCalendar: _openai_agents.FunctionTool<unknown, {
18
+ type: "object";
19
+ properties: Record<string, any>;
20
+ required: string[];
21
+ additionalProperties: false;
22
+ }, string>;
8
23
 
9
- declare const getTreasuryRates: _openai_agents.FunctionTool<unknown, any, string>;
10
- declare const getEconomicIndicators: _openai_agents.FunctionTool<unknown, any, string>;
24
+ declare const getTreasuryRates: _openai_agents.FunctionTool<unknown, {
25
+ type: "object";
26
+ properties: Record<string, any>;
27
+ required: string[];
28
+ additionalProperties: false;
29
+ }, string>;
30
+ declare const getEconomicIndicators: _openai_agents.FunctionTool<unknown, {
31
+ type: "object";
32
+ properties: Record<string, any>;
33
+ required: string[];
34
+ additionalProperties: false;
35
+ }, string>;
11
36
 
12
- declare const getETFHoldings: _openai_agents.FunctionTool<unknown, any, string>;
13
- declare const getETFProfile: _openai_agents.FunctionTool<unknown, any, string>;
37
+ declare const getETFHoldings: _openai_agents.FunctionTool<unknown, {
38
+ type: "object";
39
+ properties: Record<string, any>;
40
+ required: string[];
41
+ additionalProperties: false;
42
+ }, string>;
43
+ declare const getETFProfile: _openai_agents.FunctionTool<unknown, {
44
+ type: "object";
45
+ properties: Record<string, any>;
46
+ required: string[];
47
+ additionalProperties: false;
48
+ }, string>;
14
49
 
15
- declare const getBalanceSheet: _openai_agents.FunctionTool<unknown, any, string>;
16
- declare const getIncomeStatement: _openai_agents.FunctionTool<unknown, any, string>;
17
- declare const getCashFlowStatement: _openai_agents.FunctionTool<unknown, any, string>;
18
- declare const getFinancialRatios: _openai_agents.FunctionTool<unknown, any, string>;
50
+ declare const getBalanceSheet: _openai_agents.FunctionTool<unknown, {
51
+ type: "object";
52
+ properties: Record<string, any>;
53
+ required: string[];
54
+ additionalProperties: false;
55
+ }, string>;
56
+ declare const getIncomeStatement: _openai_agents.FunctionTool<unknown, {
57
+ type: "object";
58
+ properties: Record<string, any>;
59
+ required: string[];
60
+ additionalProperties: false;
61
+ }, string>;
62
+ declare const getCashFlowStatement: _openai_agents.FunctionTool<unknown, {
63
+ type: "object";
64
+ properties: Record<string, any>;
65
+ required: string[];
66
+ additionalProperties: false;
67
+ }, string>;
68
+ declare const getFinancialRatios: _openai_agents.FunctionTool<unknown, {
69
+ type: "object";
70
+ properties: Record<string, any>;
71
+ required: string[];
72
+ additionalProperties: false;
73
+ }, string>;
19
74
 
20
- declare const getInsiderTrading: _openai_agents.FunctionTool<unknown, any, string>;
75
+ declare const getInsiderTrading: _openai_agents.FunctionTool<unknown, {
76
+ type: "object";
77
+ properties: Record<string, any>;
78
+ required: string[];
79
+ additionalProperties: false;
80
+ }, string>;
21
81
 
22
- declare const getInstitutionalHolders: _openai_agents.FunctionTool<unknown, any, string>;
82
+ declare const getInstitutionalHolders: _openai_agents.FunctionTool<unknown, {
83
+ type: "object";
84
+ properties: Record<string, any>;
85
+ required: string[];
86
+ additionalProperties: false;
87
+ }, string>;
23
88
 
24
- declare const getMarketPerformance: _openai_agents.FunctionTool<unknown, any, string>;
25
- declare const getSectorPerformance: _openai_agents.FunctionTool<unknown, any, string>;
26
- declare const getGainers: _openai_agents.FunctionTool<unknown, any, string>;
27
- declare const getLosers: _openai_agents.FunctionTool<unknown, any, string>;
28
- declare const getMostActive: _openai_agents.FunctionTool<unknown, any, string>;
89
+ declare const getMarketPerformance: _openai_agents.FunctionTool<unknown, {
90
+ type: "object";
91
+ properties: Record<string, any>;
92
+ required: string[];
93
+ additionalProperties: false;
94
+ }, string>;
95
+ declare const getSectorPerformance: _openai_agents.FunctionTool<unknown, {
96
+ type: "object";
97
+ properties: Record<string, any>;
98
+ required: string[];
99
+ additionalProperties: false;
100
+ }, string>;
101
+ declare const getGainers: _openai_agents.FunctionTool<unknown, {
102
+ type: "object";
103
+ properties: Record<string, any>;
104
+ required: string[];
105
+ additionalProperties: false;
106
+ }, string>;
107
+ declare const getLosers: _openai_agents.FunctionTool<unknown, {
108
+ type: "object";
109
+ properties: Record<string, any>;
110
+ required: string[];
111
+ additionalProperties: false;
112
+ }, string>;
113
+ declare const getMostActive: _openai_agents.FunctionTool<unknown, {
114
+ type: "object";
115
+ properties: Record<string, any>;
116
+ required: string[];
117
+ additionalProperties: false;
118
+ }, string>;
29
119
 
30
- declare const getStockQuote: _openai_agents.FunctionTool<unknown, any, string>;
120
+ declare const getStockQuote: _openai_agents.FunctionTool<unknown, {
121
+ type: "object";
122
+ properties: Record<string, any>;
123
+ required: string[];
124
+ additionalProperties: false;
125
+ }, string>;
31
126
 
32
- declare const getSenateTrading: _openai_agents.FunctionTool<unknown, any, string>;
33
- declare const getHouseTrading: _openai_agents.FunctionTool<unknown, any, string>;
34
- declare const getSenateTradingByName: _openai_agents.FunctionTool<unknown, any, string>;
35
- declare const getHouseTradingByName: _openai_agents.FunctionTool<unknown, any, string>;
36
- declare const getSenateTradingRSSFeed: _openai_agents.FunctionTool<unknown, any, string>;
37
- declare const getHouseTradingRSSFeed: _openai_agents.FunctionTool<unknown, any, string>;
127
+ declare const getSenateTrading: _openai_agents.FunctionTool<unknown, {
128
+ type: "object";
129
+ properties: Record<string, any>;
130
+ required: string[];
131
+ additionalProperties: false;
132
+ }, string>;
133
+ declare const getHouseTrading: _openai_agents.FunctionTool<unknown, {
134
+ type: "object";
135
+ properties: Record<string, any>;
136
+ required: string[];
137
+ additionalProperties: false;
138
+ }, string>;
139
+ declare const getSenateTradingByName: _openai_agents.FunctionTool<unknown, {
140
+ type: "object";
141
+ properties: Record<string, any>;
142
+ required: string[];
143
+ additionalProperties: false;
144
+ }, string>;
145
+ declare const getHouseTradingByName: _openai_agents.FunctionTool<unknown, {
146
+ type: "object";
147
+ properties: Record<string, any>;
148
+ required: string[];
149
+ additionalProperties: false;
150
+ }, string>;
151
+ declare const getSenateTradingRSSFeed: _openai_agents.FunctionTool<unknown, {
152
+ type: "object";
153
+ properties: Record<string, any>;
154
+ required: string[];
155
+ additionalProperties: false;
156
+ }, string>;
157
+ declare const getHouseTradingRSSFeed: _openai_agents.FunctionTool<unknown, {
158
+ type: "object";
159
+ properties: Record<string, any>;
160
+ required: string[];
161
+ additionalProperties: false;
162
+ }, string>;
38
163
 
39
- declare const getMarketCap: _openai_agents.FunctionTool<unknown, any, string>;
40
- declare const getStockSplits: _openai_agents.FunctionTool<unknown, any, string>;
41
- declare const getDividendHistory: _openai_agents.FunctionTool<unknown, any, string>;
164
+ declare const getMarketCap: _openai_agents.FunctionTool<unknown, {
165
+ type: "object";
166
+ properties: Record<string, any>;
167
+ required: string[];
168
+ additionalProperties: false;
169
+ }, string>;
170
+ declare const getStockSplits: _openai_agents.FunctionTool<unknown, {
171
+ type: "object";
172
+ properties: Record<string, any>;
173
+ required: string[];
174
+ additionalProperties: false;
175
+ }, string>;
176
+ declare const getDividendHistory: _openai_agents.FunctionTool<unknown, {
177
+ type: "object";
178
+ properties: Record<string, any>;
179
+ required: string[];
180
+ additionalProperties: false;
181
+ }, string>;
42
182
 
43
183
  declare const companyTools: Tool<unknown>[];
44
184
  declare const calendarTools: Tool<unknown>[];
@@ -206,11 +206,21 @@ async function logApiExecutionWithTiming(toolName, input, executeFn) {
206
206
  // src/utils/openai-tool-wrapper.ts
207
207
  function createOpenAITool(config) {
208
208
  const { name, description, inputSchema, execute } = config;
209
- const jsonSchema = zodToJsonSchema(inputSchema);
209
+ const properties = {};
210
+ const required = [];
211
+ Object.entries(inputSchema.shape).forEach(([key, _fieldSchema]) => {
212
+ properties[key] = { type: "string" };
213
+ required.push(key);
214
+ });
210
215
  return agents.tool({
211
216
  name,
212
217
  description,
213
- parameters: jsonSchema,
218
+ parameters: {
219
+ type: "object",
220
+ properties,
221
+ required,
222
+ additionalProperties: false
223
+ },
214
224
  strict: true,
215
225
  execute: async (input) => {
216
226
  try {
@@ -225,78 +235,6 @@ function createOpenAITool(config) {
225
235
  }
226
236
  });
227
237
  }
228
- function zodToJsonSchema(schema) {
229
- const shape = schema.shape;
230
- const properties = {};
231
- const required = [];
232
- Object.entries(shape).forEach(([key, fieldSchema]) => {
233
- let isRequired = true;
234
- let actualSchema = fieldSchema;
235
- let fieldDescription = "";
236
- if (fieldSchema && typeof fieldSchema === "object" && "description" in fieldSchema) {
237
- const desc = fieldSchema.description;
238
- if (typeof desc === "string") {
239
- fieldDescription = desc;
240
- }
241
- }
242
- if (fieldSchema instanceof zod.z.ZodOptional) {
243
- isRequired = false;
244
- actualSchema = fieldSchema.unwrap();
245
- if (!fieldDescription && actualSchema.description) {
246
- fieldDescription = actualSchema.description;
247
- }
248
- }
249
- if (fieldSchema instanceof zod.z.ZodDefault) {
250
- isRequired = false;
251
- actualSchema = fieldSchema.removeDefault();
252
- if (!fieldDescription && actualSchema.description) {
253
- fieldDescription = actualSchema.description;
254
- }
255
- }
256
- if (actualSchema instanceof zod.z.ZodString) {
257
- properties[key] = {
258
- type: "string",
259
- description: fieldDescription || `${key} parameter`
260
- };
261
- } else if (actualSchema instanceof zod.z.ZodEnum) {
262
- properties[key] = {
263
- type: "string",
264
- enum: actualSchema._def.values,
265
- description: fieldDescription || `${key} parameter`
266
- };
267
- } else if (actualSchema instanceof zod.z.ZodNumber) {
268
- properties[key] = {
269
- type: "number",
270
- description: fieldDescription || `${key} parameter`
271
- };
272
- } else if (actualSchema instanceof zod.z.ZodBoolean) {
273
- properties[key] = {
274
- type: "boolean",
275
- description: fieldDescription || `${key} parameter`
276
- };
277
- } else if (actualSchema instanceof zod.z.ZodArray) {
278
- properties[key] = {
279
- type: "array",
280
- items: { type: "string" },
281
- // Default to string array, can be enhanced
282
- description: fieldDescription || `${key} parameter`
283
- };
284
- } else {
285
- properties[key] = {
286
- type: "string",
287
- description: fieldDescription || `${key} parameter`
288
- };
289
- }
290
- if (isRequired) {
291
- required.push(key);
292
- }
293
- });
294
- return {
295
- type: "object",
296
- properties,
297
- required
298
- };
299
- }
300
238
  function getFMPClient() {
301
239
  return new fmpNodeApi.FMP();
302
240
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/version-check.ts","../../../src/utils/logger.ts","../../../src/utils/openai-tool-wrapper.ts","../../../src/client.ts","../../../src/providers/openai/company.ts","../../../src/providers/openai/calendar.ts","../../../src/providers/openai/economic.ts","../../../src/providers/openai/etf.ts","../../../src/providers/openai/financial.ts","../../../src/providers/openai/insider.ts","../../../src/providers/openai/institutional.ts","../../../src/providers/openai/market.ts","../../../src/providers/openai/quote.ts","../../../src/providers/openai/senate-house.ts","../../../src/providers/openai/stock.ts","../../../src/providers/openai/index.ts"],"names":["tool","z","FMP","symbolInputSchema"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Checks if the installed version of @openai/agents is compatible\n * with this package. Throws an error if incompatible.\n */\nexport function checkOpenAIAgentsVersion(): void {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { tool } = require('@openai/agents');\n\n // Test if the tool function accepts the new API structure\n // This is a runtime check that will fail with older versions\n tool({\n name: 'test',\n description: 'test',\n parameters: { type: 'object', properties: {} },\n strict: true,\n execute: async () => 'test',\n });\n\n // If we get here, the version is compatible (silent success)\n } catch (error) {\n // If the tool creation fails, it's likely an incompatible version\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Incompatible @openai/agents version detected. ` +\n `This package requires version ^0.0.17 or higher due to breaking changes in the API. ` +\n `Please upgrade with: npm install @openai/agents@latest\\n\\n` +\n `Error details: ${errorMessage}`,\n );\n }\n}\n\n/**\n * Logs a warning if the version check fails but doesn't throw\n */\nexport function warnOpenAIAgentsVersion(): void {\n try {\n checkOpenAIAgentsVersion();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn('⚠️ Version compatibility warning:', errorMessage);\n }\n}\n","/**\n * Logger utility for tools package\n * Controls logging of API results based on environment variable\n */\n\ninterface LogOptions {\n toolName: string;\n input: unknown;\n result: unknown;\n executionTime?: number;\n}\n\n/**\n * Check if API result logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isApiLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_API_RESULTS === 'true';\n}\n\n/**\n * Check if data-only logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isDataOnlyLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_DATA_ONLY === 'true';\n}\n\n/**\n * Estimate token count for LLM context (JSON-optimized)\n * JSON has many structural characters that count as single tokens\n */\nfunction estimateTokenCount(text: string): number {\n // Try to parse as JSON first for better estimation\n try {\n const parsed = JSON.parse(text);\n return estimateTokenCountForData(parsed);\n } catch {\n // Not JSON, use text-based estimation\n return estimateTokenCountForText(text);\n }\n}\n\n/**\n * Estimate tokens for parsed JSON data\n */\nfunction estimateTokenCountForData(data: unknown): number {\n if (data === null || data === undefined) {\n return 1; // null/undefined is typically 1 token\n }\n\n if (typeof data === 'string') {\n // Strings are typically tokenized by words/symbols\n // Financial data often has short strings like \"AAPL\", \"USD\", etc.\n return Math.ceil(data.length / 3); // More conservative for short strings\n }\n\n if (typeof data === 'number') {\n // Numbers are typically 1-2 tokens depending on size\n return data.toString().length > 10 ? 2 : 1;\n }\n\n if (typeof data === 'boolean') {\n return 1; // true/false are single tokens\n }\n\n if (Array.isArray(data)) {\n // Arrays: count structural tokens + content tokens\n let tokens = 2; // [ and ]\n for (const item of data) {\n tokens += estimateTokenCountForData(item);\n if (data.indexOf(item) < data.length - 1) {\n tokens += 1; // comma separator\n }\n }\n return tokens;\n }\n\n if (typeof data === 'object') {\n // Objects: count structural tokens + key-value pairs\n let tokens = 2; // { and }\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = (data as Record<string, unknown>)[key];\n\n // Key (quoted string)\n tokens += Math.ceil(key.length / 3);\n tokens += 2; // quotes around key\n\n // Colon separator\n tokens += 1;\n\n // Value\n tokens += estimateTokenCountForData(value);\n\n // Comma separator (except for last item)\n if (i < keys.length - 1) {\n tokens += 1;\n }\n }\n return tokens;\n }\n\n return 1; // fallback\n}\n\n/**\n * Estimate tokens for plain text (non-JSON)\n */\nfunction estimateTokenCountForText(text: string): number {\n // For plain text, use a more conservative estimate\n // Consider that financial data often has numbers, symbols, and abbreviations\n const words = text.split(/\\s+/).filter(word => word.length > 0);\n let tokens = 0;\n\n for (const word of words) {\n if (/^\\d+$/.test(word)) {\n // Pure numbers are typically 1-2 tokens\n tokens += word.length > 8 ? 2 : 1;\n } else if (/^[A-Z]+$/.test(word)) {\n // All caps (like stock symbols) are often single tokens\n tokens += 1;\n } else if (/^\\$[\\d,]+\\.?\\d*$/.test(word)) {\n // Currency amounts are typically 2-3 tokens\n tokens += 3;\n } else {\n // Regular words: roughly 3-4 characters per token\n tokens += Math.ceil(word.length / 3.5);\n }\n }\n\n return tokens;\n}\n\n/**\n * Get simple metadata about the result for LLM context\n */\nfunction getResultInfo(result: unknown): string {\n if (result === null || result === undefined) {\n return 'null/undefined';\n }\n\n if (typeof result === 'string') {\n const tokenCount = estimateTokenCount(result);\n try {\n const parsed = JSON.parse(result);\n if (Array.isArray(parsed)) {\n return `JSON string (array of ${parsed.length} items, ~${tokenCount} tokens)`;\n }\n } catch {\n // Not JSON\n }\n return `string (${result.length} chars, ~${tokenCount} tokens)`;\n }\n\n if (Array.isArray(result)) {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `array (${result.length} items, ~${tokenCount} tokens)`;\n }\n\n if (typeof result === 'object') {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `object (~${tokenCount} tokens)`;\n }\n\n return typeof result;\n}\n\n/**\n * Log API tool execution details when enabled\n */\nexport function logApiExecution(options: LogOptions): void {\n if (!isApiLoggingEnabled()) {\n return;\n }\n\n const { toolName, input, result, executionTime } = options;\n\n console.log('\\n' + '='.repeat(80));\n console.log(`🔧 FMP Tool Execution: ${toolName}`);\n console.log('='.repeat(80));\n\n console.log('\\n📥 Input:');\n console.log(JSON.stringify(input, null, 2));\n\n const resultInfo = getResultInfo(result);\n\n console.log(`🔧 ${toolName}: ${resultInfo}`);\n\n if (executionTime !== undefined) {\n console.log(`\\n⏱️ Execution Time: ${executionTime}ms`);\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log data-only information for LLM context (when enabled)\n */\nexport function logDataOnly(options: LogOptions): void {\n if (!isDataOnlyLoggingEnabled()) {\n return;\n }\n\n const { result } = options;\n\n console.log('\\n📤 Result:');\n if (typeof result === 'string') {\n try {\n // Try to parse and pretty-print if it's JSON\n const parsed = JSON.parse(result);\n console.log(JSON.stringify(parsed, null, 2));\n } catch {\n // If not JSON, log as-is\n console.log(result);\n }\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log API tool execution with timing\n */\nexport async function logApiExecutionWithTiming<T>(\n toolName: string,\n input: unknown,\n executeFn: () => Promise<T>,\n): Promise<T> {\n const startTime = Date.now();\n\n try {\n const result = await executeFn();\n const executionTime = Date.now() - startTime;\n\n logApiExecution({\n toolName,\n input,\n result,\n executionTime,\n });\n\n // Also log data-only info if enabled\n logDataOnly({\n toolName,\n input,\n result,\n executionTime,\n });\n\n return result;\n } catch (error) {\n const executionTime = Date.now() - startTime;\n\n // Log error case as well\n if (isApiLoggingEnabled()) {\n console.log('\\n' + '='.repeat(80));\n console.log(`❌ FMP Tool Execution Error: ${toolName}`);\n console.log('='.repeat(80));\n console.log('\\n📥 Input:');\n console.log(JSON.stringify(input, null, 2));\n console.log('\\n❌ Error:');\n console.log(error instanceof Error ? error.message : String(error));\n console.log(`\\n⏱️ Execution Time: ${executionTime}ms`);\n console.log('='.repeat(80) + '\\n');\n }\n\n throw error;\n }\n}\n","import { z } from 'zod';\nimport { tool } from '@openai/agents';\nimport { logApiExecutionWithTiming } from './logger';\n\nexport interface OpenAIToolConfig<T extends z.ZodObject<any>> {\n name: string;\n description: string;\n inputSchema: T;\n execute: (args: z.infer<T>) => Promise<string>;\n}\n\nexport function createOpenAITool<T extends z.ZodObject<any>>(config: OpenAIToolConfig<T>) {\n const { name, description, inputSchema, execute } = config;\n\n // Convert Zod schema to JSON Schema\n const jsonSchema = zodToJsonSchema(inputSchema);\n\n return tool({\n name,\n description,\n parameters: jsonSchema,\n strict: true,\n execute: async (input: unknown) => {\n try {\n const validatedInput = inputSchema.parse(input);\n return await logApiExecutionWithTiming(name, validatedInput, () => execute(validatedInput));\n } catch (error) {\n if (error instanceof z.ZodError) {\n return `Invalid input: ${error.errors.map(e => e.message).join(', ')}`;\n }\n return `Error executing ${name}: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n });\n}\n\n// Helper function to convert Zod schema to JSON Schema\nfunction zodToJsonSchema(schema: z.ZodObject<any>): any {\n const shape = schema.shape;\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n Object.entries(shape).forEach(([key, fieldSchema]) => {\n let isRequired = true;\n let actualSchema: z.ZodType = fieldSchema as z.ZodType;\n let fieldDescription = '';\n\n // Extract description from the original schema\n if (fieldSchema && typeof fieldSchema === 'object' && 'description' in fieldSchema) {\n const desc = (fieldSchema as any).description;\n if (typeof desc === 'string') {\n fieldDescription = desc;\n }\n }\n\n // Handle optional fields\n if (fieldSchema instanceof z.ZodOptional) {\n isRequired = false;\n actualSchema = fieldSchema.unwrap();\n // If no description was found on the optional wrapper, try the unwrapped schema\n if (!fieldDescription && actualSchema.description) {\n fieldDescription = actualSchema.description;\n }\n }\n\n // Handle default values (they make fields optional)\n if (fieldSchema instanceof z.ZodDefault) {\n isRequired = false;\n actualSchema = fieldSchema.removeDefault();\n // If no description was found on the default wrapper, try the unwrapped schema\n if (!fieldDescription && actualSchema.description) {\n fieldDescription = actualSchema.description;\n }\n }\n\n // Map Zod types to JSON Schema types\n if (actualSchema instanceof z.ZodString) {\n properties[key] = {\n type: 'string',\n description: fieldDescription || `${key} parameter`,\n };\n } else if (actualSchema instanceof z.ZodEnum) {\n properties[key] = {\n type: 'string',\n enum: actualSchema._def.values,\n description: fieldDescription || `${key} parameter`,\n };\n } else if (actualSchema instanceof z.ZodNumber) {\n properties[key] = {\n type: 'number',\n description: fieldDescription || `${key} parameter`,\n };\n } else if (actualSchema instanceof z.ZodBoolean) {\n properties[key] = {\n type: 'boolean',\n description: fieldDescription || `${key} parameter`,\n };\n } else if (actualSchema instanceof z.ZodArray) {\n properties[key] = {\n type: 'array',\n items: { type: 'string' }, // Default to string array, can be enhanced\n description: fieldDescription || `${key} parameter`,\n };\n } else {\n // Fallback for unknown types\n properties[key] = {\n type: 'string',\n description: fieldDescription || `${key} parameter`,\n };\n }\n\n if (isRequired) {\n required.push(key);\n }\n });\n\n return {\n type: 'object',\n properties,\n required,\n };\n}\n","/**\n * Internal FMP API client instance\n * Used internally by the tools, not exported publicly\n */\nimport { FMP } from 'fmp-node-api';\n\n// Create a function to get the FMP client instance (internal use only)\nexport function getFMPClient() {\n return new FMP();\n}\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\nexport const getCompanyProfile = createOpenAITool({\n name: 'getCompanyProfile',\n description: 'Get the company profile for a company',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n }),\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const companyProfile = await fmp.company.getCompanyProfile(symbol);\n return JSON.stringify(companyProfile.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Common input schema for calendar date range\nconst calendarInputSchema = z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\nexport const getEarningsCalendar = createOpenAITool({\n name: 'getEarningsCalendar',\n description: 'Get earnings calendar showing upcoming and recent earnings announcements',\n inputSchema: calendarInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const earningsCalendar = await fmp.calendar.getEarningsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(earningsCalendar.data, null, 2);\n },\n});\n\nexport const getEconomicCalendar = createOpenAITool({\n name: 'getEconomicCalendar',\n description: 'Get economic calendar showing upcoming and recent economic events and indicators',\n inputSchema: calendarInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const economicCalendar = await fmp.calendar.getEconomicsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(economicCalendar.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for treasury rates with date range\nconst treasuryRatesInputSchema = z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\n// Economic indicators enum and schema\nconst economicIndicatorNames = [\n 'GDP',\n 'realGDP',\n 'nominalPotentialGDP',\n 'realGDPPerCapita',\n 'federalFunds',\n 'CPI',\n 'inflationRate',\n 'inflation',\n 'retailSales',\n 'consumerSentiment',\n 'durableGoods',\n 'unemploymentRate',\n 'totalNonfarmPayroll',\n 'initialClaims',\n 'industrialProductionTotalIndex',\n 'newPrivatelyOwnedHousingUnitsStartedTotalUnits',\n 'totalVehicleSales',\n 'retailMoneyFunds',\n 'smoothedUSRecessionProbabilities',\n '3MonthOr90DayRatesAndYieldsCertificatesOfDeposit',\n 'commercialBankInterestRateOnCreditCardPlansAllAccounts',\n '30YearFixedRateMortgageAverage',\n '15YearFixedRateMortgageAverage',\n] as const;\n\nconst economicIndicatorsInputSchema = z.object({\n name: z.enum(economicIndicatorNames).describe('The name of the economic indicator'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\nexport const getTreasuryRates = createOpenAITool({\n name: 'getTreasuryRates',\n description: 'Get treasury rates for different maturities over time',\n inputSchema: treasuryRatesInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const treasuryRates = await fmp.economic.getTreasuryRates({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(treasuryRates.data, null, 2);\n },\n});\n\nexport const getEconomicIndicators = createOpenAITool({\n name: 'getEconomicIndicators',\n description: 'Get economic indicators like GDP, unemployment rate, inflation, etc.',\n inputSchema: economicIndicatorsInputSchema,\n execute: async ({ name, from, to }) => {\n const fmp = getFMPClient();\n const economicIndicators = await fmp.economic.getEconomicIndicators({\n name,\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(economicIndicators.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for ETF holdings with optional date\nconst etfHoldingsInputSchema = z.object({\n symbol: z.string().min(1, 'ETF symbol is required').describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\n date: z\n .string()\n .optional()\n .nullable()\n .describe('Date for holdings in YYYY-MM-DD format (optional)'),\n});\n\n// Input schema for ETF profile\nconst etfProfileInputSchema = z.object({\n symbol: z.string().min(1, 'ETF symbol is required').describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\n});\n\nexport const getETFHoldings = createOpenAITool({\n name: 'getETFHoldings',\n description:\n 'Get ETF holdings for a specific ETF symbol, showing the underlying assets and their weights',\n inputSchema: etfHoldingsInputSchema,\n execute: async ({ symbol, date }) => {\n const fmp = getFMPClient();\n const params: any = { symbol };\n if (date) {\n params.date = date;\n }\n\n const etfHoldings = await fmp.etf.getHoldings(params);\n return JSON.stringify(etfHoldings.data, null, 2);\n },\n});\n\nexport const getETFProfile = createOpenAITool({\n name: 'getETFProfile',\n description: 'Get ETF profile information including fund details, expense ratio, and key metrics',\n inputSchema: etfProfileInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const etfProfile = await fmp.etf.getProfile(symbol);\n return JSON.stringify(etfProfile.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Common input schema for financial statements with symbol and period\nconst financialStatementInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n period: z\n .enum(['annual', 'quarter'])\n .default('annual')\n .describe('The period type (annual or quarter)'),\n});\n\nexport const getBalanceSheet = createOpenAITool({\n name: 'getBalanceSheet',\n description: 'Get balance sheet for a company showing assets, liabilities, and equity',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const balanceSheet = await fmp.financial.getBalanceSheet({ symbol, period });\n return JSON.stringify(balanceSheet.data, null, 2);\n },\n});\n\nexport const getIncomeStatement = createOpenAITool({\n name: 'getIncomeStatement',\n description: 'Get income statement for a company showing revenue, expenses, and profit',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const incomeStatement = await fmp.financial.getIncomeStatement({ symbol, period });\n return JSON.stringify(incomeStatement.data, null, 2);\n },\n});\n\nexport const getCashFlowStatement = createOpenAITool({\n name: 'getCashFlowStatement',\n description:\n 'Get cash flow statement for a company showing operating, investing, and financing cash flows',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const cashFlowStatement = await fmp.financial.getCashFlowStatement({ symbol, period });\n return JSON.stringify(cashFlowStatement.data, null, 2);\n },\n});\n\nexport const getFinancialRatios = createOpenAITool({\n name: 'getFinancialRatios',\n description:\n 'Get financial ratios for a company including profitability, liquidity, and efficiency metrics',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const financialRatios = await fmp.financial.getFinancialRatios({ symbol, period });\n return JSON.stringify(financialRatios.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for insider trading with symbol and optional page\nconst insiderTradingInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n});\n\nexport const getInsiderTrading = createOpenAITool({\n name: 'getInsiderTrading',\n description:\n 'Get insider trading data for a specific stock symbol showing buy/sell transactions by company insiders',\n inputSchema: insiderTradingInputSchema,\n execute: async ({ symbol, page }) => {\n const fmp = getFMPClient();\n const insiderTrading = await fmp.insider.getInsiderTradesBySymbol(symbol, page);\n return JSON.stringify(insiderTrading.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for institutional holders with symbol\nconst institutionalHoldersInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const getInstitutionalHolders = createOpenAITool({\n name: 'getInstitutionalHolders',\n description:\n 'Get institutional holders for a specific stock symbol showing which institutions own shares and their holdings',\n inputSchema: institutionalHoldersInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const institutionalHolders = await fmp.institutional.getInstitutionalHolders({ symbol });\n\n // Return formatted JSON string\n return JSON.stringify(institutionalHolders.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Empty schema for tools that don't require parameters\nconst emptyInputSchema = z.object({});\n\nexport const getMarketPerformance = createOpenAITool({\n name: 'getMarketPerformance',\n description: 'Get overall market performance data including major indices performance',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const marketPerformance = await fmp.market.getMarketPerformance();\n return JSON.stringify(marketPerformance.data, null, 2);\n },\n});\n\nexport const getSectorPerformance = createOpenAITool({\n name: 'getSectorPerformance',\n description: 'Get sector performance data showing how different market sectors are performing',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const sectorPerformance = await fmp.market.getSectorPerformance();\n return JSON.stringify(sectorPerformance.data, null, 2);\n },\n});\n\nexport const getGainers = createOpenAITool({\n name: 'getGainers',\n description: 'Get top gaining stocks showing the best performing stocks of the day',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const gainers = await fmp.market.getGainers();\n return JSON.stringify(gainers.data, null, 2);\n },\n});\n\nexport const getLosers = createOpenAITool({\n name: 'getLosers',\n description: 'Get top losing stocks showing the worst performing stocks of the day',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const losers = await fmp.market.getLosers();\n return JSON.stringify(losers.data, null, 2);\n },\n});\n\nexport const getMostActive = createOpenAITool({\n name: 'getMostActive',\n description: 'Get most active stocks showing stocks with the highest trading volume',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const mostActive = await fmp.market.getMostActive();\n return JSON.stringify(mostActive.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for stock quote with symbol\nconst stockQuoteInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The symbol of the company to get the stock quote for'),\n});\n\nexport const getStockQuote = createOpenAITool({\n name: 'getStockQuote',\n description:\n 'Get the real-time stock quote for a company including price, volume, and market data',\n inputSchema: stockQuoteInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const stockQuote = await fmp.quote.getQuote(symbol);\n return JSON.stringify(stockQuote.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for symbol-based trading data\nconst symbolInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\n// Input schema for name-based trading data\nconst nameInputSchema = z.object({\n name: z.string().min(1, 'Name is required').describe('The name of the senator or representative'),\n});\n\n// Input schema for RSS feed with pagination\nconst rssFeedInputSchema = z.object({\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n});\n\nexport const getSenateTrading = createOpenAITool({\n name: 'getSenateTrading',\n description: 'Get senate trading data for a specific stock symbol showing senator transactions',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const senateTrading = await fmp.senateHouse.getSenateTrading({ symbol });\n return JSON.stringify(senateTrading.data, null, 2);\n },\n});\n\nexport const getHouseTrading = createOpenAITool({\n name: 'getHouseTrading',\n description:\n 'Get house trading data for a specific stock symbol showing representative transactions',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const houseTrading = await fmp.senateHouse.getHouseTrading({ symbol });\n return JSON.stringify(houseTrading.data, null, 2);\n },\n});\n\nexport const getSenateTradingByName = createOpenAITool({\n name: 'getSenateTradingByName',\n description:\n 'Get senate trading data for a specific senator by name showing their trading activity',\n inputSchema: nameInputSchema,\n execute: async ({ name }) => {\n const fmp = getFMPClient();\n const senateTradingByName = await fmp.senateHouse.getSenateTradingByName({ name });\n return JSON.stringify(senateTradingByName.data, null, 2);\n },\n});\n\nexport const getHouseTradingByName = createOpenAITool({\n name: 'getHouseTradingByName',\n description:\n 'Get house trading data for a specific representative by name showing their trading activity',\n inputSchema: nameInputSchema,\n execute: async ({ name }) => {\n const fmp = getFMPClient();\n const houseTradingByName = await fmp.senateHouse.getHouseTradingByName({ name });\n return JSON.stringify(houseTradingByName.data, null, 2);\n },\n});\n\nexport const getSenateTradingRSSFeed = createOpenAITool({\n name: 'getSenateTradingRSSFeed',\n description:\n 'Get senate trading data through RSS feed with pagination showing recent senate transactions',\n inputSchema: rssFeedInputSchema,\n execute: async ({ page }) => {\n const fmp = getFMPClient();\n const senateTradingRSSFeed = await fmp.senateHouse.getSenateTradingRSSFeed({ page });\n return JSON.stringify(senateTradingRSSFeed.data, null, 2);\n },\n});\n\nexport const getHouseTradingRSSFeed = createOpenAITool({\n name: 'getHouseTradingRSSFeed',\n description:\n 'Get house trading data through RSS feed with pagination showing recent house transactions',\n inputSchema: rssFeedInputSchema,\n execute: async ({ page }) => {\n const fmp = getFMPClient();\n const houseTradingRSSFeed = await fmp.senateHouse.getHouseTradingRSSFeed({ page });\n return JSON.stringify(houseTradingRSSFeed.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for symbol-based stock operations\nconst symbolInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const getMarketCap = createOpenAITool({\n name: 'getMarketCap',\n description: 'Get market capitalization for a company showing current market value',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const marketCap = await fmp.stock.getMarketCap(symbol);\n return JSON.stringify(marketCap.data, null, 2);\n },\n});\n\nexport const getStockSplits = createOpenAITool({\n name: 'getStockSplits',\n description: 'Get stock splits history for a company showing all historical stock split events',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const stockSplits = await fmp.stock.getStockSplits(symbol);\n return JSON.stringify(stockSplits.data, null, 2);\n },\n});\n\nexport const getDividendHistory = createOpenAITool({\n name: 'getDividendHistory',\n description: 'Get dividend history for a company showing all historical dividend payments',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const dividendHistory = await fmp.stock.getDividendHistory(symbol);\n return JSON.stringify(dividendHistory.data, null, 2);\n },\n});\n\nexport const stockTools = [getMarketCap, getStockSplits, getDividendHistory];\n","import type { Tool } from '@openai/agents';\nimport { checkOpenAIAgentsVersion } from '@/utils/version-check';\nimport { getCompanyProfile } from './company';\nimport { getEarningsCalendar, getEconomicCalendar } from './calendar';\nimport { getTreasuryRates, getEconomicIndicators } from './economic';\nimport { getETFHoldings, getETFProfile } from './etf';\nimport {\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n} from './financial';\nimport { getInsiderTrading } from './insider';\nimport { getInstitutionalHolders } from './institutional';\nimport {\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n} from './market';\nimport { getStockQuote } from './quote';\nimport {\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n} from './senate-house';\nimport { getMarketCap, getStockSplits, getDividendHistory } from './stock';\n\n// Export individual tools for OpenAI agents\nexport {\n getCompanyProfile,\n getEarningsCalendar,\n getEconomicCalendar,\n getTreasuryRates,\n getEconomicIndicators,\n getETFHoldings,\n getETFProfile,\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n getInsiderTrading,\n getInstitutionalHolders,\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n getStockQuote,\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n getMarketCap,\n getStockSplits,\n getDividendHistory,\n};\n\n// Export tool groups as arrays for OpenAI Agents\nexport const companyTools = [getCompanyProfile] as Tool<unknown>[];\nexport const calendarTools = [getEarningsCalendar, getEconomicCalendar] as Tool<unknown>[];\nexport const economicTools = [getTreasuryRates, getEconomicIndicators] as Tool<unknown>[];\nexport const etfTools = [getETFHoldings, getETFProfile] as Tool<unknown>[];\nexport const financialTools = [\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n] as Tool<unknown>[];\nexport const insiderTools = [getInsiderTrading] as Tool<unknown>[];\nexport const institutionalTools = [getInstitutionalHolders] as Tool<unknown>[];\nexport const marketTools = [\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n] as Tool<unknown>[];\nexport const quoteTools = [getStockQuote] as Tool<unknown>[];\nexport const senateHouseTools = [\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n] as Tool<unknown>[];\nexport const stockTools = [getMarketCap, getStockSplits, getDividendHistory] as Tool<unknown>[];\n\n// Combine all tools into a single array for convenience\nexport const fmpTools: Tool<unknown>[] = [\n getCompanyProfile,\n getEarningsCalendar,\n getEconomicCalendar,\n getTreasuryRates,\n getEconomicIndicators,\n getETFHoldings,\n getETFProfile,\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n getInsiderTrading,\n getInstitutionalHolders,\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n getStockQuote,\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n getMarketCap,\n getStockSplits,\n getDividendHistory,\n];\n\n// Check version compatibility when the module is imported\ncheckOpenAIAgentsVersion();\n"]}
1
+ {"version":3,"sources":["../../../src/utils/version-check.ts","../../../src/utils/logger.ts","../../../src/utils/openai-tool-wrapper.ts","../../../src/client.ts","../../../src/providers/openai/company.ts","../../../src/providers/openai/calendar.ts","../../../src/providers/openai/economic.ts","../../../src/providers/openai/etf.ts","../../../src/providers/openai/financial.ts","../../../src/providers/openai/insider.ts","../../../src/providers/openai/institutional.ts","../../../src/providers/openai/market.ts","../../../src/providers/openai/quote.ts","../../../src/providers/openai/senate-house.ts","../../../src/providers/openai/stock.ts","../../../src/providers/openai/index.ts"],"names":["tool","z","FMP","symbolInputSchema"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Checks if the installed version of @openai/agents is compatible\n * with this package. Throws an error if incompatible.\n */\nexport function checkOpenAIAgentsVersion(): void {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { tool } = require('@openai/agents');\n\n // Test if the tool function accepts the new API structure\n // This is a runtime check that will fail with older versions\n tool({\n name: 'test',\n description: 'test',\n parameters: { type: 'object', properties: {} },\n strict: true,\n execute: async () => 'test',\n });\n\n // If we get here, the version is compatible (silent success)\n } catch (error) {\n // If the tool creation fails, it's likely an incompatible version\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Incompatible @openai/agents version detected. ` +\n `This package requires version ^0.0.17 or higher due to breaking changes in the API. ` +\n `Please upgrade with: npm install @openai/agents@latest\\n\\n` +\n `Error details: ${errorMessage}`,\n );\n }\n}\n\n/**\n * Logs a warning if the version check fails but doesn't throw\n */\nexport function warnOpenAIAgentsVersion(): void {\n try {\n checkOpenAIAgentsVersion();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn('⚠️ Version compatibility warning:', errorMessage);\n }\n}\n","/**\n * Logger utility for tools package\n * Controls logging of API results based on environment variable\n */\n\ninterface LogOptions {\n toolName: string;\n input: unknown;\n result: unknown;\n executionTime?: number;\n}\n\n/**\n * Check if API result logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isApiLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_API_RESULTS === 'true';\n}\n\n/**\n * Check if data-only logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isDataOnlyLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_DATA_ONLY === 'true';\n}\n\n/**\n * Estimate token count for LLM context (JSON-optimized)\n * JSON has many structural characters that count as single tokens\n */\nfunction estimateTokenCount(text: string): number {\n // Try to parse as JSON first for better estimation\n try {\n const parsed = JSON.parse(text);\n return estimateTokenCountForData(parsed);\n } catch {\n // Not JSON, use text-based estimation\n return estimateTokenCountForText(text);\n }\n}\n\n/**\n * Estimate tokens for parsed JSON data\n */\nfunction estimateTokenCountForData(data: unknown): number {\n if (data === null || data === undefined) {\n return 1; // null/undefined is typically 1 token\n }\n\n if (typeof data === 'string') {\n // Strings are typically tokenized by words/symbols\n // Financial data often has short strings like \"AAPL\", \"USD\", etc.\n return Math.ceil(data.length / 3); // More conservative for short strings\n }\n\n if (typeof data === 'number') {\n // Numbers are typically 1-2 tokens depending on size\n return data.toString().length > 10 ? 2 : 1;\n }\n\n if (typeof data === 'boolean') {\n return 1; // true/false are single tokens\n }\n\n if (Array.isArray(data)) {\n // Arrays: count structural tokens + content tokens\n let tokens = 2; // [ and ]\n for (const item of data) {\n tokens += estimateTokenCountForData(item);\n if (data.indexOf(item) < data.length - 1) {\n tokens += 1; // comma separator\n }\n }\n return tokens;\n }\n\n if (typeof data === 'object') {\n // Objects: count structural tokens + key-value pairs\n let tokens = 2; // { and }\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = (data as Record<string, unknown>)[key];\n\n // Key (quoted string)\n tokens += Math.ceil(key.length / 3);\n tokens += 2; // quotes around key\n\n // Colon separator\n tokens += 1;\n\n // Value\n tokens += estimateTokenCountForData(value);\n\n // Comma separator (except for last item)\n if (i < keys.length - 1) {\n tokens += 1;\n }\n }\n return tokens;\n }\n\n return 1; // fallback\n}\n\n/**\n * Estimate tokens for plain text (non-JSON)\n */\nfunction estimateTokenCountForText(text: string): number {\n // For plain text, use a more conservative estimate\n // Consider that financial data often has numbers, symbols, and abbreviations\n const words = text.split(/\\s+/).filter(word => word.length > 0);\n let tokens = 0;\n\n for (const word of words) {\n if (/^\\d+$/.test(word)) {\n // Pure numbers are typically 1-2 tokens\n tokens += word.length > 8 ? 2 : 1;\n } else if (/^[A-Z]+$/.test(word)) {\n // All caps (like stock symbols) are often single tokens\n tokens += 1;\n } else if (/^\\$[\\d,]+\\.?\\d*$/.test(word)) {\n // Currency amounts are typically 2-3 tokens\n tokens += 3;\n } else {\n // Regular words: roughly 3-4 characters per token\n tokens += Math.ceil(word.length / 3.5);\n }\n }\n\n return tokens;\n}\n\n/**\n * Get simple metadata about the result for LLM context\n */\nfunction getResultInfo(result: unknown): string {\n if (result === null || result === undefined) {\n return 'null/undefined';\n }\n\n if (typeof result === 'string') {\n const tokenCount = estimateTokenCount(result);\n try {\n const parsed = JSON.parse(result);\n if (Array.isArray(parsed)) {\n return `JSON string (array of ${parsed.length} items, ~${tokenCount} tokens)`;\n }\n } catch {\n // Not JSON\n }\n return `string (${result.length} chars, ~${tokenCount} tokens)`;\n }\n\n if (Array.isArray(result)) {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `array (${result.length} items, ~${tokenCount} tokens)`;\n }\n\n if (typeof result === 'object') {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `object (~${tokenCount} tokens)`;\n }\n\n return typeof result;\n}\n\n/**\n * Log API tool execution details when enabled\n */\nexport function logApiExecution(options: LogOptions): void {\n if (!isApiLoggingEnabled()) {\n return;\n }\n\n const { toolName, input, result, executionTime } = options;\n\n console.log('\\n' + '='.repeat(80));\n console.log(`🔧 FMP Tool Execution: ${toolName}`);\n console.log('='.repeat(80));\n\n console.log('\\n📥 Input:');\n console.log(JSON.stringify(input, null, 2));\n\n const resultInfo = getResultInfo(result);\n\n console.log(`🔧 ${toolName}: ${resultInfo}`);\n\n if (executionTime !== undefined) {\n console.log(`\\n⏱️ Execution Time: ${executionTime}ms`);\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log data-only information for LLM context (when enabled)\n */\nexport function logDataOnly(options: LogOptions): void {\n if (!isDataOnlyLoggingEnabled()) {\n return;\n }\n\n const { result } = options;\n\n console.log('\\n📤 Result:');\n if (typeof result === 'string') {\n try {\n // Try to parse and pretty-print if it's JSON\n const parsed = JSON.parse(result);\n console.log(JSON.stringify(parsed, null, 2));\n } catch {\n // If not JSON, log as-is\n console.log(result);\n }\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log API tool execution with timing\n */\nexport async function logApiExecutionWithTiming<T>(\n toolName: string,\n input: unknown,\n executeFn: () => Promise<T>,\n): Promise<T> {\n const startTime = Date.now();\n\n try {\n const result = await executeFn();\n const executionTime = Date.now() - startTime;\n\n logApiExecution({\n toolName,\n input,\n result,\n executionTime,\n });\n\n // Also log data-only info if enabled\n logDataOnly({\n toolName,\n input,\n result,\n executionTime,\n });\n\n return result;\n } catch (error) {\n const executionTime = Date.now() - startTime;\n\n // Log error case as well\n if (isApiLoggingEnabled()) {\n console.log('\\n' + '='.repeat(80));\n console.log(`❌ FMP Tool Execution Error: ${toolName}`);\n console.log('='.repeat(80));\n console.log('\\n📥 Input:');\n console.log(JSON.stringify(input, null, 2));\n console.log('\\n❌ Error:');\n console.log(error instanceof Error ? error.message : String(error));\n console.log(`\\n⏱️ Execution Time: ${executionTime}ms`);\n console.log('='.repeat(80) + '\\n');\n }\n\n throw error;\n }\n}\n","import { z } from 'zod';\nimport { tool } from '@openai/agents';\nimport { logApiExecutionWithTiming } from './logger';\n\nexport interface OpenAIToolConfig<T extends z.ZodObject<any>> {\n name: string;\n description: string;\n inputSchema: T;\n execute: (args: z.infer<T>) => Promise<string>;\n}\n\nexport function createOpenAITool<T extends z.ZodObject<any>>(config: OpenAIToolConfig<T>) {\n const { name, description, inputSchema, execute } = config;\n\n // Create a simple JSON schema from the Zod schema\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n Object.entries(inputSchema.shape).forEach(([key, _fieldSchema]) => {\n properties[key] = { type: 'string' };\n required.push(key);\n });\n\n return tool({\n name,\n description,\n parameters: {\n type: 'object',\n properties,\n required,\n additionalProperties: false,\n },\n strict: true,\n execute: async (input: unknown) => {\n try {\n const validatedInput = inputSchema.parse(input);\n return await logApiExecutionWithTiming(name, validatedInput, () => execute(validatedInput));\n } catch (error) {\n if (error instanceof z.ZodError) {\n return `Invalid input: ${error.errors.map(e => e.message).join(', ')}`;\n }\n return `Error executing ${name}: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n });\n}\n","/**\n * Internal FMP API client instance\n * Used internally by the tools, not exported publicly\n */\nimport { FMP } from 'fmp-node-api';\n\n// Create a function to get the FMP client instance (internal use only)\nexport function getFMPClient() {\n return new FMP();\n}\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\nexport const getCompanyProfile = createOpenAITool({\n name: 'getCompanyProfile',\n description: 'Get the company profile for a company',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n }),\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const companyProfile = await fmp.company.getCompanyProfile(symbol);\n return JSON.stringify(companyProfile.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Common input schema for calendar date range\nconst calendarInputSchema = z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\nexport const getEarningsCalendar = createOpenAITool({\n name: 'getEarningsCalendar',\n description: 'Get earnings calendar showing upcoming and recent earnings announcements',\n inputSchema: calendarInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const earningsCalendar = await fmp.calendar.getEarningsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(earningsCalendar.data, null, 2);\n },\n});\n\nexport const getEconomicCalendar = createOpenAITool({\n name: 'getEconomicCalendar',\n description: 'Get economic calendar showing upcoming and recent economic events and indicators',\n inputSchema: calendarInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const economicCalendar = await fmp.calendar.getEconomicsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(economicCalendar.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for treasury rates with date range\nconst treasuryRatesInputSchema = z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\n// Economic indicators enum and schema\nconst economicIndicatorNames = [\n 'GDP',\n 'realGDP',\n 'nominalPotentialGDP',\n 'realGDPPerCapita',\n 'federalFunds',\n 'CPI',\n 'inflationRate',\n 'inflation',\n 'retailSales',\n 'consumerSentiment',\n 'durableGoods',\n 'unemploymentRate',\n 'totalNonfarmPayroll',\n 'initialClaims',\n 'industrialProductionTotalIndex',\n 'newPrivatelyOwnedHousingUnitsStartedTotalUnits',\n 'totalVehicleSales',\n 'retailMoneyFunds',\n 'smoothedUSRecessionProbabilities',\n '3MonthOr90DayRatesAndYieldsCertificatesOfDeposit',\n 'commercialBankInterestRateOnCreditCardPlansAllAccounts',\n '30YearFixedRateMortgageAverage',\n '15YearFixedRateMortgageAverage',\n] as const;\n\nconst economicIndicatorsInputSchema = z.object({\n name: z.enum(economicIndicatorNames).describe('The name of the economic indicator'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\nexport const getTreasuryRates = createOpenAITool({\n name: 'getTreasuryRates',\n description: 'Get treasury rates for different maturities over time',\n inputSchema: treasuryRatesInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const treasuryRates = await fmp.economic.getTreasuryRates({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(treasuryRates.data, null, 2);\n },\n});\n\nexport const getEconomicIndicators = createOpenAITool({\n name: 'getEconomicIndicators',\n description: 'Get economic indicators like GDP, unemployment rate, inflation, etc.',\n inputSchema: economicIndicatorsInputSchema,\n execute: async ({ name, from, to }) => {\n const fmp = getFMPClient();\n const economicIndicators = await fmp.economic.getEconomicIndicators({\n name,\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(economicIndicators.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for ETF holdings with optional date\nconst etfHoldingsInputSchema = z.object({\n symbol: z.string().min(1, 'ETF symbol is required').describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\n date: z\n .string()\n .optional()\n .nullable()\n .describe('Date for holdings in YYYY-MM-DD format (optional)'),\n});\n\n// Input schema for ETF profile\nconst etfProfileInputSchema = z.object({\n symbol: z.string().min(1, 'ETF symbol is required').describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\n});\n\nexport const getETFHoldings = createOpenAITool({\n name: 'getETFHoldings',\n description:\n 'Get ETF holdings for a specific ETF symbol, showing the underlying assets and their weights',\n inputSchema: etfHoldingsInputSchema,\n execute: async ({ symbol, date }) => {\n const fmp = getFMPClient();\n const params: any = { symbol };\n if (date) {\n params.date = date;\n }\n\n const etfHoldings = await fmp.etf.getHoldings(params);\n return JSON.stringify(etfHoldings.data, null, 2);\n },\n});\n\nexport const getETFProfile = createOpenAITool({\n name: 'getETFProfile',\n description: 'Get ETF profile information including fund details, expense ratio, and key metrics',\n inputSchema: etfProfileInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const etfProfile = await fmp.etf.getProfile(symbol);\n return JSON.stringify(etfProfile.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Common input schema for financial statements with symbol and period\nconst financialStatementInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n period: z\n .enum(['annual', 'quarter'])\n .default('annual')\n .describe('The period type (annual or quarter)'),\n});\n\nexport const getBalanceSheet = createOpenAITool({\n name: 'getBalanceSheet',\n description: 'Get balance sheet for a company showing assets, liabilities, and equity',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const balanceSheet = await fmp.financial.getBalanceSheet({ symbol, period });\n return JSON.stringify(balanceSheet.data, null, 2);\n },\n});\n\nexport const getIncomeStatement = createOpenAITool({\n name: 'getIncomeStatement',\n description: 'Get income statement for a company showing revenue, expenses, and profit',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const incomeStatement = await fmp.financial.getIncomeStatement({ symbol, period });\n return JSON.stringify(incomeStatement.data, null, 2);\n },\n});\n\nexport const getCashFlowStatement = createOpenAITool({\n name: 'getCashFlowStatement',\n description:\n 'Get cash flow statement for a company showing operating, investing, and financing cash flows',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const cashFlowStatement = await fmp.financial.getCashFlowStatement({ symbol, period });\n return JSON.stringify(cashFlowStatement.data, null, 2);\n },\n});\n\nexport const getFinancialRatios = createOpenAITool({\n name: 'getFinancialRatios',\n description:\n 'Get financial ratios for a company including profitability, liquidity, and efficiency metrics',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const financialRatios = await fmp.financial.getFinancialRatios({ symbol, period });\n return JSON.stringify(financialRatios.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for insider trading with symbol and optional page\nconst insiderTradingInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n});\n\nexport const getInsiderTrading = createOpenAITool({\n name: 'getInsiderTrading',\n description:\n 'Get insider trading data for a specific stock symbol showing buy/sell transactions by company insiders',\n inputSchema: insiderTradingInputSchema,\n execute: async ({ symbol, page }) => {\n const fmp = getFMPClient();\n const insiderTrading = await fmp.insider.getInsiderTradesBySymbol(symbol, page);\n return JSON.stringify(insiderTrading.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for institutional holders with symbol\nconst institutionalHoldersInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const getInstitutionalHolders = createOpenAITool({\n name: 'getInstitutionalHolders',\n description:\n 'Get institutional holders for a specific stock symbol showing which institutions own shares and their holdings',\n inputSchema: institutionalHoldersInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const institutionalHolders = await fmp.institutional.getInstitutionalHolders({ symbol });\n\n // Return formatted JSON string\n return JSON.stringify(institutionalHolders.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Empty schema for tools that don't require parameters\nconst emptyInputSchema = z.object({});\n\nexport const getMarketPerformance = createOpenAITool({\n name: 'getMarketPerformance',\n description: 'Get overall market performance data including major indices performance',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const marketPerformance = await fmp.market.getMarketPerformance();\n return JSON.stringify(marketPerformance.data, null, 2);\n },\n});\n\nexport const getSectorPerformance = createOpenAITool({\n name: 'getSectorPerformance',\n description: 'Get sector performance data showing how different market sectors are performing',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const sectorPerformance = await fmp.market.getSectorPerformance();\n return JSON.stringify(sectorPerformance.data, null, 2);\n },\n});\n\nexport const getGainers = createOpenAITool({\n name: 'getGainers',\n description: 'Get top gaining stocks showing the best performing stocks of the day',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const gainers = await fmp.market.getGainers();\n return JSON.stringify(gainers.data, null, 2);\n },\n});\n\nexport const getLosers = createOpenAITool({\n name: 'getLosers',\n description: 'Get top losing stocks showing the worst performing stocks of the day',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const losers = await fmp.market.getLosers();\n return JSON.stringify(losers.data, null, 2);\n },\n});\n\nexport const getMostActive = createOpenAITool({\n name: 'getMostActive',\n description: 'Get most active stocks showing stocks with the highest trading volume',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const mostActive = await fmp.market.getMostActive();\n return JSON.stringify(mostActive.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for stock quote with symbol\nconst stockQuoteInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The symbol of the company to get the stock quote for'),\n});\n\nexport const getStockQuote = createOpenAITool({\n name: 'getStockQuote',\n description:\n 'Get the real-time stock quote for a company including price, volume, and market data',\n inputSchema: stockQuoteInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const stockQuote = await fmp.quote.getQuote(symbol);\n return JSON.stringify(stockQuote.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for symbol-based trading data\nconst symbolInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\n// Input schema for name-based trading data\nconst nameInputSchema = z.object({\n name: z.string().min(1, 'Name is required').describe('The name of the senator or representative'),\n});\n\n// Input schema for RSS feed with pagination\nconst rssFeedInputSchema = z.object({\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n});\n\nexport const getSenateTrading = createOpenAITool({\n name: 'getSenateTrading',\n description: 'Get senate trading data for a specific stock symbol showing senator transactions',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const senateTrading = await fmp.senateHouse.getSenateTrading({ symbol });\n return JSON.stringify(senateTrading.data, null, 2);\n },\n});\n\nexport const getHouseTrading = createOpenAITool({\n name: 'getHouseTrading',\n description:\n 'Get house trading data for a specific stock symbol showing representative transactions',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const houseTrading = await fmp.senateHouse.getHouseTrading({ symbol });\n return JSON.stringify(houseTrading.data, null, 2);\n },\n});\n\nexport const getSenateTradingByName = createOpenAITool({\n name: 'getSenateTradingByName',\n description:\n 'Get senate trading data for a specific senator by name showing their trading activity',\n inputSchema: nameInputSchema,\n execute: async ({ name }) => {\n const fmp = getFMPClient();\n const senateTradingByName = await fmp.senateHouse.getSenateTradingByName({ name });\n return JSON.stringify(senateTradingByName.data, null, 2);\n },\n});\n\nexport const getHouseTradingByName = createOpenAITool({\n name: 'getHouseTradingByName',\n description:\n 'Get house trading data for a specific representative by name showing their trading activity',\n inputSchema: nameInputSchema,\n execute: async ({ name }) => {\n const fmp = getFMPClient();\n const houseTradingByName = await fmp.senateHouse.getHouseTradingByName({ name });\n return JSON.stringify(houseTradingByName.data, null, 2);\n },\n});\n\nexport const getSenateTradingRSSFeed = createOpenAITool({\n name: 'getSenateTradingRSSFeed',\n description:\n 'Get senate trading data through RSS feed with pagination showing recent senate transactions',\n inputSchema: rssFeedInputSchema,\n execute: async ({ page }) => {\n const fmp = getFMPClient();\n const senateTradingRSSFeed = await fmp.senateHouse.getSenateTradingRSSFeed({ page });\n return JSON.stringify(senateTradingRSSFeed.data, null, 2);\n },\n});\n\nexport const getHouseTradingRSSFeed = createOpenAITool({\n name: 'getHouseTradingRSSFeed',\n description:\n 'Get house trading data through RSS feed with pagination showing recent house transactions',\n inputSchema: rssFeedInputSchema,\n execute: async ({ page }) => {\n const fmp = getFMPClient();\n const houseTradingRSSFeed = await fmp.senateHouse.getHouseTradingRSSFeed({ page });\n return JSON.stringify(houseTradingRSSFeed.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for symbol-based stock operations\nconst symbolInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const getMarketCap = createOpenAITool({\n name: 'getMarketCap',\n description: 'Get market capitalization for a company showing current market value',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const marketCap = await fmp.stock.getMarketCap(symbol);\n return JSON.stringify(marketCap.data, null, 2);\n },\n});\n\nexport const getStockSplits = createOpenAITool({\n name: 'getStockSplits',\n description: 'Get stock splits history for a company showing all historical stock split events',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const stockSplits = await fmp.stock.getStockSplits(symbol);\n return JSON.stringify(stockSplits.data, null, 2);\n },\n});\n\nexport const getDividendHistory = createOpenAITool({\n name: 'getDividendHistory',\n description: 'Get dividend history for a company showing all historical dividend payments',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const dividendHistory = await fmp.stock.getDividendHistory(symbol);\n return JSON.stringify(dividendHistory.data, null, 2);\n },\n});\n\nexport const stockTools = [getMarketCap, getStockSplits, getDividendHistory];\n","import type { Tool } from '@openai/agents';\nimport { checkOpenAIAgentsVersion } from '@/utils/version-check';\nimport { getCompanyProfile } from './company';\nimport { getEarningsCalendar, getEconomicCalendar } from './calendar';\nimport { getTreasuryRates, getEconomicIndicators } from './economic';\nimport { getETFHoldings, getETFProfile } from './etf';\nimport {\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n} from './financial';\nimport { getInsiderTrading } from './insider';\nimport { getInstitutionalHolders } from './institutional';\nimport {\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n} from './market';\nimport { getStockQuote } from './quote';\nimport {\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n} from './senate-house';\nimport { getMarketCap, getStockSplits, getDividendHistory } from './stock';\n\n// Export individual tools for OpenAI agents\nexport {\n getCompanyProfile,\n getEarningsCalendar,\n getEconomicCalendar,\n getTreasuryRates,\n getEconomicIndicators,\n getETFHoldings,\n getETFProfile,\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n getInsiderTrading,\n getInstitutionalHolders,\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n getStockQuote,\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n getMarketCap,\n getStockSplits,\n getDividendHistory,\n};\n\n// Export tool groups as arrays for OpenAI Agents\nexport const companyTools = [getCompanyProfile] as Tool<unknown>[];\nexport const calendarTools = [getEarningsCalendar, getEconomicCalendar] as Tool<unknown>[];\nexport const economicTools = [getTreasuryRates, getEconomicIndicators] as Tool<unknown>[];\nexport const etfTools = [getETFHoldings, getETFProfile] as Tool<unknown>[];\nexport const financialTools = [\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n] as Tool<unknown>[];\nexport const insiderTools = [getInsiderTrading] as Tool<unknown>[];\nexport const institutionalTools = [getInstitutionalHolders] as Tool<unknown>[];\nexport const marketTools = [\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n] as Tool<unknown>[];\nexport const quoteTools = [getStockQuote] as Tool<unknown>[];\nexport const senateHouseTools = [\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n] as Tool<unknown>[];\nexport const stockTools = [getMarketCap, getStockSplits, getDividendHistory] as Tool<unknown>[];\n\n// Combine all tools into a single array for convenience\nexport const fmpTools: Tool<unknown>[] = [\n getCompanyProfile,\n getEarningsCalendar,\n getEconomicCalendar,\n getTreasuryRates,\n getEconomicIndicators,\n getETFHoldings,\n getETFProfile,\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n getInsiderTrading,\n getInstitutionalHolders,\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n getStockQuote,\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n getMarketCap,\n getStockSplits,\n getDividendHistory,\n];\n\n// Check version compatibility when the module is imported\ncheckOpenAIAgentsVersion();\n"]}
@@ -204,11 +204,21 @@ async function logApiExecutionWithTiming(toolName, input, executeFn) {
204
204
  // src/utils/openai-tool-wrapper.ts
205
205
  function createOpenAITool(config) {
206
206
  const { name, description, inputSchema, execute } = config;
207
- const jsonSchema = zodToJsonSchema(inputSchema);
207
+ const properties = {};
208
+ const required = [];
209
+ Object.entries(inputSchema.shape).forEach(([key, _fieldSchema]) => {
210
+ properties[key] = { type: "string" };
211
+ required.push(key);
212
+ });
208
213
  return tool({
209
214
  name,
210
215
  description,
211
- parameters: jsonSchema,
216
+ parameters: {
217
+ type: "object",
218
+ properties,
219
+ required,
220
+ additionalProperties: false
221
+ },
212
222
  strict: true,
213
223
  execute: async (input) => {
214
224
  try {
@@ -223,78 +233,6 @@ function createOpenAITool(config) {
223
233
  }
224
234
  });
225
235
  }
226
- function zodToJsonSchema(schema) {
227
- const shape = schema.shape;
228
- const properties = {};
229
- const required = [];
230
- Object.entries(shape).forEach(([key, fieldSchema]) => {
231
- let isRequired = true;
232
- let actualSchema = fieldSchema;
233
- let fieldDescription = "";
234
- if (fieldSchema && typeof fieldSchema === "object" && "description" in fieldSchema) {
235
- const desc = fieldSchema.description;
236
- if (typeof desc === "string") {
237
- fieldDescription = desc;
238
- }
239
- }
240
- if (fieldSchema instanceof z.ZodOptional) {
241
- isRequired = false;
242
- actualSchema = fieldSchema.unwrap();
243
- if (!fieldDescription && actualSchema.description) {
244
- fieldDescription = actualSchema.description;
245
- }
246
- }
247
- if (fieldSchema instanceof z.ZodDefault) {
248
- isRequired = false;
249
- actualSchema = fieldSchema.removeDefault();
250
- if (!fieldDescription && actualSchema.description) {
251
- fieldDescription = actualSchema.description;
252
- }
253
- }
254
- if (actualSchema instanceof z.ZodString) {
255
- properties[key] = {
256
- type: "string",
257
- description: fieldDescription || `${key} parameter`
258
- };
259
- } else if (actualSchema instanceof z.ZodEnum) {
260
- properties[key] = {
261
- type: "string",
262
- enum: actualSchema._def.values,
263
- description: fieldDescription || `${key} parameter`
264
- };
265
- } else if (actualSchema instanceof z.ZodNumber) {
266
- properties[key] = {
267
- type: "number",
268
- description: fieldDescription || `${key} parameter`
269
- };
270
- } else if (actualSchema instanceof z.ZodBoolean) {
271
- properties[key] = {
272
- type: "boolean",
273
- description: fieldDescription || `${key} parameter`
274
- };
275
- } else if (actualSchema instanceof z.ZodArray) {
276
- properties[key] = {
277
- type: "array",
278
- items: { type: "string" },
279
- // Default to string array, can be enhanced
280
- description: fieldDescription || `${key} parameter`
281
- };
282
- } else {
283
- properties[key] = {
284
- type: "string",
285
- description: fieldDescription || `${key} parameter`
286
- };
287
- }
288
- if (isRequired) {
289
- required.push(key);
290
- }
291
- });
292
- return {
293
- type: "object",
294
- properties,
295
- required
296
- };
297
- }
298
236
  function getFMPClient() {
299
237
  return new FMP();
300
238
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/version-check.ts","../../../src/utils/logger.ts","../../../src/utils/openai-tool-wrapper.ts","../../../src/client.ts","../../../src/providers/openai/company.ts","../../../src/providers/openai/calendar.ts","../../../src/providers/openai/economic.ts","../../../src/providers/openai/etf.ts","../../../src/providers/openai/financial.ts","../../../src/providers/openai/insider.ts","../../../src/providers/openai/institutional.ts","../../../src/providers/openai/market.ts","../../../src/providers/openai/quote.ts","../../../src/providers/openai/senate-house.ts","../../../src/providers/openai/stock.ts","../../../src/providers/openai/index.ts"],"names":["tool","z","symbolInputSchema"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Checks if the installed version of @openai/agents is compatible\n * with this package. Throws an error if incompatible.\n */\nexport function checkOpenAIAgentsVersion(): void {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { tool } = require('@openai/agents');\n\n // Test if the tool function accepts the new API structure\n // This is a runtime check that will fail with older versions\n tool({\n name: 'test',\n description: 'test',\n parameters: { type: 'object', properties: {} },\n strict: true,\n execute: async () => 'test',\n });\n\n // If we get here, the version is compatible (silent success)\n } catch (error) {\n // If the tool creation fails, it's likely an incompatible version\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Incompatible @openai/agents version detected. ` +\n `This package requires version ^0.0.17 or higher due to breaking changes in the API. ` +\n `Please upgrade with: npm install @openai/agents@latest\\n\\n` +\n `Error details: ${errorMessage}`,\n );\n }\n}\n\n/**\n * Logs a warning if the version check fails but doesn't throw\n */\nexport function warnOpenAIAgentsVersion(): void {\n try {\n checkOpenAIAgentsVersion();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn('⚠️ Version compatibility warning:', errorMessage);\n }\n}\n","/**\n * Logger utility for tools package\n * Controls logging of API results based on environment variable\n */\n\ninterface LogOptions {\n toolName: string;\n input: unknown;\n result: unknown;\n executionTime?: number;\n}\n\n/**\n * Check if API result logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isApiLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_API_RESULTS === 'true';\n}\n\n/**\n * Check if data-only logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isDataOnlyLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_DATA_ONLY === 'true';\n}\n\n/**\n * Estimate token count for LLM context (JSON-optimized)\n * JSON has many structural characters that count as single tokens\n */\nfunction estimateTokenCount(text: string): number {\n // Try to parse as JSON first for better estimation\n try {\n const parsed = JSON.parse(text);\n return estimateTokenCountForData(parsed);\n } catch {\n // Not JSON, use text-based estimation\n return estimateTokenCountForText(text);\n }\n}\n\n/**\n * Estimate tokens for parsed JSON data\n */\nfunction estimateTokenCountForData(data: unknown): number {\n if (data === null || data === undefined) {\n return 1; // null/undefined is typically 1 token\n }\n\n if (typeof data === 'string') {\n // Strings are typically tokenized by words/symbols\n // Financial data often has short strings like \"AAPL\", \"USD\", etc.\n return Math.ceil(data.length / 3); // More conservative for short strings\n }\n\n if (typeof data === 'number') {\n // Numbers are typically 1-2 tokens depending on size\n return data.toString().length > 10 ? 2 : 1;\n }\n\n if (typeof data === 'boolean') {\n return 1; // true/false are single tokens\n }\n\n if (Array.isArray(data)) {\n // Arrays: count structural tokens + content tokens\n let tokens = 2; // [ and ]\n for (const item of data) {\n tokens += estimateTokenCountForData(item);\n if (data.indexOf(item) < data.length - 1) {\n tokens += 1; // comma separator\n }\n }\n return tokens;\n }\n\n if (typeof data === 'object') {\n // Objects: count structural tokens + key-value pairs\n let tokens = 2; // { and }\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = (data as Record<string, unknown>)[key];\n\n // Key (quoted string)\n tokens += Math.ceil(key.length / 3);\n tokens += 2; // quotes around key\n\n // Colon separator\n tokens += 1;\n\n // Value\n tokens += estimateTokenCountForData(value);\n\n // Comma separator (except for last item)\n if (i < keys.length - 1) {\n tokens += 1;\n }\n }\n return tokens;\n }\n\n return 1; // fallback\n}\n\n/**\n * Estimate tokens for plain text (non-JSON)\n */\nfunction estimateTokenCountForText(text: string): number {\n // For plain text, use a more conservative estimate\n // Consider that financial data often has numbers, symbols, and abbreviations\n const words = text.split(/\\s+/).filter(word => word.length > 0);\n let tokens = 0;\n\n for (const word of words) {\n if (/^\\d+$/.test(word)) {\n // Pure numbers are typically 1-2 tokens\n tokens += word.length > 8 ? 2 : 1;\n } else if (/^[A-Z]+$/.test(word)) {\n // All caps (like stock symbols) are often single tokens\n tokens += 1;\n } else if (/^\\$[\\d,]+\\.?\\d*$/.test(word)) {\n // Currency amounts are typically 2-3 tokens\n tokens += 3;\n } else {\n // Regular words: roughly 3-4 characters per token\n tokens += Math.ceil(word.length / 3.5);\n }\n }\n\n return tokens;\n}\n\n/**\n * Get simple metadata about the result for LLM context\n */\nfunction getResultInfo(result: unknown): string {\n if (result === null || result === undefined) {\n return 'null/undefined';\n }\n\n if (typeof result === 'string') {\n const tokenCount = estimateTokenCount(result);\n try {\n const parsed = JSON.parse(result);\n if (Array.isArray(parsed)) {\n return `JSON string (array of ${parsed.length} items, ~${tokenCount} tokens)`;\n }\n } catch {\n // Not JSON\n }\n return `string (${result.length} chars, ~${tokenCount} tokens)`;\n }\n\n if (Array.isArray(result)) {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `array (${result.length} items, ~${tokenCount} tokens)`;\n }\n\n if (typeof result === 'object') {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `object (~${tokenCount} tokens)`;\n }\n\n return typeof result;\n}\n\n/**\n * Log API tool execution details when enabled\n */\nexport function logApiExecution(options: LogOptions): void {\n if (!isApiLoggingEnabled()) {\n return;\n }\n\n const { toolName, input, result, executionTime } = options;\n\n console.log('\\n' + '='.repeat(80));\n console.log(`🔧 FMP Tool Execution: ${toolName}`);\n console.log('='.repeat(80));\n\n console.log('\\n📥 Input:');\n console.log(JSON.stringify(input, null, 2));\n\n const resultInfo = getResultInfo(result);\n\n console.log(`🔧 ${toolName}: ${resultInfo}`);\n\n if (executionTime !== undefined) {\n console.log(`\\n⏱️ Execution Time: ${executionTime}ms`);\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log data-only information for LLM context (when enabled)\n */\nexport function logDataOnly(options: LogOptions): void {\n if (!isDataOnlyLoggingEnabled()) {\n return;\n }\n\n const { result } = options;\n\n console.log('\\n📤 Result:');\n if (typeof result === 'string') {\n try {\n // Try to parse and pretty-print if it's JSON\n const parsed = JSON.parse(result);\n console.log(JSON.stringify(parsed, null, 2));\n } catch {\n // If not JSON, log as-is\n console.log(result);\n }\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log API tool execution with timing\n */\nexport async function logApiExecutionWithTiming<T>(\n toolName: string,\n input: unknown,\n executeFn: () => Promise<T>,\n): Promise<T> {\n const startTime = Date.now();\n\n try {\n const result = await executeFn();\n const executionTime = Date.now() - startTime;\n\n logApiExecution({\n toolName,\n input,\n result,\n executionTime,\n });\n\n // Also log data-only info if enabled\n logDataOnly({\n toolName,\n input,\n result,\n executionTime,\n });\n\n return result;\n } catch (error) {\n const executionTime = Date.now() - startTime;\n\n // Log error case as well\n if (isApiLoggingEnabled()) {\n console.log('\\n' + '='.repeat(80));\n console.log(`❌ FMP Tool Execution Error: ${toolName}`);\n console.log('='.repeat(80));\n console.log('\\n📥 Input:');\n console.log(JSON.stringify(input, null, 2));\n console.log('\\n❌ Error:');\n console.log(error instanceof Error ? error.message : String(error));\n console.log(`\\n⏱️ Execution Time: ${executionTime}ms`);\n console.log('='.repeat(80) + '\\n');\n }\n\n throw error;\n }\n}\n","import { z } from 'zod';\nimport { tool } from '@openai/agents';\nimport { logApiExecutionWithTiming } from './logger';\n\nexport interface OpenAIToolConfig<T extends z.ZodObject<any>> {\n name: string;\n description: string;\n inputSchema: T;\n execute: (args: z.infer<T>) => Promise<string>;\n}\n\nexport function createOpenAITool<T extends z.ZodObject<any>>(config: OpenAIToolConfig<T>) {\n const { name, description, inputSchema, execute } = config;\n\n // Convert Zod schema to JSON Schema\n const jsonSchema = zodToJsonSchema(inputSchema);\n\n return tool({\n name,\n description,\n parameters: jsonSchema,\n strict: true,\n execute: async (input: unknown) => {\n try {\n const validatedInput = inputSchema.parse(input);\n return await logApiExecutionWithTiming(name, validatedInput, () => execute(validatedInput));\n } catch (error) {\n if (error instanceof z.ZodError) {\n return `Invalid input: ${error.errors.map(e => e.message).join(', ')}`;\n }\n return `Error executing ${name}: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n });\n}\n\n// Helper function to convert Zod schema to JSON Schema\nfunction zodToJsonSchema(schema: z.ZodObject<any>): any {\n const shape = schema.shape;\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n Object.entries(shape).forEach(([key, fieldSchema]) => {\n let isRequired = true;\n let actualSchema: z.ZodType = fieldSchema as z.ZodType;\n let fieldDescription = '';\n\n // Extract description from the original schema\n if (fieldSchema && typeof fieldSchema === 'object' && 'description' in fieldSchema) {\n const desc = (fieldSchema as any).description;\n if (typeof desc === 'string') {\n fieldDescription = desc;\n }\n }\n\n // Handle optional fields\n if (fieldSchema instanceof z.ZodOptional) {\n isRequired = false;\n actualSchema = fieldSchema.unwrap();\n // If no description was found on the optional wrapper, try the unwrapped schema\n if (!fieldDescription && actualSchema.description) {\n fieldDescription = actualSchema.description;\n }\n }\n\n // Handle default values (they make fields optional)\n if (fieldSchema instanceof z.ZodDefault) {\n isRequired = false;\n actualSchema = fieldSchema.removeDefault();\n // If no description was found on the default wrapper, try the unwrapped schema\n if (!fieldDescription && actualSchema.description) {\n fieldDescription = actualSchema.description;\n }\n }\n\n // Map Zod types to JSON Schema types\n if (actualSchema instanceof z.ZodString) {\n properties[key] = {\n type: 'string',\n description: fieldDescription || `${key} parameter`,\n };\n } else if (actualSchema instanceof z.ZodEnum) {\n properties[key] = {\n type: 'string',\n enum: actualSchema._def.values,\n description: fieldDescription || `${key} parameter`,\n };\n } else if (actualSchema instanceof z.ZodNumber) {\n properties[key] = {\n type: 'number',\n description: fieldDescription || `${key} parameter`,\n };\n } else if (actualSchema instanceof z.ZodBoolean) {\n properties[key] = {\n type: 'boolean',\n description: fieldDescription || `${key} parameter`,\n };\n } else if (actualSchema instanceof z.ZodArray) {\n properties[key] = {\n type: 'array',\n items: { type: 'string' }, // Default to string array, can be enhanced\n description: fieldDescription || `${key} parameter`,\n };\n } else {\n // Fallback for unknown types\n properties[key] = {\n type: 'string',\n description: fieldDescription || `${key} parameter`,\n };\n }\n\n if (isRequired) {\n required.push(key);\n }\n });\n\n return {\n type: 'object',\n properties,\n required,\n };\n}\n","/**\n * Internal FMP API client instance\n * Used internally by the tools, not exported publicly\n */\nimport { FMP } from 'fmp-node-api';\n\n// Create a function to get the FMP client instance (internal use only)\nexport function getFMPClient() {\n return new FMP();\n}\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\nexport const getCompanyProfile = createOpenAITool({\n name: 'getCompanyProfile',\n description: 'Get the company profile for a company',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n }),\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const companyProfile = await fmp.company.getCompanyProfile(symbol);\n return JSON.stringify(companyProfile.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Common input schema for calendar date range\nconst calendarInputSchema = z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\nexport const getEarningsCalendar = createOpenAITool({\n name: 'getEarningsCalendar',\n description: 'Get earnings calendar showing upcoming and recent earnings announcements',\n inputSchema: calendarInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const earningsCalendar = await fmp.calendar.getEarningsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(earningsCalendar.data, null, 2);\n },\n});\n\nexport const getEconomicCalendar = createOpenAITool({\n name: 'getEconomicCalendar',\n description: 'Get economic calendar showing upcoming and recent economic events and indicators',\n inputSchema: calendarInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const economicCalendar = await fmp.calendar.getEconomicsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(economicCalendar.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for treasury rates with date range\nconst treasuryRatesInputSchema = z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\n// Economic indicators enum and schema\nconst economicIndicatorNames = [\n 'GDP',\n 'realGDP',\n 'nominalPotentialGDP',\n 'realGDPPerCapita',\n 'federalFunds',\n 'CPI',\n 'inflationRate',\n 'inflation',\n 'retailSales',\n 'consumerSentiment',\n 'durableGoods',\n 'unemploymentRate',\n 'totalNonfarmPayroll',\n 'initialClaims',\n 'industrialProductionTotalIndex',\n 'newPrivatelyOwnedHousingUnitsStartedTotalUnits',\n 'totalVehicleSales',\n 'retailMoneyFunds',\n 'smoothedUSRecessionProbabilities',\n '3MonthOr90DayRatesAndYieldsCertificatesOfDeposit',\n 'commercialBankInterestRateOnCreditCardPlansAllAccounts',\n '30YearFixedRateMortgageAverage',\n '15YearFixedRateMortgageAverage',\n] as const;\n\nconst economicIndicatorsInputSchema = z.object({\n name: z.enum(economicIndicatorNames).describe('The name of the economic indicator'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\nexport const getTreasuryRates = createOpenAITool({\n name: 'getTreasuryRates',\n description: 'Get treasury rates for different maturities over time',\n inputSchema: treasuryRatesInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const treasuryRates = await fmp.economic.getTreasuryRates({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(treasuryRates.data, null, 2);\n },\n});\n\nexport const getEconomicIndicators = createOpenAITool({\n name: 'getEconomicIndicators',\n description: 'Get economic indicators like GDP, unemployment rate, inflation, etc.',\n inputSchema: economicIndicatorsInputSchema,\n execute: async ({ name, from, to }) => {\n const fmp = getFMPClient();\n const economicIndicators = await fmp.economic.getEconomicIndicators({\n name,\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(economicIndicators.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for ETF holdings with optional date\nconst etfHoldingsInputSchema = z.object({\n symbol: z.string().min(1, 'ETF symbol is required').describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\n date: z\n .string()\n .optional()\n .nullable()\n .describe('Date for holdings in YYYY-MM-DD format (optional)'),\n});\n\n// Input schema for ETF profile\nconst etfProfileInputSchema = z.object({\n symbol: z.string().min(1, 'ETF symbol is required').describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\n});\n\nexport const getETFHoldings = createOpenAITool({\n name: 'getETFHoldings',\n description:\n 'Get ETF holdings for a specific ETF symbol, showing the underlying assets and their weights',\n inputSchema: etfHoldingsInputSchema,\n execute: async ({ symbol, date }) => {\n const fmp = getFMPClient();\n const params: any = { symbol };\n if (date) {\n params.date = date;\n }\n\n const etfHoldings = await fmp.etf.getHoldings(params);\n return JSON.stringify(etfHoldings.data, null, 2);\n },\n});\n\nexport const getETFProfile = createOpenAITool({\n name: 'getETFProfile',\n description: 'Get ETF profile information including fund details, expense ratio, and key metrics',\n inputSchema: etfProfileInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const etfProfile = await fmp.etf.getProfile(symbol);\n return JSON.stringify(etfProfile.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Common input schema for financial statements with symbol and period\nconst financialStatementInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n period: z\n .enum(['annual', 'quarter'])\n .default('annual')\n .describe('The period type (annual or quarter)'),\n});\n\nexport const getBalanceSheet = createOpenAITool({\n name: 'getBalanceSheet',\n description: 'Get balance sheet for a company showing assets, liabilities, and equity',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const balanceSheet = await fmp.financial.getBalanceSheet({ symbol, period });\n return JSON.stringify(balanceSheet.data, null, 2);\n },\n});\n\nexport const getIncomeStatement = createOpenAITool({\n name: 'getIncomeStatement',\n description: 'Get income statement for a company showing revenue, expenses, and profit',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const incomeStatement = await fmp.financial.getIncomeStatement({ symbol, period });\n return JSON.stringify(incomeStatement.data, null, 2);\n },\n});\n\nexport const getCashFlowStatement = createOpenAITool({\n name: 'getCashFlowStatement',\n description:\n 'Get cash flow statement for a company showing operating, investing, and financing cash flows',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const cashFlowStatement = await fmp.financial.getCashFlowStatement({ symbol, period });\n return JSON.stringify(cashFlowStatement.data, null, 2);\n },\n});\n\nexport const getFinancialRatios = createOpenAITool({\n name: 'getFinancialRatios',\n description:\n 'Get financial ratios for a company including profitability, liquidity, and efficiency metrics',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const financialRatios = await fmp.financial.getFinancialRatios({ symbol, period });\n return JSON.stringify(financialRatios.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for insider trading with symbol and optional page\nconst insiderTradingInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n});\n\nexport const getInsiderTrading = createOpenAITool({\n name: 'getInsiderTrading',\n description:\n 'Get insider trading data for a specific stock symbol showing buy/sell transactions by company insiders',\n inputSchema: insiderTradingInputSchema,\n execute: async ({ symbol, page }) => {\n const fmp = getFMPClient();\n const insiderTrading = await fmp.insider.getInsiderTradesBySymbol(symbol, page);\n return JSON.stringify(insiderTrading.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for institutional holders with symbol\nconst institutionalHoldersInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const getInstitutionalHolders = createOpenAITool({\n name: 'getInstitutionalHolders',\n description:\n 'Get institutional holders for a specific stock symbol showing which institutions own shares and their holdings',\n inputSchema: institutionalHoldersInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const institutionalHolders = await fmp.institutional.getInstitutionalHolders({ symbol });\n\n // Return formatted JSON string\n return JSON.stringify(institutionalHolders.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Empty schema for tools that don't require parameters\nconst emptyInputSchema = z.object({});\n\nexport const getMarketPerformance = createOpenAITool({\n name: 'getMarketPerformance',\n description: 'Get overall market performance data including major indices performance',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const marketPerformance = await fmp.market.getMarketPerformance();\n return JSON.stringify(marketPerformance.data, null, 2);\n },\n});\n\nexport const getSectorPerformance = createOpenAITool({\n name: 'getSectorPerformance',\n description: 'Get sector performance data showing how different market sectors are performing',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const sectorPerformance = await fmp.market.getSectorPerformance();\n return JSON.stringify(sectorPerformance.data, null, 2);\n },\n});\n\nexport const getGainers = createOpenAITool({\n name: 'getGainers',\n description: 'Get top gaining stocks showing the best performing stocks of the day',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const gainers = await fmp.market.getGainers();\n return JSON.stringify(gainers.data, null, 2);\n },\n});\n\nexport const getLosers = createOpenAITool({\n name: 'getLosers',\n description: 'Get top losing stocks showing the worst performing stocks of the day',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const losers = await fmp.market.getLosers();\n return JSON.stringify(losers.data, null, 2);\n },\n});\n\nexport const getMostActive = createOpenAITool({\n name: 'getMostActive',\n description: 'Get most active stocks showing stocks with the highest trading volume',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const mostActive = await fmp.market.getMostActive();\n return JSON.stringify(mostActive.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for stock quote with symbol\nconst stockQuoteInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The symbol of the company to get the stock quote for'),\n});\n\nexport const getStockQuote = createOpenAITool({\n name: 'getStockQuote',\n description:\n 'Get the real-time stock quote for a company including price, volume, and market data',\n inputSchema: stockQuoteInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const stockQuote = await fmp.quote.getQuote(symbol);\n return JSON.stringify(stockQuote.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for symbol-based trading data\nconst symbolInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\n// Input schema for name-based trading data\nconst nameInputSchema = z.object({\n name: z.string().min(1, 'Name is required').describe('The name of the senator or representative'),\n});\n\n// Input schema for RSS feed with pagination\nconst rssFeedInputSchema = z.object({\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n});\n\nexport const getSenateTrading = createOpenAITool({\n name: 'getSenateTrading',\n description: 'Get senate trading data for a specific stock symbol showing senator transactions',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const senateTrading = await fmp.senateHouse.getSenateTrading({ symbol });\n return JSON.stringify(senateTrading.data, null, 2);\n },\n});\n\nexport const getHouseTrading = createOpenAITool({\n name: 'getHouseTrading',\n description:\n 'Get house trading data for a specific stock symbol showing representative transactions',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const houseTrading = await fmp.senateHouse.getHouseTrading({ symbol });\n return JSON.stringify(houseTrading.data, null, 2);\n },\n});\n\nexport const getSenateTradingByName = createOpenAITool({\n name: 'getSenateTradingByName',\n description:\n 'Get senate trading data for a specific senator by name showing their trading activity',\n inputSchema: nameInputSchema,\n execute: async ({ name }) => {\n const fmp = getFMPClient();\n const senateTradingByName = await fmp.senateHouse.getSenateTradingByName({ name });\n return JSON.stringify(senateTradingByName.data, null, 2);\n },\n});\n\nexport const getHouseTradingByName = createOpenAITool({\n name: 'getHouseTradingByName',\n description:\n 'Get house trading data for a specific representative by name showing their trading activity',\n inputSchema: nameInputSchema,\n execute: async ({ name }) => {\n const fmp = getFMPClient();\n const houseTradingByName = await fmp.senateHouse.getHouseTradingByName({ name });\n return JSON.stringify(houseTradingByName.data, null, 2);\n },\n});\n\nexport const getSenateTradingRSSFeed = createOpenAITool({\n name: 'getSenateTradingRSSFeed',\n description:\n 'Get senate trading data through RSS feed with pagination showing recent senate transactions',\n inputSchema: rssFeedInputSchema,\n execute: async ({ page }) => {\n const fmp = getFMPClient();\n const senateTradingRSSFeed = await fmp.senateHouse.getSenateTradingRSSFeed({ page });\n return JSON.stringify(senateTradingRSSFeed.data, null, 2);\n },\n});\n\nexport const getHouseTradingRSSFeed = createOpenAITool({\n name: 'getHouseTradingRSSFeed',\n description:\n 'Get house trading data through RSS feed with pagination showing recent house transactions',\n inputSchema: rssFeedInputSchema,\n execute: async ({ page }) => {\n const fmp = getFMPClient();\n const houseTradingRSSFeed = await fmp.senateHouse.getHouseTradingRSSFeed({ page });\n return JSON.stringify(houseTradingRSSFeed.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for symbol-based stock operations\nconst symbolInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const getMarketCap = createOpenAITool({\n name: 'getMarketCap',\n description: 'Get market capitalization for a company showing current market value',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const marketCap = await fmp.stock.getMarketCap(symbol);\n return JSON.stringify(marketCap.data, null, 2);\n },\n});\n\nexport const getStockSplits = createOpenAITool({\n name: 'getStockSplits',\n description: 'Get stock splits history for a company showing all historical stock split events',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const stockSplits = await fmp.stock.getStockSplits(symbol);\n return JSON.stringify(stockSplits.data, null, 2);\n },\n});\n\nexport const getDividendHistory = createOpenAITool({\n name: 'getDividendHistory',\n description: 'Get dividend history for a company showing all historical dividend payments',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const dividendHistory = await fmp.stock.getDividendHistory(symbol);\n return JSON.stringify(dividendHistory.data, null, 2);\n },\n});\n\nexport const stockTools = [getMarketCap, getStockSplits, getDividendHistory];\n","import type { Tool } from '@openai/agents';\nimport { checkOpenAIAgentsVersion } from '@/utils/version-check';\nimport { getCompanyProfile } from './company';\nimport { getEarningsCalendar, getEconomicCalendar } from './calendar';\nimport { getTreasuryRates, getEconomicIndicators } from './economic';\nimport { getETFHoldings, getETFProfile } from './etf';\nimport {\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n} from './financial';\nimport { getInsiderTrading } from './insider';\nimport { getInstitutionalHolders } from './institutional';\nimport {\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n} from './market';\nimport { getStockQuote } from './quote';\nimport {\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n} from './senate-house';\nimport { getMarketCap, getStockSplits, getDividendHistory } from './stock';\n\n// Export individual tools for OpenAI agents\nexport {\n getCompanyProfile,\n getEarningsCalendar,\n getEconomicCalendar,\n getTreasuryRates,\n getEconomicIndicators,\n getETFHoldings,\n getETFProfile,\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n getInsiderTrading,\n getInstitutionalHolders,\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n getStockQuote,\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n getMarketCap,\n getStockSplits,\n getDividendHistory,\n};\n\n// Export tool groups as arrays for OpenAI Agents\nexport const companyTools = [getCompanyProfile] as Tool<unknown>[];\nexport const calendarTools = [getEarningsCalendar, getEconomicCalendar] as Tool<unknown>[];\nexport const economicTools = [getTreasuryRates, getEconomicIndicators] as Tool<unknown>[];\nexport const etfTools = [getETFHoldings, getETFProfile] as Tool<unknown>[];\nexport const financialTools = [\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n] as Tool<unknown>[];\nexport const insiderTools = [getInsiderTrading] as Tool<unknown>[];\nexport const institutionalTools = [getInstitutionalHolders] as Tool<unknown>[];\nexport const marketTools = [\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n] as Tool<unknown>[];\nexport const quoteTools = [getStockQuote] as Tool<unknown>[];\nexport const senateHouseTools = [\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n] as Tool<unknown>[];\nexport const stockTools = [getMarketCap, getStockSplits, getDividendHistory] as Tool<unknown>[];\n\n// Combine all tools into a single array for convenience\nexport const fmpTools: Tool<unknown>[] = [\n getCompanyProfile,\n getEarningsCalendar,\n getEconomicCalendar,\n getTreasuryRates,\n getEconomicIndicators,\n getETFHoldings,\n getETFProfile,\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n getInsiderTrading,\n getInstitutionalHolders,\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n getStockQuote,\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n getMarketCap,\n getStockSplits,\n getDividendHistory,\n];\n\n// Check version compatibility when the module is imported\ncheckOpenAIAgentsVersion();\n"]}
1
+ {"version":3,"sources":["../../../src/utils/version-check.ts","../../../src/utils/logger.ts","../../../src/utils/openai-tool-wrapper.ts","../../../src/client.ts","../../../src/providers/openai/company.ts","../../../src/providers/openai/calendar.ts","../../../src/providers/openai/economic.ts","../../../src/providers/openai/etf.ts","../../../src/providers/openai/financial.ts","../../../src/providers/openai/insider.ts","../../../src/providers/openai/institutional.ts","../../../src/providers/openai/market.ts","../../../src/providers/openai/quote.ts","../../../src/providers/openai/senate-house.ts","../../../src/providers/openai/stock.ts","../../../src/providers/openai/index.ts"],"names":["tool","z","symbolInputSchema"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Checks if the installed version of @openai/agents is compatible\n * with this package. Throws an error if incompatible.\n */\nexport function checkOpenAIAgentsVersion(): void {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { tool } = require('@openai/agents');\n\n // Test if the tool function accepts the new API structure\n // This is a runtime check that will fail with older versions\n tool({\n name: 'test',\n description: 'test',\n parameters: { type: 'object', properties: {} },\n strict: true,\n execute: async () => 'test',\n });\n\n // If we get here, the version is compatible (silent success)\n } catch (error) {\n // If the tool creation fails, it's likely an incompatible version\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Incompatible @openai/agents version detected. ` +\n `This package requires version ^0.0.17 or higher due to breaking changes in the API. ` +\n `Please upgrade with: npm install @openai/agents@latest\\n\\n` +\n `Error details: ${errorMessage}`,\n );\n }\n}\n\n/**\n * Logs a warning if the version check fails but doesn't throw\n */\nexport function warnOpenAIAgentsVersion(): void {\n try {\n checkOpenAIAgentsVersion();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn('⚠️ Version compatibility warning:', errorMessage);\n }\n}\n","/**\n * Logger utility for tools package\n * Controls logging of API results based on environment variable\n */\n\ninterface LogOptions {\n toolName: string;\n input: unknown;\n result: unknown;\n executionTime?: number;\n}\n\n/**\n * Check if API result logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isApiLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_API_RESULTS === 'true';\n}\n\n/**\n * Check if data-only logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isDataOnlyLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_DATA_ONLY === 'true';\n}\n\n/**\n * Estimate token count for LLM context (JSON-optimized)\n * JSON has many structural characters that count as single tokens\n */\nfunction estimateTokenCount(text: string): number {\n // Try to parse as JSON first for better estimation\n try {\n const parsed = JSON.parse(text);\n return estimateTokenCountForData(parsed);\n } catch {\n // Not JSON, use text-based estimation\n return estimateTokenCountForText(text);\n }\n}\n\n/**\n * Estimate tokens for parsed JSON data\n */\nfunction estimateTokenCountForData(data: unknown): number {\n if (data === null || data === undefined) {\n return 1; // null/undefined is typically 1 token\n }\n\n if (typeof data === 'string') {\n // Strings are typically tokenized by words/symbols\n // Financial data often has short strings like \"AAPL\", \"USD\", etc.\n return Math.ceil(data.length / 3); // More conservative for short strings\n }\n\n if (typeof data === 'number') {\n // Numbers are typically 1-2 tokens depending on size\n return data.toString().length > 10 ? 2 : 1;\n }\n\n if (typeof data === 'boolean') {\n return 1; // true/false are single tokens\n }\n\n if (Array.isArray(data)) {\n // Arrays: count structural tokens + content tokens\n let tokens = 2; // [ and ]\n for (const item of data) {\n tokens += estimateTokenCountForData(item);\n if (data.indexOf(item) < data.length - 1) {\n tokens += 1; // comma separator\n }\n }\n return tokens;\n }\n\n if (typeof data === 'object') {\n // Objects: count structural tokens + key-value pairs\n let tokens = 2; // { and }\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = (data as Record<string, unknown>)[key];\n\n // Key (quoted string)\n tokens += Math.ceil(key.length / 3);\n tokens += 2; // quotes around key\n\n // Colon separator\n tokens += 1;\n\n // Value\n tokens += estimateTokenCountForData(value);\n\n // Comma separator (except for last item)\n if (i < keys.length - 1) {\n tokens += 1;\n }\n }\n return tokens;\n }\n\n return 1; // fallback\n}\n\n/**\n * Estimate tokens for plain text (non-JSON)\n */\nfunction estimateTokenCountForText(text: string): number {\n // For plain text, use a more conservative estimate\n // Consider that financial data often has numbers, symbols, and abbreviations\n const words = text.split(/\\s+/).filter(word => word.length > 0);\n let tokens = 0;\n\n for (const word of words) {\n if (/^\\d+$/.test(word)) {\n // Pure numbers are typically 1-2 tokens\n tokens += word.length > 8 ? 2 : 1;\n } else if (/^[A-Z]+$/.test(word)) {\n // All caps (like stock symbols) are often single tokens\n tokens += 1;\n } else if (/^\\$[\\d,]+\\.?\\d*$/.test(word)) {\n // Currency amounts are typically 2-3 tokens\n tokens += 3;\n } else {\n // Regular words: roughly 3-4 characters per token\n tokens += Math.ceil(word.length / 3.5);\n }\n }\n\n return tokens;\n}\n\n/**\n * Get simple metadata about the result for LLM context\n */\nfunction getResultInfo(result: unknown): string {\n if (result === null || result === undefined) {\n return 'null/undefined';\n }\n\n if (typeof result === 'string') {\n const tokenCount = estimateTokenCount(result);\n try {\n const parsed = JSON.parse(result);\n if (Array.isArray(parsed)) {\n return `JSON string (array of ${parsed.length} items, ~${tokenCount} tokens)`;\n }\n } catch {\n // Not JSON\n }\n return `string (${result.length} chars, ~${tokenCount} tokens)`;\n }\n\n if (Array.isArray(result)) {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `array (${result.length} items, ~${tokenCount} tokens)`;\n }\n\n if (typeof result === 'object') {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `object (~${tokenCount} tokens)`;\n }\n\n return typeof result;\n}\n\n/**\n * Log API tool execution details when enabled\n */\nexport function logApiExecution(options: LogOptions): void {\n if (!isApiLoggingEnabled()) {\n return;\n }\n\n const { toolName, input, result, executionTime } = options;\n\n console.log('\\n' + '='.repeat(80));\n console.log(`🔧 FMP Tool Execution: ${toolName}`);\n console.log('='.repeat(80));\n\n console.log('\\n📥 Input:');\n console.log(JSON.stringify(input, null, 2));\n\n const resultInfo = getResultInfo(result);\n\n console.log(`🔧 ${toolName}: ${resultInfo}`);\n\n if (executionTime !== undefined) {\n console.log(`\\n⏱️ Execution Time: ${executionTime}ms`);\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log data-only information for LLM context (when enabled)\n */\nexport function logDataOnly(options: LogOptions): void {\n if (!isDataOnlyLoggingEnabled()) {\n return;\n }\n\n const { result } = options;\n\n console.log('\\n📤 Result:');\n if (typeof result === 'string') {\n try {\n // Try to parse and pretty-print if it's JSON\n const parsed = JSON.parse(result);\n console.log(JSON.stringify(parsed, null, 2));\n } catch {\n // If not JSON, log as-is\n console.log(result);\n }\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log API tool execution with timing\n */\nexport async function logApiExecutionWithTiming<T>(\n toolName: string,\n input: unknown,\n executeFn: () => Promise<T>,\n): Promise<T> {\n const startTime = Date.now();\n\n try {\n const result = await executeFn();\n const executionTime = Date.now() - startTime;\n\n logApiExecution({\n toolName,\n input,\n result,\n executionTime,\n });\n\n // Also log data-only info if enabled\n logDataOnly({\n toolName,\n input,\n result,\n executionTime,\n });\n\n return result;\n } catch (error) {\n const executionTime = Date.now() - startTime;\n\n // Log error case as well\n if (isApiLoggingEnabled()) {\n console.log('\\n' + '='.repeat(80));\n console.log(`❌ FMP Tool Execution Error: ${toolName}`);\n console.log('='.repeat(80));\n console.log('\\n📥 Input:');\n console.log(JSON.stringify(input, null, 2));\n console.log('\\n❌ Error:');\n console.log(error instanceof Error ? error.message : String(error));\n console.log(`\\n⏱️ Execution Time: ${executionTime}ms`);\n console.log('='.repeat(80) + '\\n');\n }\n\n throw error;\n }\n}\n","import { z } from 'zod';\nimport { tool } from '@openai/agents';\nimport { logApiExecutionWithTiming } from './logger';\n\nexport interface OpenAIToolConfig<T extends z.ZodObject<any>> {\n name: string;\n description: string;\n inputSchema: T;\n execute: (args: z.infer<T>) => Promise<string>;\n}\n\nexport function createOpenAITool<T extends z.ZodObject<any>>(config: OpenAIToolConfig<T>) {\n const { name, description, inputSchema, execute } = config;\n\n // Create a simple JSON schema from the Zod schema\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n Object.entries(inputSchema.shape).forEach(([key, _fieldSchema]) => {\n properties[key] = { type: 'string' };\n required.push(key);\n });\n\n return tool({\n name,\n description,\n parameters: {\n type: 'object',\n properties,\n required,\n additionalProperties: false,\n },\n strict: true,\n execute: async (input: unknown) => {\n try {\n const validatedInput = inputSchema.parse(input);\n return await logApiExecutionWithTiming(name, validatedInput, () => execute(validatedInput));\n } catch (error) {\n if (error instanceof z.ZodError) {\n return `Invalid input: ${error.errors.map(e => e.message).join(', ')}`;\n }\n return `Error executing ${name}: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n });\n}\n","/**\n * Internal FMP API client instance\n * Used internally by the tools, not exported publicly\n */\nimport { FMP } from 'fmp-node-api';\n\n// Create a function to get the FMP client instance (internal use only)\nexport function getFMPClient() {\n return new FMP();\n}\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\nexport const getCompanyProfile = createOpenAITool({\n name: 'getCompanyProfile',\n description: 'Get the company profile for a company',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n }),\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const companyProfile = await fmp.company.getCompanyProfile(symbol);\n return JSON.stringify(companyProfile.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Common input schema for calendar date range\nconst calendarInputSchema = z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\nexport const getEarningsCalendar = createOpenAITool({\n name: 'getEarningsCalendar',\n description: 'Get earnings calendar showing upcoming and recent earnings announcements',\n inputSchema: calendarInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const earningsCalendar = await fmp.calendar.getEarningsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(earningsCalendar.data, null, 2);\n },\n});\n\nexport const getEconomicCalendar = createOpenAITool({\n name: 'getEconomicCalendar',\n description: 'Get economic calendar showing upcoming and recent economic events and indicators',\n inputSchema: calendarInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const economicCalendar = await fmp.calendar.getEconomicsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(economicCalendar.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for treasury rates with date range\nconst treasuryRatesInputSchema = z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\n// Economic indicators enum and schema\nconst economicIndicatorNames = [\n 'GDP',\n 'realGDP',\n 'nominalPotentialGDP',\n 'realGDPPerCapita',\n 'federalFunds',\n 'CPI',\n 'inflationRate',\n 'inflation',\n 'retailSales',\n 'consumerSentiment',\n 'durableGoods',\n 'unemploymentRate',\n 'totalNonfarmPayroll',\n 'initialClaims',\n 'industrialProductionTotalIndex',\n 'newPrivatelyOwnedHousingUnitsStartedTotalUnits',\n 'totalVehicleSales',\n 'retailMoneyFunds',\n 'smoothedUSRecessionProbabilities',\n '3MonthOr90DayRatesAndYieldsCertificatesOfDeposit',\n 'commercialBankInterestRateOnCreditCardPlansAllAccounts',\n '30YearFixedRateMortgageAverage',\n '15YearFixedRateMortgageAverage',\n] as const;\n\nconst economicIndicatorsInputSchema = z.object({\n name: z.enum(economicIndicatorNames).describe('The name of the economic indicator'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\nexport const getTreasuryRates = createOpenAITool({\n name: 'getTreasuryRates',\n description: 'Get treasury rates for different maturities over time',\n inputSchema: treasuryRatesInputSchema,\n execute: async ({ from, to }) => {\n const fmp = getFMPClient();\n const treasuryRates = await fmp.economic.getTreasuryRates({\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(treasuryRates.data, null, 2);\n },\n});\n\nexport const getEconomicIndicators = createOpenAITool({\n name: 'getEconomicIndicators',\n description: 'Get economic indicators like GDP, unemployment rate, inflation, etc.',\n inputSchema: economicIndicatorsInputSchema,\n execute: async ({ name, from, to }) => {\n const fmp = getFMPClient();\n const economicIndicators = await fmp.economic.getEconomicIndicators({\n name,\n from: from ?? undefined,\n to: to ?? undefined,\n });\n return JSON.stringify(economicIndicators.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for ETF holdings with optional date\nconst etfHoldingsInputSchema = z.object({\n symbol: z.string().min(1, 'ETF symbol is required').describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\n date: z\n .string()\n .optional()\n .nullable()\n .describe('Date for holdings in YYYY-MM-DD format (optional)'),\n});\n\n// Input schema for ETF profile\nconst etfProfileInputSchema = z.object({\n symbol: z.string().min(1, 'ETF symbol is required').describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\n});\n\nexport const getETFHoldings = createOpenAITool({\n name: 'getETFHoldings',\n description:\n 'Get ETF holdings for a specific ETF symbol, showing the underlying assets and their weights',\n inputSchema: etfHoldingsInputSchema,\n execute: async ({ symbol, date }) => {\n const fmp = getFMPClient();\n const params: any = { symbol };\n if (date) {\n params.date = date;\n }\n\n const etfHoldings = await fmp.etf.getHoldings(params);\n return JSON.stringify(etfHoldings.data, null, 2);\n },\n});\n\nexport const getETFProfile = createOpenAITool({\n name: 'getETFProfile',\n description: 'Get ETF profile information including fund details, expense ratio, and key metrics',\n inputSchema: etfProfileInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const etfProfile = await fmp.etf.getProfile(symbol);\n return JSON.stringify(etfProfile.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Common input schema for financial statements with symbol and period\nconst financialStatementInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n period: z\n .enum(['annual', 'quarter'])\n .default('annual')\n .describe('The period type (annual or quarter)'),\n});\n\nexport const getBalanceSheet = createOpenAITool({\n name: 'getBalanceSheet',\n description: 'Get balance sheet for a company showing assets, liabilities, and equity',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const balanceSheet = await fmp.financial.getBalanceSheet({ symbol, period });\n return JSON.stringify(balanceSheet.data, null, 2);\n },\n});\n\nexport const getIncomeStatement = createOpenAITool({\n name: 'getIncomeStatement',\n description: 'Get income statement for a company showing revenue, expenses, and profit',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const incomeStatement = await fmp.financial.getIncomeStatement({ symbol, period });\n return JSON.stringify(incomeStatement.data, null, 2);\n },\n});\n\nexport const getCashFlowStatement = createOpenAITool({\n name: 'getCashFlowStatement',\n description:\n 'Get cash flow statement for a company showing operating, investing, and financing cash flows',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const cashFlowStatement = await fmp.financial.getCashFlowStatement({ symbol, period });\n return JSON.stringify(cashFlowStatement.data, null, 2);\n },\n});\n\nexport const getFinancialRatios = createOpenAITool({\n name: 'getFinancialRatios',\n description:\n 'Get financial ratios for a company including profitability, liquidity, and efficiency metrics',\n inputSchema: financialStatementInputSchema,\n execute: async ({ symbol, period }) => {\n const fmp = getFMPClient();\n const financialRatios = await fmp.financial.getFinancialRatios({ symbol, period });\n return JSON.stringify(financialRatios.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for insider trading with symbol and optional page\nconst insiderTradingInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n});\n\nexport const getInsiderTrading = createOpenAITool({\n name: 'getInsiderTrading',\n description:\n 'Get insider trading data for a specific stock symbol showing buy/sell transactions by company insiders',\n inputSchema: insiderTradingInputSchema,\n execute: async ({ symbol, page }) => {\n const fmp = getFMPClient();\n const insiderTrading = await fmp.insider.getInsiderTradesBySymbol(symbol, page);\n return JSON.stringify(insiderTrading.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for institutional holders with symbol\nconst institutionalHoldersInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const getInstitutionalHolders = createOpenAITool({\n name: 'getInstitutionalHolders',\n description:\n 'Get institutional holders for a specific stock symbol showing which institutions own shares and their holdings',\n inputSchema: institutionalHoldersInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const institutionalHolders = await fmp.institutional.getInstitutionalHolders({ symbol });\n\n // Return formatted JSON string\n return JSON.stringify(institutionalHolders.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Empty schema for tools that don't require parameters\nconst emptyInputSchema = z.object({});\n\nexport const getMarketPerformance = createOpenAITool({\n name: 'getMarketPerformance',\n description: 'Get overall market performance data including major indices performance',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const marketPerformance = await fmp.market.getMarketPerformance();\n return JSON.stringify(marketPerformance.data, null, 2);\n },\n});\n\nexport const getSectorPerformance = createOpenAITool({\n name: 'getSectorPerformance',\n description: 'Get sector performance data showing how different market sectors are performing',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const sectorPerformance = await fmp.market.getSectorPerformance();\n return JSON.stringify(sectorPerformance.data, null, 2);\n },\n});\n\nexport const getGainers = createOpenAITool({\n name: 'getGainers',\n description: 'Get top gaining stocks showing the best performing stocks of the day',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const gainers = await fmp.market.getGainers();\n return JSON.stringify(gainers.data, null, 2);\n },\n});\n\nexport const getLosers = createOpenAITool({\n name: 'getLosers',\n description: 'Get top losing stocks showing the worst performing stocks of the day',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const losers = await fmp.market.getLosers();\n return JSON.stringify(losers.data, null, 2);\n },\n});\n\nexport const getMostActive = createOpenAITool({\n name: 'getMostActive',\n description: 'Get most active stocks showing stocks with the highest trading volume',\n inputSchema: emptyInputSchema,\n execute: async () => {\n const fmp = getFMPClient();\n const mostActive = await fmp.market.getMostActive();\n return JSON.stringify(mostActive.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for stock quote with symbol\nconst stockQuoteInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The symbol of the company to get the stock quote for'),\n});\n\nexport const getStockQuote = createOpenAITool({\n name: 'getStockQuote',\n description:\n 'Get the real-time stock quote for a company including price, volume, and market data',\n inputSchema: stockQuoteInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const stockQuote = await fmp.quote.getQuote(symbol);\n return JSON.stringify(stockQuote.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for symbol-based trading data\nconst symbolInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\n// Input schema for name-based trading data\nconst nameInputSchema = z.object({\n name: z.string().min(1, 'Name is required').describe('The name of the senator or representative'),\n});\n\n// Input schema for RSS feed with pagination\nconst rssFeedInputSchema = z.object({\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n});\n\nexport const getSenateTrading = createOpenAITool({\n name: 'getSenateTrading',\n description: 'Get senate trading data for a specific stock symbol showing senator transactions',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const senateTrading = await fmp.senateHouse.getSenateTrading({ symbol });\n return JSON.stringify(senateTrading.data, null, 2);\n },\n});\n\nexport const getHouseTrading = createOpenAITool({\n name: 'getHouseTrading',\n description:\n 'Get house trading data for a specific stock symbol showing representative transactions',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const houseTrading = await fmp.senateHouse.getHouseTrading({ symbol });\n return JSON.stringify(houseTrading.data, null, 2);\n },\n});\n\nexport const getSenateTradingByName = createOpenAITool({\n name: 'getSenateTradingByName',\n description:\n 'Get senate trading data for a specific senator by name showing their trading activity',\n inputSchema: nameInputSchema,\n execute: async ({ name }) => {\n const fmp = getFMPClient();\n const senateTradingByName = await fmp.senateHouse.getSenateTradingByName({ name });\n return JSON.stringify(senateTradingByName.data, null, 2);\n },\n});\n\nexport const getHouseTradingByName = createOpenAITool({\n name: 'getHouseTradingByName',\n description:\n 'Get house trading data for a specific representative by name showing their trading activity',\n inputSchema: nameInputSchema,\n execute: async ({ name }) => {\n const fmp = getFMPClient();\n const houseTradingByName = await fmp.senateHouse.getHouseTradingByName({ name });\n return JSON.stringify(houseTradingByName.data, null, 2);\n },\n});\n\nexport const getSenateTradingRSSFeed = createOpenAITool({\n name: 'getSenateTradingRSSFeed',\n description:\n 'Get senate trading data through RSS feed with pagination showing recent senate transactions',\n inputSchema: rssFeedInputSchema,\n execute: async ({ page }) => {\n const fmp = getFMPClient();\n const senateTradingRSSFeed = await fmp.senateHouse.getSenateTradingRSSFeed({ page });\n return JSON.stringify(senateTradingRSSFeed.data, null, 2);\n },\n});\n\nexport const getHouseTradingRSSFeed = createOpenAITool({\n name: 'getHouseTradingRSSFeed',\n description:\n 'Get house trading data through RSS feed with pagination showing recent house transactions',\n inputSchema: rssFeedInputSchema,\n execute: async ({ page }) => {\n const fmp = getFMPClient();\n const houseTradingRSSFeed = await fmp.senateHouse.getHouseTradingRSSFeed({ page });\n return JSON.stringify(houseTradingRSSFeed.data, null, 2);\n },\n});\n","import { z } from 'zod';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\nimport { getFMPClient } from '@/client';\n\n// Input schema for symbol-based stock operations\nconst symbolInputSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const getMarketCap = createOpenAITool({\n name: 'getMarketCap',\n description: 'Get market capitalization for a company showing current market value',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const marketCap = await fmp.stock.getMarketCap(symbol);\n return JSON.stringify(marketCap.data, null, 2);\n },\n});\n\nexport const getStockSplits = createOpenAITool({\n name: 'getStockSplits',\n description: 'Get stock splits history for a company showing all historical stock split events',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const stockSplits = await fmp.stock.getStockSplits(symbol);\n return JSON.stringify(stockSplits.data, null, 2);\n },\n});\n\nexport const getDividendHistory = createOpenAITool({\n name: 'getDividendHistory',\n description: 'Get dividend history for a company showing all historical dividend payments',\n inputSchema: symbolInputSchema,\n execute: async ({ symbol }) => {\n const fmp = getFMPClient();\n const dividendHistory = await fmp.stock.getDividendHistory(symbol);\n return JSON.stringify(dividendHistory.data, null, 2);\n },\n});\n\nexport const stockTools = [getMarketCap, getStockSplits, getDividendHistory];\n","import type { Tool } from '@openai/agents';\nimport { checkOpenAIAgentsVersion } from '@/utils/version-check';\nimport { getCompanyProfile } from './company';\nimport { getEarningsCalendar, getEconomicCalendar } from './calendar';\nimport { getTreasuryRates, getEconomicIndicators } from './economic';\nimport { getETFHoldings, getETFProfile } from './etf';\nimport {\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n} from './financial';\nimport { getInsiderTrading } from './insider';\nimport { getInstitutionalHolders } from './institutional';\nimport {\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n} from './market';\nimport { getStockQuote } from './quote';\nimport {\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n} from './senate-house';\nimport { getMarketCap, getStockSplits, getDividendHistory } from './stock';\n\n// Export individual tools for OpenAI agents\nexport {\n getCompanyProfile,\n getEarningsCalendar,\n getEconomicCalendar,\n getTreasuryRates,\n getEconomicIndicators,\n getETFHoldings,\n getETFProfile,\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n getInsiderTrading,\n getInstitutionalHolders,\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n getStockQuote,\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n getMarketCap,\n getStockSplits,\n getDividendHistory,\n};\n\n// Export tool groups as arrays for OpenAI Agents\nexport const companyTools = [getCompanyProfile] as Tool<unknown>[];\nexport const calendarTools = [getEarningsCalendar, getEconomicCalendar] as Tool<unknown>[];\nexport const economicTools = [getTreasuryRates, getEconomicIndicators] as Tool<unknown>[];\nexport const etfTools = [getETFHoldings, getETFProfile] as Tool<unknown>[];\nexport const financialTools = [\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n] as Tool<unknown>[];\nexport const insiderTools = [getInsiderTrading] as Tool<unknown>[];\nexport const institutionalTools = [getInstitutionalHolders] as Tool<unknown>[];\nexport const marketTools = [\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n] as Tool<unknown>[];\nexport const quoteTools = [getStockQuote] as Tool<unknown>[];\nexport const senateHouseTools = [\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n] as Tool<unknown>[];\nexport const stockTools = [getMarketCap, getStockSplits, getDividendHistory] as Tool<unknown>[];\n\n// Combine all tools into a single array for convenience\nexport const fmpTools: Tool<unknown>[] = [\n getCompanyProfile,\n getEarningsCalendar,\n getEconomicCalendar,\n getTreasuryRates,\n getEconomicIndicators,\n getETFHoldings,\n getETFProfile,\n getBalanceSheet,\n getIncomeStatement,\n getCashFlowStatement,\n getFinancialRatios,\n getInsiderTrading,\n getInstitutionalHolders,\n getMarketPerformance,\n getSectorPerformance,\n getGainers,\n getLosers,\n getMostActive,\n getStockQuote,\n getSenateTrading,\n getHouseTrading,\n getSenateTradingByName,\n getHouseTradingByName,\n getSenateTradingRSSFeed,\n getHouseTradingRSSFeed,\n getMarketCap,\n getStockSplits,\n getDividendHistory,\n];\n\n// Check version compatibility when the module is imported\ncheckOpenAIAgentsVersion();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fmp-ai-tools",
3
- "version": "0.0.11-beta.2",
3
+ "version": "0.0.11-beta.4",
4
4
  "description": "AI tools for FMP Node API - compatible with Vercel AI SDK, Langchain, OpenAI, and more",
5
5
  "exports": {
6
6
  "./vercel-ai": {
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "homepage": "https://fmp-node-wrapper-docs.vercel.app",
40
40
  "dependencies": {
41
- "@openai/agents": "^0.0.17",
41
+ "@openai/agents": "^0.1.0",
42
42
  "ai": "^5.0.5",
43
43
  "zod": "^3.25.76",
44
44
  "fmp-node-api": "0.1.7"