Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions apps/agentic-chat/src/components/tools/GetLimitOrdersUI.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { stopPropagationHandler } from '@/lib/eventHandlers'
import { cn } from '@/lib/utils'

import { Amount } from '../ui/Amount'
import { AssetIcon } from '../ui/AssetIcon'
import { ToolCard } from '../ui/ToolCard'

import { useToolStateRender } from './toolUIHelpers'
Expand Down Expand Up @@ -41,6 +42,8 @@ interface OrderListItemProps {
network: string
sellTokenSymbol: string
buyTokenSymbol: string
sellTokenIcon?: string
buyTokenIcon?: string
sellAmount: string
buyAmount: string
filledPercent: number
Expand All @@ -53,6 +56,8 @@ function OrderListItem({
network,
sellTokenSymbol,
buyTokenSymbol,
sellTokenIcon,
buyTokenIcon,
sellAmount,
buyAmount,
filledPercent,
Expand All @@ -77,11 +82,13 @@ function OrderListItem({
<div className="flex items-center justify-between py-3 px-1 gap-4">
<div className="flex flex-col gap-1 min-w-0 flex-1">
<div className="flex items-center gap-2 text-sm">
<span>
<span className="flex items-center gap-1.5">
<AssetIcon icon={sellTokenIcon} symbol={sellTokenSymbol} className="w-4 h-4" />
Sell <Amount.Crypto value={sellAmount} symbol={sellTokenSymbol} className="font-medium" />
</span>
<span className="text-muted-foreground">|</span>
<span>
<span className="flex items-center gap-1.5">
<AssetIcon icon={buyTokenIcon} symbol={buyTokenSymbol} className="w-4 h-4" />
Buy <Amount.Crypto value={buyAmount} symbol={buyTokenSymbol} className="font-medium" />
</span>
<span className="text-muted-foreground">|</span>
Expand Down Expand Up @@ -179,6 +186,8 @@ export function GetLimitOrdersUI({ toolPart }: ToolUIComponentProps<'getLimitOrd
network={order.network}
sellTokenSymbol={order.sellTokenSymbol}
buyTokenSymbol={order.buyTokenSymbol}
sellTokenIcon={order.sellTokenIcon}
buyTokenIcon={order.buyTokenIcon}
sellAmount={order.sellAmount}
buyAmount={order.buyAmount}
filledPercent={order.filledPercent}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@ function TransactionCard({
<TxStepCard.SwapPair
fromSymbol={swapTokens.tokenOut.symbol}
toSymbol={swapTokens.tokenIn.symbol}
fromIcon={swapTokens.tokenOut.icon}
toIcon={swapTokens.tokenIn.icon}
className="-ml-0.5"
/>
)}
Expand Down
2 changes: 2 additions & 0 deletions apps/agentic-chat/src/components/tools/InitiateSwapUI.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ export function InitiateSwapUI({ toolPart }: ToolUIComponentProps<'initiateSwapT
<TxStepCard.SwapPair
fromSymbol={swap?.sellAsset.symbol.toUpperCase()}
toSymbol={swap?.buyAsset.symbol.toUpperCase()}
fromIcon={swap?.sellAsset.icon}
toIcon={swap?.buyAsset.icon}
isLoading={isLoading}
/>
<TxStepCard.Amount
Expand Down
2 changes: 2 additions & 0 deletions apps/agentic-chat/src/components/tools/LimitOrderUI.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ export function LimitOrderUI({ toolPart }: ToolUIComponentProps<'createLimitOrde
<TxStepCard.SwapPair
fromSymbol={summary?.sellAsset.symbol.toUpperCase()}
toSymbol={summary?.buyAsset.symbol.toUpperCase()}
fromIcon={summary?.sellAsset.icon}
toIcon={summary?.buyAsset.icon}
isLoading={isLoading}
/>
<TxStepCard.Amount
Expand Down
9 changes: 7 additions & 2 deletions apps/agentic-chat/src/components/ui/TxStepCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { formatCryptoAmount } from '@/lib/number'
import { StepStatus } from '@/lib/stepUtils'
import { cn } from '@/lib/utils'

import { AssetIcon } from './AssetIcon'
import { Skeleton } from './Skeleton'
import { ToolCard } from './ToolCard'

Expand Down Expand Up @@ -135,11 +136,15 @@ const TxStepCardStep = ({
const TxStepCardSwapPair = ({
fromSymbol,
toSymbol,
fromIcon,
toIcon,
isLoading,
className,
}: {
fromSymbol?: string
toSymbol?: string
fromIcon?: string
toIcon?: string
isLoading?: boolean
className?: string
}) => {
Expand All @@ -148,11 +153,11 @@ const TxStepCardSwapPair = ({

return (
<div className={cn('flex items-center gap-3', className)}>
<span className="text-xl font-bold">{fromSymbol}</span>
<AssetIcon icon={fromIcon} symbol={fromSymbol} className="w-6 h-6" />
<div className="w-6 h-6 rounded-full bg-muted flex items-center justify-center flex-shrink-0">
<ChevronRight className="w-4 h-4 text-muted-foreground" />
</div>
<span className="text-xl font-bold">{toSymbol}</span>
<AssetIcon icon={toIcon} symbol={toSymbol} className="w-6 h-6" />
</div>
)
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
Expand Down
4 changes: 4 additions & 0 deletions apps/agentic-server/src/tools/limitOrder/createLimitOrder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,12 @@ export interface LimitOrderSummary {
sellAsset: {
symbol: string
amount: string
icon?: string
}
buyAsset: {
symbol: string
estimatedAmount: string
icon?: string
}
network: string
limitPrice: string
Expand Down Expand Up @@ -154,10 +156,12 @@ export async function executeCreateLimitOrder(
sellAsset: {
symbol: sellAsset.symbol,
amount: input.sellAmount,
icon: sellAsset.icon,
},
buyAsset: {
symbol: buyAsset.symbol,
estimatedAmount: estimatedBuyAmount,
icon: buyAsset.icon,
},
network: input.network,
limitPrice: input.limitPrice,
Expand Down
11 changes: 9 additions & 2 deletions apps/agentic-server/src/tools/limitOrder/getLimitOrders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ interface OrderInfo {
buyToken: string
sellTokenSymbol: string
buyTokenSymbol: string
sellTokenIcon?: string
buyTokenIcon?: string
sellAmount: string
buyAmount: string
executedSellAmount: string
Expand All @@ -44,12 +46,15 @@ interface OrderInfo {

const DEFAULT_DECIMALS = 18

function resolveTokenMetadata(tokenAddress: string, chainId: number): { symbol: string; precision: number } | null {
function resolveTokenMetadata(
tokenAddress: string,
chainId: number
): { symbol: string; precision: number; icon?: string } | null {
const network = CHAIN_ID_TO_NETWORK[chainId] as Network | undefined
if (!network) return null
const asset = AssetService.getInstance().searchByContract(tokenAddress, network)[0]
if (!asset) return null
return { symbol: asset.symbol, precision: asset.precision }
return { symbol: asset.symbol, precision: asset.precision, icon: asset.icon }
}

export interface GetLimitOrdersOutput {
Expand Down Expand Up @@ -118,6 +123,8 @@ export async function executeGetLimitOrders(
buyToken: order.buyToken,
sellTokenSymbol: sellTokenMeta?.symbol ?? order.sellToken.slice(0, 10),
buyTokenSymbol: buyTokenMeta?.symbol ?? order.buyToken.slice(0, 10),
sellTokenIcon: sellTokenMeta?.icon,
buyTokenIcon: buyTokenMeta?.icon,
sellAmount: fromBaseUnit(order.sellAmount, sellPrecision),
buyAmount: fromBaseUnit(order.buyAmount, buyPrecision),
executedSellAmount: fromBaseUnit(order.executedSellAmount || '0', sellPrecision),
Expand Down
Loading