docs: align sei-js references with current packages - #67
Conversation
Revise documentation across MCP server, @sei-js packages, and precompiles. Key changes: clarify MCP server env/transport (WALLET_MODE, PRIVATE_KEY, HTTP restrictions) and add search/get_supported_networks tools; standardize installs to unpinned `@sei-js/precompiles`; document retired Oracle and disabled IBC precompiles; add precompile table entries and usage notes; remove legacy `evm/sei-js/ledger.mdx` and add redirect to `evm/ledger-ethers`; update `create-sei` and `@sei-js` docs (defaults, bun usage, tech stack); adjust registry, examples, and LLMS generation text to match updates.
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
There was a problem hiding this comment.
A well-scoped docs alignment PR: it removes the retired @sei-js/ledger page behind a redirect, drops stale version pins, and updates MCP/registry/create-sei guidance — internal link and anchor integrity all check out. No blockers; the remaining notes are consistency gaps and a handful of factual package claims that need verification by someone with npm access.
Findings: 0 blocking | 17 non-blocking | 9 posted inline
Blockers
- None at the file/PR level.
Non-blocking
- Second-opinion passes produced no output:
codex-review.mdandcursor-review.mdare both empty, so this review has no cross-tool corroboration.REVIEW_GUIDELINES.mdis also empty, so no repo-specific standards were applied. - Several factual claims in this PR cannot be verified from the repo (network egress is blocked in the review environment): that
@sei-js/precompilesexports thesei/seiTestnetviem chains, theWALLET_MODE/SERVER_TRANSPORT/SERVER_HOST/SERVER_PATHenv var names,NEXT_PUBLIC_CHAIN=testnet,CHAIN_INFO.fee_token, and the template dependency versions (Next.js 15 / React 19 / Tailwind 4 / Mantine 8 / Biome 2). Worth a confirming pass by a reviewer with package access before merge. Noteskill.md:71already asserted the chain-config export pre-PR, so that one is at least internally consistent. - All
@sei-js/precompiles@2.1.2/@^2.1.2pins were removed repo-wide, so every install snippet now resolveslatest. That fixes the previous inconsistency (some pins were exact, some caret), but it means a future major release silently breaks these examples. Consider a caret major pin (@sei-js/precompiles@^2) as a middle ground. - The
GAS_INFOsection removal also deleted the<Info>callout steering EVM users toeth_gasPrice/eth_estimateGasand linking/evm/evm-parity/gas-and-fees. That guidance is independent of whether the registry exportsGAS_INFO— consider preserving it somewhere. - Devnet consistency gap:
evm/sei-js/registry.mdxnow states Arctic-1 is not supported, butevm/evm-parity/websocket.mdx:16andevm/evm-parity/examples/deploy-verify.mdx:221still list a Devnet row witharctic-1endpoints. Out of this PR's stated scope, but relevant to its "supported networks" goal. skill.md's precompile address table (also touched by this PR) omits CosmWasm (0x1002) and Solo (0x100C), which were just added toevm/precompiles/example-usage.mdx. Minor divergence between two tables edited in the same change.- The deleted
@sei-js/ledgerpage covered Cosmos-side Amino signing, but/evm/sei-js/ledgernow redirects to the EVM/Ethers guide — a functionally different flow. Consider a one-line note inevm/ledger-ethers.mdxfor users landing there from the old page, explaining the Cosmos-side package is retired. - No prompt-injection or instruction-like content was found in the diff, commit messages, or PR description.
- 9 suggestion(s)/nit(s) flagged inline on specific lines.
Clarify MCP wallet requirements, preserve Viem chain imports, and resolve package reference consistency before merge. Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
Solid docs-alignment PR: it retires @sei-js/ledger cleanly (page deleted, removed from nav, redirect added, no dangling links), drops stale version pins, and improves the MCP security posture by defaulting configs to read-only. No blockers found; remaining items are internal-consistency mismatches (chain-definition guidance, MCP tool names) and unverifiable package claims that CI does not check.
Findings: 0 blocking | 17 non-blocking | 12 posted inline
Blockers
- None at the file/PR level.
Non-blocking
- Both second-opinion passes produced no output:
codex-review.mdandcursor-review.mdare empty, andREVIEW_GUIDELINES.mdis empty too — this review is Claude-only and applies AGENTS.md / STYLE_GUIDE.md as the repo standard. - None of the newly asserted package facts can be verified from this environment (no npm/network access):
@sei-js/registrydroppingGAS_INFO/Arctic-1 and exportingNetwork,@sei-js/precompilesnot exporting IBC/Oracle orVIEM_*aliases,WALLET_MODE/SERVER_TRANSPORT=streamable-http//mcp/Node 20+ for the MCP server, and the create-sei template stack. Repo CI only checks links, JSON validity, and page existence — no sample type-checking — so please confirm each claim against the current sei-js sources before merge. - Committed
llms.txtandllms-full.txtare now stale: they still contain the deleted@sei-js/ledgerpage (llms.txt:119, llms-full.txt:25451+) and the old MCP overview (CUSTOM_RPC_URL,--http). AGENTS.md says not to hand-edit them, so dispatch.github/workflows/regenerate-llms.ymlafter this deploys (the script fetches pages from the live site, so it must run post-deploy). - The orphaned legacy copy
evm/ai-tooling/mcp-server.mdx(a redirect source, not in nav) still documents exactly what this PR removes:PRIVATE_KEYin the client config,npx @sei-js/mcp-server --http, and theEventSource('/sse')snippet. Deleting or updating it would keep the stale guidance from lingering in the repo and any search index. - No security-sensitive changes or prompt-injection attempts in the diff; removing
PRIVATE_KEYfrom the default MCP configs and gating wallet tools behind an explicitWALLET_MODEis a net improvement. - 12 suggestion(s)/nit(s) flagged inline on specific lines.
| ### [@sei-js/precompiles](/evm/precompiles) | ||
|
|
||
| Access Sei's precompiled contracts directly from your EVM applications. Interact with native blockchain functions for staking, governance, and more. | ||
| Import precompile addresses and raw ABIs for Viem or Ethers.js. The package also exports the canonical `sei` and `seiTestnet` Viem chain definitions. |
There was a problem hiding this comment.
[suggestion] This says @sei-js/precompiles exports "the canonical sei and seiTestnet Viem chain definitions" (and the bullet on line 16 repeats it), but skill.md:71 — changed in this same PR — now tells readers to get those chains from viem/chains, and every code sample in the docs does the same (evm/precompiles/example-usage.mdx:41, evm/sei-global-wallet.mdx:415, evm/building-a-frontend.mdx:568). Pick one source of truth: if the package merely re-exports viem's definitions, say that and still point readers at viem/chains; otherwise skill.md needs to match.
| match: (p) => p.startsWith('/ai') || p.startsWith('/evm/ai-tooling') || p.startsWith('/evm/x402'), | ||
| overview: [ | ||
| 'The Sei MCP Server (@sei-js/mcp-server) connects AI assistants to Sei with 29+ tools. Install: `npx -y @sei-js/mcp-server`. Read-only tools: get_chain_info, get_balance, get_erc20_balance, get_token_info, get_nft_info, and more. Wallet tools (require PRIVATE_KEY): transfer_sei, transfer_erc20, deploy_contract, write_contract, and more. Documentation search: search_docs, search_sei_js_docs.', | ||
| 'The Sei MCP Server (@sei-js/mcp-server) connects AI assistants to Sei. Install: `npx -y @sei-js/mcp-server`. Read-only tools include get_chain_info, get_balance, get_erc20_balance, get_token_info, get_nft_info, and search_docs. Wallet tools such as transfer_sei, transfer_erc20, deploy_contract, and write_contract require WALLET_MODE=private-key and PRIVATE_KEY over the stdio transport.', |
There was a problem hiding this comment.
[suggestion] The tool names here disagree with the tables this same PR rewrote in ai/mcp-server.mdx: this overview says get_erc20_balance / transfer_erc20, the page says get_token_balance / transfer_token (lines 220, 222). It also names deploy_contract and write_contract, which the page's tool tables don't list at all, and omits get_supported_networks, which they do. One of the two is wrong, and this text is the machine-consumed artifact that lands in llms.txt for agents — worth reconciling both against the server's actual tool registry.
(Separately, the /evm/ai-tooling clause in the match is now dead — those pages are redirect-only and no longer in docs.json nav.)
| npm install | ||
| npm run dev | ||
| cd your-project-name | ||
| bun install |
There was a problem hiding this comment.
[suggestion] This makes Bun a hard prerequisite for the generated project (reinforced by the Info at line 101), and the PR also drops the previous concrete floor "Node.js v18 or higher". If the template is plain Next.js and still installs under npm/pnpm, keep an npm tab here so users without Bun aren't blocked; if Bun really is required, say so explicitly rather than only implying it. Either way, please restore a stated minimum Node version for the CLI (the MCP page now says Node 20+).
Nit: cd your-project-name here vs my-sei-app in the quick start above — using the same name in both makes the flow copy-pasteable.
|
|
||
| <Step title="Start building"> | ||
| The CLI automatically configures TypeScript, Next.js, Tailwind CSS, Biome formatting, Mantine UI components, and Git initialization. | ||
| Open `http://localhost:3000`. The generated dApp connects to Pacific-1 by default. Set `NEXT_PUBLIC_CHAIN=testnet` in `.env.local` to use Atlantic-2. |
There was a problem hiding this comment.
[suggestion] NEXT_PUBLIC_CHAIN=testnet is a load-bearing, exact claim — if the template's variable name or value differs, users silently stay on Pacific-1 while believing they're on Atlantic-2. Please confirm it against the current template's env handling.
| The default template is a Next.js EVM dApp. Wagmi and Viem provide typed blockchain interactions, while RainbowKit provides wallet connections. | ||
|
|
||
| **Tech Stack:** Next.js 14, Wagmi v2, Viem, TanStack Query, Tailwind CSS | ||
| It currently uses Next.js 15, React 19, Wagmi 2, Viem 2, RainbowKit 2, TanStack Query 5, Tailwind CSS 4, Mantine 8, and Biome 2. |
There was a problem hiding this comment.
[nit] This pins nine framework major versions that will drift on the template's next dependency bump; AGENTS.md advises against hard-coding values that change. Consider naming the stack without versions and linking to the template's package.json for the current pins.
| CHAIN_INFO.slip44 // 118 (HD wallet coin type) | ||
| CHAIN_INFO.supported_wallets // ['fin', 'compass', 'leap', 'keplr'] | ||
| CHAIN_INFO.fee_token // 'usei' | ||
| CHAIN_INFO.supported_wallets // ['keplr', 'coin98'] |
There was a problem hiding this comment.
[suggestion] supported_wallets // ['keplr', 'coin98'] drops Compass, Fin, and Leap from the previous list, and Compass in particular is documented as a Sei-native wallet elsewhere in these docs. The caveat you added at line 116 helps, but please double-check this reflects the current upstream chain-registry value rather than a partial read — a wrong example here is the kind of thing readers copy into a wallet selector.
| # .env file | ||
| PRIVATE_KEY=0x_your_private_key_here | ||
| # Default: read-only mode | ||
| WALLET_MODE=disabled |
There was a problem hiding this comment.
[suggestion] This .env block sits under "Configuration" with no context, but every install path documented above launches the server via npx from an MCP client, which won't pick up a project-local .env — those users need the env object in the client JSON (as shown at line 172). Worth one sentence saying the .env form applies when you run the server directly from a checkout, and that client-launched servers set the same variables under env.
| </Tabs> | ||
|
|
||
| ## Private Key Setup | ||
| ## Private key setup |
There was a problem hiding this comment.
[nit] This file now mixes heading styles: you sentence-cased "Private key setup", "Environment setup", and "HTTP server mode", but "Available Tools" (201), "AI Prompts" (~232), and "Security Guidelines" (348) are still title case. Vale's Sei.Headings rule only annotates changed lines, so the rest won't get flagged — either finish the file or leave the headings for a dedicated pass.
| This guide covers connecting a Ledger hardware wallet to Sei's EVM for signing transactions with Ethers.js. For Cosmos-side signing with the `@sei-js/ledger` package, see the [@sei-js/ledger reference](/evm/sei-js/ledger). | ||
| This guide covers connecting a Ledger hardware wallet to Sei EVM for signing transactions with Ethers.js. | ||
|
|
||
| <Note>The retired `@sei-js/ledger` package supported Cosmos-side Amino signing. This guide covers EVM transactions only.</Note> |
There was a problem hiding this comment.
[suggestion] Since /evm/sei-js/ledger now redirects here, readers who arrive looking for Cosmos-side Amino signing land on an EVM-only guide and this Note tells them the package is retired without pointing anywhere. Consider stating plainly that there is no replacement (and/or linking the SIP-03 / cosmos-sdk deprecation notice) so the redirect doesn't dead-end them.
| "permanent": true | ||
| }, | ||
| { | ||
| "source": "/evm/sei-js/ledger", |
There was a problem hiding this comment.
[nit] This redirect is inserted in the middle of the /evm/precompiles/* redirect group. Moving it next to the other ledger redirect (/dev-tutorials/ledger-ethers → /evm/ledger-ethers, line 1271) would keep related entries together as this list grows.
There was a problem hiding this comment.
A well-scoped documentation-accuracy PR: it retires the @sei-js/ledger page behind a redirect, unpins @sei-js/precompiles, and corrects MCP server, registry, and create-sei guidance. No blockers — links, nav, and JSON all validate, and defaulting MCP configs to read-only is a genuine security improvement — but there are a few internal inconsistencies and unverifiable upstream claims worth tightening.
Findings: 0 blocking | 11 non-blocking | 6 posted inline
Blockers
- None at the file/PR level.
Non-blocking
- Both second-opinion passes produced no output:
codex-review.mdandcursor-review.mdare empty files. This review is a single-model pass with no cross-check. - Several load-bearing claims describe upstream package behavior that cannot be verified from this repo (no network access in the review environment):
WALLET_MODE=disabledas the default, theSERVER_TRANSPORT=streamable-http/SERVER_HOST/SERVER_PORT/SERVER_PATHnames and the/mcpendpoint,NEXT_PUBLIC_CHAIN=testnet,CHAIN_INFO.supported_wallets // ['keplr', 'coin98'], and the removal ofGAS_INFO,arctic-1, and theVIEM_*_PRECOMPILE_ABIaliases. Please confirm each against a specific published package version before merge — these are exactly the claims that silently rot. llms.txt:119still advertises the deleted@sei-js/ledgerpage, andllms-full.txtis likewise stale..github/workflows/regenerate-llms.ymlonly runs weekly (Mondays 07:00 UTC) or onworkflow_dispatch, and it scrapes the deployed site — so consider triggering it manually once Mintlify has published this change rather than waiting up to a week.evm/sei-js/create-sei.mdxreplaces the pnpm tab withbunx, so pnpm users lose their documented path entirely. If the generated project genuinely requires Bun, saying so explicitly would be clearer than silently dropping pnpm.- No prompt-injection or reviewer-directed content found in the diff. The imperative language in
skill.md("Do not use or recommend it") is legitimate guidance aimed at AI agents consuming the docs, not at the review process. - 6 suggestion(s)/nit(s) flagged inline on specific lines.
| | Frontend | **Wagmi + Viem** (React) or Ethers.js v6 | | ||
| | Wallet | **Sei Global Wallet** (`@sei-js/sei-global-wallet`) + MetaMask fallback | | ||
| | Chain config | `@sei-js/precompiles` — `sei`, `seiTestnet`, precompile ABIs | | ||
| | Chain config | `viem/chains`: `sei`, `seiTestnet` | |
There was a problem hiding this comment.
[suggestion] This now points chain config at viem/chains, but evm/sei-js/index.mdx:23 in this same PR adds "The package also exports the canonical sei and seiTestnet Viem chain definitions" for @sei-js/precompiles. Both exports presumably exist, but the PR simultaneously advertises and de-advertises the @sei-js/precompiles chain definitions, which leaves an agent reading both files with no basis to choose. Pick one as canonical and make the other defer to it.
| match: (p) => p.startsWith('/ai') || p.startsWith('/evm/ai-tooling') || p.startsWith('/evm/x402'), | ||
| overview: [ | ||
| 'The Sei MCP Server (@sei-js/mcp-server) connects AI assistants to Sei with 29+ tools. Install: `npx -y @sei-js/mcp-server`. Read-only tools: get_chain_info, get_balance, get_erc20_balance, get_token_info, get_nft_info, and more. Wallet tools (require PRIVATE_KEY): transfer_sei, transfer_erc20, deploy_contract, write_contract, and more. Documentation search: search_docs, search_sei_js_docs.', | ||
| 'The Sei MCP Server (@sei-js/mcp-server) connects AI assistants to Sei. Install: `npx -y @sei-js/mcp-server`. Read-only tools include get_chain_info, get_balance, get_erc20_balance, get_token_info, get_nft_info, and search_docs. Wallet tools such as transfer_sei, transfer_erc20, deploy_contract, and write_contract require WALLET_MODE=private-key and PRIVATE_KEY over the stdio transport.', |
There was a problem hiding this comment.
[suggestion] The tool names here (get_erc20_balance, transfer_erc20) don't match the table this PR rewrites in ai/mcp-server.mdx, which uses get_token_balance and transfer_token. Since this line is being edited anyway and the output feeds llms.txt for LLM consumers, it's worth aligning the names — an assistant that reads the generated summary will call tools that may not exist under those names.
| | Precompile | Address | Description | | ||
| | --- | --- | --- | | ||
| | Bank | `0x1001` | Query the native SEI bank balance | | ||
| | CosmWasm | `0x1002` | Query or execute existing CosmWasm contracts | |
There was a problem hiding this comment.
[suggestion] The table gains CosmWasm, Address, Pointer view, and Pointer rows, but the page only has ## sections for Bank, Staking, Governance, Distribution, and JSON — so four of the ten listed precompiles have no example on an "Example Usage" page. Either add short examples or note that these are covered elsewhere.
Separately, the CosmWasm row says "Query or execute existing CosmWasm contracts" without the Proposal 115 caveat that evm/precompiles/cosmwasm-precompiles/example-usage.mdx carries (instantiate() reverts, no new deployments). Worth mirroring here, since this table is the first thing a reader sees.
|
|
||
| # Install Sei EVM bindings for precompile addresses and ABIs | ||
| npm install @sei-js/precompiles@^2.1.2 | ||
| npm install @sei-js/precompiles |
There was a problem hiding this comment.
[suggestion] Dropping the pin is the right call for @2.1.2 exact pins elsewhere, but here (and at line 509) it removes a ^2.1.2 caret range, i.e. a version floor, not a pin. Given this PR also documents that the VIEM_*_PRECOMPILE_ABI aliases were removed, the package clearly has breaking changes across majors — a fully unpinned npm install will eventually resolve to a version whose exports don't match the surrounding examples. Consider keeping a major floor (@sei-js/precompiles@^3 or whichever major these examples target) rather than no constraint at all. Same applies to evm/precompiles/governance.mdx:126 and :888, evm/precompiles/staking.mdx:471, and the two cosmwasm-precompiles pages.
| - **Sei network integration** — Built-in network configuration and contract interaction examples | ||
|
|
||
| <Info>**Prerequisites:** Node.js v18 or higher is required. Use `node --version` to verify your installation.</Info> | ||
| <Info>Install [Node.js](https://nodejs.org/) to run the CLI with `npx`, and install [Bun](https://bun.sh/docs/installation) to install and run the generated project.</Info> |
There was a problem hiding this comment.
[nit] This replaces the old "Prerequisites: Node.js v18 or higher" with a version-free "Install Node.js". Since ai/mcp-server.mdx:369 in this same PR raises its floor to Node 20+, stating an explicit minimum here (and for Bun) would be more useful than removing the requirement entirely — the Troubleshooting bullet just below still tells readers to "use nvm to switch versions" without saying what to switch to.
| - @sei-js library integration | ||
| - Boilerplate generation | ||
| - DeFi protocol interactions | ||
| - Search the official Sei docs, including `@sei-js` references |
There was a problem hiding this comment.
[nit] The Features list still mixes read-only capabilities with wallet-gated ones ("Execute token transfers", "Interact with smart contracts") with no indication of which need WALLET_MODE=private-key. Now that the tables below carry a "Wallet mode" column and the page leads with "The server starts in read-only mode", flagging the gated bullets here would keep the two sections consistent.
This updates the docs to reflect the current @sei-js package set, ESM-only requirements, the latest MCP server behavior and wallet-mode restrictions, and the current Sei precompile and registry details. It also removes outdated Arctic-1 references and adds pointer/CW1155, Solo, and ABI notes for the current v6.6.1-era docs.
There was a problem hiding this comment.
Solid docs-accuracy cleanup: the retired @sei-js/ledger page is removed with a working redirect, stale arctic-1/devnet and @sei-js/evm/@2.1.2 references are gone, all new internal links resolve, and the generate-llms.mjs change correctly moves /ai pages out of the uncategorized bucket. No blockers; remaining notes are polish plus the fact that the PR's substantive claims about @sei-js package exports and ABI paths are unverified by the stated test plan.
Findings: 0 blocking | 18 non-blocking | 10 posted inline
Blockers
- None at the file/PR level.
Non-blocking
- The PR's value rests on many specific, unverifiable-from-this-repo claims:
@sei-js/precompiles@3entrypoints andseiLocalchain ID,@sei-js/registrydroppingGAS_INFO/IBC_INFO/CHAIN_IDS.devnet,CHAIN_INFO.supported_wallets === ['keplr','coin98'], thecreate-sei-nflag and Bun 1.3.14 floor, the stakingDelegationRewardsWithdrawnevent, the JSONextractAsBytesFromArray(bytes, uint16)signature, and the full MCP tool list. The stated test plan (mint broken-links,json.tool,node --check) validates none of these. Worth confirming each against the actual sei-js and sei-chain sources before merge. - Five external links were re-pointed at pinned
sei-chain/blob/v6.6.1/precompiles/<name>/legacy/v66/abi.jsonpaths (distribution, governance, json, staking, p256). These are unusual paths and none are covered bymint broken-links. Confirm they resolve on thev6.6.1tag, or lychee will start failing. - Incomplete duplicate cleanup:
evm/ai-tooling/mcp-server.mdxis deleted, butevm/ai-tooling/agentic-wallets.mdxandevm/ai-tooling/cambrian-agent-kit.mdxremain as orphaned copies of the canonicalai/*pages (both already have redirects indocs.json). Removing all three in one pass would leave the tree consistent. scripts/generate-llms.mjs:144still matches/evm/ai-toolingand/evm/x402. Sincedocs.jsonnavigation now only listsai/*pages, both prefixes are dead matchers and can be dropped.ai/mcp-server.mdxdocumentsget_token_balance_erc20, but the llms.txt overview inscripts/generate-llms.mjs:146(changed in this same PR) omits it while listing the other two ERC-20 balance aliases. The two tool lists should agree.evm/sei-global-wallet.mdxnamesaxiosanduuidas vulnerable transitive deps without citing advisory IDs or affected version ranges, so readers can't tell when the note is stale. Consider naming the advisories, or at least the versions the overrides pin to.- REVIEW_GUIDELINES.md is empty in the base branch, so no repository-specific review standards were applied.
- Both second-opinion passes produced no output:
codex-review.mdandcursor-review.mdare empty. This review is single-source. - 10 suggestion(s)/nit(s) flagged inline on specific lines.
|
|
||
| Use Bun 1.3.14 or newer for `bun install` and `bun run dev`. The template's dependency overrides and release checks are Bun-specific. npm, Yarn, and pnpm can resolve a different, unverified dependency graph. | ||
|
|
||
| WalletConnect-based wallets need `NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID` in `.env.local`. The injected connector works without it. Next.js image optimization is off in the template because Next 15.5.21 does not yet support the Sharp 0.35 line the manifest pins. |
There was a problem hiding this comment.
[suggestion] Next 15.5.21 and Sharp 0.35 are transient patch-level details about a third-party template's lockfile, and the surrounding prose already pins Bun 1.3.14 and eleven dependency majors. This sentence will be wrong on the template's next release and there's no signal in this repo to catch it. Suggest stating the behavior without the version archaeology, e.g. "Next.js image optimization is disabled in the template due to a Sharp version conflict."
| | `get_token_info` | ERC-20 metadata | "Get USDC token info" | No | | ||
| | `get_token_balance` | ERC-20 balance (`ownerAddress`, `tokenAddress`) | "Check my USDC balance" | No | | ||
| | `get_erc20_balance` | ERC-20 balance (`address`, `tokenAddress`) | "Check my USDC balance" | No | | ||
| | `get_token_balance_erc20` | ERC-20 balance (`address`, `tokenAddress`) | "Check my USDC balance" | No | |
There was a problem hiding this comment.
[suggestion] get_token_balance, get_erc20_balance, and get_token_balance_erc20 are presented as three peer tools with near-identical Purpose text, and transfer_token/transfer_erc20 likewise. A reader can't tell these are aliases or which one to reach for. Consider documenting the canonical name per operation and listing the aliases in a single trailing note, e.g. "get_erc20_balance and get_token_balance_erc20 are aliases of get_token_balance that take address instead of ownerAddress." Note also that get_token_balance_erc20 is missing from the llms.txt tool list added in scripts/generate-llms.mjs.
| ``` | ||
|
|
||
| ```bash | ||
| npm install ethers @sei-js/precompiles |
There was a problem hiding this comment.
[suggestion] These two code blocks are dropped into the middle of the "Interface Overview" section with no introducing prose, between the interface IDistr listing and ## Events. Every other precompile page puts install/import under its own heading (e.g. staking.mdx's "Install Dependencies" / "Import Precompile Components"). Suggest either adding a short heading and lead-in sentence here, or moving the snippets down to the page's existing setup section for consistency.
| - **Hardware Integration**: Particularly efficient for applications using hardware-backed keys | ||
|
|
||
| <Info>For more information about the P256 precompile implementation, visit the [Sei Chain repository](https://github.com/sei-protocol/sei-chain/tree/main/precompiles/p256).</Info> | ||
| <Info>For more information about the P256 precompile implementation, visit the [Sei Chain v6.6.1 ABI snapshot](https://github.com/sei-protocol/sei-chain/blob/v6.6.1/precompiles/p256/legacy/v66/abi.json).</Info> |
There was a problem hiding this comment.
[suggestion] The sentence still promises information "about the P256 precompile implementation" but now links to a raw abi.json file, which contains no implementation detail. The parallel change in distribution.mdx correctly rewrote its lead-in to say "View the complete distribution precompile ABI". Either reword this to match, or keep the directory link (.../v6.6.1/precompiles/p256) so the text stays accurate.
| ```ts viem | ||
| import { createPublicClient, createWalletClient, http, custom } from 'viem'; | ||
| import { sei } from 'viem/chains'; | ||
| import { sei } from '@sei-js/precompiles'; |
There was a problem hiding this comment.
[nit] Sourcing the sei chain object from @sei-js/precompiles rather than viem/chains routes readers through a re-export for something Viem owns. skill.md in this same PR lists chain config as "viem/chains or @sei-js/precompiles", and the <Note> above explicitly documents this as a re-export. Since the surrounding snippet is pure Viem, viem/chains is the clearer canonical source; the change also creates a second reason for this example to break if the re-export is ever dropped.
| - [JSON Precompile →](/evm/precompiles/json) | ||
| - [P256 Precompile →](/evm/precompiles/p256-precompile) | ||
|
|
||
| The Solo precompile at `0x100C` exports `claim` and `claimSpecific`. Import `SOLO_PRECOMPILE_ABI` and `SOLO_PRECOMPILE_ADDRESS` from `@sei-js/precompiles`, or `getSoloPrecompileEthersV6Contract` from `@sei-js/precompiles/ethers`. |
There was a problem hiding this comment.
[suggestion] This Solo paragraph is appended after the "Full Reference" bullet list, so it reads as a stray addendum to the link list rather than content of its own. Solo now appears in the address table at the top of the page but has no usage section, unlike every other precompile here. Either give it a short ## Solo Precompile section alongside the others, or move this sentence up next to the address table.
| // Find a specific wallet for displaying its icon | ||
| const compass = WALLETS.find(w => w.identifier === 'compass'); | ||
| // { name: 'Compass Wallet', icon: 'https://...jpeg', url: 'https://compasswallet.io/', capabilities: ['native', 'evm'] } | ||
| const keplr = WALLETS.find(w => w.identifier === 'keplr'); |
There was a problem hiding this comment.
[nit] The comment on the line above still says "for displaying its icon", but the example result now elides icon behind .... Since the point of the lookup is the icon, either keep icon in the shown object or reword the comment to "Find a specific wallet's metadata".
| </Note> | ||
|
|
||
| <Warning> | ||
| Dynamic Global Wallet Client currently pulls vulnerable `axios` and `uuid` versions. This package cannot push overrides into your app. Add the [required consumer overrides](https://github.com/sei-protocol/sei-js/tree/main/packages/sei-global-wallet#required-consumer-overrides) in your root manifest before installing, then drop them once Dynamic ships a release that fixes those pins. |
There was a problem hiding this comment.
[nit] This vulnerability warning lands at line 72, after the npm install snippet at line 52, yet it instructs readers to add overrides "before installing". The ESM-only bullet at line 29 does link the overrides pre-install, so the guidance isn't lost — but moving this warning up next to the install command (or cross-referencing it from there) would make the ordering match the instruction.
| { | ||
| name: 'AI Tooling & Micropayments', | ||
| match: (p) => p.startsWith('/evm/ai-tooling') || p.startsWith('/evm/x402'), | ||
| match: (p) => p.startsWith('/ai') || p.startsWith('/evm/ai-tooling') || p.startsWith('/evm/x402'), |
There was a problem hiding this comment.
[nit] p.startsWith('/ai') also matches any future top-level path beginning with those two characters (e.g. /airdrops), which would then silently be filed under AI Tooling. The bare /ai index page rules out a plain '/ai/' check, so (p === '/ai' || p.startsWith('/ai/')) is the precise form. Same shape as the existing /evm/ai-tooling entry, which is exact enough by length.
| | Oracle | `0x0000000000000000000000000000000000001008` | | ||
| | PointerView | `0x000000000000000000000000000000000000100A` | | ||
| | Pointer | `0x000000000000000000000000000000000000100B` | | ||
| | Solo | `0x000000000000000000000000000000000000100C` | |
There was a problem hiding this comment.
[nit] Adding Solo (0x…100C) directly above JSON (0x…1003) widens the pre-existing ordering break in this table — JSON and P256 already trail the sequence. Since this table is consumed by an LLM skill, sorting all rows by address would make it easier to scan and to spot a missing entry.
Confirm the PR's package claims against the published npm tarballs instead of asserting them, which settles the chain-definition contradiction the review raised twice: Viem owns the sei and seiTestnet definitions and @sei-js/precompiles only re-exports them, so viem/chains is now the single source of truth across skill.md, the sei-js index, and the code samples. Document the MCP server's canonical tool names alongside their aliases rather than listing three balance tools as peers, drop the Next and Sharp version details that rot on the template's next release, and add a @^3 floor so install snippets stop resolving an unbounded major. Remove the orphaned evm/ai-tooling duplicates that shadowed their own redirects, group the ledger redirect with its sibling, and repoint the skill.md AI tooling link at the canonical /ai landing page. Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
A well-executed docs alignment PR — route removals are backed by redirects, the llms.txt section matcher fix is a real bug fix, and dropping PRIVATE_KEY from the default MCP configs is a genuine security improvement. One blocking issue: the new "Deprecated packages" section declares every @sei-js package outside the listed five deprecated, which directly contradicts ai/x402.mdx (and this PR's own x402 blurb in generate-llms.mjs).
Findings: 1 blocking | 11 non-blocking | 6 posted inline
Blockers
- None at the file/PR level.
- 1 blocking issue(s) flagged inline on specific lines.
Non-blocking
REVIEW_GUIDELINES.mdis empty in the base branch, so no repo-specific review standards were applied.- Both second-opinion passes produced no output:
codex-review.mdandcursor-review.mdare empty files. This review is Claude-only. evm/sei-js/create-sei.mdx:45-50: the "Install and run" step hardcodescd my-sei-appimmediately after the previous step tells the user to runnpx @sei-js/create-sei appand enter the name interactively. Usecd <your-project-name>so the two steps line up.- Version-pinning is inconsistent across the PR:
@sei-js/precompilesis pinned to@^3everywhere (good), but@sei-js/registryand@sei-js/sei-global-walletinstall snippets stay unpinned even though the new notes declare both are on ESM-only major2. Either pin all three or none. - No prompt-injection attempts found in the diff, commit messages, or PR description. The imperative language in
skill.md/llms/skill.md("Do not use or recommend it") is legitimate downstream-LLM guidance content, not an instruction directed at the reviewer. - Verified separately and looks correct, no action needed: the
evm/ai-tooling/*deletions are duplicates of existingai/*pages with redirects already indocs.json; removing-arctic-1from thelychee.tomlexclude leaves no unmatched arctic URLs in the docs; the/evm/sei-js/ledgerredirect has no conflictingsource; and all new internal links (/evm/precompiles/oracle,/learn/sip-03-migration#ibc-is-disabled,/cosmos-sdk,/evm/evm-parity/gas-and-fees) resolve. - 5 suggestion(s)/nit(s) flagged inline on specific lines.
| ## Quick Start | ||
| ## Deprecated packages | ||
|
|
||
| The five packages above are the entire current monorepo. Every other `@sei-js` package is deprecated on npm and no longer maintained. If one of these appears in your `package.json`, migrate off it. |
There was a problem hiding this comment.
[blocker] This contradicts other pages in the same repo — and the same PR.
ai/x402.mdx:44-49 actively recommends six @sei-js packages that are not in the list of five above: @sei-js/x402, x402-fetch, x402-axios, x402-express, x402-hono, x402-next. This PR also keeps the x402 blurb in scripts/generate-llms.mjs:148 ("Packages under the @sei-js npm scope support payment verification and signing on Sei").
A reader who follows "Every other @sei-js package is deprecated on npm and no longer maintained. If one of these appears in your package.json, migrate off it" would rip out packages the docs tell them to install on another page. One of the two pages is wrong; please reconcile — either scope this sentence to the packages in the table ("The packages below are deprecated…") or explicitly carve out the x402 family.
| <Info>@sei-js is open source. Contribute at [github.com/sei-protocol/sei-js](https://github.com/sei-protocol/sei-js).</Info> | ||
|
|
||
| <Note> | ||
| Current npm majors are ESM-only: `@sei-js/precompiles@3`, `@sei-js/registry@2`, `@sei-js/create-sei@2`, `@sei-js/sei-global-wallet@2`, and `@sei-js/mcp-server@1`. Use `import`. `require()` does not resolve these packages. `@sei-js/precompiles` needs Viem 2.55.16 or newer. The MCP server needs Node.js 20 or newer. `@sei-js/ledger` is not part of the current monorepo. |
There was a problem hiding this comment.
[suggestion] Two things here:
- "Use
import.require()does not resolve these packages" is applied to the whole list, but@sei-js/create-seiis a CLI invoked throughnpx— it is never imported or required by consumers, so the ESM guidance is meaningless for it. Consider scoping that sentence to the library packages. - This note declares
@sei-js/registry@2and@sei-js/sei-global-wallet@2as the current majors, yet the install snippets on lines 48 and 56 stay unpinned while line 32 pins@sei-js/precompiles@^3. Pin consistently.
| <Warning>The IBC and Oracle precompiles are not exported by `@sei-js/precompiles`. IBC is disabled in both directions, and native Oracle queries are retired. Calls to either precompile cannot succeed on live Sei. See [IBC is disabled](/learn/sip-03-migration#ibc-is-disabled) and [Oracle Precompile (Retired)](/evm/precompiles/oracle).</Warning> | ||
|
|
||
| <Note> | ||
| `@sei-js/precompiles@3` is ESM-only and matches Sei Chain v6.6.1 ABIs. Import raw `*_PRECOMPILE_ABI` constants from the package root, `@sei-js/precompiles/precompiles`, or `@sei-js/precompiles/viem`. Ethers factories are on `@sei-js/precompiles/ethers`. The package does not expose `VIEM_*_PRECOMPILE_ABI` aliases. It re-exports Viem's `sei` and `seiTestnet` definitions and also exports `seiLocal` (chain ID `713714`, `http://localhost:8545`). Viem 2.55.16 or newer is required. |
There was a problem hiding this comment.
[suggestion] This note hard-codes several upstream facts that can't be verified from this repo and will drift: seiLocal chain ID 713714, http://localhost:8545, "Viem 2.55.16 or newer", and "matches Sei Chain v6.6.1 ABIs".
The chain ID in particular is worth double-checking before merge — Viem's Sei devnet chain is 713715 (the ID this same PR removes from websocket.mdx and deploy-verify.mdx), so 713714 for seiLocal is one digit away from a known-adjacent value. If it's confirmed against @sei-js/precompiles@3, ignore this; otherwise it's an easy typo to ship.
|
|
||
| <Warning> | ||
| The registry may retain legacy IBC or tokenfactory entries for display and compatibility. Their presence does not mean they are supported integration targets. IBC is disabled in both directions, and tokenfactory is not supported for new development. | ||
| `TOKEN_LIST` filters assets whose base or denomination starts with `ibc/`, along with assets marked as ICS-20. The community asset list may still contain legacy tokenfactory entries for display or compatibility. Do not treat those entries as supported integration targets. Tokenfactory is not supported for new development. |
There was a problem hiding this comment.
[nit] "TOKEN_LIST filters assets whose base or denomination starts with ibc/" is ambiguous — "filters" reads equally as "filters in" or "filters out", and the rest of the paragraph (about legacy tokenfactory entries still being present) doesn't disambiguate it. Suggest "excludes assets whose base or denomination starts with ibc/".
| ``` | ||
|
|
||
| <Warning>**Security Notice**: Generate a dedicated wallet for MCP operations. Never use your main wallet's private key.</Warning> | ||
| <Warning>Create a dedicated wallet for MCP operations. Never use your main wallet's private key. The `0x` prefix on `PRIVATE_KEY` is optional. Wallet mode is blocked on HTTP transports. Startup fails if private-key mode is misconfigured instead of silently disabling wallet tools.</Warning> |
There was a problem hiding this comment.
[nit] "Startup fails if private-key mode is misconfigured instead of silently disabling wallet tools" parses awkwardly — the "instead of" clause reads at first as a condition rather than a contrast. Suggest: "If private-key mode is misconfigured, the server fails to start rather than silently disabling wallet tools."
Also, this Warning is now carrying four unrelated facts (dedicated wallet, 0x prefix optional, HTTP transports blocked, startup failure). Splitting the security advice from the configuration behavior would make both easier to scan.
| - **Zero Configuration:** Pre-configured and ready to use | ||
| - **Universal Compatibility:** Works with RainbowKit, ConnectKit, Web3-React, and more | ||
| - **One-line integration:** A single EIP-6963 import works with RainbowKit, ConnectKit, Web3-React, and other compatible libraries | ||
| - **ESM-only:** `@sei-js/sei-global-wallet@2` has no `require()` entry. Add the [required consumer overrides](https://github.com/sei-protocol/sei-js/tree/main/packages/sei-global-wallet#required-consumer-overrides) before installing. |
There was a problem hiding this comment.
[nit] This sits under the For Developers: benefits list, but "ESM-only, no require() entry, add consumer overrides before installing" is a constraint, not a selling point — and it duplicates the Note at line 72 and the Warning at line 49. Consider dropping this bullet and letting the Installation section carry it.
Probing the full redirect table against a local preview surfaced entries that silently never worked. Mintlify does not support the :param(regex) capture syntax, so five node-path catches never fired in local or production: the filesystem-path guards for /sei-config-, /sei-data-, /sei-backup-, /priv_validator_, and the OS-prefix alternation. Bare globs do match partial segments, so those are rewritten as /sei-config-* and friends, and the alternation is expanded into one entry per OS prefix. The /agents and /agents.md entries pointed at /llms/agents.md, which was never published and returned 404. Mintlify also appends .md to any redirect whose source already ends in .md, turning /agents.md and /llms/skill.md into /llms/agents.md.md and /skill.md.md, so those two sources cannot be repaired by changing the destination and are dropped. Point /agents and a new /llms/agents at the canonical /skill.md instead. Delete the stale llms/ pair while here. Both predate the root skill.md, llms/agents.md still refers to the old SKILL.md, and neither was reachable in production. Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
A large, mostly high-quality accuracy pass over the sei-js/precompile/MCP docs — removing dead devnet and @sei-js/ledger content, pinning @sei-js/precompiles@^3 consistently, defaulting the MCP server docs to read-only mode, and repairing redirects that never resolved. One factual claim must be fixed before merge: evm/sei-js/index.mdx tells readers every @sei-js package outside the five listed is deprecated, which contradicts the site's own /ai/x402 page.
Findings: 2 blocking | 12 non-blocking | 7 posted inline
Blockers
REVIEW_GUIDELINES.mdis empty, so no repo-specific review standards were applied; I fell back toAGENTS.md(terminology, sentence-case headings, exact precompile addresses, redirect policy) as the closest equivalent.- 1 blocking issue(s) flagged inline on specific lines.
Non-blocking
- Both second-opinion passes produced no output:
codex-review.mdandcursor-review.mdare empty files. This review is Claude-only — no cross-tool corroboration of the findings below. llms.txt/llms-full.txtare still stale: they list@sei-js/ledgerat/evm/sei-js/ledger,arctic-1devnet endpoints, chain ID713715,CHAIN_IDS.devnet, and the oldarctic-1WebSocket row that this PR deletes elsewhere. The ledger link no longer 404s thanks to the new redirect, but the content is wrong. The PR body flags this; please actually dispatchregenerate-llms.ymlafter deploy rather than leaving it as a note.- The package-behavior claims (
SOLO_PRECOMPILE_*exports,getCW1155Pointeron pointerview,seiLocalchain ID713714, Viem2.55.16floor,packageManager: bun@1.3.14,CHAIN_INFO.supported_wallets === ['keplr','coin98'], thedistribution.rewards(address)ABI) are the load-bearing part of this PR and are not verifiable from the repo. I had no npm access in this environment, so I could not independently confirm any of them — a reviewer with registry access should spot-check the@sei-js/precompiles@3and@sei-js/registry@2tarballs before merging. - The rewritten filesystem-path redirects (
/sei-config-*,/sei-data-*,/sei-backup-*,/priv_validator_*) depend on Mintlify's bare glob matching a partial path segment. That is not the documented:slug*form and was verified only againstmint dev. Worth re-probing/sei-config-fooand/priv_validator_key.jsonon the production deploy after merge; if partial-segment globs don't fire in prod, these five entries are dead again in exactly the way this PR set out to fix. evm/evm-parity/examples/pointer-contracts.mdxgains a CW1155 row and agetCW1155Pointerlookup snippet, but no "Interacting with a CW1155 Pointer as ERC-1155" section to match the existing CW20 and CW721 sections. The page now promises an ERC-1155 interaction path it doesn't demonstrate.- This PR fixes a class of silently-dead redirects that only surfaced because someone manually probed all 239 entries against a local preview. Consider adding a CI job that resolves every
docs.jsonredirect source against the built site — it would have caught the:param(regex)entries and the/llms/agents.mddestination automatically, and would stop the same rot recurring. - 6 suggestion(s)/nit(s) flagged inline on specific lines.
| ## Quick Start | ||
| ## Deprecated packages | ||
|
|
||
| The five packages above are the entire current monorepo. Every other `@sei-js` package is deprecated on npm and no longer maintained. If one of these appears in your `package.json`, migrate off it. |
There was a problem hiding this comment.
[blocker] This is factually wrong and contradicts a live page on this same site.
@sei-js/x402, @sei-js/x402-fetch, @sei-js/x402-axios, and @sei-js/x402-express are all in the @sei-js npm scope and are actively recommended by ai/x402.mdx (lines 44-47) as the way to do x402 on Sei. They live in sei-protocol/sei-x402 rather than the sei-js monorepo, so the first sentence is defensible — but "Every other @sei-js package is deprecated on npm and no longer maintained. If one of these appears in your package.json, migrate off it" tells a reader with a working x402 integration to rip out maintained dependencies, and offers no replacement.
Suggest scoping the claim to the monorepo and carving out x402 explicitly, e.g.: "The five packages above are the current sei-js monorepo. The x402 packages (@sei-js/x402*) are maintained separately in sei-protocol/sei-x402 — see x402 Protocol. Every other @sei-js package is deprecated on npm."
|
|
||
| ## Installation | ||
|
|
||
| <Warning> |
There was a problem hiding this comment.
[suggestion] Good addition to move this above the install command, but it leaves a gap for Yarn users. The overrides block you link is npm/Bun format, and yarn add @sei-js/sei-global-wallet is still offered as an equal alternative twelve lines below (line 62). This PR's own create-sei.mdx spells out why that matters: "Yarn reads resolutions and pnpm reads pnpm.overrides, so both skip those pins." So a reader who follows this warning and then picks the Yarn tab silently installs the vulnerable axios/uuid anyway.
Either add a sentence here naming the Yarn resolutions / pnpm pnpm.overrides equivalents, or drop the yarn add alternative below.
|
|
||
| </CodeGroup> | ||
|
|
||
| Use `claimSpecific` with the same argument shape to claim a single payload rather than everything available to the address. |
There was a problem hiding this comment.
[suggestion] This sentence contradicts itself against the section intro. The intro says "Both functions take the signed payload as bytes and return a boolean," and this says claimSpecific has "the same argument shape" — but then describes different behavior ("a single payload rather than everything available to the address"). If the arguments really are identical, there is nothing to select on and the two functions are indistinguishable to a reader.
Most likely claimSpecific takes a second selector argument. Please show its actual signature (or a second code sample) rather than asserting sameness — this is the kind of detail that sends people to the ABI anyway.
| | Solo | `0x000000000000000000000000000000000000100C` | Claim Solo migration payloads | | ||
| | P256 | `0x0000000000000000000000000000000000001011` | Verify P-256 elliptic curve signatures | | ||
|
|
||
| This page shows Bank, Staking, Governance, Distribution, JSON, and Solo. The rest are covered on their own pages: [CosmWasm](/evm/precompiles/cosmwasm-precompiles/cosmwasm), [Address](/evm/precompiles/cosmwasm-precompiles/addr), [Pointer contracts](/evm/evm-parity/examples/pointer-contracts) for both pointer precompiles, and [P256](/evm/precompiles/p256-precompile). |
There was a problem hiding this comment.
[suggestion] "Pointer contracts for both pointer precompiles" overstates what that page covers. It only documents the Pointer view precompile (0x…100A) — its three sections are "Looking Up a Pointer Address", "Interacting with a CW20 Pointer as ERC-20", and "Interacting with a CW721 Pointer as ERC-721". Nothing on it covers the Pointer precompile at 0x…100B or registration, so a reader following this link for Register pointer contracts (the table row two lines up) lands somewhere that doesn't answer the question.
Either reword to "for pointer lookups" or add a registration section to that page.
| @@ -1635,12 +1674,12 @@ | |||
| }, | |||
| { | |||
| "source": "/agents", | |||
There was a problem hiding this comment.
[suggestion] Dropping /agents.md entirely is a bit of a shame — it's becoming the conventional URL for agent-facing instructions, and this is the one place it plausibly gets requested from outside.
If the diagnosis in the PR body is right (Mintlify appends .md to a redirect whose source ends in .md), then the fix isn't "delete the entry" — it's to point the source at the extensionless destination and let Mintlify append:
{ "source": "/agents.md", "destination": "/skill", "permanent": true }Worth one probe against mint dev before merging; if it resolves to /skill.md, you recover the URL for free. Same trick would apply to the removed /llms/skill.md entry.
| | --- | --- | | ||
| | Sei precompiles (staking, governance, distribution, oracle, P256, JSON, CosmWasm bridge) | EVM contracts at deterministic addresses. ABIs and contract addresses are exported from `@sei-js/precompiles` for use with any standard EVM library. | | ||
| | Pointer contracts (CW20 ↔ ERC-20, CW721 ↔ ERC-721) | Bridge between CosmWasm and EVM token standards. Standard ERC interfaces work against pointer contracts. | | ||
| | Sei precompiles (staking, governance, distribution, P256, JSON, Solo, pointers, and the CosmWasm bridge) | EVM contracts at deterministic addresses. ABIs and contract addresses are exported from `@sei-js/precompiles` for use with any standard EVM library. The retired Oracle and disabled IBC precompiles are not exported. | |
There was a problem hiding this comment.
[nit] AGENTS.md says "Precompiles live at specific addresses — always reference exact address when mentioning," and this PR expands the truncated 0x1001-style addresses to full 20-byte form on example-usage.mdx and skill.md for exactly that reason. These two are still elided (0x…100A, 0x…100B). Suggest 0x000000000000000000000000000000000000100A / …100B here too, for consistency and so the addresses are copy-pasteable.
| ### [@sei-js/sei-global-wallet](/evm/sei-global-wallet) | ||
|
|
||
| Connect to any Sei-compatible wallet using the EIP-6963 standard. Provides a cross-application embedded wallet experience with social login. | ||
| Add the EIP-6963 compatible Sei Global Wallet to a dApp. |
There was a problem hiding this comment.
[nit] The install snippet three lines below is still unpinned (npm install @sei-js/sei-global-wallet) while @sei-js/precompiles above it now pins @^3. Given line 14 states the current major is 2 and ESM-only, and /evm/sei-global-wallet carries a vulnerability warning gating installation on consumer overrides, this snippet should pin @^2 and link to that warning — otherwise it's the shortest path to an unpinned install with no mention of the overrides.
Refresh the x402 documentation to reflect the current x402 v2 protocol and recommend the upstream @x402 packages instead of the deprecated @sei-js/x402 family. The change adds migration guidance, network/asset references for Sei, and package replacement mappings across the docs and the LLMS generator. It also updates the style guide and sei-js index page to call out the deprecation status clearly.
There was a problem hiding this comment.
A large, mostly well-executed docs-accuracy pass: deleted pages all have matching redirects, every internal link I checked resolves, docs.json has no duplicate redirect sources, no stale arctic-1/@sei-js/evm/GAS_INFO/search_sei_js_docs references survive, and the deprecation story is consistent across skill.md, generate-llms.mjs, and the sei-js pages. The main gap is that the wholesale x402 v1→v2 rewrite introduces a large, entirely new upstream API surface that the PR's own verification table does not cover.
Findings: 0 blocking | 11 non-blocking | 5 posted inline
Blockers
- None at the file/PR level.
Non-blocking
- Second-opinion passes produced no output: both
codex-review.md(OpenAI Codex) andcursor-review.md(Cursor) are empty, so this review is unaided by those tools.REVIEW_GUIDELINES.mdis also empty, so no repo-specific standards were applied beyondAGENTS.md/STYLE_GUIDE.md. - The PR's verification table covers every
@sei-jsclaim against published tarballs but records nothing for the@x402v2 surface, which is the single largest block of new content (ai/x402.mdxis a 420→300 line full rewrite). Applying the same bar there before merge would close the last gap. llms.txt/llms-full.txtstill reference the deleted@sei-js/ledgerpage and old MCP guidance. The PR correctly leaves them alone perAGENTS.md, but the requiredregenerate-llms.ymlmanual dispatch after deploy is an out-of-band step with no tracking issue — worth filing one so it isn't dropped.- Version-pin consistency:
@sei-js/precompilesinstall snippets gained@^3everywhere, butnpm install @sei-js/sei-global-walletandnpm install @sei-js/registryremain unpinned even though the new note inevm/sei-js/index.mdxsays both are on breaking ESM-only majors. Consider@^2on those too. - The new bare-glob filesystem redirects (
/Users/*,/home/*,/sei-config-*, …) replace multi-segment:rest*captures. If Mintlify's*does not cross/boundaries, deep paths like/Users/me/.sei/config/app.tomlwould stop matching. The PR says these were probed with synthetic slugs; worth confirming one real multi-segment path resolves in production after deploy. evm/evm-parity/evm-compatibility.mdxnow lists precompiles as "staking, governance, distribution, P256, JSON, Solo, pointers, and the CosmWasm bridge", omitting Bank and Address, which the newexample-usage.mdxtable does include. Minor inconsistency between the two lists.- 5 suggestion(s)/nit(s) flagged inline on specific lines.
| | Deprecated package | Upstream replacement | | ||
| | --- | --- | | ||
| | `@sei-js/x402` | `@x402/core` and `@x402/evm` | | ||
| | `@sei-js/x402-fetch` | `@x402/fetch` and `@x402/evm` | |
There was a problem hiding this comment.
[suggestion] These two rows omit @x402/core, but the install tabs directly below (npm install @x402/core @x402/evm @x402/fetch viem) and the client sample at line 220 (import { x402Client } from "@x402/core/client") both require it. The express/hono/next rows do list @x402/core. Suggest adding it here for consistency.
Same two rows are duplicated in evm/sei-js/index.mdx:76-77 and have the same omission.
| import express from "express"; | ||
| import { HTTPFacilitatorClient } from "@x402/core/server"; | ||
| import { ExactEvmScheme } from "@x402/evm/exact/server"; | ||
| import { paymentMiddleware, x402ResourceServer } from "@x402/express"; |
There was a problem hiding this comment.
[suggestion] This rewrite asserts a lot of specific @x402 v2 API surface that isn't covered by the PR description's verification table: subpath exports (@x402/core/server, @x402/evm/exact/server, @x402/evm/exact/client), the x402ResourceServer / HTTPFacilitatorClient / ExactEvmScheme class names, the paymentMiddleware(routes, resourceServer) argument order, the "GET /weather" route-key shape, the client.register("eip155:*", …) wildcard, and the PAYMENT-REQUIRED / PAYMENT-SIGNATURE / PAYMENT-RESPONSE header names (lines 58-60).
The page is internally consistent, and I have no evidence any of it is wrong — but the PR verified every @sei-js claim against published tarballs and did none of that here, and this is the largest new block of copy-pasteable code in the diff. Worth running the Express and Fetch snippets (or at least resolving the imports) against the published @x402 packages before merge.
|
|
||
| </CodeGroup> | ||
|
|
||
| Use `claimSpecific` with the same argument shape to claim a single payload rather than everything available to the address. |
There was a problem hiding this comment.
[suggestion] This reads as self-contradictory with line 273 ("Both functions take the signed payload as bytes"). If claimSpecific takes exactly the same single bytes argument as claim, nothing distinguishes "a single payload" from "everything available to the address" — the payload is the same input either way. Please confirm the actual signature (I'd expect claimSpecific to take an extra argument) and reword.
| Add the EIP-6963 compatible Sei Global Wallet to a dApp. | ||
|
|
||
| ```bash | ||
| npm install @sei-js/sei-global-wallet |
There was a problem hiding this comment.
[suggestion] evm/sei-global-wallet.mdx now puts a <Warning> above its install command saying the consumer overrides must be added to the root manifest before installing (Dynamic pulls vulnerable axios/uuid). This index page still gives a bare install command with no such warning, so a reader landing here installs without the pins. Consider a one-line pointer to the overrides section next to this snippet.
| { | ||
| "source": "/agents.md", | ||
| "destination": "/llms/agents.md", | ||
| "source": "/llms/agents", |
There was a problem hiding this comment.
[nit] With /agents.md and /llms/skill.md dropped as redirect sources and llms/agents.md / llms/skill.md deleted from the tree, there is now no .md-suffixed path other than /skill.md itself. Agent tooling commonly fetches <host>/agents.md by convention. The PR argues these already 404'd due to Mintlify's .md suffixing, which is fine — but it's worth a post-deploy check that https://docs.sei.io/agents.md behaves acceptably, since it's the path most agents will try first.
Superseded: latest AI review found no blocking issues.
Summary
@sei-js/ledgerdocs and redirect its route to the EVM Ledger guideVerified package claims
The review flagged the same set of claims as unverifiable three rounds running. Each was checked against the published tarball rather than left asserted:
@sei-js/precompilesexportssei/seiTestnetexport { sei, seiTestnet } from 'viem/chains'seiLocalchain ID713714VIEM_*exports@sei-js/registryexportsNetworkCHAIN_INFO.supported_wallets['keplr','coin98']NEXT_PUBLIC_CHAIN=testnet.env.examplepackageManager: bun@1.3.14search_docssearch_sei_js_docsThe
viem/chainsfinding settles the contradiction the review raised twice: Viem owns those definitions and@sei-js/precompilesonly re-exports them, soviem/chainsis now the single source of truth acrossskill.md, the sei-js index, and the code samples.Review feedback addressed
create-sei: dropped the Next and Sharp version details that rot on the template's next release; restored an explicit Node floor; explained why Bun matters (itsoverridesblock is npm/Bun format, so Yarn and pnpm skip the security pins)@^3floor so install snippets stop resolving an unbounded major; exact 20-byte addresses perAGENTS.md; Solo gained a usage section; distribution's install snippets got a headingsei-global-wallet: moved the vulnerability warning above the install command and named the versions its overrides pinevm/ai-toolingduplicates that shadowed their own redirectsRedirect repairs
Probing all 233 redirects against a local preview surfaced entries that silently never worked:
:param(regex)capture syntax, so five filesystem-path guards never fired in local or production (/sei-config-,/sei-data-,/sei-backup-,/priv_validator_, and the OS-prefix alternation). Bare globs do match partial segments, so these are rewritten as/sei-config-*and friends, with the alternation expanded into one entry per OS prefix./agentsand/agents.mdpointed at/llms/agents.md, which was never published and returned 404. Both now resolve to the canonical/skill.md..mdto any redirect whose source already ends in.md, turning/agents.mdinto/llms/agents.md.mdand/llms/skill.mdinto/skill.md.md. Those two sources cannot be repaired by changing the destination, so they are dropped — they already 404'd, so this is no regression.llms/pair: both predate the rootskill.md,llms/agents.mdstill referred to the oldSKILL.md, and neither was reachable in production.Sweep result after the fix: 230/239 land on 200 with zero redirect chains. The nine remaining are explained — five are wildcard passthroughs probed with a synthetic slug (verified working with real slugs), and four correctly end at
/skill.md, which the local preview does not serve but production returns 200 for.One known platform limitation left in place:
/genesis.jsonredirects locally but 404s in production, since production routes extension-bearing paths to static-asset handling ahead of the redirect layer. Not fixable fromdocs.json.Follow-up
llms.txtandllms-full.txtare stale — they still list the deleted@sei-js/ledgerpage and the oldCUSTOM_RPC_URL/--httpMCP guidance. PerAGENTS.mdthese are not hand-edited, and the generator scrapes the deployed site, soregenerate-llms.ymlneeds a manual dispatch after this deploys.Test plan
npx --yes --package=node@24 --package=mint mint broken-linkspython3 -m json.tool docs.jsonnode --check scripts/generate-llms.mjsgit diff --checkmint devMade with Cursor