diff --git a/etc/sdk.api.md b/etc/sdk.api.md index 536039f..332d53d 100644 --- a/etc/sdk.api.md +++ b/etc/sdk.api.md @@ -4,42 +4,6 @@ ```ts -// @public (undocumented) -export interface AgentConfig { - // (undocumented) - chain: Chain | Chain[]; - // (undocumented) - message?: string; - // (undocumented) - name: string; - // (undocumented) - signature: string; - // (undocumented) - wallet: string; -} - -// @public (undocumented) -export interface AgentInfo { - // (undocumented) - addresses: Record; - // (undocumented) - chains: Chain[]; - // (undocumented) - id: string; - // (undocumented) - metaAddresses: Record; - // (undocumented) - name: string; -} - -// @public (undocumented) -export interface Balance { - // (undocumented) - native: string; - // (undocumented) - tokens: Record; -} - // @public export interface BaseWalletAdapter { // (undocumented) @@ -50,24 +14,6 @@ export interface BaseWalletAdapter; } -// @public (undocumented) -export enum Chain { - // (undocumented) - All = "all", - // (undocumented) - Base = "base", - // (undocumented) - Ethereum = "ethereum", - // (undocumented) - Horizen = "horizen", - // (undocumented) - Polygon = "polygon", - // (undocumented) - Solana = "solana", - // (undocumented) - Stellar = "stellar" -} - // @public export interface ChainScannerAdapter { decodeMetaAddress(metaAddress: string): TMetaAddress; @@ -76,16 +22,6 @@ export interface ChainScannerAdapter, keys: TKeys): AsyncGenerator; } -// @public (undocumented) -export interface ChatResponse { - // (undocumented) - conversationId: string; - // (undocumented) - response: string; - // (undocumented) - toolCalls?: ToolCall[]; -} - // @public (undocumented) export interface CkbChainInput { // Warning: (ae-forgotten-export) The symbol "StealthCell" needs to be exported by the entry point index.d.ts @@ -113,18 +49,6 @@ export class ContractRevertError extends WraithContractError { readonly reason: string; } -// @public (undocumented) -export interface Conversation { - // (undocumented) - createdAt: string; - // (undocumented) - id: string; - // (undocumented) - title: string; - // (undocumented) - updatedAt: string; -} - // @public export function createFreighterWalletAdapter(wallet: FreighterWalletApi): FreighterWalletAdapter; @@ -276,28 +200,6 @@ export class InvalidSignatureError extends WraithInputError { describe(): string; } -// @public (undocumented) -export interface Invoice { - // (undocumented) - agentName: string; - // (undocumented) - amount: string; - // (undocumented) - asset: string; - // (undocumented) - createdAt: string; - // (undocumented) - id: string; - // (undocumented) - memo: string; - // (undocumented) - paymentLink: string; - // (undocumented) - status: 'pending' | 'paid'; - // (undocumented) - txHash: string | null; -} - // @public (undocumented) export class KeyDerivationFailedError extends WraithCryptoError { constructor(reason: string); @@ -356,47 +258,6 @@ export class NameNotFoundError extends WraithContractError { // @public export const NOOP_TRACER: Tracer; -// @public (undocumented) -interface Notification_2 { - // (undocumented) - body: string; - // (undocumented) - createdAt: string; - // (undocumented) - id: number; - // (undocumented) - read: boolean; - // (undocumented) - title: string; - // (undocumented) - type: string; -} -export { Notification_2 as Notification } - -// @public (undocumented) -export interface Payment { - // (undocumented) - balance: string; - // (undocumented) - ephemeralPubKey: string; - // (undocumented) - stealthAddress: string; -} - -// @public (undocumented) -export interface PrivacyReport { - // (undocumented) - bestPractices: string[]; - // (undocumented) - issues: Array<{ - severity: 'info' | 'low' | 'medium' | 'high' | 'critical'; - issue: string; - recommendation: string; - }>; - // (undocumented) - score: number; -} - // @public (undocumented) export class RetentionExceededError extends WraithNetworkError { constructor(limit: number, actual: number); @@ -443,24 +304,6 @@ export interface ScanAllInput { stellar?: StellarChainInput; } -// @public (undocumented) -export interface Schedule { - // (undocumented) - amount: string; - // (undocumented) - asset: string; - // (undocumented) - id: string; - // (undocumented) - interval: 'daily' | 'weekly' | 'monthly'; - // (undocumented) - nextRun: string; - // (undocumented) - recipient: string; - // (undocumented) - status: 'active' | 'paused' | 'cancelled'; -} - // @public export function setTracer(tracer?: Tracer | null): void; @@ -529,29 +372,11 @@ export type StellarWalletAdapter = BaseWalletAdapter<'stellar', Uint8Array>; // @public export type SupportedChain = 'evm' | 'stellar' | 'solana' | 'ckb'; -// @public (undocumented) -export interface ToolCall { - // (undocumented) - detail?: string; - // (undocumented) - name: string; - // (undocumented) - status: string; -} - // @public export interface Tracer { startSpan(name: string, attributes?: Record): Span; } -// @public (undocumented) -export interface TxResult { - // (undocumented) - txHash: string; - // (undocumented) - txLink: string; -} - // @public (undocumented) export class UnsupportedAssetError extends WraithBuilderError { constructor(asset: string, chain?: string); @@ -609,73 +434,10 @@ export type WalletAdapterChain = 'stellar' | 'evm' | 'solana'; // @public export function withSpan(name: string, attributes: Record | undefined, fn: (span: Span) => T, tracer?: Tracer): T; -// @public (undocumented) -export class Wraith { - constructor(config: WraithConfig); - // (undocumented) - agent(agentId: string): WraithAgent; - createAgent(config: AgentConfig): Promise; - getAgentByName(name: string): Promise; - getAgentByWallet(walletAddress: string): Promise; - listAgents(): Promise; - // @internal - _request(method: string, path: string, body?: unknown): Promise; -} - -// @public (undocumented) -export class WraithAgent { - constructor(wraith: Wraith, info: AgentInfo); - // (undocumented) - chat(message: string, conversationId?: string): Promise; - // (undocumented) - clearNotifications(): Promise; - // (undocumented) - deleteConversation(conversationId: string): Promise; - // (undocumented) - exportKey(signature: string, message: string): Promise<{ - secret: string; - }>; - // (undocumented) - getBalance(): Promise; - // (undocumented) - getConversations(): Promise; - // (undocumented) - getMessages(conversationId: string): Promise>; - // (undocumented) - getNotifications(): Promise<{ - notifications: Notification_2[]; - unreadCount: number; - }>; - // (undocumented) - getStatus(): Promise; - // (undocumented) - readonly info: AgentInfo; - // (undocumented) - markNotificationsRead(): Promise; - // (undocumented) - scanPayments(): Promise; -} - // @public (undocumented) export abstract class WraithBuilderError extends WraithError { } -// @public (undocumented) -export interface WraithConfig { - // (undocumented) - ai?: { - provider: 'gemini' | 'openai' | 'claude'; - apiKey: string; - }; - // (undocumented) - apiKey: string; - // (undocumented) - baseUrl?: string; -} - // @public (undocumented) export abstract class WraithContractError extends WraithError { } diff --git a/examples/agent/client.ts b/examples/agent/client.ts index e00c982..59e17f8 100644 --- a/examples/agent/client.ts +++ b/examples/agent/client.ts @@ -5,7 +5,7 @@ * AI chat, and chain operations — via the hosted TEE infrastructure. * No crypto libraries, no contracts, no RPC calls. */ -import { Wraith, Chain } from '@wraith-protocol/sdk'; +import { Wraith, Chain } from '@wraith-protocol/sdk-agent'; async function main() { // 1. Initialize with your API key diff --git a/examples/agent/package.json b/examples/agent/package.json new file mode 100644 index 0000000..5705906 --- /dev/null +++ b/examples/agent/package.json @@ -0,0 +1,17 @@ +{ + "name": "@wraith-protocol/example-agent", + "private": true, + "type": "module", + "main": "client.ts", + "scripts": { + "start": "npx tsx client.ts" + }, + "dependencies": { + "@wraith-protocol/sdk": "file:../..", + "@wraith-protocol/sdk-agent": "workspace:*" + }, + "devDependencies": { + "tsx": "^4.0.0", + "typescript": "^5.7.0" + } +} diff --git a/examples/stellar-spectre-agent/index.ts b/examples/stellar-spectre-agent/index.ts index c79a8a0..71ffb38 100644 --- a/examples/stellar-spectre-agent/index.ts +++ b/examples/stellar-spectre-agent/index.ts @@ -1,5 +1,5 @@ #!/usr/bin/env node -import { Wraith, Chain } from '@wraith-protocol/sdk'; +import { Wraith, Chain } from '@wraith-protocol/sdk-agent'; function getEnv(name: string): string { const value = process.env[name]; diff --git a/examples/stellar-spectre-agent/package.json b/examples/stellar-spectre-agent/package.json index b7de5f0..77afe32 100644 --- a/examples/stellar-spectre-agent/package.json +++ b/examples/stellar-spectre-agent/package.json @@ -7,7 +7,8 @@ "start": "npx tsx index.ts" }, "dependencies": { - "@wraith-protocol/sdk": "file:../.." + "@wraith-protocol/sdk": "file:../..", + "@wraith-protocol/sdk-agent": "file:../../packages/sdk-agent" }, "devDependencies": { "tsx": "^4.0.0", diff --git a/packages/sdk-agent/README.md b/packages/sdk-agent/README.md new file mode 100644 index 0000000..b5619fa --- /dev/null +++ b/packages/sdk-agent/README.md @@ -0,0 +1,267 @@ +# @wraith-protocol/sdk-agent + +Agent client for the Wraith multichain stealth address platform. This package provides the Wraith and WraithAgent classes for interacting with the Wraith managed agent API, along with Claude-compatible agent tools. + +## Installation + +```bash +npm install @wraith-protocol/sdk-agent +``` + +## Usage + +### Basic Agent Client + +```typescript +import { Wraith, Chain } from '@wraith-protocol/sdk-agent'; + +const wraith = new Wraith({ + apiKey: 'wraith_live_abc123...', +}); + +// Create a single-chain agent +const agent = await wraith.createAgent({ + name: 'alice', + chain: Chain.Stellar, + wallet: '0x...', + signature: '0x...', +}); + +// Chat with the agent +const response = await agent.chat('send 10 XLM to bob.wraith'); +console.log('Agent:', response.response); + +// Check balance +const balance = await agent.getBalance(); +console.log('Balance:', balance); +``` + +### Multichain Agent + +```typescript +// Create a multichain agent +const multiAgent = await wraith.createAgent({ + name: 'bob', + chain: [Chain.Ethereum, Chain.Stellar], + wallet: '0x...', + signature: '0x...', +}); + +// The AI routes to the correct chain automatically +await multiAgent.chat('send 10 XLM to carol.wraith on stellar'); +await multiAgent.chat("what's my balance on all chains?"); +``` + +### Deploy on All Chains + +```typescript +// Deploy on every supported chain +const omniAgent = await wraith.createAgent({ + name: 'carol', + chain: Chain.All, + wallet: '0x...', + signature: '0x...', +}); +``` + +### Agent Methods + +```typescript +// Get agent by wallet address +const agent = await wraith.getAgentByWallet('0xwallet'); + +// Get agent by name +const agent = await wraith.getAgentByName('alice'); + +// List all agents +const agents = await wraith.listAgents(); + +// Agent operations +await agent.chat('message'); +await agent.getBalance(); +await agent.scanPayments(); +await agent.getNotifications(); +await agent.markNotificationsRead(); +await agent.getConversations(); +await agent.deleteConversation('conv-id'); +``` + +### Claude Agent Tools + +```typescript +import { createClaudeAgentTools } from '@wraith-protocol/sdk-agent'; + +const tools = createClaudeAgentTools(); + +// Send to meta-address +const sendResult = await tools.sendToMetaAddress({ + metaAddress: 'st:xlm:...', + amount: '10', + asset: 'XLM', + memo: 'Payment', +}); + +// Scan for payments +const scanResult = await tools.scan({ + announcements: [...], + viewingKeyHex: '...', + spendingPubKeyHex: '...', + spendingScalarHex: '...', +}); + +// Withdraw from stealth address +const withdrawResult = await tools.withdraw({ + stealthAddress: 'G...', + amount: '5', + asset: 'XLM', + destination: 'GA...', +}); + +// Resolve name +const resolveResult = await tools.resolveName({ + name: 'alice', + chain: 'stellar', +}); +``` + +## Adapter Shape + +Third-party agent frameworks (Vercel AI SDK, Mastra, etc.) can integrate with Wraith by implementing the following adapter pattern: + +```typescript +interface WraithAgentAdapter { + // Configuration + apiKey: string; + baseUrl?: string; + aiProvider?: 'gemini' | 'openai' | 'claude'; + aiApiKey?: string; + + // Agent lifecycle + createAgent(config: { + name: string; + chain: Chain | Chain[]; + wallet: string; + signature: string; + message?: string; + }): Promise; + + // Agent operations + chat(agentId: string, message: string, conversationId?: string): Promise; + getBalance(agentId: string): Promise; + scanPayments(agentId: string): Promise; + getNotifications( + agentId: string, + ): Promise<{ notifications: Notification[]; unreadCount: number }>; +} + +// Example: Vercel AI SDK integration +export function createWraithTools(config: WraithAgentAdapter) { + return { + wraith_send: async ({ metaAddress, amount, asset }) => { + const tools = createClaudeAgentTools(); + return tools.sendToMetaAddress({ metaAddress, amount, asset }); + }, + wraith_scan: async ({ announcements, viewingKeyHex, spendingPubKeyHex, spendingScalarHex }) => { + const tools = createClaudeAgentTools(); + return tools.scan({ announcements, viewingKeyHex, spendingPubKeyHex, spendingScalarHex }); + }, + // ... more tools + }; +} +``` + +## Chain Enum + +```typescript +enum Chain { + Horizen = 'horizen', + Ethereum = 'ethereum', + Polygon = 'polygon', + Base = 'base', + Stellar = 'stellar', + Solana = 'solana', + All = 'all', +} +``` + +## Types + +```typescript +interface WraithConfig { + apiKey: string; + baseUrl?: string; + ai?: { + provider: 'gemini' | 'openai' | 'claude'; + apiKey: string; + }; +} + +interface AgentConfig { + name: string; + chain: Chain | Chain[]; + wallet: string; + signature: string; + message?: string; +} + +interface AgentInfo { + id: string; + name: string; + chains: Chain[]; + addresses: Record; + metaAddresses: Record; +} + +interface ChatResponse { + response: string; + toolCalls?: ToolCall[]; + conversationId: string; +} + +interface Balance { + native: string; + tokens: Record; +} + +interface Payment { + stealthAddress: string; + balance: string; + ephemeralPubKey: string; +} + +interface Notification { + id: number; + type: string; + title: string; + body: string; + read: boolean; + createdAt: string; +} + +interface Conversation { + id: string; + title: string; + createdAt: string; + updatedAt: string; +} +``` + +## API + +The Wraith agent client communicates with the Wraith API (default: `https://api.wraith.dev`). All requests are authenticated via the `Authorization: Bearer wraith_...` header. + +Optional AI provider configuration can be passed to use your own AI provider instead of the default: + +```typescript +const wraith = new Wraith({ + apiKey: 'wraith_live_abc123...', + ai: { + provider: 'openai', + apiKey: 'sk-...', + }, +}); +``` + +## License + +MIT diff --git a/packages/sdk-agent/package.json b/packages/sdk-agent/package.json new file mode 100644 index 0000000..94f6ce9 --- /dev/null +++ b/packages/sdk-agent/package.json @@ -0,0 +1,31 @@ +{ + "name": "@wraith-protocol/sdk-agent", + "version": "0.1.0", + "type": "module", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "files": [ + "dist" + ], + "scripts": { + "build": "tsup", + "test": "vitest run", + "test:watch": "vitest" + }, + "dependencies": { + "@wraith-protocol/sdk": "workspace:*" + }, + "devDependencies": { + "tsup": "^8.0.0", + "typescript": "^5.0.0", + "vitest": "^3.0.0" + } +} diff --git a/src/agent/client.ts b/packages/sdk-agent/src/client.ts similarity index 98% rename from src/agent/client.ts rename to packages/sdk-agent/src/client.ts index 1395448..f81bb05 100644 --- a/src/agent/client.ts +++ b/packages/sdk-agent/src/client.ts @@ -1,4 +1,4 @@ -import { RPCRequestError } from '../errors'; +import { RPCRequestError } from '@wraith-protocol/sdk'; import type { WraithConfig, AgentConfig, diff --git a/src/agent/index.ts b/packages/sdk-agent/src/index.ts similarity index 100% rename from src/agent/index.ts rename to packages/sdk-agent/src/index.ts diff --git a/packages/sdk-agent/src/tools.ts b/packages/sdk-agent/src/tools.ts new file mode 100644 index 0000000..5a521d6 --- /dev/null +++ b/packages/sdk-agent/src/tools.ts @@ -0,0 +1,193 @@ +import { withSpan, type Tracer } from '@wraith-protocol/sdk'; +import { + deriveStealthKeys, + decodeStealthMetaAddress, + encodeStealthMetaAddress, + generateStealthAddress, + scanAnnouncements, + hexToBytes, + bytesToHex, + type Announcement, +} from '@wraith-protocol/sdk/chains/stellar'; + +export interface ClaudeAgentToolContext { + apiKey?: string; + baseUrl?: string; + /** Default tracer for spans created by these tools. Overridable per call via `withSpan`-instrumented internals. */ + tracer?: Tracer; +} + +export interface SendToMetaAddressInput { + metaAddress: string; + amount: string; + asset?: string; + memo?: string; + destination?: string; +} + +export interface ScanInput { + announcements: Announcement[]; + viewingKeyHex: string; + spendingPubKeyHex: string; + spendingScalarHex: string; +} + +export interface WithdrawInput { + stealthAddress: string; + amount: string; + asset?: string; + destination?: string; + memo?: string; +} + +export interface ResolveNameInput { + name: string; + chain?: string; +} + +export interface ToolResult { + kind: 'send' | 'scan' | 'withdraw' | 'resolve-name'; + signingRequired: boolean; + tx?: Record; + metaAddress?: string; + matches?: Array>; + count?: number; + name?: string; + chain?: string; + note?: string; +} + +export interface ClaudeAgentTools { + sendToMetaAddress(input: SendToMetaAddressInput): Promise; + scan(input: ScanInput): Promise; + withdraw(input: WithdrawInput): Promise; + resolveName(input: ResolveNameInput): Promise; +} + +function parseHexBytes(hex: string): Uint8Array { + const clean = hex.startsWith('0x') ? hex.slice(2) : hex; + return hexToBytes(clean); +} + +function parseBigInt(value: string | undefined): bigint { + if (!value) return 0n; + const clean = value.startsWith('0x') || value.startsWith('0X') ? value : value; + if (/^0x/i.test(clean)) return BigInt(clean); + if (/^[0-9]+$/u.test(clean)) return BigInt(clean); + return BigInt(`0x${clean}`); +} + +export function createClaudeAgentTools(context: ClaudeAgentToolContext = {}): ClaudeAgentTools { + const tracer = context.tracer; + + return { + sendToMetaAddress(input): Promise { + return Promise.resolve( + withSpan( + 'agent.tool.sendToMetaAddress', + { 'wraith.agent.tool': 'sendToMetaAddress' }, + async () => { + const { spendingPubKey, viewingPubKey } = decodeStealthMetaAddress(input.metaAddress); + const stealthResult = generateStealthAddress(spendingPubKey, viewingPubKey); + return { + kind: 'send', + signingRequired: true, + metaAddress: input.metaAddress, + tx: { + intent: 'send-to-meta-address', + asset: input.asset ?? 'XLM', + amount: input.amount, + memo: input.memo ?? '', + stealthAddress: stealthResult.stealthAddress, + ephemeralPubKey: bytesToHex(stealthResult.ephemeralPubKey), + metadata: stealthResult.viewTag.toString(16).padStart(2, '0'), + destination: input.destination ?? stealthResult.stealthAddress, + }, + note: 'The agent prepares a stealth send plan. The sender must sign the transaction locally with their wallet.', + }; + }, + tracer, + ), + ); + }, + + scan(input): Promise { + return Promise.resolve( + withSpan( + 'agent.tool.scan', + { + 'wraith.agent.tool': 'scan', + 'wraith.scan.candidate_count': input.announcements.length, + }, + async () => { + const viewingKey = parseHexBytes(input.viewingKeyHex); + const spendingPubKey = parseHexBytes(input.spendingPubKeyHex); + const spendingScalar = parseBigInt(input.spendingScalarHex); + const matches = scanAnnouncements( + input.announcements, + viewingKey, + spendingPubKey, + spendingScalar, + ); + return { + kind: 'scan', + signingRequired: false, + matches: matches.map((item) => ({ + stealthAddress: item.stealthAddress, + ephemeralPubKey: item.ephemeralPubKey, + metadata: item.metadata, + stealthPrivateScalar: item.stealthPrivateScalar.toString(), + })), + count: matches.length, + }; + }, + tracer, + ), + ); + }, + + withdraw(input): Promise { + return Promise.resolve( + withSpan( + 'agent.tool.withdraw', + { 'wraith.agent.tool': 'withdraw' }, + async () => ({ + kind: 'withdraw', + signingRequired: true, + tx: { + intent: 'withdraw', + stealthAddress: input.stealthAddress, + asset: input.asset ?? 'XLM', + amount: input.amount, + destination: input.destination ?? input.stealthAddress, + memo: input.memo ?? '', + }, + note: 'The agent prepares a withdrawal plan. The stealth account owner must sign the transaction with their local wallet or key manager.', + }), + tracer, + ), + ); + }, + + resolveName(input): Promise { + return Promise.resolve( + withSpan( + 'agent.tool.resolveName', + { 'wraith.agent.tool': 'resolveName' }, + async () => ({ + kind: 'resolve-name', + signingRequired: false, + name: input.name, + chain: input.chain ?? 'stellar', + tx: { + intent: 'resolve-name', + name: input.name, + chain: input.chain ?? 'stellar', + }, + }), + tracer, + ), + ); + }, + }; +} diff --git a/src/agent/types.ts b/packages/sdk-agent/src/types.ts similarity index 100% rename from src/agent/types.ts rename to packages/sdk-agent/src/types.ts diff --git a/test/agent/client.test.ts b/packages/sdk-agent/test/client.test.ts similarity index 98% rename from test/agent/client.test.ts rename to packages/sdk-agent/test/client.test.ts index 8d6e01e..4d41085 100644 --- a/test/agent/client.test.ts +++ b/packages/sdk-agent/test/client.test.ts @@ -1,8 +1,8 @@ import { describe, test, expect, beforeAll, afterAll } from 'vitest'; import { createServer, type Server, type IncomingMessage, type ServerResponse } from 'http'; -import { Wraith, WraithAgent } from '../../src/agent/client'; -import { Chain } from '../../src/agent/types'; -import type { AgentInfo } from '../../src/agent/types'; +import { Wraith, WraithAgent } from '../src/client'; +import { Chain } from '../src/types'; +import type { AgentInfo } from '../src/types'; const TEST_API_KEY = 'wraith_test_key123'; const AGENT_ID = 'agent-001'; diff --git a/test/agent/tools.test.ts b/packages/sdk-agent/test/tools.test.ts similarity index 90% rename from test/agent/tools.test.ts rename to packages/sdk-agent/test/tools.test.ts index 441d234..c80c224 100644 --- a/test/agent/tools.test.ts +++ b/packages/sdk-agent/test/tools.test.ts @@ -1,8 +1,7 @@ import { describe, expect, test } from 'vitest'; -import { createClaudeAgentTools } from '../../src/agent/tools'; -import { deriveStealthKeys } from '../../src/chains/stellar/keys'; -import { encodeStealthMetaAddress } from '../../src/chains/stellar/meta-address'; -import { type Tracer, type Span } from '../../src/telemetry'; +import { createClaudeAgentTools } from '../src/tools'; +import { type Tracer } from '@wraith-protocol/sdk'; +import { deriveStealthKeys, encodeStealthMetaAddress } from '@wraith-protocol/sdk/chains/stellar'; describe('Claude agent tools', () => { test('send-to-meta-address builds a signing plan without signing', async () => { @@ -80,8 +79,11 @@ function makeRecordingTracer() { const tracer: Tracer = { startSpan(name) { spanNames.push(name); - const span: Span = { setAttribute() {}, recordException() {}, end() {} }; - return span; + return { + setAttribute() {}, + recordException() {}, + end() {}, + }; }, }; return { tracer, spanNames }; diff --git a/packages/sdk-agent/tsconfig.json b/packages/sdk-agent/tsconfig.json new file mode 100644 index 0000000..49e05ce --- /dev/null +++ b/packages/sdk-agent/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src"] +} diff --git a/packages/sdk-agent/tsup.config.ts b/packages/sdk-agent/tsup.config.ts new file mode 100644 index 0000000..c09a468 --- /dev/null +++ b/packages/sdk-agent/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: { + index: 'src/index.ts', + }, + format: ['esm', 'cjs'], + dts: true, + splitting: true, + clean: true, + treeshake: true, + external: ['@wraith-protocol/sdk'], +}); diff --git a/packages/sdk-agent/vitest.config.ts b/packages/sdk-agent/vitest.config.ts new file mode 100644 index 0000000..4ac6027 --- /dev/null +++ b/packages/sdk-agent/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'node', + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1153438..ae48c35 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,6 +82,22 @@ importers: specifier: ^3.1.0 version: 3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + examples/agent: + dependencies: + '@wraith-protocol/sdk': + specifier: file:../.. + version: file:(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(@stellar/stellar-sdk@13.3.0)(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@wraith-protocol/sdk-agent': + specifier: workspace:* + version: link:../../packages/sdk-agent + devDependencies: + tsx: + specifier: ^4.0.0 + version: 4.23.0 + typescript: + specifier: ^5.7.0 + version: 5.9.3 + examples/custom-chain-adapter: dependencies: '@wraith-protocol/sdk': @@ -178,13 +194,13 @@ importers: version: 18.3.7(@types/react@18.3.31) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.7.0(vite@5.4.21(@types/node@25.6.0)(terser@5.48.0)) + version: 4.7.0(vite@5.4.21(@types/node@20.19.43)(terser@5.48.0)) typescript: specifier: ^5.5.3 version: 5.9.3 vite: specifier: ^5.4.1 - version: 5.4.21(@types/node@25.6.0)(terser@5.48.0) + version: 5.4.21(@types/node@20.19.43)(terser@5.48.0) examples/stellar-chrome-extension: dependencies: @@ -197,7 +213,7 @@ importers: devDependencies: '@crxjs/vite-plugin': specifier: ^2.0.0-beta.26 - version: 2.7.1(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + version: 2.7.1(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) '@types/chrome': specifier: ^0.0.287 version: 0.0.287 @@ -206,7 +222,7 @@ importers: version: 5.9.3 vite: specifier: ^6.1.0 - version: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) examples/stellar-cli-scan: dependencies: @@ -349,13 +365,13 @@ importers: version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^4.4.0 - version: 4.7.0(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + version: 4.7.0(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) typescript: specifier: ^5.7.0 version: 5.9.3 vite: specifier: ^6.1.0 - version: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) examples/stellar-solid-receive: dependencies: @@ -374,16 +390,19 @@ importers: version: 5.9.3 vite: specifier: ^6.1.0 - version: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) vite-plugin-solid: specifier: ^2.11.0 - version: 2.11.14(@testing-library/jest-dom@6.9.1)(solid-js@1.9.15)(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + version: 2.11.14(@testing-library/jest-dom@6.9.1)(solid-js@1.9.15)(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) examples/stellar-spectre-agent: dependencies: '@wraith-protocol/sdk': specifier: file:../.. version: file:(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(@stellar/stellar-sdk@13.3.0)(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@wraith-protocol/sdk-agent': + specifier: file:../../packages/sdk-agent + version: file:packages/sdk-agent devDependencies: tsx: specifier: ^4.0.0 @@ -406,13 +425,13 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: ^5.0.0 - version: 5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + version: 5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) typescript: specifier: ^5.7.0 version: 5.9.3 vite: specifier: ^6.0.0 - version: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) examples/stellar-vue-receive: dependencies: @@ -428,13 +447,13 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^5.0.0 - version: 5.2.4(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))(vue@3.5.39(typescript@5.9.3)) + version: 5.2.4(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))(vue@3.5.39(typescript@5.9.3)) typescript: specifier: ^5.7.0 version: 5.9.3 vite: specifier: ^6.0.0 - version: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) vue-tsc: specifier: ^2.0.0 version: 2.2.12(typescript@5.9.3) @@ -453,13 +472,13 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: ^5.0.0 - version: 5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + version: 5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) typescript: specifier: ^5.7.0 version: 5.9.3 vite: specifier: ^6.0.0 - version: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) examples/vue-stellar-app: dependencies: @@ -475,13 +494,13 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^5.0.0 - version: 5.2.4(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))(vue@3.5.39(typescript@5.9.3)) + version: 5.2.4(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))(vue@3.5.39(typescript@5.9.3)) typescript: specifier: ^5.7.0 version: 5.9.3 vite: specifier: ^6.0.0 - version: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) vue-tsc: specifier: ^2.0.0 version: 2.2.12(typescript@5.9.3) @@ -508,6 +527,22 @@ importers: specifier: ^3.1.0 version: 3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + packages/sdk-agent: + dependencies: + '@wraith-protocol/sdk': + specifier: workspace:* + version: link:../.. + devDependencies: + tsup: + specifier: ^8.0.0 + version: 8.5.1(@microsoft/api-extractor@7.58.12(@types/node@20.19.43))(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.9.0) + typescript: + specifier: ^5.0.0 + version: 5.9.3 + vitest: + specifier: ^3.0.0 + version: 3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + packages/sdk-react: dependencies: '@stellar/stellar-sdk': @@ -540,13 +575,13 @@ importers: version: 24.1.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) tsup: specifier: ^8.0.0 - version: 8.5.1(@microsoft/api-extractor@7.58.12(@types/node@25.6.0))(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.9.0) + version: 8.5.1(@microsoft/api-extractor@7.58.12(@types/node@20.19.43))(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.9.0) typescript: specifier: ^5.0.0 version: 5.9.3 vitest: specifier: ^3.0.0 - version: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(jsdom@24.1.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@24.1.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) packages/sdk-solid: dependencies: @@ -568,16 +603,16 @@ importers: version: 25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) tsup: specifier: ^8.4.0 - version: 8.5.1(@microsoft/api-extractor@7.58.12(@types/node@25.6.0))(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.9.0) + version: 8.5.1(@microsoft/api-extractor@7.58.12(@types/node@20.19.43))(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.9.0) typescript: specifier: ^5.7.0 version: 5.9.3 vite-plugin-solid: specifier: ^2.11.0 - version: 2.11.14(@testing-library/jest-dom@6.9.1)(solid-js@1.9.15)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + version: 2.11.14(@testing-library/jest-dom@6.9.1)(solid-js@1.9.15)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) vitest: specifier: ^3.1.0 - version: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) packages/sdk-svelte: dependencies: @@ -590,10 +625,10 @@ importers: version: 13.3.0 '@sveltejs/vite-plugin-svelte': specifier: ^5.0.0 - version: 5.1.1(svelte@5.56.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + version: 5.1.1(svelte@5.56.4)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) '@testing-library/svelte': specifier: ^5.2.0 - version: 5.4.2(svelte@5.56.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))(vitest@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + version: 5.4.2(svelte@5.56.4)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))(vitest@3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) jsdom: specifier: ^25.0.0 version: 25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -605,13 +640,13 @@ importers: version: 4.7.2(picomatch@4.0.4)(svelte@5.56.4)(typescript@5.9.3) tsup: specifier: ^8.4.0 - version: 8.5.1(@microsoft/api-extractor@7.58.12(@types/node@25.6.0))(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.9.0) + version: 8.5.1(@microsoft/api-extractor@7.58.12(@types/node@20.19.43))(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.9.0) typescript: specifier: ^5.7.0 version: 5.9.3 vitest: specifier: ^3.1.0 - version: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) packages/sdk-vue: dependencies: @@ -630,13 +665,13 @@ importers: version: 25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) tsup: specifier: ^8.4.0 - version: 8.5.1(@microsoft/api-extractor@7.58.12(@types/node@25.6.0))(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.9.0) + version: 8.5.1(@microsoft/api-extractor@7.58.12(@types/node@20.19.43))(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.9.0) typescript: specifier: ^5.7.0 version: 5.9.3 vitest: specifier: ^3.1.0 - version: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + version: 3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) packages/test-vectors: devDependencies: @@ -3020,9 +3055,6 @@ packages: '@types/node@20.19.43': resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} - '@types/node@25.6.0': - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} - '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -3189,6 +3221,9 @@ packages: '@webcomponents/custom-elements@1.6.0': resolution: {integrity: sha512-CqTpxOlUCPWRNUPZDxT5v2NnHXA4oox612iUGnmTUGQFhZ1Gkj8kirtl/2wcF6MqX7+PqqicZzOCBKKfIn0dww==} + '@wraith-protocol/sdk-agent@file:packages/sdk-agent': + resolution: {directory: packages/sdk-agent, type: directory} + '@wraith-protocol/sdk-react@file:packages/sdk-react': resolution: {directory: packages/sdk-react, type: directory} peerDependencies: @@ -7252,9 +7287,6 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.19.2: - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} - unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -8884,7 +8916,7 @@ snapshots: '@types/conventional-commits-parser': 5.0.2 chalk: 5.6.2 - '@crxjs/vite-plugin@2.7.1(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': + '@crxjs/vite-plugin@2.7.1(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: '@webcomponents/custom-elements': 1.6.0 acorn-walk: 8.3.5 @@ -8900,7 +8932,7 @@ snapshots: rollup: 2.80.0 rxjs: 7.5.7 tinyglobby: 0.2.17 - vite: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vite: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -9647,15 +9679,6 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor-model@7.33.10(@types/node@25.6.0)': - dependencies: - '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 - '@rushstack/node-core-library': 5.23.3(@types/node@25.6.0) - transitivePeerDependencies: - - '@types/node' - optional: true - '@microsoft/api-extractor@7.58.12(@types/node@20.19.43)': dependencies: '@microsoft/api-extractor-model': 7.33.10(@types/node@20.19.43) @@ -9674,25 +9697,6 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.58.12(@types/node@25.6.0)': - dependencies: - '@microsoft/api-extractor-model': 7.33.10(@types/node@25.6.0) - '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 - '@rushstack/node-core-library': 5.23.3(@types/node@25.6.0) - '@rushstack/rig-package': 0.7.3 - '@rushstack/terminal': 0.24.2(@types/node@25.6.0) - '@rushstack/ts-command-line': 5.3.12(@types/node@25.6.0) - diff: 8.0.4 - minimatch: 10.2.3 - resolve: 1.22.12 - semver: 7.7.4 - source-map: 0.6.1 - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/node' - optional: true - '@microsoft/tsdoc-config@0.18.1': dependencies: '@microsoft/tsdoc': 0.16.0 @@ -10308,29 +10312,10 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 - '@rushstack/node-core-library@5.23.3(@types/node@25.6.0)': - dependencies: - ajv: 8.20.0 - ajv-draft-04: 1.0.0(ajv@8.20.0) - ajv-formats: 3.0.1(ajv@8.20.0) - fs-extra: 11.3.6 - import-lazy: 4.0.0 - jju: 1.4.0 - resolve: 1.22.12 - semver: 7.7.4 - optionalDependencies: - '@types/node': 25.6.0 - optional: true - '@rushstack/problem-matcher@0.2.1(@types/node@20.19.43)': optionalDependencies: '@types/node': 20.19.43 - '@rushstack/problem-matcher@0.2.1(@types/node@25.6.0)': - optionalDependencies: - '@types/node': 25.6.0 - optional: true - '@rushstack/rig-package@0.7.3': dependencies: jju: 1.4.0 @@ -10344,15 +10329,6 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 - '@rushstack/terminal@0.24.2(@types/node@25.6.0)': - dependencies: - '@rushstack/node-core-library': 5.23.3(@types/node@25.6.0) - '@rushstack/problem-matcher': 0.2.1(@types/node@25.6.0) - supports-color: 8.1.1 - optionalDependencies: - '@types/node': 25.6.0 - optional: true - '@rushstack/ts-command-line@5.3.12(@types/node@20.19.43)': dependencies: '@rushstack/terminal': 0.24.2(@types/node@20.19.43) @@ -10362,16 +10338,6 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@rushstack/ts-command-line@5.3.12(@types/node@25.6.0)': - dependencies: - '@rushstack/terminal': 0.24.2(@types/node@25.6.0) - '@types/argparse': 1.0.38 - argparse: 1.0.10 - string-argv: 0.3.2 - transitivePeerDependencies: - - '@types/node' - optional: true - '@scure/base@1.2.6': {} '@scure/bip32@1.7.0': @@ -10522,47 +10488,47 @@ snapshots: '@sveltejs/load-config@0.2.0': {} - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4)(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4)(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) debug: 4.4.3 svelte: 5.56.4 - vite: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vite: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.56.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.56.4)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) debug: 4.4.3 svelte: 5.56.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vite: 7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4)(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4)(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) debug: 4.4.3 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.21 svelte: 5.56.4 - vite: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + vite: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) debug: 4.4.3 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.21 svelte: 5.56.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + vite: 7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) transitivePeerDependencies: - supports-color @@ -10622,14 +10588,14 @@ snapshots: dependencies: svelte: 5.56.4 - '@testing-library/svelte@5.4.2(svelte@5.56.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))(vitest@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': + '@testing-library/svelte@5.4.2(svelte@5.56.4)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))(vitest@3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: '@testing-library/dom': 9.3.4 '@testing-library/svelte-core': 1.1.3(svelte@5.56.4) svelte: 5.56.4 optionalDependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - vitest: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vite: 7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vitest: 3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) '@types/argparse@1.0.38': {} @@ -10728,11 +10694,6 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@25.6.0': - dependencies: - undici-types: 7.19.2 - optional: true - '@types/prop-types@15.7.15': {} '@types/react-dom@18.3.7(@types/react@18.3.31)': @@ -10798,7 +10759,7 @@ snapshots: graphql: 15.8.0 wonka: 4.0.15 - '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@25.6.0)(terser@5.48.0))': + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@20.19.43)(terser@5.48.0))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) @@ -10806,11 +10767,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.21(@types/node@25.6.0)(terser@5.48.0) + vite: 5.4.21(@types/node@20.19.43)(terser@5.48.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.7.0(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': + '@vitejs/plugin-react@4.7.0(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) @@ -10818,13 +10779,13 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vite: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.4(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))(vue@3.5.39(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))(vue@3.5.39(typescript@5.9.3))': dependencies: - vite: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vite: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) vue: 3.5.39(typescript@5.9.3) '@vitest/expect@3.2.4': @@ -10843,14 +10804,6 @@ snapshots: optionalDependencies: vite: 7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0))': - dependencies: - '@vitest/spy': 3.2.4 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 @@ -10972,6 +10925,10 @@ snapshots: '@webcomponents/custom-elements@1.6.0': {} + '@wraith-protocol/sdk-agent@file:packages/sdk-agent': + dependencies: + '@wraith-protocol/sdk': 'link:' + '@wraith-protocol/sdk-react@file:packages/sdk-react(@stellar/stellar-sdk@13.3.0)(@wraith-protocol/sdk@file:(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(@stellar/stellar-sdk@13.3.0)(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@stellar/stellar-sdk': 13.3.0 @@ -15816,35 +15773,6 @@ snapshots: - tsx - yaml - tsup@8.5.1(@microsoft/api-extractor@7.58.12(@types/node@25.6.0))(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(typescript@5.9.3)(yaml@2.9.0): - dependencies: - bundle-require: 5.1.0(esbuild@0.27.7) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.3 - esbuild: 0.27.7 - fix-dts-default-cjs-exports: 1.0.1 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.16)(tsx@4.23.0)(yaml@2.9.0) - resolve-from: 5.0.0 - rollup: 4.60.1 - source-map: 0.7.6 - sucrase: 3.35.1 - tinyexec: 0.3.2 - tinyglobby: 0.2.16 - tree-kill: 1.2.2 - optionalDependencies: - '@microsoft/api-extractor': 7.58.12(@types/node@25.6.0) - postcss: 8.5.16 - typescript: 5.9.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - tsx@4.23.0: dependencies: esbuild: 0.28.1 @@ -15940,9 +15868,6 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.19.2: - optional: true - unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: @@ -16064,28 +15989,7 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0): - dependencies: - cac: 6.7.14 - debug: 4.4.3 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite-plugin-solid@2.11.14(@testing-library/jest-dom@6.9.1)(solid-js@1.9.15)(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)): + vite-plugin-solid@2.11.14(@testing-library/jest-dom@6.9.1)(solid-js@1.9.15)(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)): dependencies: '@babel/core': 7.29.7 '@types/babel__core': 7.20.5 @@ -16093,14 +15997,14 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.15 solid-refresh: 0.6.3(solid-js@1.9.15) - vite: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + vite: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite-plugin-solid@2.11.14(@testing-library/jest-dom@6.9.1)(solid-js@1.9.15)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)): + vite-plugin-solid@2.11.14(@testing-library/jest-dom@6.9.1)(solid-js@1.9.15)(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)): dependencies: '@babel/core': 7.29.7 '@types/babel__core': 7.20.5 @@ -16108,20 +16012,20 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.15 solid-refresh: 0.6.3(solid-js@1.9.15) - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + vite: 7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite@5.4.21(@types/node@25.6.0)(terser@5.48.0): + vite@5.4.21(@types/node@20.19.43)(terser@5.48.0): dependencies: esbuild: 0.21.5 postcss: 8.5.9 rollup: 4.60.1 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 20.19.43 fsevents: 2.3.3 terser: 5.48.0 @@ -16141,22 +16045,6 @@ snapshots: tsx: 4.23.0 yaml: 2.9.0 - vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0): - dependencies: - esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.16 - rollup: 4.60.1 - tinyglobby: 0.2.16 - optionalDependencies: - '@types/node': 25.6.0 - fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.48.0 - tsx: 4.23.0 - yaml: 2.9.0 - vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0): dependencies: esbuild: 0.27.7 @@ -16173,31 +16061,15 @@ snapshots: tsx: 4.23.0 yaml: 2.9.0 - vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0): - dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.9 - rollup: 4.60.1 - tinyglobby: 0.2.17 + vitefu@1.1.3(vite@6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)): optionalDependencies: - '@types/node': 25.6.0 - fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.48.0 - tsx: 4.23.0 - yaml: 2.9.0 - - vitefu@1.1.3(vite@6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)): - optionalDependencies: - vite: 6.4.3(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vite: 6.4.3(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - vitefu@1.1.3(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)): + vitefu@1.1.3(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)): optionalDependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vite: 7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - vitest@3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0): + vitest@3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@24.1.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 @@ -16224,48 +16096,6 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.19.43 - jsdom: 25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vitest@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(jsdom@24.1.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0): - dependencies: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - debug: 4.4.3 - expect-type: 1.3.0 - magic-string: 0.30.21 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.16 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - vite-node: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.6.0 jsdom: 24.1.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - jiti @@ -16281,11 +16111,11 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0): + vitest@3.2.4(@types/node@20.19.43)(jiti@2.6.1)(jsdom@25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) + '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -16303,11 +16133,11 @@ snapshots: tinyglobby: 0.2.16 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) - vite-node: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vite: 7.3.2(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) + vite-node: 3.2.4(@types/node@20.19.43)(jiti@2.6.1)(terser@5.48.0)(tsx@4.23.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 20.19.43 jsdom: 25.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - jiti diff --git a/src/agent/tools.ts b/src/agent/tools.ts deleted file mode 100644 index 0f0d18a..0000000 --- a/src/agent/tools.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { deriveStealthKeys } from '../chains/stellar/keys'; -import { decodeStealthMetaAddress, encodeStealthMetaAddress } from '../chains/stellar/meta-address'; -import { generateStealthAddress } from '../chains/stellar/stealth'; -import { scanAnnouncements } from '../chains/stellar/scan'; -import { hexToBytes, bytesToHex } from '../chains/stellar/utils'; -import type { Announcement } from '../chains/stellar/types'; -import { withSpan, type Tracer } from '../telemetry'; - -export interface ClaudeAgentToolContext { - apiKey?: string; - baseUrl?: string; - /** Default tracer for spans created by these tools. Overridable per call via `withSpan`-instrumented internals. */ - tracer?: Tracer; -} - -export interface SendToMetaAddressInput { - metaAddress: string; - amount: string; - asset?: string; - memo?: string; - destination?: string; -} - -export interface ScanInput { - announcements: Announcement[]; - viewingKeyHex: string; - spendingPubKeyHex: string; - spendingScalarHex: string; -} - -export interface WithdrawInput { - stealthAddress: string; - amount: string; - asset?: string; - destination?: string; - memo?: string; -} - -export interface ResolveNameInput { - name: string; - chain?: string; -} - -export interface ToolResult { - kind: 'send' | 'scan' | 'withdraw' | 'resolve-name'; - signingRequired: boolean; - tx?: Record; - metaAddress?: string; - matches?: Array>; - count?: number; - name?: string; - chain?: string; - note?: string; -} - -export interface ClaudeAgentTools { - sendToMetaAddress(input: SendToMetaAddressInput): Promise; - scan(input: ScanInput): Promise; - withdraw(input: WithdrawInput): Promise; - resolveName(input: ResolveNameInput): Promise; -} - -function parseHexBytes(hex: string): Uint8Array { - const clean = hex.startsWith('0x') ? hex.slice(2) : hex; - return hexToBytes(clean); -} - -function parseBigInt(value: string | undefined): bigint { - if (!value) return 0n; - const clean = value.startsWith('0x') || value.startsWith('0X') ? value : value; - if (/^0x/i.test(clean)) return BigInt(clean); - if (/^[0-9]+$/u.test(clean)) return BigInt(clean); - return BigInt(`0x${clean}`); -} - -export function createClaudeAgentTools(context: ClaudeAgentToolContext = {}): ClaudeAgentTools { - const tracer = context.tracer; - - return { - sendToMetaAddress(input) { - return withSpan( - 'agent.tool.sendToMetaAddress', - { 'wraith.agent.tool': 'sendToMetaAddress' }, - async () => { - const { spendingPubKey, viewingPubKey } = decodeStealthMetaAddress(input.metaAddress); - const stealthResult = generateStealthAddress(spendingPubKey, viewingPubKey); - return { - kind: 'send', - signingRequired: true, - metaAddress: input.metaAddress, - tx: { - intent: 'send-to-meta-address', - asset: input.asset ?? 'XLM', - amount: input.amount, - memo: input.memo ?? '', - stealthAddress: stealthResult.stealthAddress, - ephemeralPubKey: bytesToHex(stealthResult.ephemeralPubKey), - metadata: stealthResult.viewTag.toString(16).padStart(2, '0'), - destination: input.destination ?? stealthResult.stealthAddress, - }, - note: 'The agent prepares a stealth send plan. The sender must sign the transaction locally with their wallet.', - }; - }, - tracer, - ); - }, - - scan(input) { - return withSpan( - 'agent.tool.scan', - { 'wraith.agent.tool': 'scan', 'wraith.scan.candidate_count': input.announcements.length }, - async () => { - const viewingKey = parseHexBytes(input.viewingKeyHex); - const spendingPubKey = parseHexBytes(input.spendingPubKeyHex); - const spendingScalar = parseBigInt(input.spendingScalarHex); - const matches = scanAnnouncements( - input.announcements, - viewingKey, - spendingPubKey, - spendingScalar, - ); - return { - kind: 'scan', - signingRequired: false, - matches: matches.map((item) => ({ - stealthAddress: item.stealthAddress, - ephemeralPubKey: item.ephemeralPubKey, - metadata: item.metadata, - stealthPrivateScalar: item.stealthPrivateScalar.toString(), - })), - count: matches.length, - }; - }, - tracer, - ); - }, - - withdraw(input) { - return withSpan( - 'agent.tool.withdraw', - { 'wraith.agent.tool': 'withdraw' }, - async () => ({ - kind: 'withdraw', - signingRequired: true, - tx: { - intent: 'withdraw', - stealthAddress: input.stealthAddress, - asset: input.asset ?? 'XLM', - amount: input.amount, - destination: input.destination ?? input.stealthAddress, - memo: input.memo ?? '', - }, - note: 'The agent prepares a withdrawal plan. The stealth account owner must sign the transaction with their local wallet or key manager.', - }), - tracer, - ); - }, - - resolveName(input) { - return withSpan( - 'agent.tool.resolveName', - { 'wraith.agent.tool': 'resolveName' }, - async () => ({ - kind: 'resolve-name', - signingRequired: false, - name: input.name, - chain: input.chain ?? 'stellar', - tx: { - intent: 'resolve-name', - name: input.name, - chain: input.chain ?? 'stellar', - }, - }), - tracer, - ); - }, - }; -} diff --git a/src/index.ts b/src/index.ts index 4c18e2b..089d42a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,3 @@ -export { Wraith, WraithAgent } from './agent/client'; -export { Chain } from './agent/types'; /** * @internal */ @@ -25,23 +23,10 @@ export type { ViemWalletClient, SolanaWalletAdapterLike, } from './wallet'; + export { setTracer, getTracer, withSpan, NOOP_TRACER } from './telemetry'; export type { Tracer, Span } from './telemetry'; -export type { - WraithConfig, - AgentConfig, - AgentInfo, - ChatResponse, - ToolCall, - Balance, - Payment, - Invoice, - Schedule, - TxResult, - PrivacyReport, - Notification, - Conversation, -} from './agent/types'; + export type { ScanAllInput, MatchedAnnouncement, @@ -53,7 +38,6 @@ export type { SolanaChainInput, CkbChainInput, } from './scanner/unified'; - export { WraithError, WraithInputError, diff --git a/src/types/@wraith-protocol/sdk-agent.d.ts b/src/types/@wraith-protocol/sdk-agent.d.ts new file mode 100644 index 0000000..fb07555 --- /dev/null +++ b/src/types/@wraith-protocol/sdk-agent.d.ts @@ -0,0 +1,203 @@ +declare module '@wraith-protocol/sdk-agent' { + export class Wraith { + constructor(config: { + apiKey: string; + baseUrl?: string; + ai?: { + provider: 'gemini' | 'openai' | 'claude'; + apiKey: string; + }; + }); + createAgent(config: { + name: string; + chain: Chain | Chain[]; + wallet: string; + signature: string; + message?: string; + }): Promise; + agent(agentId: string): WraithAgent; + getAgentByWallet(walletAddress: string): Promise; + getAgentByName(name: string): Promise; + listAgents(): Promise; + } + + export class WraithAgent { + readonly info: AgentInfo; + chat(message: string, conversationId?: string): Promise; + getStatus(): Promise; + getBalance(): Promise; + scanPayments(): Promise; + exportKey(signature: string, message: string): Promise<{ secret: string }>; + getConversations(): Promise; + getMessages(conversationId: string): Promise>; + deleteConversation(conversationId: string): Promise; + getNotifications(): Promise<{ notifications: Notification[]; unreadCount: number }>; + markNotificationsRead(): Promise; + clearNotifications(): Promise; + } + + export enum Chain { + Horizen = 'horizen', + Ethereum = 'ethereum', + Polygon = 'polygon', + Base = 'base', + Stellar = 'stellar', + Solana = 'solana', + All = 'all', + } + + export interface WraithConfig { + apiKey: string; + baseUrl?: string; + ai?: { + provider: 'gemini' | 'openai' | 'claude'; + apiKey: string; + }; + } + + export interface AgentConfig { + name: string; + chain: Chain | Chain[]; + wallet: string; + signature: string; + message?: string; + } + + export interface AgentInfo { + id: string; + name: string; + chains: Chain[]; + addresses: Record; + metaAddresses: Record; + } + + export interface ChatResponse { + response: string; + toolCalls?: ToolCall[]; + conversationId: string; + } + + export interface ToolCall { + name: string; + status: string; + detail?: string; + } + + export interface Balance { + native: string; + tokens: Record; + } + + export interface Payment { + stealthAddress: string; + balance: string; + ephemeralPubKey: string; + } + + export interface Invoice { + id: string; + agentName: string; + amount: string; + asset: string; + memo: string; + status: 'pending' | 'paid'; + txHash: string | null; + paymentLink: string; + createdAt: string; + } + + export interface Schedule { + id: string; + recipient: string; + amount: string; + asset: string; + interval: 'daily' | 'weekly' | 'monthly'; + status: 'active' | 'paused' | 'cancelled'; + nextRun: string; + } + + export interface TxResult { + txHash: string; + txLink: string; + } + + export interface PrivacyReport { + score: number; + issues: Array<{ + severity: 'info' | 'low' | 'medium' | 'high' | 'critical'; + issue: string; + recommendation: string; + }>; + bestPractices: string[]; + } + + export interface Notification { + id: number; + type: string; + title: string; + body: string; + read: boolean; + createdAt: string; + } + + export interface Conversation { + id: string; + title: string; + createdAt: string; + updatedAt: string; + } + + export function createClaudeAgentTools(context?: ClaudeAgentToolContext): ClaudeAgentTools; + + export interface ClaudeAgentToolContext { + apiKey?: string; + baseUrl?: string; + } + + export interface SendToMetaAddressInput { + metaAddress: string; + amount: string; + asset?: string; + memo?: string; + destination?: string; + } + + export interface ScanInput { + announcements: any[]; + viewingKeyHex: string; + spendingPubKeyHex: string; + spendingScalarHex: string; + } + + export interface WithdrawInput { + stealthAddress: string; + amount: string; + asset?: string; + destination?: string; + memo?: string; + } + + export interface ResolveNameInput { + name: string; + chain?: string; + } + + export interface ToolResult { + kind: 'send' | 'scan' | 'withdraw' | 'resolve-name'; + signingRequired: boolean; + tx?: Record; + metaAddress?: string; + matches?: Array>; + count?: number; + name?: string; + chain?: string; + note?: string; + } + + export interface ClaudeAgentTools { + sendToMetaAddress(input: SendToMetaAddressInput): Promise; + scan(input: ScanInput): Promise; + withdraw(input: WithdrawInput): Promise; + resolveName(input: ResolveNameInput): Promise; + } +} diff --git a/tsconfig.json b/tsconfig.json index 65713a6..f1244c7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,6 +12,6 @@ "outDir": "dist", "rootDir": "src" }, - "include": ["src"], + "include": ["src", "src/types"], "exclude": ["node_modules", "dist", "test"] } diff --git a/tsup.config.ts b/tsup.config.ts index 9004f02..397b849 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -11,9 +11,20 @@ export default defineConfig({ 'vault/index': 'src/vault/index.ts', }, format: ['esm', 'cjs'], - dts: true, + dts: { + entry: { + index: 'src/index.ts', + 'chains/evm/index': 'src/chains/evm/index.ts', + 'chains/stellar/index': 'src/chains/stellar/index.ts', + 'chains/solana/index': 'src/chains/solana/index.ts', + 'chains/ckb/index': 'src/chains/ckb/index.ts', + 'compat/react-native': 'src/compat/react-native.ts', + 'vault/index': 'src/vault/index.ts', + }, + }, splitting: true, clean: true, treeshake: true, + external: ['@wraith-protocol/sdk-agent'], metafile: !!process.env.ANALYZE, });