web3-agent-kit 1.18.0__tar.gz → 1.18.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {web3_agent_kit-1.18.0/web3_agent_kit.egg-info → web3_agent_kit-1.18.2}/PKG-INFO +2 -1
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/pyproject.toml +5 -1
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_check_signing_surface.py +5 -13
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_cli.py +37 -1
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_enforced_module_gates.py +48 -8
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_messaging_events_gov.py +34 -4
- web3_agent_kit-1.18.2/tests/test_p0_hardening.py +541 -0
- web3_agent_kit-1.18.2/tests/test_p0_probe_packaging.py +168 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_pre_sign_interceptor.py +114 -7
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_wallet_enforcement.py +30 -2
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_wallet_extra.py +81 -9
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/__init__.py +1 -1
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/onchain.py +36 -6
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/main.py +1 -1
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/execution/__init__.py +28 -1
- web3_agent_kit-1.18.2/web3_agent_kit/execution/authorization.py +196 -0
- web3_agent_kit-1.18.2/web3_agent_kit/execution/check_signing_surface.py +353 -0
- web3_agent_kit-1.18.2/web3_agent_kit/execution/envelope.py +369 -0
- web3_agent_kit-1.18.2/web3_agent_kit/execution/interceptor.py +653 -0
- web3_agent_kit-1.18.2/web3_agent_kit/execution/p0_probe.py +390 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/governance/__init__.py +32 -13
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/messaging/__init__.py +12 -6
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/wallet/wallet.py +17 -13
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2/web3_agent_kit.egg-info}/PKG-INFO +2 -1
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit.egg-info/SOURCES.txt +6 -0
- web3_agent_kit-1.18.2/web3_agent_kit.egg-info/entry_points.txt +4 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit.egg-info/requires.txt +3 -0
- web3_agent_kit-1.18.0/web3_agent_kit/execution/interceptor.py +0 -349
- web3_agent_kit-1.18.0/web3_agent_kit.egg-info/entry_points.txt +0 -2
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/LICENSE +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/README.md +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/setup.cfg +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_agent_core_extra.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_aggregator.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_airdrop.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_airdrop_executor_cli.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_airdrop_new_modules.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_airdrop_sched_dash.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_api.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_api_models.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_api_routes.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_auto_compound.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_bridge.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_core.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_core_modules.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_dca_bot.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_defi.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_defi_extended.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_execution_intent.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_execution_policy.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_executor.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_fuzz.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_gas.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_integration.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_llm.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_mev.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_multi_wallet.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_new_features.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_nft.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_notifications.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_oracle.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_platforms.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_plugins.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_portfolio_tracker.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_restaking.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_security.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_simulator.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_sniper.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_solana_client.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_solana_dex.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_solana_lp.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_solana_nft.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_solana_wallet.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_trading_bridge_extra.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_uniswap_v3.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_watcher_extra.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/tests/test_yield_optimizer.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/account_abstraction/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/agent/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/agent/core.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/agent/llm.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/base.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/dashboard.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/discovery.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/base_executor.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/browser.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/captcha_solver.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/cli.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/galxe_exec.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/gleam_exec.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/intract_exec.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/layer3_exec.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/plugin_registry.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/port3_exec.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/questn.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/social_exec.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/taskon.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/executor/zealy_exec.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/faucet.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/form_filler.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/galxe.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/gleam.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/multi_wallet.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/referral.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/scheduler.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/social.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/tracker.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/wl_grinder.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/airdrop/zealy.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/models.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/routes/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/routes/approval.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/routes/bridge.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/routes/dca.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/routes/gas.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/routes/portfolio.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/routes/swap.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/routes/wallet.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/routes/watcher.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/api/routes/yield_opt.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/bridge/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/bridge/bridge.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/chains/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/chains/chain.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/__main__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/commands/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/commands/agent.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/commands/doctor.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/commands/examples.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/commands/gas.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/commands/info.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/commands/token.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/cli/commands/wallet.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/defi/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/defi/aggregator.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/defi/auto_compound.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/defi/uniswap_v3.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/defi/yield_optimizer.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/events/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/execution/errors.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/execution/intent.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/execution/policy.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/gas/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/gas/optimizer.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/mev/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/mev/frontrun_detection.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/mev/mev_strategy.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/mev/sandwich_protection.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/mev/utils.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/nft/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/nft/manager.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/nft/marketplace.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/nft/mint.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/nft/utils.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/nft/whitelist.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/notifications/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/notifications/discord.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/notifications/email_notifier.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/notifications/notifier.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/notifications/telegram.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/notifications/utils.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/oracle/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/plugins/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/plugins/examples/gas_tracker.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/plugins/restaking/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/plugins/restaking/eigenlayer.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/plugins/restaking/monitor.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/plugins/restaking/optimizer.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/plugins/restaking/protocols.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/portfolio/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/portfolio/tracker.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/py.typed +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/security/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/simulator/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/solana/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/solana/client.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/solana/dex.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/solana/lp.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/solana/nft.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/solana/wallet.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/trading/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/trading/dca.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/trading/sniper.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/utils/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/utils/notif_discord.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/utils/notif_email_notifier.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/utils/notif_notifier.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/utils/notif_telegram.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/utils/notif_utils.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/utils/prices.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/wallet/__init__.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/wallet/approval.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/wallet/multi_wallet.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit/wallet/watcher.py +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit.egg-info/dependency_links.txt +0 -0
- {web3_agent_kit-1.18.0 → web3_agent_kit-1.18.2}/web3_agent_kit.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: web3-agent-kit
|
|
3
|
-
Version: 1.18.
|
|
3
|
+
Version: 1.18.2
|
|
4
4
|
Summary: Open-source framework for building autonomous AI agents that interact with blockchain networks
|
|
5
5
|
Author-email: Maulana <khasbim240803@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -34,6 +34,7 @@ Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
|
|
34
34
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
35
35
|
Requires-Dist: hypothesis>=6.0; extra == "dev"
|
|
36
36
|
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
37
|
+
Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "dev"
|
|
37
38
|
Provides-Extra: solana
|
|
38
39
|
Requires-Dist: solders>=0.21.0; extra == "solana"
|
|
39
40
|
Requires-Dist: solana>=0.35.0; extra == "solana"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "web3-agent-kit"
|
|
7
|
-
version = "1.18.
|
|
7
|
+
version = "1.18.2"
|
|
8
8
|
description = "Open-source framework for building autonomous AI agents that interact with blockchain networks"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -35,6 +35,8 @@ dependencies = [
|
|
|
35
35
|
]
|
|
36
36
|
[project.scripts]
|
|
37
37
|
wak = "web3_agent_kit.cli:main"
|
|
38
|
+
wak-p0-probe = "web3_agent_kit.execution.p0_probe:main"
|
|
39
|
+
wak-signing-surface = "web3_agent_kit.execution.check_signing_surface:main"
|
|
38
40
|
|
|
39
41
|
|
|
40
42
|
[project.optional-dependencies]
|
|
@@ -44,6 +46,8 @@ dev = [
|
|
|
44
46
|
"pytest-asyncio>=0.23.0",
|
|
45
47
|
"hypothesis>=6.0",
|
|
46
48
|
"ruff>=0.1.0",
|
|
49
|
+
# tomllib is stdlib from 3.11. Packaging tests parse pyproject.toml.
|
|
50
|
+
"tomli>=2.0; python_version < '3.11'",
|
|
47
51
|
]
|
|
48
52
|
solana = [
|
|
49
53
|
"solders>=0.21.0",
|
|
@@ -6,7 +6,6 @@ tests pin its detection behaviour and its fail-closed exit codes.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
-
import importlib.util
|
|
10
9
|
import subprocess
|
|
11
10
|
import sys
|
|
12
11
|
import textwrap
|
|
@@ -15,19 +14,12 @@ from pathlib import Path
|
|
|
15
14
|
import pytest
|
|
16
15
|
|
|
17
16
|
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
18
|
-
|
|
17
|
+
# The check lives in the package so it ships in the wheel. tools/ keeps a thin
|
|
18
|
+
# wrapper for the source-checkout workflow, covered by
|
|
19
|
+
# test_p0_probe_packaging.py.
|
|
20
|
+
TOOL_PATH = REPO_ROOT / "web3_agent_kit" / "execution" / "check_signing_surface.py"
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
def _load_tool():
|
|
22
|
-
spec = importlib.util.spec_from_file_location("check_signing_surface", TOOL_PATH)
|
|
23
|
-
assert spec and spec.loader
|
|
24
|
-
module = importlib.util.module_from_spec(spec)
|
|
25
|
-
sys.modules[spec.name] = module
|
|
26
|
-
spec.loader.exec_module(module)
|
|
27
|
-
return module
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
tool = _load_tool()
|
|
22
|
+
from web3_agent_kit.execution import check_signing_surface as tool # noqa: E402
|
|
31
23
|
|
|
32
24
|
|
|
33
25
|
def _write(package: Path, relative: str, source: str) -> None:
|
|
@@ -39,9 +39,45 @@ class TestMainGroup:
|
|
|
39
39
|
assert "WAK" in result.output
|
|
40
40
|
|
|
41
41
|
def test_version(self):
|
|
42
|
+
"""The CLI must report the version the package actually declares.
|
|
43
|
+
|
|
44
|
+
Asserting a literal version string here means every release breaks this
|
|
45
|
+
test, and the failure says nothing about whether the CLI is wrong.
|
|
46
|
+
Compare against the package's own __version__ instead, so this catches
|
|
47
|
+
a CLI pin that has drifted from the package -- which is the real bug
|
|
48
|
+
it is here to prevent.
|
|
49
|
+
"""
|
|
50
|
+
from web3_agent_kit import __version__
|
|
51
|
+
|
|
42
52
|
result = runner.invoke(main, ["--version"])
|
|
43
53
|
assert result.exit_code == 0
|
|
44
|
-
assert
|
|
54
|
+
assert __version__ in result.output
|
|
55
|
+
|
|
56
|
+
def test_cli_version_matches_package_metadata(self):
|
|
57
|
+
"""pyproject.toml, __version__ and the CLI option must all agree."""
|
|
58
|
+
import re
|
|
59
|
+
from pathlib import Path
|
|
60
|
+
|
|
61
|
+
from web3_agent_kit import __version__
|
|
62
|
+
|
|
63
|
+
pyproject = Path(__file__).resolve().parents[1] / "pyproject.toml"
|
|
64
|
+
declared = re.search(
|
|
65
|
+
r'^version\s*=\s*"([^"]+)"', pyproject.read_text(), re.MULTILINE
|
|
66
|
+
).group(1)
|
|
67
|
+
cli_source = (
|
|
68
|
+
Path(__file__).resolve().parents[1]
|
|
69
|
+
/ "web3_agent_kit"
|
|
70
|
+
/ "cli"
|
|
71
|
+
/ "main.py"
|
|
72
|
+
).read_text()
|
|
73
|
+
pinned = re.search(r'version_option\(version="([^"]+)"', cli_source).group(1)
|
|
74
|
+
|
|
75
|
+
assert declared == __version__, (
|
|
76
|
+
f"pyproject says {declared}, package says {__version__}"
|
|
77
|
+
)
|
|
78
|
+
assert pinned == __version__, (
|
|
79
|
+
f"CLI is pinned to {pinned}, package is {__version__}"
|
|
80
|
+
)
|
|
45
81
|
|
|
46
82
|
def test_subcommands_registered(self):
|
|
47
83
|
result = runner.invoke(main, ["--help"])
|
|
@@ -14,10 +14,36 @@ import pytest
|
|
|
14
14
|
from web3_agent_kit.chains import Chain
|
|
15
15
|
from web3_agent_kit.execution import (
|
|
16
16
|
ActionType,
|
|
17
|
+
AuthorizationEvidence,
|
|
17
18
|
EnforcementDenied,
|
|
18
19
|
ExecutionPolicy,
|
|
19
20
|
PreSignInterceptor,
|
|
20
21
|
)
|
|
22
|
+
from web3_agent_kit.execution.envelope import CallEnvelopeV1
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class _AllowingProvider:
|
|
26
|
+
"""Verifier that authorizes exactly the call it is handed.
|
|
27
|
+
|
|
28
|
+
All three migrated modules now require principal exact-call authorization
|
|
29
|
+
on top of a policy allow, so each signing test supplies this.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
@property
|
|
33
|
+
def policy_id(self) -> str:
|
|
34
|
+
return "module-gate-test-provider"
|
|
35
|
+
|
|
36
|
+
def authorize(self, context):
|
|
37
|
+
return AuthorizationEvidence(
|
|
38
|
+
authorization_id="module-gate-test-auth",
|
|
39
|
+
envelope_digest=context.envelope_digest,
|
|
40
|
+
executor=context.envelope.executor,
|
|
41
|
+
authorizer="0x" + "99" * 20,
|
|
42
|
+
valid_from=0,
|
|
43
|
+
valid_until=2**31,
|
|
44
|
+
nonce="1",
|
|
45
|
+
policy_commitment_digest=context.policy_commitment.digest(),
|
|
46
|
+
)
|
|
21
47
|
from web3_agent_kit.messaging import CrossChainMessenger
|
|
22
48
|
|
|
23
49
|
# Address derived from TEST_KEY, so the "from" field matches the signer.
|
|
@@ -26,14 +52,20 @@ ENDPOINT = "0x7564105E977516C53bE337314c7E53838967bDaC"
|
|
|
26
52
|
TEST_KEY = "0x" + "33" * 32
|
|
27
53
|
|
|
28
54
|
|
|
29
|
-
def _tx(to: str = ENDPOINT, value: int = 0) -> dict:
|
|
55
|
+
def _tx(to: str = ENDPOINT, value: int = 0, chainId: int = 42161) -> dict:
|
|
56
|
+
"""A fully constructed transaction.
|
|
57
|
+
|
|
58
|
+
``chainId`` is explicit so each test states which chain it is signing on.
|
|
59
|
+
A transaction whose chainId disagrees with the chain the gate evaluated is
|
|
60
|
+
now refused, so an implicit default would hide the mismatch.
|
|
61
|
+
"""
|
|
30
62
|
return {
|
|
31
63
|
"to": to,
|
|
32
64
|
"from": SENDER,
|
|
33
65
|
"data": "0xdeadbeef",
|
|
34
66
|
"value": value,
|
|
35
67
|
"nonce": 5,
|
|
36
|
-
"chainId":
|
|
68
|
+
"chainId": chainId,
|
|
37
69
|
"gas": 300_000,
|
|
38
70
|
"gasPrice": 1_000_000_000,
|
|
39
71
|
}
|
|
@@ -44,12 +76,13 @@ def _tx(to: str = ENDPOINT, value: int = 0) -> dict:
|
|
|
44
76
|
# ---------------------------------------------------------------------------
|
|
45
77
|
|
|
46
78
|
|
|
47
|
-
def _messenger(policy=None) -> CrossChainMessenger:
|
|
79
|
+
def _messenger(policy=None, provider=True) -> CrossChainMessenger:
|
|
48
80
|
m = CrossChainMessenger(
|
|
49
81
|
rpc_url="http://localhost:8545",
|
|
50
82
|
src_chain="arbitrum",
|
|
51
83
|
private_key=TEST_KEY,
|
|
52
84
|
policy=policy,
|
|
85
|
+
authorization_provider=_AllowingProvider() if provider else None,
|
|
53
86
|
)
|
|
54
87
|
return m
|
|
55
88
|
|
|
@@ -100,8 +133,10 @@ def test_messaging_gate_signs_when_policy_allows():
|
|
|
100
133
|
)
|
|
101
134
|
m = _messenger(policy=policy)
|
|
102
135
|
gate = m._gate()
|
|
103
|
-
|
|
104
|
-
|
|
136
|
+
request = _authorization_request()
|
|
137
|
+
# The request's chain and the transaction's chainId must agree; the
|
|
138
|
+
# fixture's chainId is 42161, so the request is built on Arbitrum.
|
|
139
|
+
raw = gate.sign(request).raw_transaction
|
|
105
140
|
|
|
106
141
|
assert isinstance(raw, bytes)
|
|
107
142
|
assert len(raw) > 0
|
|
@@ -157,8 +192,11 @@ def test_messaging_resolves_known_and_unknown_chains():
|
|
|
157
192
|
def _farmer(policy=None):
|
|
158
193
|
from web3_agent_kit.airdrop.onchain import OnChainAirdropFarmer, OnChainConfig
|
|
159
194
|
|
|
160
|
-
farmer = OnChainAirdropFarmer(
|
|
161
|
-
|
|
195
|
+
farmer = OnChainAirdropFarmer(
|
|
196
|
+
OnChainConfig(chain="ethereum", dry_run=True),
|
|
197
|
+
policy=policy,
|
|
198
|
+
authorization_provider=_AllowingProvider(),
|
|
199
|
+
)
|
|
162
200
|
farmer._web3 = MagicMock()
|
|
163
201
|
farmer._account = MagicMock()
|
|
164
202
|
farmer._account.address = "0x" + "ac" * 20
|
|
@@ -201,7 +239,9 @@ def test_airdrop_gate_signs_when_policy_allows():
|
|
|
201
239
|
receipt.transactionHash.hex.return_value = "0xairdrop"
|
|
202
240
|
f._web3.eth.wait_for_transaction_receipt.return_value = receipt
|
|
203
241
|
|
|
204
|
-
result = f._send_transaction(
|
|
242
|
+
result = f._send_transaction(
|
|
243
|
+
_tx(to="0x" + "dd" * 20, chainId=1)
|
|
244
|
+
)
|
|
205
245
|
|
|
206
246
|
assert result == "0xairdrop"
|
|
207
247
|
f._web3.eth.send_raw_transaction.assert_called_once_with(b"raw-bytes")
|
|
@@ -10,6 +10,7 @@ import pytest
|
|
|
10
10
|
from web3_agent_kit.chains import Chain
|
|
11
11
|
from web3_agent_kit.execution import (
|
|
12
12
|
ActionType,
|
|
13
|
+
AuthorizationEvidence,
|
|
13
14
|
EnforcementDenied,
|
|
14
15
|
ExecutionPolicy,
|
|
15
16
|
)
|
|
@@ -388,15 +389,41 @@ class TestEvents:
|
|
|
388
389
|
assert sub.events_processed == 0
|
|
389
390
|
|
|
390
391
|
|
|
391
|
-
#
|
|
392
|
+
# ---------------------------------------------------------------------------
|
|
392
393
|
# Governance
|
|
393
|
-
#
|
|
394
|
+
# ---------------------------------------------------------------------------
|
|
395
|
+
class _GovernanceProvider:
|
|
396
|
+
"""Verifier that authorizes the exact call it is handed.
|
|
397
|
+
|
|
398
|
+
The gate requires principal exact-call authorization in addition to a
|
|
399
|
+
policy allow, so governance signing tests need a verifier that returns
|
|
400
|
+
evidence bound to the call under test.
|
|
401
|
+
"""
|
|
402
|
+
|
|
403
|
+
@property
|
|
404
|
+
def policy_id(self) -> str:
|
|
405
|
+
return "gov-test-provider"
|
|
406
|
+
|
|
407
|
+
def authorize(self, context):
|
|
408
|
+
return AuthorizationEvidence(
|
|
409
|
+
authorization_id="gov-test-auth",
|
|
410
|
+
envelope_digest=context.envelope_digest,
|
|
411
|
+
executor=context.envelope.executor,
|
|
412
|
+
authorizer="0x" + "99" * 20,
|
|
413
|
+
valid_from=0,
|
|
414
|
+
valid_until=2**31,
|
|
415
|
+
nonce="1",
|
|
416
|
+
policy_commitment_digest=context.policy_commitment.digest(),
|
|
417
|
+
)
|
|
418
|
+
|
|
419
|
+
|
|
394
420
|
class TestGovernance:
|
|
395
421
|
def _tracker(self):
|
|
396
422
|
with patch("web3.Web3"):
|
|
397
423
|
t = GovernanceTracker(rpc_url="https://x")
|
|
398
424
|
t.w3 = MagicMock()
|
|
399
425
|
t.w3.to_checksum_address.side_effect = lambda a: a
|
|
426
|
+
t._authorization_provider = _GovernanceProvider()
|
|
400
427
|
return t
|
|
401
428
|
|
|
402
429
|
def test_proposal_to_dict(self):
|
|
@@ -544,7 +571,7 @@ class TestGovernance:
|
|
|
544
571
|
"data": "0xdeadbeef",
|
|
545
572
|
"value": 0,
|
|
546
573
|
"nonce": 1,
|
|
547
|
-
"chainId":
|
|
574
|
+
"chainId": 1,
|
|
548
575
|
"gas": 200000,
|
|
549
576
|
"gasPrice": 1_000_000_000,
|
|
550
577
|
}
|
|
@@ -565,6 +592,9 @@ class TestGovernance:
|
|
|
565
592
|
),
|
|
566
593
|
require_confirmation=False,
|
|
567
594
|
)
|
|
595
|
+
# Policy allow is not authority: the gate also requires a principal
|
|
596
|
+
# exact-call authorization verifier.
|
|
597
|
+
t._authorization_provider = _GovernanceProvider()
|
|
568
598
|
|
|
569
599
|
result = t.delegate(delegatee="0xdel", token="0xt", private_key="0xkey")
|
|
570
600
|
assert result == "0xdelegatehash"
|
|
@@ -582,7 +612,7 @@ class TestGovernance:
|
|
|
582
612
|
"data": "0xdeadbeef",
|
|
583
613
|
"value": 0,
|
|
584
614
|
"nonce": 1,
|
|
585
|
-
"chainId":
|
|
615
|
+
"chainId": 1,
|
|
586
616
|
"gas": 200000,
|
|
587
617
|
"gasPrice": 1_000_000_000,
|
|
588
618
|
}
|