[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-tres-asset-balance-validation":3,"mdc-2qwbgr-key":37,"related-repo-anthropic-tres-asset-balance-validation":4064,"related-org-anthropic-tres-asset-balance-validation":4166},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"tres-asset-balance-validation","validate TRES Finance wallet balances","Validate wallet balances in TRES Finance against DeBank and generate a discrepancy report. Use this skill whenever the user asks to validate, verify, cross-check, or audit their TRES balances against on-chain data or DeBank. Also trigger when the user asks if their balances are correct or wants to see discrepancies. Only EVM-compatible wallets are supported.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17,20,23],{"name":14,"slug":15,"type":16},"Finance","finance","tag",{"name":18,"slug":19,"type":16},"Audit","audit",{"name":21,"slug":22,"type":16},"Reconciliation","reconciliation",{"name":24,"slug":25,"type":16},"Web3","web3",294,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community","2026-07-02T07:37:50.293223",null,69,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Community plugin marketplace for Claude Cowork and Claude Code. Read-only mirror — submit plugins at clau.de\u002Fplugin-directory-submission.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Ftree\u002FHEAD\u002Ftres-finance-plugin\u002Fskills\u002Ftres-asset-balance-validation","---\nname: tres-asset-balance-validation\ndescription: >\n  Validate wallet balances in TRES Finance against DeBank and generate a discrepancy\n  report. Use this skill whenever the user asks to validate, verify, cross-check, or\n  audit their TRES balances against on-chain data or DeBank. Also trigger when the\n  user asks if their balances are correct or wants to see discrepancies. Only\n  EVM-compatible wallets are supported.\n---\n\n# Tres Finance — Asset Balance Validation\n\n## Overview\n\nThis skill validates wallet balances in **Tres Finance** against **DeBank**, providing a clear discrepancy report as both an interactive HTML file and a PDF. It compares per-asset token amounts (including DeFi position underlying tokens) for each EVM wallet and flags matches, minor differences, major discrepancies, missing assets, untracked tokens, and unmatched positions.\n\n> **Scope:** Only EVM-compatible wallets are supported (DeBank limitation). Exchange accounts, non-EVM chains, and empty wallets are skipped.\n\n---\n\n## When to Use\n\nTrigger this skill whenever a user asks to:\n\n- Validate or verify their TRES balances\n- Cross-check or audit wallets against external on-chain data\n- Compare TRES data to DeBank\n- Check if their balances are correct\n\n**Example phrases:**\n- *\"Validate my balances\"*\n- *\"Check my wallets against DeBank\"*\n- *\"Are my TRES balances correct?\"*\n- *\"Show me any discrepancies between TRES and on-chain data\"*\n\n---\n\n## Prerequisites\n\n| Requirement | Details |\n|---|---|\n| TRES Finance access | Must be authenticated via `get_viewer` |\n| DeBank API key | Free key available at [cloud.debank.com](https:\u002F\u002Fcloud.debank.com) |\n| EVM wallets | At least one `0x...` wallet tracked in TRES |\n\n---\n\n## Process Overview\n\n### Step 1 — Authenticate with TRES\nCall `get_viewer` to confirm the organization name.\n\n### Step 2 — Fetch wallets and balances from TRES\n\n**IMPORTANT — Timeout handling:** The `internalAccount` query with both `balances` and `positions` will timeout for large orgs. Split into two separate queries:\n\n**Query 1: Wallets + Balances only (no positions)**\n\n```graphql\nquery {\n  internalAccount {\n    results {\n      id\n      name\n      identifier\n      isExchange\n      platforms\n      balances {\n        amount\n        asset {\n          symbol\n          contract { identifier }\n        }\n        fiatValue { value unitPrice fiatCurrency }\n      }\n    }\n  }\n}\n```\n\n> **Note:** The `amount` field is returned as a **string**, not a number. Always `float()` it before arithmetic.\n\n**Wallet classification:**\n\n| Type | Condition | Validated? |\n|---|---|---|\n| EVM | `0x...` address + EVM platform + `isExchange: false` | ✅ Yes |\n| Exchange | `isExchange: true` | ❌ No |\n| Non-EVM | Bitcoin, Tezos, Tron, etc. | ❌ No |\n| Empty | No asset balances | ❌ No |\n\n**Supported EVM platforms:** Ethereum, Arbitrum, Optimism, Polygon, Base, Avalanche, Binance, Gnosis Chain, zkSync, Fantom, Celo, Berachain, Linea, Scroll, Sonic, HyperEVM.\n\n### Step 3 — Fetch DeFi positions from TRES\n\n**Do NOT use the `positions` sub-field on `internalAccount`** — it returns all historical snapshots (can be 3000+ entries per wallet) and will timeout or exceed token limits.\n\nInstead, use the dedicated `getStatelessWalletsPositions` query which returns **current** positions only:\n\n```graphql\nquery {\n  getStatelessWalletsPositions(\n    walletIdentifiers: [\"0x...\"],\n    platform: ETHEREUM,\n    application: \"aave-v3\"\n  ) {\n    walletIdentifier\n    displayName\n    positionType\n    platform\n    children {\n      symbol\n      amount\n      assetIdentifier\n      fiatValue\n    }\n    fiatValue\n    id\n  }\n}\n```\n\n**Required parameters:**\n- `walletIdentifiers`: array of wallet addresses\n- `platform`: must be an enum value like `ETHEREUM`, `POLYGON`, `ARBITRUM`, etc.\n\n**Optional but recommended:**\n- `application`: filter by protocol (e.g. `\"aave-v3\"`, `\"verse\"`, `\"lido\"`, `\"merkl\"`, `\"uniswap-v4\"`, `\"sablier\"`, `\"ethena\"`, `\"stakewise\"`, `\"quickswap\"`, `\"steer\"`, `\"yieldnest\"`, `\"morphoblue\"`)\n\n**IMPORTANT:** Without the `application` filter, the query returns empty results. Always specify the application.\n\n**Batching strategy:**\n1. First, fetch DeBank `all_complex_protocol_list` for each wallet to discover which protocols have positions\n2. Map DeBank protocol names to TRES application names (lowercase, hyphenated)\n3. Use GraphQL aliases to batch multiple wallet+platform+application combos into a single query:\n\n```graphql\nquery {\n  a1: getStatelessWalletsPositions(walletIdentifiers: [\"0x...\"], platform: ETHEREUM, application: \"aave-v3\") {\n    walletIdentifier displayName positionType platform id\n    children { symbol amount assetIdentifier fiatValue }\n  }\n  a2: getStatelessWalletsPositions(walletIdentifiers: [\"0x...\"], platform: ETHEREUM, application: \"verse\") {\n    walletIdentifier displayName positionType platform id\n    children { symbol amount assetIdentifier fiatValue }\n  }\n}\n```\n\nKeep each batched query to ~6 aliases max to avoid timeouts.\n\n### Step 4 — Retrieve DeBank API key\n\nRead `DEBANK_API_KEY` from plugin user config — do **not** ask the user to paste it in chat.\nIf the key is absent or empty, stop and display:\n\n> \"DEBANK_API_KEY is not configured. Please add it via the plugin settings (obtain your key at https:\u002F\u002Fcloud.debank.com).\"\n\n### Step 5 — Fetch DeBank data via bash\n\nFor each EVM wallet, fetch **two** endpoints:\n\n1. **Token balances:** `all_token_list` — covers all chains without requiring a `chain_id`\n2. **DeFi protocol positions:** `all_complex_protocol_list` — returns LP, staking, lending positions with underlying token amounts\n\nUse `--data-urlencode` with `-G` so the wallet address is never shell-interpolated into the URL string:\n\n```bash\n# Token balances\ncurl -s -G \\\n  -H \"AccessKey: ${user_config.DEBANK_API_KEY}\" \\\n  --data-urlencode \"id=$WALLET_ADDR\" \\\n  \"https:\u002F\u002Fpro-openapi.debank.com\u002Fv1\u002Fuser\u002Fall_token_list\"\n\n# DeFi positions\ncurl -s -G \\\n  -H \"AccessKey: ${user_config.DEBANK_API_KEY}\" \\\n  --data-urlencode \"id=$WALLET_ADDR\" \\\n  \"https:\u002F\u002Fpro-openapi.debank.com\u002Fv1\u002Fuser\u002Fall_complex_protocol_list\"\n```\n\n**Fiat-value filter:** Discard any token where `price \u003C 0.01` — these are excluded from all matching, display, and reporting.\n\n**Rate limiting:** Add a 0.3s delay between wallet requests to avoid 429 errors.\n\n### Step 6 — Match regular assets\n\nMatching must be **chain-aware**. DeBank's `all_token_list` returns a `chain` field per\ntoken (e.g. `\"eth\"`, `\"arb\"`, `\"bsc\"`). TRES balances are tied to a specific platform\nvia the wallet's `platforms` array or the balance's context. Always prefer a per-chain\nmatch before falling back to cross-chain aggregation.\n\n**Chain ID mapping** (DeBank `chain` → TRES platform):\n\n| DeBank `chain` | TRES platform |\n|---|---|\n| `eth` | ETHEREUM |\n| `arb` | ARBITRUM |\n| `op` | OPTIMISM |\n| `matic` | POLYGON |\n| `base` | BASE |\n| `bsc` | BNB (Binance) |\n| `avax` | AVALANCHE |\n| `ftm` | FANTOM |\n| `xdai` | GNOSIS |\n| `era` | ZKSYNC |\n| `celo` | CELO |\n| `linea` | LINEA |\n| `scrl` | SCROLL |\n| `mnt` | MOONBEAM |\n\n**Matching order (most specific first):**\n\n1. **Contract + chain match (best):** `asset.contract.identifier` (lowercase) vs DeBank\n   token `id` (lowercase), on the same chain. This is the most precise match.\n2. **Symbol + chain match:** For native tokens (no contract), match by `asset.symbol`\n   (case-insensitive) AND DeBank `chain` matching the TRES platform for that balance row.\n   This correctly handles the common case where a wallet holds ETH on both Ethereum and\n   Arbitrum — each TRES balance row matches its corresponding DeBank per-chain entry.\n3. **Symbol-only match (last resort):** If a TRES native token balance cannot be matched\n   to any specific DeBank chain entry, fall back to symbol-only matching. This handles\n   edge cases where TRES or DeBank uses a different chain label.\n\n### Step 7 — Match DeFi position underlying tokens\n\nThis is a critical step that compares DeFi position underlying tokens between TRES and DeBank.\n\n#### 7a. Filter out position NFT rows\n\nRemove position NFT tokens from the regular comparison (e.g. `UNI-V3-POS`, `RCL`, `SAB-LOCKUP`, `SLP`, `STEER`, `UNI-V4-POS`). These are replaced by the underlying token rows from positions.\n\n#### 7b. Process TRES positions\n\nFrom `getStatelessWalletsPositions` results, for each position:\n1. Aggregate `children` by symbol — a position may have multiple entries for the same token (e.g. supply + unclaimed rewards in QuickSwap or Uniswap V4), so sum the amounts\n2. Use `displayName` to identify the protocol and token composition\n\n```python\n# Example: aggregate children for a position\ndef aggregate_children(children):\n    agg = {}\n    for c in children:\n        sym = c['symbol']\n        amt = float(c['amount']) if isinstance(c['amount'], str) else c['amount']\n        if sym not in agg:\n            agg[sym] = {'amount': 0, 'assetIdentifier': c.get('assetIdentifier', '')}\n        agg[sym]['amount'] += amt\n    return agg\n```\n\n#### 7c. Process DeBank positions\n\nFrom `all_complex_protocol_list`, for each protocol's `portfolio_item_list`:\n1. Extract `asset_token_list` for supply tokens and `reward_token_list` for rewards\n2. Use protocol `name` and item `name` (e.g. \"Lending\", \"Liquidity Pool\") as the position label\n\n#### 7d. Compare position tokens\n\nMatch DeBank protocol positions to TRES positions by:\n1. Protocol name match (case-insensitive, first word)\n2. Token symbol overlap between children\n\nFor each matched position token:\n- **If TRES data exists:** Compare amounts, compute delta %, assign match\u002Fminor\u002Fmajor status\n- **If no TRES data:** Assign `position` status (purple badge)\n\n### Step 8 — Build and render the report\n\nCreate **two outputs**:\n1. **Interactive HTML file** — Dark-themed, with filter buttons, collapsible wallet cards, dedicated DeFi Positions section per wallet\n2. **PDF report** — Landscape A4, all wallet tables expanded, using reportlab\n\nSave both to the outputs directory.\n\n---\n\n## Report Layout — CRITICAL\n\n### DeFi Positions must be visually separated\n\nEach wallet card in the report MUST have **two distinct sections**:\n\n1. **DeFi Positions section** (top, purple-themed) — A dedicated box with purple border and dark purple background (`#1a1033` bg, `#7c3aed` border) showing all position-related rows. This section appears BEFORE the regular token table.\n\n2. **Regular tokens table** (below) — Standard token balance comparison rows.\n\n### Position asset indicator\n\nEvery position asset row MUST have a **purple dot indicator** (CSS circle, 8px, `#a855f7`) next to the asset name. This ensures positions are instantly recognizable:\n\n```html\n\u003Cspan style=\"display:inline-block;width:8px;height:8px;background:#a855f7;border-radius:50%;margin-right:6px;vertical-align:middle;\">\u003C\u002Fspan>\n```\n\n> **Do NOT use emojis or inline SVGs** — they may not render in all viewers. Use pure CSS shapes only.\n\n### Position rows show dual badges\n\nPosition rows that have a TRES match show TWO badges:\n- A `POSITION` badge (purple)\n- A match-status badge (`MATCH`\u002F`MINOR`\u002F`MAJOR`)\n\n### Auto-expand wallets with positions\n\nWallet cards that contain DeFi positions should be auto-expanded (`\u003Cdetails open>`) so positions are immediately visible.\n\n---\n\n## Number Formatting Rules\n\n### Token amounts\n- Max **3 decimal places** for all amounts\n- Amounts ≥ 1,000: use comma separator with 3 decimals (e.g., `846,492.356`)\n- Amounts \u003C 1,000: use 3 decimals (e.g., `0.386`)\n- Very small amounts (\u003C 0.000001): use scientific notation (e.g., `3.54e-07`)\n- Null\u002Fmissing: show em dash `—`\n\n```javascript\nfunction formatAmount(n) {\n  if (n === null || n === undefined) return '\\u2014';\n  if (Math.abs(n) \u003C 0.000001) return n.toExponential(2);\n  if (Math.abs(n) >= 1000) return n.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 3});\n  return n.toFixed(3);\n}\n```\n\n### Fiat values\n- Shown in **parentheses** next to every token amount: `846,492.356 ($17,562.21)`\n- Shown in **parentheses** next to every delta %: `5.33% ($81.21)`\n- Format: `($X,XXX.XX)` — always 2 decimal places, comma-separated thousands\n- Null\u002Fmissing: omit entirely (no empty parentheses)\n\n### Fiat value computation — CRITICAL\n\n**Use a single price source** (DeBank's token price) to compute fiat values for **both** the TRES and DeBank columns. This ensures:\n- When amounts match, the fiat delta is $0 (not inflated by pricing source differences)\n- The fiat delta next to delta % represents the actual USD value of the amount discrepancy\n\n```python\n# For regular tokens:\nprice = debank_token['price']  # single source\ntres_fiat = tres_amount * price\ndebank_fiat = debank_amount * price\ndelta_fiat = abs(tres_amount - debank_amount) * price\n\n# For position tokens — same principle:\nprice = debank_asset_token['price']\ntres_fiat = tres_aggregated_amount * price\ndebank_fiat = debank_amount * price\ndelta_fiat = abs(tres_aggregated_amount - debank_amount) * price\n```\n\n**Do NOT** use TRES `fiatValue` for the TRES column and DeBank price for the DeBank column — this creates misleading fiat deltas when TRES and DeBank use different token prices.\n\n---\n\n## Native Token Matching (Multi-Chain Wallets)\n\nNative tokens (ETH, BNB, etc.) often appear on multiple chains in TRES for a single\nwallet (e.g., ETH on Ethereum + ETH on Arbitrum). DeBank's `all_token_list` returns\n**separate per-chain entries** with a `chain` field — it does NOT aggregate them.\n\n**Rule: match per-chain first, aggregate only as a last resort.**\n\n1. **Per-chain match (default):** For each TRES native token balance, use the balance's\n   platform context to find the corresponding DeBank entry by symbol + chain. For example,\n   a wallet with 0.00956 ETH on Ethereum and 0.001168 ETH on Arbitrum should produce two\n   separate comparison rows — one matched to DeBank's `chain: \"eth\"` entry and one to\n   `chain: \"arb\"`.\n\n2. **Aggregation fallback (rare):** Only aggregate TRES balances across chains when\n   DeBank returns fewer entries than TRES for the same symbol. This can happen if DeBank\n   merges certain bridged token balances. When aggregating, add a note like\n   `\"Aggregated: ETH (eth) + ETH (arb)\"`.\n\n**Why this matters:** Blindly aggregating before comparing creates false discrepancies.\nIf Ethereum ETH matches perfectly but Arbitrum ETH has a gap, aggregation masks the\nEthereum match and produces a single misleading delta. Per-chain matching preserves\ngranularity and makes it easy to identify exactly which chain is out of sync.\n\n---\n\n## Status Badges\n\n| Badge | Color | Hex | Meaning |\n|---|---|---|---|\n| **Match** | Green | `#22c55e` | Delta \u003C 1% |\n| **Minor** | Orange | `#f59e0b` | Delta 1–10% |\n| **Major** | Red | `#ef4444` | Delta > 10% |\n| **Missing** | Grey | `#6b7280` | Asset in TRES but not found in DeBank |\n| **Untracked** | Blue | `#3b82f6` | Asset in DeBank but not tracked in TRES |\n| **Position** | Purple | `#a855f7` | DeFi position token (with or without TRES data) |\n\n---\n\n## Report Sections\n\nThe rendered report (both HTML and PDF) includes:\n\n1. **Summary cards** — Wallets checked, assets compared, matched, minor, major, missing, untracked, positions, and match rate %\n2. **Filter bar** (HTML only) — Buttons to filter by status: All, Match, Minor, Major, Missing, Untracked, Position\n3. **Per-wallet card** containing:\n   - **DeFi Positions box** (purple-themed, at top) — Position assets with purple dot indicator, protocol label, dual status badges\n   - **Regular tokens table** — Each asset with symbol, chain, TRES amount (+ fiat), DeBank amount (+ fiat), delta % (+ fiat delta), status badge\n4. **Skipped wallets** — List of wallets not validated and the reason why\n5. **Notes & Caveats** — Sync lag, DeFi positions explanation, native token aggregation, price filter, missing\u002Funtracked explanations\n\n---\n\n## Important Caveats\n\n- **Sync lag:** TRES balances reflect the last sync time. Recent on-chain activity may show as a discrepancy.\n- **DeFi positions:** Underlying tokens from LP, staking, and lending positions are shown as individual rows in a dedicated purple section. Both TRES and DeBank amounts are compared where TRES position data is available. Active LP positions will naturally show some discrepancy because TRES and DeBank snapshot at different times.\n- **Native token matching:** ETH, BNB, etc. are matched per-chain first (using DeBank's `chain` field mapped to TRES platforms). Multi-chain balances are only aggregated as a fallback when DeBank returns fewer entries than TRES for the same symbol.\n- **Multi-chain coverage:** DeBank `all_token_list` covers all chains; tokens on chains not configured in TRES appear as \"Untracked.\"\n- **Price filter:** Tokens with `price \u003C $0.01` (zero-price, null, or micro-cap) are excluded from all reports.\n- **Missing in DeBank:** Typically spam\u002Fairdrop tokens (HEX, ASCZBR, etc.) that DeBank filters out.\n- **Untracked in TRES:** Tokens on chains not configured in TRES, or small dust amounts.\n\n---\n\n## Error Handling\n\n| Situation | Response |\n|---|---|\n| DeBank `401` error | Display \"Invalid API key\" in artifact |\n| DeBank `429` error | Display \"Rate limited — reload in 60s\" |\n| Empty token list for non-empty wallet | Flag wallet as suspicious |\n| Non-EVM wallet | Skip and list in \"Skipped wallets\" section |\n| `internalAccount` positions timeout | Use `getStatelessWalletsPositions` per wallet\u002Fplatform\u002Fapplication instead |\n| `getStatelessWalletsPositions` returns empty | Ensure `application` parameter is provided; without it the query returns empty |\n| Position ID not extractable | Skip that position (don't crash) |\n| `amount` field is string not number | Always cast with `float()` before arithmetic |\n\n---\n\n## Next Steps (after report renders)\n\n- **Re-run** — Rebuild the report with fresh data at any time\n- **Drill down** — For any Major discrepancy, inspect the specific asset across platforms in TRES to identify which chain is out of sync\n- **Position discrepancies** — Minor discrepancies on active LP positions are expected due to different snapshot times between TRES and DeBank\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,51,58,79,93,97,103,108,133,141,177,180,186,277,280,286,293,305,311,345,353,537,572,580,692,702,708,730,750,914,922,970,978,1077,1094,1102,1129,1210,1215,1221,1241,1256,1262,1274,1317,1338,1596,1614,1624,1630,1687,1704,1966,1974,2037,2043,2048,2055,2103,2109,2121,2149,2238,2244,2263,2307,2313,2318,2331,2336,2367,2373,2384,2407,2412,2415,2421,2427,2438,2477,2483,2503,2563,2576,2582,2587,2630,2636,2649,2652,2658,2664,2726,3114,3120,3175,3181,3198,3211,3304,3322,3325,3331,3357,3365,3410,3420,3423,3429,3640,3643,3649,3654,3729,3732,3738,3833,3836,3842,4016,4019,4025,4058],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"tres-finance-asset-balance-validation",[48],{"type":49,"value":50},"text","Tres Finance — Asset Balance Validation",{"type":43,"tag":52,"props":53,"children":55},"h2",{"id":54},"overview",[56],{"type":49,"value":57},"Overview",{"type":43,"tag":59,"props":60,"children":61},"p",{},[62,64,70,72,77],{"type":49,"value":63},"This skill validates wallet balances in ",{"type":43,"tag":65,"props":66,"children":67},"strong",{},[68],{"type":49,"value":69},"Tres Finance",{"type":49,"value":71}," against ",{"type":43,"tag":65,"props":73,"children":74},{},[75],{"type":49,"value":76},"DeBank",{"type":49,"value":78},", providing a clear discrepancy report as both an interactive HTML file and a PDF. It compares per-asset token amounts (including DeFi position underlying tokens) for each EVM wallet and flags matches, minor differences, major discrepancies, missing assets, untracked tokens, and unmatched positions.",{"type":43,"tag":80,"props":81,"children":82},"blockquote",{},[83],{"type":43,"tag":59,"props":84,"children":85},{},[86,91],{"type":43,"tag":65,"props":87,"children":88},{},[89],{"type":49,"value":90},"Scope:",{"type":49,"value":92}," Only EVM-compatible wallets are supported (DeBank limitation). Exchange accounts, non-EVM chains, and empty wallets are skipped.",{"type":43,"tag":94,"props":95,"children":96},"hr",{},[],{"type":43,"tag":52,"props":98,"children":100},{"id":99},"when-to-use",[101],{"type":49,"value":102},"When to Use",{"type":43,"tag":59,"props":104,"children":105},{},[106],{"type":49,"value":107},"Trigger this skill whenever a user asks to:",{"type":43,"tag":109,"props":110,"children":111},"ul",{},[112,118,123,128],{"type":43,"tag":113,"props":114,"children":115},"li",{},[116],{"type":49,"value":117},"Validate or verify their TRES balances",{"type":43,"tag":113,"props":119,"children":120},{},[121],{"type":49,"value":122},"Cross-check or audit wallets against external on-chain data",{"type":43,"tag":113,"props":124,"children":125},{},[126],{"type":49,"value":127},"Compare TRES data to DeBank",{"type":43,"tag":113,"props":129,"children":130},{},[131],{"type":49,"value":132},"Check if their balances are correct",{"type":43,"tag":59,"props":134,"children":135},{},[136],{"type":43,"tag":65,"props":137,"children":138},{},[139],{"type":49,"value":140},"Example phrases:",{"type":43,"tag":109,"props":142,"children":143},{},[144,153,161,169],{"type":43,"tag":113,"props":145,"children":146},{},[147],{"type":43,"tag":148,"props":149,"children":150},"em",{},[151],{"type":49,"value":152},"\"Validate my balances\"",{"type":43,"tag":113,"props":154,"children":155},{},[156],{"type":43,"tag":148,"props":157,"children":158},{},[159],{"type":49,"value":160},"\"Check my wallets against DeBank\"",{"type":43,"tag":113,"props":162,"children":163},{},[164],{"type":43,"tag":148,"props":165,"children":166},{},[167],{"type":49,"value":168},"\"Are my TRES balances correct?\"",{"type":43,"tag":113,"props":170,"children":171},{},[172],{"type":43,"tag":148,"props":173,"children":174},{},[175],{"type":49,"value":176},"\"Show me any discrepancies between TRES and on-chain data\"",{"type":43,"tag":94,"props":178,"children":179},{},[],{"type":43,"tag":52,"props":181,"children":183},{"id":182},"prerequisites",[184],{"type":49,"value":185},"Prerequisites",{"type":43,"tag":187,"props":188,"children":189},"table",{},[190,209],{"type":43,"tag":191,"props":192,"children":193},"thead",{},[194],{"type":43,"tag":195,"props":196,"children":197},"tr",{},[198,204],{"type":43,"tag":199,"props":200,"children":201},"th",{},[202],{"type":49,"value":203},"Requirement",{"type":43,"tag":199,"props":205,"children":206},{},[207],{"type":49,"value":208},"Details",{"type":43,"tag":210,"props":211,"children":212},"tbody",{},[213,234,256],{"type":43,"tag":195,"props":214,"children":215},{},[216,222],{"type":43,"tag":217,"props":218,"children":219},"td",{},[220],{"type":49,"value":221},"TRES Finance access",{"type":43,"tag":217,"props":223,"children":224},{},[225,227],{"type":49,"value":226},"Must be authenticated via ",{"type":43,"tag":228,"props":229,"children":231},"code",{"className":230},[],[232],{"type":49,"value":233},"get_viewer",{"type":43,"tag":195,"props":235,"children":236},{},[237,242],{"type":43,"tag":217,"props":238,"children":239},{},[240],{"type":49,"value":241},"DeBank API key",{"type":43,"tag":217,"props":243,"children":244},{},[245,247],{"type":49,"value":246},"Free key available at ",{"type":43,"tag":248,"props":249,"children":253},"a",{"href":250,"rel":251},"https:\u002F\u002Fcloud.debank.com",[252],"nofollow",[254],{"type":49,"value":255},"cloud.debank.com",{"type":43,"tag":195,"props":257,"children":258},{},[259,264],{"type":43,"tag":217,"props":260,"children":261},{},[262],{"type":49,"value":263},"EVM wallets",{"type":43,"tag":217,"props":265,"children":266},{},[267,269,275],{"type":49,"value":268},"At least one ",{"type":43,"tag":228,"props":270,"children":272},{"className":271},[],[273],{"type":49,"value":274},"0x...",{"type":49,"value":276}," wallet tracked in TRES",{"type":43,"tag":94,"props":278,"children":279},{},[],{"type":43,"tag":52,"props":281,"children":283},{"id":282},"process-overview",[284],{"type":49,"value":285},"Process Overview",{"type":43,"tag":287,"props":288,"children":290},"h3",{"id":289},"step-1-authenticate-with-tres",[291],{"type":49,"value":292},"Step 1 — Authenticate with TRES",{"type":43,"tag":59,"props":294,"children":295},{},[296,298,303],{"type":49,"value":297},"Call ",{"type":43,"tag":228,"props":299,"children":301},{"className":300},[],[302],{"type":49,"value":233},{"type":49,"value":304}," to confirm the organization name.",{"type":43,"tag":287,"props":306,"children":308},{"id":307},"step-2-fetch-wallets-and-balances-from-tres",[309],{"type":49,"value":310},"Step 2 — Fetch wallets and balances from TRES",{"type":43,"tag":59,"props":312,"children":313},{},[314,319,321,327,329,335,337,343],{"type":43,"tag":65,"props":315,"children":316},{},[317],{"type":49,"value":318},"IMPORTANT — Timeout handling:",{"type":49,"value":320}," The ",{"type":43,"tag":228,"props":322,"children":324},{"className":323},[],[325],{"type":49,"value":326},"internalAccount",{"type":49,"value":328}," query with both ",{"type":43,"tag":228,"props":330,"children":332},{"className":331},[],[333],{"type":49,"value":334},"balances",{"type":49,"value":336}," and ",{"type":43,"tag":228,"props":338,"children":340},{"className":339},[],[341],{"type":49,"value":342},"positions",{"type":49,"value":344}," will timeout for large orgs. Split into two separate queries:",{"type":43,"tag":59,"props":346,"children":347},{},[348],{"type":43,"tag":65,"props":349,"children":350},{},[351],{"type":49,"value":352},"Query 1: Wallets + Balances only (no positions)",{"type":43,"tag":354,"props":355,"children":360},"pre",{"className":356,"code":357,"language":358,"meta":359,"style":359},"language-graphql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","query {\n  internalAccount {\n    results {\n      id\n      name\n      identifier\n      isExchange\n      platforms\n      balances {\n        amount\n        asset {\n          symbol\n          contract { identifier }\n        }\n        fiatValue { value unitPrice fiatCurrency }\n      }\n    }\n  }\n}\n","graphql","",[361],{"type":43,"tag":228,"props":362,"children":363},{"__ignoreMap":359},[364,375,384,393,402,411,420,429,438,447,456,465,474,483,492,501,510,519,528],{"type":43,"tag":365,"props":366,"children":369},"span",{"class":367,"line":368},"line",1,[370],{"type":43,"tag":365,"props":371,"children":372},{},[373],{"type":49,"value":374},"query {\n",{"type":43,"tag":365,"props":376,"children":378},{"class":367,"line":377},2,[379],{"type":43,"tag":365,"props":380,"children":381},{},[382],{"type":49,"value":383},"  internalAccount {\n",{"type":43,"tag":365,"props":385,"children":387},{"class":367,"line":386},3,[388],{"type":43,"tag":365,"props":389,"children":390},{},[391],{"type":49,"value":392},"    results {\n",{"type":43,"tag":365,"props":394,"children":396},{"class":367,"line":395},4,[397],{"type":43,"tag":365,"props":398,"children":399},{},[400],{"type":49,"value":401},"      id\n",{"type":43,"tag":365,"props":403,"children":405},{"class":367,"line":404},5,[406],{"type":43,"tag":365,"props":407,"children":408},{},[409],{"type":49,"value":410},"      name\n",{"type":43,"tag":365,"props":412,"children":414},{"class":367,"line":413},6,[415],{"type":43,"tag":365,"props":416,"children":417},{},[418],{"type":49,"value":419},"      identifier\n",{"type":43,"tag":365,"props":421,"children":423},{"class":367,"line":422},7,[424],{"type":43,"tag":365,"props":425,"children":426},{},[427],{"type":49,"value":428},"      isExchange\n",{"type":43,"tag":365,"props":430,"children":432},{"class":367,"line":431},8,[433],{"type":43,"tag":365,"props":434,"children":435},{},[436],{"type":49,"value":437},"      platforms\n",{"type":43,"tag":365,"props":439,"children":441},{"class":367,"line":440},9,[442],{"type":43,"tag":365,"props":443,"children":444},{},[445],{"type":49,"value":446},"      balances {\n",{"type":43,"tag":365,"props":448,"children":450},{"class":367,"line":449},10,[451],{"type":43,"tag":365,"props":452,"children":453},{},[454],{"type":49,"value":455},"        amount\n",{"type":43,"tag":365,"props":457,"children":459},{"class":367,"line":458},11,[460],{"type":43,"tag":365,"props":461,"children":462},{},[463],{"type":49,"value":464},"        asset {\n",{"type":43,"tag":365,"props":466,"children":468},{"class":367,"line":467},12,[469],{"type":43,"tag":365,"props":470,"children":471},{},[472],{"type":49,"value":473},"          symbol\n",{"type":43,"tag":365,"props":475,"children":477},{"class":367,"line":476},13,[478],{"type":43,"tag":365,"props":479,"children":480},{},[481],{"type":49,"value":482},"          contract { identifier }\n",{"type":43,"tag":365,"props":484,"children":486},{"class":367,"line":485},14,[487],{"type":43,"tag":365,"props":488,"children":489},{},[490],{"type":49,"value":491},"        }\n",{"type":43,"tag":365,"props":493,"children":495},{"class":367,"line":494},15,[496],{"type":43,"tag":365,"props":497,"children":498},{},[499],{"type":49,"value":500},"        fiatValue { value unitPrice fiatCurrency }\n",{"type":43,"tag":365,"props":502,"children":504},{"class":367,"line":503},16,[505],{"type":43,"tag":365,"props":506,"children":507},{},[508],{"type":49,"value":509},"      }\n",{"type":43,"tag":365,"props":511,"children":513},{"class":367,"line":512},17,[514],{"type":43,"tag":365,"props":515,"children":516},{},[517],{"type":49,"value":518},"    }\n",{"type":43,"tag":365,"props":520,"children":522},{"class":367,"line":521},18,[523],{"type":43,"tag":365,"props":524,"children":525},{},[526],{"type":49,"value":527},"  }\n",{"type":43,"tag":365,"props":529,"children":531},{"class":367,"line":530},19,[532],{"type":43,"tag":365,"props":533,"children":534},{},[535],{"type":49,"value":536},"}\n",{"type":43,"tag":80,"props":538,"children":539},{},[540],{"type":43,"tag":59,"props":541,"children":542},{},[543,548,549,555,557,562,564,570],{"type":43,"tag":65,"props":544,"children":545},{},[546],{"type":49,"value":547},"Note:",{"type":49,"value":320},{"type":43,"tag":228,"props":550,"children":552},{"className":551},[],[553],{"type":49,"value":554},"amount",{"type":49,"value":556}," field is returned as a ",{"type":43,"tag":65,"props":558,"children":559},{},[560],{"type":49,"value":561},"string",{"type":49,"value":563},", not a number. Always ",{"type":43,"tag":228,"props":565,"children":567},{"className":566},[],[568],{"type":49,"value":569},"float()",{"type":49,"value":571}," it before arithmetic.",{"type":43,"tag":59,"props":573,"children":574},{},[575],{"type":43,"tag":65,"props":576,"children":577},{},[578],{"type":49,"value":579},"Wallet classification:",{"type":43,"tag":187,"props":581,"children":582},{},[583,604],{"type":43,"tag":191,"props":584,"children":585},{},[586],{"type":43,"tag":195,"props":587,"children":588},{},[589,594,599],{"type":43,"tag":199,"props":590,"children":591},{},[592],{"type":49,"value":593},"Type",{"type":43,"tag":199,"props":595,"children":596},{},[597],{"type":49,"value":598},"Condition",{"type":43,"tag":199,"props":600,"children":601},{},[602],{"type":49,"value":603},"Validated?",{"type":43,"tag":210,"props":605,"children":606},{},[607,636,658,675],{"type":43,"tag":195,"props":608,"children":609},{},[610,615,631],{"type":43,"tag":217,"props":611,"children":612},{},[613],{"type":49,"value":614},"EVM",{"type":43,"tag":217,"props":616,"children":617},{},[618,623,625],{"type":43,"tag":228,"props":619,"children":621},{"className":620},[],[622],{"type":49,"value":274},{"type":49,"value":624}," address + EVM platform + ",{"type":43,"tag":228,"props":626,"children":628},{"className":627},[],[629],{"type":49,"value":630},"isExchange: false",{"type":43,"tag":217,"props":632,"children":633},{},[634],{"type":49,"value":635},"✅ Yes",{"type":43,"tag":195,"props":637,"children":638},{},[639,644,653],{"type":43,"tag":217,"props":640,"children":641},{},[642],{"type":49,"value":643},"Exchange",{"type":43,"tag":217,"props":645,"children":646},{},[647],{"type":43,"tag":228,"props":648,"children":650},{"className":649},[],[651],{"type":49,"value":652},"isExchange: true",{"type":43,"tag":217,"props":654,"children":655},{},[656],{"type":49,"value":657},"❌ No",{"type":43,"tag":195,"props":659,"children":660},{},[661,666,671],{"type":43,"tag":217,"props":662,"children":663},{},[664],{"type":49,"value":665},"Non-EVM",{"type":43,"tag":217,"props":667,"children":668},{},[669],{"type":49,"value":670},"Bitcoin, Tezos, Tron, etc.",{"type":43,"tag":217,"props":672,"children":673},{},[674],{"type":49,"value":657},{"type":43,"tag":195,"props":676,"children":677},{},[678,683,688],{"type":43,"tag":217,"props":679,"children":680},{},[681],{"type":49,"value":682},"Empty",{"type":43,"tag":217,"props":684,"children":685},{},[686],{"type":49,"value":687},"No asset balances",{"type":43,"tag":217,"props":689,"children":690},{},[691],{"type":49,"value":657},{"type":43,"tag":59,"props":693,"children":694},{},[695,700],{"type":43,"tag":65,"props":696,"children":697},{},[698],{"type":49,"value":699},"Supported EVM platforms:",{"type":49,"value":701}," Ethereum, Arbitrum, Optimism, Polygon, Base, Avalanche, Binance, Gnosis Chain, zkSync, Fantom, Celo, Berachain, Linea, Scroll, Sonic, HyperEVM.",{"type":43,"tag":287,"props":703,"children":705},{"id":704},"step-3-fetch-defi-positions-from-tres",[706],{"type":49,"value":707},"Step 3 — Fetch DeFi positions from TRES",{"type":43,"tag":59,"props":709,"children":710},{},[711,728],{"type":43,"tag":65,"props":712,"children":713},{},[714,716,721,723],{"type":49,"value":715},"Do NOT use the ",{"type":43,"tag":228,"props":717,"children":719},{"className":718},[],[720],{"type":49,"value":342},{"type":49,"value":722}," sub-field on ",{"type":43,"tag":228,"props":724,"children":726},{"className":725},[],[727],{"type":49,"value":326},{"type":49,"value":729}," — it returns all historical snapshots (can be 3000+ entries per wallet) and will timeout or exceed token limits.",{"type":43,"tag":59,"props":731,"children":732},{},[733,735,741,743,748],{"type":49,"value":734},"Instead, use the dedicated ",{"type":43,"tag":228,"props":736,"children":738},{"className":737},[],[739],{"type":49,"value":740},"getStatelessWalletsPositions",{"type":49,"value":742}," query which returns ",{"type":43,"tag":65,"props":744,"children":745},{},[746],{"type":49,"value":747},"current",{"type":49,"value":749}," positions only:",{"type":43,"tag":354,"props":751,"children":753},{"className":356,"code":752,"language":358,"meta":359,"style":359},"query {\n  getStatelessWalletsPositions(\n    walletIdentifiers: [\"0x...\"],\n    platform: ETHEREUM,\n    application: \"aave-v3\"\n  ) {\n    walletIdentifier\n    displayName\n    positionType\n    platform\n    children {\n      symbol\n      amount\n      assetIdentifier\n      fiatValue\n    }\n    fiatValue\n    id\n  }\n}\n",[754],{"type":43,"tag":228,"props":755,"children":756},{"__ignoreMap":359},[757,764,772,780,788,796,804,812,820,828,836,844,852,860,868,876,883,891,899,906],{"type":43,"tag":365,"props":758,"children":759},{"class":367,"line":368},[760],{"type":43,"tag":365,"props":761,"children":762},{},[763],{"type":49,"value":374},{"type":43,"tag":365,"props":765,"children":766},{"class":367,"line":377},[767],{"type":43,"tag":365,"props":768,"children":769},{},[770],{"type":49,"value":771},"  getStatelessWalletsPositions(\n",{"type":43,"tag":365,"props":773,"children":774},{"class":367,"line":386},[775],{"type":43,"tag":365,"props":776,"children":777},{},[778],{"type":49,"value":779},"    walletIdentifiers: [\"0x...\"],\n",{"type":43,"tag":365,"props":781,"children":782},{"class":367,"line":395},[783],{"type":43,"tag":365,"props":784,"children":785},{},[786],{"type":49,"value":787},"    platform: ETHEREUM,\n",{"type":43,"tag":365,"props":789,"children":790},{"class":367,"line":404},[791],{"type":43,"tag":365,"props":792,"children":793},{},[794],{"type":49,"value":795},"    application: \"aave-v3\"\n",{"type":43,"tag":365,"props":797,"children":798},{"class":367,"line":413},[799],{"type":43,"tag":365,"props":800,"children":801},{},[802],{"type":49,"value":803},"  ) {\n",{"type":43,"tag":365,"props":805,"children":806},{"class":367,"line":422},[807],{"type":43,"tag":365,"props":808,"children":809},{},[810],{"type":49,"value":811},"    walletIdentifier\n",{"type":43,"tag":365,"props":813,"children":814},{"class":367,"line":431},[815],{"type":43,"tag":365,"props":816,"children":817},{},[818],{"type":49,"value":819},"    displayName\n",{"type":43,"tag":365,"props":821,"children":822},{"class":367,"line":440},[823],{"type":43,"tag":365,"props":824,"children":825},{},[826],{"type":49,"value":827},"    positionType\n",{"type":43,"tag":365,"props":829,"children":830},{"class":367,"line":449},[831],{"type":43,"tag":365,"props":832,"children":833},{},[834],{"type":49,"value":835},"    platform\n",{"type":43,"tag":365,"props":837,"children":838},{"class":367,"line":458},[839],{"type":43,"tag":365,"props":840,"children":841},{},[842],{"type":49,"value":843},"    children {\n",{"type":43,"tag":365,"props":845,"children":846},{"class":367,"line":467},[847],{"type":43,"tag":365,"props":848,"children":849},{},[850],{"type":49,"value":851},"      symbol\n",{"type":43,"tag":365,"props":853,"children":854},{"class":367,"line":476},[855],{"type":43,"tag":365,"props":856,"children":857},{},[858],{"type":49,"value":859},"      amount\n",{"type":43,"tag":365,"props":861,"children":862},{"class":367,"line":485},[863],{"type":43,"tag":365,"props":864,"children":865},{},[866],{"type":49,"value":867},"      assetIdentifier\n",{"type":43,"tag":365,"props":869,"children":870},{"class":367,"line":494},[871],{"type":43,"tag":365,"props":872,"children":873},{},[874],{"type":49,"value":875},"      fiatValue\n",{"type":43,"tag":365,"props":877,"children":878},{"class":367,"line":503},[879],{"type":43,"tag":365,"props":880,"children":881},{},[882],{"type":49,"value":518},{"type":43,"tag":365,"props":884,"children":885},{"class":367,"line":512},[886],{"type":43,"tag":365,"props":887,"children":888},{},[889],{"type":49,"value":890},"    fiatValue\n",{"type":43,"tag":365,"props":892,"children":893},{"class":367,"line":521},[894],{"type":43,"tag":365,"props":895,"children":896},{},[897],{"type":49,"value":898},"    id\n",{"type":43,"tag":365,"props":900,"children":901},{"class":367,"line":530},[902],{"type":43,"tag":365,"props":903,"children":904},{},[905],{"type":49,"value":527},{"type":43,"tag":365,"props":907,"children":909},{"class":367,"line":908},20,[910],{"type":43,"tag":365,"props":911,"children":912},{},[913],{"type":49,"value":536},{"type":43,"tag":59,"props":915,"children":916},{},[917],{"type":43,"tag":65,"props":918,"children":919},{},[920],{"type":49,"value":921},"Required parameters:",{"type":43,"tag":109,"props":923,"children":924},{},[925,936],{"type":43,"tag":113,"props":926,"children":927},{},[928,934],{"type":43,"tag":228,"props":929,"children":931},{"className":930},[],[932],{"type":49,"value":933},"walletIdentifiers",{"type":49,"value":935},": array of wallet addresses",{"type":43,"tag":113,"props":937,"children":938},{},[939,945,947,953,955,961,962,968],{"type":43,"tag":228,"props":940,"children":942},{"className":941},[],[943],{"type":49,"value":944},"platform",{"type":49,"value":946},": must be an enum value like ",{"type":43,"tag":228,"props":948,"children":950},{"className":949},[],[951],{"type":49,"value":952},"ETHEREUM",{"type":49,"value":954},", ",{"type":43,"tag":228,"props":956,"children":958},{"className":957},[],[959],{"type":49,"value":960},"POLYGON",{"type":49,"value":954},{"type":43,"tag":228,"props":963,"children":965},{"className":964},[],[966],{"type":49,"value":967},"ARBITRUM",{"type":49,"value":969},", etc.",{"type":43,"tag":59,"props":971,"children":972},{},[973],{"type":43,"tag":65,"props":974,"children":975},{},[976],{"type":49,"value":977},"Optional but recommended:",{"type":43,"tag":109,"props":979,"children":980},{},[981],{"type":43,"tag":113,"props":982,"children":983},{},[984,990,992,998,999,1005,1006,1012,1013,1019,1020,1026,1027,1033,1034,1040,1041,1047,1048,1054,1055,1061,1062,1068,1069,1075],{"type":43,"tag":228,"props":985,"children":987},{"className":986},[],[988],{"type":49,"value":989},"application",{"type":49,"value":991},": filter by protocol (e.g. ",{"type":43,"tag":228,"props":993,"children":995},{"className":994},[],[996],{"type":49,"value":997},"\"aave-v3\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1000,"children":1002},{"className":1001},[],[1003],{"type":49,"value":1004},"\"verse\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1007,"children":1009},{"className":1008},[],[1010],{"type":49,"value":1011},"\"lido\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":49,"value":1018},"\"merkl\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":49,"value":1025},"\"uniswap-v4\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":49,"value":1032},"\"sablier\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":49,"value":1039},"\"ethena\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":49,"value":1046},"\"stakewise\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":49,"value":1053},"\"quickswap\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":49,"value":1060},"\"steer\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":49,"value":1067},"\"yieldnest\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":49,"value":1074},"\"morphoblue\"",{"type":49,"value":1076},")",{"type":43,"tag":59,"props":1078,"children":1079},{},[1080,1085,1087,1092],{"type":43,"tag":65,"props":1081,"children":1082},{},[1083],{"type":49,"value":1084},"IMPORTANT:",{"type":49,"value":1086}," Without the ",{"type":43,"tag":228,"props":1088,"children":1090},{"className":1089},[],[1091],{"type":49,"value":989},{"type":49,"value":1093}," filter, the query returns empty results. Always specify the application.",{"type":43,"tag":59,"props":1095,"children":1096},{},[1097],{"type":43,"tag":65,"props":1098,"children":1099},{},[1100],{"type":49,"value":1101},"Batching strategy:",{"type":43,"tag":1103,"props":1104,"children":1105},"ol",{},[1106,1119,1124],{"type":43,"tag":113,"props":1107,"children":1108},{},[1109,1111,1117],{"type":49,"value":1110},"First, fetch DeBank ",{"type":43,"tag":228,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":49,"value":1116},"all_complex_protocol_list",{"type":49,"value":1118}," for each wallet to discover which protocols have positions",{"type":43,"tag":113,"props":1120,"children":1121},{},[1122],{"type":49,"value":1123},"Map DeBank protocol names to TRES application names (lowercase, hyphenated)",{"type":43,"tag":113,"props":1125,"children":1126},{},[1127],{"type":49,"value":1128},"Use GraphQL aliases to batch multiple wallet+platform+application combos into a single query:",{"type":43,"tag":354,"props":1130,"children":1132},{"className":356,"code":1131,"language":358,"meta":359,"style":359},"query {\n  a1: getStatelessWalletsPositions(walletIdentifiers: [\"0x...\"], platform: ETHEREUM, application: \"aave-v3\") {\n    walletIdentifier displayName positionType platform id\n    children { symbol amount assetIdentifier fiatValue }\n  }\n  a2: getStatelessWalletsPositions(walletIdentifiers: [\"0x...\"], platform: ETHEREUM, application: \"verse\") {\n    walletIdentifier displayName positionType platform id\n    children { symbol amount assetIdentifier fiatValue }\n  }\n}\n",[1133],{"type":43,"tag":228,"props":1134,"children":1135},{"__ignoreMap":359},[1136,1143,1151,1159,1167,1174,1182,1189,1196,1203],{"type":43,"tag":365,"props":1137,"children":1138},{"class":367,"line":368},[1139],{"type":43,"tag":365,"props":1140,"children":1141},{},[1142],{"type":49,"value":374},{"type":43,"tag":365,"props":1144,"children":1145},{"class":367,"line":377},[1146],{"type":43,"tag":365,"props":1147,"children":1148},{},[1149],{"type":49,"value":1150},"  a1: getStatelessWalletsPositions(walletIdentifiers: [\"0x...\"], platform: ETHEREUM, application: \"aave-v3\") {\n",{"type":43,"tag":365,"props":1152,"children":1153},{"class":367,"line":386},[1154],{"type":43,"tag":365,"props":1155,"children":1156},{},[1157],{"type":49,"value":1158},"    walletIdentifier displayName positionType platform id\n",{"type":43,"tag":365,"props":1160,"children":1161},{"class":367,"line":395},[1162],{"type":43,"tag":365,"props":1163,"children":1164},{},[1165],{"type":49,"value":1166},"    children { symbol amount assetIdentifier fiatValue }\n",{"type":43,"tag":365,"props":1168,"children":1169},{"class":367,"line":404},[1170],{"type":43,"tag":365,"props":1171,"children":1172},{},[1173],{"type":49,"value":527},{"type":43,"tag":365,"props":1175,"children":1176},{"class":367,"line":413},[1177],{"type":43,"tag":365,"props":1178,"children":1179},{},[1180],{"type":49,"value":1181},"  a2: getStatelessWalletsPositions(walletIdentifiers: [\"0x...\"], platform: ETHEREUM, application: \"verse\") {\n",{"type":43,"tag":365,"props":1183,"children":1184},{"class":367,"line":422},[1185],{"type":43,"tag":365,"props":1186,"children":1187},{},[1188],{"type":49,"value":1158},{"type":43,"tag":365,"props":1190,"children":1191},{"class":367,"line":431},[1192],{"type":43,"tag":365,"props":1193,"children":1194},{},[1195],{"type":49,"value":1166},{"type":43,"tag":365,"props":1197,"children":1198},{"class":367,"line":440},[1199],{"type":43,"tag":365,"props":1200,"children":1201},{},[1202],{"type":49,"value":527},{"type":43,"tag":365,"props":1204,"children":1205},{"class":367,"line":449},[1206],{"type":43,"tag":365,"props":1207,"children":1208},{},[1209],{"type":49,"value":536},{"type":43,"tag":59,"props":1211,"children":1212},{},[1213],{"type":49,"value":1214},"Keep each batched query to ~6 aliases max to avoid timeouts.",{"type":43,"tag":287,"props":1216,"children":1218},{"id":1217},"step-4-retrieve-debank-api-key",[1219],{"type":49,"value":1220},"Step 4 — Retrieve DeBank API key",{"type":43,"tag":59,"props":1222,"children":1223},{},[1224,1226,1232,1234,1239],{"type":49,"value":1225},"Read ",{"type":43,"tag":228,"props":1227,"children":1229},{"className":1228},[],[1230],{"type":49,"value":1231},"DEBANK_API_KEY",{"type":49,"value":1233}," from plugin user config — do ",{"type":43,"tag":65,"props":1235,"children":1236},{},[1237],{"type":49,"value":1238},"not",{"type":49,"value":1240}," ask the user to paste it in chat.\nIf the key is absent or empty, stop and display:",{"type":43,"tag":80,"props":1242,"children":1243},{},[1244],{"type":43,"tag":59,"props":1245,"children":1246},{},[1247,1249,1254],{"type":49,"value":1248},"\"DEBANK_API_KEY is not configured. Please add it via the plugin settings (obtain your key at ",{"type":43,"tag":248,"props":1250,"children":1252},{"href":250,"rel":1251},[252],[1253],{"type":49,"value":250},{"type":49,"value":1255},").\"",{"type":43,"tag":287,"props":1257,"children":1259},{"id":1258},"step-5-fetch-debank-data-via-bash",[1260],{"type":49,"value":1261},"Step 5 — Fetch DeBank data via bash",{"type":43,"tag":59,"props":1263,"children":1264},{},[1265,1267,1272],{"type":49,"value":1266},"For each EVM wallet, fetch ",{"type":43,"tag":65,"props":1268,"children":1269},{},[1270],{"type":49,"value":1271},"two",{"type":49,"value":1273}," endpoints:",{"type":43,"tag":1103,"props":1275,"children":1276},{},[1277,1301],{"type":43,"tag":113,"props":1278,"children":1279},{},[1280,1285,1287,1293,1295],{"type":43,"tag":65,"props":1281,"children":1282},{},[1283],{"type":49,"value":1284},"Token balances:",{"type":49,"value":1286}," ",{"type":43,"tag":228,"props":1288,"children":1290},{"className":1289},[],[1291],{"type":49,"value":1292},"all_token_list",{"type":49,"value":1294}," — covers all chains without requiring a ",{"type":43,"tag":228,"props":1296,"children":1298},{"className":1297},[],[1299],{"type":49,"value":1300},"chain_id",{"type":43,"tag":113,"props":1302,"children":1303},{},[1304,1309,1310,1315],{"type":43,"tag":65,"props":1305,"children":1306},{},[1307],{"type":49,"value":1308},"DeFi protocol positions:",{"type":49,"value":1286},{"type":43,"tag":228,"props":1311,"children":1313},{"className":1312},[],[1314],{"type":49,"value":1116},{"type":49,"value":1316}," — returns LP, staking, lending positions with underlying token amounts",{"type":43,"tag":59,"props":1318,"children":1319},{},[1320,1322,1328,1330,1336],{"type":49,"value":1321},"Use ",{"type":43,"tag":228,"props":1323,"children":1325},{"className":1324},[],[1326],{"type":49,"value":1327},"--data-urlencode",{"type":49,"value":1329}," with ",{"type":43,"tag":228,"props":1331,"children":1333},{"className":1332},[],[1334],{"type":49,"value":1335},"-G",{"type":49,"value":1337}," so the wallet address is never shell-interpolated into the URL string:",{"type":43,"tag":354,"props":1339,"children":1343},{"className":1340,"code":1341,"language":1342,"meta":359,"style":359},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Token balances\ncurl -s -G \\\n  -H \"AccessKey: ${user_config.DEBANK_API_KEY}\" \\\n  --data-urlencode \"id=$WALLET_ADDR\" \\\n  \"https:\u002F\u002Fpro-openapi.debank.com\u002Fv1\u002Fuser\u002Fall_token_list\"\n\n# DeFi positions\ncurl -s -G \\\n  -H \"AccessKey: ${user_config.DEBANK_API_KEY}\" \\\n  --data-urlencode \"id=$WALLET_ADDR\" \\\n  \"https:\u002F\u002Fpro-openapi.debank.com\u002Fv1\u002Fuser\u002Fall_complex_protocol_list\"\n","bash",[1344],{"type":43,"tag":228,"props":1345,"children":1346},{"__ignoreMap":359},[1347,1356,1382,1429,1460,1478,1487,1495,1514,1553,1580],{"type":43,"tag":365,"props":1348,"children":1349},{"class":367,"line":368},[1350],{"type":43,"tag":365,"props":1351,"children":1353},{"style":1352},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1354],{"type":49,"value":1355},"# Token balances\n",{"type":43,"tag":365,"props":1357,"children":1358},{"class":367,"line":377},[1359,1365,1371,1376],{"type":43,"tag":365,"props":1360,"children":1362},{"style":1361},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1363],{"type":49,"value":1364},"curl",{"type":43,"tag":365,"props":1366,"children":1368},{"style":1367},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1369],{"type":49,"value":1370}," -s",{"type":43,"tag":365,"props":1372,"children":1373},{"style":1367},[1374],{"type":49,"value":1375}," -G",{"type":43,"tag":365,"props":1377,"children":1379},{"style":1378},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1380],{"type":49,"value":1381}," \\\n",{"type":43,"tag":365,"props":1383,"children":1384},{"class":367,"line":386},[1385,1390,1396,1401,1406,1411,1416,1420,1425],{"type":43,"tag":365,"props":1386,"children":1387},{"style":1367},[1388],{"type":49,"value":1389},"  -H",{"type":43,"tag":365,"props":1391,"children":1393},{"style":1392},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1394],{"type":49,"value":1395}," \"",{"type":43,"tag":365,"props":1397,"children":1398},{"style":1367},[1399],{"type":49,"value":1400},"AccessKey: ",{"type":43,"tag":365,"props":1402,"children":1403},{"style":1392},[1404],{"type":49,"value":1405},"${",{"type":43,"tag":365,"props":1407,"children":1408},{"style":1378},[1409],{"type":49,"value":1410},"user_config",{"type":43,"tag":365,"props":1412,"children":1413},{"style":1367},[1414],{"type":49,"value":1415},".",{"type":43,"tag":365,"props":1417,"children":1418},{"style":1378},[1419],{"type":49,"value":1231},{"type":43,"tag":365,"props":1421,"children":1422},{"style":1392},[1423],{"type":49,"value":1424},"}\"",{"type":43,"tag":365,"props":1426,"children":1427},{"style":1378},[1428],{"type":49,"value":1381},{"type":43,"tag":365,"props":1430,"children":1431},{"class":367,"line":395},[1432,1437,1441,1446,1451,1456],{"type":43,"tag":365,"props":1433,"children":1434},{"style":1367},[1435],{"type":49,"value":1436},"  --data-urlencode",{"type":43,"tag":365,"props":1438,"children":1439},{"style":1392},[1440],{"type":49,"value":1395},{"type":43,"tag":365,"props":1442,"children":1443},{"style":1367},[1444],{"type":49,"value":1445},"id=",{"type":43,"tag":365,"props":1447,"children":1448},{"style":1378},[1449],{"type":49,"value":1450},"$WALLET_ADDR",{"type":43,"tag":365,"props":1452,"children":1453},{"style":1392},[1454],{"type":49,"value":1455},"\"",{"type":43,"tag":365,"props":1457,"children":1458},{"style":1378},[1459],{"type":49,"value":1381},{"type":43,"tag":365,"props":1461,"children":1462},{"class":367,"line":404},[1463,1468,1473],{"type":43,"tag":365,"props":1464,"children":1465},{"style":1392},[1466],{"type":49,"value":1467},"  \"",{"type":43,"tag":365,"props":1469,"children":1470},{"style":1367},[1471],{"type":49,"value":1472},"https:\u002F\u002Fpro-openapi.debank.com\u002Fv1\u002Fuser\u002Fall_token_list",{"type":43,"tag":365,"props":1474,"children":1475},{"style":1392},[1476],{"type":49,"value":1477},"\"\n",{"type":43,"tag":365,"props":1479,"children":1480},{"class":367,"line":413},[1481],{"type":43,"tag":365,"props":1482,"children":1484},{"emptyLinePlaceholder":1483},true,[1485],{"type":49,"value":1486},"\n",{"type":43,"tag":365,"props":1488,"children":1489},{"class":367,"line":422},[1490],{"type":43,"tag":365,"props":1491,"children":1492},{"style":1352},[1493],{"type":49,"value":1494},"# DeFi positions\n",{"type":43,"tag":365,"props":1496,"children":1497},{"class":367,"line":431},[1498,1502,1506,1510],{"type":43,"tag":365,"props":1499,"children":1500},{"style":1361},[1501],{"type":49,"value":1364},{"type":43,"tag":365,"props":1503,"children":1504},{"style":1367},[1505],{"type":49,"value":1370},{"type":43,"tag":365,"props":1507,"children":1508},{"style":1367},[1509],{"type":49,"value":1375},{"type":43,"tag":365,"props":1511,"children":1512},{"style":1378},[1513],{"type":49,"value":1381},{"type":43,"tag":365,"props":1515,"children":1516},{"class":367,"line":440},[1517,1521,1525,1529,1533,1537,1541,1545,1549],{"type":43,"tag":365,"props":1518,"children":1519},{"style":1367},[1520],{"type":49,"value":1389},{"type":43,"tag":365,"props":1522,"children":1523},{"style":1392},[1524],{"type":49,"value":1395},{"type":43,"tag":365,"props":1526,"children":1527},{"style":1367},[1528],{"type":49,"value":1400},{"type":43,"tag":365,"props":1530,"children":1531},{"style":1392},[1532],{"type":49,"value":1405},{"type":43,"tag":365,"props":1534,"children":1535},{"style":1378},[1536],{"type":49,"value":1410},{"type":43,"tag":365,"props":1538,"children":1539},{"style":1367},[1540],{"type":49,"value":1415},{"type":43,"tag":365,"props":1542,"children":1543},{"style":1378},[1544],{"type":49,"value":1231},{"type":43,"tag":365,"props":1546,"children":1547},{"style":1392},[1548],{"type":49,"value":1424},{"type":43,"tag":365,"props":1550,"children":1551},{"style":1378},[1552],{"type":49,"value":1381},{"type":43,"tag":365,"props":1554,"children":1555},{"class":367,"line":449},[1556,1560,1564,1568,1572,1576],{"type":43,"tag":365,"props":1557,"children":1558},{"style":1367},[1559],{"type":49,"value":1436},{"type":43,"tag":365,"props":1561,"children":1562},{"style":1392},[1563],{"type":49,"value":1395},{"type":43,"tag":365,"props":1565,"children":1566},{"style":1367},[1567],{"type":49,"value":1445},{"type":43,"tag":365,"props":1569,"children":1570},{"style":1378},[1571],{"type":49,"value":1450},{"type":43,"tag":365,"props":1573,"children":1574},{"style":1392},[1575],{"type":49,"value":1455},{"type":43,"tag":365,"props":1577,"children":1578},{"style":1378},[1579],{"type":49,"value":1381},{"type":43,"tag":365,"props":1581,"children":1582},{"class":367,"line":458},[1583,1587,1592],{"type":43,"tag":365,"props":1584,"children":1585},{"style":1392},[1586],{"type":49,"value":1467},{"type":43,"tag":365,"props":1588,"children":1589},{"style":1367},[1590],{"type":49,"value":1591},"https:\u002F\u002Fpro-openapi.debank.com\u002Fv1\u002Fuser\u002Fall_complex_protocol_list",{"type":43,"tag":365,"props":1593,"children":1594},{"style":1392},[1595],{"type":49,"value":1477},{"type":43,"tag":59,"props":1597,"children":1598},{},[1599,1604,1606,1612],{"type":43,"tag":65,"props":1600,"children":1601},{},[1602],{"type":49,"value":1603},"Fiat-value filter:",{"type":49,"value":1605}," Discard any token where ",{"type":43,"tag":228,"props":1607,"children":1609},{"className":1608},[],[1610],{"type":49,"value":1611},"price \u003C 0.01",{"type":49,"value":1613}," — these are excluded from all matching, display, and reporting.",{"type":43,"tag":59,"props":1615,"children":1616},{},[1617,1622],{"type":43,"tag":65,"props":1618,"children":1619},{},[1620],{"type":49,"value":1621},"Rate limiting:",{"type":49,"value":1623}," Add a 0.3s delay between wallet requests to avoid 429 errors.",{"type":43,"tag":287,"props":1625,"children":1627},{"id":1626},"step-6-match-regular-assets",[1628],{"type":49,"value":1629},"Step 6 — Match regular assets",{"type":43,"tag":59,"props":1631,"children":1632},{},[1633,1635,1640,1642,1647,1649,1655,1657,1663,1664,1670,1671,1677,1679,1685],{"type":49,"value":1634},"Matching must be ",{"type":43,"tag":65,"props":1636,"children":1637},{},[1638],{"type":49,"value":1639},"chain-aware",{"type":49,"value":1641},". DeBank's ",{"type":43,"tag":228,"props":1643,"children":1645},{"className":1644},[],[1646],{"type":49,"value":1292},{"type":49,"value":1648}," returns a ",{"type":43,"tag":228,"props":1650,"children":1652},{"className":1651},[],[1653],{"type":49,"value":1654},"chain",{"type":49,"value":1656}," field per\ntoken (e.g. ",{"type":43,"tag":228,"props":1658,"children":1660},{"className":1659},[],[1661],{"type":49,"value":1662},"\"eth\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1665,"children":1667},{"className":1666},[],[1668],{"type":49,"value":1669},"\"arb\"",{"type":49,"value":954},{"type":43,"tag":228,"props":1672,"children":1674},{"className":1673},[],[1675],{"type":49,"value":1676},"\"bsc\"",{"type":49,"value":1678},"). TRES balances are tied to a specific platform\nvia the wallet's ",{"type":43,"tag":228,"props":1680,"children":1682},{"className":1681},[],[1683],{"type":49,"value":1684},"platforms",{"type":49,"value":1686}," array or the balance's context. Always prefer a per-chain\nmatch before falling back to cross-chain aggregation.",{"type":43,"tag":59,"props":1688,"children":1689},{},[1690,1695,1697,1702],{"type":43,"tag":65,"props":1691,"children":1692},{},[1693],{"type":49,"value":1694},"Chain ID mapping",{"type":49,"value":1696}," (DeBank ",{"type":43,"tag":228,"props":1698,"children":1700},{"className":1699},[],[1701],{"type":49,"value":1654},{"type":49,"value":1703}," → TRES platform):",{"type":43,"tag":187,"props":1705,"children":1706},{},[1707,1728],{"type":43,"tag":191,"props":1708,"children":1709},{},[1710],{"type":43,"tag":195,"props":1711,"children":1712},{},[1713,1723],{"type":43,"tag":199,"props":1714,"children":1715},{},[1716,1718],{"type":49,"value":1717},"DeBank ",{"type":43,"tag":228,"props":1719,"children":1721},{"className":1720},[],[1722],{"type":49,"value":1654},{"type":43,"tag":199,"props":1724,"children":1725},{},[1726],{"type":49,"value":1727},"TRES platform",{"type":43,"tag":210,"props":1729,"children":1730},{},[1731,1747,1763,1780,1796,1813,1830,1847,1864,1881,1898,1915,1932,1949],{"type":43,"tag":195,"props":1732,"children":1733},{},[1734,1743],{"type":43,"tag":217,"props":1735,"children":1736},{},[1737],{"type":43,"tag":228,"props":1738,"children":1740},{"className":1739},[],[1741],{"type":49,"value":1742},"eth",{"type":43,"tag":217,"props":1744,"children":1745},{},[1746],{"type":49,"value":952},{"type":43,"tag":195,"props":1748,"children":1749},{},[1750,1759],{"type":43,"tag":217,"props":1751,"children":1752},{},[1753],{"type":43,"tag":228,"props":1754,"children":1756},{"className":1755},[],[1757],{"type":49,"value":1758},"arb",{"type":43,"tag":217,"props":1760,"children":1761},{},[1762],{"type":49,"value":967},{"type":43,"tag":195,"props":1764,"children":1765},{},[1766,1775],{"type":43,"tag":217,"props":1767,"children":1768},{},[1769],{"type":43,"tag":228,"props":1770,"children":1772},{"className":1771},[],[1773],{"type":49,"value":1774},"op",{"type":43,"tag":217,"props":1776,"children":1777},{},[1778],{"type":49,"value":1779},"OPTIMISM",{"type":43,"tag":195,"props":1781,"children":1782},{},[1783,1792],{"type":43,"tag":217,"props":1784,"children":1785},{},[1786],{"type":43,"tag":228,"props":1787,"children":1789},{"className":1788},[],[1790],{"type":49,"value":1791},"matic",{"type":43,"tag":217,"props":1793,"children":1794},{},[1795],{"type":49,"value":960},{"type":43,"tag":195,"props":1797,"children":1798},{},[1799,1808],{"type":43,"tag":217,"props":1800,"children":1801},{},[1802],{"type":43,"tag":228,"props":1803,"children":1805},{"className":1804},[],[1806],{"type":49,"value":1807},"base",{"type":43,"tag":217,"props":1809,"children":1810},{},[1811],{"type":49,"value":1812},"BASE",{"type":43,"tag":195,"props":1814,"children":1815},{},[1816,1825],{"type":43,"tag":217,"props":1817,"children":1818},{},[1819],{"type":43,"tag":228,"props":1820,"children":1822},{"className":1821},[],[1823],{"type":49,"value":1824},"bsc",{"type":43,"tag":217,"props":1826,"children":1827},{},[1828],{"type":49,"value":1829},"BNB (Binance)",{"type":43,"tag":195,"props":1831,"children":1832},{},[1833,1842],{"type":43,"tag":217,"props":1834,"children":1835},{},[1836],{"type":43,"tag":228,"props":1837,"children":1839},{"className":1838},[],[1840],{"type":49,"value":1841},"avax",{"type":43,"tag":217,"props":1843,"children":1844},{},[1845],{"type":49,"value":1846},"AVALANCHE",{"type":43,"tag":195,"props":1848,"children":1849},{},[1850,1859],{"type":43,"tag":217,"props":1851,"children":1852},{},[1853],{"type":43,"tag":228,"props":1854,"children":1856},{"className":1855},[],[1857],{"type":49,"value":1858},"ftm",{"type":43,"tag":217,"props":1860,"children":1861},{},[1862],{"type":49,"value":1863},"FANTOM",{"type":43,"tag":195,"props":1865,"children":1866},{},[1867,1876],{"type":43,"tag":217,"props":1868,"children":1869},{},[1870],{"type":43,"tag":228,"props":1871,"children":1873},{"className":1872},[],[1874],{"type":49,"value":1875},"xdai",{"type":43,"tag":217,"props":1877,"children":1878},{},[1879],{"type":49,"value":1880},"GNOSIS",{"type":43,"tag":195,"props":1882,"children":1883},{},[1884,1893],{"type":43,"tag":217,"props":1885,"children":1886},{},[1887],{"type":43,"tag":228,"props":1888,"children":1890},{"className":1889},[],[1891],{"type":49,"value":1892},"era",{"type":43,"tag":217,"props":1894,"children":1895},{},[1896],{"type":49,"value":1897},"ZKSYNC",{"type":43,"tag":195,"props":1899,"children":1900},{},[1901,1910],{"type":43,"tag":217,"props":1902,"children":1903},{},[1904],{"type":43,"tag":228,"props":1905,"children":1907},{"className":1906},[],[1908],{"type":49,"value":1909},"celo",{"type":43,"tag":217,"props":1911,"children":1912},{},[1913],{"type":49,"value":1914},"CELO",{"type":43,"tag":195,"props":1916,"children":1917},{},[1918,1927],{"type":43,"tag":217,"props":1919,"children":1920},{},[1921],{"type":43,"tag":228,"props":1922,"children":1924},{"className":1923},[],[1925],{"type":49,"value":1926},"linea",{"type":43,"tag":217,"props":1928,"children":1929},{},[1930],{"type":49,"value":1931},"LINEA",{"type":43,"tag":195,"props":1933,"children":1934},{},[1935,1944],{"type":43,"tag":217,"props":1936,"children":1937},{},[1938],{"type":43,"tag":228,"props":1939,"children":1941},{"className":1940},[],[1942],{"type":49,"value":1943},"scrl",{"type":43,"tag":217,"props":1945,"children":1946},{},[1947],{"type":49,"value":1948},"SCROLL",{"type":43,"tag":195,"props":1950,"children":1951},{},[1952,1961],{"type":43,"tag":217,"props":1953,"children":1954},{},[1955],{"type":43,"tag":228,"props":1956,"children":1958},{"className":1957},[],[1959],{"type":49,"value":1960},"mnt",{"type":43,"tag":217,"props":1962,"children":1963},{},[1964],{"type":49,"value":1965},"MOONBEAM",{"type":43,"tag":59,"props":1967,"children":1968},{},[1969],{"type":43,"tag":65,"props":1970,"children":1971},{},[1972],{"type":49,"value":1973},"Matching order (most specific first):",{"type":43,"tag":1103,"props":1975,"children":1976},{},[1977,2002,2027],{"type":43,"tag":113,"props":1978,"children":1979},{},[1980,1985,1986,1992,1994,2000],{"type":43,"tag":65,"props":1981,"children":1982},{},[1983],{"type":49,"value":1984},"Contract + chain match (best):",{"type":49,"value":1286},{"type":43,"tag":228,"props":1987,"children":1989},{"className":1988},[],[1990],{"type":49,"value":1991},"asset.contract.identifier",{"type":49,"value":1993}," (lowercase) vs DeBank\ntoken ",{"type":43,"tag":228,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":49,"value":1999},"id",{"type":49,"value":2001}," (lowercase), on the same chain. This is the most precise match.",{"type":43,"tag":113,"props":2003,"children":2004},{},[2005,2010,2012,2018,2020,2025],{"type":43,"tag":65,"props":2006,"children":2007},{},[2008],{"type":49,"value":2009},"Symbol + chain match:",{"type":49,"value":2011}," For native tokens (no contract), match by ",{"type":43,"tag":228,"props":2013,"children":2015},{"className":2014},[],[2016],{"type":49,"value":2017},"asset.symbol",{"type":49,"value":2019},"\n(case-insensitive) AND DeBank ",{"type":43,"tag":228,"props":2021,"children":2023},{"className":2022},[],[2024],{"type":49,"value":1654},{"type":49,"value":2026}," matching the TRES platform for that balance row.\nThis correctly handles the common case where a wallet holds ETH on both Ethereum and\nArbitrum — each TRES balance row matches its corresponding DeBank per-chain entry.",{"type":43,"tag":113,"props":2028,"children":2029},{},[2030,2035],{"type":43,"tag":65,"props":2031,"children":2032},{},[2033],{"type":49,"value":2034},"Symbol-only match (last resort):",{"type":49,"value":2036}," If a TRES native token balance cannot be matched\nto any specific DeBank chain entry, fall back to symbol-only matching. This handles\nedge cases where TRES or DeBank uses a different chain label.",{"type":43,"tag":287,"props":2038,"children":2040},{"id":2039},"step-7-match-defi-position-underlying-tokens",[2041],{"type":49,"value":2042},"Step 7 — Match DeFi position underlying tokens",{"type":43,"tag":59,"props":2044,"children":2045},{},[2046],{"type":49,"value":2047},"This is a critical step that compares DeFi position underlying tokens between TRES and DeBank.",{"type":43,"tag":2049,"props":2050,"children":2052},"h4",{"id":2051},"_7a-filter-out-position-nft-rows",[2053],{"type":49,"value":2054},"7a. Filter out position NFT rows",{"type":43,"tag":59,"props":2056,"children":2057},{},[2058,2060,2066,2067,2073,2074,2080,2081,2087,2088,2094,2095,2101],{"type":49,"value":2059},"Remove position NFT tokens from the regular comparison (e.g. ",{"type":43,"tag":228,"props":2061,"children":2063},{"className":2062},[],[2064],{"type":49,"value":2065},"UNI-V3-POS",{"type":49,"value":954},{"type":43,"tag":228,"props":2068,"children":2070},{"className":2069},[],[2071],{"type":49,"value":2072},"RCL",{"type":49,"value":954},{"type":43,"tag":228,"props":2075,"children":2077},{"className":2076},[],[2078],{"type":49,"value":2079},"SAB-LOCKUP",{"type":49,"value":954},{"type":43,"tag":228,"props":2082,"children":2084},{"className":2083},[],[2085],{"type":49,"value":2086},"SLP",{"type":49,"value":954},{"type":43,"tag":228,"props":2089,"children":2091},{"className":2090},[],[2092],{"type":49,"value":2093},"STEER",{"type":49,"value":954},{"type":43,"tag":228,"props":2096,"children":2098},{"className":2097},[],[2099],{"type":49,"value":2100},"UNI-V4-POS",{"type":49,"value":2102},"). These are replaced by the underlying token rows from positions.",{"type":43,"tag":2049,"props":2104,"children":2106},{"id":2105},"_7b-process-tres-positions",[2107],{"type":49,"value":2108},"7b. Process TRES positions",{"type":43,"tag":59,"props":2110,"children":2111},{},[2112,2114,2119],{"type":49,"value":2113},"From ",{"type":43,"tag":228,"props":2115,"children":2117},{"className":2116},[],[2118],{"type":49,"value":740},{"type":49,"value":2120}," results, for each position:",{"type":43,"tag":1103,"props":2122,"children":2123},{},[2124,2137],{"type":43,"tag":113,"props":2125,"children":2126},{},[2127,2129,2135],{"type":49,"value":2128},"Aggregate ",{"type":43,"tag":228,"props":2130,"children":2132},{"className":2131},[],[2133],{"type":49,"value":2134},"children",{"type":49,"value":2136}," by symbol — a position may have multiple entries for the same token (e.g. supply + unclaimed rewards in QuickSwap or Uniswap V4), so sum the amounts",{"type":43,"tag":113,"props":2138,"children":2139},{},[2140,2141,2147],{"type":49,"value":1321},{"type":43,"tag":228,"props":2142,"children":2144},{"className":2143},[],[2145],{"type":49,"value":2146},"displayName",{"type":49,"value":2148}," to identify the protocol and token composition",{"type":43,"tag":354,"props":2150,"children":2154},{"className":2151,"code":2152,"language":2153,"meta":359,"style":359},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Example: aggregate children for a position\ndef aggregate_children(children):\n    agg = {}\n    for c in children:\n        sym = c['symbol']\n        amt = float(c['amount']) if isinstance(c['amount'], str) else c['amount']\n        if sym not in agg:\n            agg[sym] = {'amount': 0, 'assetIdentifier': c.get('assetIdentifier', '')}\n        agg[sym]['amount'] += amt\n    return agg\n","python",[2155],{"type":43,"tag":228,"props":2156,"children":2157},{"__ignoreMap":359},[2158,2166,2174,2182,2190,2198,2206,2214,2222,2230],{"type":43,"tag":365,"props":2159,"children":2160},{"class":367,"line":368},[2161],{"type":43,"tag":365,"props":2162,"children":2163},{},[2164],{"type":49,"value":2165},"# Example: aggregate children for a position\n",{"type":43,"tag":365,"props":2167,"children":2168},{"class":367,"line":377},[2169],{"type":43,"tag":365,"props":2170,"children":2171},{},[2172],{"type":49,"value":2173},"def aggregate_children(children):\n",{"type":43,"tag":365,"props":2175,"children":2176},{"class":367,"line":386},[2177],{"type":43,"tag":365,"props":2178,"children":2179},{},[2180],{"type":49,"value":2181},"    agg = {}\n",{"type":43,"tag":365,"props":2183,"children":2184},{"class":367,"line":395},[2185],{"type":43,"tag":365,"props":2186,"children":2187},{},[2188],{"type":49,"value":2189},"    for c in children:\n",{"type":43,"tag":365,"props":2191,"children":2192},{"class":367,"line":404},[2193],{"type":43,"tag":365,"props":2194,"children":2195},{},[2196],{"type":49,"value":2197},"        sym = c['symbol']\n",{"type":43,"tag":365,"props":2199,"children":2200},{"class":367,"line":413},[2201],{"type":43,"tag":365,"props":2202,"children":2203},{},[2204],{"type":49,"value":2205},"        amt = float(c['amount']) if isinstance(c['amount'], str) else c['amount']\n",{"type":43,"tag":365,"props":2207,"children":2208},{"class":367,"line":422},[2209],{"type":43,"tag":365,"props":2210,"children":2211},{},[2212],{"type":49,"value":2213},"        if sym not in agg:\n",{"type":43,"tag":365,"props":2215,"children":2216},{"class":367,"line":431},[2217],{"type":43,"tag":365,"props":2218,"children":2219},{},[2220],{"type":49,"value":2221},"            agg[sym] = {'amount': 0, 'assetIdentifier': c.get('assetIdentifier', '')}\n",{"type":43,"tag":365,"props":2223,"children":2224},{"class":367,"line":440},[2225],{"type":43,"tag":365,"props":2226,"children":2227},{},[2228],{"type":49,"value":2229},"        agg[sym]['amount'] += amt\n",{"type":43,"tag":365,"props":2231,"children":2232},{"class":367,"line":449},[2233],{"type":43,"tag":365,"props":2234,"children":2235},{},[2236],{"type":49,"value":2237},"    return agg\n",{"type":43,"tag":2049,"props":2239,"children":2241},{"id":2240},"_7c-process-debank-positions",[2242],{"type":49,"value":2243},"7c. Process DeBank positions",{"type":43,"tag":59,"props":2245,"children":2246},{},[2247,2248,2253,2255,2261],{"type":49,"value":2113},{"type":43,"tag":228,"props":2249,"children":2251},{"className":2250},[],[2252],{"type":49,"value":1116},{"type":49,"value":2254},", for each protocol's ",{"type":43,"tag":228,"props":2256,"children":2258},{"className":2257},[],[2259],{"type":49,"value":2260},"portfolio_item_list",{"type":49,"value":2262},":",{"type":43,"tag":1103,"props":2264,"children":2265},{},[2266,2287],{"type":43,"tag":113,"props":2267,"children":2268},{},[2269,2271,2277,2279,2285],{"type":49,"value":2270},"Extract ",{"type":43,"tag":228,"props":2272,"children":2274},{"className":2273},[],[2275],{"type":49,"value":2276},"asset_token_list",{"type":49,"value":2278}," for supply tokens and ",{"type":43,"tag":228,"props":2280,"children":2282},{"className":2281},[],[2283],{"type":49,"value":2284},"reward_token_list",{"type":49,"value":2286}," for rewards",{"type":43,"tag":113,"props":2288,"children":2289},{},[2290,2292,2298,2300,2305],{"type":49,"value":2291},"Use protocol ",{"type":43,"tag":228,"props":2293,"children":2295},{"className":2294},[],[2296],{"type":49,"value":2297},"name",{"type":49,"value":2299}," and item ",{"type":43,"tag":228,"props":2301,"children":2303},{"className":2302},[],[2304],{"type":49,"value":2297},{"type":49,"value":2306}," (e.g. \"Lending\", \"Liquidity Pool\") as the position label",{"type":43,"tag":2049,"props":2308,"children":2310},{"id":2309},"_7d-compare-position-tokens",[2311],{"type":49,"value":2312},"7d. Compare position tokens",{"type":43,"tag":59,"props":2314,"children":2315},{},[2316],{"type":49,"value":2317},"Match DeBank protocol positions to TRES positions by:",{"type":43,"tag":1103,"props":2319,"children":2320},{},[2321,2326],{"type":43,"tag":113,"props":2322,"children":2323},{},[2324],{"type":49,"value":2325},"Protocol name match (case-insensitive, first word)",{"type":43,"tag":113,"props":2327,"children":2328},{},[2329],{"type":49,"value":2330},"Token symbol overlap between children",{"type":43,"tag":59,"props":2332,"children":2333},{},[2334],{"type":49,"value":2335},"For each matched position token:",{"type":43,"tag":109,"props":2337,"children":2338},{},[2339,2349],{"type":43,"tag":113,"props":2340,"children":2341},{},[2342,2347],{"type":43,"tag":65,"props":2343,"children":2344},{},[2345],{"type":49,"value":2346},"If TRES data exists:",{"type":49,"value":2348}," Compare amounts, compute delta %, assign match\u002Fminor\u002Fmajor status",{"type":43,"tag":113,"props":2350,"children":2351},{},[2352,2357,2359,2365],{"type":43,"tag":65,"props":2353,"children":2354},{},[2355],{"type":49,"value":2356},"If no TRES data:",{"type":49,"value":2358}," Assign ",{"type":43,"tag":228,"props":2360,"children":2362},{"className":2361},[],[2363],{"type":49,"value":2364},"position",{"type":49,"value":2366}," status (purple badge)",{"type":43,"tag":287,"props":2368,"children":2370},{"id":2369},"step-8-build-and-render-the-report",[2371],{"type":49,"value":2372},"Step 8 — Build and render the report",{"type":43,"tag":59,"props":2374,"children":2375},{},[2376,2378,2383],{"type":49,"value":2377},"Create ",{"type":43,"tag":65,"props":2379,"children":2380},{},[2381],{"type":49,"value":2382},"two outputs",{"type":49,"value":2262},{"type":43,"tag":1103,"props":2385,"children":2386},{},[2387,2397],{"type":43,"tag":113,"props":2388,"children":2389},{},[2390,2395],{"type":43,"tag":65,"props":2391,"children":2392},{},[2393],{"type":49,"value":2394},"Interactive HTML file",{"type":49,"value":2396}," — Dark-themed, with filter buttons, collapsible wallet cards, dedicated DeFi Positions section per wallet",{"type":43,"tag":113,"props":2398,"children":2399},{},[2400,2405],{"type":43,"tag":65,"props":2401,"children":2402},{},[2403],{"type":49,"value":2404},"PDF report",{"type":49,"value":2406}," — Landscape A4, all wallet tables expanded, using reportlab",{"type":43,"tag":59,"props":2408,"children":2409},{},[2410],{"type":49,"value":2411},"Save both to the outputs directory.",{"type":43,"tag":94,"props":2413,"children":2414},{},[],{"type":43,"tag":52,"props":2416,"children":2418},{"id":2417},"report-layout-critical",[2419],{"type":49,"value":2420},"Report Layout — CRITICAL",{"type":43,"tag":287,"props":2422,"children":2424},{"id":2423},"defi-positions-must-be-visually-separated",[2425],{"type":49,"value":2426},"DeFi Positions must be visually separated",{"type":43,"tag":59,"props":2428,"children":2429},{},[2430,2432,2437],{"type":49,"value":2431},"Each wallet card in the report MUST have ",{"type":43,"tag":65,"props":2433,"children":2434},{},[2435],{"type":49,"value":2436},"two distinct sections",{"type":49,"value":2262},{"type":43,"tag":1103,"props":2439,"children":2440},{},[2441,2467],{"type":43,"tag":113,"props":2442,"children":2443},{},[2444,2449,2451,2457,2459,2465],{"type":43,"tag":65,"props":2445,"children":2446},{},[2447],{"type":49,"value":2448},"DeFi Positions section",{"type":49,"value":2450}," (top, purple-themed) — A dedicated box with purple border and dark purple background (",{"type":43,"tag":228,"props":2452,"children":2454},{"className":2453},[],[2455],{"type":49,"value":2456},"#1a1033",{"type":49,"value":2458}," bg, ",{"type":43,"tag":228,"props":2460,"children":2462},{"className":2461},[],[2463],{"type":49,"value":2464},"#7c3aed",{"type":49,"value":2466}," border) showing all position-related rows. This section appears BEFORE the regular token table.",{"type":43,"tag":113,"props":2468,"children":2469},{},[2470,2475],{"type":43,"tag":65,"props":2471,"children":2472},{},[2473],{"type":49,"value":2474},"Regular tokens table",{"type":49,"value":2476}," (below) — Standard token balance comparison rows.",{"type":43,"tag":287,"props":2478,"children":2480},{"id":2479},"position-asset-indicator",[2481],{"type":49,"value":2482},"Position asset indicator",{"type":43,"tag":59,"props":2484,"children":2485},{},[2486,2488,2493,2495,2501],{"type":49,"value":2487},"Every position asset row MUST have a ",{"type":43,"tag":65,"props":2489,"children":2490},{},[2491],{"type":49,"value":2492},"purple dot indicator",{"type":49,"value":2494}," (CSS circle, 8px, ",{"type":43,"tag":228,"props":2496,"children":2498},{"className":2497},[],[2499],{"type":49,"value":2500},"#a855f7",{"type":49,"value":2502},") next to the asset name. This ensures positions are instantly recognizable:",{"type":43,"tag":354,"props":2504,"children":2508},{"className":2505,"code":2506,"language":2507,"meta":359,"style":359},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cspan style=\"display:inline-block;width:8px;height:8px;background:#a855f7;border-radius:50%;margin-right:6px;vertical-align:middle;\">\u003C\u002Fspan>\n","html",[2509],{"type":43,"tag":228,"props":2510,"children":2511},{"__ignoreMap":359},[2512],{"type":43,"tag":365,"props":2513,"children":2514},{"class":367,"line":368},[2515,2520,2525,2531,2536,2540,2545,2549,2554,2558],{"type":43,"tag":365,"props":2516,"children":2517},{"style":1392},[2518],{"type":49,"value":2519},"\u003C",{"type":43,"tag":365,"props":2521,"children":2523},{"style":2522},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[2524],{"type":49,"value":365},{"type":43,"tag":365,"props":2526,"children":2528},{"style":2527},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[2529],{"type":49,"value":2530}," style",{"type":43,"tag":365,"props":2532,"children":2533},{"style":1392},[2534],{"type":49,"value":2535},"=",{"type":43,"tag":365,"props":2537,"children":2538},{"style":1392},[2539],{"type":49,"value":1455},{"type":43,"tag":365,"props":2541,"children":2542},{"style":1367},[2543],{"type":49,"value":2544},"display:inline-block;width:8px;height:8px;background:#a855f7;border-radius:50%;margin-right:6px;vertical-align:middle;",{"type":43,"tag":365,"props":2546,"children":2547},{"style":1392},[2548],{"type":49,"value":1455},{"type":43,"tag":365,"props":2550,"children":2551},{"style":1392},[2552],{"type":49,"value":2553},">\u003C\u002F",{"type":43,"tag":365,"props":2555,"children":2556},{"style":2522},[2557],{"type":49,"value":365},{"type":43,"tag":365,"props":2559,"children":2560},{"style":1392},[2561],{"type":49,"value":2562},">\n",{"type":43,"tag":80,"props":2564,"children":2565},{},[2566],{"type":43,"tag":59,"props":2567,"children":2568},{},[2569,2574],{"type":43,"tag":65,"props":2570,"children":2571},{},[2572],{"type":49,"value":2573},"Do NOT use emojis or inline SVGs",{"type":49,"value":2575}," — they may not render in all viewers. Use pure CSS shapes only.",{"type":43,"tag":287,"props":2577,"children":2579},{"id":2578},"position-rows-show-dual-badges",[2580],{"type":49,"value":2581},"Position rows show dual badges",{"type":43,"tag":59,"props":2583,"children":2584},{},[2585],{"type":49,"value":2586},"Position rows that have a TRES match show TWO badges:",{"type":43,"tag":109,"props":2588,"children":2589},{},[2590,2603],{"type":43,"tag":113,"props":2591,"children":2592},{},[2593,2595,2601],{"type":49,"value":2594},"A ",{"type":43,"tag":228,"props":2596,"children":2598},{"className":2597},[],[2599],{"type":49,"value":2600},"POSITION",{"type":49,"value":2602}," badge (purple)",{"type":43,"tag":113,"props":2604,"children":2605},{},[2606,2608,2614,2616,2622,2623,2629],{"type":49,"value":2607},"A match-status badge (",{"type":43,"tag":228,"props":2609,"children":2611},{"className":2610},[],[2612],{"type":49,"value":2613},"MATCH",{"type":49,"value":2615},"\u002F",{"type":43,"tag":228,"props":2617,"children":2619},{"className":2618},[],[2620],{"type":49,"value":2621},"MINOR",{"type":49,"value":2615},{"type":43,"tag":228,"props":2624,"children":2626},{"className":2625},[],[2627],{"type":49,"value":2628},"MAJOR",{"type":49,"value":1076},{"type":43,"tag":287,"props":2631,"children":2633},{"id":2632},"auto-expand-wallets-with-positions",[2634],{"type":49,"value":2635},"Auto-expand wallets with positions",{"type":43,"tag":59,"props":2637,"children":2638},{},[2639,2641,2647],{"type":49,"value":2640},"Wallet cards that contain DeFi positions should be auto-expanded (",{"type":43,"tag":228,"props":2642,"children":2644},{"className":2643},[],[2645],{"type":49,"value":2646},"\u003Cdetails open>",{"type":49,"value":2648},") so positions are immediately visible.",{"type":43,"tag":94,"props":2650,"children":2651},{},[],{"type":43,"tag":52,"props":2653,"children":2655},{"id":2654},"number-formatting-rules",[2656],{"type":49,"value":2657},"Number Formatting Rules",{"type":43,"tag":287,"props":2659,"children":2661},{"id":2660},"token-amounts",[2662],{"type":49,"value":2663},"Token amounts",{"type":43,"tag":109,"props":2665,"children":2666},{},[2667,2679,2691,2703,2715],{"type":43,"tag":113,"props":2668,"children":2669},{},[2670,2672,2677],{"type":49,"value":2671},"Max ",{"type":43,"tag":65,"props":2673,"children":2674},{},[2675],{"type":49,"value":2676},"3 decimal places",{"type":49,"value":2678}," for all amounts",{"type":43,"tag":113,"props":2680,"children":2681},{},[2682,2684,2690],{"type":49,"value":2683},"Amounts ≥ 1,000: use comma separator with 3 decimals (e.g., ",{"type":43,"tag":228,"props":2685,"children":2687},{"className":2686},[],[2688],{"type":49,"value":2689},"846,492.356",{"type":49,"value":1076},{"type":43,"tag":113,"props":2692,"children":2693},{},[2694,2696,2702],{"type":49,"value":2695},"Amounts \u003C 1,000: use 3 decimals (e.g., ",{"type":43,"tag":228,"props":2697,"children":2699},{"className":2698},[],[2700],{"type":49,"value":2701},"0.386",{"type":49,"value":1076},{"type":43,"tag":113,"props":2704,"children":2705},{},[2706,2708,2714],{"type":49,"value":2707},"Very small amounts (\u003C 0.000001): use scientific notation (e.g., ",{"type":43,"tag":228,"props":2709,"children":2711},{"className":2710},[],[2712],{"type":49,"value":2713},"3.54e-07",{"type":49,"value":1076},{"type":43,"tag":113,"props":2716,"children":2717},{},[2718,2720],{"type":49,"value":2719},"Null\u002Fmissing: show em dash ",{"type":43,"tag":228,"props":2721,"children":2723},{"className":2722},[],[2724],{"type":49,"value":2725},"—",{"type":43,"tag":354,"props":2727,"children":2731},{"className":2728,"code":2729,"language":2730,"meta":359,"style":359},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","function formatAmount(n) {\n  if (n === null || n === undefined) return '\\u2014';\n  if (Math.abs(n) \u003C 0.000001) return n.toExponential(2);\n  if (Math.abs(n) >= 1000) return n.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 3});\n  return n.toFixed(3);\n}\n","javascript",[2732],{"type":43,"tag":228,"props":2733,"children":2734},{"__ignoreMap":359},[2735,2769,2846,2931,3069,3107],{"type":43,"tag":365,"props":2736,"children":2737},{"class":367,"line":368},[2738,2743,2749,2754,2760,2764],{"type":43,"tag":365,"props":2739,"children":2740},{"style":2527},[2741],{"type":49,"value":2742},"function",{"type":43,"tag":365,"props":2744,"children":2746},{"style":2745},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[2747],{"type":49,"value":2748}," formatAmount",{"type":43,"tag":365,"props":2750,"children":2751},{"style":1392},[2752],{"type":49,"value":2753},"(",{"type":43,"tag":365,"props":2755,"children":2757},{"style":2756},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[2758],{"type":49,"value":2759},"n",{"type":43,"tag":365,"props":2761,"children":2762},{"style":1392},[2763],{"type":49,"value":1076},{"type":43,"tag":365,"props":2765,"children":2766},{"style":1392},[2767],{"type":49,"value":2768}," {\n",{"type":43,"tag":365,"props":2770,"children":2771},{"class":367,"line":377},[2772,2778,2783,2787,2792,2797,2802,2807,2811,2816,2821,2826,2831,2836,2841],{"type":43,"tag":365,"props":2773,"children":2775},{"style":2774},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[2776],{"type":49,"value":2777},"  if",{"type":43,"tag":365,"props":2779,"children":2780},{"style":2522},[2781],{"type":49,"value":2782}," (",{"type":43,"tag":365,"props":2784,"children":2785},{"style":1378},[2786],{"type":49,"value":2759},{"type":43,"tag":365,"props":2788,"children":2789},{"style":1392},[2790],{"type":49,"value":2791}," ===",{"type":43,"tag":365,"props":2793,"children":2794},{"style":1392},[2795],{"type":49,"value":2796}," null",{"type":43,"tag":365,"props":2798,"children":2799},{"style":1392},[2800],{"type":49,"value":2801}," ||",{"type":43,"tag":365,"props":2803,"children":2804},{"style":1378},[2805],{"type":49,"value":2806}," n",{"type":43,"tag":365,"props":2808,"children":2809},{"style":1392},[2810],{"type":49,"value":2791},{"type":43,"tag":365,"props":2812,"children":2813},{"style":1392},[2814],{"type":49,"value":2815}," undefined",{"type":43,"tag":365,"props":2817,"children":2818},{"style":2522},[2819],{"type":49,"value":2820},") ",{"type":43,"tag":365,"props":2822,"children":2823},{"style":2774},[2824],{"type":49,"value":2825},"return",{"type":43,"tag":365,"props":2827,"children":2828},{"style":1392},[2829],{"type":49,"value":2830}," '",{"type":43,"tag":365,"props":2832,"children":2833},{"style":1378},[2834],{"type":49,"value":2835},"\\u2014",{"type":43,"tag":365,"props":2837,"children":2838},{"style":1392},[2839],{"type":49,"value":2840},"'",{"type":43,"tag":365,"props":2842,"children":2843},{"style":1392},[2844],{"type":49,"value":2845},";\n",{"type":43,"tag":365,"props":2847,"children":2848},{"class":367,"line":386},[2849,2853,2857,2862,2866,2871,2875,2879,2883,2887,2893,2897,2901,2905,2909,2914,2918,2923,2927],{"type":43,"tag":365,"props":2850,"children":2851},{"style":2774},[2852],{"type":49,"value":2777},{"type":43,"tag":365,"props":2854,"children":2855},{"style":2522},[2856],{"type":49,"value":2782},{"type":43,"tag":365,"props":2858,"children":2859},{"style":1378},[2860],{"type":49,"value":2861},"Math",{"type":43,"tag":365,"props":2863,"children":2864},{"style":1392},[2865],{"type":49,"value":1415},{"type":43,"tag":365,"props":2867,"children":2868},{"style":2745},[2869],{"type":49,"value":2870},"abs",{"type":43,"tag":365,"props":2872,"children":2873},{"style":2522},[2874],{"type":49,"value":2753},{"type":43,"tag":365,"props":2876,"children":2877},{"style":1378},[2878],{"type":49,"value":2759},{"type":43,"tag":365,"props":2880,"children":2881},{"style":2522},[2882],{"type":49,"value":2820},{"type":43,"tag":365,"props":2884,"children":2885},{"style":1392},[2886],{"type":49,"value":2519},{"type":43,"tag":365,"props":2888,"children":2890},{"style":2889},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[2891],{"type":49,"value":2892}," 0.000001",{"type":43,"tag":365,"props":2894,"children":2895},{"style":2522},[2896],{"type":49,"value":2820},{"type":43,"tag":365,"props":2898,"children":2899},{"style":2774},[2900],{"type":49,"value":2825},{"type":43,"tag":365,"props":2902,"children":2903},{"style":1378},[2904],{"type":49,"value":2806},{"type":43,"tag":365,"props":2906,"children":2907},{"style":1392},[2908],{"type":49,"value":1415},{"type":43,"tag":365,"props":2910,"children":2911},{"style":2745},[2912],{"type":49,"value":2913},"toExponential",{"type":43,"tag":365,"props":2915,"children":2916},{"style":2522},[2917],{"type":49,"value":2753},{"type":43,"tag":365,"props":2919,"children":2920},{"style":2889},[2921],{"type":49,"value":2922},"2",{"type":43,"tag":365,"props":2924,"children":2925},{"style":2522},[2926],{"type":49,"value":1076},{"type":43,"tag":365,"props":2928,"children":2929},{"style":1392},[2930],{"type":49,"value":2845},{"type":43,"tag":365,"props":2932,"children":2933},{"class":367,"line":395},[2934,2938,2942,2946,2950,2954,2958,2962,2966,2971,2976,2980,2984,2988,2992,2997,3001,3005,3010,3014,3019,3024,3029,3033,3038,3042,3047,3051,3056,3061,3065],{"type":43,"tag":365,"props":2935,"children":2936},{"style":2774},[2937],{"type":49,"value":2777},{"type":43,"tag":365,"props":2939,"children":2940},{"style":2522},[2941],{"type":49,"value":2782},{"type":43,"tag":365,"props":2943,"children":2944},{"style":1378},[2945],{"type":49,"value":2861},{"type":43,"tag":365,"props":2947,"children":2948},{"style":1392},[2949],{"type":49,"value":1415},{"type":43,"tag":365,"props":2951,"children":2952},{"style":2745},[2953],{"type":49,"value":2870},{"type":43,"tag":365,"props":2955,"children":2956},{"style":2522},[2957],{"type":49,"value":2753},{"type":43,"tag":365,"props":2959,"children":2960},{"style":1378},[2961],{"type":49,"value":2759},{"type":43,"tag":365,"props":2963,"children":2964},{"style":2522},[2965],{"type":49,"value":2820},{"type":43,"tag":365,"props":2967,"children":2968},{"style":1392},[2969],{"type":49,"value":2970},">=",{"type":43,"tag":365,"props":2972,"children":2973},{"style":2889},[2974],{"type":49,"value":2975}," 1000",{"type":43,"tag":365,"props":2977,"children":2978},{"style":2522},[2979],{"type":49,"value":2820},{"type":43,"tag":365,"props":2981,"children":2982},{"style":2774},[2983],{"type":49,"value":2825},{"type":43,"tag":365,"props":2985,"children":2986},{"style":1378},[2987],{"type":49,"value":2806},{"type":43,"tag":365,"props":2989,"children":2990},{"style":1392},[2991],{"type":49,"value":1415},{"type":43,"tag":365,"props":2993,"children":2994},{"style":2745},[2995],{"type":49,"value":2996},"toLocaleString",{"type":43,"tag":365,"props":2998,"children":2999},{"style":2522},[3000],{"type":49,"value":2753},{"type":43,"tag":365,"props":3002,"children":3003},{"style":1392},[3004],{"type":49,"value":2840},{"type":43,"tag":365,"props":3006,"children":3007},{"style":1367},[3008],{"type":49,"value":3009},"en-US",{"type":43,"tag":365,"props":3011,"children":3012},{"style":1392},[3013],{"type":49,"value":2840},{"type":43,"tag":365,"props":3015,"children":3016},{"style":1392},[3017],{"type":49,"value":3018},",",{"type":43,"tag":365,"props":3020,"children":3021},{"style":1392},[3022],{"type":49,"value":3023}," {",{"type":43,"tag":365,"props":3025,"children":3026},{"style":2522},[3027],{"type":49,"value":3028},"minimumFractionDigits",{"type":43,"tag":365,"props":3030,"children":3031},{"style":1392},[3032],{"type":49,"value":2262},{"type":43,"tag":365,"props":3034,"children":3035},{"style":2889},[3036],{"type":49,"value":3037}," 2",{"type":43,"tag":365,"props":3039,"children":3040},{"style":1392},[3041],{"type":49,"value":3018},{"type":43,"tag":365,"props":3043,"children":3044},{"style":2522},[3045],{"type":49,"value":3046}," maximumFractionDigits",{"type":43,"tag":365,"props":3048,"children":3049},{"style":1392},[3050],{"type":49,"value":2262},{"type":43,"tag":365,"props":3052,"children":3053},{"style":2889},[3054],{"type":49,"value":3055}," 3",{"type":43,"tag":365,"props":3057,"children":3058},{"style":1392},[3059],{"type":49,"value":3060},"}",{"type":43,"tag":365,"props":3062,"children":3063},{"style":2522},[3064],{"type":49,"value":1076},{"type":43,"tag":365,"props":3066,"children":3067},{"style":1392},[3068],{"type":49,"value":2845},{"type":43,"tag":365,"props":3070,"children":3071},{"class":367,"line":404},[3072,3077,3081,3085,3090,3094,3099,3103],{"type":43,"tag":365,"props":3073,"children":3074},{"style":2774},[3075],{"type":49,"value":3076},"  return",{"type":43,"tag":365,"props":3078,"children":3079},{"style":1378},[3080],{"type":49,"value":2806},{"type":43,"tag":365,"props":3082,"children":3083},{"style":1392},[3084],{"type":49,"value":1415},{"type":43,"tag":365,"props":3086,"children":3087},{"style":2745},[3088],{"type":49,"value":3089},"toFixed",{"type":43,"tag":365,"props":3091,"children":3092},{"style":2522},[3093],{"type":49,"value":2753},{"type":43,"tag":365,"props":3095,"children":3096},{"style":2889},[3097],{"type":49,"value":3098},"3",{"type":43,"tag":365,"props":3100,"children":3101},{"style":2522},[3102],{"type":49,"value":1076},{"type":43,"tag":365,"props":3104,"children":3105},{"style":1392},[3106],{"type":49,"value":2845},{"type":43,"tag":365,"props":3108,"children":3109},{"class":367,"line":413},[3110],{"type":43,"tag":365,"props":3111,"children":3112},{"style":1392},[3113],{"type":49,"value":536},{"type":43,"tag":287,"props":3115,"children":3117},{"id":3116},"fiat-values",[3118],{"type":49,"value":3119},"Fiat values",{"type":43,"tag":109,"props":3121,"children":3122},{},[3123,3141,3157,3170],{"type":43,"tag":113,"props":3124,"children":3125},{},[3126,3128,3133,3135],{"type":49,"value":3127},"Shown in ",{"type":43,"tag":65,"props":3129,"children":3130},{},[3131],{"type":49,"value":3132},"parentheses",{"type":49,"value":3134}," next to every token amount: ",{"type":43,"tag":228,"props":3136,"children":3138},{"className":3137},[],[3139],{"type":49,"value":3140},"846,492.356 ($17,562.21)",{"type":43,"tag":113,"props":3142,"children":3143},{},[3144,3145,3149,3151],{"type":49,"value":3127},{"type":43,"tag":65,"props":3146,"children":3147},{},[3148],{"type":49,"value":3132},{"type":49,"value":3150}," next to every delta %: ",{"type":43,"tag":228,"props":3152,"children":3154},{"className":3153},[],[3155],{"type":49,"value":3156},"5.33% ($81.21)",{"type":43,"tag":113,"props":3158,"children":3159},{},[3160,3162,3168],{"type":49,"value":3161},"Format: ",{"type":43,"tag":228,"props":3163,"children":3165},{"className":3164},[],[3166],{"type":49,"value":3167},"($X,XXX.XX)",{"type":49,"value":3169}," — always 2 decimal places, comma-separated thousands",{"type":43,"tag":113,"props":3171,"children":3172},{},[3173],{"type":49,"value":3174},"Null\u002Fmissing: omit entirely (no empty parentheses)",{"type":43,"tag":287,"props":3176,"children":3178},{"id":3177},"fiat-value-computation-critical",[3179],{"type":49,"value":3180},"Fiat value computation — CRITICAL",{"type":43,"tag":59,"props":3182,"children":3183},{},[3184,3189,3191,3196],{"type":43,"tag":65,"props":3185,"children":3186},{},[3187],{"type":49,"value":3188},"Use a single price source",{"type":49,"value":3190}," (DeBank's token price) to compute fiat values for ",{"type":43,"tag":65,"props":3192,"children":3193},{},[3194],{"type":49,"value":3195},"both",{"type":49,"value":3197}," the TRES and DeBank columns. This ensures:",{"type":43,"tag":109,"props":3199,"children":3200},{},[3201,3206],{"type":43,"tag":113,"props":3202,"children":3203},{},[3204],{"type":49,"value":3205},"When amounts match, the fiat delta is $0 (not inflated by pricing source differences)",{"type":43,"tag":113,"props":3207,"children":3208},{},[3209],{"type":49,"value":3210},"The fiat delta next to delta % represents the actual USD value of the amount discrepancy",{"type":43,"tag":354,"props":3212,"children":3214},{"className":2151,"code":3213,"language":2153,"meta":359,"style":359},"# For regular tokens:\nprice = debank_token['price']  # single source\ntres_fiat = tres_amount * price\ndebank_fiat = debank_amount * price\ndelta_fiat = abs(tres_amount - debank_amount) * price\n\n# For position tokens — same principle:\nprice = debank_asset_token['price']\ntres_fiat = tres_aggregated_amount * price\ndebank_fiat = debank_amount * price\ndelta_fiat = abs(tres_aggregated_amount - debank_amount) * price\n",[3215],{"type":43,"tag":228,"props":3216,"children":3217},{"__ignoreMap":359},[3218,3226,3234,3242,3250,3258,3265,3273,3281,3289,3296],{"type":43,"tag":365,"props":3219,"children":3220},{"class":367,"line":368},[3221],{"type":43,"tag":365,"props":3222,"children":3223},{},[3224],{"type":49,"value":3225},"# For regular tokens:\n",{"type":43,"tag":365,"props":3227,"children":3228},{"class":367,"line":377},[3229],{"type":43,"tag":365,"props":3230,"children":3231},{},[3232],{"type":49,"value":3233},"price = debank_token['price']  # single source\n",{"type":43,"tag":365,"props":3235,"children":3236},{"class":367,"line":386},[3237],{"type":43,"tag":365,"props":3238,"children":3239},{},[3240],{"type":49,"value":3241},"tres_fiat = tres_amount * price\n",{"type":43,"tag":365,"props":3243,"children":3244},{"class":367,"line":395},[3245],{"type":43,"tag":365,"props":3246,"children":3247},{},[3248],{"type":49,"value":3249},"debank_fiat = debank_amount * price\n",{"type":43,"tag":365,"props":3251,"children":3252},{"class":367,"line":404},[3253],{"type":43,"tag":365,"props":3254,"children":3255},{},[3256],{"type":49,"value":3257},"delta_fiat = abs(tres_amount - debank_amount) * price\n",{"type":43,"tag":365,"props":3259,"children":3260},{"class":367,"line":413},[3261],{"type":43,"tag":365,"props":3262,"children":3263},{"emptyLinePlaceholder":1483},[3264],{"type":49,"value":1486},{"type":43,"tag":365,"props":3266,"children":3267},{"class":367,"line":422},[3268],{"type":43,"tag":365,"props":3269,"children":3270},{},[3271],{"type":49,"value":3272},"# For position tokens — same principle:\n",{"type":43,"tag":365,"props":3274,"children":3275},{"class":367,"line":431},[3276],{"type":43,"tag":365,"props":3277,"children":3278},{},[3279],{"type":49,"value":3280},"price = debank_asset_token['price']\n",{"type":43,"tag":365,"props":3282,"children":3283},{"class":367,"line":440},[3284],{"type":43,"tag":365,"props":3285,"children":3286},{},[3287],{"type":49,"value":3288},"tres_fiat = tres_aggregated_amount * price\n",{"type":43,"tag":365,"props":3290,"children":3291},{"class":367,"line":449},[3292],{"type":43,"tag":365,"props":3293,"children":3294},{},[3295],{"type":49,"value":3249},{"type":43,"tag":365,"props":3297,"children":3298},{"class":367,"line":458},[3299],{"type":43,"tag":365,"props":3300,"children":3301},{},[3302],{"type":49,"value":3303},"delta_fiat = abs(tres_aggregated_amount - debank_amount) * price\n",{"type":43,"tag":59,"props":3305,"children":3306},{},[3307,3312,3314,3320],{"type":43,"tag":65,"props":3308,"children":3309},{},[3310],{"type":49,"value":3311},"Do NOT",{"type":49,"value":3313}," use TRES ",{"type":43,"tag":228,"props":3315,"children":3317},{"className":3316},[],[3318],{"type":49,"value":3319},"fiatValue",{"type":49,"value":3321}," for the TRES column and DeBank price for the DeBank column — this creates misleading fiat deltas when TRES and DeBank use different token prices.",{"type":43,"tag":94,"props":3323,"children":3324},{},[],{"type":43,"tag":52,"props":3326,"children":3328},{"id":3327},"native-token-matching-multi-chain-wallets",[3329],{"type":49,"value":3330},"Native Token Matching (Multi-Chain Wallets)",{"type":43,"tag":59,"props":3332,"children":3333},{},[3334,3336,3341,3343,3348,3350,3355],{"type":49,"value":3335},"Native tokens (ETH, BNB, etc.) often appear on multiple chains in TRES for a single\nwallet (e.g., ETH on Ethereum + ETH on Arbitrum). DeBank's ",{"type":43,"tag":228,"props":3337,"children":3339},{"className":3338},[],[3340],{"type":49,"value":1292},{"type":49,"value":3342}," returns\n",{"type":43,"tag":65,"props":3344,"children":3345},{},[3346],{"type":49,"value":3347},"separate per-chain entries",{"type":49,"value":3349}," with a ",{"type":43,"tag":228,"props":3351,"children":3353},{"className":3352},[],[3354],{"type":49,"value":1654},{"type":49,"value":3356}," field — it does NOT aggregate them.",{"type":43,"tag":59,"props":3358,"children":3359},{},[3360],{"type":43,"tag":65,"props":3361,"children":3362},{},[3363],{"type":49,"value":3364},"Rule: match per-chain first, aggregate only as a last resort.",{"type":43,"tag":1103,"props":3366,"children":3367},{},[3368,3393],{"type":43,"tag":113,"props":3369,"children":3370},{},[3371,3376,3378,3384,3386,3392],{"type":43,"tag":65,"props":3372,"children":3373},{},[3374],{"type":49,"value":3375},"Per-chain match (default):",{"type":49,"value":3377}," For each TRES native token balance, use the balance's\nplatform context to find the corresponding DeBank entry by symbol + chain. For example,\na wallet with 0.00956 ETH on Ethereum and 0.001168 ETH on Arbitrum should produce two\nseparate comparison rows — one matched to DeBank's ",{"type":43,"tag":228,"props":3379,"children":3381},{"className":3380},[],[3382],{"type":49,"value":3383},"chain: \"eth\"",{"type":49,"value":3385}," entry and one to\n",{"type":43,"tag":228,"props":3387,"children":3389},{"className":3388},[],[3390],{"type":49,"value":3391},"chain: \"arb\"",{"type":49,"value":1415},{"type":43,"tag":113,"props":3394,"children":3395},{},[3396,3401,3403,3409],{"type":43,"tag":65,"props":3397,"children":3398},{},[3399],{"type":49,"value":3400},"Aggregation fallback (rare):",{"type":49,"value":3402}," Only aggregate TRES balances across chains when\nDeBank returns fewer entries than TRES for the same symbol. This can happen if DeBank\nmerges certain bridged token balances. When aggregating, add a note like\n",{"type":43,"tag":228,"props":3404,"children":3406},{"className":3405},[],[3407],{"type":49,"value":3408},"\"Aggregated: ETH (eth) + ETH (arb)\"",{"type":49,"value":1415},{"type":43,"tag":59,"props":3411,"children":3412},{},[3413,3418],{"type":43,"tag":65,"props":3414,"children":3415},{},[3416],{"type":49,"value":3417},"Why this matters:",{"type":49,"value":3419}," Blindly aggregating before comparing creates false discrepancies.\nIf Ethereum ETH matches perfectly but Arbitrum ETH has a gap, aggregation masks the\nEthereum match and produces a single misleading delta. Per-chain matching preserves\ngranularity and makes it easy to identify exactly which chain is out of sync.",{"type":43,"tag":94,"props":3421,"children":3422},{},[],{"type":43,"tag":52,"props":3424,"children":3426},{"id":3425},"status-badges",[3427],{"type":49,"value":3428},"Status Badges",{"type":43,"tag":187,"props":3430,"children":3431},{},[3432,3458],{"type":43,"tag":191,"props":3433,"children":3434},{},[3435],{"type":43,"tag":195,"props":3436,"children":3437},{},[3438,3443,3448,3453],{"type":43,"tag":199,"props":3439,"children":3440},{},[3441],{"type":49,"value":3442},"Badge",{"type":43,"tag":199,"props":3444,"children":3445},{},[3446],{"type":49,"value":3447},"Color",{"type":43,"tag":199,"props":3449,"children":3450},{},[3451],{"type":49,"value":3452},"Hex",{"type":43,"tag":199,"props":3454,"children":3455},{},[3456],{"type":49,"value":3457},"Meaning",{"type":43,"tag":210,"props":3459,"children":3460},{},[3461,3491,3521,3551,3581,3611],{"type":43,"tag":195,"props":3462,"children":3463},{},[3464,3472,3477,3486],{"type":43,"tag":217,"props":3465,"children":3466},{},[3467],{"type":43,"tag":65,"props":3468,"children":3469},{},[3470],{"type":49,"value":3471},"Match",{"type":43,"tag":217,"props":3473,"children":3474},{},[3475],{"type":49,"value":3476},"Green",{"type":43,"tag":217,"props":3478,"children":3479},{},[3480],{"type":43,"tag":228,"props":3481,"children":3483},{"className":3482},[],[3484],{"type":49,"value":3485},"#22c55e",{"type":43,"tag":217,"props":3487,"children":3488},{},[3489],{"type":49,"value":3490},"Delta \u003C 1%",{"type":43,"tag":195,"props":3492,"children":3493},{},[3494,3502,3507,3516],{"type":43,"tag":217,"props":3495,"children":3496},{},[3497],{"type":43,"tag":65,"props":3498,"children":3499},{},[3500],{"type":49,"value":3501},"Minor",{"type":43,"tag":217,"props":3503,"children":3504},{},[3505],{"type":49,"value":3506},"Orange",{"type":43,"tag":217,"props":3508,"children":3509},{},[3510],{"type":43,"tag":228,"props":3511,"children":3513},{"className":3512},[],[3514],{"type":49,"value":3515},"#f59e0b",{"type":43,"tag":217,"props":3517,"children":3518},{},[3519],{"type":49,"value":3520},"Delta 1–10%",{"type":43,"tag":195,"props":3522,"children":3523},{},[3524,3532,3537,3546],{"type":43,"tag":217,"props":3525,"children":3526},{},[3527],{"type":43,"tag":65,"props":3528,"children":3529},{},[3530],{"type":49,"value":3531},"Major",{"type":43,"tag":217,"props":3533,"children":3534},{},[3535],{"type":49,"value":3536},"Red",{"type":43,"tag":217,"props":3538,"children":3539},{},[3540],{"type":43,"tag":228,"props":3541,"children":3543},{"className":3542},[],[3544],{"type":49,"value":3545},"#ef4444",{"type":43,"tag":217,"props":3547,"children":3548},{},[3549],{"type":49,"value":3550},"Delta > 10%",{"type":43,"tag":195,"props":3552,"children":3553},{},[3554,3562,3567,3576],{"type":43,"tag":217,"props":3555,"children":3556},{},[3557],{"type":43,"tag":65,"props":3558,"children":3559},{},[3560],{"type":49,"value":3561},"Missing",{"type":43,"tag":217,"props":3563,"children":3564},{},[3565],{"type":49,"value":3566},"Grey",{"type":43,"tag":217,"props":3568,"children":3569},{},[3570],{"type":43,"tag":228,"props":3571,"children":3573},{"className":3572},[],[3574],{"type":49,"value":3575},"#6b7280",{"type":43,"tag":217,"props":3577,"children":3578},{},[3579],{"type":49,"value":3580},"Asset in TRES but not found in DeBank",{"type":43,"tag":195,"props":3582,"children":3583},{},[3584,3592,3597,3606],{"type":43,"tag":217,"props":3585,"children":3586},{},[3587],{"type":43,"tag":65,"props":3588,"children":3589},{},[3590],{"type":49,"value":3591},"Untracked",{"type":43,"tag":217,"props":3593,"children":3594},{},[3595],{"type":49,"value":3596},"Blue",{"type":43,"tag":217,"props":3598,"children":3599},{},[3600],{"type":43,"tag":228,"props":3601,"children":3603},{"className":3602},[],[3604],{"type":49,"value":3605},"#3b82f6",{"type":43,"tag":217,"props":3607,"children":3608},{},[3609],{"type":49,"value":3610},"Asset in DeBank but not tracked in TRES",{"type":43,"tag":195,"props":3612,"children":3613},{},[3614,3622,3627,3635],{"type":43,"tag":217,"props":3615,"children":3616},{},[3617],{"type":43,"tag":65,"props":3618,"children":3619},{},[3620],{"type":49,"value":3621},"Position",{"type":43,"tag":217,"props":3623,"children":3624},{},[3625],{"type":49,"value":3626},"Purple",{"type":43,"tag":217,"props":3628,"children":3629},{},[3630],{"type":43,"tag":228,"props":3631,"children":3633},{"className":3632},[],[3634],{"type":49,"value":2500},{"type":43,"tag":217,"props":3636,"children":3637},{},[3638],{"type":49,"value":3639},"DeFi position token (with or without TRES data)",{"type":43,"tag":94,"props":3641,"children":3642},{},[],{"type":43,"tag":52,"props":3644,"children":3646},{"id":3645},"report-sections",[3647],{"type":49,"value":3648},"Report Sections",{"type":43,"tag":59,"props":3650,"children":3651},{},[3652],{"type":49,"value":3653},"The rendered report (both HTML and PDF) includes:",{"type":43,"tag":1103,"props":3655,"children":3656},{},[3657,3667,3677,3709,3719],{"type":43,"tag":113,"props":3658,"children":3659},{},[3660,3665],{"type":43,"tag":65,"props":3661,"children":3662},{},[3663],{"type":49,"value":3664},"Summary cards",{"type":49,"value":3666}," — Wallets checked, assets compared, matched, minor, major, missing, untracked, positions, and match rate %",{"type":43,"tag":113,"props":3668,"children":3669},{},[3670,3675],{"type":43,"tag":65,"props":3671,"children":3672},{},[3673],{"type":49,"value":3674},"Filter bar",{"type":49,"value":3676}," (HTML only) — Buttons to filter by status: All, Match, Minor, Major, Missing, Untracked, Position",{"type":43,"tag":113,"props":3678,"children":3679},{},[3680,3685,3687],{"type":43,"tag":65,"props":3681,"children":3682},{},[3683],{"type":49,"value":3684},"Per-wallet card",{"type":49,"value":3686}," containing:\n",{"type":43,"tag":109,"props":3688,"children":3689},{},[3690,3700],{"type":43,"tag":113,"props":3691,"children":3692},{},[3693,3698],{"type":43,"tag":65,"props":3694,"children":3695},{},[3696],{"type":49,"value":3697},"DeFi Positions box",{"type":49,"value":3699}," (purple-themed, at top) — Position assets with purple dot indicator, protocol label, dual status badges",{"type":43,"tag":113,"props":3701,"children":3702},{},[3703,3707],{"type":43,"tag":65,"props":3704,"children":3705},{},[3706],{"type":49,"value":2474},{"type":49,"value":3708}," — Each asset with symbol, chain, TRES amount (+ fiat), DeBank amount (+ fiat), delta % (+ fiat delta), status badge",{"type":43,"tag":113,"props":3710,"children":3711},{},[3712,3717],{"type":43,"tag":65,"props":3713,"children":3714},{},[3715],{"type":49,"value":3716},"Skipped wallets",{"type":49,"value":3718}," — List of wallets not validated and the reason why",{"type":43,"tag":113,"props":3720,"children":3721},{},[3722,3727],{"type":43,"tag":65,"props":3723,"children":3724},{},[3725],{"type":49,"value":3726},"Notes & Caveats",{"type":49,"value":3728}," — Sync lag, DeFi positions explanation, native token aggregation, price filter, missing\u002Funtracked explanations",{"type":43,"tag":94,"props":3730,"children":3731},{},[],{"type":43,"tag":52,"props":3733,"children":3735},{"id":3734},"important-caveats",[3736],{"type":49,"value":3737},"Important Caveats",{"type":43,"tag":109,"props":3739,"children":3740},{},[3741,3751,3761,3778,3795,3813,3823],{"type":43,"tag":113,"props":3742,"children":3743},{},[3744,3749],{"type":43,"tag":65,"props":3745,"children":3746},{},[3747],{"type":49,"value":3748},"Sync lag:",{"type":49,"value":3750}," TRES balances reflect the last sync time. Recent on-chain activity may show as a discrepancy.",{"type":43,"tag":113,"props":3752,"children":3753},{},[3754,3759],{"type":43,"tag":65,"props":3755,"children":3756},{},[3757],{"type":49,"value":3758},"DeFi positions:",{"type":49,"value":3760}," Underlying tokens from LP, staking, and lending positions are shown as individual rows in a dedicated purple section. Both TRES and DeBank amounts are compared where TRES position data is available. Active LP positions will naturally show some discrepancy because TRES and DeBank snapshot at different times.",{"type":43,"tag":113,"props":3762,"children":3763},{},[3764,3769,3771,3776],{"type":43,"tag":65,"props":3765,"children":3766},{},[3767],{"type":49,"value":3768},"Native token matching:",{"type":49,"value":3770}," ETH, BNB, etc. are matched per-chain first (using DeBank's ",{"type":43,"tag":228,"props":3772,"children":3774},{"className":3773},[],[3775],{"type":49,"value":1654},{"type":49,"value":3777}," field mapped to TRES platforms). Multi-chain balances are only aggregated as a fallback when DeBank returns fewer entries than TRES for the same symbol.",{"type":43,"tag":113,"props":3779,"children":3780},{},[3781,3786,3788,3793],{"type":43,"tag":65,"props":3782,"children":3783},{},[3784],{"type":49,"value":3785},"Multi-chain coverage:",{"type":49,"value":3787}," DeBank ",{"type":43,"tag":228,"props":3789,"children":3791},{"className":3790},[],[3792],{"type":49,"value":1292},{"type":49,"value":3794}," covers all chains; tokens on chains not configured in TRES appear as \"Untracked.\"",{"type":43,"tag":113,"props":3796,"children":3797},{},[3798,3803,3805,3811],{"type":43,"tag":65,"props":3799,"children":3800},{},[3801],{"type":49,"value":3802},"Price filter:",{"type":49,"value":3804}," Tokens with ",{"type":43,"tag":228,"props":3806,"children":3808},{"className":3807},[],[3809],{"type":49,"value":3810},"price \u003C $0.01",{"type":49,"value":3812}," (zero-price, null, or micro-cap) are excluded from all reports.",{"type":43,"tag":113,"props":3814,"children":3815},{},[3816,3821],{"type":43,"tag":65,"props":3817,"children":3818},{},[3819],{"type":49,"value":3820},"Missing in DeBank:",{"type":49,"value":3822}," Typically spam\u002Fairdrop tokens (HEX, ASCZBR, etc.) that DeBank filters out.",{"type":43,"tag":113,"props":3824,"children":3825},{},[3826,3831],{"type":43,"tag":65,"props":3827,"children":3828},{},[3829],{"type":49,"value":3830},"Untracked in TRES:",{"type":49,"value":3832}," Tokens on chains not configured in TRES, or small dust amounts.",{"type":43,"tag":94,"props":3834,"children":3835},{},[],{"type":43,"tag":52,"props":3837,"children":3839},{"id":3838},"error-handling",[3840],{"type":49,"value":3841},"Error Handling",{"type":43,"tag":187,"props":3843,"children":3844},{},[3845,3861],{"type":43,"tag":191,"props":3846,"children":3847},{},[3848],{"type":43,"tag":195,"props":3849,"children":3850},{},[3851,3856],{"type":43,"tag":199,"props":3852,"children":3853},{},[3854],{"type":49,"value":3855},"Situation",{"type":43,"tag":199,"props":3857,"children":3858},{},[3859],{"type":49,"value":3860},"Response",{"type":43,"tag":210,"props":3862,"children":3863},{},[3864,3884,3903,3916,3929,3953,3978,3991],{"type":43,"tag":195,"props":3865,"children":3866},{},[3867,3879],{"type":43,"tag":217,"props":3868,"children":3869},{},[3870,3871,3877],{"type":49,"value":1717},{"type":43,"tag":228,"props":3872,"children":3874},{"className":3873},[],[3875],{"type":49,"value":3876},"401",{"type":49,"value":3878}," error",{"type":43,"tag":217,"props":3880,"children":3881},{},[3882],{"type":49,"value":3883},"Display \"Invalid API key\" in artifact",{"type":43,"tag":195,"props":3885,"children":3886},{},[3887,3898],{"type":43,"tag":217,"props":3888,"children":3889},{},[3890,3891,3897],{"type":49,"value":1717},{"type":43,"tag":228,"props":3892,"children":3894},{"className":3893},[],[3895],{"type":49,"value":3896},"429",{"type":49,"value":3878},{"type":43,"tag":217,"props":3899,"children":3900},{},[3901],{"type":49,"value":3902},"Display \"Rate limited — reload in 60s\"",{"type":43,"tag":195,"props":3904,"children":3905},{},[3906,3911],{"type":43,"tag":217,"props":3907,"children":3908},{},[3909],{"type":49,"value":3910},"Empty token list for non-empty wallet",{"type":43,"tag":217,"props":3912,"children":3913},{},[3914],{"type":49,"value":3915},"Flag wallet as suspicious",{"type":43,"tag":195,"props":3917,"children":3918},{},[3919,3924],{"type":43,"tag":217,"props":3920,"children":3921},{},[3922],{"type":49,"value":3923},"Non-EVM wallet",{"type":43,"tag":217,"props":3925,"children":3926},{},[3927],{"type":49,"value":3928},"Skip and list in \"Skipped wallets\" section",{"type":43,"tag":195,"props":3930,"children":3931},{},[3932,3942],{"type":43,"tag":217,"props":3933,"children":3934},{},[3935,3940],{"type":43,"tag":228,"props":3936,"children":3938},{"className":3937},[],[3939],{"type":49,"value":326},{"type":49,"value":3941}," positions timeout",{"type":43,"tag":217,"props":3943,"children":3944},{},[3945,3946,3951],{"type":49,"value":1321},{"type":43,"tag":228,"props":3947,"children":3949},{"className":3948},[],[3950],{"type":49,"value":740},{"type":49,"value":3952}," per wallet\u002Fplatform\u002Fapplication instead",{"type":43,"tag":195,"props":3954,"children":3955},{},[3956,3966],{"type":43,"tag":217,"props":3957,"children":3958},{},[3959,3964],{"type":43,"tag":228,"props":3960,"children":3962},{"className":3961},[],[3963],{"type":49,"value":740},{"type":49,"value":3965}," returns empty",{"type":43,"tag":217,"props":3967,"children":3968},{},[3969,3971,3976],{"type":49,"value":3970},"Ensure ",{"type":43,"tag":228,"props":3972,"children":3974},{"className":3973},[],[3975],{"type":49,"value":989},{"type":49,"value":3977}," parameter is provided; without it the query returns empty",{"type":43,"tag":195,"props":3979,"children":3980},{},[3981,3986],{"type":43,"tag":217,"props":3982,"children":3983},{},[3984],{"type":49,"value":3985},"Position ID not extractable",{"type":43,"tag":217,"props":3987,"children":3988},{},[3989],{"type":49,"value":3990},"Skip that position (don't crash)",{"type":43,"tag":195,"props":3992,"children":3993},{},[3994,4004],{"type":43,"tag":217,"props":3995,"children":3996},{},[3997,4002],{"type":43,"tag":228,"props":3998,"children":4000},{"className":3999},[],[4001],{"type":49,"value":554},{"type":49,"value":4003}," field is string not number",{"type":43,"tag":217,"props":4005,"children":4006},{},[4007,4009,4014],{"type":49,"value":4008},"Always cast with ",{"type":43,"tag":228,"props":4010,"children":4012},{"className":4011},[],[4013],{"type":49,"value":569},{"type":49,"value":4015}," before arithmetic",{"type":43,"tag":94,"props":4017,"children":4018},{},[],{"type":43,"tag":52,"props":4020,"children":4022},{"id":4021},"next-steps-after-report-renders",[4023],{"type":49,"value":4024},"Next Steps (after report renders)",{"type":43,"tag":109,"props":4026,"children":4027},{},[4028,4038,4048],{"type":43,"tag":113,"props":4029,"children":4030},{},[4031,4036],{"type":43,"tag":65,"props":4032,"children":4033},{},[4034],{"type":49,"value":4035},"Re-run",{"type":49,"value":4037}," — Rebuild the report with fresh data at any time",{"type":43,"tag":113,"props":4039,"children":4040},{},[4041,4046],{"type":43,"tag":65,"props":4042,"children":4043},{},[4044],{"type":49,"value":4045},"Drill down",{"type":49,"value":4047}," — For any Major discrepancy, inspect the specific asset across platforms in TRES to identify which chain is out of sync",{"type":43,"tag":113,"props":4049,"children":4050},{},[4051,4056],{"type":43,"tag":65,"props":4052,"children":4053},{},[4054],{"type":49,"value":4055},"Position discrepancies",{"type":49,"value":4057}," — Minor discrepancies on active LP positions are expected due to different snapshot times between TRES and DeBank",{"type":43,"tag":4059,"props":4060,"children":4061},"style",{},[4062],{"type":49,"value":4063},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":4065,"total":4165},[4066,4085,4102,4116,4128,4140,4152],{"slug":4067,"name":4067,"fn":4068,"description":4069,"org":4070,"tags":4071,"stars":26,"repoUrl":27,"updatedAt":4084},"quickdesign","generate AI media assets","Use the `quickdesign` CLI to generate AI media — UGC promo videos, image edits, product creatives, video upscales — through Seedance, Kling, Sora2, Nano Banana, and GPT Image. Invoke this skill whenever the user asks for a talking-avatar video, multi-segment ad \u002F promo \u002F explainer, image edit (object swap, angle change, state change), product photoshoot, or video upscale via QuickDesign.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4072,4075,4078,4081],{"name":4073,"slug":4074,"type":16},"Creative","creative",{"name":4076,"slug":4077,"type":16},"Image Generation","image-generation",{"name":4079,"slug":4080,"type":16},"Marketing","marketing",{"name":4082,"slug":4083,"type":16},"Video","video","2026-07-01T08:09:32.316182",{"slug":4086,"name":4086,"fn":4087,"description":4088,"org":4089,"tags":4090,"stars":26,"repoUrl":27,"updatedAt":4101},"testdino-audit","audit Playwright test code","Use only when the user explicitly asks for a TestDino audit of Playwright automated test code. Routes through the audit tools the TestDino MCP server exposes (get_audit_report + submit_audit_report, or the legacy test_audit). For generic code review or non-Playwright targets, do a normal review instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4091,4092,4095,4098],{"name":18,"slug":19,"type":16},{"name":4093,"slug":4094,"type":16},"Code Analysis","code-analysis",{"name":4096,"slug":4097,"type":16},"Playwright","playwright",{"name":4099,"slug":4100,"type":16},"Testing","testing","2026-07-02T07:37:17.341081",{"slug":4103,"name":4103,"fn":4104,"description":4105,"org":4106,"tags":4107,"stars":26,"repoUrl":27,"updatedAt":4115},"testdino-health","manage TestDino connection status","Use when the user wants to check TestDino connection status, validate their PAT, discover available organizations and projects, or find the right projectId. Always call this first when the project context is ambiguous before any other TestDino tool.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4108,4111,4114],{"name":4109,"slug":4110,"type":16},"Monitoring","monitoring",{"name":4112,"slug":4113,"type":16},"QA","qa",{"name":4099,"slug":4100,"type":16},"2026-07-02T07:37:18.566504",{"slug":4117,"name":4117,"fn":4118,"description":4119,"org":4120,"tags":4121,"stars":26,"repoUrl":27,"updatedAt":4127},"testdino-manual-runs","manage manual QA execution runs in TestDino","Use when the user wants to manage a manual execution run or update case-level results inside a run — listing runs, creating runs for a release, inspecting a run, assigning cases, or marking case results (passed\u002Ffailed\u002Fblocked\u002Fskipped\u002Fretest\u002Funtested). Accepts counter-style IDs like RUN-12 and TC-156.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4122,4125,4126],{"name":4123,"slug":4124,"type":16},"Operations","operations",{"name":4112,"slug":4113,"type":16},{"name":4099,"slug":4100,"type":16},"2026-07-02T07:37:23.446065",{"slug":4129,"name":4129,"fn":4130,"description":4131,"org":4132,"tags":4133,"stars":26,"repoUrl":27,"updatedAt":4139},"testdino-manual-tests","manage manual QA test cases in TestDino","Use when the user wants to create, update, or browse manual QA test cases and suites in TestDino — not execution runs. Covers list_manual_test_suites, list_manual_test_cases, get_manual_test_case, create_manual_test_case, update_manual_test_case, create_manual_test_suite.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4134,4137,4138],{"name":4135,"slug":4136,"type":16},"Documentation","documentation",{"name":4112,"slug":4113,"type":16},{"name":4099,"slug":4100,"type":16},"2026-07-02T07:37:22.247052",{"slug":4141,"name":4141,"fn":4142,"description":4143,"org":4144,"tags":4145,"stars":26,"repoUrl":27,"updatedAt":4151},"testdino-releases","manage TestDino releases and milestones","Use when the user wants to browse, inspect, create, or update releases\u002Fmilestones in a TestDino project. Covers list_releases, get_release, create_release, and update_release. Accepts counter-style IDs like MS-12.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4146,4149,4150],{"name":4147,"slug":4148,"type":16},"Project Management","project-management",{"name":4112,"slug":4113,"type":16},{"name":4099,"slug":4100,"type":16},"2026-07-02T07:37:19.793846",{"slug":4153,"name":4153,"fn":4154,"description":4155,"org":4156,"tags":4157,"stars":26,"repoUrl":27,"updatedAt":4164},"testdino-runs","inspect automated test runs","Use when the user wants to inspect automated test runs, list failed or flaky tests, debug a failing testcase with historical context, or filter runs by branch, commit, author, environment, browser, status, or tags. Includes list_testruns, get_run_details, list_testcase, get_testcase_details, and debug_testcase.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4158,4161,4162,4163],{"name":4159,"slug":4160,"type":16},"Debugging","debugging",{"name":4096,"slug":4097,"type":16},{"name":4112,"slug":4113,"type":16},{"name":4099,"slug":4100,"type":16},"2026-07-02T07:37:16.07175",30,{"items":4167,"total":4349},[4168,4186,4200,4212,4231,4242,4263,4283,4297,4312,4320,4333],{"slug":4169,"name":4169,"fn":4170,"description":4171,"org":4172,"tags":4173,"stars":4183,"repoUrl":4184,"updatedAt":4185},"algorithmic-art","create algorithmic art with p5.js","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4174,4175,4178,4181],{"name":4073,"slug":4074,"type":16},{"name":4176,"slug":4177,"type":16},"Design","design",{"name":4179,"slug":4180,"type":16},"Generative Art","generative-art",{"name":4182,"slug":2730,"type":16},"JavaScript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":4187,"name":4187,"fn":4188,"description":4189,"org":4190,"tags":4191,"stars":4183,"repoUrl":4184,"updatedAt":4199},"brand-guidelines","apply Anthropic brand colors and typography","Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4192,4195,4196],{"name":4193,"slug":4194,"type":16},"Branding","branding",{"name":4176,"slug":4177,"type":16},{"name":4197,"slug":4198,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":4201,"name":4201,"fn":4202,"description":4203,"org":4204,"tags":4205,"stars":4183,"repoUrl":4184,"updatedAt":4211},"canvas-design","create posters and visual art as PNG or PDF","Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4206,4207,4208],{"name":4073,"slug":4074,"type":16},{"name":4176,"slug":4177,"type":16},{"name":4209,"slug":4210,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":4213,"name":4213,"fn":4214,"description":4215,"org":4216,"tags":4217,"stars":4183,"repoUrl":4184,"updatedAt":4230},"claude-api","build apps with the Claude API","Reference for the Claude API \u002F Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\nTRIGGER — read BEFORE opening the target file; don't skip because it \"looks like a one-liner\" — whenever: the prompt names Claude\u002FAnthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing\u002Fmodel choice\u002Flimits\u002Fcaching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent\u002FMCP\u002Ftool-definition\u002Fmulti-agent\u002FRAG\u002FLLM-judge\u002Fcomputer-use; generate\u002Fsummarize\u002Fextract\u002Fclassify\u002Frewrite\u002Fconverse over NL; debugging refusals\u002Fcutoffs\u002Fstreaming\u002Ftool-calls\u002Ftokens).\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI\u002FGPT\u002FGemini\u002FLlama\u002FMistral\u002FCohere\u002FOllama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4218,4221,4222,4225,4227],{"name":4219,"slug":4220,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":4223,"slug":4224,"type":16},"Anthropic SDK","anthropic-sdk",{"name":4226,"slug":4213,"type":16},"Claude API",{"name":4228,"slug":4229,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":4232,"name":4232,"fn":4233,"description":4234,"org":4235,"tags":4236,"stars":4183,"repoUrl":4184,"updatedAt":4241},"doc-coauthoring","co-author documentation and technical specs","Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4237,4238],{"name":4135,"slug":4136,"type":16},{"name":4239,"slug":4240,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":4243,"name":4243,"fn":4244,"description":4245,"org":4246,"tags":4247,"stars":4183,"repoUrl":4184,"updatedAt":4262},"docx","create and edit Word documents","Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4248,4251,4253,4256,4259],{"name":4249,"slug":4250,"type":16},"Documents","documents",{"name":4252,"slug":4243,"type":16},"DOCX",{"name":4254,"slug":4255,"type":16},"Office","office",{"name":4257,"slug":4258,"type":16},"Templates","templates",{"name":4260,"slug":4261,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":4264,"name":4264,"fn":4265,"description":4266,"org":4267,"tags":4268,"stars":4183,"repoUrl":4184,"updatedAt":4282},"frontend-design","design production-grade frontend interfaces","Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4269,4270,4273,4276,4279],{"name":4176,"slug":4177,"type":16},{"name":4271,"slug":4272,"type":16},"Frontend","frontend",{"name":4274,"slug":4275,"type":16},"React","react",{"name":4277,"slug":4278,"type":16},"Tailwind CSS","tailwind-css",{"name":4280,"slug":4281,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":4284,"name":4284,"fn":4285,"description":4286,"org":4287,"tags":4288,"stars":4183,"repoUrl":4184,"updatedAt":4296},"internal-comms","write internal company communications","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4289,4292,4293],{"name":4290,"slug":4291,"type":16},"Communications","communications",{"name":4257,"slug":4258,"type":16},{"name":4294,"slug":4295,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":4298,"name":4298,"fn":4299,"description":4300,"org":4301,"tags":4302,"stars":4183,"repoUrl":4184,"updatedAt":4311},"mcp-builder","build MCP servers","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4303,4304,4307,4308],{"name":4219,"slug":4220,"type":16},{"name":4305,"slug":4306,"type":16},"API Development","api-development",{"name":4228,"slug":4229,"type":16},{"name":4309,"slug":4310,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":4210,"name":4210,"fn":4313,"description":4314,"org":4315,"tags":4316,"stars":4183,"repoUrl":4184,"updatedAt":4319},"read edit and manipulate PDF files","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4317,4318],{"name":4249,"slug":4250,"type":16},{"name":4209,"slug":4210,"type":16},"2026-04-06T17:56:02.483316",{"slug":4321,"name":4321,"fn":4322,"description":4323,"org":4324,"tags":4325,"stars":4183,"repoUrl":4184,"updatedAt":4332},"pptx","create and edit PowerPoint presentations","Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4326,4329],{"name":4327,"slug":4328,"type":16},"PowerPoint","powerpoint",{"name":4330,"slug":4331,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":4334,"name":4334,"fn":4335,"description":4336,"org":4337,"tags":4338,"stars":4183,"repoUrl":4184,"updatedAt":4348},"skill-creator","create and optimize agent skills","Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4339,4340,4341,4344,4347],{"name":4219,"slug":4220,"type":16},{"name":4135,"slug":4136,"type":16},{"name":4342,"slug":4343,"type":16},"Evals","evals",{"name":4345,"slug":4346,"type":16},"Performance","performance",{"name":4239,"slug":4240,"type":16},"2026-04-19T06:45:40.804",490]