@thirdfy/agent-cli 0.2.58 → 0.2.60

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,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.60] - 2026-09-05
8
+
9
+ ### Changed
10
+
11
+ - basedbid buy and sell hints now cover Ethereum `1` and Robinhood Chain `4663` as well as Base. Buy still spends native ETH on the target chain. Pairs with `thirdfy-mcp` **0.0.108** and Thirdfy API **3.14.22**.
12
+
13
+ ## [0.2.59] - 2026-09-05
14
+
15
+ ### Added
16
+
17
+ - `avantis` and `avantis-vault` provider hints, venue tooling (`venue readiness|setup|fund avantis`), and [`docs/providers/avantis.md`](./docs/providers/avantis.md). `get_avantis_*` actions classify as read-only. Place-order examples use Avantis `side` (`long`/`short`), not Hyperliquid `isBuy`. `agent_wallet` fills missing `traderAddress` on setup and status reads. Thirdfy mints the encrypted `avantis_delegate` credential. Do not paste a venue private key. Pairs with `thirdfy-mcp` **0.0.107** and Thirdfy API **3.14.21**.
18
+
7
19
  ## [0.2.58] - 2026-09-05
8
20
 
9
21
  ### Fixed
package/README.md CHANGED
@@ -40,9 +40,10 @@ Run without global install:
40
40
  npx @thirdfy/agent-cli --help
41
41
  ```
42
42
 
43
- ## What's new in v0.2.58
43
+ ## What's new in v0.2.60
44
44
 
45
- - `basedbid_buy` managed-wallet preflight no longer treats listing `tokenAddress` as an ERC-20 funding token. Buy spends native ETH. Sell still funds from the listing token.
45
+ - basedbid buy and sell are live on Base, Ethereum, and Robinhood Chain.
46
+ - Buy spends native ETH on the target chain. `tokenAddress` is the listing, not the funding token.
46
47
  - See [CHANGELOG.md](./CHANGELOG.md) and GitHub Releases for older versions.
47
48
 
48
49
  ## Quick start
@@ -322,6 +323,7 @@ Provider and venue guides are kept outside `README` so this page stays stable as
322
323
  - Discovery: `catalogs list`, `actions` (optional `--provider`, `--chain-id`; see [`docs/command-reference.md`](./docs/command-reference.md) for trading vs earn vs prediction providers and case-insensitive matching)
323
324
  - Execution: `preflight`, `run`, `intent-status`, `jeff preflight`, `jeff trade`, `jeff status`
324
325
  - Polymarket: `polymarket status`, `polymarket setup`, `polymarket dry-run`
326
+ - Venue tooling: `venue readiness`, `venue setup`, `venue fund` (`polymarket`, `hyperliquid`, `lighter`, `avantis`)
325
327
  - Hummingbot: `hummingbot status`, `connectors`, `executor-schema`, `executor-create`, `executor-stop`, `gateway-networks`, `gateway-connectors`
326
328
  - Condor Pattern A: `condor policy-status`, `condor preflight`
327
329
  - Managed signer execution: `wallet execute`, `wallet sign`, `wallet submit`, `agent run`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thirdfy/agent-cli",
3
- "version": "0.2.58",
3
+ "version": "0.2.60",
4
4
  "description": "Thirdfy Agent CLI for onboarding, governance preflight, execute-intent, and status polling.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -103,7 +103,7 @@ export const CLI_MANIFEST = [
103
103
  path: ['venue', 'readiness'],
104
104
  handler: 'commandVenueReadiness',
105
105
  options: ['auth', 'venue'],
106
- description: 'Normalized venue readiness (polymarket, hyperliquid, lighter)',
106
+ description: 'Normalized venue readiness (polymarket, hyperliquid, lighter, avantis)',
107
107
  args: { query: true },
108
108
  tier: 'online',
109
109
  },
@@ -0,0 +1,53 @@
1
+ export function createAvantisHelpers(deps) {
2
+ const { getPreparedParams, resolveManagedExecutionPreflight } = deps;
3
+
4
+ function avantisDefaultAddressParamForAction(action) {
5
+ const canonical = String(action || '')
6
+ .trim()
7
+ .toLowerCase()
8
+ .replace(/_/g, '-');
9
+ if (
10
+ canonical === 'get-avantis-open-orders' ||
11
+ canonical === 'get-avantis-positions' ||
12
+ canonical === 'get-avantis-allowance' ||
13
+ canonical === 'get-avantis-delegation-status' ||
14
+ canonical === 'get-avantis-setup-status' ||
15
+ canonical === 'get-avantis-funding-status' ||
16
+ canonical === 'get-avantis-onboarding-plan' ||
17
+ canonical === 'get-avantis-builder-fee-status' ||
18
+ canonical === 'get-avantis-referral-status' ||
19
+ canonical === 'get-avantis-referral-stats' ||
20
+ canonical === 'prepare-avantis-onboarding' ||
21
+ canonical === 'complete-avantis-onboarding'
22
+ ) {
23
+ return 'traderAddress';
24
+ }
25
+ return null;
26
+ }
27
+
28
+ async function applyAvantisAgentWalletAddressDefault(ctx, flags, resolved, runMode) {
29
+ if (runMode !== 'agent_wallet') return null;
30
+ const paramName = avantisDefaultAddressParamForAction(resolved?.resolvedAction);
31
+ if (!paramName) return null;
32
+ const params = getPreparedParams(flags);
33
+ if (String(params?.[paramName] || '').trim()) return null;
34
+ if (String(params?.mainWalletAddress || params?.walletAddress || params?.userAddress || '').trim()) {
35
+ return null;
36
+ }
37
+ const preflight = await resolveManagedExecutionPreflight(ctx, flags, resolved, {
38
+ runMode: 'agent_wallet',
39
+ requireFundingCheck: false,
40
+ });
41
+ if (!preflight.success || !preflight.executionWalletAddress) return preflight;
42
+ flags.__preparedParams = {
43
+ ...(params || {}),
44
+ [paramName]: preflight.executionWalletAddress,
45
+ };
46
+ return preflight;
47
+ }
48
+
49
+ return {
50
+ avantisDefaultAddressParamForAction,
51
+ applyAvantisAgentWalletAddressDefault,
52
+ };
53
+ }
@@ -21,6 +21,7 @@ export function createExecuteCommands(deps) {
21
21
  enforceChainCompatibility,
22
22
  applyHyperliquidAgentWalletAddressDefault,
23
23
  applyLighterAgentWalletAddressDefault,
24
+ applyAvantisAgentWalletAddressDefault,
24
25
  runPreflightByMode,
25
26
  runExecutionByMode,
26
27
  applyExecutionFallbackHints,
@@ -43,7 +44,8 @@ async function commandPreflight(ctx, flags, capabilities) {
43
44
  enforceChainCompatibility(capabilities, flags, runMode);
44
45
  const managedPreflight =
45
46
  (await applyHyperliquidAgentWalletAddressDefault(ctx, flags, resolved, runMode))
46
- || (await applyLighterAgentWalletAddressDefault(ctx, flags, resolved, runMode));
47
+ || (await applyLighterAgentWalletAddressDefault(ctx, flags, resolved, runMode))
48
+ || (await applyAvantisAgentWalletAddressDefault(ctx, flags, resolved, runMode));
47
49
  const backendResult = await runPreflightByMode(runMode, ctx, flags, resolved, { hybridWalletMode, managedPreflight });
48
50
  const normalized = applyExecutionFallbackHints(backendResult.normalized, {
49
51
  flags,
@@ -96,7 +98,8 @@ async function commandRun(ctx, flags, capabilities) {
96
98
  enforceChainCompatibility(capabilities, flags, runMode);
97
99
  const managedPreflight =
98
100
  (await applyHyperliquidAgentWalletAddressDefault(ctx, flags, resolved, runMode))
99
- || (await applyLighterAgentWalletAddressDefault(ctx, flags, resolved, runMode));
101
+ || (await applyLighterAgentWalletAddressDefault(ctx, flags, resolved, runMode))
102
+ || (await applyAvantisAgentWalletAddressDefault(ctx, flags, resolved, runMode));
100
103
  const skipPreflight = Boolean(flags.skipPreflight);
101
104
  const backendResult = await runExecutionByMode(runMode, ctx, flags, resolved, {
102
105
  skipPreflight,
@@ -1,6 +1,7 @@
1
1
  export { createPolymarketCommands, resolveConfigAgentKey } from './polymarket.mjs';
2
2
  export { createHyperliquidHelpers } from './hyperliquid.mjs';
3
3
  export { createLighterHelpers } from './lighter.mjs';
4
+ export { createAvantisHelpers } from './avantis.mjs';
4
5
  export { createHummingbotCommands } from './hummingbot.mjs';
5
6
  export { createCondorCommands } from './condor.mjs';
6
7
  export { createExecuteCommands } from './execute.mjs';
@@ -1,13 +1,13 @@
1
1
  import { apiGet, apiPost } from '../core/http.mjs';
2
2
  import { loadProfileConfig } from '../core/context.mjs';
3
3
 
4
- const VENUES = new Set(['polymarket', 'hyperliquid', 'lighter']);
4
+ const VENUES = new Set(['polymarket', 'hyperliquid', 'lighter', 'avantis']);
5
5
 
6
6
  function resolveVenue(flags) {
7
7
  const fromQuery = Array.isArray(flags.query) ? flags.query[0] : flags.query;
8
8
  const venue = String(flags.venue || fromQuery || '').trim().toLowerCase();
9
9
  if (!VENUES.has(venue)) {
10
- throw new Error(`Unsupported venue "${venue}". Use polymarket, hyperliquid, or lighter.`);
10
+ throw new Error(`Unsupported venue "${venue}". Use polymarket, hyperliquid, lighter, or avantis.`);
11
11
  }
12
12
  return venue;
13
13
  }
@@ -11,6 +11,7 @@ export function createWalletCommands(deps) {
11
11
  enforceChainCompatibility,
12
12
  applyHyperliquidAgentWalletAddressDefault,
13
13
  applyLighterAgentWalletAddressDefault,
14
+ applyAvantisAgentWalletAddressDefault,
14
15
  executeManagedWalletRun,
15
16
  executeSelfRun,
16
17
  submitSignedTx,
@@ -26,7 +27,8 @@ async function commandWalletExecute(ctx, flags, capabilities) {
26
27
  enforceChainCompatibility(capabilities, normalizedFlags, 'agent_wallet');
27
28
  const managedPreflight =
28
29
  (await applyHyperliquidAgentWalletAddressDefault(ctx, normalizedFlags, resolved, 'agent_wallet'))
29
- || (await applyLighterAgentWalletAddressDefault(ctx, normalizedFlags, resolved, 'agent_wallet'));
30
+ || (await applyLighterAgentWalletAddressDefault(ctx, normalizedFlags, resolved, 'agent_wallet'))
31
+ || (await applyAvantisAgentWalletAddressDefault(ctx, normalizedFlags, resolved, 'agent_wallet'));
30
32
  const skipPreflight = Boolean(normalizedFlags.skipPreflight);
31
33
  const result = await executeManagedWalletRun(ctx, normalizedFlags, resolved, { skipPreflight, managedPreflight });
32
34
  printEnvelope({
@@ -1,6 +1,7 @@
1
1
  import { DEFAULT_TIMEOUT_MS } from './constants.mjs';
2
2
 
3
3
  const LONG_RUNNING_ACTIONS = new Set([
4
+ 'complete_avantis_onboarding',
4
5
  'complete_lighter_onboarding',
5
6
  'setup_lighter_api_key',
6
7
  'register_lighter_api_key',
@@ -182,6 +182,8 @@ function inferActionProvider(action) {
182
182
  if (knownMap[key]) return knownMap[key];
183
183
  if (key.includes('hyperliquid')) return 'hyperliquid';
184
184
  if (key.includes('lighter')) return 'lighter';
185
+ if (key.includes('avantis') && key.includes('vault')) return 'avantis-vault';
186
+ if (key.includes('avantis')) return 'avantis';
185
187
  if (key.includes('bitfinex')) return 'bitfinex';
186
188
  if (key.includes('polymarket') || key.includes('prediction')) return 'polymarket';
187
189
  if (key.includes('vaults-fyi')) return 'vaults-fyi';
@@ -257,6 +259,9 @@ function actionMatchesProvider(action, requestedProvider, allActions) {
257
259
  // Here resolved metadata already disagrees with the filter; fall back to action-key shape only.
258
260
  if (requestedProvider === 'hyperliquid') return isProviderActionKey(action, 'hyperliquid');
259
261
  if (requestedProvider === 'lighter') return isProviderActionKey(action, 'lighter');
262
+ if (requestedProvider === 'avantis') {
263
+ return isProviderActionKey(action, 'avantis') && !actionKey.includes('vault');
264
+ }
260
265
  if (requestedProvider === 'polymarket') return isProviderActionKey(action, 'polymarket');
261
266
  if (requestedProvider === 'bridge') {
262
267
  // Hyperliquid Bridge2 and Lighter CCTP setup actions are owned by their perps providers, not cross-chain bridge.
@@ -182,6 +182,74 @@ export const VENUE_WRITE_ACTION_FIXTURES = [
182
182
  },
183
183
  validSample: { orderId: '0xabc' },
184
184
  },
185
+ {
186
+ action: 'place_avantis_perps_order',
187
+ aliases: ['place-avantis-perps-order'],
188
+ provider: 'avantis',
189
+ authorityInputs: ['agentApiKey', 'estimatedAmountUsd'],
190
+ paramsSchema: {
191
+ type: 'object',
192
+ additionalProperties: false,
193
+ required: ['pairIndex', 'side', 'collateralUsdc', 'leverage'],
194
+ properties: {
195
+ pairIndex: { type: 'integer', minimum: 0 },
196
+ pair: { type: 'string', minLength: 1 },
197
+ side: { type: 'string', enum: ['long', 'short'] },
198
+ orderType: { type: 'string', enum: ['market', 'limit'] },
199
+ collateralUsdc: { type: 'number', minimum: 0 },
200
+ leverage: { type: 'number', minimum: 0 },
201
+ limitPrice: { type: 'number', minimum: 0 },
202
+ slippagePercent: { type: 'number', minimum: 0, maximum: 100 },
203
+ executionMode: { type: 'string', enum: ['relayer', 'direct'] },
204
+ confirmWrites: { type: 'boolean' },
205
+ },
206
+ },
207
+ validSample: {
208
+ pairIndex: 0,
209
+ side: 'long',
210
+ collateralUsdc: 10,
211
+ leverage: 10,
212
+ orderType: 'market',
213
+ },
214
+ },
215
+ {
216
+ action: 'cancel_avantis_perps_order',
217
+ aliases: ['cancel-avantis-perps-order'],
218
+ provider: 'avantis',
219
+ authorityInputs: ['agentApiKey'],
220
+ paramsSchema: {
221
+ type: 'object',
222
+ additionalProperties: false,
223
+ required: ['pairIndex', 'orderIndex'],
224
+ properties: {
225
+ pairIndex: { type: 'integer', minimum: 0 },
226
+ orderIndex: { type: 'integer', minimum: 0 },
227
+ executionMode: { type: 'string', enum: ['relayer', 'direct'] },
228
+ confirmWrites: { type: 'boolean' },
229
+ },
230
+ },
231
+ validSample: { pairIndex: 0, orderIndex: 1 },
232
+ },
233
+ {
234
+ action: 'close_avantis_position',
235
+ aliases: ['close-avantis-position'],
236
+ provider: 'avantis',
237
+ authorityInputs: ['agentApiKey', 'estimatedAmountUsd'],
238
+ paramsSchema: {
239
+ type: 'object',
240
+ additionalProperties: false,
241
+ required: ['pairIndex', 'tradeIndex'],
242
+ properties: {
243
+ pairIndex: { type: 'integer', minimum: 0 },
244
+ tradeIndex: { type: 'integer', minimum: 0 },
245
+ collateralToCloseUsdc: { type: 'number', minimum: 0 },
246
+ slippagePercent: { type: 'number', minimum: 0, maximum: 100 },
247
+ executionMode: { type: 'string', enum: ['relayer', 'direct'] },
248
+ confirmWrites: { type: 'boolean' },
249
+ },
250
+ },
251
+ validSample: { pairIndex: 0, tradeIndex: 0 },
252
+ },
185
253
  ];
186
254
 
187
255
  export function fixtureCatalogActions() {
@@ -27,13 +27,39 @@ const OFFCHAIN_VENUE_ORDER_ACTIONS = new Set([
27
27
  'condor-executor-create',
28
28
  'condor_executor_stop',
29
29
  'condor-executor-stop',
30
+ 'place_avantis_perps_order',
31
+ 'place-avantis-perps-order',
32
+ 'cancel_avantis_perps_order',
33
+ 'cancel-avantis-perps-order',
34
+ 'close_avantis_position',
35
+ 'close-avantis-position',
36
+ 'update_avantis_tp_sl',
37
+ 'update-avantis-tp-sl',
38
+ 'cancel_avantis_tp_sl',
39
+ 'cancel-avantis-tp-sl',
40
+ 'place_avantis_twap_order',
41
+ 'place-avantis-twap-order',
42
+ 'close_avantis_twap_order',
43
+ 'close-avantis-twap-order',
44
+ 'cancel_avantis_twap_order',
45
+ 'cancel-avantis-twap-order',
46
+ 'place_avantis_coin_perps_order',
47
+ 'place-avantis-coin-perps-order',
48
+ 'increase_avantis_coin_position',
49
+ 'increase-avantis-coin-position',
50
+ 'close_avantis_coin_position',
51
+ 'close-avantis-coin-position',
52
+ 'place_avantis_mm_order',
53
+ 'place-avantis-mm-order',
54
+ 'cancel_avantis_mm_order',
55
+ 'cancel-avantis-mm-order',
30
56
  ]);
31
57
  function enforceOffchainVenueLaneCompatibility(action, runMode) {
32
58
  const normalizedAction = String(action || '').trim().toLowerCase();
33
59
  if (runMode !== 'self' || !OFFCHAIN_VENUE_ORDER_ACTIONS.has(normalizedAction)) return;
34
60
  throw createCliError(
35
61
  'OFFCHAIN_VENUE_ORDER_SELF_UNSUPPORTED',
36
- 'Polymarket CLOB, Hyperliquid perps, Lighter perps, Hummingbot executor, and Condor executor actions are offchain signed API actions, not EVM build-tx actions. Use self for setup/funding signatures, then run venue orders with --run-mode thirdfy, --run-mode hybrid, or --run-mode agent_wallet.',
62
+ 'Polymarket CLOB, Hyperliquid perps, Lighter perps, Avantis perps, Hummingbot executor, and Condor executor actions are offchain signed API actions, not EVM build-tx actions. Use self for setup/funding signatures, then run venue orders with --run-mode thirdfy, --run-mode hybrid, or --run-mode agent_wallet.',
37
63
  {
38
64
  recommendedRunModes: ['thirdfy', 'hybrid', 'agent_wallet'],
39
65
  setupOnlyRunMode: 'self',
@@ -4,6 +4,7 @@ import { createHummingbotCommands } from '../commands/hummingbot.mjs';
4
4
  import { createCondorCommands } from '../commands/condor.mjs';
5
5
  import { createHyperliquidHelpers } from '../commands/hyperliquid.mjs';
6
6
  import { createLighterHelpers } from '../commands/lighter.mjs';
7
+ import { createAvantisHelpers } from '../commands/avantis.mjs';
7
8
  import { createExecuteCommands } from '../commands/execute.mjs';
8
9
  import { createWalletCommands } from '../commands/wallet.mjs';
9
10
  import { createDelegationCommands } from '../commands/delegation.mjs';
@@ -126,6 +127,12 @@ export function createRuntimeHandlers(deps) {
126
127
  });
127
128
  const { applyLighterAgentWalletAddressDefault } = __lighter;
128
129
 
130
+ const __avantis = createAvantisHelpers({
131
+ getPreparedParams,
132
+ resolveManagedExecutionPreflight,
133
+ });
134
+ const { applyAvantisAgentWalletAddressDefault } = __avantis;
135
+
129
136
  const __wallet = createWalletCommands({
130
137
  resolveActionSelection,
131
138
  prepareActionParamsForFlags,
@@ -134,6 +141,7 @@ export function createRuntimeHandlers(deps) {
134
141
  enforceChainCompatibility,
135
142
  applyHyperliquidAgentWalletAddressDefault,
136
143
  applyLighterAgentWalletAddressDefault,
144
+ applyAvantisAgentWalletAddressDefault,
137
145
  executeManagedWalletRun,
138
146
  executeSelfRun,
139
147
  submitSignedTx,
@@ -148,6 +156,7 @@ export function createRuntimeHandlers(deps) {
148
156
  enforceChainCompatibility,
149
157
  applyHyperliquidAgentWalletAddressDefault,
150
158
  applyLighterAgentWalletAddressDefault,
159
+ applyAvantisAgentWalletAddressDefault,
151
160
  runPreflightByMode,
152
161
  runExecutionByMode,
153
162
  applyExecutionFallbackHints,
@@ -196,6 +196,114 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
196
196
  'thirdfy-agent actions --provider lighter && thirdfy-agent preflight --action place_lighter_perps_order --params \'{"accountIndex":1,"apiKeyIndex":4,"marketId":0,"baseAmount":100,"price":310000,"isAsk":false,"orderType":"limit"}\'',
197
197
  };
198
198
  }
199
+ if (provider === 'avantis') {
200
+ return {
201
+ provider,
202
+ category: 'leveraged_perps',
203
+ canonicalWriteAction: 'place_avantis_perps_order',
204
+ readActions: [
205
+ 'get_avantis_markets',
206
+ 'get_avantis_pair',
207
+ 'get_avantis_price',
208
+ 'get_avantis_spread',
209
+ 'get_avantis_positions',
210
+ 'get_avantis_open_orders',
211
+ 'get_avantis_allowance',
212
+ 'get_avantis_delegation_status',
213
+ 'get_avantis_funding_status',
214
+ 'get_avantis_setup_status',
215
+ 'get_avantis_onboarding_plan',
216
+ 'get_avantis_builder_fee_status',
217
+ 'get_avantis_referral_status',
218
+ 'get_avantis_referral_stats',
219
+ ],
220
+ orderManagementActions: [
221
+ 'place_avantis_perps_order',
222
+ 'cancel_avantis_perps_order',
223
+ 'close_avantis_position',
224
+ 'update_avantis_tp_sl',
225
+ 'cancel_avantis_tp_sl',
226
+ 'place_avantis_twap_order',
227
+ 'close_avantis_twap_order',
228
+ 'cancel_avantis_twap_order',
229
+ 'place_avantis_coin_perps_order',
230
+ 'increase_avantis_coin_position',
231
+ 'close_avantis_coin_position',
232
+ 'place_avantis_mm_order',
233
+ 'cancel_avantis_mm_order',
234
+ 'get_avantis_open_orders',
235
+ 'get_avantis_positions',
236
+ ],
237
+ setupActions: [
238
+ 'get_avantis_funding_status',
239
+ 'get_avantis_setup_status',
240
+ 'get_avantis_onboarding_plan',
241
+ 'prepare_avantis_onboarding',
242
+ 'complete_avantis_onboarding',
243
+ 'approve_avantis_builder_fee',
244
+ 'revoke_avantis_builder_fee',
245
+ 'set_avantis_referral_code',
246
+ 'register_avantis_referral_code',
247
+ 'claim_avantis_referral_rebate',
248
+ ],
249
+ statusActions: [
250
+ 'get_avantis_funding_status',
251
+ 'get_avantis_setup_status',
252
+ 'get_avantis_builder_fee_status',
253
+ 'get_avantis_delegation_status',
254
+ ],
255
+ recoveryActions: [
256
+ 'get_avantis_positions',
257
+ 'close_avantis_position',
258
+ ],
259
+ decommissionExample:
260
+ 'get_avantis_positions -> close_avantis_position -> withdraw-to-user on execution wallet (Base USDC)',
261
+ credentialType: 'avantis_delegate',
262
+ credentialUx:
263
+ 'Thirdfy mints and stores the encrypted Avantis delegate. CLI callers use Thirdfy auth only. Do not paste a private key.',
264
+ recommendedFundingChainId: 8453,
265
+ supportedFundingSourceChains: [
266
+ { chainId: 8453, name: 'Base', path: 'native USDC in managed execution wallet (recommended)' },
267
+ ],
268
+ setupBlockers: [
269
+ 'AVANTIS_USDC_BALANCE_REQUIRED',
270
+ 'AVANTIS_USDC_ALLOWANCE_REQUIRED',
271
+ 'AVANTIS_DELEGATION_REQUIRED',
272
+ 'AVANTIS_DELEGATE_CREDENTIAL_REQUIRED',
273
+ ],
274
+ setupWarnings: ['AVANTIS_BUILDER_TEMPLATE_UNWIRED'],
275
+ supportedChains: [8453],
276
+ funding:
277
+ 'Fund the managed execution wallet on Base (8453) with native USDC. Minimum collateral follows the live catalog notional floor.',
278
+ laneCompatibility:
279
+ 'Use agent_wallet for solo managed-wallet onboarding and perps writes after avantis_delegate credential is stored. Use thirdfy or hybrid for delegated capital. Thirdfy builds EIP-712 intents; the delegate credential signs batched-market submissions. Relayer is default. Builder-fee collection stays unwired until Avantis supplies a fee-enabled template.',
280
+ setupExample:
281
+ 'actions --provider avantis -> get_avantis_funding_status -> complete_avantis_onboarding (agent_wallet on Base 8453) -> get_avantis_setup_status before place_avantis_perps_order. Do not call approve_avantis_builder_fee until setup status shows a wired template.',
282
+ example:
283
+ 'thirdfy-agent actions --provider avantis && thirdfy-agent preflight --action place_avantis_perps_order --params \'{"pairIndex":0,"side":"long","collateralUsdc":10,"leverage":10,"orderType":"market"}\'',
284
+ };
285
+ }
286
+ if (provider === 'avantis-vault') {
287
+ return {
288
+ provider,
289
+ category: 'earn',
290
+ canonicalReadAction: 'get_avantis_vault_info',
291
+ canonicalWriteAction: 'deposit_avantis_vault',
292
+ readActions: ['get_avantis_vault_info', 'get_avantis_vault_position'],
293
+ orderManagementActions: [
294
+ 'deposit_avantis_vault',
295
+ 'request_avantis_vault_withdrawal',
296
+ 'redeem_avantis_vault',
297
+ 'claim_avantis_vault',
298
+ ],
299
+ recommendedFundingChainId: 8453,
300
+ supportedChains: [8453],
301
+ funding: 'Fund the managed execution wallet on Base with native USDC before vault deposit.',
302
+ laneCompatibility: 'Avantis LP vault on Base. Use agent_wallet, thirdfy, or hybrid. Relayer is default.',
303
+ example:
304
+ 'thirdfy-agent actions --provider avantis-vault && thirdfy-agent run --action get_avantis_vault_info --provider avantis-vault --json',
305
+ };
306
+ }
199
307
  if (provider === 'bitfinex') {
200
308
  return {
201
309
  provider,
@@ -612,7 +720,7 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
612
720
  ],
613
721
  supportedChains: [8453, 1, 4663],
614
722
  laneCompatibility:
615
- 'basedbid launchpad. Discovery is read-only. LBP and flash create are write-enabled on 8453, 1, and 4663. Buy and sell are write-enabled on 8453. Board, fee claim, and hook writes stay fail-closed. Console uses the existing preview-then-confirm path. No extra venue credential.',
723
+ 'basedbid launchpad. Discovery is read-only. LBP and flash create, buy, and sell are write-enabled on 8453, 1, and 4663. Buy spends native ETH on the target chain. Board, fee claim, and hook writes stay fail-closed. Console uses the existing preview-then-confirm path. No extra venue credential.',
616
724
  example:
617
725
  'thirdfy-agent run --action basedbid_get_tokens --params \'{"chainId":8453,"limit":10}\' --provider basedbid --json',
618
726
  };