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.
- package/dist/adapters/auto-routes.js +371 -71
- package/dist/adapters/base-handler.js +561 -0
- package/dist/adapters/index.js +371 -71
- package/dist/adapters/nextjs.js +371 -71
- package/dist/adapters/node.js +371 -71
- package/dist/adapters/svelte-kit.js +371 -71
- package/dist/adapters/tanstack-start.js +371 -71
- package/dist/ai/anthropic.d.ts +3 -0
- package/dist/ai/anthropic.d.ts.map +1 -1
- package/dist/ai/anthropic.js +255 -2
- package/dist/ai/cloudflare.d.ts +158 -0
- package/dist/ai/cloudflare.d.ts.map +1 -0
- package/dist/ai/cloudflare.js +4249 -0
- package/dist/ai/google.d.ts +3 -0
- package/dist/ai/google.d.ts.map +1 -1
- package/dist/ai/google.js +256 -2
- package/dist/ai/index.d.ts +1 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +351 -7
- package/dist/ai/langchain.d.ts +139 -0
- package/dist/ai/langchain.d.ts.map +1 -0
- package/dist/ai/langchain.js +4237 -0
- package/dist/ai/llamaindex.d.ts +125 -0
- package/dist/ai/llamaindex.d.ts.map +1 -0
- package/dist/ai/llamaindex.js +4236 -0
- package/dist/ai/mastra.d.ts +138 -0
- package/dist/ai/mastra.d.ts.map +1 -0
- package/dist/ai/mastra.js +4240 -0
- package/dist/ai/openai.d.ts +3 -0
- package/dist/ai/openai.d.ts.map +1 -1
- package/dist/ai/openai.js +257 -2
- package/dist/ai/trigger-tools.d.ts +206 -0
- package/dist/ai/trigger-tools.d.ts.map +1 -0
- package/dist/ai/trigger-tools.js +4198 -0
- package/dist/ai/vercel-ai.d.ts.map +1 -1
- package/dist/ai/vercel-ai.js +217 -0
- package/dist/index.js +359 -59
- package/dist/oauth.js +371 -71
- package/dist/server.js +372 -71
- package/dist/src/ai/anthropic.d.ts +3 -0
- package/dist/src/ai/anthropic.d.ts.map +1 -1
- package/dist/src/ai/cloudflare.d.ts +158 -0
- package/dist/src/ai/cloudflare.d.ts.map +1 -0
- package/dist/src/ai/google.d.ts +3 -0
- package/dist/src/ai/google.d.ts.map +1 -1
- package/dist/src/ai/index.d.ts +1 -0
- package/dist/src/ai/index.d.ts.map +1 -1
- package/dist/src/ai/langchain.d.ts +139 -0
- package/dist/src/ai/langchain.d.ts.map +1 -0
- package/dist/src/ai/llamaindex.d.ts +125 -0
- package/dist/src/ai/llamaindex.d.ts.map +1 -0
- package/dist/src/ai/mastra.d.ts +138 -0
- package/dist/src/ai/mastra.d.ts.map +1 -0
- package/dist/src/ai/openai.d.ts +3 -0
- package/dist/src/ai/openai.d.ts.map +1 -1
- package/dist/src/ai/trigger-tools.d.ts +206 -0
- package/dist/src/ai/trigger-tools.d.ts.map +1 -0
- package/dist/src/ai/vercel-ai.d.ts.map +1 -1
- package/dist/src/integrations/vercel-ai.d.ts +127 -0
- package/dist/src/integrations/vercel-ai.d.ts.map +1 -0
- package/dist/src/plugins/generic.d.ts +99 -0
- package/dist/src/plugins/generic.d.ts.map +1 -0
- package/dist/src/plugins/github-client.d.ts +320 -0
- package/dist/src/plugins/github-client.d.ts.map +1 -0
- package/dist/src/plugins/github.d.ts +89 -0
- package/dist/src/plugins/github.d.ts.map +1 -0
- package/dist/src/plugins/gmail-client.d.ts +106 -0
- package/dist/src/plugins/gmail-client.d.ts.map +1 -0
- package/dist/src/plugins/gmail.d.ts +87 -0
- package/dist/src/plugins/gmail.d.ts.map +1 -0
- package/dist/src/plugins/server-client.d.ts +18 -0
- package/dist/src/plugins/server-client.d.ts.map +1 -0
- package/dist/src/plugins/types.d.ts +70 -0
- package/dist/src/plugins/types.d.ts.map +1 -0
- package/dist/src/server.d.ts.map +1 -1
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|