wayfinder-paths 0.1.2__py3-none-any.whl → 0.1.4__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 (83) hide show
  1. wayfinder_paths/CONFIG_GUIDE.md +23 -18
  2. wayfinder_paths/abis/generic/erc20.json +383 -0
  3. wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/README.md +2 -2
  4. wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/adapter.py +2 -2
  5. wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/manifest.yaml +1 -1
  6. wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/test_adapter.py +12 -6
  7. wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/README.md +1 -1
  8. wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/adapter.py +2 -2
  9. wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/manifest.yaml +1 -1
  10. wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/test_adapter.py +2 -2
  11. wayfinder_paths/adapters/hyperlend_adapter/__init__.py +7 -0
  12. wayfinder_paths/{vaults/adapters → adapters}/hyperlend_adapter/manifest.yaml +1 -1
  13. wayfinder_paths/{vaults/adapters → adapters}/hyperlend_adapter/test_adapter.py +2 -2
  14. wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/README.md +1 -1
  15. wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/manifest.yaml +1 -1
  16. wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/test_adapter.py +2 -2
  17. wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/README.md +1 -1
  18. wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/manifest.yaml +1 -1
  19. wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/test_adapter.py +2 -2
  20. wayfinder_paths/{vaults/adapters → adapters}/token_adapter/README.md +1 -1
  21. wayfinder_paths/adapters/token_adapter/examples.json +26 -0
  22. wayfinder_paths/{vaults/adapters → adapters}/token_adapter/manifest.yaml +1 -1
  23. wayfinder_paths/{vaults/adapters → adapters}/token_adapter/test_adapter.py +1 -1
  24. wayfinder_paths/config.example.json +3 -1
  25. wayfinder_paths/core/engine/manifest.py +1 -1
  26. wayfinder_paths/core/strategies/Strategy.py +3 -3
  27. wayfinder_paths/core/strategies/descriptors.py +80 -0
  28. wayfinder_paths/core/utils/evm_helpers.py +39 -0
  29. wayfinder_paths/policies/enso.py +17 -0
  30. wayfinder_paths/policies/erc20.py +34 -0
  31. wayfinder_paths/policies/evm.py +21 -0
  32. wayfinder_paths/policies/hyper_evm.py +19 -0
  33. wayfinder_paths/policies/hyperlend.py +12 -0
  34. wayfinder_paths/policies/hyperliquid.py +30 -0
  35. wayfinder_paths/policies/moonwell.py +54 -0
  36. wayfinder_paths/policies/prjx.py +30 -0
  37. wayfinder_paths/policies/util.py +27 -0
  38. wayfinder_paths/run_strategy.py +3 -3
  39. wayfinder_paths/scripts/create_strategy.py +3 -3
  40. wayfinder_paths/scripts/validate_manifests.py +2 -2
  41. wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/README.md +4 -3
  42. wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/manifest.yaml +1 -1
  43. wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/strategy.py +143 -81
  44. wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/test_strategy.py +4 -2
  45. wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/README.md +4 -3
  46. wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/manifest.yaml +1 -1
  47. wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/strategy.py +117 -80
  48. wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/test_strategy.py +2 -2
  49. wayfinder_paths/{vaults/templates → templates}/adapter/README.md +4 -4
  50. wayfinder_paths/{vaults/templates → templates}/adapter/manifest.yaml +1 -1
  51. wayfinder_paths/{vaults/templates → templates}/strategy/README.md +6 -5
  52. wayfinder_paths/{vaults/templates → templates}/strategy/manifest.yaml +1 -1
  53. wayfinder_paths/{vaults/templates → templates}/strategy/test_strategy.py +1 -1
  54. {wayfinder_paths-0.1.2.dist-info → wayfinder_paths-0.1.4.dist-info}/METADATA +101 -23
  55. wayfinder_paths-0.1.4.dist-info/RECORD +125 -0
  56. wayfinder_paths/vaults/adapters/hyperlend_adapter/__init__.py +0 -7
  57. wayfinder_paths/vaults/adapters/token_adapter/examples.json +0 -26
  58. wayfinder_paths/vaults/strategies/__init__.py +0 -0
  59. wayfinder_paths-0.1.2.dist-info/RECORD +0 -115
  60. /wayfinder_paths/{vaults → adapters}/__init__.py +0 -0
  61. /wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/examples.json +0 -0
  62. /wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/__init__.py +0 -0
  63. /wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/examples.json +0 -0
  64. /wayfinder_paths/{vaults/adapters → adapters}/hyperlend_adapter/adapter.py +0 -0
  65. /wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/__init__.py +0 -0
  66. /wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/adapter.py +0 -0
  67. /wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/examples.json +0 -0
  68. /wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/__init__.py +0 -0
  69. /wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/adapter.py +0 -0
  70. /wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/examples.json +0 -0
  71. /wayfinder_paths/{vaults/adapters → adapters}/token_adapter/__init__.py +0 -0
  72. /wayfinder_paths/{vaults/adapters → adapters}/token_adapter/adapter.py +0 -0
  73. /wayfinder_paths/{vaults/adapters → strategies}/__init__.py +0 -0
  74. /wayfinder_paths/{vaults/strategies → strategies}/config.py +0 -0
  75. /wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/examples.json +0 -0
  76. /wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/examples.json +0 -0
  77. /wayfinder_paths/{vaults/templates → templates}/adapter/adapter.py +0 -0
  78. /wayfinder_paths/{vaults/templates → templates}/adapter/examples.json +0 -0
  79. /wayfinder_paths/{vaults/templates → templates}/adapter/test_adapter.py +0 -0
  80. /wayfinder_paths/{vaults/templates → templates}/strategy/examples.json +0 -0
  81. /wayfinder_paths/{vaults/templates → templates}/strategy/strategy.py +0 -0
  82. {wayfinder_paths-0.1.2.dist-info → wayfinder_paths-0.1.4.dist-info}/LICENSE +0 -0
  83. {wayfinder_paths-0.1.2.dist-info → wayfinder_paths-0.1.4.dist-info}/WHEEL +0 -0
@@ -8,7 +8,7 @@ This template provides the scaffolding for a new vault strategy. It mirrors the
8
8
  ```
9
9
  cp -r wayfinder_paths/vaults/templates/strategy wayfinder_paths/vaults/strategies/my_strategy
10
10
  ```
11
- 2. Rename the class in `strategy.py` and update `manifest.yaml` so `entrypoint` points to your new module (for example `vaults.strategies.my_strategy.strategy.MyStrategy`).
11
+ 2. Rename the class in `strategy.py` and update `manifest.yaml` so `entrypoint` points to your new module (for example `strategies.my_strategy.strategy.MyStrategy`).
12
12
  3. Fill out `examples.json` with sample CLI invocations and `test_strategy.py` with at least one smoke test.
13
13
  4. Implement the required strategy methods (`deposit`, `update`, `_status`, optionally override `withdraw`).
14
14
 
@@ -49,7 +49,7 @@ Strategies typically:
49
49
  ```python
50
50
  from wayfinder_paths.core.services.web3_service import DefaultWeb3Service
51
51
  from wayfinder_paths.core.strategies.Strategy import StatusDict, StatusTuple, Strategy
52
- from wayfinder_paths.vaults.adapters.balance_adapter.adapter import BalanceAdapter
52
+ from wayfinder_paths.adapters.balance_adapter.adapter import BalanceAdapter
53
53
 
54
54
 
55
55
  class MyStrategy(Strategy):
@@ -104,7 +104,7 @@ Your `manifest.yaml` should define:
104
104
 
105
105
  ```yaml
106
106
  schema_version: "0.1"
107
- entrypoint: "vaults.strategies.my_strategy.strategy.MyStrategy"
107
+ entrypoint: "strategies.my_strategy.strategy.MyStrategy"
108
108
  permissions:
109
109
  policy: "(wallet.id == 'FORMAT_WALLET_ID') && (eth.tx.to == '0x...')"
110
110
  adapters:
@@ -120,7 +120,7 @@ adapters:
120
120
 
121
121
  ```python
122
122
  import pytest
123
- from wayfinder_paths.vaults.strategies.my_strategy.strategy import MyStrategy
123
+ from wayfinder_paths.strategies.my_strategy.strategy import MyStrategy
124
124
 
125
125
 
126
126
  @pytest.mark.asyncio
@@ -135,7 +135,8 @@ async def test_status_shape():
135
135
  ```bash
136
136
  # Install dependencies & create wallets first
137
137
  poetry install
138
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
138
+ # Creates a main wallet (or use 'just create-strategy' which auto-creates wallets)
139
+ poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
139
140
 
140
141
  # Copy config and edit credentials
141
142
  cp wayfinder_paths/config.example.json config.json
@@ -1,5 +1,5 @@
1
1
  schema_version: "0.1"
2
- entrypoint: "vaults.strategies.my_strategy.strategy.MyStrategy"
2
+ entrypoint: "strategies.my_strategy.strategy.MyStrategy"
3
3
  name: "my_strategy" # Unique name for this strategy instance (used for wallet lookup)
4
4
  permissions:
5
5
  policy: "(wallet.id == 'FORMAT_WALLET_ID')"
@@ -14,7 +14,7 @@ import sys
14
14
  from pathlib import Path
15
15
 
16
16
  # TODO: Replace MyStrategy with your actual strategy class name
17
- from wayfinder_paths.vaults.strategies.your_strategy.strategy import (
17
+ from wayfinder_paths.strategies.your_strategy.strategy import (
18
18
  MyStrategy, # noqa: E402
19
19
  )
20
20
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wayfinder-paths
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: Wayfinder Path: strategies and adapters
5
5
  Author: Wayfinder
6
6
  Author-email: dev@wayfinder.ai
@@ -42,8 +42,9 @@ curl -sSL https://install.python-poetry.org | python3 -
42
42
  poetry install
43
43
 
44
44
  # ⚠️ Generate test wallets FIRST (required!)
45
- # This creates wallets.json with live wallets for local testing
46
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
45
+ # This creates wallets.json with a main wallet for local testing
46
+ just create-wallets
47
+ # Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
47
48
 
48
49
  # Copy and configure
49
50
  cp wayfinder_paths/config.example.json config.json
@@ -167,7 +168,9 @@ cd wayfinder-paths
167
168
  poetry install
168
169
 
169
170
  # 3. Generate test wallets (required before testing!)
170
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
171
+ # Creates a main wallet (or use 'just create-strategy' which auto-creates wallets)
172
+ just create-wallets
173
+ # Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
171
174
 
172
175
  # 4. Create a new strategy (recommended - automatically creates wallet)
173
176
  just create-strategy "My Strategy Name"
@@ -230,7 +233,7 @@ Adapter manifests declare the capabilities an adapter provides and the clients i
230
233
  **Schema:**
231
234
  ```yaml
232
235
  schema_version: "0.1"
233
- entrypoint: "vaults.adapters.my_adapter.adapter.MyAdapter"
236
+ entrypoint: "adapters.my_adapter.adapter.MyAdapter"
234
237
  capabilities:
235
238
  - "pool.read"
236
239
  - "pool.analytics"
@@ -248,7 +251,7 @@ dependencies:
248
251
  **Example** (`vaults/adapters/pool_adapter/manifest.yaml`):
249
252
  ```yaml
250
253
  schema_version: "0.1"
251
- entrypoint: "vaults.adapters.pool_adapter.adapter.PoolAdapter"
254
+ entrypoint: "adapters.pool_adapter.adapter.PoolAdapter"
252
255
  capabilities:
253
256
  - "pool.read"
254
257
  - "pool.analytics"
@@ -268,7 +271,7 @@ Strategy manifests declare permissions and required adapters with their capabili
268
271
  **Schema:**
269
272
  ```yaml
270
273
  schema_version: "0.1"
271
- entrypoint: "vaults.strategies.my_strategy.strategy.MyStrategy"
274
+ entrypoint: "strategies.my_strategy.strategy.MyStrategy"
272
275
  permissions:
273
276
  policy: "(wallet.id == 'FORMAT_WALLET_ID') && (eth.tx.to == '0x...')"
274
277
  adapters:
@@ -290,7 +293,7 @@ adapters:
290
293
  **Example** (`vaults/strategies/stablecoin_yield_strategy/manifest.yaml`):
291
294
  ```yaml
292
295
  schema_version: "0.1"
293
- entrypoint: "vaults.strategies.stablecoin_yield_strategy.strategy.StablecoinYieldStrategy"
296
+ entrypoint: "strategies.stablecoin_yield_strategy.strategy.StablecoinYieldStrategy"
294
297
  permissions:
295
298
  policy: "(wallet.id == 'FORMAT_WALLET_ID') && ((eth.tx.data[0..10] == '0x095ea7b3' && eth.tx.data[34..74] == 'f75584ef6673ad213a685a1b58cc0330b8ea22cf') || (eth.tx.to == '0xF75584eF6673aD213a685a1B58Cc0330B8eA22Cf'))"
296
299
  adapters:
@@ -328,7 +331,7 @@ The `validate_manifests.py` script performs multi-stage validation:
328
331
  1. **Schema Validation** (via Pydantic models):
329
332
  - Loads YAML file and validates against `AdapterManifest` or `StrategyManifest` schema
330
333
  - Checks required fields, types, and basic constraints (e.g., capabilities cannot be empty)
331
- - Validates entrypoint format (must be full import path like `"vaults.adapters.pool_adapter.adapter.PoolAdapter"`)
334
+ - Validates entrypoint format (must be full import path like `"adapters.pool_adapter.adapter.PoolAdapter"`)
332
335
 
333
336
  2. **Entrypoint Verification**:
334
337
  - **For Adapters**: Imports the entrypoint class and verifies it's a subclass of `BaseAdapter`
@@ -385,7 +388,7 @@ For backend services and automated systems with higher rate limits:
385
388
 
386
389
  **Option A: Pass to Strategy Constructor**
387
390
  ```python
388
- from wayfinder_paths.vaults.strategies.stablecoin_yield_strategy.strategy import StablecoinYieldStrategy
391
+ from wayfinder_paths.strategies.stablecoin_yield_strategy.strategy import StablecoinYieldStrategy
389
392
 
390
393
  strategy = StablecoinYieldStrategy(
391
394
  config={...},
@@ -411,7 +414,9 @@ export WAYFINDER_API_KEY="sk_live_abc123..."
411
414
  }
412
415
  ```
413
416
 
414
- **Priority Order:** Constructor parameter > `config.json` > `WAYFINDER_API_KEY` environment variable
417
+ **Priority Order:** Constructor parameter > `config.json` (user.api_key or system.api_key) > `WAYFINDER_API_KEY` environment variable
418
+
419
+ **Note:** API keys in `config.json` are loaded directly by `WayfinderClient` via `_load_config_credentials()`, not through the `UserConfig` or `SystemConfig` dataclasses. This allows flexible credential loading.
415
420
 
416
421
  #### 2. Personal Access Authentication (OAuth)
417
422
  For standalone SDK users with username/password:
@@ -431,6 +436,7 @@ For standalone SDK users with username/password:
431
436
  - When an API key is available, it's used for all API requests (including public endpoints) for rate limiting
432
437
  - If no API key is found, the system falls back to OAuth authentication
433
438
  - All clients created by adapters automatically inherit the API key discovery mechanism
439
+ - API keys in `config.json` are loaded directly by `WayfinderClient._load_config_credentials()` from `user.api_key` or `system.api_key`, not stored in the `UserConfig` or `SystemConfig` dataclasses
434
440
 
435
441
  See [CONFIG_GUIDE.md](wayfinder_paths/CONFIG_GUIDE.md) for detailed authentication documentation.
436
442
 
@@ -472,7 +478,7 @@ Strategies implement trading logic using adapters and the unified client system.
472
478
  # wayfinder_paths/vaults/strategies/my_strategy/strategy.py
473
479
  from wayfinder_paths.core.services.web3_service import DefaultWeb3Service
474
480
  from wayfinder_paths.core.strategies.Strategy import StatusDict, StatusTuple, Strategy
475
- from wayfinder_paths.vaults.adapters.balance_adapter.adapter import BalanceAdapter
481
+ from wayfinder_paths.adapters.balance_adapter.adapter import BalanceAdapter
476
482
 
477
483
 
478
484
  class MyStrategy(Strategy):
@@ -546,7 +552,9 @@ Each strategy manifest declares which adapters it needs and which capabilities i
546
552
 
547
553
  ```bash
548
554
  # 1. Generate test wallets (required!)
549
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
555
+ # Creates a main wallet (or use 'just create-strategy' which auto-creates wallets)
556
+ just create-wallets
557
+ # Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
550
558
 
551
559
  # 2. Run smoke tests
552
560
  poetry run pytest -k smoke -v
@@ -577,7 +585,9 @@ cd wayfinder-paths
577
585
  poetry install
578
586
 
579
587
  # Generate test wallets (essential!)
580
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
588
+ # Creates a main wallet (or use 'just create-strategy' which auto-creates wallets)
589
+ just create-wallets
590
+ # Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
581
591
 
582
592
  # Copy and configure
583
593
  cp wayfinder_paths/config.example.json config.json
@@ -598,14 +608,17 @@ poetry run python wayfinder_paths/run_strategy.py stablecoin_yield_strategy --de
598
608
  **Before running any strategies, generate test wallets.** This creates `wallets.json` in the repository root with throwaway wallets for local testing:
599
609
 
600
610
  ```bash
601
- # Essential: Create default and vault wallets for testing
602
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
611
+ # Essential: Create main wallet for testing
612
+ just create-wallets
613
+ # Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
603
614
  ```
604
615
 
605
616
  This creates:
606
- - `default` wallet - your main wallet for testing
617
+ - `main` wallet - your main wallet for testing (labeled "main" in wallets.json)
607
618
  - `wallets.json` - wallet addresses and private keys for local testing
608
619
 
620
+ **Note:** Strategy-specific wallets are automatically created when you use `just create-strategy "Strategy Name"`. For manual creation, use `just create-wallet "strategy_name"` or `poetry run python wayfinder_paths/scripts/make_wallets.py --label "strategy_name"`.
621
+
609
622
  **Important:** These wallets are for testing only. Never use them with real funds or on mainnet.
610
623
 
611
624
  **Per-Strategy Wallets:** Each strategy should have its own dedicated wallet. When you create a new strategy using `just create-strategy`, a wallet is automatically generated with a label matching the strategy directory name. The system automatically uses this wallet when running the strategy. See [CONFIG_GUIDE.md](wayfinder_paths/CONFIG_GUIDE.md) for details.
@@ -613,14 +626,14 @@ This creates:
613
626
  Additional options:
614
627
 
615
628
  ```bash
616
- # Add 3 extra unlabeled wallets for multi-account testing
617
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault -n 3
629
+ # Add 3 extra wallets for multi-account testing
630
+ poetry run python wayfinder_paths/scripts/make_wallets.py -n 3
618
631
 
619
- # Generate keystore files (for geth/web3 compatibility)
620
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault --keystore-password "my-password"
632
+ # Create a wallet with a specific label (e.g., for a strategy)
633
+ poetry run python wayfinder_paths/scripts/make_wallets.py --label "my_strategy_name"
621
634
 
622
- # Replace existing wallets (if you need fresh test wallets)
623
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault --override
635
+ # Generate keystore files (for geth/web3 compatibility)
636
+ poetry run python wayfinder_paths/scripts/make_wallets.py -n 1 --keystore-password "my-password"
624
637
  ```
625
638
 
626
639
  ### Configuration
@@ -645,6 +658,65 @@ cp wayfinder_paths/config.example.json config.json
645
658
  poetry run python wayfinder_paths/run_strategy.py stablecoin_yield_strategy --config config.json
646
659
  ```
647
660
 
661
+ ## 📦 Versioning
662
+
663
+ This package follows [Semantic Versioning](https://semver.org/) (SemVer) and is published to PyPI as a public package.
664
+
665
+ ### Version Format: MAJOR.MINOR.PATCH
666
+
667
+ - **MAJOR** (X.0.0): Breaking changes that require code updates
668
+ - **MINOR** (0.X.0): New features, backward compatible
669
+ - **PATCH** (0.0.X): Bug fixes, backward compatible
670
+
671
+ ### Version Bumping Rules
672
+
673
+ - **PATCH**: Bug fixes, security patches, documentation updates
674
+ - **MINOR**: New adapters, new strategies, new features (backward compatible)
675
+ - **MAJOR**: Breaking API changes, removed features, incompatible changes
676
+
677
+ ### Important Notes
678
+
679
+ - **Versions are immutable**: Once published to PyPI, a version cannot be changed or deleted
680
+ - **Versions must be unique**: Each release must have a new, unique version number
681
+ - **Publishing is restricted**: Only publish from the `main` branch to prevent accidental releases
682
+
683
+ ### Publishing Workflow and Order of Operations
684
+
685
+ **Critical**: Changes must follow this strict order:
686
+
687
+ 1. **Merge to main**: All changes must be merged to the `main` branch first
688
+ 2. **Publish to PyPI**: The new version must be published to PyPI from `main` branch
689
+ 3. **Dependent changes**: Only after publishing can dependent changes be merged in other applications
690
+
691
+ **Why this order matters:**
692
+ - Other applications depend on this package from PyPI
693
+ - They cannot merge changes that depend on new versions until those versions are available on PyPI
694
+ - Publishing from `main` ensures the published version matches what's in the repository
695
+ - This prevents dependency resolution failures in downstream applications
696
+
697
+ **Example workflow:**
698
+ ```bash
699
+ # 1. Make changes in a feature branch
700
+ git checkout -b feature/new-adapter
701
+ # ... make changes ...
702
+ git commit -m "Add new adapter"
703
+
704
+ # 2. Merge to main
705
+ git checkout main
706
+ git merge feature/new-adapter
707
+
708
+ # 3. Bump version in pyproject.toml (e.g., 0.1.3 → 0.2.0)
709
+ # Edit pyproject.toml: version = "0.2.0"
710
+ git commit -m "Bump version to 0.2.0"
711
+ git push origin main
712
+
713
+ # 4. Publish to PyPI (must be on main branch)
714
+ just publish
715
+
716
+ # 5. Now dependent applications can update their dependencies
717
+ # pip install wayfinder-paths==0.2.0
718
+ ```
719
+
648
720
  ## 📦 Publishing
649
721
 
650
722
  Publish to PyPI:
@@ -654,6 +726,12 @@ export PUBLISH_TOKEN="your_pypi_token"
654
726
  just publish
655
727
  ```
656
728
 
729
+ **Important:**
730
+ - ⚠️ **Publishing is only allowed from the `main` branch** - the publish command will fail if run from any other branch
731
+ - ⚠️ **Versions must be unique** - ensure the version in `pyproject.toml` has been bumped and is unique
732
+ - ⚠️ **Follow the order of operations** - see [Versioning](#-versioning) section above for the required workflow
733
+ - ⚠️ **Versions are immutable** - once published, a version cannot be changed or deleted from PyPI
734
+
657
735
  Install the published package:
658
736
 
659
737
  ```bash
@@ -0,0 +1,125 @@
1
+ wayfinder_paths/CONFIG_GUIDE.md,sha256=CrxWCHJRF-bewqJbAt2SpNYLKb7fg_23ObCnb8ea-Sc,13359
2
+ wayfinder_paths/__init__.py,sha256=wx7pz75bPLn2O3G9B1jFzI4As3DAzPbJzefu2BgL1C4,395
3
+ wayfinder_paths/abis/generic/erc20.json,sha256=geyzVzdTNt3u1XHKxi4seszP_GIWIzPTl0FYgiftRnM,9336
4
+ wayfinder_paths/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ wayfinder_paths/adapters/balance_adapter/README.md,sha256=JT_AaoxLKsMYk0tNXDXhhPCEIsDxYe8T8EUZyArelQo,4018
6
+ wayfinder_paths/adapters/balance_adapter/adapter.py,sha256=vLYZdVt3CdzIZNpszxE0Z_vUSmVkdf3zBUoh2l_CDCE,8864
7
+ wayfinder_paths/adapters/balance_adapter/examples.json,sha256=atj9baySDqCVBSkDWR9-4kng8yXEKP0bZ21lz59VYyM,126
8
+ wayfinder_paths/adapters/balance_adapter/manifest.yaml,sha256=vp2VoQJf-TxFxgkTsUJ1AEeeOoImM_QjrGYCmjyEQYI,189
9
+ wayfinder_paths/adapters/balance_adapter/test_adapter.py,sha256=MzwElYxtdffIJnk9xtWCJml8HG1n8Z0omJY2X9MVmDg,2873
10
+ wayfinder_paths/adapters/brap_adapter/README.md,sha256=jWNinvsetf1Syfsnlf6aLR-jniQYJJkZHMNobFHrZTg,7912
11
+ wayfinder_paths/adapters/brap_adapter/__init__.py,sha256=jpqxZ-Bv_8kBo-lhgO_QCWaVZNq_WwlkNBHD4RsqOJg,90
12
+ wayfinder_paths/adapters/brap_adapter/adapter.py,sha256=oI1d3d4UzYgBnFjjuRDpY7sHEVPPkXTzlPBi2InfpQE,26437
13
+ wayfinder_paths/adapters/brap_adapter/examples.json,sha256=KWuAklUspd2uvk0s2ey8gczg4nbzhdwxQqzhascyMiQ,5287
14
+ wayfinder_paths/adapters/brap_adapter/manifest.yaml,sha256=bJ8o4j9ZPjfnLxXxHfekoXKUHoBkXmWQ3nokTH1aya4,240
15
+ wayfinder_paths/adapters/brap_adapter/test_adapter.py,sha256=36ixuv11Ql3pWgImmoVuE1EqVpsvT5dToGvN9LjpWpE,10874
16
+ wayfinder_paths/adapters/hyperlend_adapter/__init__.py,sha256=DsWOnEn-Tlu9ZoIoGaFeSqOYI3b4lXGVK3_FTntWpLw,139
17
+ wayfinder_paths/adapters/hyperlend_adapter/adapter.py,sha256=BAjMV-E7E90Ob7NUwjZlR1JS4DA1RME9Usp6X8XQeV4,10218
18
+ wayfinder_paths/adapters/hyperlend_adapter/manifest.yaml,sha256=Ugc0jNf3txAQRGAXlVvTN3Mbdc4-fUMS1yVs0SZcBwI,259
19
+ wayfinder_paths/adapters/hyperlend_adapter/test_adapter.py,sha256=ZnEiJxHRlcI4ijDfwmL2KEsL6A8dcWDYNhhxCEezWI4,9330
20
+ wayfinder_paths/adapters/ledger_adapter/README.md,sha256=kTOY69dtu3EwzizovApipZJwaNLa7qaqDpuj70j2YYc,4622
21
+ wayfinder_paths/adapters/ledger_adapter/__init__.py,sha256=DK9GShIUiQ57YKSqhCKoS43GCweBxi0lzkUQ9sYVxUA,96
22
+ wayfinder_paths/adapters/ledger_adapter/adapter.py,sha256=VbAMEHXXZSG4ynFVc9jZxiEdswEDKwzsFklHH_JZvyY,9896
23
+ wayfinder_paths/adapters/ledger_adapter/examples.json,sha256=LuinGhBfFxO7mMwKwKJ33PuAVEHHBvl_LZeMrYevbxM,3639
24
+ wayfinder_paths/adapters/ledger_adapter/manifest.yaml,sha256=TkATBnz7Xc5iPzEdiR9wp_9r8DKF7fgAjc16KjWWdTk,259
25
+ wayfinder_paths/adapters/ledger_adapter/test_adapter.py,sha256=Q9DwEK2mkklDvphyEOFyeI8IsF8SD9xcJruETzj4kAM,7243
26
+ wayfinder_paths/adapters/pool_adapter/README.md,sha256=cx9ZNWTCQxg9TlBHUIvvkbap0F-PxuVGjhfY4cZx3xs,6180
27
+ wayfinder_paths/adapters/pool_adapter/__init__.py,sha256=rv56pYzz2Gqiz33uoPJktCQRe3CRt8U9ry5GbjVgK3A,90
28
+ wayfinder_paths/adapters/pool_adapter/adapter.py,sha256=cD-Cq38u4YLj3DKB_UdP7BS4DzDyyAmxAOL6c5-dAHY,10003
29
+ wayfinder_paths/adapters/pool_adapter/examples.json,sha256=hLH74Oy6WlrEvAIOjwqsjpcCDxC-N0efWeLa_-TbntM,3202
30
+ wayfinder_paths/adapters/pool_adapter/manifest.yaml,sha256=z-OQYBsl2RdV6M34RZzqtQTAFHtQod0po_JD_-9ElNM,217
31
+ wayfinder_paths/adapters/pool_adapter/test_adapter.py,sha256=QiEYyLFo0S6gKJuk7j9Md0-mN6yNY5heKDQ_Sm1Yln8,7721
32
+ wayfinder_paths/adapters/token_adapter/README.md,sha256=d2tMJte6HBu62CCYXdjS8GHZXj5f2fU03uZAO6pscBI,2698
33
+ wayfinder_paths/adapters/token_adapter/__init__.py,sha256=nEmxrvffEygn3iKH3cZTNLkhnUUhlUAEtshmrFRAjq8,62
34
+ wayfinder_paths/adapters/token_adapter/adapter.py,sha256=5EAZwO8T2tPjHG83Fm5u848Vm2BSK-uy-y4Thi1JlY8,3348
35
+ wayfinder_paths/adapters/token_adapter/examples.json,sha256=RW-3xazj4wbTPl-AVrzduRH1NCXx8m7-06bRMOUJ-lc,3626
36
+ wayfinder_paths/adapters/token_adapter/manifest.yaml,sha256=KQgbHAUaJ6JYjTlOJ9HGeRxwmICXVV01qRwW8wJPKMM,143
37
+ wayfinder_paths/adapters/token_adapter/test_adapter.py,sha256=xnJ-nglMnCFqYnH9D-xcnIy-pmPZK6_puNZ9hPthIMI,4701
38
+ wayfinder_paths/config.example.json,sha256=gDvS7W-cbaNe2IV7Q72di_PYpCDKODojELaXdd77Gx4,605
39
+ wayfinder_paths/conftest.py,sha256=pqDNijXn9_zmbAdkt_2a18UQLjtsDkNTBJVTgC6H2nA,1136
40
+ wayfinder_paths/core/__init__.py,sha256=1bW2DTK29Buj9alSdkgyLFUUmUgLJse7SffCL4mq2G0,350
41
+ wayfinder_paths/core/adapters/BaseAdapter.py,sha256=zoK6Qv0WRo4NY4dy-1xDI6Dolap1Z0-R8zQtTmXVcSs,1482
42
+ wayfinder_paths/core/adapters/__init__.py,sha256=ZqzkliXm5RjWxYJyJR88XHb3npZFiThk7HoVZe3JF60,108
43
+ wayfinder_paths/core/adapters/base.py,sha256=j10cZ5NwqaAhN2mH_j24tG8r7_7NWtx8F6S7sJ9wOi8,100
44
+ wayfinder_paths/core/clients/AuthClient.py,sha256=scz8GvnabNYAQq_XYDcLP2lf2LZqurQOixA7MMAfbCY,2796
45
+ wayfinder_paths/core/clients/BRAPClient.py,sha256=kRLfjms4adpjCHZKL-1xJ8aCQcHcnzeZLHRQI-qqMcw,3131
46
+ wayfinder_paths/core/clients/ClientManager.py,sha256=DBWwww_xmdX0uIfODgQMBq9zwmJNikrBVw3y5q8xd-Q,9558
47
+ wayfinder_paths/core/clients/HyperlendClient.py,sha256=qu5UOcCMybhpGlXWd7JnZduHJgthXhbNimZY1RMQZMU,5162
48
+ wayfinder_paths/core/clients/LedgerClient.py,sha256=bcOuuxV8FXs1hWX4K4QNigwey6aCrrDjxrK6l29bd4Y,7490
49
+ wayfinder_paths/core/clients/PoolClient.py,sha256=sXyg5cWlGDvSFqGkFaxLHz52626as7_noT5--AwOgeI,3340
50
+ wayfinder_paths/core/clients/SimulationClient.py,sha256=DXLMbg5WxfWMxE87PgIcnrVuuCgxKSoA7VQb1qL4GWo,6035
51
+ wayfinder_paths/core/clients/TokenClient.py,sha256=6-57IF6qP4vLdDUNdPeSW9pP1H753RVrQl7GMhI1MRE,2708
52
+ wayfinder_paths/core/clients/TransactionClient.py,sha256=72CgN3FPTtajljUIbhipICycUJi2MI16XCjbTKH-h14,1595
53
+ wayfinder_paths/core/clients/WalletClient.py,sha256=L2ExCZv4E3Lt9lGA6w-5UBaDGR1XHxWoYLLguhpHSFs,2868
54
+ wayfinder_paths/core/clients/WayfinderClient.py,sha256=RigphxnoVrmG2wxXk_1NBKYxothg68M0fquiYPlp4l4,10152
55
+ wayfinder_paths/core/clients/__init__.py,sha256=oNq6fQW8hUnpkuIZxdbOTLPayJRLA6S-k8e7wqsH_7c,1581
56
+ wayfinder_paths/core/clients/protocols.py,sha256=phg-LEOWcP9bmzZst0pa4ztoD95deKoFHnRsYiKKar0,8024
57
+ wayfinder_paths/core/clients/sdk_example.py,sha256=jZjs-7QjeUZLcPcx7w9EBjBI8XRONIGnr6_gb7jhinA,3157
58
+ wayfinder_paths/core/config.py,sha256=gaN2FcW_Ro6skK7-Qjgm56BZ1wlvKRtj0SHLSHsrnh8,14296
59
+ wayfinder_paths/core/constants/__init__.py,sha256=KH-TtfNBJgp0WfKIxvHnvS521odH8RS3Qhl8cQhr4Ys,663
60
+ wayfinder_paths/core/constants/base.py,sha256=D0FxXe-uVBMLSIhmWNNz62ZLxeef7PRer69jcw9lkaU,671
61
+ wayfinder_paths/core/constants/erc20_abi.py,sha256=3ljIyUl6FesoEa4uprwNo-nF0Q5s73M9WEqXLw6ONI4,3214
62
+ wayfinder_paths/core/constants/hyperlend_abi.py,sha256=nIaqsfMl5-_InYN82pjz0FIKsT-AnNkwz0DIc9VrZSc,4331
63
+ wayfinder_paths/core/engine/VaultJob.py,sha256=ZfYDmIAg4M8NJJcfre2-lygBWdxTMAVX0rIknjmgQTI,6903
64
+ wayfinder_paths/core/engine/__init__.py,sha256=HKwrvsDqdE3myQlKzLRenyxhXmFQzPlNEmkzL64IW0Q,99
65
+ wayfinder_paths/core/engine/manifest.py,sha256=rkrALipqwqR61lZu_lF1jJj1aqJk6ZskuXokcB1g0HI,3146
66
+ wayfinder_paths/core/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ wayfinder_paths/core/services/base.py,sha256=EwLYIj90IB0qtAcccLXtuvk5BSkem8tc6t0uUDsWP8k,5443
68
+ wayfinder_paths/core/services/local_evm_txn.py,sha256=B94jSZqgFxCzcl9er6T2ofxpMLRwHBph-oTBwj0M94o,16858
69
+ wayfinder_paths/core/services/local_token_txn.py,sha256=S9RJq2_fm1sqmJmn83vMo69-GQLeCkQ-20rrv0ezU1g,8049
70
+ wayfinder_paths/core/services/web3_service.py,sha256=_8sEpkWzSzp7dQR5OCwScypyOsEv5s2BeuO8TqB_H-w,1558
71
+ wayfinder_paths/core/settings.py,sha256=QSAnZjd7qL6aoQ_s43jeE8RzsTaTBNpf6P1UnWBOnE4,1919
72
+ wayfinder_paths/core/strategies/Strategy.py,sha256=ax0kfWG-QFUs5U9Q50F11diYdw7m2dQ0lKlx69PmWu0,6009
73
+ wayfinder_paths/core/strategies/__init__.py,sha256=2NjvvDw6sIQGUFV4Qo1olXTxUOY3GmCM8Ivz_J1FSmc,157
74
+ wayfinder_paths/core/strategies/base.py,sha256=-s0qeiGZl5CHTUL2PavGXM7ACkNlaa0c4jeZR_4DuBM,155
75
+ wayfinder_paths/core/strategies/descriptors.py,sha256=yZ9vnaZo5xYUpHfdJTumxYdDkIY8odp2fiezf_v0Cro,1622
76
+ wayfinder_paths/core/utils/__init__.py,sha256=TEylMYHnG37Z3mizSmw28bUm0vyNBFzf0Nc8dB_7l1A,73
77
+ wayfinder_paths/core/utils/evm_helpers.py,sha256=1RYpASX778lGuEJ3CNHgEx_4y0XJGoVgkfOZa_Ut-pM,6419
78
+ wayfinder_paths/core/utils/wallets.py,sha256=tGgVxDW2ZvkvJIb6yow1cirrqhQ67_X9IqxZocBEy2k,2438
79
+ wayfinder_paths/core/wallets/README.md,sha256=dGnDagxlMxp0-v5AT2EwoMJhkG_qq0tatKeCQLl6hcw,3736
80
+ wayfinder_paths/core/wallets/WalletManager.py,sha256=jFrjZVYLXCjwgYMEy2KB9ae2avLVBox7AfowCeFu1bE,1858
81
+ wayfinder_paths/core/wallets/__init__.py,sha256=hIuhy64pJOs_8mAP7Zup28goXbT8qjBeeVYMkbqlyu8,315
82
+ wayfinder_paths/policies/enso.py,sha256=oytco04eeGjiRbZPGFE1YpH4NxvV0tfVM14QmlyzjkY,428
83
+ wayfinder_paths/policies/erc20.py,sha256=cmiG03gz82LRUgwf7BD_yoZ9QTiIvIURL40y48NwaFo,958
84
+ wayfinder_paths/policies/evm.py,sha256=8fJpjAl6XVxr51sVMw_VkWmIaI_lj2T7qrLcR8_sWgs,713
85
+ wayfinder_paths/policies/hyper_evm.py,sha256=wLkrE158rPaDjfU5q-PyRXuQ6KA67VcqWo484UHsLb8,649
86
+ wayfinder_paths/policies/hyperlend.py,sha256=4u0NP80t7rpHlw_nvParUN90sIXypWyXACfE0OPqFys,370
87
+ wayfinder_paths/policies/hyperliquid.py,sha256=hAxNtWdxavwf_a-AnlXMOmEYakkNBkrPTrvprIQqBDQ,796
88
+ wayfinder_paths/policies/moonwell.py,sha256=sKWLbruMKiW7Yh1DhXdVPRe0JBP-nooNybRz0G9PgvA,1605
89
+ wayfinder_paths/policies/prjx.py,sha256=6kfZ6OQFroFHYJl4vSWT-svwwfvoHlS_ZrcHt8nmZMU,743
90
+ wayfinder_paths/policies/util.py,sha256=r8xQLPvE3kU21_LG6VbkFI9sUSYltcsKunryZdHOUDA,912
91
+ wayfinder_paths/run_strategy.py,sha256=7-A8Sn3WfOLovYBAwDIBFSTlZ30QRQriMZTDrLxhtj4,14392
92
+ wayfinder_paths/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
+ wayfinder_paths/scripts/create_strategy.py,sha256=rp2kkGXsmcAbOt1eZthV1iZ2yM6wAbjn4R10IATulOw,6275
94
+ wayfinder_paths/scripts/make_wallets.py,sha256=-3c4dbZ83tu-5syZ7ikHBb5BGf6wVBZ4w-ThqT9lO4U,5970
95
+ wayfinder_paths/scripts/validate_manifests.py,sha256=sTJhCVTb8X0SFYozArVbX4AMAEv-0R1Imp4dpHfAuHE,7075
96
+ wayfinder_paths/strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
+ wayfinder_paths/strategies/config.py,sha256=5dv-8tWwoxH3Sxd9jtiw90shrLipEe3UlU-IYUBfciM,2762
98
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=UB5nDE9lizcmAT6AHCPybRQHstiKURkOu0aXfoBwceI,4582
99
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/examples.json,sha256=i1OZXRmjRYXgmGk-_VqXR1hq7VuP6h40j-PWS1W3j-A,413
100
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/manifest.yaml,sha256=__YWl6MEeTBLbNWwUyZjQky0ok1T8B1m8dHPQWtW454,240
101
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=YLEOHBrdefHJegVTf2J8vgoFa9bfFAutM1i4KruFRvg,93129
102
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py,sha256=F5US_tVG9ikDhwvUXzRRF5nvp7q9ZDGZwgUn3uTjwdU,12184
103
+ wayfinder_paths/strategies/stablecoin_yield_strategy/README.md,sha256=TrSJ5SvApcRTIatjHg5ZGog_2ULREP3szYDUwf8T-dY,5179
104
+ wayfinder_paths/strategies/stablecoin_yield_strategy/examples.json,sha256=pL1DNFEvYvXKK7xXD5oQYFPQj3Cm1ocKnk6r_iZk0IY,423
105
+ wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml,sha256=xMUNzMYniVjK9iyqbHkxmiqFnpUXYlv5nrEIwYkkba4,747
106
+ wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=AK-oCeRuwQ5CaoSlrHan1TAhyFl81e7pshSd6TRMt-M,70193
107
+ wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py,sha256=d6C9_p2V9MqehYzrEN6UJNpKSu3-OP9lHlnsRe_3kYQ,13053
108
+ wayfinder_paths/templates/adapter/README.md,sha256=PJKNjPRnW-_jL6s2_O-usL2tQ7tWahYMgXaq_zrDQNk,3564
109
+ wayfinder_paths/templates/adapter/adapter.py,sha256=8wdqcEwqb7XGUxl2gQvGnbFwhPi1h15ZJhB2lgtZieI,814
110
+ wayfinder_paths/templates/adapter/examples.json,sha256=KLHy3AgPIplAaZN0qY2A-HBMa1xXkMhIyusORovTD9w,79
111
+ wayfinder_paths/templates/adapter/manifest.yaml,sha256=Xr46INOnH-R9ambF7GvzhTSZgxW3qPlOtt_04xH0_50,134
112
+ wayfinder_paths/templates/adapter/test_adapter.py,sha256=60wWP0S8n0XxdJ2pQ8Q7wr3epaZzh3G1l9uTRU_2Y88,1516
113
+ wayfinder_paths/templates/strategy/README.md,sha256=JrQH2wLm891mN7k5xHRROh_CW0HtBpTrTa0fOHT99pA,5685
114
+ wayfinder_paths/templates/strategy/examples.json,sha256=s8UdlD5uxLITQrRMCqgiaAP0IE0tdnnLfX-Zn-OChIc,135
115
+ wayfinder_paths/templates/strategy/manifest.yaml,sha256=Q13sIhfE7u0wMwa8oFwMZr_twwVMprMV4c_JEQNhkz8,289
116
+ wayfinder_paths/templates/strategy/strategy.py,sha256=dso2jhVphsdKNd17JPwnFAFzU01-1kHlWrKPAKIKSWw,2024
117
+ wayfinder_paths/templates/strategy/test_strategy.py,sha256=pF2kkNl45uAoOzQKok1uE5tBTMoyZ6smdgPeKzKfOBc,7662
118
+ wayfinder_paths/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
+ wayfinder_paths/tests/test_smoke_manifest.py,sha256=YjVzHTWys5o6Ae2cUuuJPhk-QgKxT1InDFHLjpouRiY,1267
120
+ wayfinder_paths/tests/test_test_coverage.py,sha256=NfrgC2fW1CQVQrHVK57bHtiVE5WQa3On08k2Wn5CoIw,7948
121
+ wayfinder_paths/tests/test_utils.py,sha256=pxHT0QKFlyJeJo8bFnKXzWcOdi6t8rbJ0JFCBaFCBRQ,2112
122
+ wayfinder_paths-0.1.4.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
123
+ wayfinder_paths-0.1.4.dist-info/METADATA,sha256=F68rVlrHBC8mx31BB1FZzca514DmKCOcHLPcyN9m628,31570
124
+ wayfinder_paths-0.1.4.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
125
+ wayfinder_paths-0.1.4.dist-info/RECORD,,
@@ -1,7 +0,0 @@
1
- """
2
- Hyperlend Adapter
3
- """
4
-
5
- from wayfinder_paths.vaults.adapters.hyperlend_adapter.adapter import HyperlendAdapter
6
-
7
- __all__ = ["HyperlendAdapter"]
@@ -1,26 +0,0 @@
1
- {
2
- "basic_usage": {
3
- "description": "Basic usage of TokenAdapter to get token information",
4
- "code": "from vaults.adapters.token_adapter.adapter import TokenAdapter\n\n# Initialize adapter (no config needed)\nadapter = TokenAdapter()\n\n# Get token by address\nsuccess, data = await adapter.get_token_by_address(\"0x1234567890abcdef1234567890abcdef12345678\")\nif success:\n print(f\"Token symbol: {data.get('symbol')}\")\n print(f\"Token name: {data.get('name')}\")\n print(f\"Decimals: {data.get('decimals')}\")\nelse:\n print(f\"Error: {data}\")"
5
- },
6
- "get_by_token_id": {
7
- "description": "Get token information using token ID",
8
- "code": "from vaults.adapters.token_adapter.adapter import TokenAdapter\n\n# Initialize adapter (no config needed)\nadapter = TokenAdapter()\n\n# Get token by ID\nsuccess, data = await adapter.get_token_by_id(\"token-12345\")\nif success:\n print(f\"Token data: {data}\")\nelse:\n print(f\"Error: {data}\")"
9
- },
10
- "flexible_lookup": {
11
- "description": "Use flexible get_token method that tries both address and token_id",
12
- "code": "from vaults.adapters.token_adapter.adapter import TokenAdapter\n\n# Initialize adapter (no config needed)\nadapter = TokenAdapter()\n\n# Try both address and token_id\nsuccess, data = await adapter.get_token(\n address=\"0x1234567890abcdef1234567890abcdef12345678\",\n token_id=\"token-12345\"\n)\nif success:\n print(f\"Found token: {data}\")\nelse:\n print(f\"Token not found: {data}\")"
13
- },
14
- "error_handling": {
15
- "description": "Proper error handling for various scenarios",
16
- "code": "from vaults.adapters.token_adapter.adapter import TokenAdapter\n\n# Initialize adapter (no config needed)\nadapter = TokenAdapter()\n\n# Handle missing parameters\ntry:\n success, data = await adapter.get_token()\n if not success:\n print(f\"Error: {data}\")\nexcept Exception as e:\n print(f\"Unexpected error: {e}\")\n\n# Handle API errors\nsuccess, data = await adapter.get_token_by_address(\"invalid-address\")\nif not success:\n print(f\"API error: {data}\")\nelse:\n print(f\"Token found: {data}\")"
17
- },
18
- "health_check": {
19
- "description": "Check adapter health and connectivity",
20
- "code": "from vaults.adapters.token_adapter.adapter import TokenAdapter\n\n# Initialize adapter (no config needed)\nadapter = TokenAdapter()\n\n# Check health\nhealth = await adapter.health_check()\nprint(f\"Adapter status: {health['status']}\")\nprint(f\"Connected: {health['connected']}\")\nprint(f\"Adapter type: {health['adapter']}\")\n\nif health['status'] == 'healthy':\n print(\"Adapter is ready to use\")\nelse:\n print(f\"Adapter has issues: {health.get('error', 'Unknown error')}\")"
21
- },
22
- "batch_operations": {
23
- "description": "Perform multiple token lookups efficiently",
24
- "code": "from vaults.adapters.token_adapter.adapter import TokenAdapter\nimport asyncio\n\n# Initialize adapter (no config needed)\nadapter = TokenAdapter()\n\n# List of token addresses to lookup\ntoken_addresses = [\n \"0x1234567890abcdef1234567890abcdef12345678\",\n \"0xabcdef1234567890abcdef1234567890abcdef12\",\n \"0x9876543210fedcba9876543210fedcba98765432\"\n]\n\n# Batch lookup\ntoken_data = {}\nfor address in token_addresses:\n success, data = await adapter.get_token_by_address(address)\n if success:\n token_data[address] = data\n else:\n print(f\"Failed to get token for {address}: {data}\")\n\nprint(f\"Successfully retrieved {len(token_data)} tokens\")\nfor address, data in token_data.items():\n print(f\"{address}: {data.get('symbol', 'Unknown')} - {data.get('name', 'Unknown')}\")"
25
- }
26
- }
File without changes
@@ -1,115 +0,0 @@
1
- wayfinder_paths/CONFIG_GUIDE.md,sha256=zUuTfAreyC5QeYxNBcZPNWl4y8LYtcdiJUQVEtkCdRY,12575
2
- wayfinder_paths/__init__.py,sha256=wx7pz75bPLn2O3G9B1jFzI4As3DAzPbJzefu2BgL1C4,395
3
- wayfinder_paths/config.example.json,sha256=dIi_Y-9pDX0nFktvBKGazfi-xEuC96lisCmBetJuAas,529
4
- wayfinder_paths/conftest.py,sha256=pqDNijXn9_zmbAdkt_2a18UQLjtsDkNTBJVTgC6H2nA,1136
5
- wayfinder_paths/core/__init__.py,sha256=1bW2DTK29Buj9alSdkgyLFUUmUgLJse7SffCL4mq2G0,350
6
- wayfinder_paths/core/adapters/BaseAdapter.py,sha256=zoK6Qv0WRo4NY4dy-1xDI6Dolap1Z0-R8zQtTmXVcSs,1482
7
- wayfinder_paths/core/adapters/__init__.py,sha256=ZqzkliXm5RjWxYJyJR88XHb3npZFiThk7HoVZe3JF60,108
8
- wayfinder_paths/core/adapters/base.py,sha256=j10cZ5NwqaAhN2mH_j24tG8r7_7NWtx8F6S7sJ9wOi8,100
9
- wayfinder_paths/core/clients/AuthClient.py,sha256=scz8GvnabNYAQq_XYDcLP2lf2LZqurQOixA7MMAfbCY,2796
10
- wayfinder_paths/core/clients/BRAPClient.py,sha256=kRLfjms4adpjCHZKL-1xJ8aCQcHcnzeZLHRQI-qqMcw,3131
11
- wayfinder_paths/core/clients/ClientManager.py,sha256=DBWwww_xmdX0uIfODgQMBq9zwmJNikrBVw3y5q8xd-Q,9558
12
- wayfinder_paths/core/clients/HyperlendClient.py,sha256=qu5UOcCMybhpGlXWd7JnZduHJgthXhbNimZY1RMQZMU,5162
13
- wayfinder_paths/core/clients/LedgerClient.py,sha256=bcOuuxV8FXs1hWX4K4QNigwey6aCrrDjxrK6l29bd4Y,7490
14
- wayfinder_paths/core/clients/PoolClient.py,sha256=sXyg5cWlGDvSFqGkFaxLHz52626as7_noT5--AwOgeI,3340
15
- wayfinder_paths/core/clients/SimulationClient.py,sha256=DXLMbg5WxfWMxE87PgIcnrVuuCgxKSoA7VQb1qL4GWo,6035
16
- wayfinder_paths/core/clients/TokenClient.py,sha256=6-57IF6qP4vLdDUNdPeSW9pP1H753RVrQl7GMhI1MRE,2708
17
- wayfinder_paths/core/clients/TransactionClient.py,sha256=72CgN3FPTtajljUIbhipICycUJi2MI16XCjbTKH-h14,1595
18
- wayfinder_paths/core/clients/WalletClient.py,sha256=L2ExCZv4E3Lt9lGA6w-5UBaDGR1XHxWoYLLguhpHSFs,2868
19
- wayfinder_paths/core/clients/WayfinderClient.py,sha256=RigphxnoVrmG2wxXk_1NBKYxothg68M0fquiYPlp4l4,10152
20
- wayfinder_paths/core/clients/__init__.py,sha256=oNq6fQW8hUnpkuIZxdbOTLPayJRLA6S-k8e7wqsH_7c,1581
21
- wayfinder_paths/core/clients/protocols.py,sha256=phg-LEOWcP9bmzZst0pa4ztoD95deKoFHnRsYiKKar0,8024
22
- wayfinder_paths/core/clients/sdk_example.py,sha256=jZjs-7QjeUZLcPcx7w9EBjBI8XRONIGnr6_gb7jhinA,3157
23
- wayfinder_paths/core/config.py,sha256=gaN2FcW_Ro6skK7-Qjgm56BZ1wlvKRtj0SHLSHsrnh8,14296
24
- wayfinder_paths/core/constants/__init__.py,sha256=KH-TtfNBJgp0WfKIxvHnvS521odH8RS3Qhl8cQhr4Ys,663
25
- wayfinder_paths/core/constants/base.py,sha256=D0FxXe-uVBMLSIhmWNNz62ZLxeef7PRer69jcw9lkaU,671
26
- wayfinder_paths/core/constants/erc20_abi.py,sha256=3ljIyUl6FesoEa4uprwNo-nF0Q5s73M9WEqXLw6ONI4,3214
27
- wayfinder_paths/core/constants/hyperlend_abi.py,sha256=nIaqsfMl5-_InYN82pjz0FIKsT-AnNkwz0DIc9VrZSc,4331
28
- wayfinder_paths/core/engine/VaultJob.py,sha256=ZfYDmIAg4M8NJJcfre2-lygBWdxTMAVX0rIknjmgQTI,6903
29
- wayfinder_paths/core/engine/__init__.py,sha256=HKwrvsDqdE3myQlKzLRenyxhXmFQzPlNEmkzL64IW0Q,99
30
- wayfinder_paths/core/engine/manifest.py,sha256=O0LT9qFdHu1VcINq1FWbeGxJJw3yrsDcPdTAv0L4X78,3153
31
- wayfinder_paths/core/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- wayfinder_paths/core/services/base.py,sha256=EwLYIj90IB0qtAcccLXtuvk5BSkem8tc6t0uUDsWP8k,5443
33
- wayfinder_paths/core/services/local_evm_txn.py,sha256=B94jSZqgFxCzcl9er6T2ofxpMLRwHBph-oTBwj0M94o,16858
34
- wayfinder_paths/core/services/local_token_txn.py,sha256=S9RJq2_fm1sqmJmn83vMo69-GQLeCkQ-20rrv0ezU1g,8049
35
- wayfinder_paths/core/services/web3_service.py,sha256=_8sEpkWzSzp7dQR5OCwScypyOsEv5s2BeuO8TqB_H-w,1558
36
- wayfinder_paths/core/settings.py,sha256=QSAnZjd7qL6aoQ_s43jeE8RzsTaTBNpf6P1UnWBOnE4,1919
37
- wayfinder_paths/core/strategies/Strategy.py,sha256=Tv1Wmlk9QDr1OJTCix5abVA8ypX7eNpeYwRnzI6_RKc,5950
38
- wayfinder_paths/core/strategies/__init__.py,sha256=2NjvvDw6sIQGUFV4Qo1olXTxUOY3GmCM8Ivz_J1FSmc,157
39
- wayfinder_paths/core/strategies/base.py,sha256=-s0qeiGZl5CHTUL2PavGXM7ACkNlaa0c4jeZR_4DuBM,155
40
- wayfinder_paths/core/utils/__init__.py,sha256=TEylMYHnG37Z3mizSmw28bUm0vyNBFzf0Nc8dB_7l1A,73
41
- wayfinder_paths/core/utils/evm_helpers.py,sha256=ijcuNpclAgDbjNNHS1_7LVMOVqqs22Lwgj9KHzulmck,5131
42
- wayfinder_paths/core/utils/wallets.py,sha256=tGgVxDW2ZvkvJIb6yow1cirrqhQ67_X9IqxZocBEy2k,2438
43
- wayfinder_paths/core/wallets/README.md,sha256=dGnDagxlMxp0-v5AT2EwoMJhkG_qq0tatKeCQLl6hcw,3736
44
- wayfinder_paths/core/wallets/WalletManager.py,sha256=jFrjZVYLXCjwgYMEy2KB9ae2avLVBox7AfowCeFu1bE,1858
45
- wayfinder_paths/core/wallets/__init__.py,sha256=hIuhy64pJOs_8mAP7Zup28goXbT8qjBeeVYMkbqlyu8,315
46
- wayfinder_paths/run_strategy.py,sha256=BE9BqsPe1fEW4O2ZxwRd_kukD5hLw_gIExRBEf8sucY,14421
47
- wayfinder_paths/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- wayfinder_paths/scripts/create_strategy.py,sha256=v4JLXMwXyMbHu8aEeLTQBjT5MErkrVRUG-NxDHM5dKQ,6304
49
- wayfinder_paths/scripts/make_wallets.py,sha256=-3c4dbZ83tu-5syZ7ikHBb5BGf6wVBZ4w-ThqT9lO4U,5970
50
- wayfinder_paths/scripts/validate_manifests.py,sha256=v95Qj6JUGOPd3G9GOHLmHYLAxcmxhvLfRB8uUImx1yA,7097
51
- wayfinder_paths/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- wayfinder_paths/tests/test_smoke_manifest.py,sha256=YjVzHTWys5o6Ae2cUuuJPhk-QgKxT1InDFHLjpouRiY,1267
53
- wayfinder_paths/tests/test_test_coverage.py,sha256=NfrgC2fW1CQVQrHVK57bHtiVE5WQa3On08k2Wn5CoIw,7948
54
- wayfinder_paths/tests/test_utils.py,sha256=pxHT0QKFlyJeJo8bFnKXzWcOdi6t8rbJ0JFCBaFCBRQ,2112
55
- wayfinder_paths/vaults/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- wayfinder_paths/vaults/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- wayfinder_paths/vaults/adapters/balance_adapter/README.md,sha256=crdXxadLRQ7nK1fNXGySyiN56pf-DRR6u5Bi93FVA5s,4032
58
- wayfinder_paths/vaults/adapters/balance_adapter/adapter.py,sha256=OYLEnS6VhmHEJAv3BJP2GvqP0ybeNlAk7rgkZw9iOIM,8878
59
- wayfinder_paths/vaults/adapters/balance_adapter/examples.json,sha256=atj9baySDqCVBSkDWR9-4kng8yXEKP0bZ21lz59VYyM,126
60
- wayfinder_paths/vaults/adapters/balance_adapter/manifest.yaml,sha256=PIh68YwQ90T5Hwi4v4ASghG4QH26VVURrZHJBGJy2eM,196
61
- wayfinder_paths/vaults/adapters/balance_adapter/test_adapter.py,sha256=qWcg_hLnrhMYR5bmIA1r3hvVCF66WI0KyJ5JA8Ua9hc,2711
62
- wayfinder_paths/vaults/adapters/brap_adapter/README.md,sha256=8ApfIwUCBwVJDscIBJqxzkEi5ZfCpPvoRsGuJGG8DW4,7919
63
- wayfinder_paths/vaults/adapters/brap_adapter/__init__.py,sha256=jpqxZ-Bv_8kBo-lhgO_QCWaVZNq_WwlkNBHD4RsqOJg,90
64
- wayfinder_paths/vaults/adapters/brap_adapter/adapter.py,sha256=pVur47d5RVW_r9JDxAsaweA7d_0M_pUK5lZHmu0dI9U,26451
65
- wayfinder_paths/vaults/adapters/brap_adapter/examples.json,sha256=KWuAklUspd2uvk0s2ey8gczg4nbzhdwxQqzhascyMiQ,5287
66
- wayfinder_paths/vaults/adapters/brap_adapter/manifest.yaml,sha256=HAY5AF0wMLUV2IdaSz6uU1Eqn5JzD91JZ2mX6jKzKnM,247
67
- wayfinder_paths/vaults/adapters/brap_adapter/test_adapter.py,sha256=wLlpP4MZqSAz3w0otKh0VvIHf109gwetRZBcSsLhyCs,10888
68
- wayfinder_paths/vaults/adapters/hyperlend_adapter/__init__.py,sha256=AWx6oZncKm4zf_o9dqUx9ST6-cAaMfLvvz9Rxuy4q_Q,146
69
- wayfinder_paths/vaults/adapters/hyperlend_adapter/adapter.py,sha256=BAjMV-E7E90Ob7NUwjZlR1JS4DA1RME9Usp6X8XQeV4,10218
70
- wayfinder_paths/vaults/adapters/hyperlend_adapter/manifest.yaml,sha256=EhSmX22sbSD5Lpr_lmIKfKHjC6oeMBtsGzXjRBx9mxo,266
71
- wayfinder_paths/vaults/adapters/hyperlend_adapter/test_adapter.py,sha256=wkIqnVK_G_zkB6eIK-UCGGisigldmzmAGs_dzZBTQTs,9344
72
- wayfinder_paths/vaults/adapters/ledger_adapter/README.md,sha256=0NwaG4hiCBUph9oc3K0vdgUqWxMQVTGUDwoq48VdsyA,4629
73
- wayfinder_paths/vaults/adapters/ledger_adapter/__init__.py,sha256=DK9GShIUiQ57YKSqhCKoS43GCweBxi0lzkUQ9sYVxUA,96
74
- wayfinder_paths/vaults/adapters/ledger_adapter/adapter.py,sha256=VbAMEHXXZSG4ynFVc9jZxiEdswEDKwzsFklHH_JZvyY,9896
75
- wayfinder_paths/vaults/adapters/ledger_adapter/examples.json,sha256=LuinGhBfFxO7mMwKwKJ33PuAVEHHBvl_LZeMrYevbxM,3639
76
- wayfinder_paths/vaults/adapters/ledger_adapter/manifest.yaml,sha256=G5dewgmbvPKkoH96UpGwIOPvfYX_UNeURbMgfRaB7uA,266
77
- wayfinder_paths/vaults/adapters/ledger_adapter/test_adapter.py,sha256=bYuhf0G7XiWDnkadu9KOB_niH0aVwMbt8pPElJJT3sY,7257
78
- wayfinder_paths/vaults/adapters/pool_adapter/README.md,sha256=wUUyE2t4_wQs_N_XxC7bYmhCDBCtWKJhrQjviza3QAY,6187
79
- wayfinder_paths/vaults/adapters/pool_adapter/__init__.py,sha256=rv56pYzz2Gqiz33uoPJktCQRe3CRt8U9ry5GbjVgK3A,90
80
- wayfinder_paths/vaults/adapters/pool_adapter/adapter.py,sha256=cD-Cq38u4YLj3DKB_UdP7BS4DzDyyAmxAOL6c5-dAHY,10003
81
- wayfinder_paths/vaults/adapters/pool_adapter/examples.json,sha256=hLH74Oy6WlrEvAIOjwqsjpcCDxC-N0efWeLa_-TbntM,3202
82
- wayfinder_paths/vaults/adapters/pool_adapter/manifest.yaml,sha256=MA0IUjrXj8OmNm_Hi0FuWey6SF9UK9WdlI2nqwIMef0,224
83
- wayfinder_paths/vaults/adapters/pool_adapter/test_adapter.py,sha256=SpVbnwgvfs2kxvjojsaWy05AVwhd-IlMXZWOKPX3mIg,7735
84
- wayfinder_paths/vaults/adapters/token_adapter/README.md,sha256=HbqAQzvo9GFqLKmwP3HZ_q52iAsANTT8B1MfK9I976c,2705
85
- wayfinder_paths/vaults/adapters/token_adapter/__init__.py,sha256=nEmxrvffEygn3iKH3cZTNLkhnUUhlUAEtshmrFRAjq8,62
86
- wayfinder_paths/vaults/adapters/token_adapter/adapter.py,sha256=5EAZwO8T2tPjHG83Fm5u848Vm2BSK-uy-y4Thi1JlY8,3348
87
- wayfinder_paths/vaults/adapters/token_adapter/examples.json,sha256=BdFP_bCj8lMoLP7fEbva6ijgKFO7_mLQbGfPzu4mxxQ,3669
88
- wayfinder_paths/vaults/adapters/token_adapter/manifest.yaml,sha256=dbBp-ChTO_ukhFw6Rz-dhtaHvKGRpIIrXBoMj3gFaAY,150
89
- wayfinder_paths/vaults/adapters/token_adapter/test_adapter.py,sha256=cfU8DJkverb-jjITuo0GXSYu-6CjfpZmmWxmaf4Hn0g,4708
90
- wayfinder_paths/vaults/strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
- wayfinder_paths/vaults/strategies/config.py,sha256=5dv-8tWwoxH3Sxd9jtiw90shrLipEe3UlU-IYUBfciM,2762
92
- wayfinder_paths/vaults/strategies/hyperlend_stable_yield_strategy/README.md,sha256=47eJvNCxQ-AAAusS8Je8Aha8CV9h29R-gz6El43tfec,4531
93
- wayfinder_paths/vaults/strategies/hyperlend_stable_yield_strategy/examples.json,sha256=i1OZXRmjRYXgmGk-_VqXR1hq7VuP6h40j-PWS1W3j-A,413
94
- wayfinder_paths/vaults/strategies/hyperlend_stable_yield_strategy/manifest.yaml,sha256=WwkbN_GonTKE0m3ef96Hb5ne0GgcHX_a9xWlmeYgkBk,247
95
- wayfinder_paths/vaults/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=it2RYF3L9R0z-brti6RXSGA7EzxINEUsD2hL6Cbx_v4,90489
96
- wayfinder_paths/vaults/strategies/hyperlend_stable_yield_strategy/test_strategy.py,sha256=d9K7KWj8qr3QKY8OzafwemwD8sDoCZ9lnN3HZhQtH8E,12170
97
- wayfinder_paths/vaults/strategies/stablecoin_yield_strategy/README.md,sha256=LsUNFc4g3_XLvvf8aQ0_Oq5KDbpenIpeB2gRejzGaZw,5128
98
- wayfinder_paths/vaults/strategies/stablecoin_yield_strategy/examples.json,sha256=pL1DNFEvYvXKK7xXD5oQYFPQj3Cm1ocKnk6r_iZk0IY,423
99
- wayfinder_paths/vaults/strategies/stablecoin_yield_strategy/manifest.yaml,sha256=_dOfQfAAk3mv-rdDx7yFMdXPQBCSLIzPNiSS01A4dGA,754
100
- wayfinder_paths/vaults/strategies/stablecoin_yield_strategy/strategy.py,sha256=a-x518ircT6v5O0UtC4oe6yLfQMs2ODyxnisQ_ZiV2c,68503
101
- wayfinder_paths/vaults/strategies/stablecoin_yield_strategy/test_strategy.py,sha256=Prrqr_UKlRoNw37mmlxTAjd0ecd_tujUhtH5rDy79Gc,13067
102
- wayfinder_paths/vaults/templates/adapter/README.md,sha256=vKvRaBDz0CFaB3o9FdOknqv2aOPkYjJdH-4G7J888Go,3592
103
- wayfinder_paths/vaults/templates/adapter/adapter.py,sha256=8wdqcEwqb7XGUxl2gQvGnbFwhPi1h15ZJhB2lgtZieI,814
104
- wayfinder_paths/vaults/templates/adapter/examples.json,sha256=KLHy3AgPIplAaZN0qY2A-HBMa1xXkMhIyusORovTD9w,79
105
- wayfinder_paths/vaults/templates/adapter/manifest.yaml,sha256=d9O4k-rWgOxfG3qAA6sqIHyR1ESzyB7kzN4d8I0q7BA,141
106
- wayfinder_paths/vaults/templates/adapter/test_adapter.py,sha256=60wWP0S8n0XxdJ2pQ8Q7wr3epaZzh3G1l9uTRU_2Y88,1516
107
- wayfinder_paths/vaults/templates/strategy/README.md,sha256=GVnNhfGPEH3La7vslVKVPGRublsGaOIF7xsBp2LZktg,5643
108
- wayfinder_paths/vaults/templates/strategy/examples.json,sha256=s8UdlD5uxLITQrRMCqgiaAP0IE0tdnnLfX-Zn-OChIc,135
109
- wayfinder_paths/vaults/templates/strategy/manifest.yaml,sha256=H62QVPFtKSZ1hW2m7-EQlV7pK47liq16nZ8VbffhTxU,296
110
- wayfinder_paths/vaults/templates/strategy/strategy.py,sha256=dso2jhVphsdKNd17JPwnFAFzU01-1kHlWrKPAKIKSWw,2024
111
- wayfinder_paths/vaults/templates/strategy/test_strategy.py,sha256=lkcI4htRcnM1-9sdIIc7K3g1qrvvIvuHDAjyt-7HRw0,7669
112
- wayfinder_paths-0.1.2.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
113
- wayfinder_paths-0.1.2.dist-info/METADATA,sha256=rnxEDN-okNSqOaFu0JqqWI2GfEvplQn8HU5ZgUT7wx0,27949
114
- wayfinder_paths-0.1.2.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
115
- wayfinder_paths-0.1.2.dist-info/RECORD,,
File without changes