integrate-sdk 0.9.5-dev.0 → 0.9.8-dev.0
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/adapters/auto-routes.js +69 -9
- package/dist/adapters/index.js +69 -9
- package/dist/adapters/nextjs.js +69 -9
- package/dist/adapters/node.js +69 -9
- package/dist/adapters/svelte-kit.js +69 -9
- package/dist/adapters/tanstack-start.js +69 -9
- package/dist/ai/anthropic.d.ts +2 -2
- package/dist/ai/anthropic.d.ts.map +1 -1
- package/dist/ai/anthropic.js +38 -2
- package/dist/ai/google.d.ts +2 -2
- package/dist/ai/google.d.ts.map +1 -1
- package/dist/ai/google.js +38 -2
- package/dist/ai/index.js +44 -8
- package/dist/ai/openai.d.ts +2 -2
- package/dist/ai/openai.d.ts.map +1 -1
- package/dist/ai/openai.js +38 -2
- package/dist/ai/vercel-ai.d.ts +2 -2
- package/dist/ai/vercel-ai.d.ts.map +1 -1
- package/dist/ai/vercel-ai.js +38 -2
- package/dist/code-mode/executor.d.ts +5 -0
- package/dist/code-mode/executor.d.ts.map +1 -1
- package/dist/code-mode/executor.js +35 -0
- package/dist/code-mode/index.d.ts +1 -1
- package/dist/code-mode/index.d.ts.map +1 -1
- package/dist/code-mode/index.js +43 -0
- package/dist/code-mode/runtime-stub.d.ts +1 -1
- package/dist/code-mode/runtime-stub.d.ts.map +1 -1
- package/dist/code-mode/runtime-stub.js +2 -0
- package/dist/code-mode/tool-builder.d.ts +1 -0
- package/dist/code-mode/tool-builder.d.ts.map +1 -1
- package/dist/code-mode/tool-builder.js +43 -0
- package/dist/index.js +69 -9
- package/dist/oauth.js +69 -9
- package/dist/server.js +69 -9
- package/dist/src/ai/anthropic.d.ts +2 -2
- package/dist/src/ai/anthropic.d.ts.map +1 -1
- package/dist/src/ai/google.d.ts +2 -2
- package/dist/src/ai/google.d.ts.map +1 -1
- package/dist/src/ai/openai.d.ts +2 -2
- package/dist/src/ai/openai.d.ts.map +1 -1
- package/dist/src/ai/vercel-ai.d.ts +2 -2
- package/dist/src/ai/vercel-ai.d.ts.map +1 -1
- package/dist/src/code-mode/executor.d.ts +5 -0
- package/dist/src/code-mode/executor.d.ts.map +1 -1
- package/dist/src/code-mode/index.d.ts +1 -1
- package/dist/src/code-mode/index.d.ts.map +1 -1
- package/dist/src/code-mode/runtime-stub.d.ts +1 -1
- package/dist/src/code-mode/runtime-stub.d.ts.map +1 -1
- package/dist/src/code-mode/tool-builder.d.ts +1 -0
- package/dist/src/code-mode/tool-builder.d.ts.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/package.json +3 -6
package/dist/adapters/node.js
CHANGED
|
@@ -8541,6 +8541,7 @@ var init_type_generator = __esm(() => {
|
|
|
8541
8541
|
var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
|
|
8542
8542
|
const MCP_URL = process.env.INTEGRATE_MCP_URL;
|
|
8543
8543
|
const SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;
|
|
8544
|
+
const API_KEY = process.env.INTEGRATE_API_KEY || '';
|
|
8544
8545
|
const PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';
|
|
8545
8546
|
const INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';
|
|
8546
8547
|
const CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';
|
|
@@ -8559,6 +8560,7 @@ async function callTool(toolName, args) {
|
|
|
8559
8560
|
'x-integrate-code-mode': '1',
|
|
8560
8561
|
};
|
|
8561
8562
|
if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;
|
|
8563
|
+
if (API_KEY) headers['x-integrate-api-key'] = API_KEY;
|
|
8562
8564
|
if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;
|
|
8563
8565
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
8564
8566
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
@@ -8610,11 +8612,40 @@ export { callTool };
|
|
|
8610
8612
|
// ../code-mode/executor.ts
|
|
8611
8613
|
var exports_executor = {};
|
|
8612
8614
|
__export(exports_executor, {
|
|
8615
|
+
isSandboxAvailable: () => isSandboxAvailable,
|
|
8613
8616
|
executeSandboxCode: () => executeSandboxCode,
|
|
8617
|
+
__setSandboxUnavailableForTests: () => __setSandboxUnavailableForTests,
|
|
8614
8618
|
__setSandboxFactoryForTests: () => __setSandboxFactoryForTests
|
|
8615
8619
|
});
|
|
8616
8620
|
function __setSandboxFactoryForTests(factory) {
|
|
8617
8621
|
sandboxFactoryOverride = factory;
|
|
8622
|
+
_sandboxForcedUnavailableForTests = false;
|
|
8623
|
+
_sandboxAvailableCache = null;
|
|
8624
|
+
}
|
|
8625
|
+
function __setSandboxUnavailableForTests(force) {
|
|
8626
|
+
_sandboxForcedUnavailableForTests = force;
|
|
8627
|
+
_sandboxAvailableCache = null;
|
|
8628
|
+
}
|
|
8629
|
+
async function isSandboxAvailable() {
|
|
8630
|
+
if (_sandboxAvailableCache !== null)
|
|
8631
|
+
return _sandboxAvailableCache;
|
|
8632
|
+
if (_sandboxForcedUnavailableForTests) {
|
|
8633
|
+
_sandboxAvailableCache = false;
|
|
8634
|
+
return false;
|
|
8635
|
+
}
|
|
8636
|
+
if (sandboxFactoryOverride) {
|
|
8637
|
+
_sandboxAvailableCache = true;
|
|
8638
|
+
return true;
|
|
8639
|
+
}
|
|
8640
|
+
try {
|
|
8641
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
8642
|
+
await dynamicImport("@" + "vercel/sandbox");
|
|
8643
|
+
_sandboxAvailableCache = true;
|
|
8644
|
+
return true;
|
|
8645
|
+
} catch {
|
|
8646
|
+
_sandboxAvailableCache = false;
|
|
8647
|
+
return false;
|
|
8648
|
+
}
|
|
8618
8649
|
}
|
|
8619
8650
|
async function loadSandboxFactory() {
|
|
8620
8651
|
if (sandboxFactoryOverride)
|
|
@@ -8701,6 +8732,8 @@ async function executeSandboxCode(options) {
|
|
|
8701
8732
|
const env = {
|
|
8702
8733
|
INTEGRATE_MCP_URL: options.mcpUrl
|
|
8703
8734
|
};
|
|
8735
|
+
if (options.apiKey)
|
|
8736
|
+
env.INTEGRATE_API_KEY = options.apiKey;
|
|
8704
8737
|
if (options.sessionToken)
|
|
8705
8738
|
env.INTEGRATE_SESSION_TOKEN = options.sessionToken;
|
|
8706
8739
|
if (options.providerTokens && Object.keys(options.providerTokens).length > 0) {
|
|
@@ -8743,7 +8776,7 @@ async function executeSandboxCode(options) {
|
|
|
8743
8776
|
}
|
|
8744
8777
|
}
|
|
8745
8778
|
}
|
|
8746
|
-
var sandboxFactoryOverride = null, RESULT_SENTINEL = "__INTEGRATE_RESULT__";
|
|
8779
|
+
var sandboxFactoryOverride = null, _sandboxAvailableCache = null, _sandboxForcedUnavailableForTests = false, RESULT_SENTINEL = "__INTEGRATE_RESULT__";
|
|
8747
8780
|
var init_executor = () => {};
|
|
8748
8781
|
|
|
8749
8782
|
// ../code-mode/tool-builder.ts
|
|
@@ -8751,6 +8784,13 @@ function resolveCodeModeClientConfig(client) {
|
|
|
8751
8784
|
const oauthConfig = client.__oauthConfig;
|
|
8752
8785
|
return oauthConfig?.codeMode ?? {};
|
|
8753
8786
|
}
|
|
8787
|
+
async function canUseCodeMode(client) {
|
|
8788
|
+
if (!await isSandboxAvailable())
|
|
8789
|
+
return false;
|
|
8790
|
+
const serverConfig = resolveCodeModeClientConfig(client);
|
|
8791
|
+
const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
8792
|
+
return !!publicUrl;
|
|
8793
|
+
}
|
|
8754
8794
|
function buildCodeModeTool(client, options) {
|
|
8755
8795
|
const { tools, providerTokens, context, integrationIds } = options;
|
|
8756
8796
|
const generated = generateCodeModeTypes(tools);
|
|
@@ -8763,6 +8803,7 @@ ${generated.source}
|
|
|
8763
8803
|
\`\`\``;
|
|
8764
8804
|
const execute = async ({ code }) => {
|
|
8765
8805
|
const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
8806
|
+
const apiKey = client.__oauthConfig?.apiKey;
|
|
8766
8807
|
if (!publicUrl) {
|
|
8767
8808
|
return {
|
|
8768
8809
|
success: false,
|
|
@@ -8777,6 +8818,7 @@ ${generated.source}
|
|
|
8777
8818
|
return executeSandboxCode({
|
|
8778
8819
|
code,
|
|
8779
8820
|
mcpUrl,
|
|
8821
|
+
apiKey,
|
|
8780
8822
|
providerTokens,
|
|
8781
8823
|
context,
|
|
8782
8824
|
integrationsHeader: integrationIds && integrationIds.length > 0 ? integrationIds.join(",") : undefined,
|
|
@@ -8854,8 +8896,8 @@ async function getVercelAITools(client, options) {
|
|
|
8854
8896
|
await ensureClientConnected(client);
|
|
8855
8897
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
8856
8898
|
const vercelTools = {};
|
|
8857
|
-
const
|
|
8858
|
-
if (
|
|
8899
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
8900
|
+
if (effectiveMode === "code") {
|
|
8859
8901
|
const codeTool = buildCodeModeTool(client, {
|
|
8860
8902
|
tools: mcpTools,
|
|
8861
8903
|
providerTokens,
|
|
@@ -10313,8 +10355,8 @@ async function getOpenAITools(client, options) {
|
|
|
10313
10355
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10314
10356
|
await ensureClientConnected(client);
|
|
10315
10357
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10316
|
-
const
|
|
10317
|
-
const openaiTools =
|
|
10358
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10359
|
+
const openaiTools = effectiveMode === "code" ? (() => {
|
|
10318
10360
|
const codeTool = buildCodeModeTool(client, {
|
|
10319
10361
|
tools: mcpTools,
|
|
10320
10362
|
providerTokens,
|
|
@@ -10493,8 +10535,8 @@ async function getAnthropicTools(client, options) {
|
|
|
10493
10535
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10494
10536
|
await ensureClientConnected(client);
|
|
10495
10537
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10496
|
-
const
|
|
10497
|
-
const anthropicTools =
|
|
10538
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10539
|
+
const anthropicTools = effectiveMode === "code" ? (() => {
|
|
10498
10540
|
const codeTool = buildCodeModeTool(client, {
|
|
10499
10541
|
tools: mcpTools,
|
|
10500
10542
|
providerTokens,
|
|
@@ -10682,9 +10724,9 @@ async function getGoogleTools(client, options) {
|
|
|
10682
10724
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10683
10725
|
await ensureClientConnected(client);
|
|
10684
10726
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10685
|
-
const
|
|
10727
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10686
10728
|
let googleTools;
|
|
10687
|
-
if (
|
|
10729
|
+
if (effectiveMode === "code") {
|
|
10688
10730
|
const TypeEnum = await getGoogleType();
|
|
10689
10731
|
const codeTool = buildCodeModeTool(client, {
|
|
10690
10732
|
tools: mcpTools,
|
|
@@ -11231,6 +11273,24 @@ function createMCPServer(config) {
|
|
|
11231
11273
|
} catch {}
|
|
11232
11274
|
}
|
|
11233
11275
|
}
|
|
11276
|
+
if (!authHeader && config.getProviderToken) {
|
|
11277
|
+
const codeModeHeader = webRequest.headers.get("x-integrate-code-mode");
|
|
11278
|
+
const contextHeader = webRequest.headers.get("x-integrate-context");
|
|
11279
|
+
const callbackApiKey = webRequest.headers.get("x-integrate-api-key");
|
|
11280
|
+
const toolName = typeof body?.name === "string" ? body.name : "";
|
|
11281
|
+
if (codeModeHeader === "1" && contextHeader && toolName && config.apiKey && callbackApiKey === config.apiKey) {
|
|
11282
|
+
try {
|
|
11283
|
+
const context2 = JSON.parse(contextHeader);
|
|
11284
|
+
const provider = toolName.split("_")[0];
|
|
11285
|
+
if (provider) {
|
|
11286
|
+
const tokenData = await config.getProviderToken(provider, undefined, context2);
|
|
11287
|
+
if (tokenData?.accessToken) {
|
|
11288
|
+
authHeader = `Bearer ${tokenData.accessToken}`;
|
|
11289
|
+
}
|
|
11290
|
+
}
|
|
11291
|
+
} catch {}
|
|
11292
|
+
}
|
|
11293
|
+
}
|
|
11234
11294
|
const { OAuthHandler } = await Promise.resolve().then(() => (init_base_handler(), exports_base_handler));
|
|
11235
11295
|
const oauthHandler = new OAuthHandler({
|
|
11236
11296
|
providers,
|
|
@@ -8541,6 +8541,7 @@ var init_type_generator = __esm(() => {
|
|
|
8541
8541
|
var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
|
|
8542
8542
|
const MCP_URL = process.env.INTEGRATE_MCP_URL;
|
|
8543
8543
|
const SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;
|
|
8544
|
+
const API_KEY = process.env.INTEGRATE_API_KEY || '';
|
|
8544
8545
|
const PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';
|
|
8545
8546
|
const INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';
|
|
8546
8547
|
const CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';
|
|
@@ -8559,6 +8560,7 @@ async function callTool(toolName, args) {
|
|
|
8559
8560
|
'x-integrate-code-mode': '1',
|
|
8560
8561
|
};
|
|
8561
8562
|
if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;
|
|
8563
|
+
if (API_KEY) headers['x-integrate-api-key'] = API_KEY;
|
|
8562
8564
|
if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;
|
|
8563
8565
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
8564
8566
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
@@ -8610,11 +8612,40 @@ export { callTool };
|
|
|
8610
8612
|
// ../code-mode/executor.ts
|
|
8611
8613
|
var exports_executor = {};
|
|
8612
8614
|
__export(exports_executor, {
|
|
8615
|
+
isSandboxAvailable: () => isSandboxAvailable,
|
|
8613
8616
|
executeSandboxCode: () => executeSandboxCode,
|
|
8617
|
+
__setSandboxUnavailableForTests: () => __setSandboxUnavailableForTests,
|
|
8614
8618
|
__setSandboxFactoryForTests: () => __setSandboxFactoryForTests
|
|
8615
8619
|
});
|
|
8616
8620
|
function __setSandboxFactoryForTests(factory) {
|
|
8617
8621
|
sandboxFactoryOverride = factory;
|
|
8622
|
+
_sandboxForcedUnavailableForTests = false;
|
|
8623
|
+
_sandboxAvailableCache = null;
|
|
8624
|
+
}
|
|
8625
|
+
function __setSandboxUnavailableForTests(force) {
|
|
8626
|
+
_sandboxForcedUnavailableForTests = force;
|
|
8627
|
+
_sandboxAvailableCache = null;
|
|
8628
|
+
}
|
|
8629
|
+
async function isSandboxAvailable() {
|
|
8630
|
+
if (_sandboxAvailableCache !== null)
|
|
8631
|
+
return _sandboxAvailableCache;
|
|
8632
|
+
if (_sandboxForcedUnavailableForTests) {
|
|
8633
|
+
_sandboxAvailableCache = false;
|
|
8634
|
+
return false;
|
|
8635
|
+
}
|
|
8636
|
+
if (sandboxFactoryOverride) {
|
|
8637
|
+
_sandboxAvailableCache = true;
|
|
8638
|
+
return true;
|
|
8639
|
+
}
|
|
8640
|
+
try {
|
|
8641
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
8642
|
+
await dynamicImport("@" + "vercel/sandbox");
|
|
8643
|
+
_sandboxAvailableCache = true;
|
|
8644
|
+
return true;
|
|
8645
|
+
} catch {
|
|
8646
|
+
_sandboxAvailableCache = false;
|
|
8647
|
+
return false;
|
|
8648
|
+
}
|
|
8618
8649
|
}
|
|
8619
8650
|
async function loadSandboxFactory() {
|
|
8620
8651
|
if (sandboxFactoryOverride)
|
|
@@ -8701,6 +8732,8 @@ async function executeSandboxCode(options) {
|
|
|
8701
8732
|
const env = {
|
|
8702
8733
|
INTEGRATE_MCP_URL: options.mcpUrl
|
|
8703
8734
|
};
|
|
8735
|
+
if (options.apiKey)
|
|
8736
|
+
env.INTEGRATE_API_KEY = options.apiKey;
|
|
8704
8737
|
if (options.sessionToken)
|
|
8705
8738
|
env.INTEGRATE_SESSION_TOKEN = options.sessionToken;
|
|
8706
8739
|
if (options.providerTokens && Object.keys(options.providerTokens).length > 0) {
|
|
@@ -8743,7 +8776,7 @@ async function executeSandboxCode(options) {
|
|
|
8743
8776
|
}
|
|
8744
8777
|
}
|
|
8745
8778
|
}
|
|
8746
|
-
var sandboxFactoryOverride = null, RESULT_SENTINEL = "__INTEGRATE_RESULT__";
|
|
8779
|
+
var sandboxFactoryOverride = null, _sandboxAvailableCache = null, _sandboxForcedUnavailableForTests = false, RESULT_SENTINEL = "__INTEGRATE_RESULT__";
|
|
8747
8780
|
var init_executor = () => {};
|
|
8748
8781
|
|
|
8749
8782
|
// ../code-mode/tool-builder.ts
|
|
@@ -8751,6 +8784,13 @@ function resolveCodeModeClientConfig(client) {
|
|
|
8751
8784
|
const oauthConfig = client.__oauthConfig;
|
|
8752
8785
|
return oauthConfig?.codeMode ?? {};
|
|
8753
8786
|
}
|
|
8787
|
+
async function canUseCodeMode(client) {
|
|
8788
|
+
if (!await isSandboxAvailable())
|
|
8789
|
+
return false;
|
|
8790
|
+
const serverConfig = resolveCodeModeClientConfig(client);
|
|
8791
|
+
const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
8792
|
+
return !!publicUrl;
|
|
8793
|
+
}
|
|
8754
8794
|
function buildCodeModeTool(client, options) {
|
|
8755
8795
|
const { tools, providerTokens, context, integrationIds } = options;
|
|
8756
8796
|
const generated = generateCodeModeTypes(tools);
|
|
@@ -8763,6 +8803,7 @@ ${generated.source}
|
|
|
8763
8803
|
\`\`\``;
|
|
8764
8804
|
const execute = async ({ code }) => {
|
|
8765
8805
|
const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
8806
|
+
const apiKey = client.__oauthConfig?.apiKey;
|
|
8766
8807
|
if (!publicUrl) {
|
|
8767
8808
|
return {
|
|
8768
8809
|
success: false,
|
|
@@ -8777,6 +8818,7 @@ ${generated.source}
|
|
|
8777
8818
|
return executeSandboxCode({
|
|
8778
8819
|
code,
|
|
8779
8820
|
mcpUrl,
|
|
8821
|
+
apiKey,
|
|
8780
8822
|
providerTokens,
|
|
8781
8823
|
context,
|
|
8782
8824
|
integrationsHeader: integrationIds && integrationIds.length > 0 ? integrationIds.join(",") : undefined,
|
|
@@ -8854,8 +8896,8 @@ async function getVercelAITools(client, options) {
|
|
|
8854
8896
|
await ensureClientConnected(client);
|
|
8855
8897
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
8856
8898
|
const vercelTools = {};
|
|
8857
|
-
const
|
|
8858
|
-
if (
|
|
8899
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
8900
|
+
if (effectiveMode === "code") {
|
|
8859
8901
|
const codeTool = buildCodeModeTool(client, {
|
|
8860
8902
|
tools: mcpTools,
|
|
8861
8903
|
providerTokens,
|
|
@@ -10313,8 +10355,8 @@ async function getOpenAITools(client, options) {
|
|
|
10313
10355
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10314
10356
|
await ensureClientConnected(client);
|
|
10315
10357
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10316
|
-
const
|
|
10317
|
-
const openaiTools =
|
|
10358
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10359
|
+
const openaiTools = effectiveMode === "code" ? (() => {
|
|
10318
10360
|
const codeTool = buildCodeModeTool(client, {
|
|
10319
10361
|
tools: mcpTools,
|
|
10320
10362
|
providerTokens,
|
|
@@ -10493,8 +10535,8 @@ async function getAnthropicTools(client, options) {
|
|
|
10493
10535
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10494
10536
|
await ensureClientConnected(client);
|
|
10495
10537
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10496
|
-
const
|
|
10497
|
-
const anthropicTools =
|
|
10538
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10539
|
+
const anthropicTools = effectiveMode === "code" ? (() => {
|
|
10498
10540
|
const codeTool = buildCodeModeTool(client, {
|
|
10499
10541
|
tools: mcpTools,
|
|
10500
10542
|
providerTokens,
|
|
@@ -10682,9 +10724,9 @@ async function getGoogleTools(client, options) {
|
|
|
10682
10724
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10683
10725
|
await ensureClientConnected(client);
|
|
10684
10726
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10685
|
-
const
|
|
10727
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10686
10728
|
let googleTools;
|
|
10687
|
-
if (
|
|
10729
|
+
if (effectiveMode === "code") {
|
|
10688
10730
|
const TypeEnum = await getGoogleType();
|
|
10689
10731
|
const codeTool = buildCodeModeTool(client, {
|
|
10690
10732
|
tools: mcpTools,
|
|
@@ -11231,6 +11273,24 @@ function createMCPServer(config) {
|
|
|
11231
11273
|
} catch {}
|
|
11232
11274
|
}
|
|
11233
11275
|
}
|
|
11276
|
+
if (!authHeader && config.getProviderToken) {
|
|
11277
|
+
const codeModeHeader = webRequest.headers.get("x-integrate-code-mode");
|
|
11278
|
+
const contextHeader = webRequest.headers.get("x-integrate-context");
|
|
11279
|
+
const callbackApiKey = webRequest.headers.get("x-integrate-api-key");
|
|
11280
|
+
const toolName = typeof body?.name === "string" ? body.name : "";
|
|
11281
|
+
if (codeModeHeader === "1" && contextHeader && toolName && config.apiKey && callbackApiKey === config.apiKey) {
|
|
11282
|
+
try {
|
|
11283
|
+
const context2 = JSON.parse(contextHeader);
|
|
11284
|
+
const provider = toolName.split("_")[0];
|
|
11285
|
+
if (provider) {
|
|
11286
|
+
const tokenData = await config.getProviderToken(provider, undefined, context2);
|
|
11287
|
+
if (tokenData?.accessToken) {
|
|
11288
|
+
authHeader = `Bearer ${tokenData.accessToken}`;
|
|
11289
|
+
}
|
|
11290
|
+
}
|
|
11291
|
+
} catch {}
|
|
11292
|
+
}
|
|
11293
|
+
}
|
|
11234
11294
|
const { OAuthHandler } = await Promise.resolve().then(() => (init_base_handler(), exports_base_handler));
|
|
11235
11295
|
const oauthHandler = new OAuthHandler({
|
|
11236
11296
|
providers,
|
|
@@ -8541,6 +8541,7 @@ var init_type_generator = __esm(() => {
|
|
|
8541
8541
|
var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
|
|
8542
8542
|
const MCP_URL = process.env.INTEGRATE_MCP_URL;
|
|
8543
8543
|
const SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;
|
|
8544
|
+
const API_KEY = process.env.INTEGRATE_API_KEY || '';
|
|
8544
8545
|
const PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';
|
|
8545
8546
|
const INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';
|
|
8546
8547
|
const CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';
|
|
@@ -8559,6 +8560,7 @@ async function callTool(toolName, args) {
|
|
|
8559
8560
|
'x-integrate-code-mode': '1',
|
|
8560
8561
|
};
|
|
8561
8562
|
if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;
|
|
8563
|
+
if (API_KEY) headers['x-integrate-api-key'] = API_KEY;
|
|
8562
8564
|
if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;
|
|
8563
8565
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
8564
8566
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
@@ -8610,11 +8612,40 @@ export { callTool };
|
|
|
8610
8612
|
// ../code-mode/executor.ts
|
|
8611
8613
|
var exports_executor = {};
|
|
8612
8614
|
__export(exports_executor, {
|
|
8615
|
+
isSandboxAvailable: () => isSandboxAvailable,
|
|
8613
8616
|
executeSandboxCode: () => executeSandboxCode,
|
|
8617
|
+
__setSandboxUnavailableForTests: () => __setSandboxUnavailableForTests,
|
|
8614
8618
|
__setSandboxFactoryForTests: () => __setSandboxFactoryForTests
|
|
8615
8619
|
});
|
|
8616
8620
|
function __setSandboxFactoryForTests(factory) {
|
|
8617
8621
|
sandboxFactoryOverride = factory;
|
|
8622
|
+
_sandboxForcedUnavailableForTests = false;
|
|
8623
|
+
_sandboxAvailableCache = null;
|
|
8624
|
+
}
|
|
8625
|
+
function __setSandboxUnavailableForTests(force) {
|
|
8626
|
+
_sandboxForcedUnavailableForTests = force;
|
|
8627
|
+
_sandboxAvailableCache = null;
|
|
8628
|
+
}
|
|
8629
|
+
async function isSandboxAvailable() {
|
|
8630
|
+
if (_sandboxAvailableCache !== null)
|
|
8631
|
+
return _sandboxAvailableCache;
|
|
8632
|
+
if (_sandboxForcedUnavailableForTests) {
|
|
8633
|
+
_sandboxAvailableCache = false;
|
|
8634
|
+
return false;
|
|
8635
|
+
}
|
|
8636
|
+
if (sandboxFactoryOverride) {
|
|
8637
|
+
_sandboxAvailableCache = true;
|
|
8638
|
+
return true;
|
|
8639
|
+
}
|
|
8640
|
+
try {
|
|
8641
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
8642
|
+
await dynamicImport("@" + "vercel/sandbox");
|
|
8643
|
+
_sandboxAvailableCache = true;
|
|
8644
|
+
return true;
|
|
8645
|
+
} catch {
|
|
8646
|
+
_sandboxAvailableCache = false;
|
|
8647
|
+
return false;
|
|
8648
|
+
}
|
|
8618
8649
|
}
|
|
8619
8650
|
async function loadSandboxFactory() {
|
|
8620
8651
|
if (sandboxFactoryOverride)
|
|
@@ -8701,6 +8732,8 @@ async function executeSandboxCode(options) {
|
|
|
8701
8732
|
const env = {
|
|
8702
8733
|
INTEGRATE_MCP_URL: options.mcpUrl
|
|
8703
8734
|
};
|
|
8735
|
+
if (options.apiKey)
|
|
8736
|
+
env.INTEGRATE_API_KEY = options.apiKey;
|
|
8704
8737
|
if (options.sessionToken)
|
|
8705
8738
|
env.INTEGRATE_SESSION_TOKEN = options.sessionToken;
|
|
8706
8739
|
if (options.providerTokens && Object.keys(options.providerTokens).length > 0) {
|
|
@@ -8743,7 +8776,7 @@ async function executeSandboxCode(options) {
|
|
|
8743
8776
|
}
|
|
8744
8777
|
}
|
|
8745
8778
|
}
|
|
8746
|
-
var sandboxFactoryOverride = null, RESULT_SENTINEL = "__INTEGRATE_RESULT__";
|
|
8779
|
+
var sandboxFactoryOverride = null, _sandboxAvailableCache = null, _sandboxForcedUnavailableForTests = false, RESULT_SENTINEL = "__INTEGRATE_RESULT__";
|
|
8747
8780
|
var init_executor = () => {};
|
|
8748
8781
|
|
|
8749
8782
|
// ../code-mode/tool-builder.ts
|
|
@@ -8751,6 +8784,13 @@ function resolveCodeModeClientConfig(client) {
|
|
|
8751
8784
|
const oauthConfig = client.__oauthConfig;
|
|
8752
8785
|
return oauthConfig?.codeMode ?? {};
|
|
8753
8786
|
}
|
|
8787
|
+
async function canUseCodeMode(client) {
|
|
8788
|
+
if (!await isSandboxAvailable())
|
|
8789
|
+
return false;
|
|
8790
|
+
const serverConfig = resolveCodeModeClientConfig(client);
|
|
8791
|
+
const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
8792
|
+
return !!publicUrl;
|
|
8793
|
+
}
|
|
8754
8794
|
function buildCodeModeTool(client, options) {
|
|
8755
8795
|
const { tools, providerTokens, context, integrationIds } = options;
|
|
8756
8796
|
const generated = generateCodeModeTypes(tools);
|
|
@@ -8763,6 +8803,7 @@ ${generated.source}
|
|
|
8763
8803
|
\`\`\``;
|
|
8764
8804
|
const execute = async ({ code }) => {
|
|
8765
8805
|
const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
8806
|
+
const apiKey = client.__oauthConfig?.apiKey;
|
|
8766
8807
|
if (!publicUrl) {
|
|
8767
8808
|
return {
|
|
8768
8809
|
success: false,
|
|
@@ -8777,6 +8818,7 @@ ${generated.source}
|
|
|
8777
8818
|
return executeSandboxCode({
|
|
8778
8819
|
code,
|
|
8779
8820
|
mcpUrl,
|
|
8821
|
+
apiKey,
|
|
8780
8822
|
providerTokens,
|
|
8781
8823
|
context,
|
|
8782
8824
|
integrationsHeader: integrationIds && integrationIds.length > 0 ? integrationIds.join(",") : undefined,
|
|
@@ -8854,8 +8896,8 @@ async function getVercelAITools(client, options) {
|
|
|
8854
8896
|
await ensureClientConnected(client);
|
|
8855
8897
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
8856
8898
|
const vercelTools = {};
|
|
8857
|
-
const
|
|
8858
|
-
if (
|
|
8899
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
8900
|
+
if (effectiveMode === "code") {
|
|
8859
8901
|
const codeTool = buildCodeModeTool(client, {
|
|
8860
8902
|
tools: mcpTools,
|
|
8861
8903
|
providerTokens,
|
|
@@ -10313,8 +10355,8 @@ async function getOpenAITools(client, options) {
|
|
|
10313
10355
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10314
10356
|
await ensureClientConnected(client);
|
|
10315
10357
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10316
|
-
const
|
|
10317
|
-
const openaiTools =
|
|
10358
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10359
|
+
const openaiTools = effectiveMode === "code" ? (() => {
|
|
10318
10360
|
const codeTool = buildCodeModeTool(client, {
|
|
10319
10361
|
tools: mcpTools,
|
|
10320
10362
|
providerTokens,
|
|
@@ -10493,8 +10535,8 @@ async function getAnthropicTools(client, options) {
|
|
|
10493
10535
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10494
10536
|
await ensureClientConnected(client);
|
|
10495
10537
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10496
|
-
const
|
|
10497
|
-
const anthropicTools =
|
|
10538
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10539
|
+
const anthropicTools = effectiveMode === "code" ? (() => {
|
|
10498
10540
|
const codeTool = buildCodeModeTool(client, {
|
|
10499
10541
|
tools: mcpTools,
|
|
10500
10542
|
providerTokens,
|
|
@@ -10682,9 +10724,9 @@ async function getGoogleTools(client, options) {
|
|
|
10682
10724
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10683
10725
|
await ensureClientConnected(client);
|
|
10684
10726
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10685
|
-
const
|
|
10727
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10686
10728
|
let googleTools;
|
|
10687
|
-
if (
|
|
10729
|
+
if (effectiveMode === "code") {
|
|
10688
10730
|
const TypeEnum = await getGoogleType();
|
|
10689
10731
|
const codeTool = buildCodeModeTool(client, {
|
|
10690
10732
|
tools: mcpTools,
|
|
@@ -11231,6 +11273,24 @@ function createMCPServer(config) {
|
|
|
11231
11273
|
} catch {}
|
|
11232
11274
|
}
|
|
11233
11275
|
}
|
|
11276
|
+
if (!authHeader && config.getProviderToken) {
|
|
11277
|
+
const codeModeHeader = webRequest.headers.get("x-integrate-code-mode");
|
|
11278
|
+
const contextHeader = webRequest.headers.get("x-integrate-context");
|
|
11279
|
+
const callbackApiKey = webRequest.headers.get("x-integrate-api-key");
|
|
11280
|
+
const toolName = typeof body?.name === "string" ? body.name : "";
|
|
11281
|
+
if (codeModeHeader === "1" && contextHeader && toolName && config.apiKey && callbackApiKey === config.apiKey) {
|
|
11282
|
+
try {
|
|
11283
|
+
const context2 = JSON.parse(contextHeader);
|
|
11284
|
+
const provider = toolName.split("_")[0];
|
|
11285
|
+
if (provider) {
|
|
11286
|
+
const tokenData = await config.getProviderToken(provider, undefined, context2);
|
|
11287
|
+
if (tokenData?.accessToken) {
|
|
11288
|
+
authHeader = `Bearer ${tokenData.accessToken}`;
|
|
11289
|
+
}
|
|
11290
|
+
}
|
|
11291
|
+
} catch {}
|
|
11292
|
+
}
|
|
11293
|
+
}
|
|
11234
11294
|
const { OAuthHandler } = await Promise.resolve().then(() => (init_base_handler(), exports_base_handler));
|
|
11235
11295
|
const oauthHandler = new OAuthHandler({
|
|
11236
11296
|
providers,
|
package/dist/ai/anthropic.d.ts
CHANGED
|
@@ -30,12 +30,12 @@ export interface AnthropicToolsOptions extends AIToolsOptions {
|
|
|
30
30
|
/**
|
|
31
31
|
* How to expose MCP tools to the model.
|
|
32
32
|
*
|
|
33
|
-
* - `'code'
|
|
33
|
+
* - `'code'`: Returns a single `execute_code` tool backed by a
|
|
34
34
|
* Vercel Sandbox. The model writes TypeScript that calls the typed
|
|
35
35
|
* `client.<integration>.<method>()` API and chains operations in one round-trip.
|
|
36
36
|
* - `'tools'`: Legacy behavior — one Anthropic tool per MCP tool.
|
|
37
37
|
*
|
|
38
|
-
* @default 'code'
|
|
38
|
+
* @default auto-detects `'code'` when sandbox + public URL are available, otherwise `'tools'`
|
|
39
39
|
*/
|
|
40
40
|
mode?: 'code' | 'tools';
|
|
41
41
|
}
|
|
@@ -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;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,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;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAQjH,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;IAC3D,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED;;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;AA4ID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC,CAmE1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpG,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAkC5I"}
|
package/dist/ai/anthropic.js
CHANGED
|
@@ -4621,6 +4621,7 @@ function pascalCase(id) {
|
|
|
4621
4621
|
var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
|
|
4622
4622
|
const MCP_URL = process.env.INTEGRATE_MCP_URL;
|
|
4623
4623
|
const SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;
|
|
4624
|
+
const API_KEY = process.env.INTEGRATE_API_KEY || '';
|
|
4624
4625
|
const PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';
|
|
4625
4626
|
const INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';
|
|
4626
4627
|
const CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';
|
|
@@ -4639,6 +4640,7 @@ async function callTool(toolName, args) {
|
|
|
4639
4640
|
'x-integrate-code-mode': '1',
|
|
4640
4641
|
};
|
|
4641
4642
|
if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;
|
|
4643
|
+
if (API_KEY) headers['x-integrate-api-key'] = API_KEY;
|
|
4642
4644
|
if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;
|
|
4643
4645
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
4644
4646
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
@@ -4689,6 +4691,29 @@ export { callTool };
|
|
|
4689
4691
|
|
|
4690
4692
|
// ../code-mode/executor.ts
|
|
4691
4693
|
var sandboxFactoryOverride = null;
|
|
4694
|
+
var _sandboxAvailableCache = null;
|
|
4695
|
+
var _sandboxForcedUnavailableForTests = false;
|
|
4696
|
+
async function isSandboxAvailable() {
|
|
4697
|
+
if (_sandboxAvailableCache !== null)
|
|
4698
|
+
return _sandboxAvailableCache;
|
|
4699
|
+
if (_sandboxForcedUnavailableForTests) {
|
|
4700
|
+
_sandboxAvailableCache = false;
|
|
4701
|
+
return false;
|
|
4702
|
+
}
|
|
4703
|
+
if (sandboxFactoryOverride) {
|
|
4704
|
+
_sandboxAvailableCache = true;
|
|
4705
|
+
return true;
|
|
4706
|
+
}
|
|
4707
|
+
try {
|
|
4708
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
4709
|
+
await dynamicImport("@" + "vercel/sandbox");
|
|
4710
|
+
_sandboxAvailableCache = true;
|
|
4711
|
+
return true;
|
|
4712
|
+
} catch {
|
|
4713
|
+
_sandboxAvailableCache = false;
|
|
4714
|
+
return false;
|
|
4715
|
+
}
|
|
4716
|
+
}
|
|
4692
4717
|
async function loadSandboxFactory() {
|
|
4693
4718
|
if (sandboxFactoryOverride)
|
|
4694
4719
|
return sandboxFactoryOverride;
|
|
@@ -4775,6 +4800,8 @@ async function executeSandboxCode(options) {
|
|
|
4775
4800
|
const env = {
|
|
4776
4801
|
INTEGRATE_MCP_URL: options.mcpUrl
|
|
4777
4802
|
};
|
|
4803
|
+
if (options.apiKey)
|
|
4804
|
+
env.INTEGRATE_API_KEY = options.apiKey;
|
|
4778
4805
|
if (options.sessionToken)
|
|
4779
4806
|
env.INTEGRATE_SESSION_TOKEN = options.sessionToken;
|
|
4780
4807
|
if (options.providerTokens && Object.keys(options.providerTokens).length > 0) {
|
|
@@ -4866,6 +4893,13 @@ function resolveCodeModeClientConfig(client) {
|
|
|
4866
4893
|
const oauthConfig = client.__oauthConfig;
|
|
4867
4894
|
return oauthConfig?.codeMode ?? {};
|
|
4868
4895
|
}
|
|
4896
|
+
async function canUseCodeMode(client) {
|
|
4897
|
+
if (!await isSandboxAvailable())
|
|
4898
|
+
return false;
|
|
4899
|
+
const serverConfig = resolveCodeModeClientConfig(client);
|
|
4900
|
+
const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
4901
|
+
return !!publicUrl;
|
|
4902
|
+
}
|
|
4869
4903
|
function buildCodeModeTool(client, options) {
|
|
4870
4904
|
const { tools, providerTokens, context, integrationIds } = options;
|
|
4871
4905
|
const generated = generateCodeModeTypes(tools);
|
|
@@ -4878,6 +4912,7 @@ ${generated.source}
|
|
|
4878
4912
|
\`\`\``;
|
|
4879
4913
|
const execute = async ({ code }) => {
|
|
4880
4914
|
const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
4915
|
+
const apiKey = client.__oauthConfig?.apiKey;
|
|
4881
4916
|
if (!publicUrl) {
|
|
4882
4917
|
return {
|
|
4883
4918
|
success: false,
|
|
@@ -4892,6 +4927,7 @@ ${generated.source}
|
|
|
4892
4927
|
return executeSandboxCode({
|
|
4893
4928
|
code,
|
|
4894
4929
|
mcpUrl,
|
|
4930
|
+
apiKey,
|
|
4895
4931
|
providerTokens,
|
|
4896
4932
|
context,
|
|
4897
4933
|
integrationsHeader: integrationIds && integrationIds.length > 0 ? integrationIds.join(",") : undefined,
|
|
@@ -4989,8 +5025,8 @@ async function getAnthropicTools(client, options) {
|
|
|
4989
5025
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4990
5026
|
await ensureClientConnected(client);
|
|
4991
5027
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
4992
|
-
const
|
|
4993
|
-
const anthropicTools =
|
|
5028
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
5029
|
+
const anthropicTools = effectiveMode === "code" ? (() => {
|
|
4994
5030
|
const codeTool = buildCodeModeTool(client, {
|
|
4995
5031
|
tools: mcpTools,
|
|
4996
5032
|
providerTokens,
|
package/dist/ai/google.d.ts
CHANGED
|
@@ -19,12 +19,12 @@ export interface GoogleToolsOptions extends AIToolsOptions {
|
|
|
19
19
|
/**
|
|
20
20
|
* How to expose MCP tools to the model.
|
|
21
21
|
*
|
|
22
|
-
* - `'code'
|
|
22
|
+
* - `'code'`: Returns a single `execute_code` tool backed by a
|
|
23
23
|
* Vercel Sandbox. The model writes TypeScript that calls the typed
|
|
24
24
|
* `client.<integration>.<method>()` API and chains operations in one round-trip.
|
|
25
25
|
* - `'tools'`: Legacy behavior — one Google FunctionDeclaration per MCP tool.
|
|
26
26
|
*
|
|
27
|
-
* @default 'code'
|
|
27
|
+
* @default auto-detects `'code'` when sandbox + public URL are available, otherwise `'tools'`
|
|
28
28
|
*/
|
|
29
29
|
mode?: 'code' | 'tools';
|
|
30
30
|
}
|
package/dist/ai/google.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/ai/google.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/ai/google.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAWjH,OAAO,KAAK,EACV,MAAM,EACN,mBAAmB,EACnB,YAAY,EACZ,IAAI,EACL,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAC7C,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAC9C,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAuB7B;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAsGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,aAAa,EAAE,kBAAkB,EAAE,GAAG,SAAS,GAAG,IAAI,EACtD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CA4DnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAgFvB"}
|