chore: Add new ai-node-sdk (#25219)

This commit is contained in:
yehorkardash 2026-02-03 13:17:14 +01:00 committed by GitHub
parent 3cd17485fe
commit 8b0f3efc8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 188 additions and 5 deletions

View file

@ -0,0 +1,20 @@
root = true
[*]
charset = utf-8
indent_style = tab
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[package.json]
indent_style = space
indent_size = 2
[*.md]
trim_trailing_whitespace = false
[*.yml]
indent_style = space
indent_size = 2

8
packages/@n8n/ai-node-sdk/.gitignore vendored Normal file
View file

@ -0,0 +1,8 @@
node_modules
.DS_Store
.tmp
tmp
dist
npm-debug.log*
yarn.lock
.vscode/launch.json

View file

@ -0,0 +1,2 @@
.DS_Store
*.tsbuildinfo

View file

@ -0,0 +1,24 @@
# @n8n/ai-node-sdk
SDK for building AI nodes in n8n.
## Installation
This package is part of the n8n monorepo and should be installed via the workspace.
## Usage
TBD
## Development
```bash
# Build the package
pnpm build
# Run tests
pnpm test
# Run in watch mode
pnpm dev
```

View file

@ -0,0 +1,12 @@
import { defineConfig } from 'eslint/config';
import { nodeConfig } from '@n8n/eslint-config/node';
export default defineConfig(nodeConfig, {
rules: {
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/no-unsafe-assignment': 'warn',
'@typescript-eslint/no-unsafe-call': 'warn',
'@typescript-eslint/no-unsafe-member-access': 'warn',
'@typescript-eslint/no-unsafe-return': 'warn',
},
});

View file

@ -0,0 +1,6 @@
/** @type {import('jest').Config} */
module.exports = {
...require('../../../jest.config'),
collectCoverageFrom: ['src/**/*.ts'],
setupFilesAfterEnv: ['jest-expect-message'],
};

View file

@ -0,0 +1,33 @@
{
"name": "@n8n/ai-node-sdk",
"version": "0.1.0",
"description": "SDK for building AI nodes in n8n",
"main": "index.js",
"scripts": {
"clean": "rimraf dist .turbo",
"dev": "pnpm run watch",
"typecheck": "tsc --noEmit",
"build": "tsc --build tsconfig.build.json && tsc-alias -p tsconfig.build.json",
"format": "biome format --write .",
"format:check": "biome ci .",
"lint": "eslint . --quiet",
"lint:fix": "eslint . --fix",
"watch": "tsc-watch -p tsconfig.build.json",
"test": "jest",
"test:unit": "jest",
"test:dev": "jest --watch"
},
"files": [
"dist"
],
"devDependencies": {
"jest-mock-extended": "^3.0.4"
},
"dependencies": {
"@langchain/core": "catalog:",
"langchain": "catalog:",
"@n8n/config": "workspace:*",
"@n8n/typescript-config": "workspace:*",
"n8n-workflow": "workspace:*"
}
}

View file

@ -0,0 +1,5 @@
describe('index', () => {
it('2+2=4', () => {
expect(2 + 2).toBe(4);
});
});

View file

@ -0,0 +1 @@
export type { DummyInterface } from './types';

View file

@ -0,0 +1,3 @@
export interface DummyInterface {
foo: string;
}

View file

@ -0,0 +1,11 @@
{
"extends": ["./tsconfig.json", "@n8n/typescript-config/modern/tsconfig.cjs.json"],
"compilerOptions": {
"outDir": "dist",
"module": "commonjs",
"declaration": true,
"tsBuildInfoFile": "dist/typecheck.tsbuildinfo"
},
"include": ["src/**/*.ts"],
"exclude": ["node_modules", "src/**/*.test.ts", "test/**"]
}

View file

@ -0,0 +1,15 @@
{
"extends": [
"@n8n/typescript-config/tsconfig.common.json",
"@n8n/typescript-config/tsconfig.backend.json"
],
"compilerOptions": {
"baseUrl": ".",
"paths": {},
"tsBuildInfoFile": "dist/typecheck.tsbuildinfo",
"emitDecoratorMetadata": true,
"experimentalDecorators": true
},
"include": ["src/**/*.ts", "test/**/*.ts"],
"references": [{ "path": "../../workflow/tsconfig.build.esm.json" }]
}

View file

@ -242,7 +242,7 @@
"ignore": "^5.2.0",
"js-tiktoken": "^1.0.12",
"jsdom": "23.0.1",
"langchain": "1.2.3",
"langchain": "catalog:",
"@langchain/classic": "1.0.5",
"lodash": "catalog:",
"mammoth": "1.11.0",

View file

@ -129,6 +129,9 @@ catalogs:
kafkajs:
specifier: 2.2.4
version: 2.2.4
langchain:
specifier: 1.2.3
version: 1.2.3
lodash:
specifier: 4.17.23
version: 4.17.23
@ -478,6 +481,28 @@ importers:
specifier: ^8.1.4
version: 8.1.4
packages/@n8n/ai-node-sdk:
dependencies:
'@langchain/core':
specifier: 'catalog:'
version: 1.1.8(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67))
'@n8n/config':
specifier: workspace:*
version: link:../config
'@n8n/typescript-config':
specifier: workspace:*
version: link:../typescript-config
langchain:
specifier: 'catalog:'
version: 1.2.3(@langchain/core@1.1.8(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67))(zod-to-json-schema@3.25.0(zod@3.25.67))
n8n-workflow:
specifier: workspace:*
version: link:../../workflow
devDependencies:
jest-mock-extended:
specifier: ^3.0.4
version: 3.0.4(jest@29.7.0(@types/node@20.19.21)(ts-node@10.9.2(@swc/core@1.15.8(@swc/helpers@0.5.17))(@types/node@20.19.21)(typescript@5.9.2)))(typescript@5.9.2)
packages/@n8n/ai-workflow-builder.ee:
dependencies:
'@langchain/anthropic':
@ -1429,7 +1454,7 @@ importers:
specifier: 23.0.1
version: 23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)
langchain:
specifier: 1.2.3
specifier: 'catalog:'
version: 1.2.3(@langchain/core@1.1.8(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(zod-to-json-schema@3.23.3(zod@3.25.67))
lodash:
specifier: 'catalog:'
@ -31491,7 +31516,7 @@ snapshots:
'@types/debug': 4.1.12
'@types/node': 20.19.21
'@types/tough-cookie': 4.0.5
axios: 1.12.0
axios: 1.12.0(debug@4.4.3)
camelcase: 6.3.0
debug: 4.4.3(supports-color@8.1.1)
dotenv: 16.6.1
@ -31501,7 +31526,7 @@ snapshots:
isstream: 0.1.2
jsonwebtoken: 9.0.3
mime-types: 2.1.35
retry-axios: 2.6.0(axios@1.12.0(debug@4.4.3))
retry-axios: 2.6.0(axios@1.12.0)
tough-cookie: 4.1.4
transitivePeerDependencies:
- supports-color
@ -33002,6 +33027,23 @@ snapshots:
- react-dom
- zod-to-json-schema
langchain@1.2.3(@langchain/core@1.1.8(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67))(zod-to-json-schema@3.25.0(zod@3.25.67)):
dependencies:
'@langchain/core': 1.1.8(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67))
'@langchain/langgraph': 1.0.2(@langchain/core@1.1.8(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(zod-to-json-schema@3.25.0(zod@3.25.67))(zod@3.25.67)
'@langchain/langgraph-checkpoint': 1.0.0(@langchain/core@1.1.8(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)))
langsmith: 0.4.4(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67))
uuid: 10.0.0
zod: 3.25.67
transitivePeerDependencies:
- '@opentelemetry/api'
- '@opentelemetry/exporter-trace-otlp-proto'
- '@opentelemetry/sdk-trace-base'
- openai
- react
- react-dom
- zod-to-json-schema
langsmith@0.3.81(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(openai@6.9.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.67)):
dependencies:
'@types/uuid': 10.0.0
@ -35991,7 +36033,7 @@ snapshots:
onetime: 5.1.2
signal-exit: 3.0.7
retry-axios@2.6.0(axios@1.12.0(debug@4.4.3)):
retry-axios@2.6.0(axios@1.12.0):
dependencies:
axios: 1.12.0

View file

@ -56,6 +56,7 @@ catalog:
jsonrepair: 3.13.1
jsonwebtoken: 9.0.3
kafkajs: 2.2.4
langchain: 1.2.3
lodash: 4.17.23
luxon: 3.7.2
mime-types: 3.0.2