@thirdfy/agent-cli 0.2.61 → 0.2.63
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 +12 -0
- package/README.md +4 -3
- package/package.json +1 -1
- package/src/runtime/actions/selection.mjs +13 -2
- package/src/runtime/providerHints.mjs +38 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ All notable changes to `@thirdfy/agent-cli` are documented here. The format is b
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.2.63] - 2026-09-09
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Prediction provider hints prefer `get_prediction_markets` with Gamma `tag_id` and `end_date_min` / `end_date_max` over `search_prediction_markets` for discovery. Pairs with `thirdfy-mcp` **0.0.113** and Thirdfy API **3.14.30**.
|
|
12
|
+
|
|
13
|
+
## [0.2.62] - 2026-09-09
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- Ratehopper Managed USDC LP (`providerId: ratehopper`) on Base: `get_ratehopper_*` reads plus Safe deploy, operator enable, and `setup_ratehopper_cash_lp`. Close and owner sweep stay blocked until Ratehopper confirms a REST close path. See [`docs/providers/earn-ratehopper.md`](./docs/providers/earn-ratehopper.md). Pairs with `thirdfy-mcp` **0.0.111** and Thirdfy API **3.14.29**.
|
|
18
|
+
|
|
7
19
|
## [0.2.61] - 2026-09-06
|
|
8
20
|
|
|
9
21
|
### Fixed
|
package/README.md
CHANGED
|
@@ -40,10 +40,11 @@ Run without global install:
|
|
|
40
40
|
npx @thirdfy/agent-cli --help
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
## What's new in v0.2.
|
|
43
|
+
## What's new in v0.2.63
|
|
44
44
|
|
|
45
|
-
-
|
|
46
|
-
-
|
|
45
|
+
- Polymarket discovery uses `get_prediction_markets` with a Gamma `tag_id` and an `end_date_min` / `end_date_max` window.
|
|
46
|
+
- `search_prediction_markets` is for human text or slug lookup, not agent discovery.
|
|
47
|
+
- `get_polymarket_user_orders` returns `orders` and `openOrderCount` at the top level.
|
|
47
48
|
- See [CHANGELOG.md](./CHANGELOG.md) and GitHub Releases for older versions.
|
|
48
49
|
|
|
49
50
|
## Quick start
|
package/package.json
CHANGED
|
@@ -144,6 +144,16 @@ function inferActionProvider(action) {
|
|
|
144
144
|
'collect-uniswap-fees': 'uniswap',
|
|
145
145
|
'close-uniswap-position': 'uniswap',
|
|
146
146
|
'burn-uniswap-position': 'uniswap',
|
|
147
|
+
'get-ratehopper-agents': 'ratehopper',
|
|
148
|
+
'get-ratehopper-portfolio': 'ratehopper',
|
|
149
|
+
'get-ratehopper-logs': 'ratehopper',
|
|
150
|
+
'get-ratehopper-performance': 'ratehopper',
|
|
151
|
+
'get-ratehopper-setup-status': 'ratehopper',
|
|
152
|
+
'deploy-ratehopper-safe': 'ratehopper',
|
|
153
|
+
'enable-ratehopper-operator': 'ratehopper',
|
|
154
|
+
'setup-ratehopper-cash-lp': 'ratehopper',
|
|
155
|
+
'close-ratehopper-agent': 'ratehopper',
|
|
156
|
+
'transfer-ratehopper-to-owner': 'ratehopper',
|
|
147
157
|
'get-aegis-pools': 'aegis',
|
|
148
158
|
'get-aegis-pool-state': 'aegis',
|
|
149
159
|
'get-aegis-vault-state': 'aegis',
|
|
@@ -195,6 +205,7 @@ function inferActionProvider(action) {
|
|
|
195
205
|
if (key.includes('aegis')) return 'aegis';
|
|
196
206
|
if (key.includes('curve')) return 'curve';
|
|
197
207
|
if (key.includes('uniswap')) return 'uniswap';
|
|
208
|
+
if (key.includes('ratehopper')) return 'ratehopper';
|
|
198
209
|
if (key.includes('earn') || key.includes('yield') || key.includes('vault')) return 'earn';
|
|
199
210
|
if (key.includes('bridge')) return 'bridge';
|
|
200
211
|
if (key.includes('dogeos-barkswap')) return 'dogeos-barkswap';
|
|
@@ -283,9 +294,9 @@ function actionMatchesProvider(action, requestedProvider, allActions) {
|
|
|
283
294
|
}
|
|
284
295
|
if (requestedProvider.startsWith('dogeos')) return isProviderActionKey(action, requestedProvider);
|
|
285
296
|
if (requestedProvider === 'earn') {
|
|
286
|
-
return provider === 'earn' || provider === 'morpho' || provider === 'aave' || provider === 'aegis' || provider === 'curve' || provider === 'uniswap' || provider === 'capyfi' || provider === 'vaults-fyi' || provider === 'yield-xyz' || isEarnCatalogAction(action);
|
|
297
|
+
return provider === 'earn' || provider === 'morpho' || provider === 'aave' || provider === 'aegis' || provider === 'curve' || provider === 'uniswap' || provider === 'ratehopper' || provider === 'capyfi' || provider === 'vaults-fyi' || provider === 'yield-xyz' || isEarnCatalogAction(action);
|
|
287
298
|
}
|
|
288
|
-
if (requestedProvider === 'morpho' || requestedProvider === 'aave' || requestedProvider === 'aegis' || requestedProvider === 'curve' || requestedProvider === 'uniswap' || requestedProvider === 'capyfi' || requestedProvider === 'vaults-fyi' || requestedProvider === 'yield-xyz') {
|
|
299
|
+
if (requestedProvider === 'morpho' || requestedProvider === 'aave' || requestedProvider === 'aegis' || requestedProvider === 'curve' || requestedProvider === 'uniswap' || requestedProvider === 'ratehopper' || requestedProvider === 'capyfi' || requestedProvider === 'vaults-fyi' || requestedProvider === 'yield-xyz') {
|
|
289
300
|
const hasProtocolSpecificEarnRows = allActions.some((candidate) => getActionProviderWithInference(candidate) === requestedProvider);
|
|
290
301
|
return (
|
|
291
302
|
isProviderActionKey(action, requestedProvider) ||
|
|
@@ -433,11 +433,18 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
433
433
|
canonicalWriteAction: 'place_prediction_order',
|
|
434
434
|
readActions: [
|
|
435
435
|
'get_prediction_tags',
|
|
436
|
-
'search_prediction_markets',
|
|
437
|
-
'get_prediction_events',
|
|
438
436
|
'get_prediction_markets',
|
|
437
|
+
'get_prediction_events',
|
|
439
438
|
'get_prediction_market',
|
|
440
439
|
'get_prediction_order_book',
|
|
440
|
+
'search_prediction_markets',
|
|
441
|
+
],
|
|
442
|
+
discoveryFlow: [
|
|
443
|
+
'get_prediction_tags (resolve numeric tag_id once)',
|
|
444
|
+
'get_prediction_markets with tag_id + end_date_min/end_date_max + liquidity_num_min',
|
|
445
|
+
'get_prediction_order_book when book prices are missing',
|
|
446
|
+
'place_prediction_order after setup/funding/preflight',
|
|
447
|
+
'search_prediction_markets last for human text/slug lookup only',
|
|
441
448
|
],
|
|
442
449
|
orderManagementActions: ['place_prediction_order', 'cancel_prediction_order'],
|
|
443
450
|
compatibilityProvider: 'polymarket',
|
|
@@ -611,6 +618,33 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
611
618
|
'thirdfy-agent actions --provider uniswap --json && thirdfy-agent run --action get_uniswap_pools --params \'{"chainId":8453}\'',
|
|
612
619
|
};
|
|
613
620
|
}
|
|
621
|
+
if (provider === 'ratehopper') {
|
|
622
|
+
return {
|
|
623
|
+
provider,
|
|
624
|
+
category: 'earn',
|
|
625
|
+
canonicalReadAction: 'get_ratehopper_agents',
|
|
626
|
+
canonicalWriteAction: 'setup_ratehopper_cash_lp',
|
|
627
|
+
readActions: [
|
|
628
|
+
'get_ratehopper_agents',
|
|
629
|
+
'get_ratehopper_portfolio',
|
|
630
|
+
'get_ratehopper_logs',
|
|
631
|
+
'get_ratehopper_performance',
|
|
632
|
+
'get_ratehopper_setup_status',
|
|
633
|
+
],
|
|
634
|
+
orderManagementActions: [
|
|
635
|
+
'deploy_ratehopper_safe',
|
|
636
|
+
'enable_ratehopper_operator',
|
|
637
|
+
'setup_ratehopper_cash_lp',
|
|
638
|
+
'close_ratehopper_agent',
|
|
639
|
+
'transfer_ratehopper_to_owner',
|
|
640
|
+
],
|
|
641
|
+
supportedChains: [8453],
|
|
642
|
+
laneCompatibility:
|
|
643
|
+
'Ratehopper Managed USDC LP uses a user-owned Safe on Base. Reads need Thirdfy-hosted Partner REST access. Close and owner sweep stay blocked until the REST close-path spike is confirmed.',
|
|
644
|
+
example:
|
|
645
|
+
'thirdfy-agent actions --provider ratehopper --json && thirdfy-agent run --action get_ratehopper_agents --params \'{"chainId":8453}\'',
|
|
646
|
+
};
|
|
647
|
+
}
|
|
614
648
|
if (provider === 'vaults-fyi') {
|
|
615
649
|
return {
|
|
616
650
|
provider,
|
|
@@ -820,6 +854,7 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
820
854
|
basedbid: 'basedbid_create_lbp',
|
|
821
855
|
curve: 'deposit_earn_position',
|
|
822
856
|
uniswap: 'mint_uniswap_position',
|
|
857
|
+
ratehopper: 'setup_ratehopper_cash_lp',
|
|
823
858
|
'vaults-fyi': 'deposit_earn_position',
|
|
824
859
|
'yield-xyz': 'deposit_earn_position',
|
|
825
860
|
};
|
|
@@ -830,6 +865,7 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
830
865
|
aegis: 'get_aegis_pools',
|
|
831
866
|
curve: 'get_curve_pools',
|
|
832
867
|
uniswap: 'get_uniswap_pools',
|
|
868
|
+
ratehopper: 'get_ratehopper_agents',
|
|
833
869
|
'vaults-fyi': 'get-vaults-fyi-vaults',
|
|
834
870
|
'yield-xyz': 'get_yield_xyz_opportunities',
|
|
835
871
|
'market-data': 'get_trending_tokens',
|