integrate-sdk 0.9.8-dev.0 → 0.9.9-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.
@@ -8784,12 +8784,22 @@ function resolveCodeModeClientConfig(client) {
8784
8784
  const oauthConfig = client.__oauthConfig;
8785
8785
  return oauthConfig?.codeMode ?? {};
8786
8786
  }
8787
- async function canUseCodeMode(client) {
8788
- if (!await isSandboxAvailable())
8789
- return false;
8787
+ async function diagnoseCodeMode(client) {
8788
+ if (!await isSandboxAvailable()) {
8789
+ return { available: false, reason: "sandbox-missing" };
8790
+ }
8790
8791
  const serverConfig = resolveCodeModeClientConfig(client);
8791
8792
  const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
8792
- return !!publicUrl;
8793
+ if (!publicUrl) {
8794
+ return { available: false, reason: "no-public-url" };
8795
+ }
8796
+ return { available: true };
8797
+ }
8798
+ function warnCodeModeFallback(reason) {
8799
+ if (warnedCodeModeReasons.has(reason))
8800
+ return;
8801
+ warnedCodeModeReasons.add(reason);
8802
+ console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
8793
8803
  }
8794
8804
  function buildCodeModeTool(client, options) {
8795
8805
  const { tools, providerTokens, context, integrationIds } = options;
@@ -8845,7 +8855,7 @@ ${generated.source}
8845
8855
  execute
8846
8856
  };
8847
8857
  }
8848
- var CODE_MODE_TOOL_NAME = "execute_code", DEFAULT_INSTRUCTIONS;
8858
+ var CODE_MODE_TOOL_NAME = "execute_code", DEFAULT_INSTRUCTIONS, CODE_MODE_UNAVAILABLE_MESSAGES, warnedCodeModeReasons;
8849
8859
  var init_tool_builder = __esm(() => {
8850
8860
  init_type_generator();
8851
8861
  init_executor();
@@ -8870,6 +8880,11 @@ var init_tool_builder = __esm(() => {
8870
8880
  "API surface:"
8871
8881
  ].join(`
8872
8882
  `);
8883
+ CODE_MODE_UNAVAILABLE_MESSAGES = {
8884
+ "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
8885
+ "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
8886
+ };
8887
+ warnedCodeModeReasons = new Set;
8873
8888
  });
8874
8889
 
8875
8890
  // ../ai/vercel-ai.ts
@@ -8896,7 +8911,18 @@ async function getVercelAITools(client, options) {
8896
8911
  await ensureClientConnected(client);
8897
8912
  const mcpTools = await client.getEnabledToolsAsync();
8898
8913
  const vercelTools = {};
8899
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
8914
+ let effectiveMode;
8915
+ if (options?.mode !== undefined) {
8916
+ effectiveMode = options.mode;
8917
+ } else {
8918
+ const diagnosis = await diagnoseCodeMode(client);
8919
+ if (diagnosis.available) {
8920
+ effectiveMode = "code";
8921
+ } else {
8922
+ warnCodeModeFallback(diagnosis.reason);
8923
+ effectiveMode = "tools";
8924
+ }
8925
+ }
8900
8926
  if (effectiveMode === "code") {
8901
8927
  const codeTool = buildCodeModeTool(client, {
8902
8928
  tools: mcpTools,
@@ -10355,7 +10381,18 @@ async function getOpenAITools(client, options) {
10355
10381
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
10356
10382
  await ensureClientConnected(client);
10357
10383
  const mcpTools = await client.getEnabledToolsAsync();
10358
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
10384
+ let effectiveMode;
10385
+ if (options?.mode !== undefined) {
10386
+ effectiveMode = options.mode;
10387
+ } else {
10388
+ const diagnosis = await diagnoseCodeMode(client);
10389
+ if (diagnosis.available) {
10390
+ effectiveMode = "code";
10391
+ } else {
10392
+ warnCodeModeFallback(diagnosis.reason);
10393
+ effectiveMode = "tools";
10394
+ }
10395
+ }
10359
10396
  const openaiTools = effectiveMode === "code" ? (() => {
10360
10397
  const codeTool = buildCodeModeTool(client, {
10361
10398
  tools: mcpTools,
@@ -10535,7 +10572,18 @@ async function getAnthropicTools(client, options) {
10535
10572
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
10536
10573
  await ensureClientConnected(client);
10537
10574
  const mcpTools = await client.getEnabledToolsAsync();
10538
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
10575
+ let effectiveMode;
10576
+ if (options?.mode !== undefined) {
10577
+ effectiveMode = options.mode;
10578
+ } else {
10579
+ const diagnosis = await diagnoseCodeMode(client);
10580
+ if (diagnosis.available) {
10581
+ effectiveMode = "code";
10582
+ } else {
10583
+ warnCodeModeFallback(diagnosis.reason);
10584
+ effectiveMode = "tools";
10585
+ }
10586
+ }
10539
10587
  const anthropicTools = effectiveMode === "code" ? (() => {
10540
10588
  const codeTool = buildCodeModeTool(client, {
10541
10589
  tools: mcpTools,
@@ -10724,7 +10772,18 @@ async function getGoogleTools(client, options) {
10724
10772
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
10725
10773
  await ensureClientConnected(client);
10726
10774
  const mcpTools = await client.getEnabledToolsAsync();
10727
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
10775
+ let effectiveMode;
10776
+ if (options?.mode !== undefined) {
10777
+ effectiveMode = options.mode;
10778
+ } else {
10779
+ const diagnosis = await diagnoseCodeMode(client);
10780
+ if (diagnosis.available) {
10781
+ effectiveMode = "code";
10782
+ } else {
10783
+ warnCodeModeFallback(diagnosis.reason);
10784
+ effectiveMode = "tools";
10785
+ }
10786
+ }
10728
10787
  let googleTools;
10729
10788
  if (effectiveMode === "code") {
10730
10789
  const TypeEnum = await getGoogleType();
@@ -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;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"}
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;AASjH,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,CA2E1B;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"}
@@ -4893,12 +4893,27 @@ function resolveCodeModeClientConfig(client) {
4893
4893
  const oauthConfig = client.__oauthConfig;
4894
4894
  return oauthConfig?.codeMode ?? {};
4895
4895
  }
4896
- async function canUseCodeMode(client) {
4897
- if (!await isSandboxAvailable())
4898
- return false;
4896
+ async function diagnoseCodeMode(client) {
4897
+ if (!await isSandboxAvailable()) {
4898
+ return { available: false, reason: "sandbox-missing" };
4899
+ }
4899
4900
  const serverConfig = resolveCodeModeClientConfig(client);
4900
4901
  const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
4901
- return !!publicUrl;
4902
+ if (!publicUrl) {
4903
+ return { available: false, reason: "no-public-url" };
4904
+ }
4905
+ return { available: true };
4906
+ }
4907
+ var CODE_MODE_UNAVAILABLE_MESSAGES = {
4908
+ "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
4909
+ "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
4910
+ };
4911
+ var warnedCodeModeReasons = new Set;
4912
+ function warnCodeModeFallback(reason) {
4913
+ if (warnedCodeModeReasons.has(reason))
4914
+ return;
4915
+ warnedCodeModeReasons.add(reason);
4916
+ console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
4902
4917
  }
4903
4918
  function buildCodeModeTool(client, options) {
4904
4919
  const { tools, providerTokens, context, integrationIds } = options;
@@ -5025,7 +5040,18 @@ async function getAnthropicTools(client, options) {
5025
5040
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
5026
5041
  await ensureClientConnected(client);
5027
5042
  const mcpTools = await client.getEnabledToolsAsync();
5028
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
5043
+ let effectiveMode;
5044
+ if (options?.mode !== undefined) {
5045
+ effectiveMode = options.mode;
5046
+ } else {
5047
+ const diagnosis = await diagnoseCodeMode(client);
5048
+ if (diagnosis.available) {
5049
+ effectiveMode = "code";
5050
+ } else {
5051
+ warnCodeModeFallback(diagnosis.reason);
5052
+ effectiveMode = "tools";
5053
+ }
5054
+ }
5029
5055
  const anthropicTools = effectiveMode === "code" ? (() => {
5030
5056
  const codeTool = buildCodeModeTool(client, {
5031
5057
  tools: mcpTools,
@@ -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;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"}
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;AAYjH,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,CAwFvB"}
package/dist/ai/google.js CHANGED
@@ -4893,12 +4893,27 @@ function resolveCodeModeClientConfig(client) {
4893
4893
  const oauthConfig = client.__oauthConfig;
4894
4894
  return oauthConfig?.codeMode ?? {};
4895
4895
  }
4896
- async function canUseCodeMode(client) {
4897
- if (!await isSandboxAvailable())
4898
- return false;
4896
+ async function diagnoseCodeMode(client) {
4897
+ if (!await isSandboxAvailable()) {
4898
+ return { available: false, reason: "sandbox-missing" };
4899
+ }
4899
4900
  const serverConfig = resolveCodeModeClientConfig(client);
4900
4901
  const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
4901
- return !!publicUrl;
4902
+ if (!publicUrl) {
4903
+ return { available: false, reason: "no-public-url" };
4904
+ }
4905
+ return { available: true };
4906
+ }
4907
+ var CODE_MODE_UNAVAILABLE_MESSAGES = {
4908
+ "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
4909
+ "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
4910
+ };
4911
+ var warnedCodeModeReasons = new Set;
4912
+ function warnCodeModeFallback(reason) {
4913
+ if (warnedCodeModeReasons.has(reason))
4914
+ return;
4915
+ warnedCodeModeReasons.add(reason);
4916
+ console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
4902
4917
  }
4903
4918
  function buildCodeModeTool(client, options) {
4904
4919
  const { tools, providerTokens, context, integrationIds } = options;
@@ -5079,7 +5094,18 @@ async function getGoogleTools(client, options) {
5079
5094
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
5080
5095
  await ensureClientConnected(client);
5081
5096
  const mcpTools = await client.getEnabledToolsAsync();
5082
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
5097
+ let effectiveMode;
5098
+ if (options?.mode !== undefined) {
5099
+ effectiveMode = options.mode;
5100
+ } else {
5101
+ const diagnosis = await diagnoseCodeMode(client);
5102
+ if (diagnosis.available) {
5103
+ effectiveMode = "code";
5104
+ } else {
5105
+ warnCodeModeFallback(diagnosis.reason);
5106
+ effectiveMode = "tools";
5107
+ }
5108
+ }
5083
5109
  let googleTools;
5084
5110
  if (effectiveMode === "code") {
5085
5111
  const TypeEnum = await getGoogleType();
package/dist/ai/index.js CHANGED
@@ -4893,12 +4893,27 @@ function resolveCodeModeClientConfig(client) {
4893
4893
  const oauthConfig = client.__oauthConfig;
4894
4894
  return oauthConfig?.codeMode ?? {};
4895
4895
  }
4896
- async function canUseCodeMode(client) {
4897
- if (!await isSandboxAvailable())
4898
- return false;
4896
+ async function diagnoseCodeMode(client) {
4897
+ if (!await isSandboxAvailable()) {
4898
+ return { available: false, reason: "sandbox-missing" };
4899
+ }
4899
4900
  const serverConfig = resolveCodeModeClientConfig(client);
4900
4901
  const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
4901
- return !!publicUrl;
4902
+ if (!publicUrl) {
4903
+ return { available: false, reason: "no-public-url" };
4904
+ }
4905
+ return { available: true };
4906
+ }
4907
+ var CODE_MODE_UNAVAILABLE_MESSAGES = {
4908
+ "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
4909
+ "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
4910
+ };
4911
+ var warnedCodeModeReasons = new Set;
4912
+ function warnCodeModeFallback(reason) {
4913
+ if (warnedCodeModeReasons.has(reason))
4914
+ return;
4915
+ warnedCodeModeReasons.add(reason);
4916
+ console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
4902
4917
  }
4903
4918
  function buildCodeModeTool(client, options) {
4904
4919
  const { tools, providerTokens, context, integrationIds } = options;
@@ -5025,7 +5040,18 @@ async function getAnthropicTools(client, options) {
5025
5040
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
5026
5041
  await ensureClientConnected(client);
5027
5042
  const mcpTools = await client.getEnabledToolsAsync();
5028
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
5043
+ let effectiveMode;
5044
+ if (options?.mode !== undefined) {
5045
+ effectiveMode = options.mode;
5046
+ } else {
5047
+ const diagnosis = await diagnoseCodeMode(client);
5048
+ if (diagnosis.available) {
5049
+ effectiveMode = "code";
5050
+ } else {
5051
+ warnCodeModeFallback(diagnosis.reason);
5052
+ effectiveMode = "tools";
5053
+ }
5054
+ }
5029
5055
  const anthropicTools = effectiveMode === "code" ? (() => {
5030
5056
  const codeTool = buildCodeModeTool(client, {
5031
5057
  tools: mcpTools,
@@ -5209,7 +5235,18 @@ async function getGoogleTools(client, options) {
5209
5235
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
5210
5236
  await ensureClientConnected(client);
5211
5237
  const mcpTools = await client.getEnabledToolsAsync();
5212
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
5238
+ let effectiveMode;
5239
+ if (options?.mode !== undefined) {
5240
+ effectiveMode = options.mode;
5241
+ } else {
5242
+ const diagnosis = await diagnoseCodeMode(client);
5243
+ if (diagnosis.available) {
5244
+ effectiveMode = "code";
5245
+ } else {
5246
+ warnCodeModeFallback(diagnosis.reason);
5247
+ effectiveMode = "tools";
5248
+ }
5249
+ }
5213
5250
  let googleTools;
5214
5251
  if (effectiveMode === "code") {
5215
5252
  const TypeEnum = await getGoogleType();
@@ -5335,7 +5372,18 @@ async function getVercelAITools(client, options) {
5335
5372
  await ensureClientConnected(client);
5336
5373
  const mcpTools = await client.getEnabledToolsAsync();
5337
5374
  const vercelTools = {};
5338
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
5375
+ let effectiveMode;
5376
+ if (options?.mode !== undefined) {
5377
+ effectiveMode = options.mode;
5378
+ } else {
5379
+ const diagnosis = await diagnoseCodeMode(client);
5380
+ if (diagnosis.available) {
5381
+ effectiveMode = "code";
5382
+ } else {
5383
+ warnCodeModeFallback(diagnosis.reason);
5384
+ effectiveMode = "tools";
5385
+ }
5386
+ }
5339
5387
  if (effectiveMode === "code") {
5340
5388
  const codeTool = buildCodeModeTool(client, {
5341
5389
  tools: mcpTools,
@@ -5385,7 +5433,18 @@ async function getOpenAITools(client, options) {
5385
5433
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
5386
5434
  await ensureClientConnected(client);
5387
5435
  const mcpTools = await client.getEnabledToolsAsync();
5388
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
5436
+ let effectiveMode;
5437
+ if (options?.mode !== undefined) {
5438
+ effectiveMode = options.mode;
5439
+ } else {
5440
+ const diagnosis = await diagnoseCodeMode(client);
5441
+ if (diagnosis.available) {
5442
+ effectiveMode = "code";
5443
+ } else {
5444
+ warnCodeModeFallback(diagnosis.reason);
5445
+ effectiveMode = "tools";
5446
+ }
5447
+ }
5389
5448
  const openaiTools = effectiveMode === "code" ? (() => {
5390
5449
  const codeTool = buildCodeModeTool(client, {
5391
5450
  tools: mcpTools,
@@ -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;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAQjH,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;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAiCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAmEvB;AA0GD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
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;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AASjH,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;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAiCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CA2EvB;AA0GD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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
@@ -4893,12 +4893,27 @@ function resolveCodeModeClientConfig(client) {
4893
4893
  const oauthConfig = client.__oauthConfig;
4894
4894
  return oauthConfig?.codeMode ?? {};
4895
4895
  }
4896
- async function canUseCodeMode(client) {
4897
- if (!await isSandboxAvailable())
4898
- return false;
4896
+ async function diagnoseCodeMode(client) {
4897
+ if (!await isSandboxAvailable()) {
4898
+ return { available: false, reason: "sandbox-missing" };
4899
+ }
4899
4900
  const serverConfig = resolveCodeModeClientConfig(client);
4900
4901
  const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
4901
- return !!publicUrl;
4902
+ if (!publicUrl) {
4903
+ return { available: false, reason: "no-public-url" };
4904
+ }
4905
+ return { available: true };
4906
+ }
4907
+ var CODE_MODE_UNAVAILABLE_MESSAGES = {
4908
+ "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
4909
+ "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
4910
+ };
4911
+ var warnedCodeModeReasons = new Set;
4912
+ function warnCodeModeFallback(reason) {
4913
+ if (warnedCodeModeReasons.has(reason))
4914
+ return;
4915
+ warnedCodeModeReasons.add(reason);
4916
+ console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
4902
4917
  }
4903
4918
  function buildCodeModeTool(client, options) {
4904
4919
  const { tools, providerTokens, context, integrationIds } = options;
@@ -4977,7 +4992,18 @@ async function getOpenAITools(client, options) {
4977
4992
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
4978
4993
  await ensureClientConnected(client);
4979
4994
  const mcpTools = await client.getEnabledToolsAsync();
4980
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
4995
+ let effectiveMode;
4996
+ if (options?.mode !== undefined) {
4997
+ effectiveMode = options.mode;
4998
+ } else {
4999
+ const diagnosis = await diagnoseCodeMode(client);
5000
+ if (diagnosis.available) {
5001
+ effectiveMode = "code";
5002
+ } else {
5003
+ warnCodeModeFallback(diagnosis.reason);
5004
+ effectiveMode = "tools";
5005
+ }
5006
+ }
4981
5007
  const openaiTools = effectiveMode === "code" ? (() => {
4982
5008
  const codeTool = buildCodeModeTool(client, {
4983
5009
  tools: mcpTools,
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-ai.d.ts","sourceRoot":"","sources":["../../../src/ai/vercel-ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAQpB;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AA+BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,oBAAoB,gCA0D/B"}
1
+ {"version":3,"file":"vercel-ai.d.ts","sourceRoot":"","sources":["../../../src/ai/vercel-ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AASpB;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AA+BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,oBAAoB,gCAkE/B"}
@@ -4893,12 +4893,27 @@ function resolveCodeModeClientConfig(client) {
4893
4893
  const oauthConfig = client.__oauthConfig;
4894
4894
  return oauthConfig?.codeMode ?? {};
4895
4895
  }
4896
- async function canUseCodeMode(client) {
4897
- if (!await isSandboxAvailable())
4898
- return false;
4896
+ async function diagnoseCodeMode(client) {
4897
+ if (!await isSandboxAvailable()) {
4898
+ return { available: false, reason: "sandbox-missing" };
4899
+ }
4899
4900
  const serverConfig = resolveCodeModeClientConfig(client);
4900
4901
  const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
4901
- return !!publicUrl;
4902
+ if (!publicUrl) {
4903
+ return { available: false, reason: "no-public-url" };
4904
+ }
4905
+ return { available: true };
4906
+ }
4907
+ var CODE_MODE_UNAVAILABLE_MESSAGES = {
4908
+ "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
4909
+ "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
4910
+ };
4911
+ var warnedCodeModeReasons = new Set;
4912
+ function warnCodeModeFallback(reason) {
4913
+ if (warnedCodeModeReasons.has(reason))
4914
+ return;
4915
+ warnedCodeModeReasons.add(reason);
4916
+ console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
4902
4917
  }
4903
4918
  function buildCodeModeTool(client, options) {
4904
4919
  const { tools, providerTokens, context, integrationIds } = options;
@@ -4979,7 +4994,18 @@ async function getVercelAITools(client, options) {
4979
4994
  await ensureClientConnected(client);
4980
4995
  const mcpTools = await client.getEnabledToolsAsync();
4981
4996
  const vercelTools = {};
4982
- const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
4997
+ let effectiveMode;
4998
+ if (options?.mode !== undefined) {
4999
+ effectiveMode = options.mode;
5000
+ } else {
5001
+ const diagnosis = await diagnoseCodeMode(client);
5002
+ if (diagnosis.available) {
5003
+ effectiveMode = "code";
5004
+ } else {
5005
+ warnCodeModeFallback(diagnosis.reason);
5006
+ effectiveMode = "tools";
5007
+ }
5008
+ }
4983
5009
  if (effectiveMode === "code") {
4984
5010
  const codeTool = buildCodeModeTool(client, {
4985
5011
  tools: mcpTools,
@@ -498,12 +498,33 @@ function resolveCodeModeClientConfig(client) {
498
498
  const oauthConfig = client.__oauthConfig;
499
499
  return oauthConfig?.codeMode ?? {};
500
500
  }
501
- async function canUseCodeMode(client) {
502
- if (!await isSandboxAvailable())
503
- return false;
501
+ async function diagnoseCodeMode(client) {
502
+ if (!await isSandboxAvailable()) {
503
+ return { available: false, reason: "sandbox-missing" };
504
+ }
504
505
  const serverConfig = resolveCodeModeClientConfig(client);
505
506
  const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
506
- return !!publicUrl;
507
+ if (!publicUrl) {
508
+ return { available: false, reason: "no-public-url" };
509
+ }
510
+ return { available: true };
511
+ }
512
+ async function canUseCodeMode(client) {
513
+ return (await diagnoseCodeMode(client)).available;
514
+ }
515
+ var CODE_MODE_UNAVAILABLE_MESSAGES = {
516
+ "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
517
+ "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
518
+ };
519
+ var warnedCodeModeReasons = new Set;
520
+ function __resetCodeModeFallbackWarnings() {
521
+ warnedCodeModeReasons.clear();
522
+ }
523
+ function warnCodeModeFallback(reason) {
524
+ if (warnedCodeModeReasons.has(reason))
525
+ return;
526
+ warnedCodeModeReasons.add(reason);
527
+ console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
507
528
  }
508
529
  function buildCodeModeTool(client, options) {
509
530
  const { tools, providerTokens, context, integrationIds } = options;
@@ -74,7 +74,23 @@ export declare function resolveCodeModeClientConfig(client: MCPClient<any>): {
74
74
  };
75
75
  };
76
76
  };
77
+ export type CodeModeUnavailableReason = "sandbox-missing" | "no-public-url";
78
+ export type CodeModeDiagnosis = {
79
+ available: true;
80
+ } | {
81
+ available: false;
82
+ reason: CodeModeUnavailableReason;
83
+ };
84
+ export declare function diagnoseCodeMode(client: MCPClient<any>): Promise<CodeModeDiagnosis>;
77
85
  export declare function canUseCodeMode(client: MCPClient<any>): Promise<boolean>;
86
+ /** @internal — used by unit tests to reset the warn-once throttle. */
87
+ export declare function __resetCodeModeFallbackWarnings(): void;
88
+ /**
89
+ * Called by AI helpers when auto-detection picks `tools` mode. Emits a
90
+ * throttled `console.warn` so operators can tell *why* Code Mode was
91
+ * silently downgraded. Each reason warns at most once per process.
92
+ */
93
+ export declare function warnCodeModeFallback(reason: CodeModeUnavailableReason): void;
78
94
  /**
79
95
  * Build the `execute_code` tool definition. The returned `execute` function
80
96
  * is what the AI provider SDK ultimately invokes when the model picks the
@@ -1 +1 @@
1
- {"version":3,"file":"tool-builder.d.ts","sourceRoot":"","sources":["../../../src/code-mode/tool-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;AAGvB,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,iCAAiC;IACjC,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG;YAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,OAAO,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;aAAE,CAAA;SAAE,CAAC;KAClH,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE;YACV,IAAI,EAAE;gBAAE,IAAI,EAAE,QAAQ,CAAC;gBAAC,WAAW,EAAE,MAAM,CAAA;aAAE,CAAC;SAC/C,CAAC;QACF,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;QACnB,oBAAoB,EAAE,KAAK,CAAC;KAC7B,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACzE;AAuBD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CAClH,CAGA;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAK7E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,mBAAmB,GAC3B,sBAAsB,CA+DxB"}
1
+ {"version":3,"file":"tool-builder.d.ts","sourceRoot":"","sources":["../../../src/code-mode/tool-builder.ts"],"names":[],"mappings":"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"}
@@ -498,12 +498,33 @@ function resolveCodeModeClientConfig(client) {
498
498
  const oauthConfig = client.__oauthConfig;
499
499
  return oauthConfig?.codeMode ?? {};
500
500
  }
501
- async function canUseCodeMode(client) {
502
- if (!await isSandboxAvailable())
503
- return false;
501
+ async function diagnoseCodeMode(client) {
502
+ if (!await isSandboxAvailable()) {
503
+ return { available: false, reason: "sandbox-missing" };
504
+ }
504
505
  const serverConfig = resolveCodeModeClientConfig(client);
505
506
  const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
506
- return !!publicUrl;
507
+ if (!publicUrl) {
508
+ return { available: false, reason: "no-public-url" };
509
+ }
510
+ return { available: true };
511
+ }
512
+ async function canUseCodeMode(client) {
513
+ return (await diagnoseCodeMode(client)).available;
514
+ }
515
+ var CODE_MODE_UNAVAILABLE_MESSAGES = {
516
+ "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
517
+ "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
518
+ };
519
+ var warnedCodeModeReasons = new Set;
520
+ function __resetCodeModeFallbackWarnings() {
521
+ warnedCodeModeReasons.clear();
522
+ }
523
+ function warnCodeModeFallback(reason) {
524
+ if (warnedCodeModeReasons.has(reason))
525
+ return;
526
+ warnedCodeModeReasons.add(reason);
527
+ console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
507
528
  }
508
529
  function buildCodeModeTool(client, options) {
509
530
  const { tools, providerTokens, context, integrationIds } = options;
@@ -560,8 +581,11 @@ ${generated.source}
560
581
  };
561
582
  }
562
583
  export {
584
+ warnCodeModeFallback,
563
585
  resolveCodeModeClientConfig,
586
+ diagnoseCodeMode,
564
587
  canUseCodeMode,
565
588
  buildCodeModeTool,
589
+ __resetCodeModeFallbackWarnings,
566
590
  CODE_MODE_TOOL_NAME
567
591
  };