wayfinder-paths 0.1.29__py3-none-any.whl → 0.1.31__py3-none-any.whl

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.

Files changed (43) hide show
  1. wayfinder_paths/adapters/boros_adapter/adapter.py +313 -12
  2. wayfinder_paths/adapters/boros_adapter/test_adapter.py +125 -14
  3. wayfinder_paths/adapters/hyperliquid_adapter/adapter.py +17 -3
  4. wayfinder_paths/adapters/hyperliquid_adapter/exchange.py +5 -5
  5. wayfinder_paths/adapters/hyperliquid_adapter/local_signer.py +2 -33
  6. wayfinder_paths/adapters/hyperliquid_adapter/paired_filler.py +1 -1
  7. wayfinder_paths/adapters/hyperliquid_adapter/test_cancel_order.py +57 -0
  8. wayfinder_paths/adapters/hyperliquid_adapter/test_exchange_mid_prices.py +52 -0
  9. wayfinder_paths/adapters/hyperliquid_adapter/test_hyperliquid_sdk_live.py +64 -0
  10. wayfinder_paths/adapters/hyperliquid_adapter/util.py +9 -10
  11. wayfinder_paths/core/clients/PoolClient.py +1 -1
  12. wayfinder_paths/core/constants/hype_oft_abi.py +151 -0
  13. wayfinder_paths/core/strategies/Strategy.py +1 -2
  14. wayfinder_paths/mcp/tools/execute.py +48 -16
  15. wayfinder_paths/mcp/tools/hyperliquid.py +1 -13
  16. wayfinder_paths/mcp/tools/quotes.py +38 -124
  17. wayfinder_paths/strategies/basis_trading_strategy/manifest.yaml +24 -0
  18. wayfinder_paths/strategies/basis_trading_strategy/strategy.py +249 -29
  19. wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py +125 -15
  20. wayfinder_paths/strategies/boros_hype_strategy/boros_ops_mixin.py +57 -201
  21. wayfinder_paths/strategies/boros_hype_strategy/constants.py +1 -152
  22. wayfinder_paths/strategies/hyperlend_stable_yield_strategy/manifest.yaml +29 -0
  23. wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py +2 -0
  24. wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/manifest.yaml +33 -0
  25. wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py +2 -0
  26. wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml +23 -0
  27. wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py +2 -0
  28. wayfinder_paths/tests/test_manifests.py +93 -0
  29. wayfinder_paths/tests/test_mcp_balances.py +73 -0
  30. wayfinder_paths/tests/test_mcp_discovery.py +34 -0
  31. wayfinder_paths/tests/test_mcp_execute.py +146 -0
  32. wayfinder_paths/tests/test_mcp_hyperliquid_execute.py +69 -0
  33. wayfinder_paths/tests/test_mcp_idempotency_store.py +14 -0
  34. wayfinder_paths/tests/test_mcp_quote_swap.py +60 -0
  35. wayfinder_paths/tests/test_mcp_run_script.py +47 -0
  36. wayfinder_paths/tests/test_mcp_tokens.py +49 -0
  37. wayfinder_paths/tests/test_mcp_utils.py +35 -0
  38. wayfinder_paths/tests/test_mcp_wallets.py +38 -0
  39. {wayfinder_paths-0.1.29.dist-info → wayfinder_paths-0.1.31.dist-info}/METADATA +2 -2
  40. {wayfinder_paths-0.1.29.dist-info → wayfinder_paths-0.1.31.dist-info}/RECORD +42 -25
  41. {wayfinder_paths-0.1.29.dist-info → wayfinder_paths-0.1.31.dist-info}/WHEEL +1 -1
  42. wayfinder_paths/core/types.py +0 -19
  43. {wayfinder_paths-0.1.29.dist-info → wayfinder_paths-0.1.31.dist-info}/LICENSE +0 -0
@@ -0,0 +1,49 @@
1
+ from __future__ import annotations
2
+
3
+ from unittest.mock import AsyncMock, patch
4
+
5
+ import pytest
6
+
7
+ from wayfinder_paths.mcp.tools.tokens import tokens
8
+
9
+
10
+ @pytest.mark.asyncio
11
+ async def test_tokens_resolve_requires_query():
12
+ out = await tokens("resolve", query=None)
13
+ assert out["ok"] is False
14
+ assert out["error"]["code"] == "invalid_request"
15
+
16
+
17
+ @pytest.mark.asyncio
18
+ async def test_tokens_resolve_happy_path():
19
+ fake_client = AsyncMock()
20
+ fake_client.get_token_details = AsyncMock(return_value={"symbol": "USDC"})
21
+
22
+ with patch(
23
+ "wayfinder_paths.mcp.tools.tokens.TokenClient", return_value=fake_client
24
+ ):
25
+ out = await tokens("resolve", query="usd-coin-arbitrum")
26
+
27
+ assert out["ok"] is True
28
+ assert out["result"]["token"]["symbol"] == "USDC"
29
+
30
+
31
+ @pytest.mark.asyncio
32
+ async def test_tokens_gas_requires_chain_code():
33
+ out = await tokens("gas", chain_code=None)
34
+ assert out["ok"] is False
35
+ assert out["error"]["code"] == "invalid_request"
36
+
37
+
38
+ @pytest.mark.asyncio
39
+ async def test_tokens_fuzzy_happy_path():
40
+ fake_client = AsyncMock()
41
+ fake_client.fuzzy_search = AsyncMock(return_value={"results": [{"id": "foo"}]})
42
+
43
+ with patch(
44
+ "wayfinder_paths.mcp.tools.tokens.TokenClient", return_value=fake_client
45
+ ):
46
+ out = await tokens("fuzzy", query="usd", chain_code="arbitrum")
47
+
48
+ assert out["ok"] is True
49
+ assert out["result"]["results"][0]["id"] == "foo"
@@ -0,0 +1,35 @@
1
+ from __future__ import annotations
2
+
3
+ import pytest
4
+
5
+ from wayfinder_paths.mcp.utils import parse_amount_to_raw, repo_root, sha256_json
6
+
7
+
8
+ def test_repo_root_finds_pyproject():
9
+ root = repo_root()
10
+ assert (root / "pyproject.toml").exists()
11
+
12
+
13
+ def test_parse_amount_to_raw_scales_and_floors():
14
+ assert parse_amount_to_raw("1", 6) == 1_000_000
15
+ # Flooring: 1.23456789 with 6 decimals -> 1_234_567
16
+ assert parse_amount_to_raw("1.23456789", 6) == 1_234_567
17
+
18
+
19
+ def test_parse_amount_to_raw_rejects_non_positive():
20
+ with pytest.raises(ValueError, match="positive"):
21
+ parse_amount_to_raw("0", 18)
22
+ with pytest.raises(ValueError, match="positive"):
23
+ parse_amount_to_raw("-1", 18)
24
+
25
+
26
+ def test_parse_amount_to_raw_rejects_too_small_after_scaling():
27
+ with pytest.raises(ValueError, match="too small"):
28
+ parse_amount_to_raw("0.0000001", 6)
29
+
30
+
31
+ def test_sha256_json_is_stable_for_key_order():
32
+ a = sha256_json({"b": 2, "a": 1})
33
+ b = sha256_json({"a": 1, "b": 2})
34
+ assert a == b
35
+ assert a.startswith("sha256:")
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+
3
+ from types import SimpleNamespace
4
+ from unittest.mock import patch
5
+
6
+ import pytest
7
+
8
+ from wayfinder_paths.mcp.tools.wallets import _resolve_wallet_address, wallets
9
+
10
+
11
+ def test_resolve_wallet_address_prefers_explicit_address():
12
+ addr, lbl = _resolve_wallet_address(
13
+ wallet_label="main", wallet_address="0x000000000000000000000000000000000000dEaD"
14
+ )
15
+ assert addr == "0x000000000000000000000000000000000000dEaD"
16
+ assert lbl is None
17
+
18
+
19
+ @pytest.mark.asyncio
20
+ async def test_wallets_discover_portfolio_requires_confirmation_when_many_protocols():
21
+ store = SimpleNamespace(
22
+ get_protocols_for_wallet=lambda _addr: ["hyperliquid", "pendle", "moonwell"]
23
+ ) # noqa: E501
24
+
25
+ with patch(
26
+ "wayfinder_paths.mcp.tools.wallets.WalletProfileStore.default",
27
+ return_value=store,
28
+ ):
29
+ out = await wallets(
30
+ "discover_portfolio",
31
+ wallet_address="0x000000000000000000000000000000000000dEaD",
32
+ parallel=False,
33
+ )
34
+
35
+ assert out["ok"] is True
36
+ res = out["result"]
37
+ assert res["requires_confirmation"] is True
38
+ assert set(res["protocols_to_query"]) == {"hyperliquid", "pendle", "moonwell"}
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.1
2
2
  Name: wayfinder-paths
3
- Version: 0.1.29
3
+ Version: 0.1.31
4
4
  Summary: Wayfinder Path: strategies and adapters
5
5
  Author: Wayfinder
6
6
  Author-email: dev@wayfinder.ai
@@ -6,11 +6,11 @@ wayfinder_paths/adapters/balance_adapter/examples.json,sha256=3R1M4B_VsIy29viAuF
6
6
  wayfinder_paths/adapters/balance_adapter/manifest.yaml,sha256=w6Fb9Bui1QKjcGpRX1kzwe8GNGjQXAH6GtLp-D_Ez_Q,218
7
7
  wayfinder_paths/adapters/balance_adapter/test_adapter.py,sha256=BQWQWun9En4-10QUTSheSfp4bxypqDWWv1BjuHneu3w,2794
8
8
  wayfinder_paths/adapters/boros_adapter/__init__.py,sha256=y32d5WyoTzrqmnk3i1Vi13iMAVoJiWO2mO9YEpg5pGg,337
9
- wayfinder_paths/adapters/boros_adapter/adapter.py,sha256=vGQGxxGDKcX4fOX8ukp1QBoYXpTNrLpD1hbj4HJDLn4,66966
9
+ wayfinder_paths/adapters/boros_adapter/adapter.py,sha256=trBzDu5x0rHlwSFc5nJXaqXiB2AtiUiCndQAOLrmAKI,78755
10
10
  wayfinder_paths/adapters/boros_adapter/client.py,sha256=lEIMbVB3aH6JTsaqf619ppML5A1vNvkrHpcR4UJy-Xw,15406
11
11
  wayfinder_paths/adapters/boros_adapter/manifest.yaml,sha256=PGrhgw6A4Pf6Kqg9vGGL8QvL479K9yM0tpP3zhObxX4,240
12
12
  wayfinder_paths/adapters/boros_adapter/parsers.py,sha256=r_KtWeLhfIyfTgWZB0CUMGv8N4higojsTsLMhuFP7NM,2792
13
- wayfinder_paths/adapters/boros_adapter/test_adapter.py,sha256=5_tmQSj1s1XBkFjItL8bMHfNzmbOvCvhoypLd2_hNZU,21176
13
+ wayfinder_paths/adapters/boros_adapter/test_adapter.py,sha256=Y9Ddvff9iB3OFnBGYHkO_5RS5c2by4stym6WHxmnLJY,25456
14
14
  wayfinder_paths/adapters/boros_adapter/test_golden.py,sha256=9pQSYy8FdGfo38-jJPzvM9DlVK3OjuRQizEBsExp3FA,4895
15
15
  wayfinder_paths/adapters/boros_adapter/types.py,sha256=SJN1cUUZF9-_HZaa8TIsLbsOvJ6I-btqjhvjXk_D3cM,1613
16
16
  wayfinder_paths/adapters/boros_adapter/utils.py,sha256=fQY0AclEJbxFU4QHFcDsyRkEFPr2C3t6Mwp1FwtHfoU,2259
@@ -25,17 +25,20 @@ wayfinder_paths/adapters/hyperlend_adapter/adapter.py,sha256=knEb5j1kNZvOeus-4gy
25
25
  wayfinder_paths/adapters/hyperlend_adapter/manifest.yaml,sha256=M0xfk0KPpILSo-XtFgwFKIy-HZHunzBnXakh6yU_R_I,238
26
26
  wayfinder_paths/adapters/hyperlend_adapter/test_adapter.py,sha256=QYpXpxSw-aG20DXPbNowPZs8Z9BnACa-OO8mc0EaR9I,13677
27
27
  wayfinder_paths/adapters/hyperliquid_adapter/__init__.py,sha256=8kOiGrmGvk8BR16wHxVo1qaWwAQSTQbkcJg0cW46RCE,288
28
- wayfinder_paths/adapters/hyperliquid_adapter/adapter.py,sha256=R43_OsYjQt4qBFWbz8x_5VlTOmgfLz5mLQ06Kaj7HS4,45817
29
- wayfinder_paths/adapters/hyperliquid_adapter/exchange.py,sha256=VSSCmsSTnQ3qDjPRLZLA60mwHoBkn5l_f-h0H0g7yBw,12551
28
+ wayfinder_paths/adapters/hyperliquid_adapter/adapter.py,sha256=OOpfj-VoIYOfsxFH-GftDk9KcNB-aUZyG5IqheC_C8c,46174
29
+ wayfinder_paths/adapters/hyperliquid_adapter/exchange.py,sha256=95EjnChCfetPWWfhajNsl6UcNn-PQShlevxOpK4ec8E,12534
30
30
  wayfinder_paths/adapters/hyperliquid_adapter/executor.py,sha256=PDF8oM99m7EVgij8scLYkdpvFsq_lrhTVeLYrP_5vfY,18372
31
- wayfinder_paths/adapters/hyperliquid_adapter/local_signer.py,sha256=56RVsFy63pxXYzAxIyVbyn3NRBt1lQ6dCAvtBH7M9SU,2751
31
+ wayfinder_paths/adapters/hyperliquid_adapter/local_signer.py,sha256=OuUIFNYvN3_WyrvsVvGnvsOW97iiWJJnsdVBxCAulro,1637
32
32
  wayfinder_paths/adapters/hyperliquid_adapter/manifest.yaml,sha256=lwADwkooWOivqIUEAxiVTdHBYuchHyuQR8y40K_AUgw,315
33
- wayfinder_paths/adapters/hyperliquid_adapter/paired_filler.py,sha256=V_cIiNJYER6E3r8hYLTy1zR2YuO_GBKhn9rP5dkPaVs,35156
33
+ wayfinder_paths/adapters/hyperliquid_adapter/paired_filler.py,sha256=B7WeSjWqs1pjwE-CCY8rHW6MaWQsYG8js5iVvlq2Q_M,35151
34
34
  wayfinder_paths/adapters/hyperliquid_adapter/test_adapter.py,sha256=1oMMoHG6hNeq08Tcwtt4XYjEdGaO5Jc0daCPuKvMWPM,3784
35
35
  wayfinder_paths/adapters/hyperliquid_adapter/test_adapter_live.py,sha256=AuNfPrsd4TAJveYjOt4YhYk9vhhxJgin0STdEOTrqtY,5803
36
+ wayfinder_paths/adapters/hyperliquid_adapter/test_cancel_order.py,sha256=swFI3Iwi1-bNBgOInub-5uZ_P-wVP_Ke3DlNNM7VemE,2117
37
+ wayfinder_paths/adapters/hyperliquid_adapter/test_exchange_mid_prices.py,sha256=Mwik-5U0Q4OceeYeWbSnZKC6O4KIAIiVdZUMZiDvCmg,1423
36
38
  wayfinder_paths/adapters/hyperliquid_adapter/test_executor.py,sha256=9VzTGtGjjfUOt5dpahOFvttP2Oyla6tpQopmWANL89g,3525
39
+ wayfinder_paths/adapters/hyperliquid_adapter/test_hyperliquid_sdk_live.py,sha256=MTjVdCGEQ2ZvOVvebSdcFNWA28CgJ_QpZXR9SoRBcLw,2139
37
40
  wayfinder_paths/adapters/hyperliquid_adapter/test_utils.py,sha256=n2_vLEqwDTQDweiDW3an6K9ceTweJMT96oi56J5ebfs,5596
38
- wayfinder_paths/adapters/hyperliquid_adapter/util.py,sha256=f3LsIRNONSCcGVbZY7wd5-vPxsZpM5nEMYktnI79apA,8490
41
+ wayfinder_paths/adapters/hyperliquid_adapter/util.py,sha256=rwzsZ9USLSnWDK1vwAUh0IOC4qNQchimbWJrzlb-Y7Y,8515
39
42
  wayfinder_paths/adapters/hyperliquid_adapter/utils.py,sha256=J0UcXR60BHLj147qMZHocrcvIQ71GhGx90u3JDZ3gg8,3838
40
43
  wayfinder_paths/adapters/ledger_adapter/README.md,sha256=hxBXJg_wfH7gDTYqUL6yXkDARKTb1zdyYYIIxbvQMDQ,2574
41
44
  wayfinder_paths/adapters/ledger_adapter/__init__.py,sha256=CrFEf6_7I27g5CQPPOAFYzQvm33IpdkbQHCKiDdwiWk,64
@@ -84,7 +87,7 @@ wayfinder_paths/core/clients/BalanceClient.py,sha256=xR4Ux9Wy8Ou2dANLhSbrtABcCMI
84
87
  wayfinder_paths/core/clients/ClientManager.py,sha256=rNGGcqU9Y7gdnlkNlXtWUW2EB8W50I7i-sxQVc8IZT8,2179
85
88
  wayfinder_paths/core/clients/HyperlendClient.py,sha256=_10Hrbo3M4VbW3Nwlt1_rJMrz955u_AIanQotG0fwE8,5508
86
89
  wayfinder_paths/core/clients/LedgerClient.py,sha256=9PtXW2o_WZGfvu7wIwBuCPzXYex2B1rsMDN70tKgJeA,11713
87
- wayfinder_paths/core/clients/PoolClient.py,sha256=ij0aVwV73UiUndOmBrtpg1BhalSIr_Ab78pP7xQQHzY,4266
90
+ wayfinder_paths/core/clients/PoolClient.py,sha256=BHYBSlGzA4UcGX9eLMMJJks8ZjhWyIvkLmpvGuSCxWI,4263
88
91
  wayfinder_paths/core/clients/TokenClient.py,sha256=TRTKg4z0JFdNGjEaQ4UZlBAj1OS4eAyRwnEdUj2g5Yw,5008
89
92
  wayfinder_paths/core/clients/WayfinderClient.py,sha256=y7S535kakRP7pFqYEqUXygdW5hv-FMmtxds9ZL476jQ,3423
90
93
  wayfinder_paths/core/clients/__init__.py,sha256=Lx2hdR0j6obO47WWFk8MqIF_5DycAvw8M7-LTTBNLrY,1041
@@ -96,17 +99,17 @@ wayfinder_paths/core/constants/base.py,sha256=4jN3Qr8rBK2ZRAlFmRFeCyRPqwQwQufZx5
96
99
  wayfinder_paths/core/constants/chains.py,sha256=DA03zVjukRGndBB2EROaxvc1uW8bt2550ySh9Cn2J34,729
97
100
  wayfinder_paths/core/constants/contracts.py,sha256=frlJL90nHaXDv1DBPMVo5V4PljrneaW9RtonSQJ44MM,3344
98
101
  wayfinder_paths/core/constants/erc20_abi.py,sha256=o84ShHG1j59i1fkmG7qgBVo1bqdG5_5GRE1ptNlPBWU,2656
102
+ wayfinder_paths/core/constants/hype_oft_abi.py,sha256=JOuEWFWoB5COeW-4ba5oiOMXduDJk_G7nx4oUQfnb7g,5598
99
103
  wayfinder_paths/core/constants/hyperlend_abi.py,sha256=rcXnfYvw6Np40lNK1SVTXVknoapu0HbP1DHAR6g4x9A,3893
100
104
  wayfinder_paths/core/constants/hyperliquid.py,sha256=F-rWVvFd8DQdVB_2lmpvUbk9gIAxO2zzv9T6enIdBtY,904
101
105
  wayfinder_paths/core/constants/moonwell_abi.py,sha256=IERwnQKUG7yyKiICXcfybt8LgPCD1sze95dA2vJalLQ,10940
102
106
  wayfinder_paths/core/constants/tokens.py,sha256=lkpZXRJcnygcNKVvrIBgnUozPvcbpHT-BkqqpEG9Xug,326
103
107
  wayfinder_paths/core/engine/manifest.py,sha256=SLn87A2pZEPrSDH6ZmuMQJDyGINGjYueOwzVTGfcalI,2200
104
- wayfinder_paths/core/strategies/Strategy.py,sha256=CVV5hl9nVxtOnV8dB9vu3XJkYgS2yZ6Dh3_J-udgOD8,3772
108
+ wayfinder_paths/core/strategies/Strategy.py,sha256=-eHTG5kZJQRX7jjpGE8TYP-9z9gvndxXDk1mSDrHNC8,3718
105
109
  wayfinder_paths/core/strategies/__init__.py,sha256=5Hq9nJf1jS9oZuo0lRAOQw3hazZJg2jRmGCKtJF-1cs,247
106
110
  wayfinder_paths/core/strategies/base.py,sha256=-s0qeiGZl5CHTUL2PavGXM7ACkNlaa0c4jeZR_4DuBM,155
107
111
  wayfinder_paths/core/strategies/descriptors.py,sha256=2Olef0VWols1CWb-TWcb5pil2rztC0jP6F_Trpv2hIw,1958
108
112
  wayfinder_paths/core/strategies/opa_loop.py,sha256=Eoy4uUA2YSo9najJFUwS4wVykPKJ5A_i-Sf6XnwNsv0,5483
109
- wayfinder_paths/core/types.py,sha256=mArnxr6V09SNso3wH0ykvWX1AMx9NsYM6Ey3l-vEAGw,873
110
113
  wayfinder_paths/core/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
114
  wayfinder_paths/core/utils/evm_helpers.py,sha256=m_h9eMjcMW5a3Di6PGkpZOwpZkZ-tVdwiLsTZqFJacE,3809
112
115
  wayfinder_paths/core/utils/test_transaction.py,sha256=0GtXROAWmll-zgbIquO9TeqcClhhCmJJNFg1XoYAYIc,10613
@@ -125,9 +128,9 @@ wayfinder_paths/mcp/test_scripting.py,sha256=X-Fyy3lkpqOQjU_g5G9OaAOeliVqOJmh3u_
125
128
  wayfinder_paths/mcp/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
129
  wayfinder_paths/mcp/tools/balances.py,sha256=7uypGrWGPiy9035_7jxTV9sdehdD2Brz2GqHrXHM6kI,6854
127
130
  wayfinder_paths/mcp/tools/discovery.py,sha256=FQPhQFvrft0zKoC_YgOC2byLe8zPdZcjG0ZIuoy2xHQ,2945
128
- wayfinder_paths/mcp/tools/execute.py,sha256=CSNgwAk_SMwGgtcWg3B4RGVHFe546GMYXF40tMVIDg8,27269
129
- wayfinder_paths/mcp/tools/hyperliquid.py,sha256=mUtjXGPVj5eEzq346cg76fGzcC2eZIsih2g1dvecYkg,31844
130
- wayfinder_paths/mcp/tools/quotes.py,sha256=w-cJ1TB_t22RdTTo4dZ1O0HGPuYyMWNKFqGvAe72u7Y,9715
131
+ wayfinder_paths/mcp/tools/execute.py,sha256=XjQDfKpXWvUDW7V7d6Mu_CsivcU6ytc6upr7FHYn0IE,28608
132
+ wayfinder_paths/mcp/tools/hyperliquid.py,sha256=PizwbhSxnVktXm0uO6CIxR_1A7Ft-yca1F2SP_QpS0w,31412
133
+ wayfinder_paths/mcp/tools/quotes.py,sha256=EoYa4L8F9hKgqqdfDTdc2sBI0ybP6DU-yVYraHRc76o,7153
131
134
  wayfinder_paths/mcp/tools/run_script.py,sha256=RF83GyhXZlXEIcK24vS9bHDDm8Q1scQktBrxWBp6WX8,7887
132
135
  wayfinder_paths/mcp/tools/strategies.py,sha256=WSqVWXjvrOsS9X4sffI42lUf2h4QWRWjRQ0t9aHSifQ,6746
133
136
  wayfinder_paths/mcp/tools/tokens.py,sha256=AtFv39e6mJ9WeH1ufZ1U0KW6CUbUi2HtVAoiBbnD39A,1535
@@ -149,13 +152,14 @@ wayfinder_paths/strategies/basis_trading_strategy/README.md,sha256=kZtG5NVVZwWsu
149
152
  wayfinder_paths/strategies/basis_trading_strategy/__init__.py,sha256=kVcehFjBUtoi5xzSHI56jtDghsy0nYl6XIE6BI1l6aI,79
150
153
  wayfinder_paths/strategies/basis_trading_strategy/constants.py,sha256=dYQn_297CB1x9whic8YEMdEig0vibclDGCasjJL10mI,122
151
154
  wayfinder_paths/strategies/basis_trading_strategy/examples.json,sha256=q2wlAH8Gr-LUJeamKzWL1EtChL3TBWe0HQ4_P-VCdqQ,429
155
+ wayfinder_paths/strategies/basis_trading_strategy/manifest.yaml,sha256=KJ-vagOjzDvnU5irNE4r0YdaU5qwEyg0JZJE3O6JisY,1146
152
156
  wayfinder_paths/strategies/basis_trading_strategy/snapshot_mixin.py,sha256=F324ILz9w6uT7fkOVUa7gltp2LMEyGBlw3tz-ANcff8,37634
153
- wayfinder_paths/strategies/basis_trading_strategy/strategy.py,sha256=3rB14SEOmhWgjw_2g11WtfCAk6mfEJjYcA1eDvImjsA,142354
154
- wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py,sha256=BnjgsYEDkqnG5Qm6zmyOXzgwnunB95UPtr7HLopU9tA,34126
157
+ wayfinder_paths/strategies/basis_trading_strategy/strategy.py,sha256=kT6TDyywc7w1EiuosUqSni25Aqw85KyWBeiCNStvOfE,150616
158
+ wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py,sha256=hEq538Z3tcV40M0YC1cuBSjigvD-PlktcoBqmTolR14,38008
155
159
  wayfinder_paths/strategies/basis_trading_strategy/types.py,sha256=xTkLYqwvS0meMdlRAvIKNH9AANRyz63bQSYFSxLI6n4,740
156
160
  wayfinder_paths/strategies/boros_hype_strategy/__init__.py,sha256=OZlSnGYwlMUsNWWBMIqA7glI5oX9XDQvlgEZ_Ph2uDY,73
157
- wayfinder_paths/strategies/boros_hype_strategy/boros_ops_mixin.py,sha256=WGq2c_BPmHYf0gJNf849Fuxhpb2amF40GpB5BBNiDAY,27287
158
- wayfinder_paths/strategies/boros_hype_strategy/constants.py,sha256=VUdXhYKldd9094QQ5M6uLui-__3pHvHaqpPMY08ypW4,11490
161
+ wayfinder_paths/strategies/boros_hype_strategy/boros_ops_mixin.py,sha256=IXAVhR4hzZlUuu-0H4gSr4yRslS6PRISqF-z8eZCDxU,20796
162
+ wayfinder_paths/strategies/boros_hype_strategy/constants.py,sha256=0GuzgHWwtAHsaxp6M8BtdqtgHLrhrD9aZHPa934OzQw,5967
159
163
  wayfinder_paths/strategies/boros_hype_strategy/examples.json,sha256=_d3WauNJs6DTaS3oIhLn94lKn9_TtK26bdmS3bOrU9A,638
160
164
  wayfinder_paths/strategies/boros_hype_strategy/hyperevm_ops_mixin.py,sha256=dkihqyCSEMx9sQ6jFSin4yT62FDiOMvlexNWmWrXIYM,5878
161
165
  wayfinder_paths/strategies/boros_hype_strategy/hyperliquid_ops_mixin.py,sha256=aLqjRQvJjqLbNf3UhS62l9yPHQ0nxkq1shjFhCfAiXY,25109
@@ -170,21 +174,34 @@ wayfinder_paths/strategies/boros_hype_strategy/types.py,sha256=-tgHvKn7MvttRucxL
170
174
  wayfinder_paths/strategies/boros_hype_strategy/withdraw_mixin.py,sha256=kQEuDWSU-4UVeaXCC6SJw3FZkb2yI8iJaCxd0_txHcQ,47447
171
175
  wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=cqCmcWIPiOpCwt-82dnOgHnN64ZUITITR3jqIUYDXmA,2906
172
176
  wayfinder_paths/strategies/hyperlend_stable_yield_strategy/examples.json,sha256=GbVo2p6QiG6M7Ma5s671lw8G9JwnMl1h0n9mrtt-ZS8,164
173
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=zlCBrkz7reV4fSxNKQV3kRx2icv8kUDUyi0GGewG9Yg,92725
177
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/manifest.yaml,sha256=Zwtxyt09zzbXXk9B4tLYC9C21PNg7nDxXRcYnedJqq4,1165
178
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=PyBAbo-Q80xO3Icr8yVgihsGIrjAqla3q5GnHf5dB8g,92870
174
179
  wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py,sha256=qHUXeTLr23gi7ADN0vuWpUgOGFQML3-kPAWBsL3cumw,14353
175
180
  wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/README.md,sha256=PZVbRXfoMNNrZUZY3YOWBW9A-6By7vi-IBBDIfvcdNc,3594
176
181
  wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/examples.json,sha256=kgNRdZcqne8XTm-Y8Hv1a1pdajRQsey4Qhd5La-iWss,164
177
- wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py,sha256=D3pou5S4tZ-48m1Z8l7XP5DRU2AfzYe-p_N9NVuZxps,152697
182
+ wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/manifest.yaml,sha256=ZO-r0Ail3J6dWVOPl9QbGhlbGlP1Dzbo4iaOfibecnQ,1326
183
+ wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py,sha256=XTzH5vgUpHYvJaiUFpLNR5x0YT-Tr6pdie3VnxmcIOk,152842
178
184
  wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/test_strategy.py,sha256=64Prr3m5Qibe4yBtAAVmNZutLV88xkjDRFobCbXXhLs,37059
179
185
  wayfinder_paths/strategies/stablecoin_yield_strategy/README.md,sha256=efyLd2AJHL_JtHF3eZsnHk2wF4NWzEnuLKRA2vOpLtE,2844
180
186
  wayfinder_paths/strategies/stablecoin_yield_strategy/examples.json,sha256=pL1DNFEvYvXKK7xXD5oQYFPQj3Cm1ocKnk6r_iZk0IY,423
181
- wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=y6fb9J6-v-v1UNlCEx_Nn5s4veRJJwM47ZPXUbADq0E,71768
187
+ wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml,sha256=o_1lCTLW4eKBSgpgpoGZ471d80X91obzX9Bqz0tUePI,862
188
+ wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=QgqrHsp1QK39e3DLl9FmGPSEOvxFZhiM1UV4TnBtWNo,71913
182
189
  wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py,sha256=PJVnFxbHtB6s-A5FaXqrQqQ9Nsg6F7LEnIMOkP_iBsw,17078
183
190
  wayfinder_paths/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
184
- wayfinder_paths/tests/test_mcp_quote_swap.py,sha256=In4SxTkjfy7f2dqr8z6g1onHk8N2hQRc7a5_zQwcpXI,5473
191
+ wayfinder_paths/tests/test_manifests.py,sha256=dARHd7bfIvAejgOnDb1AZlDsgrZjcR0I5FcXhzPb5K0,3128
192
+ wayfinder_paths/tests/test_mcp_balances.py,sha256=QwMXoDXAez9OkokZy6ig2BolMuelcAkRkLDPtnHBuS4,2390
193
+ wayfinder_paths/tests/test_mcp_discovery.py,sha256=gHnEMZzgEWfXi3FD6XuxZRNjp1xYc2Jw6rNVEjz5rBk,1034
194
+ wayfinder_paths/tests/test_mcp_execute.py,sha256=yjSdZrZ5aJzzT-CLqc4xaPHpsKQBuNADdAjKRsxQvag,5052
195
+ wayfinder_paths/tests/test_mcp_hyperliquid_execute.py,sha256=MzjZVkXiJwV0lv3sqbXIARQqxMvmlab7thZ4YuhOaBE,2141
196
+ wayfinder_paths/tests/test_mcp_idempotency_store.py,sha256=7_YgtXxVFB9Y01GQbGUSRRHw5rlcGIJYMZMpp40nuYs,420
197
+ wayfinder_paths/tests/test_mcp_quote_swap.py,sha256=bRh6MoG-Z0Mx2xEs9da9Qop3BrI4GhAyjHx0yjtVq2c,7366
198
+ wayfinder_paths/tests/test_mcp_run_script.py,sha256=VZ4oBBBvspjlHd6AKZavRWiyD0H-fxtK-uuPdQ-Tn40,1577
199
+ wayfinder_paths/tests/test_mcp_tokens.py,sha256=h5qAFQNfWPtj0q3JlJm-nGCPuLRW0cvc1KR27liTsUs,1419
200
+ wayfinder_paths/tests/test_mcp_utils.py,sha256=-A_VbLCECyjJyMgFaB-y3m7cvCwfocLo_wwVa5T9hDo,1045
201
+ wayfinder_paths/tests/test_mcp_wallets.py,sha256=ZhFbEaSHD8HZ9IruZJ_2dZ5IXd7na52FmyRP4sYhFio,1209
185
202
  wayfinder_paths/tests/test_test_coverage.py,sha256=ZU0zhlm1PllvQkrnESPtEVdr-VcFDT6EtPiPRreLukk,7118
186
203
  wayfinder_paths/tests/test_utils.py,sha256=VzweYVaO20deZOwR8RKGYFrDnKTW0gZLm3dBwZiMK28,1015
187
- wayfinder_paths-0.1.29.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
188
- wayfinder_paths-0.1.29.dist-info/METADATA,sha256=VCJEs0tsMttqtWiP90CZynD9OyUCOwbKQn3c9teclus,14473
189
- wayfinder_paths-0.1.29.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
190
- wayfinder_paths-0.1.29.dist-info/RECORD,,
204
+ wayfinder_paths-0.1.31.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
205
+ wayfinder_paths-0.1.31.dist-info/METADATA,sha256=MqumveA7DJS5iMsE9g82hy1WEsdycXWGGcShzXQrIlU,14473
206
+ wayfinder_paths-0.1.31.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
207
+ wayfinder_paths-0.1.31.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.1
2
+ Generator: poetry-core 1.9.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,19 +0,0 @@
1
- from collections.abc import Awaitable, Callable
2
- from typing import Any
3
-
4
- # EVM transaction signing callback
5
- # Used for signing EVM-compatible transactions (mainnet, Base, Arbitrum, etc.)
6
- # Parameters: transaction dict with to/from/data/value/etc.
7
- # Returns: signed transaction hex string
8
- TransactionSigningCallback = Callable[[dict], Awaitable[str]]
9
-
10
- # Hyperliquid signing callback
11
- # Used for signing Hyperliquid actions (orders, transfers, withdrawals, etc.)
12
- # Parameters:
13
- # - action: dict - The action being signed (order, transfer, etc.)
14
- # - payload: str - Either JSON string (EIP-712) or keccak hash (local) of typed data
15
- # - address: str - The address signing the transaction
16
- # Returns: signature dict {"r": "0x...", "s": "0x...", "v": 28} or None if declined
17
- HyperliquidSignCallback = Callable[
18
- [dict[str, Any], str, str], Awaitable[dict[str, str] | None]
19
- ]