@thirdfy/agent-cli 0.2.63 → 0.2.65
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 +16 -0
- package/README.md +2 -4
- package/package.json +1 -1
- package/src/runtime/providerHints.mjs +42 -0
- package/src/runtime/validation/paramsSchema.mjs +17 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,22 @@ All notable changes to `@thirdfy/agent-cli` are documented here. The format is b
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.2.65] - 2026-09-15
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Bermuda provider hints (`providerId: bermuda`) for the Base Sepolia lab rail: `get_bermuda_setup_status`, `get_bermuda_balance`, `bermuda_deposit`, `bermuda_transfer`, `bermuda_withdraw`, `bermuda_stealth_earn`. Catalog is flag-gated on the Thirdfy API host. See [`docs/providers/bermuda.md`](./docs/providers/bermuda.md). Pairs with `thirdfy-mcp` **0.0.115** and Thirdfy API **3.14.39**.
|
|
12
|
+
|
|
13
|
+
## [0.2.64] - 2026-09-10
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- Fomo API provider (`providerId: fomo`): read-only `get_fomo_search`, `get_fomo_user`, `get_fomo_balances`, `get_fomo_leaderboard`, `get_fomo_alerts`. Unofficial [fomoapi.io](https://fomoapi.io/docs) integration, not the Fomo consumer app. See [`docs/providers/fomo.md`](./docs/providers/fomo.md). Pairs with `thirdfy-mcp` **0.0.114** and Thirdfy API **3.14.33**.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- Catalog `paramsSchema` coerces finite numbers on `amount*` keys to strings when the schema type is string (`amountUsdc: 29.24` → `"29.24"`). `orderId` numbers still fail. Pairs with `thirdfy-mcp` **0.0.114**. Pin: `test/params-schema-validation.test.cjs`.
|
|
22
|
+
|
|
7
23
|
## [0.2.63] - 2026-09-09
|
|
8
24
|
|
|
9
25
|
### Changed
|
package/README.md
CHANGED
|
@@ -40,11 +40,9 @@ 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.65
|
|
44
44
|
|
|
45
|
-
-
|
|
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.
|
|
45
|
+
- Bermuda (`providerId: bermuda`) Base Sepolia lab hints: `get_bermuda_setup_status`, `get_bermuda_balance`, `bermuda_deposit`, `bermuda_transfer`, `bermuda_withdraw`, `bermuda_stealth_earn`. Catalog is flag-gated on the API host. See [`docs/providers/bermuda.md`](./docs/providers/bermuda.md).
|
|
48
46
|
- See [CHANGELOG.md](./CHANGELOG.md) and GitHub Releases for older versions.
|
|
49
47
|
|
|
50
48
|
## Quick start
|
package/package.json
CHANGED
|
@@ -707,6 +707,25 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
707
707
|
'thirdfy-agent condor policy-status && thirdfy-agent condor preflight --estimated-amount-usd 25 --idempotency-key <key>',
|
|
708
708
|
};
|
|
709
709
|
}
|
|
710
|
+
if (provider === 'fomo') {
|
|
711
|
+
return {
|
|
712
|
+
provider,
|
|
713
|
+
category: 'smart_money_intel',
|
|
714
|
+
canonicalReadAction: 'get_fomo_alerts',
|
|
715
|
+
readActions: [
|
|
716
|
+
'get_fomo_search',
|
|
717
|
+
'get_fomo_user',
|
|
718
|
+
'get_fomo_balances',
|
|
719
|
+
'get_fomo_leaderboard',
|
|
720
|
+
'get_fomo_alerts',
|
|
721
|
+
],
|
|
722
|
+
supportedChains: [],
|
|
723
|
+
laneCompatibility:
|
|
724
|
+
'Fomo API (fomoapi.io) uses string chain slugs (robinhood, solana, base, bsc, eth), not numeric chainId. Unofficial integration; not the Fomo consumer app. Read-only handle intel and app alerts via Thirdfy API. Resolve handles before storing watchlists. Pace calls (~1 req/s).',
|
|
725
|
+
example:
|
|
726
|
+
'thirdfy-agent run --action get_fomo_alerts --params \'{"chain":"robinhood","type":"buy","limit":5}\' --provider fomo --json',
|
|
727
|
+
};
|
|
728
|
+
}
|
|
710
729
|
if (provider === 'gmgn') {
|
|
711
730
|
return {
|
|
712
731
|
provider,
|
|
@@ -759,6 +778,26 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
759
778
|
'thirdfy-agent run --action basedbid_get_tokens --params \'{"chainId":8453,"limit":10}\' --provider basedbid --json',
|
|
760
779
|
};
|
|
761
780
|
}
|
|
781
|
+
if (provider === 'bermuda') {
|
|
782
|
+
return {
|
|
783
|
+
provider,
|
|
784
|
+
category: 'internal',
|
|
785
|
+
canonicalReadAction: 'get_bermuda_setup_status',
|
|
786
|
+
canonicalWriteAction: 'bermuda_deposit',
|
|
787
|
+
readActions: ['get_bermuda_setup_status', 'get_bermuda_balance'],
|
|
788
|
+
orderManagementActions: [
|
|
789
|
+
'bermuda_deposit',
|
|
790
|
+
'bermuda_transfer',
|
|
791
|
+
'bermuda_withdraw',
|
|
792
|
+
'bermuda_stealth_earn',
|
|
793
|
+
],
|
|
794
|
+
supportedChains: [84532],
|
|
795
|
+
laneCompatibility:
|
|
796
|
+
'Base Sepolia shielded USDC lab rail. Catalog is flag-gated on the API host. Deposit is Privy-direct from the execution wallet. Transfer, withdraw, and stealth earn use the Bermuda relayer. Max write size is capped at 5 USD in catalog policy.',
|
|
797
|
+
example:
|
|
798
|
+
'thirdfy-agent run --action get_bermuda_setup_status --params \'{"chainId":84532}\' --provider bermuda --json',
|
|
799
|
+
};
|
|
800
|
+
}
|
|
762
801
|
if (provider === 'nansen') {
|
|
763
802
|
return {
|
|
764
803
|
provider,
|
|
@@ -852,6 +891,7 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
852
891
|
aave: 'deposit_earn_position',
|
|
853
892
|
aegis: 'deposit_aegis_lender',
|
|
854
893
|
basedbid: 'basedbid_create_lbp',
|
|
894
|
+
bermuda: 'bermuda_deposit',
|
|
855
895
|
curve: 'deposit_earn_position',
|
|
856
896
|
uniswap: 'mint_uniswap_position',
|
|
857
897
|
ratehopper: 'setup_ratehopper_cash_lp',
|
|
@@ -869,9 +909,11 @@ export function createProviderHints({ getNegotiatedCapabilitiesCache }) {
|
|
|
869
909
|
'vaults-fyi': 'get-vaults-fyi-vaults',
|
|
870
910
|
'yield-xyz': 'get_yield_xyz_opportunities',
|
|
871
911
|
'market-data': 'get_trending_tokens',
|
|
912
|
+
fomo: 'get_fomo_alerts',
|
|
872
913
|
gmgn: 'get_gmgn_kol_trades',
|
|
873
914
|
nansen: 'get_nansen_perp_screener',
|
|
874
915
|
basedbid: 'basedbid_get_tokens',
|
|
916
|
+
bermuda: 'get_bermuda_setup_status',
|
|
875
917
|
cmc: 'get_cmc_quotes',
|
|
876
918
|
prediction: 'get_prediction_markets',
|
|
877
919
|
};
|
|
@@ -44,12 +44,29 @@ function extractFieldFromError(message) {
|
|
|
44
44
|
return null;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/** Coerce JSON numbers on amount* keys when the catalog schema type is string. Do not coerce orderId. */
|
|
48
|
+
export function coerceAmountKeysToSchemaStrings(params, schema) {
|
|
49
|
+
const next = params && typeof params === 'object' ? params : {};
|
|
50
|
+
const properties = schema?.properties;
|
|
51
|
+
if (!properties || typeof properties !== 'object') return next;
|
|
52
|
+
for (const [key, value] of Object.entries(next)) {
|
|
53
|
+
if (!/amount/i.test(key)) continue;
|
|
54
|
+
const rule = properties[key];
|
|
55
|
+
if (!rule || String(rule.type) !== 'string') continue;
|
|
56
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
57
|
+
next[key] = String(value);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return next;
|
|
61
|
+
}
|
|
62
|
+
|
|
47
63
|
/**
|
|
48
64
|
* Validate action params against catalog paramsSchema (JSON Schema subset used by Thirdfy API).
|
|
49
65
|
* Mirrors AgentExecutionService.validateParamsSchema for client-side fail-fast.
|
|
50
66
|
*/
|
|
51
67
|
export function validateParamsSchema(params, schema) {
|
|
52
68
|
if (!schema || typeof schema !== 'object') return { valid: true };
|
|
69
|
+
coerceAmountKeysToSchemaStrings(params, schema);
|
|
53
70
|
|
|
54
71
|
const required = Array.isArray(schema.required) ? schema.required.map((k) => String(k)) : [];
|
|
55
72
|
const properties =
|