diff --git a/package.json b/package.json index 648ce0f..95bb3ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solana-agent-kit", - "version": "1.3.5", + "version": "1.3.6", "description": "connect any ai agents to solana protocols", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/agent/index.ts b/src/agent/index.ts index ae0c367..aa73546 100644 --- a/src/agent/index.ts +++ b/src/agent/index.ts @@ -22,8 +22,8 @@ import { registerDomain, request_faucet_funds, trade, - limitOrder, - batchOrder, + // limitOrder, + // batchOrder, cancelAllOrders, withdrawAll, closePerpTradeShort, @@ -58,7 +58,7 @@ import { cancelListing, fetchTokenReportSummary, fetchTokenDetailedReport, - OrderParams, + // OrderParams, } from "../tools"; import { @@ -190,21 +190,21 @@ export class SolanaAgentKit { return trade(this, outputMint, inputAmount, inputMint, slippageBps); } - async limitOrder( - marketId: PublicKey, - quantity: number, - side: string, - price: number, - ): Promise { - return limitOrder(this, marketId, quantity, side, price); - } + // async limitOrder( + // marketId: PublicKey, + // quantity: number, + // side: string, + // price: number, + // ): Promise { + // return limitOrder(this, marketId, quantity, side, price); + // } - async batchOrder( - marketId: PublicKey, - orders: OrderParams[], - ): Promise { - return batchOrder(this, marketId, orders); - } + // async batchOrder( + // marketId: PublicKey, + // orders: OrderParams[], + // ): Promise { + // return batchOrder(this, marketId, orders); + // } async cancelAllOrders(marketId: PublicKey): Promise { return cancelAllOrders(this, marketId); diff --git a/src/langchain/index.ts b/src/langchain/index.ts index d5d17e5..ea82010 100644 --- a/src/langchain/index.ts +++ b/src/langchain/index.ts @@ -8,7 +8,7 @@ import { } from "../index"; import { create_image } from "../tools/create_image"; import { BN } from "@coral-xyz/anchor"; -import { FEE_TIERS, generateOrdersfromPattern, OrderParams } from "../tools"; +import { FEE_TIERS } from "../tools"; export class SolanaBalanceTool extends Tool { name = "solana_balance"; @@ -414,143 +414,143 @@ export class SolanaTradeTool extends Tool { } } -export class SolanaLimitOrderTool extends Tool { - name = "solana_limit_order"; - description = `This tool can be used to place limit orders using Manifest. +// export class SolanaLimitOrderTool extends Tool { +// name = "solana_limit_order"; +// description = `This tool can be used to place limit orders using Manifest. - Do not allow users to place multiple orders with this instruction, use solana_batch_order instead. +// Do not allow users to place multiple orders with this instruction, use solana_batch_order instead. - Inputs ( input is a JSON string ): - marketId: PublicKey, eg "ENhU8LsaR7vDD2G1CsWcsuSGNrih9Cv5WZEk7q9kPapQ" for SOL/USDC (required) - quantity: number, eg 1 or 0.01 (required) - side: string, eg "Buy" or "Sell" (required) - price: number, in tokens eg 200 for SOL/USDC (required)`; +// Inputs ( input is a JSON string ): +// marketId: PublicKey, eg "ENhU8LsaR7vDD2G1CsWcsuSGNrih9Cv5WZEk7q9kPapQ" for SOL/USDC (required) +// quantity: number, eg 1 or 0.01 (required) +// side: string, eg "Buy" or "Sell" (required) +// price: number, in tokens eg 200 for SOL/USDC (required)`; - constructor(private solanaKit: SolanaAgentKit) { - super(); - } +// constructor(private solanaKit: SolanaAgentKit) { +// super(); +// } - protected async _call(input: string): Promise { - try { - const parsedInput = JSON.parse(input); +// protected async _call(input: string): Promise { +// try { +// const parsedInput = JSON.parse(input); - const tx = await this.solanaKit.limitOrder( - new PublicKey(parsedInput.marketId), - parsedInput.quantity, - parsedInput.side, - parsedInput.price, - ); +// const tx = await this.solanaKit.limitOrder( +// new PublicKey(parsedInput.marketId), +// parsedInput.quantity, +// parsedInput.side, +// parsedInput.price, +// ); - return JSON.stringify({ - status: "success", - message: "Trade executed successfully", - transaction: tx, - marketId: parsedInput.marketId, - quantity: parsedInput.quantity, - side: parsedInput.side, - price: parsedInput.price, - }); - } catch (error: any) { - return JSON.stringify({ - status: "error", - message: error.message, - code: error.code || "UNKNOWN_ERROR", - }); - } - } -} +// return JSON.stringify({ +// status: "success", +// message: "Trade executed successfully", +// transaction: tx, +// marketId: parsedInput.marketId, +// quantity: parsedInput.quantity, +// side: parsedInput.side, +// price: parsedInput.price, +// }); +// } catch (error: any) { +// return JSON.stringify({ +// status: "error", +// message: error.message, +// code: error.code || "UNKNOWN_ERROR", +// }); +// } +// } +// } -export class SolanaBatchOrderTool extends Tool { - name = "solana_batch_order"; - description = `Places multiple limit orders in one transaction using Manifest. Submit orders either as a list or pattern: +// export class SolanaBatchOrderTool extends Tool { +// name = "solana_batch_order"; +// description = `Places multiple limit orders in one transaction using Manifest. Submit orders either as a list or pattern: - 1. List format: - { - "marketId": "ENhU8LsaR7vDD2G1CsWcsuSGNrih9Cv5WZEk7q9kPapQ", - "orders": [ - { "quantity": 1, "side": "Buy", "price": 200 }, - { "quantity": 0.5, "side": "Sell", "price": 205 } - ] - } +// 1. List format: +// { +// "marketId": "ENhU8LsaR7vDD2G1CsWcsuSGNrih9Cv5WZEk7q9kPapQ", +// "orders": [ +// { "quantity": 1, "side": "Buy", "price": 200 }, +// { "quantity": 0.5, "side": "Sell", "price": 205 } +// ] +// } - 2. Pattern format: - { - "marketId": "ENhU8LsaR7vDD2G1CsWcsuSGNrih9Cv5WZEk7q9kPapQ", - "pattern": { - "side": "Buy", - "totalQuantity": 100, - "priceRange": { "max": 1.0 }, - "spacing": { "type": "percentage", "value": 1 }, - "numberOfOrders": 5 - } - } +// 2. Pattern format: +// { +// "marketId": "ENhU8LsaR7vDD2G1CsWcsuSGNrih9Cv5WZEk7q9kPapQ", +// "pattern": { +// "side": "Buy", +// "totalQuantity": 100, +// "priceRange": { "max": 1.0 }, +// "spacing": { "type": "percentage", "value": 1 }, +// "numberOfOrders": 5 +// } +// } - Examples: - - "Place 5 buy orders totaling 100 tokens, 1% apart below $1" - - "Create 3 sell orders of 10 tokens each between $50-$55" - - "Place buy orders worth 50 tokens, $0.10 spacing from $0.80" +// Examples: +// - "Place 5 buy orders totaling 100 tokens, 1% apart below $1" +// - "Create 3 sell orders of 10 tokens each between $50-$55" +// - "Place buy orders worth 50 tokens, $0.10 spacing from $0.80" - Important: All orders must be in one transaction. Combine buy and sell orders into a single pattern or list. Never break the orders down to individual buy or sell orders.`; +// Important: All orders must be in one transaction. Combine buy and sell orders into a single pattern or list. Never break the orders down to individual buy or sell orders.`; - constructor(private solanaKit: SolanaAgentKit) { - super(); - } +// constructor(private solanaKit: SolanaAgentKit) { +// super(); +// } - protected async _call(input: string): Promise { - try { - const parsedInput = JSON.parse(input); - let ordersToPlace: OrderParams[] = []; +// protected async _call(input: string): Promise { +// try { +// const parsedInput = JSON.parse(input); +// let ordersToPlace: OrderParams[] = []; - if (!parsedInput.marketId) { - throw new Error("Market ID is required"); - } +// if (!parsedInput.marketId) { +// throw new Error("Market ID is required"); +// } - if (parsedInput.pattern) { - ordersToPlace = generateOrdersfromPattern(parsedInput.pattern); - } else if (Array.isArray(parsedInput.orders)) { - ordersToPlace = parsedInput.orders; - } else { - throw new Error("Either pattern or orders array is required"); - } +// if (parsedInput.pattern) { +// ordersToPlace = generateOrdersfromPattern(parsedInput.pattern); +// } else if (Array.isArray(parsedInput.orders)) { +// ordersToPlace = parsedInput.orders; +// } else { +// throw new Error("Either pattern or orders array is required"); +// } - if (ordersToPlace.length === 0) { - throw new Error("No orders generated or provided"); - } +// if (ordersToPlace.length === 0) { +// throw new Error("No orders generated or provided"); +// } - ordersToPlace.forEach((order: OrderParams, index: number) => { - if (!order.quantity || !order.side || !order.price) { - throw new Error( - `Invalid order at index ${index}: quantity, side, and price are required`, - ); - } - if (order.side !== "Buy" && order.side !== "Sell") { - throw new Error( - `Invalid side at index ${index}: must be "Buy" or "Sell"`, - ); - } - }); +// ordersToPlace.forEach((order: OrderParams, index: number) => { +// if (!order.quantity || !order.side || !order.price) { +// throw new Error( +// `Invalid order at index ${index}: quantity, side, and price are required`, +// ); +// } +// if (order.side !== "Buy" && order.side !== "Sell") { +// throw new Error( +// `Invalid side at index ${index}: must be "Buy" or "Sell"`, +// ); +// } +// }); - const tx = await this.solanaKit.batchOrder( - new PublicKey(parsedInput.marketId), - parsedInput.orders, - ); +// const tx = await this.solanaKit.batchOrder( +// new PublicKey(parsedInput.marketId), +// parsedInput.orders, +// ); - return JSON.stringify({ - status: "success", - message: "Batch order executed successfully", - transaction: tx, - marketId: parsedInput.marketId, - orders: parsedInput.orders, - }); - } catch (error: any) { - return JSON.stringify({ - status: "error", - message: error.message, - code: error.code || "UNKNOWN_ERROR", - }); - } - } -} +// return JSON.stringify({ +// status: "success", +// message: "Batch order executed successfully", +// transaction: tx, +// marketId: parsedInput.marketId, +// orders: parsedInput.orders, +// }); +// } catch (error: any) { +// return JSON.stringify({ +// status: "error", +// message: error.message, +// code: error.code || "UNKNOWN_ERROR", +// }); +// } +// } +// } export class SolanaCancelAllOrdersTool extends Tool { name = "solana_cancel_all_orders"; @@ -2149,8 +2149,8 @@ export function createSolanaTools(solanaKit: SolanaAgentKit) { new SolanaRaydiumCreateCpmm(solanaKit), new SolanaOpenbookCreateMarket(solanaKit), new SolanaManifestCreateMarket(solanaKit), - new SolanaLimitOrderTool(solanaKit), - new SolanaBatchOrderTool(solanaKit), + // new SolanaLimitOrderTool(solanaKit), + // new SolanaBatchOrderTool(solanaKit), new SolanaCancelAllOrdersTool(solanaKit), new SolanaWithdrawAllTool(solanaKit), new SolanaClosePosition(solanaKit), diff --git a/src/tools/batch_order.ts b/src/tools/batch_order.ts index f788ba4..d66b813 100644 --- a/src/tools/batch_order.ts +++ b/src/tools/batch_order.ts @@ -7,7 +7,7 @@ import { import { SolanaAgentKit } from "../index"; import { ManifestClient, - WrapperPlaceOrderParamsExternal, + WrapperPlaceOrderParamsExternal } from "@cks-systems/manifest-sdk"; import { OrderType } from "@cks-systems/manifest-sdk/client/ts/src/wrapper/types/OrderType"; diff --git a/src/tools/index.ts b/src/tools/index.ts index 62a11de..718c01a 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -9,8 +9,8 @@ export * from "./get_balance_other"; export * from "./mint_nft"; export * from "./transfer"; export * from "./trade"; -export * from "./limit_order"; -export * from "./batch_order"; +// export * from "./limit_order"; +// export * from "./batch_order"; export * from "./cancel_all_orders"; export * from "./withdraw_all"; export * from "./adrena_perp_trading";