@thirdfy/agent-cli 0.2.48 → 0.2.50
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 +15 -2
- package/src/runtime/providerHints.mjs +32 -0
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.50] - 2026-08-14
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Uniswap LP (`providerId: uniswap`) provider hints and earn-family routing: `get_uniswap_*` reads plus named mint/increase/decrease/collect/close/burn writes. See [`docs/providers/earn-uniswap.md`](./docs/providers/earn-uniswap.md). Pairs with Thirdfy API **3.13.63** and `thirdfy-mcp` **0.0.98**.
|
|
12
|
+
|
|
13
|
+
## [0.2.49] - 2026-08-10
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Action provider inference for legacy spot write id `execute_optimal_swap` (underscore form) now maps to the `trading` provider, matching `swap` and `execute-optimal-swap` for catalog discovery and run routing.
|
|
18
|
+
|
|
7
19
|
## [0.2.48] - 2026-08-09
|
|
8
20
|
|
|
9
21
|
### Added
|
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.50
|
|
44
44
|
|
|
45
|
-
-
|
|
46
|
-
-
|
|
45
|
+
- Uniswap LP (`uniswap`): list pools and positions, then mint, collect, or close with named actions.
|
|
46
|
+
- LP writes use `mint_uniswap_position` and `close_uniswap_position`, not `deposit_earn_position`.
|
|
47
|
+
- See [CHANGELOG.md](./CHANGELOG.md) and GitHub Releases for older versions.
|
|
47
48
|
|
|
48
49
|
|
|
49
50
|
## Quick start
|
package/package.json
CHANGED
|
@@ -42,6 +42,7 @@ function inferActionProvider(action) {
|
|
|
42
42
|
const knownMap = {
|
|
43
43
|
swap: 'trading',
|
|
44
44
|
'execute-optimal-swap': 'trading',
|
|
45
|
+
execute_optimal_swap: 'trading',
|
|
45
46
|
'get-best-trading-quote': 'trading',
|
|
46
47
|
'dogeos-barkswap-get-quote': 'dogeos-barkswap',
|
|
47
48
|
'dogeos-barkswap-execute-swap': 'dogeos-barkswap',
|
|
@@ -131,6 +132,17 @@ function inferActionProvider(action) {
|
|
|
131
132
|
'get-curve-pool-details': 'curve',
|
|
132
133
|
'deposit-curve-pool': 'curve',
|
|
133
134
|
'withdraw-curve-pool': 'curve',
|
|
135
|
+
'get-uniswap-pools': 'uniswap',
|
|
136
|
+
'get-uniswap-pool-state': 'uniswap',
|
|
137
|
+
'get-uniswap-positions': 'uniswap',
|
|
138
|
+
'get-uniswap-position': 'uniswap',
|
|
139
|
+
'get-uniswap-fees': 'uniswap',
|
|
140
|
+
'mint-uniswap-position': 'uniswap',
|
|
141
|
+
'increase-uniswap-liquidity': 'uniswap',
|
|
142
|
+
'decrease-uniswap-liquidity': 'uniswap',
|
|
143
|
+
'collect-uniswap-fees': 'uniswap',
|
|
144
|
+
'close-uniswap-position': 'uniswap',
|
|
145
|
+
'burn-uniswap-position': 'uniswap',
|
|
134
146
|
'get-aegis-pools': 'aegis',
|
|
135
147
|
'get-aegis-pool-state': 'aegis',
|
|
136
148
|
'get-aegis-vault-state': 'aegis',
|
|
@@ -179,6 +191,7 @@ function inferActionProvider(action) {
|
|
|
179
191
|
if (key.includes('aave')) return 'aave';
|
|
180
192
|
if (key.includes('aegis')) return 'aegis';
|
|
181
193
|
if (key.includes('curve')) return 'curve';
|
|
194
|
+
if (key.includes('uniswap')) return 'uniswap';
|
|
182
195
|
if (key.includes('earn') || key.includes('yield') || key.includes('vault')) return 'earn';
|
|
183
196
|
if (key.includes('bridge')) return 'bridge';
|
|
184
197
|
if (key.includes('dogeos-barkswap')) return 'dogeos-barkswap';
|
|
@@ -260,9 +273,9 @@ function actionMatchesProvider(action, requestedProvider, allActions) {
|
|
|
260
273
|
}
|
|
261
274
|
if (requestedProvider.startsWith('dogeos')) return isProviderActionKey(action, requestedProvider);
|
|
262
275
|
if (requestedProvider === 'earn') {
|
|
263
|
-
return provider === 'earn' || provider === 'morpho' || provider === 'aave' || provider === 'aegis' || provider === 'curve' || provider === 'capyfi' || provider === 'vaults-fyi' || provider === 'yield-xyz' || isEarnCatalogAction(action);
|
|
276
|
+
return provider === 'earn' || provider === 'morpho' || provider === 'aave' || provider === 'aegis' || provider === 'curve' || provider === 'uniswap' || provider === 'capyfi' || provider === 'vaults-fyi' || provider === 'yield-xyz' || isEarnCatalogAction(action);
|
|
264
277
|
}
|
|
265
|
-
if (requestedProvider === 'morpho' || requestedProvider === 'aave' || requestedProvider === 'aegis' || requestedProvider === 'curve' || requestedProvider === 'capyfi' || requestedProvider === 'vaults-fyi' || requestedProvider === 'yield-xyz') {
|
|
278
|
+
if (requestedProvider === 'morpho' || requestedProvider === 'aave' || requestedProvider === 'aegis' || requestedProvider === 'curve' || requestedProvider === 'uniswap' || requestedProvider === 'capyfi' || requestedProvider === 'vaults-fyi' || requestedProvider === 'yield-xyz') {
|
|
266
279
|
const hasProtocolSpecificEarnRows = allActions.some((candidate) => getActionProviderWithInference(candidate) === requestedProvider);
|
|
267
280
|
return (
|
|
268
281
|
isProviderActionKey(action, requestedProvider) ||
|
|
@@ -471,6 +471,36 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
471
471
|
'Curve EVM writes are limited to the validated Base mainnet 4pool adapter; other pools remain discovery-only until per-pool calldata is validated.',
|
|
472
472
|
};
|
|
473
473
|
}
|
|
474
|
+
if (provider === 'uniswap') {
|
|
475
|
+
return {
|
|
476
|
+
provider,
|
|
477
|
+
category: 'earn',
|
|
478
|
+
canonicalReadAction: 'get_uniswap_pools',
|
|
479
|
+
canonicalWriteAction: 'mint_uniswap_position',
|
|
480
|
+
readActions: [
|
|
481
|
+
'get_uniswap_pools',
|
|
482
|
+
'get_uniswap_pool_state',
|
|
483
|
+
'get_uniswap_positions',
|
|
484
|
+
'get_uniswap_position',
|
|
485
|
+
'get_uniswap_fees',
|
|
486
|
+
'get_earning_opportunities',
|
|
487
|
+
'get_earn_opportunities',
|
|
488
|
+
],
|
|
489
|
+
orderManagementActions: [
|
|
490
|
+
'mint_uniswap_position',
|
|
491
|
+
'increase_uniswap_liquidity',
|
|
492
|
+
'decrease_uniswap_liquidity',
|
|
493
|
+
'collect_uniswap_fees',
|
|
494
|
+
'close_uniswap_position',
|
|
495
|
+
'burn_uniswap_position',
|
|
496
|
+
],
|
|
497
|
+
supportedChains: [8453, 42161, 1, 4663],
|
|
498
|
+
laneCompatibility:
|
|
499
|
+
'Uniswap LP discovery is read-first on Base v3 and vanilla v4 pools. Named mint/increase/decrease/collect/close actions replace deposit_earn_position; writes ship after Gate A discover passes.',
|
|
500
|
+
example:
|
|
501
|
+
'thirdfy-agent actions --provider uniswap --json && thirdfy-agent run --action get_uniswap_pools --params \'{"chainId":8453}\'',
|
|
502
|
+
};
|
|
503
|
+
}
|
|
474
504
|
if (provider === 'vaults-fyi') {
|
|
475
505
|
return {
|
|
476
506
|
provider,
|
|
@@ -599,6 +629,7 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
599
629
|
aave: 'deposit_earn_position',
|
|
600
630
|
aegis: 'deposit_aegis_lender',
|
|
601
631
|
curve: 'deposit_earn_position',
|
|
632
|
+
uniswap: 'mint_uniswap_position',
|
|
602
633
|
'vaults-fyi': 'deposit_earn_position',
|
|
603
634
|
'yield-xyz': 'deposit_earn_position',
|
|
604
635
|
};
|
|
@@ -608,6 +639,7 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
608
639
|
aave: 'get_aave_markets',
|
|
609
640
|
aegis: 'get_aegis_pools',
|
|
610
641
|
curve: 'get_curve_pools',
|
|
642
|
+
uniswap: 'get_uniswap_pools',
|
|
611
643
|
'vaults-fyi': 'get-vaults-fyi-vaults',
|
|
612
644
|
'yield-xyz': 'get_yield_xyz_opportunities',
|
|
613
645
|
'market-data': 'get_trending_tokens',
|