@thirdfy/agent-cli 0.2.41 → 0.2.43

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,24 @@ All notable changes to `@thirdfy/agent-cli` are documented here. The format is b
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.2.43] - 2026-07-31
8
+
9
+ ### Added
10
+
11
+ - `aave` provider routing, hints, and action aliases (`get_aave_markets`, lending actions) for earn CLI/MCP parity with Thirdfy API.
12
+ - Provider index links `earn-aave.md` and lists `aave` in the earn providers row. MCP parity in `thirdfy-mcp` **0.0.88**.
13
+
14
+ ### Fixed
15
+
16
+ - `polymarket status` and `polymarket setup` use the execute run rail (`commandRun`) so responses include live funding/setup payloads, not wallet-only preflight.
17
+ - `prepare_polymarket_onboarding` in `READ_ONLY_EXACT` (parity with Thirdfy API).
18
+
19
+ ## 0.2.42
20
+
21
+ - Treat `check_*` actions as read-only (Near Intents `check_bridge_status` parity with API/MCP).
22
+ - Selection/routing updates for Near Intents bridge provider alias.
23
+
24
+
7
25
  ## [0.2.41] - 2026-07-28
8
26
 
9
27
  ### Fixed
package/README.md CHANGED
@@ -40,9 +40,12 @@ Run without global install:
40
40
  npx @thirdfy/agent-cli --help
41
41
  ```
42
42
 
43
- ## What's new in v0.2.41
44
- - `--provider lifi` soft-matches catalog `providerId: bridge` for bridge quote/execute (historical pack flag) while still matching trade provider `lifi` on Robinhood 4663. Prefer `--provider bridge` for bridges.
45
- - See [CHANGELOG.md](./CHANGELOG.md) for older versions.
43
+ ## What's new in v0.2.43
44
+
45
+ - Aave earn provider routing (`get_aave_markets`, supply/withdraw, lending beta actions).
46
+ - Polymarket `status`/`setup` return live execute payloads; `prepare_polymarket_onboarding` is read-only.
47
+
48
+ See [CHANGELOG.md](./CHANGELOG.md) for older versions.
46
49
 
47
50
 
48
51
  ## Quick start
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thirdfy/agent-cli",
3
- "version": "0.2.41",
3
+ "version": "0.2.43",
4
4
  "description": "Thirdfy Agent CLI for onboarding, governance preflight, execute-intent, and status polling.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -128,11 +128,24 @@ async function commandRun(ctx, flags, capabilities) {
128
128
  });
129
129
  return;
130
130
  }
131
+ const data = flags.__polymarketSetupGuide
132
+ ? {
133
+ ...normalized,
134
+ setupGuide: {
135
+ message:
136
+ 'Review the onboarding plan above. Use polymarket status for live funding and setup payloads.',
137
+ nextCommands: [
138
+ 'thirdfy-agent polymarket status --json',
139
+ 'thirdfy-agent run --run-mode agent_wallet --action complete_polymarket_onboarding --params \'{"agentKey":"<key>","dryRun":true}\' --json',
140
+ ],
141
+ },
142
+ }
143
+ : normalized;
131
144
  printEnvelope({
132
145
  success: normalized.success,
133
146
  code: backendResult.code,
134
147
  message: backendResult.message,
135
- data: normalized,
148
+ data,
136
149
  meta: {
137
150
  apiBase: ctx.apiBase,
138
151
  requestedAction: resolved.requestedAction,
@@ -27,7 +27,7 @@ export function resolveConfigAgentKey(flags) {
27
27
  return extractAgentKey(config);
28
28
  }
29
29
 
30
- export function createPolymarketCommands({ commandPreflight, printEnvelope }) {
30
+ export function createPolymarketCommands({ commandRun, commandPreflight, printEnvelope }) {
31
31
  async function commandPolymarketStatus(ctx, flags) {
32
32
  const agentKey = resolveConfigAgentKey(flags);
33
33
  const capabilities = await negotiateCapabilities(ctx);
@@ -47,7 +47,7 @@ export function createPolymarketCommands({ commandPreflight, printEnvelope }) {
47
47
  flags.action = 'get_polymarket_setup_status';
48
48
  flags.params = JSON.stringify(params);
49
49
  }
50
- await commandPreflight(ctx, flags, capabilities);
50
+ await commandRun(ctx, flags, capabilities);
51
51
  }
52
52
 
53
53
  async function commandPolymarketSetup(ctx, flags) {
@@ -61,7 +61,7 @@ export function createPolymarketCommands({ commandPreflight, printEnvelope }) {
61
61
  });
62
62
  if (!flags.runMode) flags.runMode = 'agent_wallet';
63
63
  flags.__polymarketSetupGuide = true;
64
- await commandPreflight(ctx, flags, capabilities);
64
+ await commandRun(ctx, flags, capabilities);
65
65
  }
66
66
 
67
67
  async function commandPolymarketDryRun(ctx, flags) {
@@ -7,12 +7,13 @@
7
7
  * execute rail and come back shaped as an execution envelope instead of provider data.
8
8
  */
9
9
 
10
- const READ_ONLY_PREFIXES = ['get_', 'list_', 'fetch_', 'search_', 'show_', 'dogeos_get_'];
10
+ const READ_ONLY_PREFIXES = ['get_', 'list_', 'fetch_', 'search_', 'show_', 'check_', 'dogeos_get_'];
11
11
 
12
12
  const READ_ONLY_EXACT = new Set([
13
13
  'dogeos_barkswap_get_quote',
14
14
  'dogeos_laika_read_contract',
15
15
  'dogeos_laika_token_state',
16
+ 'prepare_polymarket_onboarding',
16
17
  ]);
17
18
 
18
19
  export function normalizeActionKey(actionKey) {
@@ -122,6 +122,11 @@ function inferActionProvider(action) {
122
122
  'get-morpho-vaults': 'morpho',
123
123
  'deposit-morpho-vault': 'morpho',
124
124
  'withdraw-morpho-vault': 'morpho',
125
+ 'get-aave-markets': 'aave',
126
+ 'get-aave-portfolio': 'aave',
127
+ 'aave-borrow': 'aave',
128
+ 'aave-repay': 'aave',
129
+ 'aave-set-collateral': 'aave',
125
130
  'get-curve-pools': 'curve',
126
131
  'get-curve-pool-details': 'curve',
127
132
  'deposit-curve-pool': 'curve',
@@ -171,6 +176,7 @@ function inferActionProvider(action) {
171
176
  if (key.includes('capyfi')) return 'capyfi';
172
177
  if (key.includes('fx') || key.includes('monerium')) return 'fx';
173
178
  if (key.includes('morpho')) return 'morpho';
179
+ if (key.includes('aave')) return 'aave';
174
180
  if (key.includes('aegis')) return 'aegis';
175
181
  if (key.includes('curve')) return 'curve';
176
182
  if (key.includes('earn') || key.includes('yield') || key.includes('vault')) return 'earn';
@@ -247,11 +253,16 @@ function actionMatchesProvider(action, requestedProvider, allActions) {
247
253
  if (provider === 'bridge' || isProviderActionKey(action, 'bridge')) return true;
248
254
  return false;
249
255
  }
256
+ if (requestedProvider === 'near-intents' || requestedProvider === 'near_intents') {
257
+ if (provider === 'hyperliquid' || provider === 'lighter') return false;
258
+ if (provider === 'bridge' || isProviderActionKey(action, 'bridge')) return true;
259
+ return false;
260
+ }
250
261
  if (requestedProvider.startsWith('dogeos')) return isProviderActionKey(action, requestedProvider);
251
262
  if (requestedProvider === 'earn') {
252
- return provider === 'earn' || provider === 'morpho' || provider === 'aegis' || provider === 'curve' || provider === 'capyfi' || provider === 'vaults-fyi' || provider === 'yield-xyz' || isEarnCatalogAction(action);
263
+ return provider === 'earn' || provider === 'morpho' || provider === 'aave' || provider === 'aegis' || provider === 'curve' || provider === 'capyfi' || provider === 'vaults-fyi' || provider === 'yield-xyz' || isEarnCatalogAction(action);
253
264
  }
254
- if (requestedProvider === 'morpho' || requestedProvider === 'aegis' || requestedProvider === 'curve' || requestedProvider === 'capyfi' || requestedProvider === 'vaults-fyi' || requestedProvider === 'yield-xyz') {
265
+ if (requestedProvider === 'morpho' || requestedProvider === 'aave' || requestedProvider === 'aegis' || requestedProvider === 'curve' || requestedProvider === 'capyfi' || requestedProvider === 'vaults-fyi' || requestedProvider === 'yield-xyz') {
255
266
  const hasProtocolSpecificEarnRows = allActions.some((candidate) => getActionProviderWithInference(candidate) === requestedProvider);
256
267
  return (
257
268
  isProviderActionKey(action, requestedProvider) ||
@@ -170,6 +170,7 @@ export function createRuntimeHandlers(deps) {
170
170
  });
171
171
 
172
172
  const __polymarket = createPolymarketCommands({
173
+ commandRun: __execute.commandRun,
173
174
  commandPreflight: __execute.commandPreflight,
174
175
  printEnvelope,
175
176
  });
@@ -347,6 +347,8 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
347
347
  'get_earn_provider',
348
348
  'get_earn_position',
349
349
  'get_morpho_vaults',
350
+ 'get_aave_markets',
351
+ 'get_aave_portfolio',
350
352
  'get_aegis_pools',
351
353
  'get_aegis_pool_state',
352
354
  'get_aegis_vault_state',
@@ -356,7 +358,7 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
356
358
  ],
357
359
  orderManagementActions: ['deposit_earn_position', 'withdraw_earn_position'],
358
360
  laneCompatibility:
359
- '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.',
361
+ 'Generic earn writes use deposit_earn_position / withdraw_earn_position on normal Thirdfy policy/delegation rails; routing selects Morpho, Aave, Curve, Vaults.fyi, or Yield.xyz adapters per provider/opportunity.',
360
362
  };
361
363
  }
362
364
  if (provider === 'capyfi') {
@@ -399,6 +401,32 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
399
401
  'thirdfy-agent run --action get_earn_opportunities --params \'{"providerId":"morpho","chainId":8453,"asset":"USDC"}\' && thirdfy-agent run --action deposit_earn_position --params \'{"providerId":"morpho","chainId":8453,"vaultAddress":"0x...","tokenAddress":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"0.1","tokenDecimals":6}\'',
400
402
  };
401
403
  }
404
+ if (provider === 'aave') {
405
+ return {
406
+ provider,
407
+ category: 'earn',
408
+ canonicalReadAction: 'get_aave_markets',
409
+ canonicalWriteAction: 'deposit_earn_position',
410
+ readActions: [
411
+ 'get_aave_markets',
412
+ 'get_aave_portfolio',
413
+ 'get_earning_opportunities',
414
+ 'get_earn_opportunities',
415
+ 'get_earn_position',
416
+ ],
417
+ orderManagementActions: [
418
+ 'deposit_earn_position',
419
+ 'withdraw_earn_position',
420
+ 'aave_borrow',
421
+ 'aave_repay',
422
+ 'aave_set_collateral',
423
+ ],
424
+ laneCompatibility:
425
+ 'Aave V3 supply and withdraw route through deposit_earn_position / withdraw_earn_position with providerId aave. Lending beta actions use aave_borrow, aave_repay, and aave_set_collateral with health-factor guards.',
426
+ example:
427
+ 'thirdfy-agent actions --provider aave --json && thirdfy-agent run --action get_aave_markets --params \'{"chainId":8453}\'',
428
+ };
429
+ }
402
430
  if (provider === 'aegis') {
403
431
  return {
404
432
  provider,
@@ -496,6 +524,7 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
496
524
  prediction: 'place_prediction_order',
497
525
  earn: 'deposit_earn_position',
498
526
  morpho: 'deposit_earn_position',
527
+ aave: 'deposit_earn_position',
499
528
  aegis: 'deposit_aegis_lender',
500
529
  curve: 'deposit_earn_position',
501
530
  'vaults-fyi': 'deposit_earn_position',
@@ -504,6 +533,7 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
504
533
  const canonicalReadActions = {
505
534
  earn: 'get_earning_opportunities',
506
535
  morpho: 'get_morpho_vaults',
536
+ aave: 'get_aave_markets',
507
537
  aegis: 'get_aegis_pools',
508
538
  curve: 'get_curve_pools',
509
539
  'vaults-fyi': 'get-vaults-fyi-vaults',