Vault Operations
Updated
The SDK provides four vault primitives that work across vault protocols such as Morpho, Kamino, Jupiter JLP, and curated ERC-4626 vaults.
| Constant | Type String | Purpose |
|---|---|---|
PRIMITIVE_VAULT_DEPOSIT | "vault_deposit" | Deposit assets into a vault |
PRIMITIVE_VAULT_WITHDRAW | "vault_withdraw" | Withdraw assets from a vault |
PRIMITIVE_VAULT_BORROW | "vault_borrow" | Borrow against a vault position |
PRIMITIVE_VAULT_REPAY | "vault_repay" | Repay vault debt |
All four primitives share a common params shape with fields including amount, asset, chain, protocol, vault_address, vault_name, and shares. When protocol is provided, the request is routed to a specific vault protocol. When omitted, the curated ERC-4626 vault logic is used.
Deposit into a Vault
import {
Chaos,
WALLET_MODEL,
extractPrimitives,
isVaultDepositPrimitive,
PRIMITIVE_VAULT_DEPOSIT,
} from '@chaoslabs/ai-sdk';
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
const response = await chaos.chat.responses.create({
model: WALLET_MODEL,
input: [
{
type: 'message',
role: 'user',
content: 'Deposit 1000 USDC into the Morpho USDC vault on Ethereum',
},
],
metadata: {
user_id: 'user-1',
session_id: 'session-1',
wallets: [{ address: '0xYourWallet', chain: 'ethereum' }],
},
});
const primitives = extractPrimitives(response);
for (const primitive of primitives) {
if (isVaultDepositPrimitive(primitive)) {
// TypeScript knows this is VaultDepositPrimitive
console.log('Vault deposit:');
console.log(' Amount:', primitive.params.amount);
console.log(' Asset:', primitive.params.asset);
console.log(' Chain:', primitive.params.chain);
console.log(' Protocol:', primitive.params.protocol);
console.log(' Vault:', primitive.params.vault_name ?? primitive.params.vault_address);
}
}Copy code
Open in Cursor
Open in VS Code
Open in v0
Open in Claude
Open in ChatGPT
Withdraw from a Vault
import {
Chaos,
WALLET_MODEL,
extractPrimitives,
isVaultWithdrawPrimitive,
} from '@chaoslabs/ai-sdk';
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
const response = await chaos.chat.responses.create({
model: WALLET_MODEL,
input: [
{
type: 'message',
role: 'user',
content: 'Withdraw 500 USDC from my Morpho vault on Ethereum',
},
],
metadata: {
user_id: 'user-1',
session_id: 'session-1',
wallets: [{ address: '0xYourWallet', chain: 'ethereum' }],
},
});
const primitives = extractPrimitives(response);
for (const primitive of primitives) {
if (isVaultWithdrawPrimitive(primitive)) {
console.log('Vault withdraw:');
console.log(' Amount:', primitive.params.amount);
console.log(' Asset:', primitive.params.asset);
console.log(' Shares:', primitive.params.shares);
console.log(' Vault:', primitive.params.vault_name ?? primitive.params.vault_address);
}
}Copy code
Open in Cursor
Open in VS Code
Open in v0
Open in Claude
Open in ChatGPT
Borrow Against a Vault Position
import {
Chaos,
WALLET_MODEL,
extractPrimitives,
isVaultBorrowPrimitive,
} from '@chaoslabs/ai-sdk';
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
const response = await chaos.chat.responses.create({
model: WALLET_MODEL,
input: [
{
type: 'message',
role: 'user',
content: 'Borrow 2000 USDC against my vault position on Morpho Blue',
},
],
metadata: {
user_id: 'user-1',
session_id: 'session-1',
wallets: [{ address: '0xYourWallet', chain: 'ethereum' }],
},
});
const primitives = extractPrimitives(response);
for (const primitive of primitives) {
if (isVaultBorrowPrimitive(primitive)) {
console.log('Vault borrow:');
console.log(' Amount:', primitive.params.amount);
console.log(' Asset:', primitive.params.asset);
console.log(' Chain:', primitive.params.chain);
console.log(' Protocol:', primitive.params.protocol);
console.log(' Vault:', primitive.params.vault_name ?? primitive.params.vault_address);
}
}Copy code
Open in Cursor
Open in VS Code
Open in v0
Open in Claude
Open in ChatGPT
Repay Vault Debt
import {
Chaos,
WALLET_MODEL,
extractPrimitives,
isVaultRepayPrimitive,
} from '@chaoslabs/ai-sdk';
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
const response = await chaos.chat.responses.create({
model: WALLET_MODEL,
input: [
{
type: 'message',
role: 'user',
content: 'Repay 1000 USDC of my Morpho Blue vault debt',
},
],
metadata: {
user_id: 'user-1',
session_id: 'session-1',
wallets: [{ address: '0xYourWallet', chain: 'ethereum' }],
},
});
const primitives = extractPrimitives(response);
for (const primitive of primitives) {
if (isVaultRepayPrimitive(primitive)) {
console.log('Vault repay:');
console.log(' Amount:', primitive.params.amount);
console.log(' Asset:', primitive.params.asset);
console.log(' Chain:', primitive.params.chain);
console.log(' Protocol:', primitive.params.protocol);
}
}Copy code
Open in Cursor
Open in VS Code
Open in v0
Open in Claude
Open in ChatGPT
Filter All Vault Primitives
Use the category-level helpers when you want to handle all vault operations at once.
import {
Chaos,
WALLET_MODEL,
extractPrimitives,
isVaultPrimitive,
VAULT_PRIMITIVES,
} from '@chaoslabs/ai-sdk';
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
const response = await chaos.chat.responses.create({
model: WALLET_MODEL,
input: [
{
type: 'message',
role: 'user',
content: 'Deposit 5000 USDC into the Morpho vault and borrow 2000 USDC against it',
},
],
metadata: {
user_id: 'user-1',
session_id: 'session-1',
wallets: [{ address: '0xYourWallet', chain: 'ethereum' }],
},
});
// Category check: is this any vault primitive?
const allPrimitives = extractPrimitives(response);
const vaultPrimitives = allPrimitives.filter(p => isVaultPrimitive(p.type));
console.log(`Found ${vaultPrimitives.length} vault primitives:`);
for (const p of vaultPrimitives) {
console.log(` ${p.type} — ${p.params.amount} ${p.params.asset}`);
}
// Available vault primitive types for reference
console.log('\nAll vault primitive types:', VAULT_PRIMITIVES);
// => ['vault_deposit', 'vault_withdraw', 'vault_borrow', 'vault_repay']Copy code
Open in Cursor
Open in VS Code
Open in v0
Open in Claude
Open in ChatGPT
Was this helpful?