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.
- wayfinder_paths/adapters/boros_adapter/adapter.py +313 -12
- wayfinder_paths/adapters/boros_adapter/test_adapter.py +125 -14
- wayfinder_paths/adapters/hyperliquid_adapter/adapter.py +17 -3
- wayfinder_paths/adapters/hyperliquid_adapter/exchange.py +5 -5
- wayfinder_paths/adapters/hyperliquid_adapter/local_signer.py +2 -33
- wayfinder_paths/adapters/hyperliquid_adapter/paired_filler.py +1 -1
- wayfinder_paths/adapters/hyperliquid_adapter/test_cancel_order.py +57 -0
- wayfinder_paths/adapters/hyperliquid_adapter/test_exchange_mid_prices.py +52 -0
- wayfinder_paths/adapters/hyperliquid_adapter/test_hyperliquid_sdk_live.py +64 -0
- wayfinder_paths/adapters/hyperliquid_adapter/util.py +9 -10
- wayfinder_paths/core/clients/PoolClient.py +1 -1
- wayfinder_paths/core/constants/hype_oft_abi.py +151 -0
- wayfinder_paths/core/strategies/Strategy.py +1 -2
- wayfinder_paths/mcp/tools/execute.py +48 -16
- wayfinder_paths/mcp/tools/hyperliquid.py +1 -13
- wayfinder_paths/mcp/tools/quotes.py +38 -124
- wayfinder_paths/strategies/basis_trading_strategy/manifest.yaml +24 -0
- wayfinder_paths/strategies/basis_trading_strategy/strategy.py +249 -29
- wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py +125 -15
- wayfinder_paths/strategies/boros_hype_strategy/boros_ops_mixin.py +57 -201
- wayfinder_paths/strategies/boros_hype_strategy/constants.py +1 -152
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/manifest.yaml +29 -0
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py +2 -0
- wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/manifest.yaml +33 -0
- wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py +2 -0
- wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml +23 -0
- wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py +2 -0
- wayfinder_paths/tests/test_manifests.py +93 -0
- wayfinder_paths/tests/test_mcp_balances.py +73 -0
- wayfinder_paths/tests/test_mcp_discovery.py +34 -0
- wayfinder_paths/tests/test_mcp_execute.py +146 -0
- wayfinder_paths/tests/test_mcp_hyperliquid_execute.py +69 -0
- wayfinder_paths/tests/test_mcp_idempotency_store.py +14 -0
- wayfinder_paths/tests/test_mcp_quote_swap.py +60 -0
- wayfinder_paths/tests/test_mcp_run_script.py +47 -0
- wayfinder_paths/tests/test_mcp_tokens.py +49 -0
- wayfinder_paths/tests/test_mcp_utils.py +35 -0
- wayfinder_paths/tests/test_mcp_wallets.py +38 -0
- {wayfinder_paths-0.1.29.dist-info → wayfinder_paths-0.1.31.dist-info}/METADATA +2 -2
- {wayfinder_paths-0.1.29.dist-info → wayfinder_paths-0.1.31.dist-info}/RECORD +42 -25
- {wayfinder_paths-0.1.29.dist-info → wayfinder_paths-0.1.31.dist-info}/WHEEL +1 -1
- wayfinder_paths/core/types.py +0 -19
- {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"}
|
|
@@ -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=
|
|
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=
|
|
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=
|
|
29
|
-
wayfinder_paths/adapters/hyperliquid_adapter/exchange.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
129
|
-
wayfinder_paths/mcp/tools/hyperliquid.py,sha256=
|
|
130
|
-
wayfinder_paths/mcp/tools/quotes.py,sha256=
|
|
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=
|
|
154
|
-
wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py,sha256=
|
|
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=
|
|
158
|
-
wayfinder_paths/strategies/boros_hype_strategy/constants.py,sha256=
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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.
|
|
188
|
-
wayfinder_paths-0.1.
|
|
189
|
-
wayfinder_paths-0.1.
|
|
190
|
-
wayfinder_paths-0.1.
|
|
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,,
|
wayfinder_paths/core/types.py
DELETED
|
@@ -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
|
-
]
|
|
File without changes
|