@thirdfy/agent-cli 0.1.31 → 0.1.32
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.
- package/CHANGELOG.md +11 -0
- package/bin/thirdfy-agent.mjs +50 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,17 @@ All notable changes to `@thirdfy/agent-cli` are documented here. The format is b
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.1.32] - 2026-05-08
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **Earn partners (Vaults.fyi and Yield.xyz):** `thirdfy-agent actions --provider vaults-fyi|yield-xyz` returns catalog-aligned hints (`get_vaults_fyi_vaults` / `get_yield_xyz_opportunities`, generic Earn reads, `deposit_earn_position` / `withdraw_earn_position`). Provider inference and `--provider earn` filtering include these providers alongside Morpho and Curve.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Public docs (`docs/command-reference.md`, `docs/action-inventory-and-compatibility.md`, `docs/providers/index.md`) describe partner earn discovery and transaction-prep-first writes.
|
|
16
|
+
- **`--provider earn` hints:** Umbrella `readActions` lists Morpho and Curve discovery actions (`get_morpho_vaults`, `get_curve_pools`) together with partner reads so Earn hints stay symmetric across sub-providers.
|
|
17
|
+
|
|
7
18
|
## [0.1.31] - 2026-05-07
|
|
8
19
|
|
|
9
20
|
### Fixed
|
package/bin/thirdfy-agent.mjs
CHANGED
|
@@ -530,10 +530,18 @@ function getTradingProviderHint(providerId) {
|
|
|
530
530
|
category: 'earn',
|
|
531
531
|
canonicalReadAction: 'get_earn_opportunities',
|
|
532
532
|
canonicalWriteAction: 'deposit_earn_position',
|
|
533
|
-
readActions: [
|
|
533
|
+
readActions: [
|
|
534
|
+
'get_earn_opportunities',
|
|
535
|
+
'get_earn_provider',
|
|
536
|
+
'get_earn_position',
|
|
537
|
+
'get_morpho_vaults',
|
|
538
|
+
'get_curve_pools',
|
|
539
|
+
'get_vaults_fyi_vaults',
|
|
540
|
+
'get_yield_xyz_opportunities',
|
|
541
|
+
],
|
|
534
542
|
orderManagementActions: ['deposit_earn_position', 'withdraw_earn_position'],
|
|
535
543
|
laneCompatibility:
|
|
536
|
-
'Generic earn writes use deposit_earn_position / withdraw_earn_position on normal Thirdfy policy/delegation rails; routing selects Morpho
|
|
544
|
+
'Generic earn writes use deposit_earn_position / withdraw_earn_position on normal Thirdfy policy/delegation rails; routing selects Morpho, Curve, Vaults.fyi, or Yield.xyz adapters per provider/opportunity.',
|
|
537
545
|
};
|
|
538
546
|
}
|
|
539
547
|
if (provider === 'morpho') {
|
|
@@ -563,6 +571,34 @@ function getTradingProviderHint(providerId) {
|
|
|
563
571
|
'Curve EVM writes are limited to the validated Base mainnet 4pool adapter; other pools remain discovery-only until per-pool calldata is validated.',
|
|
564
572
|
};
|
|
565
573
|
}
|
|
574
|
+
if (provider === 'vaults-fyi') {
|
|
575
|
+
return {
|
|
576
|
+
provider,
|
|
577
|
+
category: 'earn',
|
|
578
|
+
canonicalReadAction: 'get_vaults_fyi_vaults',
|
|
579
|
+
canonicalWriteAction: 'deposit_earn_position',
|
|
580
|
+
readActions: ['get_vaults_fyi_vaults', 'get_earn_opportunities', 'get_earn_provider', 'get_earn_position'],
|
|
581
|
+
orderManagementActions: ['deposit_earn_position', 'withdraw_earn_position'],
|
|
582
|
+
laneCompatibility:
|
|
583
|
+
'Vaults.fyi writes are transaction-prep first. Thirdfy validates partner payloads, chain/user context, and allowed targets before returning or submitting prepared calls.',
|
|
584
|
+
example:
|
|
585
|
+
'thirdfy-agent actions --provider vaults-fyi && thirdfy-agent preflight --action deposit_earn_position --params \'{"providerId":"vaults-fyi","opportunityId":"...","vaultAddress":"0x...","tokenAddress":"0x...","amount":"10","chainId":8453}\'',
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
if (provider === 'yield-xyz') {
|
|
589
|
+
return {
|
|
590
|
+
provider,
|
|
591
|
+
category: 'earn',
|
|
592
|
+
canonicalReadAction: 'get_yield_xyz_opportunities',
|
|
593
|
+
canonicalWriteAction: 'deposit_earn_position',
|
|
594
|
+
readActions: ['get_yield_xyz_opportunities', 'get_earn_opportunities', 'get_earn_provider', 'get_earn_position'],
|
|
595
|
+
orderManagementActions: ['deposit_earn_position', 'withdraw_earn_position'],
|
|
596
|
+
laneCompatibility:
|
|
597
|
+
'Yield.xyz writes are transaction-prep first. Thirdfy calls Yield.xyz directly and validates returned unsigned transactions with @yieldxyz/shield before signing or returning prepared calls.',
|
|
598
|
+
example:
|
|
599
|
+
'thirdfy-agent actions --provider yield-xyz && thirdfy-agent preflight --action deposit_earn_position --params \'{"providerId":"yield-xyz","opportunityId":"ethereum-eth-lido-staking","tokenAddress":"0x...","amount":"0.01","chainId":1}\'',
|
|
600
|
+
};
|
|
601
|
+
}
|
|
566
602
|
return null;
|
|
567
603
|
}
|
|
568
604
|
|
|
@@ -582,11 +618,15 @@ function getCachedProviderHintFromCapabilities(provider) {
|
|
|
582
618
|
earn: 'deposit_earn_position',
|
|
583
619
|
morpho: 'deposit_earn_position',
|
|
584
620
|
curve: 'deposit_earn_position',
|
|
621
|
+
'vaults-fyi': 'deposit_earn_position',
|
|
622
|
+
'yield-xyz': 'deposit_earn_position',
|
|
585
623
|
};
|
|
586
624
|
const canonicalReadActions = {
|
|
587
625
|
earn: 'get_earn_opportunities',
|
|
588
626
|
morpho: 'get_morpho_vaults',
|
|
589
627
|
curve: 'get_curve_pools',
|
|
628
|
+
'vaults-fyi': 'get_vaults_fyi_vaults',
|
|
629
|
+
'yield-xyz': 'get_yield_xyz_opportunities',
|
|
590
630
|
prediction: 'get_prediction_markets',
|
|
591
631
|
};
|
|
592
632
|
return {
|
|
@@ -3434,6 +3474,9 @@ function inferActionProvider(action) {
|
|
|
3434
3474
|
'get-curve-pool-details': 'curve',
|
|
3435
3475
|
'deposit-curve-pool': 'curve',
|
|
3436
3476
|
'withdraw-curve-pool': 'curve',
|
|
3477
|
+
'get-vaults-fyi-vaults': 'vaults-fyi',
|
|
3478
|
+
'get-vaults-fyi-opportunities': 'vaults-fyi',
|
|
3479
|
+
'get-yield-xyz-opportunities': 'yield-xyz',
|
|
3437
3480
|
'get-prediction-markets': 'polymarket',
|
|
3438
3481
|
'get-prediction-market': 'polymarket',
|
|
3439
3482
|
'get-prediction-order-book': 'polymarket',
|
|
@@ -3449,9 +3492,11 @@ function inferActionProvider(action) {
|
|
|
3449
3492
|
if (knownMap[key]) return knownMap[key];
|
|
3450
3493
|
if (key.includes('hyperliquid')) return 'hyperliquid';
|
|
3451
3494
|
if (key.includes('polymarket') || key.includes('prediction')) return 'polymarket';
|
|
3495
|
+
if (key.includes('vaults-fyi')) return 'vaults-fyi';
|
|
3496
|
+
if (key.includes('yield-xyz')) return 'yield-xyz';
|
|
3452
3497
|
if (key.includes('morpho')) return 'morpho';
|
|
3453
3498
|
if (key.includes('curve')) return 'curve';
|
|
3454
|
-
if (key.includes('earn')) return 'earn';
|
|
3499
|
+
if (key.includes('earn') || key.includes('yield') || key.includes('vault')) return 'earn';
|
|
3455
3500
|
if (key.includes('bridge')) return 'bridge';
|
|
3456
3501
|
if (key.includes('dogeos-barkswap')) return 'dogeos-barkswap';
|
|
3457
3502
|
if (key.includes('dogeos-laika')) return 'dogeos-laika';
|
|
@@ -3500,9 +3545,9 @@ function actionMatchesProvider(action, requestedProvider, allActions) {
|
|
|
3500
3545
|
if (requestedProvider === 'bridge') return isProviderActionKey(action, 'bridge');
|
|
3501
3546
|
if (requestedProvider.startsWith('dogeos')) return isProviderActionKey(action, requestedProvider);
|
|
3502
3547
|
if (requestedProvider === 'earn') {
|
|
3503
|
-
return provider === 'earn' || provider === 'morpho' || provider === 'curve' || isEarnCatalogAction(action);
|
|
3548
|
+
return provider === 'earn' || provider === 'morpho' || provider === 'curve' || provider === 'vaults-fyi' || provider === 'yield-xyz' || isEarnCatalogAction(action);
|
|
3504
3549
|
}
|
|
3505
|
-
if (requestedProvider === 'morpho' || requestedProvider === 'curve') {
|
|
3550
|
+
if (requestedProvider === 'morpho' || requestedProvider === 'curve' || requestedProvider === 'vaults-fyi' || requestedProvider === 'yield-xyz') {
|
|
3506
3551
|
const hasProtocolSpecificEarnRows = allActions.some((candidate) => getActionProviderWithInference(candidate) === requestedProvider);
|
|
3507
3552
|
return isProviderActionKey(action, requestedProvider) || (!hasProtocolSpecificEarnRows && isEarnCatalogAction(action));
|
|
3508
3553
|
}
|