integrate-sdk 0.7.37 → 0.7.40
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.
- package/dist/ai/anthropic.d.ts +67 -0
- package/dist/ai/anthropic.d.ts.map +1 -1
- package/dist/ai/anthropic.js +20 -0
- package/dist/ai/index.js +65 -0
- package/dist/ai/openai.d.ts +107 -0
- package/dist/ai/openai.d.ts.map +1 -1
- package/dist/ai/openai.js +45 -0
- package/dist/server.js +65 -0
- package/dist/src/ai/anthropic.d.ts +67 -0
- package/dist/src/ai/anthropic.d.ts.map +1 -1
- package/dist/src/ai/openai.d.ts +107 -0
- package/dist/src/ai/openai.d.ts.map +1 -1
- package/package.json +3 -1
package/dist/ai/anthropic.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { MCPClient } from "../client.js";
|
|
7
7
|
import type { MCPTool } from "../protocol/messages.js";
|
|
8
8
|
import { type AIToolsOptions } from "./utils.js";
|
|
9
|
+
import type Anthropic from "@anthropic-ai/sdk";
|
|
9
10
|
/**
|
|
10
11
|
* Anthropic tool definition
|
|
11
12
|
* Compatible with Anthropic's Claude API
|
|
@@ -179,4 +180,70 @@ export declare function handleAnthropicToolCalls(client: MCPClient<any>, message
|
|
|
179
180
|
* ```
|
|
180
181
|
*/
|
|
181
182
|
export declare function getAnthropicTools(client: MCPClient<any>, options?: AnthropicToolsOptions): Promise<AnthropicTool[]>;
|
|
183
|
+
/**
|
|
184
|
+
* Handle an entire Anthropic Message object
|
|
185
|
+
*
|
|
186
|
+
* This is a convenience function that extracts tool calls from a Message
|
|
187
|
+
* object, executes them, and returns the results formatted as MessageParam
|
|
188
|
+
* ready to be passed directly to the next API call.
|
|
189
|
+
*
|
|
190
|
+
* **Auto-extraction**: Provider tokens are automatically extracted from request headers
|
|
191
|
+
* or environment variables if not provided in options.
|
|
192
|
+
*
|
|
193
|
+
* @param client - The MCP client instance
|
|
194
|
+
* @param message - The complete Message object from Anthropic
|
|
195
|
+
* @param options - Optional configuration including provider tokens
|
|
196
|
+
* @returns Array with a single user message containing tool results, or empty array if no tool calls
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* import { serverClient } from '@/lib/integrate-server';
|
|
201
|
+
* import { getAnthropicTools, handleAnthropicMessage } from 'integrate-sdk/server';
|
|
202
|
+
* import Anthropic from '@anthropic-ai/sdk';
|
|
203
|
+
*
|
|
204
|
+
* const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
|
|
205
|
+
*
|
|
206
|
+
* export async function POST(req: Request) {
|
|
207
|
+
* const { messages } = await req.json();
|
|
208
|
+
*
|
|
209
|
+
* // Initial request with tools
|
|
210
|
+
* const message = await anthropic.messages.create({
|
|
211
|
+
* model: 'claude-3-5-sonnet-20241022',
|
|
212
|
+
* max_tokens: 1024,
|
|
213
|
+
* tools: await getAnthropicTools(serverClient),
|
|
214
|
+
* messages,
|
|
215
|
+
* });
|
|
216
|
+
*
|
|
217
|
+
* // If there are tool calls, handle them automatically
|
|
218
|
+
* if (message.stop_reason === 'tool_use') {
|
|
219
|
+
* const toolMessages = await handleAnthropicMessage(serverClient, message);
|
|
220
|
+
*
|
|
221
|
+
* // Continue conversation with tool results
|
|
222
|
+
* const finalMessage = await anthropic.messages.create({
|
|
223
|
+
* model: 'claude-3-5-sonnet-20241022',
|
|
224
|
+
* max_tokens: 1024,
|
|
225
|
+
* tools: await getAnthropicTools(serverClient),
|
|
226
|
+
* messages: [
|
|
227
|
+
* ...messages,
|
|
228
|
+
* { role: 'assistant', content: message.content },
|
|
229
|
+
* ...toolMessages,
|
|
230
|
+
* ],
|
|
231
|
+
* });
|
|
232
|
+
*
|
|
233
|
+
* return Response.json(finalMessage);
|
|
234
|
+
* }
|
|
235
|
+
*
|
|
236
|
+
* return Response.json(message);
|
|
237
|
+
* }
|
|
238
|
+
* ```
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* ```typescript
|
|
242
|
+
* // Manual token override
|
|
243
|
+
* const toolMessages = await handleAnthropicMessage(serverClient, message, {
|
|
244
|
+
* providerTokens: { github: 'ghp_...', gmail: 'ya29...' }
|
|
245
|
+
* });
|
|
246
|
+
* ```
|
|
247
|
+
*/
|
|
248
|
+
export declare function handleAnthropicMessage(client: MCPClient<any>, message: Anthropic.Messages.Message, options?: AnthropicToolsOptions): Promise<Anthropic.Messages.MessageParam[]>;
|
|
182
249
|
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,cAAc;CAAI;AAEjE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EACvB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,aAAa,CAUf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,EAAE,CAGjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,cAAc,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC,EAC1D,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAkCrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,EACnC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CA4B5C"}
|
package/dist/ai/anthropic.js
CHANGED
|
@@ -4256,8 +4256,28 @@ async function getAnthropicTools(client, options) {
|
|
|
4256
4256
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4257
4257
|
return convertMCPToolsToAnthropic(client, finalOptions);
|
|
4258
4258
|
}
|
|
4259
|
+
async function handleAnthropicMessage(client, message, options) {
|
|
4260
|
+
let providerTokens = options?.providerTokens;
|
|
4261
|
+
if (!providerTokens) {
|
|
4262
|
+
try {
|
|
4263
|
+
providerTokens = await getProviderTokens();
|
|
4264
|
+
} catch {}
|
|
4265
|
+
}
|
|
4266
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4267
|
+
const toolResults = await handleAnthropicToolCalls(client, message.content, finalOptions);
|
|
4268
|
+
if (toolResults.length === 0) {
|
|
4269
|
+
return [];
|
|
4270
|
+
}
|
|
4271
|
+
return [
|
|
4272
|
+
{
|
|
4273
|
+
role: "user",
|
|
4274
|
+
content: toolResults
|
|
4275
|
+
}
|
|
4276
|
+
];
|
|
4277
|
+
}
|
|
4259
4278
|
export {
|
|
4260
4279
|
handleAnthropicToolCalls,
|
|
4280
|
+
handleAnthropicMessage,
|
|
4261
4281
|
getAnthropicTools,
|
|
4262
4282
|
executeAnthropicToolCall,
|
|
4263
4283
|
convertMCPToolsToAnthropic,
|
package/dist/ai/index.js
CHANGED
|
@@ -4256,6 +4256,25 @@ async function getAnthropicTools(client, options) {
|
|
|
4256
4256
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4257
4257
|
return convertMCPToolsToAnthropic(client, finalOptions);
|
|
4258
4258
|
}
|
|
4259
|
+
async function handleAnthropicMessage(client, message, options) {
|
|
4260
|
+
let providerTokens = options?.providerTokens;
|
|
4261
|
+
if (!providerTokens) {
|
|
4262
|
+
try {
|
|
4263
|
+
providerTokens = await getProviderTokens();
|
|
4264
|
+
} catch {}
|
|
4265
|
+
}
|
|
4266
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4267
|
+
const toolResults = await handleAnthropicToolCalls(client, message.content, finalOptions);
|
|
4268
|
+
if (toolResults.length === 0) {
|
|
4269
|
+
return [];
|
|
4270
|
+
}
|
|
4271
|
+
return [
|
|
4272
|
+
{
|
|
4273
|
+
role: "user",
|
|
4274
|
+
content: toolResults
|
|
4275
|
+
}
|
|
4276
|
+
];
|
|
4277
|
+
}
|
|
4259
4278
|
|
|
4260
4279
|
// cloudflare.ts
|
|
4261
4280
|
function convertMCPToolToCloudflare(mcpTool, _client, _options) {
|
|
@@ -4391,6 +4410,49 @@ async function getOpenAITools(client, options) {
|
|
|
4391
4410
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4392
4411
|
return convertMCPToolsToOpenAI(client, finalOptions);
|
|
4393
4412
|
}
|
|
4413
|
+
async function handleOpenAIToolCalls(client, toolCalls, options) {
|
|
4414
|
+
const toolOutputs = [];
|
|
4415
|
+
for (const output of toolCalls) {
|
|
4416
|
+
if (output.type === "function_call") {
|
|
4417
|
+
const toolCall = {
|
|
4418
|
+
id: output.id ?? "",
|
|
4419
|
+
name: output.name,
|
|
4420
|
+
arguments: output.arguments
|
|
4421
|
+
};
|
|
4422
|
+
try {
|
|
4423
|
+
const result = await executeOpenAIToolCall(client, toolCall, options);
|
|
4424
|
+
toolOutputs.push({
|
|
4425
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
4426
|
+
type: "function_call_output",
|
|
4427
|
+
output: result,
|
|
4428
|
+
status: "completed"
|
|
4429
|
+
});
|
|
4430
|
+
} catch (error) {
|
|
4431
|
+
toolOutputs.push({
|
|
4432
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
4433
|
+
type: "function_call_output",
|
|
4434
|
+
output: error instanceof Error ? error.message : "Unknown error",
|
|
4435
|
+
status: "incomplete"
|
|
4436
|
+
});
|
|
4437
|
+
}
|
|
4438
|
+
}
|
|
4439
|
+
}
|
|
4440
|
+
return toolOutputs;
|
|
4441
|
+
}
|
|
4442
|
+
async function handleOpenAIResponse(client, response, options) {
|
|
4443
|
+
let providerTokens = options?.providerTokens;
|
|
4444
|
+
if (!providerTokens) {
|
|
4445
|
+
try {
|
|
4446
|
+
providerTokens = await getProviderTokens();
|
|
4447
|
+
} catch {}
|
|
4448
|
+
}
|
|
4449
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4450
|
+
const functionCalls = response.output.filter((output) => output.type === "function_call");
|
|
4451
|
+
if (functionCalls.length === 0) {
|
|
4452
|
+
return response;
|
|
4453
|
+
}
|
|
4454
|
+
return handleOpenAIToolCalls(client, functionCalls, finalOptions);
|
|
4455
|
+
}
|
|
4394
4456
|
|
|
4395
4457
|
// openai-agents.ts
|
|
4396
4458
|
function convertMCPToolToOpenAIAgents(mcpTool, client, options) {
|
|
@@ -4536,7 +4598,10 @@ export {
|
|
|
4536
4598
|
tryGetProviderTokens,
|
|
4537
4599
|
jsonSchemaToZod,
|
|
4538
4600
|
jsonSchemaPropertyToZod,
|
|
4601
|
+
handleOpenAIToolCalls,
|
|
4602
|
+
handleOpenAIResponse,
|
|
4539
4603
|
handleAnthropicToolCalls,
|
|
4604
|
+
handleAnthropicMessage,
|
|
4540
4605
|
getVercelAITools,
|
|
4541
4606
|
getProviderTokens,
|
|
4542
4607
|
getProviderForTool,
|
package/dist/ai/openai.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { MCPClient } from "../client.js";
|
|
7
7
|
import type { MCPTool } from "../protocol/messages.js";
|
|
8
8
|
import { type AIToolsOptions } from "./utils.js";
|
|
9
|
+
import type { OpenAI } from "openai";
|
|
9
10
|
/**
|
|
10
11
|
* OpenAI function tool definition
|
|
11
12
|
* Compatible with OpenAI's Responses API format
|
|
@@ -124,4 +125,110 @@ export declare function executeOpenAIToolCall(client: MCPClient<any>, toolCall:
|
|
|
124
125
|
* ```
|
|
125
126
|
*/
|
|
126
127
|
export declare function getOpenAITools(client: MCPClient<any>, options?: OpenAIToolsOptions): Promise<OpenAITool[]>;
|
|
128
|
+
/**
|
|
129
|
+
* Handle multiple tool calls from OpenAI's response output
|
|
130
|
+
*
|
|
131
|
+
* This function processes all function_call items from the response output,
|
|
132
|
+
* executes each tool call, and returns formatted results for the next request.
|
|
133
|
+
*
|
|
134
|
+
* @param client - The MCP client instance
|
|
135
|
+
* @param toolCalls - Array of output items from OpenAI response (filters for function_call type)
|
|
136
|
+
* @param options - Optional configuration including provider tokens
|
|
137
|
+
* @returns Array of function call outputs to send back to OpenAI
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* // Handle tool calls from a response
|
|
142
|
+
* const response = await openai.responses.create({
|
|
143
|
+
* model: 'gpt-4o-2024-11-20',
|
|
144
|
+
* input: 'Create a GitHub issue',
|
|
145
|
+
* tools: await getOpenAITools(serverClient),
|
|
146
|
+
* });
|
|
147
|
+
*
|
|
148
|
+
* // Execute the tool calls and get outputs
|
|
149
|
+
* const toolOutputs = await handleOpenAIToolCalls(
|
|
150
|
+
* serverClient,
|
|
151
|
+
* response.output,
|
|
152
|
+
* { providerTokens }
|
|
153
|
+
* );
|
|
154
|
+
*
|
|
155
|
+
* // Continue the conversation with tool results
|
|
156
|
+
* const nextResponse = await openai.responses.create({
|
|
157
|
+
* model: 'gpt-4o-2024-11-20',
|
|
158
|
+
* input: toolOutputs,
|
|
159
|
+
* tools: await getOpenAITools(serverClient),
|
|
160
|
+
* });
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
export declare function handleOpenAIToolCalls(client: MCPClient<any>, toolCalls: OpenAI.Responses.ResponseOutputItem[], options?: OpenAIToolsOptions): Promise<OpenAI.Responses.ResponseInputItem.FunctionCallOutput[]>;
|
|
164
|
+
/**
|
|
165
|
+
* Handle an entire OpenAI Response object
|
|
166
|
+
*
|
|
167
|
+
* This is a convenience function that extracts tool calls from a Response
|
|
168
|
+
* object and executes them. Use this when you want to process all tool
|
|
169
|
+
* calls from a response in one go.
|
|
170
|
+
*
|
|
171
|
+
* **Auto-extraction**: Provider tokens are automatically extracted from request headers
|
|
172
|
+
* or environment variables if not provided in options.
|
|
173
|
+
*
|
|
174
|
+
* @param client - The MCP client instance
|
|
175
|
+
* @param response - The complete Response object from OpenAI
|
|
176
|
+
* @param options - Optional configuration including provider tokens
|
|
177
|
+
* @returns Array of function call outputs to send back to OpenAI
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* import { serverClient } from '@/lib/integrate-server';
|
|
182
|
+
* import { getOpenAITools, handleOpenAIResponse } from 'integrate-sdk/server';
|
|
183
|
+
* import OpenAI from 'openai';
|
|
184
|
+
*
|
|
185
|
+
* const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
|
|
186
|
+
*
|
|
187
|
+
* export async function POST(req: Request) {
|
|
188
|
+
* const { messages } = await req.json();
|
|
189
|
+
*
|
|
190
|
+
* // Initial request with tools
|
|
191
|
+
* const response = await openai.responses.create({
|
|
192
|
+
* model: 'gpt-4o-2024-11-20',
|
|
193
|
+
* input: messages,
|
|
194
|
+
* tools: await getOpenAITools(serverClient),
|
|
195
|
+
* });
|
|
196
|
+
*
|
|
197
|
+
* // If there are tool calls, handle them automatically
|
|
198
|
+
* if (response.output.some(item => item.type === 'function_call')) {
|
|
199
|
+
* const toolOutputs = await handleOpenAIResponse(serverClient, response);
|
|
200
|
+
*
|
|
201
|
+
* // Continue conversation with tool results
|
|
202
|
+
* const finalResponse = await openai.responses.create({
|
|
203
|
+
* model: 'gpt-4o-2024-11-20',
|
|
204
|
+
* input: toolOutputs,
|
|
205
|
+
* tools: await getOpenAITools(serverClient),
|
|
206
|
+
* });
|
|
207
|
+
*
|
|
208
|
+
* return Response.json(finalResponse);
|
|
209
|
+
* }
|
|
210
|
+
*
|
|
211
|
+
* return Response.json(response);
|
|
212
|
+
* }
|
|
213
|
+
* ```
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```typescript
|
|
217
|
+
* // Manual token override
|
|
218
|
+
* const toolOutputs = await handleOpenAIResponse(serverClient, response, {
|
|
219
|
+
* providerTokens: { github: 'ghp_...', gmail: 'ya29...' }
|
|
220
|
+
* });
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
export declare function handleOpenAIResponse(client: MCPClient<any>, response: {
|
|
224
|
+
output: Array<{
|
|
225
|
+
type: string;
|
|
226
|
+
[key: string]: any;
|
|
227
|
+
}>;
|
|
228
|
+
}, options?: OpenAIToolsOptions): Promise<OpenAI.Responses.ResponseInputItem.FunctionCallOutput[] | {
|
|
229
|
+
output: Array<{
|
|
230
|
+
type: string;
|
|
231
|
+
[key: string]: any;
|
|
232
|
+
}>;
|
|
233
|
+
}>;
|
|
127
234
|
//# sourceMappingURL=openai.d.ts.map
|
package/dist/ai/openai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EACvB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,UAAU,CAUZ;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,UAAU,EAAE,CAGd;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAevB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAChD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CA+BlE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,EAChE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyB3H"}
|
package/dist/ai/openai.js
CHANGED
|
@@ -4233,7 +4233,52 @@ async function getOpenAITools(client, options) {
|
|
|
4233
4233
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4234
4234
|
return convertMCPToolsToOpenAI(client, finalOptions);
|
|
4235
4235
|
}
|
|
4236
|
+
async function handleOpenAIToolCalls(client, toolCalls, options) {
|
|
4237
|
+
const toolOutputs = [];
|
|
4238
|
+
for (const output of toolCalls) {
|
|
4239
|
+
if (output.type === "function_call") {
|
|
4240
|
+
const toolCall = {
|
|
4241
|
+
id: output.id ?? "",
|
|
4242
|
+
name: output.name,
|
|
4243
|
+
arguments: output.arguments
|
|
4244
|
+
};
|
|
4245
|
+
try {
|
|
4246
|
+
const result = await executeOpenAIToolCall(client, toolCall, options);
|
|
4247
|
+
toolOutputs.push({
|
|
4248
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
4249
|
+
type: "function_call_output",
|
|
4250
|
+
output: result,
|
|
4251
|
+
status: "completed"
|
|
4252
|
+
});
|
|
4253
|
+
} catch (error) {
|
|
4254
|
+
toolOutputs.push({
|
|
4255
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
4256
|
+
type: "function_call_output",
|
|
4257
|
+
output: error instanceof Error ? error.message : "Unknown error",
|
|
4258
|
+
status: "incomplete"
|
|
4259
|
+
});
|
|
4260
|
+
}
|
|
4261
|
+
}
|
|
4262
|
+
}
|
|
4263
|
+
return toolOutputs;
|
|
4264
|
+
}
|
|
4265
|
+
async function handleOpenAIResponse(client, response, options) {
|
|
4266
|
+
let providerTokens = options?.providerTokens;
|
|
4267
|
+
if (!providerTokens) {
|
|
4268
|
+
try {
|
|
4269
|
+
providerTokens = await getProviderTokens();
|
|
4270
|
+
} catch {}
|
|
4271
|
+
}
|
|
4272
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4273
|
+
const functionCalls = response.output.filter((output) => output.type === "function_call");
|
|
4274
|
+
if (functionCalls.length === 0) {
|
|
4275
|
+
return response;
|
|
4276
|
+
}
|
|
4277
|
+
return handleOpenAIToolCalls(client, functionCalls, finalOptions);
|
|
4278
|
+
}
|
|
4236
4279
|
export {
|
|
4280
|
+
handleOpenAIToolCalls,
|
|
4281
|
+
handleOpenAIResponse,
|
|
4237
4282
|
getOpenAITools,
|
|
4238
4283
|
executeOpenAIToolCall,
|
|
4239
4284
|
convertMCPToolsToOpenAI,
|
package/dist/server.js
CHANGED
|
@@ -6532,6 +6532,49 @@ async function getOpenAITools(client, options) {
|
|
|
6532
6532
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
6533
6533
|
return convertMCPToolsToOpenAI(client, finalOptions);
|
|
6534
6534
|
}
|
|
6535
|
+
async function handleOpenAIToolCalls(client, toolCalls, options) {
|
|
6536
|
+
const toolOutputs = [];
|
|
6537
|
+
for (const output of toolCalls) {
|
|
6538
|
+
if (output.type === "function_call") {
|
|
6539
|
+
const toolCall = {
|
|
6540
|
+
id: output.id ?? "",
|
|
6541
|
+
name: output.name,
|
|
6542
|
+
arguments: output.arguments
|
|
6543
|
+
};
|
|
6544
|
+
try {
|
|
6545
|
+
const result = await executeOpenAIToolCall(client, toolCall, options);
|
|
6546
|
+
toolOutputs.push({
|
|
6547
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
6548
|
+
type: "function_call_output",
|
|
6549
|
+
output: result,
|
|
6550
|
+
status: "completed"
|
|
6551
|
+
});
|
|
6552
|
+
} catch (error) {
|
|
6553
|
+
toolOutputs.push({
|
|
6554
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
6555
|
+
type: "function_call_output",
|
|
6556
|
+
output: error instanceof Error ? error.message : "Unknown error",
|
|
6557
|
+
status: "incomplete"
|
|
6558
|
+
});
|
|
6559
|
+
}
|
|
6560
|
+
}
|
|
6561
|
+
}
|
|
6562
|
+
return toolOutputs;
|
|
6563
|
+
}
|
|
6564
|
+
async function handleOpenAIResponse(client, response, options) {
|
|
6565
|
+
let providerTokens = options?.providerTokens;
|
|
6566
|
+
if (!providerTokens) {
|
|
6567
|
+
try {
|
|
6568
|
+
providerTokens = await getProviderTokens();
|
|
6569
|
+
} catch {}
|
|
6570
|
+
}
|
|
6571
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
6572
|
+
const functionCalls = response.output.filter((output) => output.type === "function_call");
|
|
6573
|
+
if (functionCalls.length === 0) {
|
|
6574
|
+
return response;
|
|
6575
|
+
}
|
|
6576
|
+
return handleOpenAIToolCalls(client, functionCalls, finalOptions);
|
|
6577
|
+
}
|
|
6535
6578
|
// src/ai/openai-agents.ts
|
|
6536
6579
|
function convertMCPToolToOpenAIAgents(mcpTool, client, options) {
|
|
6537
6580
|
return {
|
|
@@ -6612,6 +6655,25 @@ async function getAnthropicTools(client, options) {
|
|
|
6612
6655
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
6613
6656
|
return convertMCPToolsToAnthropic(client, finalOptions);
|
|
6614
6657
|
}
|
|
6658
|
+
async function handleAnthropicMessage(client, message, options) {
|
|
6659
|
+
let providerTokens = options?.providerTokens;
|
|
6660
|
+
if (!providerTokens) {
|
|
6661
|
+
try {
|
|
6662
|
+
providerTokens = await getProviderTokens();
|
|
6663
|
+
} catch {}
|
|
6664
|
+
}
|
|
6665
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
6666
|
+
const toolResults = await handleAnthropicToolCalls(client, message.content, finalOptions);
|
|
6667
|
+
if (toolResults.length === 0) {
|
|
6668
|
+
return [];
|
|
6669
|
+
}
|
|
6670
|
+
return [
|
|
6671
|
+
{
|
|
6672
|
+
role: "user",
|
|
6673
|
+
content: toolResults
|
|
6674
|
+
}
|
|
6675
|
+
];
|
|
6676
|
+
}
|
|
6615
6677
|
// src/ai/google.ts
|
|
6616
6678
|
function convertMCPToolToGoogle(mcpTool, _client, _options) {
|
|
6617
6679
|
return {
|
|
@@ -6963,7 +7025,10 @@ export {
|
|
|
6963
7025
|
svelteKitHandler,
|
|
6964
7026
|
jsonSchemaToZod,
|
|
6965
7027
|
jsonSchemaPropertyToZod,
|
|
7028
|
+
handleOpenAIToolCalls,
|
|
7029
|
+
handleOpenAIResponse,
|
|
6966
7030
|
handleAnthropicToolCalls,
|
|
7031
|
+
handleAnthropicMessage,
|
|
6967
7032
|
gmailIntegration,
|
|
6968
7033
|
githubIntegration,
|
|
6969
7034
|
getVercelAITools,
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { MCPClient } from "../client.js";
|
|
7
7
|
import type { MCPTool } from "../protocol/messages.js";
|
|
8
8
|
import { type AIToolsOptions } from "./utils.js";
|
|
9
|
+
import type Anthropic from "@anthropic-ai/sdk";
|
|
9
10
|
/**
|
|
10
11
|
* Anthropic tool definition
|
|
11
12
|
* Compatible with Anthropic's Claude API
|
|
@@ -179,4 +180,70 @@ export declare function handleAnthropicToolCalls(client: MCPClient<any>, message
|
|
|
179
180
|
* ```
|
|
180
181
|
*/
|
|
181
182
|
export declare function getAnthropicTools(client: MCPClient<any>, options?: AnthropicToolsOptions): Promise<AnthropicTool[]>;
|
|
183
|
+
/**
|
|
184
|
+
* Handle an entire Anthropic Message object
|
|
185
|
+
*
|
|
186
|
+
* This is a convenience function that extracts tool calls from a Message
|
|
187
|
+
* object, executes them, and returns the results formatted as MessageParam
|
|
188
|
+
* ready to be passed directly to the next API call.
|
|
189
|
+
*
|
|
190
|
+
* **Auto-extraction**: Provider tokens are automatically extracted from request headers
|
|
191
|
+
* or environment variables if not provided in options.
|
|
192
|
+
*
|
|
193
|
+
* @param client - The MCP client instance
|
|
194
|
+
* @param message - The complete Message object from Anthropic
|
|
195
|
+
* @param options - Optional configuration including provider tokens
|
|
196
|
+
* @returns Array with a single user message containing tool results, or empty array if no tool calls
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* import { serverClient } from '@/lib/integrate-server';
|
|
201
|
+
* import { getAnthropicTools, handleAnthropicMessage } from 'integrate-sdk/server';
|
|
202
|
+
* import Anthropic from '@anthropic-ai/sdk';
|
|
203
|
+
*
|
|
204
|
+
* const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
|
|
205
|
+
*
|
|
206
|
+
* export async function POST(req: Request) {
|
|
207
|
+
* const { messages } = await req.json();
|
|
208
|
+
*
|
|
209
|
+
* // Initial request with tools
|
|
210
|
+
* const message = await anthropic.messages.create({
|
|
211
|
+
* model: 'claude-3-5-sonnet-20241022',
|
|
212
|
+
* max_tokens: 1024,
|
|
213
|
+
* tools: await getAnthropicTools(serverClient),
|
|
214
|
+
* messages,
|
|
215
|
+
* });
|
|
216
|
+
*
|
|
217
|
+
* // If there are tool calls, handle them automatically
|
|
218
|
+
* if (message.stop_reason === 'tool_use') {
|
|
219
|
+
* const toolMessages = await handleAnthropicMessage(serverClient, message);
|
|
220
|
+
*
|
|
221
|
+
* // Continue conversation with tool results
|
|
222
|
+
* const finalMessage = await anthropic.messages.create({
|
|
223
|
+
* model: 'claude-3-5-sonnet-20241022',
|
|
224
|
+
* max_tokens: 1024,
|
|
225
|
+
* tools: await getAnthropicTools(serverClient),
|
|
226
|
+
* messages: [
|
|
227
|
+
* ...messages,
|
|
228
|
+
* { role: 'assistant', content: message.content },
|
|
229
|
+
* ...toolMessages,
|
|
230
|
+
* ],
|
|
231
|
+
* });
|
|
232
|
+
*
|
|
233
|
+
* return Response.json(finalMessage);
|
|
234
|
+
* }
|
|
235
|
+
*
|
|
236
|
+
* return Response.json(message);
|
|
237
|
+
* }
|
|
238
|
+
* ```
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* ```typescript
|
|
242
|
+
* // Manual token override
|
|
243
|
+
* const toolMessages = await handleAnthropicMessage(serverClient, message, {
|
|
244
|
+
* providerTokens: { github: 'ghp_...', gmail: 'ya29...' }
|
|
245
|
+
* });
|
|
246
|
+
* ```
|
|
247
|
+
*/
|
|
248
|
+
export declare function handleAnthropicMessage(client: MCPClient<any>, message: Anthropic.Messages.Message, options?: AnthropicToolsOptions): Promise<Anthropic.Messages.MessageParam[]>;
|
|
182
249
|
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,cAAc;CAAI;AAEjE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EACvB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,aAAa,CAUf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,EAAE,CAGjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,cAAc,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC,EAC1D,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAkCrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,EACnC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CA4B5C"}
|
package/dist/src/ai/openai.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { MCPClient } from "../client.js";
|
|
7
7
|
import type { MCPTool } from "../protocol/messages.js";
|
|
8
8
|
import { type AIToolsOptions } from "./utils.js";
|
|
9
|
+
import type { OpenAI } from "openai";
|
|
9
10
|
/**
|
|
10
11
|
* OpenAI function tool definition
|
|
11
12
|
* Compatible with OpenAI's Responses API format
|
|
@@ -124,4 +125,110 @@ export declare function executeOpenAIToolCall(client: MCPClient<any>, toolCall:
|
|
|
124
125
|
* ```
|
|
125
126
|
*/
|
|
126
127
|
export declare function getOpenAITools(client: MCPClient<any>, options?: OpenAIToolsOptions): Promise<OpenAITool[]>;
|
|
128
|
+
/**
|
|
129
|
+
* Handle multiple tool calls from OpenAI's response output
|
|
130
|
+
*
|
|
131
|
+
* This function processes all function_call items from the response output,
|
|
132
|
+
* executes each tool call, and returns formatted results for the next request.
|
|
133
|
+
*
|
|
134
|
+
* @param client - The MCP client instance
|
|
135
|
+
* @param toolCalls - Array of output items from OpenAI response (filters for function_call type)
|
|
136
|
+
* @param options - Optional configuration including provider tokens
|
|
137
|
+
* @returns Array of function call outputs to send back to OpenAI
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* // Handle tool calls from a response
|
|
142
|
+
* const response = await openai.responses.create({
|
|
143
|
+
* model: 'gpt-4o-2024-11-20',
|
|
144
|
+
* input: 'Create a GitHub issue',
|
|
145
|
+
* tools: await getOpenAITools(serverClient),
|
|
146
|
+
* });
|
|
147
|
+
*
|
|
148
|
+
* // Execute the tool calls and get outputs
|
|
149
|
+
* const toolOutputs = await handleOpenAIToolCalls(
|
|
150
|
+
* serverClient,
|
|
151
|
+
* response.output,
|
|
152
|
+
* { providerTokens }
|
|
153
|
+
* );
|
|
154
|
+
*
|
|
155
|
+
* // Continue the conversation with tool results
|
|
156
|
+
* const nextResponse = await openai.responses.create({
|
|
157
|
+
* model: 'gpt-4o-2024-11-20',
|
|
158
|
+
* input: toolOutputs,
|
|
159
|
+
* tools: await getOpenAITools(serverClient),
|
|
160
|
+
* });
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
export declare function handleOpenAIToolCalls(client: MCPClient<any>, toolCalls: OpenAI.Responses.ResponseOutputItem[], options?: OpenAIToolsOptions): Promise<OpenAI.Responses.ResponseInputItem.FunctionCallOutput[]>;
|
|
164
|
+
/**
|
|
165
|
+
* Handle an entire OpenAI Response object
|
|
166
|
+
*
|
|
167
|
+
* This is a convenience function that extracts tool calls from a Response
|
|
168
|
+
* object and executes them. Use this when you want to process all tool
|
|
169
|
+
* calls from a response in one go.
|
|
170
|
+
*
|
|
171
|
+
* **Auto-extraction**: Provider tokens are automatically extracted from request headers
|
|
172
|
+
* or environment variables if not provided in options.
|
|
173
|
+
*
|
|
174
|
+
* @param client - The MCP client instance
|
|
175
|
+
* @param response - The complete Response object from OpenAI
|
|
176
|
+
* @param options - Optional configuration including provider tokens
|
|
177
|
+
* @returns Array of function call outputs to send back to OpenAI
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* import { serverClient } from '@/lib/integrate-server';
|
|
182
|
+
* import { getOpenAITools, handleOpenAIResponse } from 'integrate-sdk/server';
|
|
183
|
+
* import OpenAI from 'openai';
|
|
184
|
+
*
|
|
185
|
+
* const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
|
|
186
|
+
*
|
|
187
|
+
* export async function POST(req: Request) {
|
|
188
|
+
* const { messages } = await req.json();
|
|
189
|
+
*
|
|
190
|
+
* // Initial request with tools
|
|
191
|
+
* const response = await openai.responses.create({
|
|
192
|
+
* model: 'gpt-4o-2024-11-20',
|
|
193
|
+
* input: messages,
|
|
194
|
+
* tools: await getOpenAITools(serverClient),
|
|
195
|
+
* });
|
|
196
|
+
*
|
|
197
|
+
* // If there are tool calls, handle them automatically
|
|
198
|
+
* if (response.output.some(item => item.type === 'function_call')) {
|
|
199
|
+
* const toolOutputs = await handleOpenAIResponse(serverClient, response);
|
|
200
|
+
*
|
|
201
|
+
* // Continue conversation with tool results
|
|
202
|
+
* const finalResponse = await openai.responses.create({
|
|
203
|
+
* model: 'gpt-4o-2024-11-20',
|
|
204
|
+
* input: toolOutputs,
|
|
205
|
+
* tools: await getOpenAITools(serverClient),
|
|
206
|
+
* });
|
|
207
|
+
*
|
|
208
|
+
* return Response.json(finalResponse);
|
|
209
|
+
* }
|
|
210
|
+
*
|
|
211
|
+
* return Response.json(response);
|
|
212
|
+
* }
|
|
213
|
+
* ```
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```typescript
|
|
217
|
+
* // Manual token override
|
|
218
|
+
* const toolOutputs = await handleOpenAIResponse(serverClient, response, {
|
|
219
|
+
* providerTokens: { github: 'ghp_...', gmail: 'ya29...' }
|
|
220
|
+
* });
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
export declare function handleOpenAIResponse(client: MCPClient<any>, response: {
|
|
224
|
+
output: Array<{
|
|
225
|
+
type: string;
|
|
226
|
+
[key: string]: any;
|
|
227
|
+
}>;
|
|
228
|
+
}, options?: OpenAIToolsOptions): Promise<OpenAI.Responses.ResponseInputItem.FunctionCallOutput[] | {
|
|
229
|
+
output: Array<{
|
|
230
|
+
type: string;
|
|
231
|
+
[key: string]: any;
|
|
232
|
+
}>;
|
|
233
|
+
}>;
|
|
127
234
|
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EACvB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,UAAU,CAUZ;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,UAAU,EAAE,CAGd;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAevB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAChD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CA+BlE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,EAChE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyB3H"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "integrate-sdk",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.40",
|
|
4
4
|
"description": "Type-safe 3rd party integration SDK for the Integrate MCP server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -71,8 +71,10 @@
|
|
|
71
71
|
"zod": "^3.23.8"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
|
+
"@anthropic-ai/sdk": "^0.32.1",
|
|
74
75
|
"@types/bun": "latest",
|
|
75
76
|
"@types/react": "^18.3.0",
|
|
77
|
+
"openai": "^4.77.3",
|
|
76
78
|
"react": "^19.2.0",
|
|
77
79
|
"simple-git-hooks": "^2.13.1",
|
|
78
80
|
"typescript": "^5.3.3"
|