@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 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
@@ -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: ['get_earn_opportunities', 'get_earn_provider', 'get_earn_position'],
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 vault calldata or the validated Curve Base 4pool adapter on Base (8453) per opportunity.',
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thirdfy/agent-cli",
3
- "version": "0.1.31",
3
+ "version": "0.1.32",
4
4
  "description": "Thirdfy Agent CLI for onboarding, governance preflight, execute-intent, and status polling.",
5
5
  "type": "module",
6
6
  "bin": {