feat: langchain integration

This commit is contained in:
fm2055
2024-12-16 23:00:31 +08:00
parent 8927ac4130
commit ff8cb4b842
5 changed files with 103 additions and 4 deletions

View File

@@ -9,6 +9,8 @@ import {
transfer,
trade,
registerDomain,
resolveSolDomain,
getPrimaryDomain,
launchPumpFunToken,
lendAsset,
getTPS,
@@ -79,6 +81,14 @@ export class SolanaAgentKit {
return registerDomain(this, name, spaceKB);
}
async resolveSolDomain(domain:string ){
return resolveSolDomain(this, domain)
}
async getPrimaryDomain(account: PublicKey){
return getPrimaryDomain(this, account)
}
async trade(
outputMint: PublicKey,
inputAmount: number,

View File

@@ -390,6 +390,93 @@ export class SolanaRegisterDomainTool extends Tool {
}
}
export class SolanaResolveDomainTool extends Tool {
name = "solana_resolve_domain";
description = `Resolve a .sol domain to a Solana PublicKey.
Inputs:
domain: string, eg "pumpfun.sol" or "pumpfun"(required)
`;
constructor(private solanaKit: SolanaAgentKit) {
super();
}
private validateInput(input: any): void {
if (!input.domain || typeof input.domain !== "string") {
throw new Error("domain is required and must be a string");
}
}
protected async _call(input: string): Promise<string> {
try {
const parsedInput = JSON.parse(input);
this.validateInput(parsedInput);
const publicKey = await this.solanaKit.resolveSolDomain(parsedInput.domain);
return JSON.stringify({
status: "success",
message: "Domain resolved successfully",
publicKey: publicKey.toBase58(),
});
} catch (error: any) {
return JSON.stringify({
status: "error",
message: error.message,
code: error.code || "UNKNOWN_ERROR",
});
}
}
}
export class SolanaGetPrimaryDomainTool extends Tool {
name = "solana_get_primary_domain";
description = `Retrieve the primary .sol domain associated with a given Solana public key.
Inputs:
account: string, eg "4Be9CvxqHW6BYiRAxW9Q3xu1ycTMWaL5z8NX4HR3ha7t" (required)
`;
constructor(private solanaKit: SolanaAgentKit) {
super();
}
private validateInput(input: any): void {
if (!input.account || typeof input.account !== "string") {
throw new Error("account is required and must be a string");
}
try {
new PublicKey(input.account);
} catch {
throw new Error("account is not a valid public key");
}
}
protected async _call(input: string): Promise<string> {
try {
const parsedInput = JSON.parse(input);
this.validateInput(parsedInput);
const account = new PublicKey(parsedInput.account);
const domain = await this.solanaKit.getPrimaryDomain(account);
return JSON.stringify({
status: "success",
message: "Primary domain retrieved successfully",
domain,
});
} catch (error: any) {
return JSON.stringify({
status: "error",
message: error.message,
code: error.code || "UNKNOWN_ERROR",
});
}
}
}
export class SolanaGetWalletAddressTool extends Tool {
name = "solana_get_wallet_address";
description = `Get the wallet address of the agent`;

View File

@@ -1,4 +1,4 @@
import { getPrimaryDomain } from "@bonfida/spl-name-service";
import { getPrimaryDomain as _getPrimaryDomain } from "@bonfida/spl-name-service";
import { PublicKey } from "@solana/web3.js";
import { SolanaAgentKit } from "../index";
@@ -14,12 +14,12 @@ import { SolanaAgentKit } from "../index";
* @returns A promise that resolves to the primary .sol domain as a string
* @throws Error if the domain is stale or if the domain resolution fails
*/
export async function get_primary_domain(
export async function getPrimaryDomain(
agent: SolanaAgentKit,
account: PublicKey
): Promise<string> {
try {
const { reverse, stale } = await getPrimaryDomain(
const { reverse, stale } = await _getPrimaryDomain(
agent.connection,
account
);

View File

@@ -6,6 +6,8 @@ export * from "./mint_nft";
export * from "./transfer";
export * from "./trade";
export * from "./register_domain";
export * from "./resolve_sol_domain";
export * from "./get_primary_domain";
export * from "./launch_pumpfun_token";
export * from "./lend";
export * from "./get_tps";

View File

@@ -14,7 +14,7 @@ import { SolanaAgentKit } from "../index";
* @returns A promise that resolves to the corresponding Solana PublicKey
* @throws Error if the domain resolution fails
*/
export async function resolve_sol_domain(
export async function resolveSolDomain(
agent: SolanaAgentKit,
domain: string
): Promise<PublicKey> {