@thirdfy/agent-cli 0.2.49 → 0.2.51
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/core/actionTimeouts.mjs +3 -1
- package/src/runtime/actions/selection.mjs +14 -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.51] - 2026-08-16
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Earn writes `deposit_earn_position` / `withdraw_earn_position` use the 180s long HTTP timeout (same as Lighter onboarding). Default 30s aborted live Morpho deposits on Hermes (`CLI_UNHANDLED_ERROR` / "This operation was aborted"). Pairs with `thirdfy-mcp` **0.0.99**.
|
|
12
|
+
|
|
13
|
+
## [0.2.50] - 2026-08-14
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- 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**.
|
|
18
|
+
|
|
7
19
|
## [0.2.49] - 2026-08-10
|
|
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.51
|
|
44
44
|
|
|
45
|
-
-
|
|
46
|
-
-
|
|
45
|
+
- Morpho and Aave earn writes (`deposit_earn_position` / `withdraw_earn_position`) wait up to 180s instead of aborting at the 30s default.
|
|
46
|
+
- Hyphen and snake action ids both use the long timeout.
|
|
47
|
+
- See [CHANGELOG.md](./CHANGELOG.md) and GitHub Releases for older versions.
|
|
47
48
|
|
|
48
49
|
|
|
49
50
|
## Quick start
|
package/package.json
CHANGED
|
@@ -4,6 +4,8 @@ const LONG_RUNNING_ACTIONS = new Set([
|
|
|
4
4
|
'complete_lighter_onboarding',
|
|
5
5
|
'setup_lighter_api_key',
|
|
6
6
|
'register_lighter_api_key',
|
|
7
|
+
'deposit_earn_position',
|
|
8
|
+
'withdraw_earn_position',
|
|
7
9
|
]);
|
|
8
10
|
|
|
9
11
|
function normalizeActionId(action) {
|
|
@@ -13,7 +15,7 @@ function normalizeActionId(action) {
|
|
|
13
15
|
.toLowerCase();
|
|
14
16
|
}
|
|
15
17
|
|
|
16
|
-
/** Longer HTTP timeout for Lighter onboarding
|
|
18
|
+
/** Longer HTTP timeout for Lighter onboarding and Morpho/Aave earn writes (approve + vault call). */
|
|
17
19
|
export function resolveActionTimeoutMs(action, baseTimeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
18
20
|
const base = Number.isFinite(baseTimeoutMs) && baseTimeoutMs > 0 ? baseTimeoutMs : DEFAULT_TIMEOUT_MS;
|
|
19
21
|
if (!LONG_RUNNING_ACTIONS.has(normalizeActionId(action))) return base;
|
|
@@ -132,6 +132,17 @@ function inferActionProvider(action) {
|
|
|
132
132
|
'get-curve-pool-details': 'curve',
|
|
133
133
|
'deposit-curve-pool': 'curve',
|
|
134
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',
|
|
135
146
|
'get-aegis-pools': 'aegis',
|
|
136
147
|
'get-aegis-pool-state': 'aegis',
|
|
137
148
|
'get-aegis-vault-state': 'aegis',
|
|
@@ -180,6 +191,7 @@ function inferActionProvider(action) {
|
|
|
180
191
|
if (key.includes('aave')) return 'aave';
|
|
181
192
|
if (key.includes('aegis')) return 'aegis';
|
|
182
193
|
if (key.includes('curve')) return 'curve';
|
|
194
|
+
if (key.includes('uniswap')) return 'uniswap';
|
|
183
195
|
if (key.includes('earn') || key.includes('yield') || key.includes('vault')) return 'earn';
|
|
184
196
|
if (key.includes('bridge')) return 'bridge';
|
|
185
197
|
if (key.includes('dogeos-barkswap')) return 'dogeos-barkswap';
|
|
@@ -261,9 +273,9 @@ function actionMatchesProvider(action, requestedProvider, allActions) {
|
|
|
261
273
|
}
|
|
262
274
|
if (requestedProvider.startsWith('dogeos')) return isProviderActionKey(action, requestedProvider);
|
|
263
275
|
if (requestedProvider === 'earn') {
|
|
264
|
-
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);
|
|
265
277
|
}
|
|
266
|
-
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') {
|
|
267
279
|
const hasProtocolSpecificEarnRows = allActions.some((candidate) => getActionProviderWithInference(candidate) === requestedProvider);
|
|
268
280
|
return (
|
|
269
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',
|