n8n
Version:
n8n Workflow Automation Tool
206 lines (205 loc) • 7.62 kB
TypeScript
import { Tool } from '@n8n/agents';
import { z } from 'zod';
import type { AgentIntegrationConfig } from '@n8n/api-types';
import { type IntegrationErrorCode } from './integration-error-codes';
export type IntegrationMessageTarget = {
type: 'thread';
threadId: string;
channelId?: string;
userId?: string;
} | {
type: 'channel';
channelId: string;
threadId?: string;
} | {
type: 'dm';
userId: string;
threadId?: string;
};
export interface IntegrationMessageContext {
integrationConnectionId: string;
platform: string;
target: IntegrationMessageTarget;
messageId?: string;
interactingUserId?: string;
agentUserId?: string;
subject?: IntegrationMessageSubject;
updatedAt: string;
}
export interface IntegrationMessageSubject {
type: string;
id: string;
title?: string;
description?: string;
url?: string;
status?: string;
labels?: string[];
assignee?: IntegrationSubjectPerson;
author?: IntegrationSubjectPerson;
}
export interface IntegrationSubjectPerson {
id: string;
name: string;
}
export interface IntegrationToolConnectionDescriptor {
agentId?: string;
integration: AgentIntegrationConfig;
integrationConnectionId: string;
contextToolName: string;
actionToolName: string;
contextQueries: IntegrationContextQuery[];
actions: IntegrationAction[];
}
export interface IntegrationMessageContextStore {
getLatest(threadId: string): Promise<IntegrationMessageContext | null>;
setLatest(threadId: string, resourceId: string, context: IntegrationMessageContext): Promise<void>;
}
export interface IntegrationContextQueryExecutor {
execute(params: {
descriptor: IntegrationToolConnectionDescriptor;
query: IntegrationContextQuery;
input: Record<string, unknown>;
persistence?: {
threadId: string;
resourceId: string;
};
}): Promise<unknown>;
}
export interface IntegrationActionExecutor {
execute(params: {
descriptor: IntegrationToolConnectionDescriptor;
action: IntegrationAction;
input: Record<string, unknown>;
awaitResponse: boolean;
runId?: string;
toolCallId?: string;
currentMessageContext?: IntegrationMessageContext;
}): Promise<IntegrationActionResult>;
}
export type IntegrationContextQuery = 'get_current_message_context' | 'get_current_subject' | 'get_current_user' | 'get_current_channel_info' | 'get_user' | 'get_channel_info' | 'search_users' | 'search_channels' | 'get_team' | 'search_teams' | 'get_project' | 'search_projects' | 'search_labels' | 'search_issue_states' | 'get_issue' | 'search_issues';
export type IntegrationAction = 'respond' | 'send_dm' | 'send_channel_message' | 'add_reaction' | 'create_issue' | 'update_issue' | 'create_comment';
export type IntegrationActionResult = {
ok: true;
messageContext?: IntegrationMessageContext;
[key: string]: unknown;
} | {
ok: false;
error: {
code: IntegrationErrorCode;
message: string;
};
};
export declare const DEFAULT_INTEGRATION_CONTEXT_QUERIES: IntegrationContextQuery[];
export declare const DEFAULT_INTEGRATION_ACTIONS: IntegrationAction[];
export declare function getIntegrationToolConnectionDescriptors(integrations: AgentIntegrationConfig[], agentId?: string, capabilitiesFor?: (integration: AgentIntegrationConfig) => {
contextQueries?: IntegrationContextQuery[];
actions?: IntegrationAction[];
}): IntegrationToolConnectionDescriptor[];
export declare function buildIntegrationConnectionId(integration: Pick<AgentIntegrationConfig, 'type' | 'credentialId'>): string;
export declare function createIntegrationContextTool(params: {
descriptor: IntegrationToolConnectionDescriptor;
messageContextStore: IntegrationMessageContextStore;
queryExecutor: IntegrationContextQueryExecutor;
}): Tool<z.ZodEffects<z.ZodObject<{
query: z.ZodOptional<z.ZodEnum<[IntegrationContextQuery, ...IntegrationContextQuery[]]>>;
input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
queries: z.ZodOptional<z.ZodArray<z.ZodObject<{
query: z.ZodEnum<[IntegrationContextQuery, ...IntegrationContextQuery[]]>;
input: z.ZodRecord<z.ZodString, z.ZodUnknown>;
}, "strict", z.ZodTypeAny, {
query: IntegrationContextQuery;
input: Record<string, unknown>;
}, {
query: IntegrationContextQuery;
input: Record<string, unknown>;
}>, "many">>;
}, "strict", z.ZodTypeAny, {
query?: IntegrationContextQuery | undefined;
input?: Record<string, unknown> | undefined;
queries?: {
query: IntegrationContextQuery;
input: Record<string, unknown>;
}[] | undefined;
}, {
query?: IntegrationContextQuery | undefined;
input?: Record<string, unknown> | undefined;
queries?: {
query: IntegrationContextQuery;
input: Record<string, unknown>;
}[] | undefined;
}>, {
query?: IntegrationContextQuery | undefined;
input?: Record<string, unknown> | undefined;
queries?: {
query: IntegrationContextQuery;
input: Record<string, unknown>;
}[] | undefined;
}, {
query?: IntegrationContextQuery | undefined;
input?: Record<string, unknown> | undefined;
queries?: {
query: IntegrationContextQuery;
input: Record<string, unknown>;
}[] | undefined;
}>, z.ZodTypeAny, undefined, undefined>;
export declare function createIntegrationActionTool(params: {
descriptor: IntegrationToolConnectionDescriptor;
messageContextStore: IntegrationMessageContextStore;
actionExecutor: IntegrationActionExecutor;
}): Tool<z.ZodEffects<z.ZodObject<{
action: z.ZodOptional<z.ZodEnum<[IntegrationAction, ...IntegrationAction[]]>>;
input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
action: z.ZodEnum<[IntegrationAction, ...IntegrationAction[]]>;
input: z.ZodRecord<z.ZodString, z.ZodUnknown>;
}, "strict", z.ZodTypeAny, {
input: Record<string, unknown>;
action: IntegrationAction;
}, {
input: Record<string, unknown>;
action: IntegrationAction;
}>, "many">>;
}, "strict", z.ZodTypeAny, {
input?: Record<string, unknown> | undefined;
action?: IntegrationAction | undefined;
actions?: {
input: Record<string, unknown>;
action: IntegrationAction;
}[] | undefined;
}, {
input?: Record<string, unknown> | undefined;
action?: IntegrationAction | undefined;
actions?: {
input: Record<string, unknown>;
action: IntegrationAction;
}[] | undefined;
}>, {
input?: Record<string, unknown> | undefined;
action?: IntegrationAction | undefined;
actions?: {
input: Record<string, unknown>;
action: IntegrationAction;
}[] | undefined;
}, {
input?: Record<string, unknown> | undefined;
action?: IntegrationAction | undefined;
actions?: {
input: Record<string, unknown>;
action: IntegrationAction;
}[] | undefined;
}>, z.ZodTypeAny, z.ZodObject<{
type: z.ZodLiteral<"integration_action">;
action: z.ZodString;
integrationConnectionId: z.ZodString;
messageContext: z.ZodUnknown;
}, "strip", z.ZodTypeAny, {
type: "integration_action";
action: string;
integrationConnectionId: string;
messageContext?: unknown;
}, {
type: "integration_action";
action: string;
integrationConnectionId: string;
messageContext?: unknown;
}>, z.ZodRecord<z.ZodString, z.ZodUnknown>>;