Changelog¶
All notable changes to Web3 Agent Kit are documented here.
[1.18.5] - 2026-09-29¶
Features¶
- chains: Base Sepolia (84532) registered as a first-class
Chainmember (base-sepolia, default RPChttps://sepolia.base.org,CHAIN_IDSentry, BaseScan Sepolia explorer) so the Insight/PriorSeal conformance spike can evaluate a Base Sepolia call through the same chain-validatedCallEnvelopeV1.from_transactiongate as every other chain. - examples: bounded WAK / Insight / PriorSeal conformance spike — WAK-owned JSON boundary, offline N1–N5b acceptance harness, live-boundary and call-event retention support, and the vendored v1 conformance bundle.
Build¶
cryptography>=41.0.0added to runtime dependencies (Ed25519 receipt/attestation verification used by the spike boundary).
Fixed¶
- The acceptance report records runtime provenance (
runtime.packageVersion, commit, tree state) alongside the fixture-pinnedwakVersion; a report produced by a tree carrying unreleased core changes is no longer indistinguishable from one produced by the released tag. Isolated core-change diff atdocs/review/1.18.5-core-change-base-sepolia.patch.
[1.18.4] - 2026-09-19¶
Fixed¶
- The static signer-surface check no longer misses violations when the scanned
package sits under a directory named
venv,.venv,buildordist. Exclusions were evaluated against the absolute path, so such an ancestor excluded the entire scan: the checker reported zero signer calls and exited 0 while an unapproved call was present. Exclusions are now relative to the scan root, so ancestors cannot suppress the scan while nested environment directories remain excluded.
This affected the most common way to run the check — from inside a virtualenv. CI did not catch it because the runner checks out to a path with no excluded ancestor.
Added¶
- Regression tests parametrised over five ancestor names and four nested directory names, plus the missing empty-stderr assertion on the checker module test.
[1.18.3] - 2026-09-18¶
Fixed¶
python -m web3_agent_kit.execution.p0_probeno longer emits aRuntimeWarning.web3_agent_kit.execution.__init__imported the probe eagerly, sorunpyfound it insys.modulesbefore executing it. The console entry point was unaffected — it never goes throughrunpy— which is why the warning survived a suite that exercised the entry point.run_all_probesremains importable fromweb3_agent_kit.executionvia a lazy wrapper, so the documented import path still works.
Added¶
- A test asserting
python -mproduces empty stderr, not merely exit 0. The bug was a warning, so a pass/fail-only check would not have caught it.
[1.18.2] - 2026-09-18¶
Fixed¶
- The CLI version pin is bumped alongside the package. It is hardcoded
separately from
pyproject.tomland__version__, and Release Please has no knowledge of it.
Changed¶
p0_probeandcheck_signing_surfacemoved intoweb3_agent_kit.execution, so both ship inside the wheel. Previously they lived intools/, which is not packaged, which meant an evidence bundle could reference a verification step that an installed package could not perform. New entry points:wak-p0-probeandwak-signing-surface.tools/keeps thin wrappers for the source-checkout workflow.
Added¶
- Packaging tests that build a wheel and inspect its contents, rather than asserting that a module imports. An import test passes in a source checkout even when the module is absent from the distribution.
[1.18.1] - 2026-09-18¶
Fixed¶
- execution: three pre-sign gate gaps that allowed signing without the
policy being fully applied. A chain mismatch between the evaluated chain and
the transaction's
chainIdwas not detected; an unbound wallet signed contract creation (to=None); and a policy allow produced a signature with no principal exact-call authorization. Each is reproducible withtools/p0_probe.pyagainst the previous revision. - The CLI version pin is now covered by a test. It is hardcoded separately from
pyproject.tomland__version__, and had drifted two minor versions behind without anything failing.
Added¶
CallEnvelopeV1(agent-call-envelope.v1) as a canonical, versioned call identity, with the policy verdict kept in a separate domain-separated commitment so "policy allowed" and "the principal authorized this exact call" remain independently verifiable.AuthorizationProviderprotocol andNullAuthorizationProvider. Policy allow is no longer sufficient to sign.tools/p0_probe.py, which reproduces the enforcement findings against any revision.
Changed¶
airdrop,messagingandgovernanceaccept an injected policy, authorization provider and preconfigured gate. Governance previously built a fresh gate per call, resetting its authorization sequence and replay set.
Breaking¶
PreSignInterceptorrequires an authorization provider for any signature.allow_unattendedis removed; confirmation is UX and cannot substitute for authorization.- Transactions must carry
from; the envelope needs an executor to have an identity. AuthorizationRequest.call_fingerprintchanged value. It is now the canonical envelope digest: the action label is excluded, the executor is included.
[1.18.0] - 2026-09-18¶
Features¶
- execution: enforced pre-sign authorization gate. Every write-capable module now signs through a single approved API that evaluates the execution policy before any signature is produced. A missing policy is fail-closed, a confirmation-required policy refuses to sign unattended, and every evaluation is recorded in an append-only audit log with the authorized call fingerprint.
- Added
PreSignInterceptorandWallet.bind_enforcement(). A wallet with no bound gate refuses to sign write-capable transactions. - Migrated the airdrop, messaging, governance, bridge and restaking signing paths behind the gate, including the three that previously bypassed the Wallet wrapper.
- Added
tools/check_signing_surface.py, enforced in CI, which fails on any new unapproved direct signer call.
Security¶
ExecutionPolicyis now exported and enforced on the signing path. It was previously unreachable from the modules that build transactions.
Breaking¶
- Modules that previously signed without a policy now raise
EnforcementDenied.messaging,governanceand airdrop accept an optionalpolicy=argument; when omitted, they deny rather than sign unprotected.
Dependencies¶
- Bumped web3, eth-account, eth-abi, eth-keys, eth-keyfile, eth-rlp, and several utility packages.
[1.16.2] - 2026-09-08¶
Fixed¶
- Synchronized package, CLI, documentation, and website metadata.
- Corrected the published coverage statistic and canonical website links.
- Fixed broken documentation anchors and completed the MkDocs navigation.
[1.14.0] - 2026-07-21¶
Security¶
- REST API now requires authentication (
X-API-Key/WEB3_API_KEY) on all sensitive endpoints; server fails closed and refuses to start ifWEB3_API_KEYis unset - Default API bind host changed from
0.0.0.0to127.0.0.1; explicit0.0.0.0now logs a network-exposure warning - CORS configuration hardened via
CORS_ALLOWED_ORIGINSenv var; unsafe*+ credentials combination is rejected at startup /wallet/createdisabled by default (ENABLE_WALLET_CREATE_ENDPOINT=false), clearer one-time-secret warning
Fixed¶
- Spend governor now enforced by default on every
Agent, and no longer crashes when integrated intoAgent._act() GET /wallet/balance/{address}now queries the requested address instead of the env wallet's balance
Added¶
Wallet.from_keystore(path, password)for standard Ethereum JSON keystore files
Removed¶
- Unused
httpx2dependency
Breaking Changes¶
WEB3_API_KEYis now mandatory to start the REST API serverAgentConfig.governoris active by default with conservative spend limits
[1.13.0] - 2026-07-14¶
Changed¶
- Version bump to 1.13.0 across package metadata (
__init__.py,pyproject.toml)
[1.12.0] - 2026-07-12¶
Fixed¶
- CRITICAL DX: package import path is now
web3_agent_kit(was incorrectly installed assrc) - README/docs/examples import paths aligned with real package name
- CLI version string synced to release version
- Notification module duplication cleaned (
notifications/canonical;utils/notif_*are shims)
Added¶
Agent(private_key=...)convenience constructorAgent.execute()alias forAgent.run()- CI import smoke test for public package path
Changed¶
- Source tree renamed:
src/→web3_agent_kit/ - Pytest/coverage config now tracks
web3_agent_kit
Stats¶
- 1,149 tests passing
- 61% coverage
- Public import:
from web3_agent_kit import Agent, Wallet, Chain
[1.11.0] - 2026-07-11¶
Added¶
- Solana module — full Solana blockchain integration
SolanaClient— async RPC client (getBalance, getTokenAccounts, sendTransaction, getTransaction, getTokenSupply)SolanaWallet— keypair management, send SOL/SPL tokens, sign messages (base58/base64)JupiterDEX— Jupiter aggregator (quote, swap, token search, price API)SolanaNFT— Metaplex DAS API (getAssetsByOwner, getAsset, collections, portfolio summary)- DEX Aggregator — unified multi-chain DEX interface
- EVM: 1inch, Paraswap, 0x Protocol
- Solana: Jupiter
get_best_quote()auto-selects best provider across all chains- 73 new tests — 45 Solana + 14 Aggregator + 14 NFT
pyproject.toml: addedsolanaoptional deps (solders, spl-token, base58)
Changed¶
Chain.SOLANAenum now backed by real implementation (was stub)soldersimport is lazy — only loaded whenSolanaWalletis instantiated
[1.10.0] - 2026-07-06¶
Added¶
- Async airdrop module — 31
time.sleep()calls converted toasyncio.sleep()/page.wait_for_timeout() scheduler.py,discovery.py,faucet.py,onchain.py,multi_wallet.py,wl_grinder.py,form_filler.py,base.py- Simulator test suite — 29 new tests for TransactionSimulator
- PyPI trusted publisher — OIDC-based auto-publish on GitHub Release (no API token needed)
Changed¶
AirdropScheduler.start()now uses async event loop in background threadAirdropScheduler.run_task_now()is now async (await)FaucetClaimer.claim_chain()is now async (await)AirdropFarmer.farm_campaign()is now async (await)- CI: added
pytest-asynciodependency for async test support
Stats¶
- 27 modules (was 23)
- 163 source files (was 115)
- 1,033 tests passing (was 991)
- 60% coverage (was 31%)
- 8 chains supported
[1.9.1] - 2026-07-01¶
Fixed¶
- Coverage badge: 58% → 31% (actual)
- Version bump to 1.9.1
Stats¶
- 23 modules
- 115 source files
- 991 tests passing
- 31% coverage
- 8 chains supported
[1.9.0] - 2026-06-30¶
Added¶
- Oracle Aggregator — Multi-source price feeds (Chainlink, DexScreener, CoinGecko) with weighted median, cache, and auto-fallback
- Event Listener — On-chain event subscription with webhooks, callbacks, and background polling
- Transaction Simulator — Pre-flight TX verification via eth_call, Tenderly API, and local fork
- Account Abstraction — ERC-4337 bundler, paymaster integration (Pimlico), smart account factory (SimpleAccount, Safe, Kernel)
- Cross-chain Messaging — LayerZero + Wormhole + CCIP unified API with status tracking and fee estimation
- Governance — Snapshot + Tally + on-chain governor, proposal tracking, voting power, delegation
.env.examplewith all module configurations- Integration test suite (
tests/test_integration.py) - PyPI auto-publish workflow via GitHub Actions
- Aave V3, Curve, Uniswap V3 DeFi integrations
Changed¶
restaking/moved toplugins/restaking/— now a plugin, not a core modulenotifications/merged intoutils/— backward-compatible re-exports maintained- README updated with 6 new module sections, architecture diagram, and stats
- PyPI keywords updated with oracle, erc4337, governance, cross-chain, layerzero, simulation
- Version bump to 1.9.0
Stats¶
- 23 modules (was 18)
- 115 source files (was 104)
- 32,743 lines of code
- 991 tests passing (was 986)
- 31% coverage
- 8 chains supported (was 7)
[1.8.0] - 2026-06-29¶
Added¶
- Aave V3 integration — supply, borrow, repay, liquidation
- Curve Finance — swaps across all pool types, gauge deposits
- Uniswap V3 — pool queries, multi-hop quotes, position NFTs
Changed¶
- CI workflow fixed (
httpx2typo removed) - README stats updated
[1.7.0] - 2026-06-28¶
Added¶
- Restaking module — EigenLayer, Babylon BTC, Solana restaking
- Notifications module — Telegram, Discord, email alerts
- Plugin system — custom tool registration
- MEV protection — Flashbots, private mempool
[1.6.0] - 2026-06-06¶
Added¶
- CLI tool
wak— 7 commands for terminal usage (info, doctor, wallet, gas, token, examples, agent) - ASCII art banner on CLI startup
- click + rich CLI dependencies
Changed¶
- Updated README with CLI tool usage
- Version bump to 1.6.0
[1.5.0] - 2026-06-05¶
Added¶
- Gas optimizer with historical analysis
- Portfolio tracker with P&L
- Cross-chain bridge via Li.Fi + Socket