integrate-sdk 0.8.36 → 0.8.39

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.
Files changed (76) hide show
  1. package/dist/adapters/auto-routes.js +371 -71
  2. package/dist/adapters/base-handler.js +561 -0
  3. package/dist/adapters/index.js +371 -71
  4. package/dist/adapters/nextjs.js +371 -71
  5. package/dist/adapters/node.js +371 -71
  6. package/dist/adapters/svelte-kit.js +371 -71
  7. package/dist/adapters/tanstack-start.js +371 -71
  8. package/dist/ai/anthropic.d.ts +3 -0
  9. package/dist/ai/anthropic.d.ts.map +1 -1
  10. package/dist/ai/anthropic.js +255 -2
  11. package/dist/ai/cloudflare.d.ts +158 -0
  12. package/dist/ai/cloudflare.d.ts.map +1 -0
  13. package/dist/ai/cloudflare.js +4249 -0
  14. package/dist/ai/google.d.ts +3 -0
  15. package/dist/ai/google.d.ts.map +1 -1
  16. package/dist/ai/google.js +256 -2
  17. package/dist/ai/index.d.ts +1 -0
  18. package/dist/ai/index.d.ts.map +1 -1
  19. package/dist/ai/index.js +351 -7
  20. package/dist/ai/langchain.d.ts +139 -0
  21. package/dist/ai/langchain.d.ts.map +1 -0
  22. package/dist/ai/langchain.js +4237 -0
  23. package/dist/ai/llamaindex.d.ts +125 -0
  24. package/dist/ai/llamaindex.d.ts.map +1 -0
  25. package/dist/ai/llamaindex.js +4236 -0
  26. package/dist/ai/mastra.d.ts +138 -0
  27. package/dist/ai/mastra.d.ts.map +1 -0
  28. package/dist/ai/mastra.js +4240 -0
  29. package/dist/ai/openai.d.ts +3 -0
  30. package/dist/ai/openai.d.ts.map +1 -1
  31. package/dist/ai/openai.js +257 -2
  32. package/dist/ai/trigger-tools.d.ts +206 -0
  33. package/dist/ai/trigger-tools.d.ts.map +1 -0
  34. package/dist/ai/trigger-tools.js +4198 -0
  35. package/dist/ai/vercel-ai.d.ts.map +1 -1
  36. package/dist/ai/vercel-ai.js +217 -0
  37. package/dist/index.js +359 -59
  38. package/dist/oauth.js +371 -71
  39. package/dist/server.js +372 -71
  40. package/dist/src/ai/anthropic.d.ts +3 -0
  41. package/dist/src/ai/anthropic.d.ts.map +1 -1
  42. package/dist/src/ai/cloudflare.d.ts +158 -0
  43. package/dist/src/ai/cloudflare.d.ts.map +1 -0
  44. package/dist/src/ai/google.d.ts +3 -0
  45. package/dist/src/ai/google.d.ts.map +1 -1
  46. package/dist/src/ai/index.d.ts +1 -0
  47. package/dist/src/ai/index.d.ts.map +1 -1
  48. package/dist/src/ai/langchain.d.ts +139 -0
  49. package/dist/src/ai/langchain.d.ts.map +1 -0
  50. package/dist/src/ai/llamaindex.d.ts +125 -0
  51. package/dist/src/ai/llamaindex.d.ts.map +1 -0
  52. package/dist/src/ai/mastra.d.ts +138 -0
  53. package/dist/src/ai/mastra.d.ts.map +1 -0
  54. package/dist/src/ai/openai.d.ts +3 -0
  55. package/dist/src/ai/openai.d.ts.map +1 -1
  56. package/dist/src/ai/trigger-tools.d.ts +206 -0
  57. package/dist/src/ai/trigger-tools.d.ts.map +1 -0
  58. package/dist/src/ai/vercel-ai.d.ts.map +1 -1
  59. package/dist/src/integrations/vercel-ai.d.ts +127 -0
  60. package/dist/src/integrations/vercel-ai.d.ts.map +1 -0
  61. package/dist/src/plugins/generic.d.ts +99 -0
  62. package/dist/src/plugins/generic.d.ts.map +1 -0
  63. package/dist/src/plugins/github-client.d.ts +320 -0
  64. package/dist/src/plugins/github-client.d.ts.map +1 -0
  65. package/dist/src/plugins/github.d.ts +89 -0
  66. package/dist/src/plugins/github.d.ts.map +1 -0
  67. package/dist/src/plugins/gmail-client.d.ts +106 -0
  68. package/dist/src/plugins/gmail-client.d.ts.map +1 -0
  69. package/dist/src/plugins/gmail.d.ts +87 -0
  70. package/dist/src/plugins/gmail.d.ts.map +1 -0
  71. package/dist/src/plugins/server-client.d.ts +18 -0
  72. package/dist/src/plugins/server-client.d.ts.map +1 -0
  73. package/dist/src/plugins/types.d.ts +70 -0
  74. package/dist/src/plugins/types.d.ts.map +1 -0
  75. package/dist/src/server.d.ts.map +1 -1
  76. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -7810,6 +7810,218 @@ var init_utils = __esm(() => {
7810
7810
  init_zod();
7811
7811
  });
7812
7812
 
7813
+ // node_modules/nanoid/index.browser.js
7814
+ var nanoid = (size = 21) => crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {
7815
+ byte &= 63;
7816
+ if (byte < 36) {
7817
+ id += byte.toString(36);
7818
+ } else if (byte < 62) {
7819
+ id += (byte - 26).toString(36).toUpperCase();
7820
+ } else if (byte > 62) {
7821
+ id += "-";
7822
+ } else {
7823
+ id += "_";
7824
+ }
7825
+ return id;
7826
+ }, "");
7827
+ var init_index_browser = () => {};
7828
+
7829
+ // src/triggers/utils.ts
7830
+ var exports_utils = {};
7831
+ __export(exports_utils, {
7832
+ validateStatusTransition: () => validateStatusTransition,
7833
+ generateTriggerId: () => generateTriggerId,
7834
+ extractProviderFromToolName: () => extractProviderFromToolName,
7835
+ calculateHasMore: () => calculateHasMore
7836
+ });
7837
+ function generateTriggerId() {
7838
+ return `trig_${nanoid(12)}`;
7839
+ }
7840
+ function extractProviderFromToolName(toolName) {
7841
+ const parts = toolName.split("_");
7842
+ return parts[0] || toolName;
7843
+ }
7844
+ function validateStatusTransition(currentStatus, targetStatus) {
7845
+ if (targetStatus === "paused" && currentStatus !== "active") {
7846
+ return {
7847
+ valid: false,
7848
+ error: `Cannot pause trigger with status '${currentStatus}'. Only 'active' triggers can be paused.`
7849
+ };
7850
+ }
7851
+ if (targetStatus === "active" && currentStatus !== "paused") {
7852
+ return {
7853
+ valid: false,
7854
+ error: `Cannot resume trigger with status '${currentStatus}'. Only 'paused' triggers can be resumed.`
7855
+ };
7856
+ }
7857
+ return { valid: true };
7858
+ }
7859
+ function calculateHasMore(offset, returnedCount, total) {
7860
+ return offset + returnedCount < total;
7861
+ }
7862
+ var init_utils2 = __esm(() => {
7863
+ init_index_browser();
7864
+ });
7865
+
7866
+ // src/ai/trigger-tools.ts
7867
+ function createTriggerTools(config, context) {
7868
+ const { callbacks } = config;
7869
+ return {
7870
+ create_trigger: {
7871
+ description: "Schedule a tool to run at a specific time or on a recurring schedule. Use this when the user wants to do something later.",
7872
+ inputSchema: exports_external.object({
7873
+ name: exports_external.string().optional().describe("Human-readable trigger name"),
7874
+ description: exports_external.string().optional().describe("Trigger description"),
7875
+ toolName: exports_external.string().describe("MCP tool name to execute (e.g., gmail_send_email, github_create_issue)"),
7876
+ toolArguments: exports_external.record(exports_external.unknown()).describe("Arguments to pass to the tool when it executes"),
7877
+ schedule: exports_external.union([
7878
+ exports_external.object({
7879
+ type: exports_external.literal("once"),
7880
+ runAt: exports_external.string().describe("ISO datetime string (e.g., 2024-12-13T22:00:00Z)")
7881
+ }),
7882
+ exports_external.object({
7883
+ type: exports_external.literal("cron"),
7884
+ expression: exports_external.string().describe("Cron expression (e.g., '0 9 * * *' for daily at 9 AM)")
7885
+ })
7886
+ ]).describe("When to execute the tool")
7887
+ }),
7888
+ execute: async (args) => {
7889
+ const triggerId = generateTriggerId();
7890
+ const provider = extractProviderFromToolName(args.toolName);
7891
+ const now = new Date().toISOString();
7892
+ const trigger = {
7893
+ id: triggerId,
7894
+ ...args,
7895
+ provider,
7896
+ status: "active",
7897
+ createdAt: now,
7898
+ updatedAt: now,
7899
+ runCount: 0
7900
+ };
7901
+ return callbacks.create(trigger, context);
7902
+ }
7903
+ },
7904
+ list_triggers: {
7905
+ description: "List all scheduled triggers with optional filtering by status or tool name",
7906
+ inputSchema: exports_external.object({
7907
+ status: exports_external.enum(["active", "paused", "completed", "failed"]).optional().describe("Filter by trigger status"),
7908
+ toolName: exports_external.string().optional().describe("Filter by tool name"),
7909
+ limit: exports_external.number().optional().describe("Maximum number of results (default: 20)"),
7910
+ offset: exports_external.number().optional().describe("Number of results to skip for pagination (default: 0)")
7911
+ }),
7912
+ execute: async (args) => {
7913
+ const params = {
7914
+ status: args.status,
7915
+ toolName: args.toolName,
7916
+ limit: args.limit || 20,
7917
+ offset: args.offset || 0
7918
+ };
7919
+ const result = await callbacks.list(params, context);
7920
+ const hasMore = calculateHasMore(params.offset, result.triggers.length, result.total);
7921
+ return {
7922
+ triggers: result.triggers,
7923
+ total: result.total,
7924
+ hasMore
7925
+ };
7926
+ }
7927
+ },
7928
+ get_trigger: {
7929
+ description: "Get details of a specific trigger by its ID",
7930
+ inputSchema: exports_external.object({
7931
+ triggerId: exports_external.string().describe("The trigger ID to retrieve")
7932
+ }),
7933
+ execute: async (args) => {
7934
+ const trigger = await callbacks.get(args.triggerId, context);
7935
+ if (!trigger) {
7936
+ throw new Error(`Trigger ${args.triggerId} not found`);
7937
+ }
7938
+ return trigger;
7939
+ }
7940
+ },
7941
+ update_trigger: {
7942
+ description: "Update a trigger's properties like name, description, arguments, or schedule",
7943
+ inputSchema: exports_external.object({
7944
+ triggerId: exports_external.string().describe("The trigger ID to update"),
7945
+ name: exports_external.string().optional().describe("New trigger name"),
7946
+ description: exports_external.string().optional().describe("New trigger description"),
7947
+ toolArguments: exports_external.record(exports_external.unknown()).optional().describe("New tool arguments"),
7948
+ schedule: exports_external.union([
7949
+ exports_external.object({
7950
+ type: exports_external.literal("once"),
7951
+ runAt: exports_external.string().describe("ISO datetime string")
7952
+ }),
7953
+ exports_external.object({
7954
+ type: exports_external.literal("cron"),
7955
+ expression: exports_external.string().describe("Cron expression")
7956
+ })
7957
+ ]).optional().describe("New schedule")
7958
+ }),
7959
+ execute: async (args) => {
7960
+ const { triggerId, ...updates } = args;
7961
+ const updatesWithTimestamp = {
7962
+ ...updates,
7963
+ updatedAt: new Date().toISOString()
7964
+ };
7965
+ return callbacks.update(triggerId, updatesWithTimestamp, context);
7966
+ }
7967
+ },
7968
+ delete_trigger: {
7969
+ description: "Delete a trigger permanently. This cannot be undone.",
7970
+ inputSchema: exports_external.object({
7971
+ triggerId: exports_external.string().describe("The trigger ID to delete")
7972
+ }),
7973
+ execute: async (args) => {
7974
+ await callbacks.delete(args.triggerId, context);
7975
+ return { success: true, message: `Trigger ${args.triggerId} deleted` };
7976
+ }
7977
+ },
7978
+ pause_trigger: {
7979
+ description: "Pause a trigger to temporarily stop it from executing. Can be resumed later.",
7980
+ inputSchema: exports_external.object({
7981
+ triggerId: exports_external.string().describe("The trigger ID to pause")
7982
+ }),
7983
+ execute: async (args) => {
7984
+ const trigger = await callbacks.get(args.triggerId, context);
7985
+ if (!trigger) {
7986
+ throw new Error(`Trigger ${args.triggerId} not found`);
7987
+ }
7988
+ const validation = validateStatusTransition(trigger.status, "paused");
7989
+ if (!validation.valid) {
7990
+ throw new Error(validation.error);
7991
+ }
7992
+ return callbacks.update(args.triggerId, {
7993
+ status: "paused",
7994
+ updatedAt: new Date().toISOString()
7995
+ }, context);
7996
+ }
7997
+ },
7998
+ resume_trigger: {
7999
+ description: "Resume a paused trigger to start executing it again on schedule",
8000
+ inputSchema: exports_external.object({
8001
+ triggerId: exports_external.string().describe("The trigger ID to resume")
8002
+ }),
8003
+ execute: async (args) => {
8004
+ const trigger = await callbacks.get(args.triggerId, context);
8005
+ if (!trigger) {
8006
+ throw new Error(`Trigger ${args.triggerId} not found`);
8007
+ }
8008
+ const validation = validateStatusTransition(trigger.status, "active");
8009
+ if (!validation.valid) {
8010
+ throw new Error(validation.error);
8011
+ }
8012
+ return callbacks.update(args.triggerId, {
8013
+ status: "active",
8014
+ updatedAt: new Date().toISOString()
8015
+ }, context);
8016
+ }
8017
+ }
8018
+ };
8019
+ }
8020
+ var init_trigger_tools = __esm(() => {
8021
+ init_zod();
8022
+ init_utils2();
8023
+ });
8024
+
7813
8025
  // src/ai/vercel-ai.ts
7814
8026
  function convertMCPToolToVercelAI(mcpTool, client, options) {
7815
8027
  return {
@@ -7837,10 +8049,16 @@ async function getVercelAITools(client, options) {
7837
8049
  for (const mcpTool of mcpTools) {
7838
8050
  vercelTools[mcpTool.name] = convertMCPToolToVercelAI(mcpTool, client, finalOptions);
7839
8051
  }
8052
+ const triggerConfig = client.__triggerConfig;
8053
+ if (triggerConfig) {
8054
+ const triggerTools = createTriggerTools(triggerConfig, options?.context);
8055
+ Object.assign(vercelTools, triggerTools);
8056
+ }
7840
8057
  return vercelTools;
7841
8058
  }
7842
8059
  var init_vercel_ai = __esm(() => {
7843
8060
  init_utils();
8061
+ init_trigger_tools();
7844
8062
  });
7845
8063
 
7846
8064
  // src/ai/openai.ts
@@ -7864,10 +8082,48 @@ async function getOpenAITools(client, options) {
7864
8082
  }
7865
8083
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
7866
8084
  const mcpTools = client.getEnabledTools();
7867
- return mcpTools.map((mcpTool) => convertMCPToolToOpenAI(mcpTool, client, finalOptions));
8085
+ const openaiTools = mcpTools.map((mcpTool) => convertMCPToolToOpenAI(mcpTool, client, finalOptions));
8086
+ const triggerConfig = client.__triggerConfig;
8087
+ if (triggerConfig) {
8088
+ const triggerTools = createTriggerTools(triggerConfig, options?.context);
8089
+ for (const [name, tool] of Object.entries(triggerTools)) {
8090
+ const zodSchema = tool.inputSchema;
8091
+ const jsonSchema = zodToJsonSchema(zodSchema);
8092
+ openaiTools.push({
8093
+ type: "function",
8094
+ name,
8095
+ parameters: jsonSchema,
8096
+ strict: options?.strict ?? null,
8097
+ description: tool.description || null
8098
+ });
8099
+ }
8100
+ }
8101
+ return openaiTools;
8102
+ }
8103
+ function zodToJsonSchema(schema) {
8104
+ if (schema._def?.typeName === "ZodObject") {
8105
+ const shape = schema._def.shape();
8106
+ const properties = {};
8107
+ const required = [];
8108
+ for (const [key, value] of Object.entries(shape)) {
8109
+ const fieldSchema = value;
8110
+ properties[key] = { type: "string" };
8111
+ if (fieldSchema._def?.typeName !== "ZodOptional") {
8112
+ required.push(key);
8113
+ }
8114
+ }
8115
+ return {
8116
+ type: "object",
8117
+ properties,
8118
+ ...required.length > 0 ? { required } : {}
8119
+ };
8120
+ }
8121
+ return { type: "object" };
7868
8122
  }
7869
8123
  async function handleOpenAIToolCalls(client, toolCalls, options) {
7870
8124
  const toolOutputs = [];
8125
+ const triggerConfig = client.__triggerConfig;
8126
+ const triggerTools = triggerConfig ? createTriggerTools(triggerConfig, options?.context) : null;
7871
8127
  for (const output of toolCalls) {
7872
8128
  if (output.type === "function_call") {
7873
8129
  const toolCall = {
@@ -7877,7 +8133,12 @@ async function handleOpenAIToolCalls(client, toolCalls, options) {
7877
8133
  };
7878
8134
  try {
7879
8135
  const args = JSON.parse(toolCall.arguments);
7880
- const result = await executeToolWithToken(client, toolCall.name, args, options);
8136
+ let result;
8137
+ if (triggerTools && triggerTools[toolCall.name]) {
8138
+ result = await triggerTools[toolCall.name].execute(args);
8139
+ } else {
8140
+ result = await executeToolWithToken(client, toolCall.name, args, options);
8141
+ }
7881
8142
  const resultString = JSON.stringify(result);
7882
8143
  toolOutputs.push({
7883
8144
  call_id: output.call_id ?? output.id ?? "",
@@ -7913,6 +8174,7 @@ async function handleOpenAIResponse(client, response, options) {
7913
8174
  }
7914
8175
  var init_openai = __esm(() => {
7915
8176
  init_utils();
8177
+ init_trigger_tools();
7916
8178
  });
7917
8179
 
7918
8180
  // src/ai/anthropic.ts
@@ -7929,10 +8191,17 @@ function convertMCPToolToAnthropic(mcpTool, _client, _options) {
7929
8191
  }
7930
8192
  async function handleAnthropicToolCalls(client, messageContent, options) {
7931
8193
  const toolResults = [];
8194
+ const triggerConfig = client.__triggerConfig;
8195
+ const triggerTools = triggerConfig ? createTriggerTools(triggerConfig, options?.context) : null;
7932
8196
  const toolUseBlocks = messageContent.filter((block) => block.type === "tool_use" && ("id" in block) && ("name" in block) && ("input" in block));
7933
8197
  for (const toolUse of toolUseBlocks) {
7934
8198
  try {
7935
- const result = await executeToolWithToken(client, toolUse.name, toolUse.input, options);
8199
+ let result;
8200
+ if (triggerTools && triggerTools[toolUse.name]) {
8201
+ result = await triggerTools[toolUse.name].execute(toolUse.input);
8202
+ } else {
8203
+ result = await executeToolWithToken(client, toolUse.name, toolUse.input, options);
8204
+ }
7936
8205
  const resultString = JSON.stringify(result);
7937
8206
  toolResults.push({
7938
8207
  type: "tool_result",
@@ -7961,7 +8230,41 @@ async function getAnthropicTools(client, options) {
7961
8230
  }
7962
8231
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
7963
8232
  const mcpTools = client.getEnabledTools();
7964
- return mcpTools.map((mcpTool) => convertMCPToolToAnthropic(mcpTool, client, finalOptions));
8233
+ const anthropicTools = mcpTools.map((mcpTool) => convertMCPToolToAnthropic(mcpTool, client, finalOptions));
8234
+ const triggerConfig = client.__triggerConfig;
8235
+ if (triggerConfig) {
8236
+ const triggerTools = createTriggerTools(triggerConfig, options?.context);
8237
+ for (const [name, tool] of Object.entries(triggerTools)) {
8238
+ const zodSchema = tool.inputSchema;
8239
+ const jsonSchema = zodToAnthropicSchema(zodSchema);
8240
+ anthropicTools.push({
8241
+ name,
8242
+ description: tool.description || `Execute ${name}`,
8243
+ input_schema: jsonSchema
8244
+ });
8245
+ }
8246
+ }
8247
+ return anthropicTools;
8248
+ }
8249
+ function zodToAnthropicSchema(schema) {
8250
+ if (schema._def?.typeName === "ZodObject") {
8251
+ const shape = schema._def.shape();
8252
+ const properties = {};
8253
+ const required = [];
8254
+ for (const [key, value] of Object.entries(shape)) {
8255
+ const fieldSchema = value;
8256
+ properties[key] = { type: "string" };
8257
+ if (fieldSchema._def?.typeName !== "ZodOptional") {
8258
+ required.push(key);
8259
+ }
8260
+ }
8261
+ return {
8262
+ type: "object",
8263
+ properties,
8264
+ ...required.length > 0 ? { required } : {}
8265
+ };
8266
+ }
8267
+ return { type: "object", properties: {}, required: [] };
7965
8268
  }
7966
8269
  async function handleAnthropicMessage(client, message, options) {
7967
8270
  let providerTokens = options?.providerTokens;
@@ -7988,6 +8291,7 @@ async function handleAnthropicMessage(client, message, options) {
7988
8291
  }
7989
8292
  var init_anthropic = __esm(() => {
7990
8293
  init_utils();
8294
+ init_trigger_tools();
7991
8295
  });
7992
8296
 
7993
8297
  // src/ai/google.ts
@@ -8070,12 +8374,19 @@ async function executeGoogleFunctionCalls(client, functionCalls, options) {
8070
8374
  } catch {}
8071
8375
  }
8072
8376
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
8377
+ const triggerConfig = client.__triggerConfig;
8378
+ const triggerTools = triggerConfig ? createTriggerTools(triggerConfig, options?.context) : null;
8073
8379
  const results = await Promise.all(functionCalls.map(async (call) => {
8074
8380
  if (!call?.name) {
8075
8381
  throw new Error("Function call must have a name");
8076
8382
  }
8077
8383
  const args = call.args || {};
8078
- const result = await executeToolWithToken(client, call.name, args, finalOptions);
8384
+ let result;
8385
+ if (triggerTools && triggerTools[call.name]) {
8386
+ result = await triggerTools[call.name].execute(args);
8387
+ } else {
8388
+ result = await executeToolWithToken(client, call.name, args, finalOptions);
8389
+ }
8079
8390
  return JSON.stringify(result);
8080
8391
  }));
8081
8392
  return results;
@@ -8090,10 +8401,46 @@ async function getGoogleTools(client, options) {
8090
8401
  }
8091
8402
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
8092
8403
  const mcpTools = client.getEnabledTools();
8093
- return await Promise.all(mcpTools.map((mcpTool) => convertMCPToolToGoogle(mcpTool, client, finalOptions)));
8404
+ const googleTools = await Promise.all(mcpTools.map((mcpTool) => convertMCPToolToGoogle(mcpTool, client, finalOptions)));
8405
+ const triggerConfig = client.__triggerConfig;
8406
+ if (triggerConfig) {
8407
+ const triggerTools = createTriggerTools(triggerConfig, options?.context);
8408
+ const TypeEnum = await getGoogleType();
8409
+ for (const [name, tool] of Object.entries(triggerTools)) {
8410
+ const zodSchema = tool.inputSchema;
8411
+ const jsonSchema = zodToGoogleSchema(zodSchema, TypeEnum);
8412
+ googleTools.push({
8413
+ name,
8414
+ description: tool.description || `Execute ${name}`,
8415
+ parameters: jsonSchema
8416
+ });
8417
+ }
8418
+ }
8419
+ return googleTools;
8420
+ }
8421
+ function zodToGoogleSchema(schema, TypeEnum) {
8422
+ if (schema._def?.typeName === "ZodObject") {
8423
+ const shape = schema._def.shape();
8424
+ const properties = {};
8425
+ const required = [];
8426
+ for (const [key, value] of Object.entries(shape)) {
8427
+ const fieldSchema = value;
8428
+ properties[key] = { type: TypeEnum.STRING };
8429
+ if (fieldSchema._def?.typeName !== "ZodOptional") {
8430
+ required.push(key);
8431
+ }
8432
+ }
8433
+ return {
8434
+ type: TypeEnum.OBJECT,
8435
+ properties,
8436
+ ...required.length > 0 ? { required } : {}
8437
+ };
8438
+ }
8439
+ return { type: TypeEnum.OBJECT, properties: {} };
8094
8440
  }
8095
8441
  var init_google = __esm(() => {
8096
8442
  init_utils();
8443
+ init_trigger_tools();
8097
8444
  });
8098
8445
 
8099
8446
  // src/ai/index.ts
@@ -8102,59 +8449,7 @@ var init_ai = __esm(() => {
8102
8449
  init_openai();
8103
8450
  init_anthropic();
8104
8451
  init_google();
8105
- });
8106
-
8107
- // node_modules/nanoid/index.browser.js
8108
- var nanoid = (size = 21) => crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {
8109
- byte &= 63;
8110
- if (byte < 36) {
8111
- id += byte.toString(36);
8112
- } else if (byte < 62) {
8113
- id += (byte - 26).toString(36).toUpperCase();
8114
- } else if (byte > 62) {
8115
- id += "-";
8116
- } else {
8117
- id += "_";
8118
- }
8119
- return id;
8120
- }, "");
8121
- var init_index_browser = () => {};
8122
-
8123
- // src/triggers/utils.ts
8124
- var exports_utils = {};
8125
- __export(exports_utils, {
8126
- validateStatusTransition: () => validateStatusTransition,
8127
- generateTriggerId: () => generateTriggerId,
8128
- extractProviderFromToolName: () => extractProviderFromToolName,
8129
- calculateHasMore: () => calculateHasMore
8130
- });
8131
- function generateTriggerId() {
8132
- return `trig_${nanoid(12)}`;
8133
- }
8134
- function extractProviderFromToolName(toolName) {
8135
- const parts = toolName.split("_");
8136
- return parts[0] || toolName;
8137
- }
8138
- function validateStatusTransition(currentStatus, targetStatus) {
8139
- if (targetStatus === "paused" && currentStatus !== "active") {
8140
- return {
8141
- valid: false,
8142
- error: `Cannot pause trigger with status '${currentStatus}'. Only 'active' triggers can be paused.`
8143
- };
8144
- }
8145
- if (targetStatus === "active" && currentStatus !== "paused") {
8146
- return {
8147
- valid: false,
8148
- error: `Cannot resume trigger with status '${currentStatus}'. Only 'paused' triggers can be resumed.`
8149
- };
8150
- }
8151
- return { valid: true };
8152
- }
8153
- function calculateHasMore(offset, returnedCount, total) {
8154
- return offset + returnedCount < total;
8155
- }
8156
- var init_utils2 = __esm(() => {
8157
- init_index_browser();
8452
+ init_trigger_tools();
8158
8453
  });
8159
8454
 
8160
8455
  // src/server.ts
@@ -8194,6 +8489,7 @@ __export(exports_server, {
8194
8489
  figmaIntegration: () => figmaIntegration,
8195
8490
  executeGoogleFunctionCalls: () => executeGoogleFunctionCalls,
8196
8491
  cursorIntegration: () => cursorIntegration,
8492
+ createTriggerTools: () => createTriggerTools,
8197
8493
  createSimpleIntegration: () => createSimpleIntegration,
8198
8494
  createMCPServer: () => createMCPServer,
8199
8495
  calcomIntegration: () => calcomIntegration,
@@ -8291,6 +8587,10 @@ function createMCPServer(config) {
8291
8587
  setProviderToken: config.setProviderToken,
8292
8588
  removeProviderToken: config.removeProviderToken
8293
8589
  };
8590
+ client.__triggerConfig = config.triggers ? {
8591
+ callbacks: config.triggers,
8592
+ getSessionContext: config.getSessionContext
8593
+ } : undefined;
8294
8594
  const { POST, GET } = createOAuthRouteHandlers({
8295
8595
  providers,
8296
8596
  serverUrl: config.serverUrl,