@thirdfy/agent-cli 0.1.46 → 0.1.48

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,19 @@ All notable changes to `@thirdfy/agent-cli` are documented here. The format is b
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.1.48] - 2026-05-23
8
+
9
+ ### Fixed
10
+
11
+ - `actions --provider <earn-adapter>` only includes generic `deposit_earn_position` / `withdraw_earn_position` when catalog provider is `earn` or matches the requested adapter (avoids morpho filter showing vaults-fyi-tagged rows).
12
+
13
+ ## [0.1.47] - 2026-05-23
14
+
15
+ ### Added
16
+
17
+ - Provider discovery hints for `capyfi`, `fx`, and `bridge`; expanded Kyber `supportedChains` on `trading`.
18
+ - `docs/providers/capyfi.md` operator guide.
19
+
7
20
  ## [0.1.46] - 2026-05-22
8
21
 
9
22
  ### Changed
package/README.md CHANGED
@@ -42,7 +42,7 @@ npx @thirdfy/agent-cli --help
42
42
 
43
43
  ## Release notes
44
44
 
45
- Version history and highlights: [CHANGELOG.md](./CHANGELOG.md). **v0.1.46** routes `polymarket status` through `get_polymarket_funding_status` with config `agentKey` and defaults dry-run to `place-polymarket-order` (pairs with API **v3.4.37**). **v0.1.45** adds `polymarket status`, `polymarket setup`, and `polymarket dry-run` for agent-scoped setup/geoblock preflight (pairs with API **v3.4.35**). **v0.1.44** adds Aegis provider hints for Base and Unichain earn reads and fail-closed Engine writes (pairs with API **v3.4.28**). **v0.1.43** injects Hyperliquid `userAddress` from the managed execution wallet for solo `agent_wallet` reads when omitted (pairs with API **v3.4.27**). **v0.1.42** persists API `executionWallets` from email login, updates `doctor auth` / onboarding help for agent execution wallet funding vs owner embedded auth wallet, and documents Bridge2 `FUND_AGENT_EXECUTION_WALLET` remediation (pairs with API **v3.4.25**). **v0.1.41** documents Hyperliquid `get_hyperliquid_funding_status` as setup step 0, Bridge2 sender custody, and `deposit_hyperliquid_bridge --estimated-amount-usd` (pairs with API **v3.4.24**). **v0.1.40** fixes email/bootstrap credential persistence when the API returns nested registration payloads, so owner-session onboarding can save the hidden execution identity without exposing a raw agent API key. **v0.1.39** makes `agent_wallet` the fresh solo default, adds framework guidance for Hermes/OpenClaw/Claude Managed Agents, clarifies Gator/ERC-7710 delegation flows, and keeps BYOW/self plus hybrid/thirdfy mode switching explicit. **v0.1.38** is a **documentation and metadata patch**: it republishes to npm so the package homepage matches the updated `README.md` on `main`, and aligns root `package-lock.json` version fields with `package.json`. **v0.1.37** adds **email OTP** `thirdfy-agent login email` (send code, then complete with `--code --accept-terms`), **`help onboarding`**, **`doctor auth`**, **`wallet list`**, and **masked `whoami`** output so agents and operators get first-run guidance without dumping secrets. Earlier releases added provider discovery parity, portfolio analytics, managed-wallet swap normalization, and **self/build-tx** swap human-decimal `amountIn` parity when using `amountInHuman` + `tokenInDecimals`.
45
+ Version history and highlights: [CHANGELOG.md](./CHANGELOG.md). **v0.1.48** fixes earn provider filtering so generic `deposit_earn_position` / `withdraw_earn_position` rows only appear for matching adapters (not unrelated morpho/vaults-fyi filters). **v0.1.47** adds CapyFi, FX, and bridge provider discovery hints. **v0.1.46** routes `polymarket status` through `get_polymarket_funding_status` with config `agentKey` and defaults dry-run to `place-polymarket-order` (pairs with API **v3.4.37**). **v0.1.45** adds `polymarket status`, `polymarket setup`, and `polymarket dry-run` for agent-scoped setup/geoblock preflight (pairs with API **v3.4.35**). **v0.1.44** adds Aegis provider hints for Base and Unichain earn reads and fail-closed Engine writes (pairs with API **v3.4.28**). **v0.1.43** injects Hyperliquid `userAddress` from the managed execution wallet for solo `agent_wallet` reads when omitted (pairs with API **v3.4.27**). **v0.1.42** persists API `executionWallets` from email login, updates `doctor auth` / onboarding help for agent execution wallet funding vs owner embedded auth wallet, and documents Bridge2 `FUND_AGENT_EXECUTION_WALLET` remediation (pairs with API **v3.4.25**). **v0.1.41** documents Hyperliquid `get_hyperliquid_funding_status` as setup step 0, Bridge2 sender custody, and `deposit_hyperliquid_bridge --estimated-amount-usd` (pairs with API **v3.4.24**). **v0.1.40** fixes email/bootstrap credential persistence when the API returns nested registration payloads, so owner-session onboarding can save the hidden execution identity without exposing a raw agent API key. **v0.1.39** makes `agent_wallet` the fresh solo default, adds framework guidance for Hermes/OpenClaw/Claude Managed Agents, clarifies Gator/ERC-7710 delegation flows, and keeps BYOW/self plus hybrid/thirdfy mode switching explicit. **v0.1.38** is a **documentation and metadata patch**: it republishes to npm so the package homepage matches the updated `README.md` on `main`, and aligns root `package-lock.json` version fields with `package.json`. **v0.1.37** adds **email OTP** `thirdfy-agent login email` (send code, then complete with `--code --accept-terms`), **`help onboarding`**, **`doctor auth`**, **`wallet list`**, and **masked `whoami`** output so agents and operators get first-run guidance without dumping secrets. Earlier releases added provider discovery parity, portfolio analytics, managed-wallet swap normalization, and **self/build-tx** swap human-decimal `amountIn` parity when using `amountInHuman` + `tokenInDecimals`.
46
46
 
47
47
  **Maintainers — npm:** follow [docs/releasing.md](./docs/releasing.md). From a clone with gitignored `.env`, use `npm run publish:npm:local -- --dry-run` then `npm run publish:npm:local`. Or run `npm run release:npm` after exporting tokens in the shell. Never commit npm tokens — use [.env.example](./.env.example) as a template only.
48
48
 
@@ -477,6 +477,9 @@ function getTradingProviderHint(providerId) {
477
477
  provider,
478
478
  category: 'onchain_spot',
479
479
  canonicalWriteAction: 'swap',
480
+ supportedChains: [1, 10, 130, 137, 8453, 84532, 42161],
481
+ laneCompatibility:
482
+ 'Kyber quote/build is live on Ethereum, Optimism, Unichain, Polygon, Base, and Arbitrum; sponsored Kyber execution is validated on Base only. Gnosis FX uses the fx provider via CoW.',
480
483
  credentialUx: 'Use normal Thirdfy login/delegation; do not use this provider for Hyperliquid or Polymarket.',
481
484
  };
482
485
  }
@@ -670,6 +673,18 @@ function getTradingProviderHint(providerId) {
670
673
  compatibilityProvider: 'polymarket',
671
674
  };
672
675
  }
676
+ if (provider === 'bridge') {
677
+ return {
678
+ provider,
679
+ category: 'bridge',
680
+ canonicalReadAction: 'get_bridge_quote',
681
+ canonicalWriteAction: 'execute_bridge',
682
+ readActions: ['get_bridge_quote', 'get_supported_bridge_chains', 'check_bridge_status'],
683
+ orderManagementActions: ['execute_bridge'],
684
+ supportedChains: [1, 8453, 42161, 10, 137, 56, 43114, 250, 100, 1284, 1285, 25, 288, 1088, 42220, 122, 324, 59144, 534352, 5000, 81457, 169],
685
+ laneCompatibility: 'Li.Fi bridge supports mainnet value movement only; testnets are not auto-mapped to mainnet.',
686
+ };
687
+ }
673
688
  if (provider === 'earn') {
674
689
  return {
675
690
  provider,
@@ -693,6 +708,31 @@ function getTradingProviderHint(providerId) {
693
708
  '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.',
694
709
  };
695
710
  }
711
+ if (provider === 'capyfi') {
712
+ return {
713
+ provider,
714
+ category: 'earn',
715
+ canonicalReadAction: 'get_capyfi_markets',
716
+ canonicalWriteAction: 'deposit_earn_position',
717
+ readActions: ['get_capyfi_markets', 'get_earn_opportunities', 'get_earn_position'],
718
+ orderManagementActions: ['deposit_earn_position', 'withdraw_earn_position'],
719
+ supportedChains: [1, 480],
720
+ laneCompatibility: 'CapyFi Compound-v2 supply on Ethereum and World Chain; Gnosis pending deployment addresses.',
721
+ example:
722
+ 'thirdfy-agent run --action deposit_earn_position --params \'{"providerId":"capyfi","opportunityId":"capyfi-1-usdc","amount":"100","chainId":1,"tokenAddress":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"}\'',
723
+ };
724
+ }
725
+ if (provider === 'fx') {
726
+ return {
727
+ provider,
728
+ category: 'fx',
729
+ canonicalReadAction: 'get_fx_supported_assets',
730
+ readActions: ['get_fx_supported_assets', 'quote_fx_swap', 'get_monerium_profile_status'],
731
+ supportedChains: [100],
732
+ laneCompatibility:
733
+ 'Gnosis FX: quote_fx_swap is read-only; on-chain execution uses the trading/cow path on chain 100. Monerium IBAN flows need credentials.',
734
+ };
735
+ }
696
736
  if (provider === 'morpho') {
697
737
  return {
698
738
  provider,
@@ -4166,6 +4206,10 @@ function inferActionProvider(action) {
4166
4206
  'get-earn-position': 'earn',
4167
4207
  'deposit-earn-position': 'earn',
4168
4208
  'withdraw-earn-position': 'earn',
4209
+ 'get-capyfi-markets': 'capyfi',
4210
+ 'get-fx-supported-assets': 'fx',
4211
+ 'quote-fx-swap': 'fx',
4212
+ 'get-monerium-profile-status': 'fx',
4169
4213
  'get-morpho-vaults': 'morpho',
4170
4214
  'deposit-morpho-vault': 'morpho',
4171
4215
  'withdraw-morpho-vault': 'morpho',
@@ -4214,6 +4258,8 @@ function inferActionProvider(action) {
4214
4258
  if (key.includes('polymarket') || key.includes('prediction')) return 'polymarket';
4215
4259
  if (key.includes('vaults-fyi')) return 'vaults-fyi';
4216
4260
  if (key.includes('yield-xyz')) return 'yield-xyz';
4261
+ if (key.includes('capyfi')) return 'capyfi';
4262
+ if (key.includes('fx') || key.includes('monerium')) return 'fx';
4217
4263
  if (key.includes('morpho')) return 'morpho';
4218
4264
  if (key.includes('aegis')) return 'aegis';
4219
4265
  if (key.includes('curve')) return 'curve';
@@ -4238,6 +4284,21 @@ function isEarnCatalogAction(action) {
4238
4284
  );
4239
4285
  }
4240
4286
 
4287
+ function isGenericEarnWriteAction(action) {
4288
+ const actionKey = rowActionKey(action);
4289
+ return actionKey === 'deposit_earn_position' || actionKey === 'withdraw_earn_position';
4290
+ }
4291
+
4292
+ /** Generic earn writes are shared catalog rows; only attach to the matching adapter or unlabeled rows. */
4293
+ function isGenericEarnWriteForProvider(action, requestedProvider) {
4294
+ if (!isGenericEarnWriteAction(action)) return false;
4295
+ const provider = getActionProviderWithInference(action);
4296
+ if (!provider) return true;
4297
+ if (provider === requestedProvider) return true;
4298
+ if (provider === 'earn' && requestedProvider === 'earn') return true;
4299
+ return false;
4300
+ }
4301
+
4241
4302
  function isSpotTradingCatalogAction(action) {
4242
4303
  const actionKey = rowActionKey(action);
4243
4304
  return actionKey === 'swap' || actionKey === 'execute_optimal_swap' || actionKey === 'get_best_trading_quote';
@@ -4263,14 +4324,22 @@ function actionMatchesProvider(action, requestedProvider, allActions) {
4263
4324
  // Here resolved metadata already disagrees with the filter; fall back to action-key shape only.
4264
4325
  if (requestedProvider === 'hyperliquid') return isProviderActionKey(action, 'hyperliquid');
4265
4326
  if (requestedProvider === 'polymarket') return isProviderActionKey(action, 'polymarket');
4266
- if (requestedProvider === 'bridge') return isProviderActionKey(action, 'bridge');
4327
+ if (requestedProvider === 'bridge') {
4328
+ // Hyperliquid Bridge2 setup actions are owned by Hyperliquid, not the cross-chain bridge provider.
4329
+ if (provider === 'hyperliquid') return false;
4330
+ return isProviderActionKey(action, 'bridge');
4331
+ }
4267
4332
  if (requestedProvider.startsWith('dogeos')) return isProviderActionKey(action, requestedProvider);
4268
4333
  if (requestedProvider === 'earn') {
4269
- return provider === 'earn' || provider === 'morpho' || provider === 'aegis' || provider === 'curve' || provider === 'vaults-fyi' || provider === 'yield-xyz' || isEarnCatalogAction(action);
4334
+ return provider === 'earn' || provider === 'morpho' || provider === 'aegis' || provider === 'curve' || provider === 'capyfi' || provider === 'vaults-fyi' || provider === 'yield-xyz' || isEarnCatalogAction(action);
4270
4335
  }
4271
- if (requestedProvider === 'morpho' || requestedProvider === 'aegis' || requestedProvider === 'curve' || requestedProvider === 'vaults-fyi' || requestedProvider === 'yield-xyz') {
4336
+ if (requestedProvider === 'morpho' || requestedProvider === 'aegis' || requestedProvider === 'curve' || requestedProvider === 'capyfi' || requestedProvider === 'vaults-fyi' || requestedProvider === 'yield-xyz') {
4272
4337
  const hasProtocolSpecificEarnRows = allActions.some((candidate) => getActionProviderWithInference(candidate) === requestedProvider);
4273
- return isProviderActionKey(action, requestedProvider) || (!hasProtocolSpecificEarnRows && isEarnCatalogAction(action));
4338
+ return (
4339
+ isProviderActionKey(action, requestedProvider) ||
4340
+ isGenericEarnWriteForProvider(action, requestedProvider) ||
4341
+ (!hasProtocolSpecificEarnRows && isEarnCatalogAction(action))
4342
+ );
4274
4343
  }
4275
4344
  if (requestedProvider === 'prediction') {
4276
4345
  return (
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thirdfy/agent-cli",
3
- "version": "0.1.46",
3
+ "version": "0.1.48",
4
4
  "description": "Thirdfy Agent CLI for onboarding, governance preflight, execute-intent, and status polling.",
5
5
  "type": "module",
6
6
  "bin": {