wayfinder-paths 0.1.23__tar.gz → 0.1.25__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.
Potentially problematic release.
This version of wayfinder-paths might be problematic. Click here for more details.
- wayfinder_paths-0.1.25/PKG-INFO +377 -0
- wayfinder_paths-0.1.25/README.md +354 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/pyproject.toml +4 -2
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/__init__.py +2 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/balance_adapter/adapter.py +429 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/balance_adapter/manifest.yaml +8 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/balance_adapter/test_adapter.py +0 -11
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/boros_adapter/__init__.py +17 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/boros_adapter/adapter.py +1574 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/boros_adapter/client.py +476 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/boros_adapter/manifest.yaml +10 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/boros_adapter/parsers.py +88 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/boros_adapter/test_adapter.py +460 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/boros_adapter/test_golden.py +156 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/boros_adapter/types.py +70 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/boros_adapter/utils.py +85 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/brap_adapter/adapter.py +1 -1
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/brap_adapter/manifest.yaml +9 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperlend_adapter/adapter.py +161 -26
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/hyperlend_adapter/manifest.yaml +9 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperlend_adapter/test_adapter.py +77 -13
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/hyperliquid_adapter/__init__.py +11 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperliquid_adapter/adapter.py +585 -61
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperliquid_adapter/executor.py +47 -68
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/hyperliquid_adapter/manifest.yaml +14 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperliquid_adapter/paired_filler.py +2 -3
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperliquid_adapter/test_adapter.py +17 -21
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperliquid_adapter/test_adapter_live.py +3 -6
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperliquid_adapter/test_executor.py +4 -8
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperliquid_adapter/test_utils.py +2 -2
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/ledger_adapter/manifest.yaml +7 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/ledger_adapter/test_adapter.py +1 -2
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/moonwell_adapter/adapter.py +1175 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/moonwell_adapter/manifest.yaml +14 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/moonwell_adapter/test_adapter.py +126 -219
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/multicall_adapter/__init__.py +7 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/multicall_adapter/adapter.py +166 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/multicall_adapter/manifest.yaml +5 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/multicall_adapter/test_adapter.py +97 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/pendle_adapter/README.md +102 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/pendle_adapter/__init__.py +7 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/pendle_adapter/adapter.py +1992 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/pendle_adapter/examples.json +11 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/pendle_adapter/manifest.yaml +21 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/pendle_adapter/test_adapter.py +666 -0
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/pool_adapter/manifest.yaml +6 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/token_adapter/examples.json +0 -4
- wayfinder_paths-0.1.25/wayfinder_paths/adapters/token_adapter/manifest.yaml +7 -0
- wayfinder_paths-0.1.25/wayfinder_paths/conftest.py +30 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/__init__.py +2 -0
- wayfinder_paths-0.1.25/wayfinder_paths/core/adapters/BaseAdapter.py +18 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/adapters/models.py +17 -7
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/clients/BRAPClient.py +1 -1
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/clients/TokenClient.py +47 -1
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/clients/WayfinderClient.py +1 -2
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/clients/protocols.py +21 -22
- wayfinder_paths-0.1.25/wayfinder_paths/core/clients/test_ledger_client.py +448 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/config.py +12 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/constants/__init__.py +15 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/constants/base.py +6 -1
- wayfinder_paths-0.1.25/wayfinder_paths/core/constants/contracts.py +52 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/constants/erc20_abi.py +0 -1
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/constants/hyperlend_abi.py +0 -4
- wayfinder_paths-0.1.25/wayfinder_paths/core/constants/hyperliquid.py +16 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/constants/moonwell_abi.py +0 -15
- wayfinder_paths-0.1.25/wayfinder_paths/core/engine/manifest.py +66 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/strategies/Strategy.py +0 -61
- wayfinder_paths-0.1.25/wayfinder_paths/core/strategies/__init__.py +12 -0
- wayfinder_paths-0.1.25/wayfinder_paths/core/strategies/opa_loop.py +167 -0
- wayfinder_paths-0.1.25/wayfinder_paths/core/utils/test_transaction.py +289 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/utils/transaction.py +44 -1
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/utils/web3.py +3 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/__init__.py +5 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/preview.py +185 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/scripting.py +84 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/server.py +52 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/state/profile_store.py +195 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/state/store.py +89 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/test_scripting.py +267 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/tools/balances.py +290 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/tools/discovery.py +158 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/tools/execute.py +770 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/tools/hyperliquid.py +931 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/tools/quotes.py +288 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/tools/run_script.py +286 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/tools/strategies.py +188 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/tools/tokens.py +46 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/tools/wallets.py +354 -0
- wayfinder_paths-0.1.25/wayfinder_paths/mcp/utils.py +129 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/policies/hyperliquid.py +1 -1
- wayfinder_paths-0.1.25/wayfinder_paths/policies/lifi.py +18 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/policies/util.py +8 -2
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/basis_trading_strategy/strategy.py +28 -119
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py +24 -53
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/__init__.py +3 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/boros_ops_mixin.py +450 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/constants.py +255 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/examples.json +37 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/hyperevm_ops_mixin.py +114 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/hyperliquid_ops_mixin.py +642 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/manifest.yaml +36 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/planner.py +460 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/risk_ops_mixin.py +886 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/snapshot_mixin.py +494 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/strategy.py +1194 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/test_planner_golden.py +374 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/test_strategy.py +202 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/types.py +365 -0
- wayfinder_paths-0.1.25/wayfinder_paths/strategies/boros_hype_strategy/withdraw_mixin.py +997 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py +3 -12
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py +7 -29
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py +63 -40
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/test_strategy.py +5 -15
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py +0 -34
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py +11 -34
- wayfinder_paths-0.1.25/wayfinder_paths/tests/__init__.py +0 -0
- wayfinder_paths-0.1.25/wayfinder_paths/tests/test_mcp_quote_swap.py +165 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/tests/test_test_coverage.py +1 -4
- wayfinder_paths-0.1.23/PKG-INFO +0 -354
- wayfinder_paths-0.1.23/README.md +0 -332
- wayfinder_paths-0.1.23/wayfinder_paths/adapters/balance_adapter/adapter.py +0 -179
- wayfinder_paths-0.1.23/wayfinder_paths/adapters/hyperliquid_adapter/__init__.py +0 -18
- wayfinder_paths-0.1.23/wayfinder_paths/adapters/moonwell_adapter/adapter.py +0 -983
- wayfinder_paths-0.1.23/wayfinder_paths/conftest.py +0 -23
- wayfinder_paths-0.1.23/wayfinder_paths/core/adapters/BaseAdapter.py +0 -43
- wayfinder_paths-0.1.23/wayfinder_paths/core/constants/contracts.py +0 -39
- wayfinder_paths-0.1.23/wayfinder_paths/core/strategies/__init__.py +0 -3
- wayfinder_paths-0.1.23/wayfinder_paths/scripts/create_strategy.py +0 -139
- wayfinder_paths-0.1.23/wayfinder_paths/scripts/make_wallets.py +0 -142
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/LICENSE +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/balance_adapter/README.md +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/balance_adapter/examples.json +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/brap_adapter/README.md +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/brap_adapter/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/brap_adapter/examples.json +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/brap_adapter/test_adapter.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperlend_adapter/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/hyperliquid_adapter/utils.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/ledger_adapter/README.md +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/ledger_adapter/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/ledger_adapter/adapter.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/ledger_adapter/examples.json +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/moonwell_adapter/README.md +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/moonwell_adapter/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/pool_adapter/README.md +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/pool_adapter/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/pool_adapter/adapter.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/pool_adapter/examples.json +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/pool_adapter/test_adapter.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/token_adapter/README.md +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/token_adapter/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/token_adapter/adapter.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/adapters/token_adapter/test_adapter.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/adapters/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/analytics/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/analytics/bootstrap.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/analytics/stats.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/analytics/test_analytics.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/clients/ClientManager.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/clients/HyperlendClient.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/clients/LedgerClient.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/clients/PoolClient.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/clients/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/constants/chains.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/constants/tokens.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/strategies/base.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/strategies/descriptors.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/utils/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/utils/evm_helpers.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/utils/tokens.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/core/utils/wallets.py +0 -0
- {wayfinder_paths-0.1.23/wayfinder_paths/scripts → wayfinder_paths-0.1.25/wayfinder_paths/mcp/state}/__init__.py +0 -0
- {wayfinder_paths-0.1.23/wayfinder_paths/strategies → wayfinder_paths-0.1.25/wayfinder_paths/mcp/tools}/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/policies/enso.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/policies/erc20.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/policies/evm.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/policies/hyper_evm.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/policies/hyperlend.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/policies/moonwell.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/policies/prjx.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/run_strategy.py +0 -0
- {wayfinder_paths-0.1.23/wayfinder_paths/tests → wayfinder_paths-0.1.25/wayfinder_paths/strategies}/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/basis_trading_strategy/README.md +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/basis_trading_strategy/__init__.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/basis_trading_strategy/constants.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/basis_trading_strategy/examples.json +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/basis_trading_strategy/snapshot_mixin.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/basis_trading_strategy/types.py +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/hyperlend_stable_yield_strategy/examples.json +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/README.md +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/examples.json +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/stablecoin_yield_strategy/README.md +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/strategies/stablecoin_yield_strategy/examples.json +0 -0
- {wayfinder_paths-0.1.23 → wayfinder_paths-0.1.25}/wayfinder_paths/tests/test_utils.py +0 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: wayfinder-paths
|
|
3
|
+
Version: 0.1.25
|
|
4
|
+
Summary: Wayfinder Path: strategies and adapters
|
|
5
|
+
Author: Wayfinder
|
|
6
|
+
Author-email: dev@wayfinder.ai
|
|
7
|
+
Requires-Python: >=3.12,<4.0
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
10
|
+
Requires-Dist: aiocache (>=0.12.3,<0.13.0)
|
|
11
|
+
Requires-Dist: aiohttp (>=3.13.0,<4.0.0)
|
|
12
|
+
Requires-Dist: eth-account (>=0.13.7,<0.14.0)
|
|
13
|
+
Requires-Dist: httpx (>=0.28.1,<0.29.0)
|
|
14
|
+
Requires-Dist: hyperliquid-felix
|
|
15
|
+
Requires-Dist: loguru (>=0.7.3,<0.8.0)
|
|
16
|
+
Requires-Dist: numpy (>=1.26.0,<2.0.0)
|
|
17
|
+
Requires-Dist: pandas (>=2.2.0,<3.0.0)
|
|
18
|
+
Requires-Dist: pydantic (>=2.11.9,<3.0.0)
|
|
19
|
+
Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
|
|
20
|
+
Requires-Dist: web3 (>=7.13.0,<8.0.0)
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# Wayfinder Paths SDK
|
|
24
|
+
|
|
25
|
+
[](https://www.python.org/downloads/)
|
|
26
|
+
[](https://pypi.org/project/wayfinder-paths/)
|
|
27
|
+
[](https://discord.gg/fUVwGMXjm3)
|
|
28
|
+
|
|
29
|
+
**An open-source SDK for building and managing automated DeFi strategies.** Use it locally to deposit into, monitor, rebalance, and exit strategies across multiple chains and protocols. Powered by the [Wayfinder API](https://wayfinder.ai).
|
|
30
|
+
|
|
31
|
+
## What is Wayfinder Paths?
|
|
32
|
+
|
|
33
|
+
Wayfinder Paths is an SDK that lets you:
|
|
34
|
+
|
|
35
|
+
- **Enter and exit DeFi strategies** - Deposit funds, let strategies auto-rebalance, withdraw when ready
|
|
36
|
+
- **Build custom trading paths** - Create your own adapters and strategies for any protocol
|
|
37
|
+
- **Use Claude as your DeFi co-pilot** - With MCP (Model Context Protocol) integration, Claude can execute swaps, check balances, place perp orders, and manage your positions conversationally
|
|
38
|
+
|
|
39
|
+
Think of it as programmable DeFi infrastructure that connects your wallets to yield strategies, perpetual exchanges, lending protocols, and cross-chain bridges.
|
|
40
|
+
|
|
41
|
+
## Getting Your Wayfinder API Key
|
|
42
|
+
|
|
43
|
+
**You need a Wayfinder API key to use this SDK.** The API provides token resolution, cross-chain routing, balance queries, and more.
|
|
44
|
+
|
|
45
|
+
1. Go to [wayfinder.ai](https://wayfinder.ai)
|
|
46
|
+
2. Create an account or log in
|
|
47
|
+
3. Navigate to your account settings to generate an API key
|
|
48
|
+
4. Add it to your `config.json` under `system.api_key`
|
|
49
|
+
|
|
50
|
+
## Quick Start
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Clone the repository
|
|
54
|
+
git clone https://github.com/WayfinderFoundation/wayfinder-paths.git
|
|
55
|
+
cd wayfinder-paths
|
|
56
|
+
|
|
57
|
+
# One-command setup (installs Poetry + deps, prompts for your Wayfinder API key, updates .mcp.json)
|
|
58
|
+
python3 scripts/setup.py
|
|
59
|
+
|
|
60
|
+
# Optional: create a strategy-specific wallet
|
|
61
|
+
poetry run python scripts/make_wallets.py --label stablecoin_yield_strategy
|
|
62
|
+
|
|
63
|
+
# Check strategy status
|
|
64
|
+
poetry run python wayfinder_paths/run_strategy.py stablecoin_yield_strategy --action status --config config.json
|
|
65
|
+
|
|
66
|
+
# Deposit into a strategy
|
|
67
|
+
poetry run python wayfinder_paths/run_strategy.py stablecoin_yield_strategy --action deposit \
|
|
68
|
+
--main-token-amount 100 --gas-token-amount 0.01 --config config.json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Claude MCP Integration
|
|
72
|
+
|
|
73
|
+
**Turn Claude into an on-chain trading and DeFi engine.** The SDK includes an MCP server that gives Claude direct access to:
|
|
74
|
+
|
|
75
|
+
- **Wallet balances** across all supported chains
|
|
76
|
+
- **Token swaps** via the BRAP cross-chain router
|
|
77
|
+
- **Hyperliquid perpetuals** - market data, orders, leverage, withdrawals
|
|
78
|
+
- **Strategy management** - analyze, snapshot, and query any strategy
|
|
79
|
+
- **Script execution** - run custom Python scripts from `.wayfinder_runs/`
|
|
80
|
+
|
|
81
|
+
### Setting Up MCP with Claude Code
|
|
82
|
+
|
|
83
|
+
This repo includes a project-scoped Claude Code MCP config at `.mcp.json` (you'll be prompted to enable it).
|
|
84
|
+
If you prefer a global config instead, add:
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"mcpServers": {
|
|
89
|
+
"wayfinder": {
|
|
90
|
+
"command": "poetry",
|
|
91
|
+
"args": ["run", "python", "-m", "wayfinder_paths.mcp.server"],
|
|
92
|
+
"cwd": "/path/to/wayfinder-paths"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Available MCP Tools
|
|
99
|
+
|
|
100
|
+
| Tool | Description |
|
|
101
|
+
|------|-------------|
|
|
102
|
+
| `discover` | List available adapters and strategies |
|
|
103
|
+
| `describe` | Get detailed info about any adapter or strategy |
|
|
104
|
+
| `wallets` | List or create local wallets |
|
|
105
|
+
| `tokens` | Resolve token metadata by ID or address |
|
|
106
|
+
| `balances` | Query token/pool balances across chains |
|
|
107
|
+
| `quote_swap` | Get swap quotes without executing |
|
|
108
|
+
| `execute` | Execute swaps, sends, and Hyperliquid deposits |
|
|
109
|
+
| `hyperliquid` | Read-only perp market data and user state |
|
|
110
|
+
| `hyperliquid_execute` | Place orders, update leverage, withdraw |
|
|
111
|
+
| `run_strategy` | Analyze strategies, get snapshots and policies |
|
|
112
|
+
| `run_script` | Execute local Python scripts safely |
|
|
113
|
+
|
|
114
|
+
### Example Conversation with Claude
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
You: What's my balance on Arbitrum?
|
|
118
|
+
|
|
119
|
+
Claude: [Uses balances tool to query your wallet]
|
|
120
|
+
Your Arbitrum wallet (0x81830...) holds:
|
|
121
|
+
- 1,245.32 USDC ($1,245.32)
|
|
122
|
+
- 0.42 ETH ($1,512.00)
|
|
123
|
+
- 15,000 ARB ($8,250.00)
|
|
124
|
+
|
|
125
|
+
You: Swap 500 USDC to ETH
|
|
126
|
+
|
|
127
|
+
Claude: [Uses quote_swap, then execute with your approval]
|
|
128
|
+
Swapped 500 USDC for 0.139 ETH via Uniswap V3
|
|
129
|
+
TX: 0xabc123...
|
|
130
|
+
|
|
131
|
+
You: Open a 2x long on BTC with $1000
|
|
132
|
+
|
|
133
|
+
Claude: [Uses hyperliquid_execute to place the order]
|
|
134
|
+
Opened BTC-PERP long position:
|
|
135
|
+
- Size: 0.0234 BTC (~$1,000 notional)
|
|
136
|
+
- Leverage: 2x
|
|
137
|
+
- Entry: $42,735.50
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Available Strategies
|
|
141
|
+
|
|
142
|
+
| Strategy | Description | Chain | Risk |
|
|
143
|
+
|----------|-------------|-------|------|
|
|
144
|
+
| **Stablecoin Yield** | USDC yield optimization across Base pools | Base | Low |
|
|
145
|
+
| **HyperLend Stable Yield** | Stablecoin rotation on HyperLend | HyperEVM | Medium |
|
|
146
|
+
| **Moonwell wstETH Loop** | Leveraged LST carry trade | Base | High |
|
|
147
|
+
| **Basis Trading** | Delta-neutral funding rate capture | Hyperliquid | High |
|
|
148
|
+
| **Boros HYPE** | Multi-leg HYPE yield with rate locking | Multi-chain | High |
|
|
149
|
+
|
|
150
|
+
### Strategy Lifecycle
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
from wayfinder_paths.core.strategies.Strategy import Strategy, StatusDict, StatusTuple
|
|
154
|
+
|
|
155
|
+
class MyStrategy(Strategy):
|
|
156
|
+
name = "My Strategy"
|
|
157
|
+
|
|
158
|
+
def __init__(self, config=None, **kwargs):
|
|
159
|
+
super().__init__(config, **kwargs)
|
|
160
|
+
balance_adapter = BalanceAdapter(config, **kwargs)
|
|
161
|
+
self.balance_adapter = balance_adapter
|
|
162
|
+
|
|
163
|
+
async def deposit(self, main_token_amount=0.0, gas_token_amount=0.0) -> StatusTuple:
|
|
164
|
+
"""Move funds from main wallet into strategy wallet."""
|
|
165
|
+
return (True, "Deposited successfully")
|
|
166
|
+
|
|
167
|
+
async def update(self) -> StatusTuple:
|
|
168
|
+
"""Rebalance or optimize positions."""
|
|
169
|
+
return (True, "Updated successfully")
|
|
170
|
+
|
|
171
|
+
async def exit(self, **kwargs) -> StatusTuple:
|
|
172
|
+
"""Transfer funds from strategy wallet back to main wallet."""
|
|
173
|
+
return (True, "Exited successfully")
|
|
174
|
+
|
|
175
|
+
async def _status(self) -> StatusDict:
|
|
176
|
+
"""Report current state."""
|
|
177
|
+
return {
|
|
178
|
+
"portfolio_value": 0.0,
|
|
179
|
+
"net_deposit": 0.0,
|
|
180
|
+
"strategy_status": {"message": "healthy"},
|
|
181
|
+
"gas_available": 0.0,
|
|
182
|
+
"gassed_up": True,
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Available Adapters
|
|
187
|
+
|
|
188
|
+
| Adapter | Purpose | External Protocol |
|
|
189
|
+
|---------|---------|-------------------|
|
|
190
|
+
| **BalanceAdapter** | Wallet balances, cross-wallet transfers | - |
|
|
191
|
+
| **BRAPAdapter** | Cross-chain swaps and bridges | Wayfinder BRAP Router |
|
|
192
|
+
| **BorosAdapter** | Fixed-rate lending positions | Boros Protocol |
|
|
193
|
+
| **HyperliquidAdapter** | Perps, spot, deposits, withdrawals | Hyperliquid DEX |
|
|
194
|
+
| **HyperlendAdapter** | Stablecoin lending | HyperLend Protocol |
|
|
195
|
+
| **MoonwellAdapter** | Lending/borrowing on Base | Moonwell Protocol |
|
|
196
|
+
| **PendleAdapter** | PT/YT discovery + Hosted SDK convert (swap/mint/roll/LP) | Pendle Protocol |
|
|
197
|
+
| **MulticallAdapter** | Batch contract calls | Multicall3 |
|
|
198
|
+
| **LedgerAdapter** | Transaction recording | - |
|
|
199
|
+
| **TokenAdapter** | Token metadata and prices | Wayfinder API |
|
|
200
|
+
| **PoolAdapter** | DeFi pool analytics | DeFi Llama |
|
|
201
|
+
|
|
202
|
+
## Configuration
|
|
203
|
+
|
|
204
|
+
Create `config.json` in the project root:
|
|
205
|
+
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"system": {
|
|
209
|
+
"api_base_url": "https://api.wayfinder.ai",
|
|
210
|
+
"api_key": "wk_your_api_key_here"
|
|
211
|
+
},
|
|
212
|
+
"strategy": {
|
|
213
|
+
"rpc_urls": {
|
|
214
|
+
"1": "https://eth.llamarpc.com",
|
|
215
|
+
"8453": "https://mainnet.base.org",
|
|
216
|
+
"42161": "https://arb1.arbitrum.io/rpc",
|
|
217
|
+
"999": "https://rpc.hyperliquid.xyz"
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
"wallets": [
|
|
221
|
+
{
|
|
222
|
+
"label": "main",
|
|
223
|
+
"address": "0x...",
|
|
224
|
+
"private_key_hex": "..."
|
|
225
|
+
}
|
|
226
|
+
]
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Supported Chains
|
|
231
|
+
|
|
232
|
+
| Chain | ID | Code |
|
|
233
|
+
|-------|-----|------|
|
|
234
|
+
| Ethereum | 1 | `ethereum` |
|
|
235
|
+
| Base | 8453 | `base` |
|
|
236
|
+
| Arbitrum | 42161 | `arbitrum` |
|
|
237
|
+
| Polygon | 137 | `polygon` |
|
|
238
|
+
| BSC | 56 | `bsc` |
|
|
239
|
+
| HyperEVM | 999 | `hyperevm` |
|
|
240
|
+
|
|
241
|
+
## Architecture
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
245
|
+
│ Claude + MCP Server │
|
|
246
|
+
│ "Swap 100 USDC to ETH" → execute tool → transaction │
|
|
247
|
+
└─────────────────────────────────────────────────────────────┘
|
|
248
|
+
│
|
|
249
|
+
▼
|
|
250
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
251
|
+
│ Strategy Layer │
|
|
252
|
+
│ Strategies orchestrate adapters to capture yield │
|
|
253
|
+
│ (deposit → update → update → ... → exit) │
|
|
254
|
+
└─────────────────────────────────────────────────────────────┘
|
|
255
|
+
│
|
|
256
|
+
▼
|
|
257
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
258
|
+
│ Adapter Layer │
|
|
259
|
+
│ Protocol integrations: Hyperliquid, Moonwell, Boros, etc. │
|
|
260
|
+
│ All methods return (success: bool, data: Any) tuples │
|
|
261
|
+
└─────────────────────────────────────────────────────────────┘
|
|
262
|
+
│
|
|
263
|
+
▼
|
|
264
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
265
|
+
│ Client Layer │
|
|
266
|
+
│ TokenClient, BRAPClient, LedgerClient │
|
|
267
|
+
│ Authenticated via X-API-KEY header │
|
|
268
|
+
└─────────────────────────────────────────────────────────────┘
|
|
269
|
+
│
|
|
270
|
+
▼
|
|
271
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
272
|
+
│ Network Layer │
|
|
273
|
+
│ Wayfinder API • Chain RPCs • Protocol APIs │
|
|
274
|
+
└─────────────────────────────────────────────────────────────┘
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## CLI Reference
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
# Check strategy status
|
|
281
|
+
poetry run python wayfinder_paths/run_strategy.py <strategy> --action status
|
|
282
|
+
|
|
283
|
+
# Deposit funds into strategy
|
|
284
|
+
poetry run python wayfinder_paths/run_strategy.py <strategy> --action deposit \
|
|
285
|
+
--main-token-amount 100 --gas-token-amount 0.01
|
|
286
|
+
|
|
287
|
+
# Run strategy update cycle
|
|
288
|
+
poetry run python wayfinder_paths/run_strategy.py <strategy> --action update
|
|
289
|
+
|
|
290
|
+
# Withdraw funds
|
|
291
|
+
poetry run python wayfinder_paths/run_strategy.py <strategy> --action withdraw
|
|
292
|
+
|
|
293
|
+
# Exit strategy (return all funds to main wallet)
|
|
294
|
+
poetry run python wayfinder_paths/run_strategy.py <strategy> --action exit
|
|
295
|
+
|
|
296
|
+
# Run continuously
|
|
297
|
+
poetry run python wayfinder_paths/run_strategy.py <strategy> --action run
|
|
298
|
+
|
|
299
|
+
# Partial liquidation
|
|
300
|
+
poetry run python wayfinder_paths/run_strategy.py <strategy> --action partial-liquidate --amount 50
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## Contributing
|
|
304
|
+
|
|
305
|
+
We welcome contributions! You can add your own strategies and adapters to the SDK.
|
|
306
|
+
|
|
307
|
+
### Adding a New Strategy
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
# Use the convenience command
|
|
311
|
+
just create-strategy "My Strategy Name"
|
|
312
|
+
|
|
313
|
+
# Or copy the template manually
|
|
314
|
+
cp -r wayfinder_paths/templates/strategy wayfinder_paths/strategies/my_strategy
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
Implement the required methods:
|
|
318
|
+
- `deposit()` - Move funds from main wallet to strategy
|
|
319
|
+
- `update()` - Rebalance/optimize positions
|
|
320
|
+
- `exit()` - Return funds to main wallet
|
|
321
|
+
- `_status()` - Report current state
|
|
322
|
+
|
|
323
|
+
### Adding a New Adapter
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
cp -r wayfinder_paths/templates/adapter wayfinder_paths/adapters/my_adapter
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Implement protocol-specific methods, returning `(success, data)` tuples.
|
|
330
|
+
|
|
331
|
+
### Contribution Process
|
|
332
|
+
|
|
333
|
+
The process for contributing new paths to the official SDK is still being defined. For now:
|
|
334
|
+
|
|
335
|
+
1. Fork the repository
|
|
336
|
+
2. Create your adapter or strategy
|
|
337
|
+
3. Add tests
|
|
338
|
+
4. Open a PR with a description of what your path does
|
|
339
|
+
|
|
340
|
+
Join our [Discord](https://discord.gg/fUVwGMXjm3) to discuss ideas and get help.
|
|
341
|
+
|
|
342
|
+
## Testing
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
# Generate test wallets
|
|
346
|
+
just create-wallets
|
|
347
|
+
|
|
348
|
+
# Run all tests
|
|
349
|
+
poetry run pytest -v
|
|
350
|
+
|
|
351
|
+
# Run smoke tests
|
|
352
|
+
poetry run pytest -k smoke -v
|
|
353
|
+
|
|
354
|
+
# Run adapter tests
|
|
355
|
+
poetry run pytest wayfinder_paths/adapters/ -v
|
|
356
|
+
|
|
357
|
+
# Run with coverage
|
|
358
|
+
poetry run pytest --cov=wayfinder_paths -v
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
## Security
|
|
362
|
+
|
|
363
|
+
- **Never commit `config.json`** - it contains private keys
|
|
364
|
+
- **Use test wallets** for development
|
|
365
|
+
- **DRY_RUN mode** - Set `DRY_RUN=1` env var to simulate executions
|
|
366
|
+
- **Idempotency** - MCP tools use idempotency keys to prevent duplicate transactions
|
|
367
|
+
|
|
368
|
+
## Community
|
|
369
|
+
|
|
370
|
+
- [Discord](https://discord.gg/fUVwGMXjm3) - Get help, share strategies, discuss DeFi
|
|
371
|
+
- [GitHub Issues](https://github.com/WayfinderFoundation/wayfinder-paths/issues) - Report bugs, request features
|
|
372
|
+
- [Wayfinder](https://wayfinder.ai) - Get your API key
|
|
373
|
+
|
|
374
|
+
## License
|
|
375
|
+
|
|
376
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
377
|
+
|