Weekly entries cover everything that shipped across the platform, including
API and data-pipeline work. Version entries are the published
@agg-build packages — those four are version-linked, so a release usually
bumps them together, and the tags show which ones shipped.
Subscribe via RSS.Patchsdk
-
Add the missing
slippagefield toSmartRouteResponse. The API has always returned route slippage metrics on the smart-route response (SmartRouteResponseTB.slippagein the contract:vwap,refMidpoint,slippage,slippageBps), but the SDK’s hand-mirrored interface never declared it.@agg-build/hooksreadsslippage.slippageBpsto flag thin liquidity, so that code — and its test — could not typecheck against the published type. Purely additive: the field is optional, so no existing consumer changes behaviour. The newSmartRouteSlippageinterface is exported alongside it.
Patchsdk
- Widen
WithdrawalSourceTokenSymbolto includeUSD1. BNB USD1 (Myriad settlement inventory) can now fund a withdrawal, so it can appear in a withdrawal’ssources[]. It is a source-only token —WithdrawTokenSymbol(the request/destination union) is unchanged, same aspUSD.
Minorhooksui
-
Add
config.formatting.formatPriceso partners can override how prices render.formatPercentalready governed probability rendering on discovery surfaces, but every cents surface formatted prices with a hardcoded formatter. Partners using a non-percentage odds convention (decimal, fractional, moneyline) ended up with converted probabilities on discovery pages and unconverted cents everywhere else.formatPricereceives the same0..1probability asformatPercentand now governs the order book, event page outcome chips, place-order, and positions. Set both to the same function to apply one odds convention app-wide. The positions view model also honorsformatCurrency, which it previously ignored.formatPriceis optional and unset by default, so every surface keeps its current rendering until a partner opts in. The order book spread and position PnL percentages stay on the built-in formatters by design — neither is a price.
Patchui
- Scope the order-book view for a selected outcome to that market’s own matched set. The label fallback in
collectEligibleVenueOutcomesno longer merges same-label outcomes from other markets that are on the opposite semantic side: a second same-venue market with a different question (a decomposed per-team sibling leg or a same-family total) and markets of a different framing shape (bare Yes/No leg vs team-titled single) are excluded when the user’s exact outcome is known. Fixes the unmatched kalshi moneyline leg’s No view showing polymarket rows the router can never fill on, and the crossed book / negative spread produced by merging opposite-side books.
Patchhooksui
- Event detail page: load every market instead of only the first page of 20.
useVenueMarketsgains afetchAlloption that eagerly fetches remaining cursor pages until exhausted;MarketDetailsListanduseEnrichedVenueEventnow use it with a 100-row page size, so events with many markets (e.g. 80+ open markets) render their full market list instead of a silently truncated one. - ui: Sports moneyline card: when a bare Yes/No leg and a cross-venue titled single collide on one aggKey (venue mis-keys a leg with the event base), keep the titled single — it renders one pill per team and carries the cluster — instead of first-wins evicting it.
Patchui
- Sports game-detail page: fix period tab ordering and add a sport-aware gate so a market never surfaces a nonsense tab for its sport. first_N_innings tabs now sort together, numerically by N (5 Innings no longer sorts before 3 Innings). A period family implausible for the events sport (e.g. a Sets period on a baseball event) demotes to the Other tab instead of rendering its own tab, closing the gap left by an upstream Rust classification fix. The gate fails open: unknown or unlisted sports keep every existing tab.
Minorhooksui
- Sports game-detail tabs are now derived from the game’s own markets instead of a fixed, soccer-shaped list. A baseball game renders Game Lines / 5 Innings / Home Runs / Strikeouts rather than Game Lines / Halves / Other. Three tab kinds are derived per game: Game Lines (full-game moneyline, spreads and totals, plus team props and specials such as the first-inning-run and extra-innings markets), one tab per period family that has lines (1h and 2h collapse into a single Halves tab as before, while first_5_innings reads as 5 Innings), and one tab per player-prop stat, labelled from the market subtype. Soccer Corners / Goals / Assists / Shots tabs are unchanged and still resolve their labels through the existing cornersTab / goalsTab / assistsTab / shotsTab ui-config keys, so partner overrides keep working. Three new overridable label keys are added: quartersTab, setsTab and playerPropsTab. The Game Lines tab no longer filters to regular time. Period-scoped markets now have their own tabs, and that filter had been hiding the period-scoped game props which belong on Game Lines.
- ui: Sports moneyline card: drop decomposed per-team legs as a set once their merged single is present, instead of only the legs carrying a match edge. The matcher routinely pairs just some of a game’s legs, which left an orphan leg beside the anchor and still rendered the whole matchup question as a pill.
-
ui: Trade panel: stop presenting an unaffordable primary route as a dead end when
the same quote carries an executable solo. Solo route cards with their own
quoteId no longer inherit the primary’s
insufficient_balancestatus/error, and the default card selection prefers the executable solo when the primary is blocked on funding — a Kalshi-funded user with no on-chain balance now lands on a submittable Kalshi route instead of a blocking “Insufficient balance” alert. Quotes where nothing is executable still block exactly as before.
Minorhooksui
- Sports game-detail tabs are now derived from the game’s own markets instead of a fixed, soccer-shaped list. A baseball game renders Game Lines / 5 Innings / Home Runs / Strikeouts rather than Game Lines / Halves / Other. Three tab kinds are derived per game: Game Lines (full-game moneyline, spreads and totals, plus team props and specials such as the first-inning-run and extra-innings markets), one tab per period family that has lines (1h and 2h collapse into a single Halves tab as before, while first_5_innings reads as 5 Innings), and one tab per player-prop stat, labelled from the market subtype. Soccer Corners / Goals / Assists / Shots tabs are unchanged and still resolve their labels through the existing cornersTab / goalsTab / assistsTab / shotsTab ui-config keys, so partner overrides keep working. Three new overridable label keys are added: quartersTab, setsTab and playerPropsTab. The Game Lines tab no longer filters to regular time. Period-scoped markets now have their own tabs, and that filter had been hiding the period-scoped game props which belong on Game Lines.
- ui: Sports moneyline card: drop decomposed per-team legs as a set once their merged single is present, instead of only the legs carrying a match edge. The matcher routinely pairs just some of a game’s legs, which left an orphan leg beside the anchor and still rendered the whole matchup question as a pill.
Patchui
- Sports moneyline card: render one pill per team when a venue’s decomposed per-team legs and their merged cross-venue single are both in scope. Opening the leg venue’s own event (e.g. kalshi’s side of an MLB game) previously showed the merged anchor as an extra pill labelled with the whole matchup question.
Patchui
- Show every quoted venue in Smart Routing, not just the fundable ones. A solo
venue whose own funding lane was short came back without an executable quote id
and was dropped from the comparison list — so when an off-chain venue won the
route (which keeps the overall quote
ok), the alternative venue vanished from the panel entirely. The card now renders with its payout for comparison; the panel’s existing Deposit / Add funds CTA remains the funding signal.
Patchsdkhooks
- Add
isVenueExecutablevenue predicate (@agg/common) for gating per-venue order-execution eligibility, distinct fromisVenueActive(compile-time) andisVenueDataVisible(data display).
Weekly
Changed
- Markets listed under an event are ordered more sensibly. Sets of competing candidates now sort by odds, and events whose legs are labelled by month sort chronologically instead of falling back to a shared settlement date.
- Limitless recurring short-window crypto markets now appear as soon as the venue publishes the next slot, ahead of the window opening, instead of showing up part-way through it. They arrive with
statusofunopenedand only become tradable once the window starts.
Fixed
- Orders and transfers no longer fail with invalid- or insufficient-balance errors in two cases: Limitless positions reported more shares than the wallet could actually sell, and BNB transfers were quoted against a larger amount than the one that landed in the wallet.
- Polymarket deposit wallets now resolve to the address the venue actually deployed. Funding and orders were being pointed at a predicted address that no longer exists on chain.
- Activity now lists only deposits a user actually made. Internal settlement and bridge transfers arriving in a managed wallet were being reported as incoming deposits.
- Polymarket events that were missing some of their markets, and quiet markets whose prices had stopped updating, now stay current.
- Markets Polymarket has shelved no longer show as open and tradable, and events that have finished report a
volume24hrof0rather than a frozen figure. - Full settlement rules are returned for every venue on a matched market instead of just one of them, and Limitless grouped markets now carry their own rules text.
- Search and orderbook reads stay fast and reliable under heavy load. Both previously slowed to several seconds or failed outright when traffic was high.
Minorsdk
-
Add
bookQualityto position responses (OutcomePosition,VenuePositionBalance). Positions are marked at the price the held size could actually be closed at, by walking the venue’s resting book. When a venue’s book is degenerate — a handful of contracts of real bid behind a stub ladder — that mark collapses, butpriceSourcestill reports"orderbook"because the walk did fill. Nothing in the response distinguished that from a healthy fill.bookQualitycarries the engine’s existingBookQualityverdict (healthy/wide_spread/bid_only/ask_only/endpoint_stub/crossed/empty) for the worst book across the position’s legs, so clients can label a low-confidence mark instead of rendering it as a market price. Values are unchanged — this adds a signal, it does not re-mark. ReadpriceSourcefirst:bookQualityonly qualifies book-derived marks, and asettledposition reportsemptybecause it consults no book.
Patchui
-
Fix Tailwind utilities resolving theme tokens at
:rootinstead of at the element. The@themeblock is now@theme inline, so.bg-agg-primary& friends emitvar(--agg-color-primary)directly rather than a--color-agg-*alias bound at:root. Two consequences of the old form are fixed:- Dark mode.
:rootnever matches.dark .agg-root:not(.light), so every utility resolved against the light defaults regardless of theme —.bg-agg-primaryrendered#536dfeand.text-agg-foregroundrendered#020205on dark surfaces. - Consumer theming. Overrides scoped to
.agg-root(including Partner Theme Studio’s exported CSS) never reached any utility class.
:rootcan drop that block. - Dark mode.
Patchauth
- Surface auth-callback failures as a toast. Account linking (and sign-in) completes on the OAuth redirect-return page, detached from the UI that started it — so when
linkAccountConfirmrejects (e.g. HTTP 409already_linked_elsewherewhen the provider identity is already linked to a different user) the error only landed silently inAggAuthProvider’s error state and the user saw nothing.AggAuthProvidernow toasts the callback error (when a toast provider is mounted) with a readable message —already_linked_elsewhere→ “That account is already linked to a different user.” — titled for linking vs sign-in based on whether alink_confirm_tokenis present.
Patchsdk
- Fix
client.linkAccountConfirm()401’ing with “Missing Authorization header”. Confirm runs on the OAuth redirect-return page, where the full-page reload has wiped the in-memory access token (tokens are never persisted). The request therefore went out with noAuthorizationheader, andrequest()’s 401-refresh-retry is gated on an existing token so it couldn’t recover — so account linking failed at the final step.linkAccountConfirm()now mints a fresh access token from the refresh cookie/token (deduped) before the request when the in-memory token is absent; if the session is genuinely gone the refresh throws and the caller surfaces it.
Patchsdkhooksui
- Complete the ProfileModal account-linking flow. The initial fix (#2503) switched ProfileModal’s connect buttons to
client.linkAccount(), but the rest of the round-trip was missing — this finishes it:@agg-build/sdk—client.linkAccount()now sendscredentials: "include"in the default bearer delivery mode. Without it the same-origin link-proof cookie the server sets on/users/me/link-account/startwas dropped on the cross-origin response, so the OAuth link callback rejected every link withlink_proof_invalid.@agg-build/hooks—handleAuthCallback(the shared callback handler auto-run by@agg-build/auth’sAggAuthProvideranduseAggAuthCallback) now detects thelink_confirm_tokenthe provider callback returns, callsclient.linkAccountConfirm(), refreshes the user, and strips the token from the URL. Previously nothing consumed the token and the link silently never persisted. A collision (identity already linked to a different principal) surfaces as the callback error (HTTP 409);already_linked_sameresolves idempotently.@agg-build/ui— email linking (magic link, no redirect) now shows a “check your inbox” success toast so the click has visible feedback.
Patchui
- Fix ProfileModal social connect/disconnect. Connect now links the provider to the already-signed-in principal via
client.linkAccount()(POST /users/me/link-account/start) instead of starting a fresh sign-in viastartAuth()(POST /auth/start), which could not attach to the current user and caused a competing double-redirect. Disconnect (and connect) calls are now guarded and surface the API error (e.g. “Cannot disconnect the only linked auth provider”) through the modal’s toast instead of escaping as an unhandled promise rejection with no user feedback.
Patchhooks
- Poll the venue-event query while a market lingers “open” past its endDate, so short-cadence markets (e.g. Kalshi 15-min BTC) transition to their resolved state instead of rendering a stale open market with no orderbooks (SNA-3047). endDate only triggers refetches — server status stays authoritative, so venues with inaccurate endDates can’t disable trading.
Patchui
- Update settlement differences UI behavior
Patchui
- Stop the combined-moneyline card from rendering unmerged cross-venue duplicates of one market as two identical pills (“Match Winner” ×2 showing the same Yes price twice). When per-leg labels aren’t distinct, the card falls back to the standard single-market rendering with team-title pills (SNA-3028, esports).
Patchui
- Render “Team to Advance” in the Game Lines tab, above the Moneyline (Polymarket parity). Knockout advance markets are primary game lines (multi-million volume) and were buried in Other; for a venue whose only market is the advance single (hyperliquid) this is what makes Game Lines exist at all. One card per game, anchored by the 2-outcome single with team-name pills (SNA-3028).
Minorui
- The Search primitive now requests
status: ["open"]so open-only filtering happens server-side: pages arrive full of tradeable results and pagination is honest, instead of fetching all statuses and emptying resolved-heavy pages client-side (which rendered “No markets found” for queries like “5m btc” whose top results are recurring-series history).
Minorsdkhooksui
- sdk, hooks: Add an optional
statusfilter to search:client.search({ status: ["open"] }),useSearch({ status: ["open"] }), anduseMarketSearch({ status: ["open"] })return only markets/events in the given statuses. Pass["open"]for tradeable-only results — without it, recurring series (e.g. 5-minute up/down markets) can fill a page with resolved history, which a UI that hides non-open rows renders as an empty result. - ui: Give whole-match totals a clean unit-based title (“Total Goals” / “Total Corners” / “Total Rounds”) derived from the group’s stat, instead of a raw venue question that produced labels like “Reg Time: Over 0.5 goals scored Totals” when a kalshi market anchored the group (SNA-3028). Per-team totals keep their subject (“Argentina Totals”).
Patchui
- Show consistent team names on sports spread outcome pills (
{Favored} −X/{Dog} +X) regardless of which venue anchors the ladder stop. A kalshi/limitless anchor storesYes/Nolabels; the team names are now borrowed from the cross-venue twins (poly/predict) at the same signed line, falling back toYes/Noonly when no venue carries a team title (SNA-3028).
Patchui
- Raise the sports event per-tab market fetch page size from 20 to 100 (the API max), so a prop-heavy tab like “Other” loads in 1–3 requests instead of ~15.
- Render sports spreads as a single symmetric ladder (home ← center → away) like Polymarket, instead of two same-titled “Spreads” cards. Both favored-side families (
…_sp_arg/…_sp_che) now collapse into one spread group, and the ladder lays them on a signed magnitude axis with the home/first team anchoring the negative side (SNA-3028).
Patchui
- Group sports spread/total ladders by the aggKey line-family instead of the market question, so the same total (e.g. match total O/U) no longer fragments into separate cards across venues that phrase it differently (SNA-3028).
Patchsdkhooks
- Clarify the id vocabulary across the WS surface and surface resolved-market status on
/midpoints.useMarketOrderbooknow acceptsvenueMarketOutcomeId(theoutcomes[].idfrom REST market responses); the oldmarketIdoption keeps working but is deprecated — it has always carried a venueMarketOutcomeId, not a venueMarketId.- SDK
onSnapshot/onDeltacallback parameters are renamedoutcomeId(type-level only, no runtime change). subscribed/unsubscribedconfirmations on the arb channel now also echo the ids undermarketIds(arb subscriptions are keyed by marketIds); the misleadingoutcomeIdsmirror stays for backwards compatibility.- The gateway’s
Snapshot unavailable for <id>error now explains that orderbook subscriptions take venueMarketOutcomeIds, not venueMarketIds. GET /midpointsentries now carrymarketStatus, and resolved markets return null prices plus a structurederror(code: "market_resolved") instead of a stale settled-market mark; unknown ids getcode: "market_not_found".
Minorsdkhooksui
- Discovery responses no longer carry outcome prices.
GET /venue-events,GET /venue-events/:id, andGET /venue-markets(and/search, which shares the same shapes) stop returningvenueMarketOutcomes[].price— including onmatchedVenueMarkets[]siblings. TheVenueMarketOutcome.pricetype is now optional and deprecated. Fetch live prices fromGET /midpoints(or theuseMidpoints/useViewportMidpoints/ live WS hooks), keyed byvenueMarketOutcomeId. UI components already prefer live midpoints; the staticpricewas only a pre-live seed and is now ignored when absent.
Patchui
- Sports detail page: honor the documented open period grammar (
set_N,map_N,game_N,period_N,inning_N,first_N_innings) instead of collapsing those markets into the “Other” period bucket; treatmatchas full-game scope so whole-match markets stay in Game Lines; stop parsing the opaqueaggKeyfor the league label (categories are the only label source).
Patchui
- Fold cross-venue moneyline legs into the 3-way Moneyline card regardless of which venue anchors the merged representative:
isBinarySportsMoneylineMarketnow also recognizes a leg by its deterministic_ml_aggKey (e.g. a kalshi-anchored “Reg Time: Brazil” withmarketSubtype=null), so no leg drops out as a standalone row. Mis-tagged props stay excluded (they are never_ml_-keyed).
Patchsdkhooksui
-
Add a
context: "list" | "detail"option togetVenueMarkets/useVenueMarketsand passcontext: "list"from the event tile’s market-scroll query. On list/tile surfaces, axis and dates events now sort their markets by lifetime volume (biggest market first) for both the embedded top-3 and the scroll-loaded tail, while the detail page keeps its structured order (threshold/date ascending).candidate/sportevents are unchanged.
Patchsdkhooksuiauth
- Improve live trading and resolved-market handling across the AGG React packages.
@agg-build/hooks- invalidate and optimistically refresh cached market, balance, position, and activity data when
market_resolvedWebSocket events arrive - export venue-attributed live best-price candidate helpers/hooks so UI surfaces can keep the displayed venue logo aligned with the freshest live price
- invalidate and optimistically refresh cached market, balance, position, and activity data when
@agg-build/ui- add shared claim-winnings and resolved-market claim hooks for resolved positions
- show the new resolved-market earnings/claim state in the event market flow
- add
onBeforePrimaryActionso partners can run a pre-submit gate before normal order execution - keep market detail outcome prices and venue logos in sync with live best-price updates
@agg-build/sdk- no direct SDK source or API changes landed in this push
- patch bump only to keep the linked public package versions aligned for release/publishing with the updated hooks and UI peers
Patchhooksui
-
Add provider-level AGG UI trading execution mode config.
AggProvidernow acceptsconfig.trading.executionModeso hosted UI surfaces can share a global live or paper trading mode without threadingexecutionModethrough every page or order panel.PlaceOrder,HomePage,EventMarketPage, andUserProfilePageuse the configured mode by default while preserving explicit component-level overrides. The shared balance provider now also uses the configured paper mode, soConnectButtonheader totals andUserProfilePagebalance/positions value cards read paper balances instead of falling back to live-mode zeroes. Paper balances are labeled as Paper in the user profile network breakdown, use a shared paper-mode icon, and show a tooltip warning when the app is running with simulated paper funds.
Minorsdkhooksui
-
Add safe midpoint batching for component-driven market pages.
AggClient.getMidpointsnow splits large/midpointsGET requests into smaller batches and merges the responses, defaulting to 75 venue market IDs per request to stay below common CDN URL limits. React hooks and UI components read the same default throughconfig.market.maxMidpointIdsPerRequest, and direct hook/SDK callers can override the cap when needed.
Majorsdkhooksuiauth
-
sdk, hooks: Narrow recurrence filters to the documented public cadence enum and expose the full supported venue-event cadence list through
RECURRENCE_CADENCES, includingPT10M,P1M, andP1Y. Migration guidance: replace dynamic recurrence-catalog calls with the SDKRECURRENCE_CADENCESexport or the OpenAPI enum. Pass the literal"null"only when filtering one-off venue events.listRecurringCryptoMarketsremains limited to deterministic crypto durations:PT5M,PT15M,PT1H, andP1D.
Minorsdkhooksui
- Frontend feature round-up since the last release: live arbitrage signals, nested category navigation, event-tile price gaps, paper-trading mode, and position/redeem fixes.
- Live arbitrage (
@agg-build/sdk,@agg-build/hooks,@agg-build/ui)- SDK added
subscribeArbandsubscribeArbFeed, with the supporting wire types (WsArbMarketUpdate,WsArbFeedBatch,WsArbFeedEntry), socket dispatch, reconnect, and refcount handling, and documented the new arb actions in theWsClientMessageunion. - Hooks added
useMarketArb(live per-market arb) anduseArbFeed(event-level MAX rollup), exported with theirUseMarketArbResult/UseArbFeedResulttypes. - UI brought back the arbitrage sort option and added event-list filters; event tiles and lists now surface arb-driven ordering.
- SDK added
- Nested categories (
@agg-build/hooks,@agg-build/ui)- Hooks added
useCategoryChildren(withUseCategoryChildrenOptions) for fetching subcategories. - UI renders the category
displayNameon home tabs and event-list filters, supports nested subcategories, andEventListPropsgainedonCategoryRootChange.HomePageCategorynow carries an optionaldisplayName.
- Hooks added
- Event-tile price gaps (
@agg-build/hooks,@agg-build/ui)- Hooks exported the
computePriceGapshelper plusMAX_PRICE_GAP_PCT/MIN_PRICE_GAP_PCTand theComputePriceGapsOptions/PriceGapValuetypes. - A new
enablePriceGapfeature flag andpriceGaplabel gate compact price-gap signals on aggregated event tiles; tiles wait for midpoints before computing gaps to avoid flicker.
- Hooks exported the
- Paper-trading mode (
@agg-build/sdk,@agg-build/hooks,@agg-build/ui)- SDK introduced the
ExecutionMode("live" | "paper") type and threaded an optionalmodethroughExecuteManagedParams, smart-route params, positions/orders queries, andManagedBalancesParams. - UI’s place-order panel accepts an
executionModeprop and reports the chosenmodeback throughonPrimaryAction.
- SDK introduced the
- Positions, redeem, and claim fixes (
@agg-build/hooks,@agg-build/ui)- Hooks exported
invalidateUserClaimStateand now walk the active bucket when counting redeem-eligible positions; auto-settled HL winners are reported as redeemed rather than ineligible. - UI user-profile tabs trust server-provided position buckets, redeem payout renders from the 6-decimal
totalPayoutRaw(no longer derived fromlegs[0]decimals), and a new partner-overridableclaimlabel group powers claim lifecycle notifications.
- Hooks exported
- Withdrawals & misc (
@agg-build/sdk,@agg-build/ui)- SDK added the
WithdrawalSourceTokenSymboltype to support pUSD withdrawal sources;WithdrawManagedSourceItem.tokenSymbolnow acceptspUSD. - UI event-list skeletons can render the discovery sidebar (
withSidebar), with refreshed event-tile coloring, volume sort, and updatedsort-volume-24hr/shield-trusticons.
- SDK added the
- Live arbitrage (
Patchsdk
- Add
email: string | nullto the typedaccounts.createdwebhook event payload so partners can read email addresses supplied by magic-link or OAuth sign-in.
Patchhooksui
-
Expand the trading labels surface with 9 new partner-overridable keys
for execution failure messaging (
sellNoOnchainPosition,venueQuoteUnfillable,venueMinOrderSize,sourceBalanceChanged,venueMarketResolved,dflowWalletUnverified,venueNoQuotePath,solanaBlockhashExpired,venueRateLimited,serviceBlockedOrder), and wire matching patterns intonormalizePlaceOrderErrorMessageso the SDK renders friendly copy for everyUserActionableStepErrorreason code the trade-executor now emits. Also rewrites the venue-terminated pattern coverage to handle Limitless’sFAILED/UNMATCHEDsettlement statuses with dedicated friendly copy ("Order didn't settle on-chain"and"No liquidity matched your order at the quoted price"), and extends the min-order-size pattern to recognize predict.fun’s existingpredict_min_quantityuser-actionable copy. - Centralize execution failure labels and clean up place-order error normalization for venue outages and expired submission deadlines.
Patchsdkhooksuiauth
- Deposit & withdraw UX overhaul:
- New
useWithdrawEstimatehook surfaces per-route fee and ETA estimates before submit. - Refreshed deposit and withdraw flows, including new amount/method/success screens, transfer fee summary, and friendly error states.
WithdrawManagedResponsenow exposescompletedAmountRaw, and the WSWithdrawalLifecycleEventincludesrequestedAmountRawandcompletedAmountRawso consumers can render the terminal settled amount.- New balance/activity invalidation helpers (
invalidateUserActivityQueries,invalidateUserMoneyState,userActivityQueryKeys) exported from@agg-build/hooks. - User profile activity rows and balance cards updated with refined states; new
spinnerandcircle-xmarkicons; tooltip primitive tweaks.
- New
Patchui
- Fix a bug in geo-blocking behavior for order splitting
Patchui
- UI updates for Positions tab and removed hardcoded colors
Patchui
- Added new prop in tooltip for gap and UI adjustments
Patchui
- Fix a bug in geo-blocking behavior for order splitting
Patchui
- UI updates in the withdraw modal and claim flow for design QA
Patchui
- Bug fix for nullable venueMarketOutcomeId
Patchui
- Bug fix for nullable venueMarketOutcomeId
- Update network chain logos to prediction-markets CDN paths; fix Solana missing from deposit modal network list
Patchui
- removed redundant div from venue selection
Patchui
- Sorting user positions
Patchui
- Market details UX updates
Minorsdkhooksuiauth
-
Added smart-route fee breakdown support across AGG packages.
@agg-build/sdknow includes optionalfeeBreakdowndata on smart-route quote responses so integrators can display venue fees, bridge fees, execution gas, and total fees.@agg-build/hooksaddsfeatures.showFeesBreakdownto UI config and new label keys for fees and updated positions table/status copy.@agg-build/uiadds optional fee breakdown display in the place-order flow, updates route ordering to prioritize better executable value, improves mobile event-market trade opening from outcome selection, and upgrades positions UX (active/closed filtering, status/result badges, and claim-state handling).
showFeesBreakdown).
Minorui
- Added xs size for icons and geo block updates for order
Patchhooksuiauth
-
Refresh published package metadata and fixes for the AGG SDK package stack.
Updates:
- @agg-build/hooks: fix midpoint price calculation in
useViewportMidpoints; minor adjustments to UI-config labels and theuseWithdrawFlowhook. - @agg-build/ui: settlement formatting refactor (new
settlement-text-renderer+settlement-text.utils);PlaceOrderflow updates including default amount, sell-tab default, partially-filled state, best-price wiring, max label, and a sign-in-to-trade flow; refreshed typography variants; newappsandcircle-overlapicons; customSelectmigration for TBAs; connect-button view rewrite; event-list search/filter improvements. - @agg-build/auth: updates to the SIWE adapter and shared auth utils.
- @agg-build/hooks: fix midpoint price calculation in
Patchsdkhooksui
-
sdk: Add withdrawal lifecycle WebSocket support — new
WsWithdrawalLifecycleEventmessage type,onWithdrawalLifecycleSDK callback, and associated types (WsWithdrawalLifecycleStatus,WsWithdrawalLegStatus,WsWithdrawalLifecycleLeg). hooks: AdduseWithdrawFlow,useWithdrawalLifecycle, anduseOnWithdrawalLifecyclehooks with full withdrawal lifecycle tracking via WebSocket. Fix live outcome price fallback so REST midpoints surface when no WS midpoint exists. ImproveuseMidpointsto prefer the venue with the lower YES midpoint for better buyer pricing. Fix hooks package exports to use format-specific type declarations (.d.mtsfor ESM consumers). ui: Add wallet withdrawal flow — recipient address input, amount/token/network selection, confirmation step, and an order-style execution timeline showing per-leg bridge/transfer progress with live lifecycle status. AddCopyButtonprimitive. Show wallet address on card-payment pending step in the deposit flow. Surface best-price venue indicators in the event list, market details, and orderbook. Fix cluster-aware market deduplication to collapse cross-page duplicates.
Majorsdkhooksuiauth
- Initial v1.0.0 release of the AGG client libraries on npm under the
@agg-buildscope.