diff --git a/examples/agent-kit-langgraph/.env.example b/examples/agent-kit-langgraph/.env.example new file mode 100644 index 0000000..42663ec --- /dev/null +++ b/examples/agent-kit-langgraph/.env.example @@ -0,0 +1,4 @@ +OPENAI_API_KEY= +RPC_URL= +SOLANA_PRIVATE_KEY= +TAVILY_API_KEY= #Optional: for search functionality diff --git a/examples/agent-kit-langgraph/.gitignore b/examples/agent-kit-langgraph/.gitignore new file mode 100644 index 0000000..fc14cf2 --- /dev/null +++ b/examples/agent-kit-langgraph/.gitignore @@ -0,0 +1,11 @@ +# Dependencies +node_modules/ +package-lock.json + +# Environment variables +.env +.env.local + +# Build output +dist/ +build/ \ No newline at end of file diff --git a/examples/agent-kit-langgraph/package.json b/examples/agent-kit-langgraph/package.json index 6e9d770..b88b54b 100644 --- a/examples/agent-kit-langgraph/package.json +++ b/examples/agent-kit-langgraph/package.json @@ -3,8 +3,10 @@ "version": "1.0.0", "description": "", "main": "index.js", + "type": "module", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "node --loader ts-node/esm" }, "keywords": [], "author": "", @@ -15,5 +17,13 @@ "@langchain/langgraph": "^0.2.36", "dotenv": "^16.4.7", "solana-agent-kit": "^1.3.0" + }, + "devDependencies": { + "ts-node": "^10.9.2", + "typescript": "^5.0.0" + }, + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node" } } diff --git a/examples/agent-kit-langgraph/pnpm-lock.yaml b/examples/agent-kit-langgraph/pnpm-lock.yaml index 3618a84..65fa0b7 100644 --- a/examples/agent-kit-langgraph/pnpm-lock.yaml +++ b/examples/agent-kit-langgraph/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@langchain/community': specifier: ^0.3.20 - version: 0.3.20(@browserbasehq/sdk@2.0.0)(@browserbasehq/stagehand@1.8.0(@playwright/test@1.49.1)(bufferutil@4.0.8)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.77.0(zod@3.24.1))(utf-8-validate@5.0.10)(zod@3.24.1))(@ibm-cloud/watsonx-ai@1.3.0)(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(@langchain/groq@0.1.2(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))))(axios@1.7.4)(ibm-cloud-sdk-core@5.1.0)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.77.0(zod@3.24.1))(playwright@1.49.1)(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + version: 0.3.20(@browserbasehq/sdk@2.0.0)(@browserbasehq/stagehand@1.8.0(@playwright/test@1.49.1)(bufferutil@4.0.8)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.77.0(zod@3.24.1))(utf-8-validate@5.0.10)(zod@3.24.1))(@ibm-cloud/watsonx-ai@1.3.0)(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(@langchain/groq@0.1.2(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))))(axios@1.7.4)(ibm-cloud-sdk-core@5.1.0)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.77.0(zod@3.24.1))(playwright@1.49.1)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@langchain/core': specifier: ^0.3.26 version: 0.3.26(openai@4.77.0(zod@3.24.1)) @@ -23,6 +23,13 @@ importers: solana-agent-kit: specifier: ^1.3.0 version: 1.3.0(@noble/hashes@1.6.1)(axios@1.7.4)(borsh@2.0.0)(buffer@6.0.3)(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.24.1) + devDependencies: + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@18.19.68)(typescript@5.6.3) + typescript: + specifier: ^5.0.0 + version: 5.6.3 packages: @@ -68,6 +75,10 @@ packages: peerDependencies: '@solana/web3.js': ^1.68.0 + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@emnapi/runtime@1.3.1': resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} @@ -189,6 +200,16 @@ packages: cpu: [x64] os: [win32] + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@langchain/community@0.3.20': resolution: {integrity: sha512-5XmguFWVrfYJ8s9kHPAmC1bTGfdVOKqzWVCoTolSXMVMDaVn+LVvCJxEedO01kU1y2AS4pUl5MDI9wssKS1Ehg==} engines: {node: '>=18'} @@ -948,6 +969,18 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -1010,6 +1043,15 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} @@ -1021,6 +1063,9 @@ packages: ansicolors@0.3.2: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1183,6 +1228,9 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cross-fetch@3.2.0: resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} @@ -1247,6 +1295,10 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -1588,6 +1640,9 @@ packages: lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true @@ -1877,6 +1932,20 @@ packages: ts-log@2.2.7: resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==} + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} @@ -1956,6 +2025,9 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} @@ -2009,6 +2081,10 @@ packages: engines: {node: '>= 14'} hasBin: true + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + zod-to-json-schema@3.24.1: resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} peerDependencies: @@ -2122,6 +2198,10 @@ snapshots: bn.js: 5.2.1 buffer-layout: 1.2.2 + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + '@emnapi/runtime@1.3.1': dependencies: tslib: 2.8.1 @@ -2222,7 +2302,16 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true - '@langchain/community@0.3.20(@browserbasehq/sdk@2.0.0)(@browserbasehq/stagehand@1.8.0(@playwright/test@1.49.1)(bufferutil@4.0.8)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.77.0(zod@3.24.1))(utf-8-validate@5.0.10)(zod@3.24.1))(@ibm-cloud/watsonx-ai@1.3.0)(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(@langchain/groq@0.1.2(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))))(axios@1.7.4)(ibm-cloud-sdk-core@5.1.0)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.77.0(zod@3.24.1))(playwright@1.49.1)(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@langchain/community@0.3.20(@browserbasehq/sdk@2.0.0)(@browserbasehq/stagehand@1.8.0(@playwright/test@1.49.1)(bufferutil@4.0.8)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.77.0(zod@3.24.1))(utf-8-validate@5.0.10)(zod@3.24.1))(@ibm-cloud/watsonx-ai@1.3.0)(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(@langchain/groq@0.1.2(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))))(axios@1.7.4)(ibm-cloud-sdk-core@5.1.0)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.77.0(zod@3.24.1))(playwright@1.49.1)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))': dependencies: '@browserbasehq/stagehand': 1.8.0(@playwright/test@1.49.1)(bufferutil@4.0.8)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.77.0(zod@3.24.1))(utf-8-validate@5.0.10)(zod@3.24.1) '@ibm-cloud/watsonx-ai': 1.3.0 @@ -2244,7 +2333,7 @@ snapshots: jsonwebtoken: 9.0.2 lodash: 4.17.21 playwright: 1.49.1 - ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@langchain/anthropic' - '@langchain/aws' @@ -2898,6 +2987,14 @@ snapshots: '@tokenizer/token@0.3.0': {} + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + '@types/connect@3.4.38': dependencies: '@types/node': 18.19.68 @@ -2960,6 +3057,12 @@ snapshots: dependencies: event-target-shim: 5.0.1 + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + agentkeepalive@4.5.0: dependencies: humanize-ms: 1.2.1 @@ -2968,6 +3071,8 @@ snapshots: ansicolors@0.3.2: {} + arg@4.1.3: {} + argparse@2.0.1: {} assert@2.1.0: @@ -3132,6 +3237,8 @@ snapshots: commander@2.20.3: {} + create-require@1.1.1: {} + cross-fetch@3.2.0: dependencies: node-fetch: 2.7.0 @@ -3180,6 +3287,8 @@ snapshots: dependencies: dequal: 2.0.3 + diff@4.0.2: {} + dot-case@3.0.4: dependencies: no-case: 3.0.4 @@ -3539,6 +3648,8 @@ snapshots: lunr@2.3.9: {} + make-error@1.3.6: {} + markdown-it@14.1.0: dependencies: argparse: 2.0.1 @@ -3909,6 +4020,24 @@ snapshots: ts-log@2.2.7: {} + ts-node@10.9.2(@types/node@18.19.68)(typescript@5.6.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.19.68 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.6.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 @@ -3992,6 +4121,8 @@ snapshots: uuid@9.0.1: {} + v8-compile-cache-lib@3.0.1: {} + vfile-message@4.0.2: dependencies: '@types/unist': 3.0.3 @@ -4034,6 +4165,8 @@ snapshots: yaml@2.6.1: {} + yn@3.1.1: {} + zod-to-json-schema@3.24.1(zod@3.24.1): dependencies: zod: 3.24.1 diff --git a/examples/agent-kit-langgraph/src/agents/generalAgent.ts b/examples/agent-kit-langgraph/src/agents/generalAgent.ts new file mode 100644 index 0000000..da9e1fa --- /dev/null +++ b/examples/agent-kit-langgraph/src/agents/generalAgent.ts @@ -0,0 +1,32 @@ +import { createReactAgent } from "@langchain/langgraph/prebuilt"; +import { gpt4o } from "../utils/model.js"; +import { solanaAgentState } from "../utils/state.js"; +import { TavilySearchResults } from "@langchain/community/tools/tavily_search"; +import { HumanMessage } from "@langchain/core/messages"; + +// Initialize tools array +const searchTools = []; + +// Only add Tavily search if API key is available +if (process.env.TAVILY_API_KEY) { + searchTools.push(new TavilySearchResults()); +} + +export const generalAgent = createReactAgent({ + llm: gpt4o, + tools: searchTools, +}); + +export const generalistNode = async (state: typeof solanaAgentState.State) => { + const { messages } = state; + + const result = await generalAgent.invoke({ messages }); + + return { messages: [...result.messages] }; +}; + +const messages = [new HumanMessage("What is the best way to buy SOL?")]; + +const result = await generalAgent.invoke({ messages }); + +console.log(result.messages); diff --git a/examples/agent-kit-langgraph/index.ts b/examples/agent-kit-langgraph/src/index.ts similarity index 100% rename from examples/agent-kit-langgraph/index.ts rename to examples/agent-kit-langgraph/src/index.ts diff --git a/examples/agent-kit-langgraph/utils/model.ts b/examples/agent-kit-langgraph/src/utils/model.ts similarity index 100% rename from examples/agent-kit-langgraph/utils/model.ts rename to examples/agent-kit-langgraph/src/utils/model.ts diff --git a/examples/agent-kit-langgraph/utils/route.ts b/examples/agent-kit-langgraph/src/utils/route.ts similarity index 100% rename from examples/agent-kit-langgraph/utils/route.ts rename to examples/agent-kit-langgraph/src/utils/route.ts diff --git a/examples/agent-kit-langgraph/utils/solanaAgent.ts b/examples/agent-kit-langgraph/src/utils/solanaAgent.ts similarity index 100% rename from examples/agent-kit-langgraph/utils/solanaAgent.ts rename to examples/agent-kit-langgraph/src/utils/solanaAgent.ts diff --git a/examples/agent-kit-langgraph/utils/state.ts b/examples/agent-kit-langgraph/src/utils/state.ts similarity index 100% rename from examples/agent-kit-langgraph/utils/state.ts rename to examples/agent-kit-langgraph/src/utils/state.ts diff --git a/examples/agent-kit-langgraph/tsconfig.json b/examples/agent-kit-langgraph/tsconfig.json new file mode 100644 index 0000000..da29480 --- /dev/null +++ b/examples/agent-kit-langgraph/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es2022", + "module": "es2022", + "moduleResolution": "node", + "esModuleInterop": true, + "strict": true, + "outDir": "./dist" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] + } \ No newline at end of file