@continuumdao/continuum-node-sdk 1.3.39 → 1.3.40
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/dist/agent-host-catalog.json +1246 -52
- package/dist/core/chart/ohlcv-session-store.d.ts +2 -0
- package/dist/core/chart/ohlcv-session-store.d.ts.map +1 -1
- package/dist/core/chart/ohlcv-session-store.js +58 -6
- package/dist/core/chart/ohlcv-session-store.js.map +1 -1
- package/dist/mcp/agent-chart-data-access-gate.d.ts +1 -1
- package/dist/mcp/agent-chart-data-access-gate.d.ts.map +1 -1
- package/dist/mcp/agent-chart-data-access-gate.js.map +1 -1
- package/dist/mcp/agent-cron-jobs.d.ts +1 -1
- package/dist/mcp/agent-cron-jobs.d.ts.map +1 -1
- package/dist/mcp/agent-cron-jobs.js +9 -0
- package/dist/mcp/agent-cron-jobs.js.map +1 -1
- package/dist/mcp/agent-environment-variables.d.ts +1 -1
- package/dist/mcp/agent-environment-variables.d.ts.map +1 -1
- package/dist/mcp/agent-environment-variables.js +3 -0
- package/dist/mcp/agent-environment-variables.js.map +1 -1
- package/dist/mcp/agent-host-catalog.d.ts +15 -2
- package/dist/mcp/agent-host-catalog.d.ts.map +1 -1
- package/dist/mcp/agent-host-catalog.js +52 -12
- package/dist/mcp/agent-host-catalog.js.map +1 -1
- package/dist/mcp/agent-input-coerce-register.d.ts +8 -0
- package/dist/mcp/agent-input-coerce-register.d.ts.map +1 -0
- package/dist/mcp/agent-input-coerce-register.js +22 -0
- package/dist/mcp/agent-input-coerce-register.js.map +1 -0
- package/dist/mcp/agent-input-coerce.d.ts +13 -0
- package/dist/mcp/agent-input-coerce.d.ts.map +1 -0
- package/dist/mcp/agent-input-coerce.js +286 -0
- package/dist/mcp/agent-input-coerce.js.map +1 -0
- package/dist/mcp/agent-mcp-servers.d.ts +1 -1
- package/dist/mcp/agent-mcp-servers.d.ts.map +1 -1
- package/dist/mcp/agent-mcp-servers.js +7 -0
- package/dist/mcp/agent-mcp-servers.js.map +1 -1
- package/dist/mcp/agent-skills.d.ts +1 -1
- package/dist/mcp/agent-skills.d.ts.map +1 -1
- package/dist/mcp/agent-skills.js +5 -0
- package/dist/mcp/agent-skills.js.map +1 -1
- package/dist/mcp/agent-webhooks.d.ts +1 -1
- package/dist/mcp/agent-webhooks.d.ts.map +1 -1
- package/dist/mcp/agent-webhooks.js +9 -0
- package/dist/mcp/agent-webhooks.js.map +1 -1
- package/dist/mcp/chart.d.ts +1 -1
- package/dist/mcp/chart.d.ts.map +1 -1
- package/dist/mcp/chart.js +38 -0
- package/dist/mcp/chart.js.map +1 -1
- package/dist/mcp/coinbase-public/register.d.ts +1 -1
- package/dist/mcp/coinbase-public/register.d.ts.map +1 -1
- package/dist/mcp/coinbase-public/register.js +6 -1
- package/dist/mcp/coinbase-public/register.js.map +1 -1
- package/dist/mcp/coinmarketcap-public/register.d.ts +1 -1
- package/dist/mcp/coinmarketcap-public/register.d.ts.map +1 -1
- package/dist/mcp/coinmarketcap-public/register.js +14 -1
- package/dist/mcp/coinmarketcap-public/register.js.map +1 -1
- package/dist/mcp/deferred/discovery-tools.d.ts +1 -1
- package/dist/mcp/deferred/discovery-tools.d.ts.map +1 -1
- package/dist/mcp/deferred/discovery-tools.js +57 -15
- package/dist/mcp/deferred/discovery-tools.js.map +1 -1
- package/dist/mcp/deferred/session.d.ts +15 -2
- package/dist/mcp/deferred/session.d.ts.map +1 -1
- package/dist/mcp/deferred/session.js +126 -78
- package/dist/mcp/deferred/session.js.map +1 -1
- package/dist/mcp/deferred/tool-group-map.d.ts +15 -2
- package/dist/mcp/deferred/tool-group-map.d.ts.map +1 -1
- package/dist/mcp/deferred/tool-group-map.js +546 -72
- package/dist/mcp/deferred/tool-group-map.js.map +1 -1
- package/dist/mcp/defi/bitquery-api-key.d.ts +1 -1
- package/dist/mcp/defi/bitquery-api-key.d.ts.map +1 -1
- package/dist/mcp/defi/discovery.d.ts +1 -1
- package/dist/mcp/defi/discovery.d.ts.map +1 -1
- package/dist/mcp/defi/discovery.js +15 -3
- package/dist/mcp/defi/discovery.js.map +1 -1
- package/dist/mcp/defi/handler.d.ts +13 -6
- package/dist/mcp/defi/handler.d.ts.map +1 -1
- package/dist/mcp/defi/mcp-json-schema.d.ts +23 -0
- package/dist/mcp/defi/mcp-json-schema.d.ts.map +1 -0
- package/dist/mcp/defi/mcp-json-schema.js +173 -0
- package/dist/mcp/defi/mcp-json-schema.js.map +1 -0
- package/dist/mcp/defi/register-protocol-tools.d.ts +1 -1
- package/dist/mcp/defi/register-protocol-tools.d.ts.map +1 -1
- package/dist/mcp/defi/register-protocol-tools.js +41 -4
- package/dist/mcp/defi/register-protocol-tools.js.map +1 -1
- package/dist/mcp/defi/the-graph-api-key.d.ts +1 -1
- package/dist/mcp/defi/the-graph-api-key.d.ts.map +1 -1
- package/dist/mcp/defi/tool-schemas.d.ts +4 -3
- package/dist/mcp/defi/tool-schemas.d.ts.map +1 -1
- package/dist/mcp/defi/tool-schemas.js +6 -4
- package/dist/mcp/defi/tool-schemas.js.map +1 -1
- package/dist/mcp/defi/uniswap-api-key.d.ts +1 -1
- package/dist/mcp/defi/uniswap-api-key.d.ts.map +1 -1
- package/dist/mcp/defi/venice-api-key.d.ts +1 -1
- package/dist/mcp/defi/venice-api-key.d.ts.map +1 -1
- package/dist/mcp/group.d.ts +1 -1
- package/dist/mcp/group.d.ts.map +1 -1
- package/dist/mcp/group.js +3 -3
- package/dist/mcp/group.js.map +1 -1
- package/dist/mcp/keygen-messaging.d.ts +1 -1
- package/dist/mcp/keygen-messaging.d.ts.map +1 -1
- package/dist/mcp/keygen-messaging.js +10 -0
- package/dist/mcp/keygen-messaging.js.map +1 -1
- package/dist/mcp/keygen.d.ts +1 -1
- package/dist/mcp/keygen.d.ts.map +1 -1
- package/dist/mcp/keygen.js +6 -3
- package/dist/mcp/keygen.js.map +1 -1
- package/dist/mcp/management-signer.d.ts +1 -1
- package/dist/mcp/management-signer.d.ts.map +1 -1
- package/dist/mcp/management-signer.js +1 -1
- package/dist/mcp/management-signer.js.map +1 -1
- package/dist/mcp/mcp-resources.d.ts +1 -1
- package/dist/mcp/mcp-resources.d.ts.map +1 -1
- package/dist/mcp/mpc.d.ts +1 -1
- package/dist/mcp/mpc.d.ts.map +1 -1
- package/dist/mcp/mpc.js +36 -5
- package/dist/mcp/mpc.js.map +1 -1
- package/dist/mcp/node.d.ts +1 -1
- package/dist/mcp/node.d.ts.map +1 -1
- package/dist/mcp/node.js +7 -1
- package/dist/mcp/node.js.map +1 -1
- package/dist/mcp/ohlcv-session-wrapper.d.ts +1 -2
- package/dist/mcp/ohlcv-session-wrapper.d.ts.map +1 -1
- package/dist/mcp/ohlcv-session-wrapper.js.map +1 -1
- package/dist/mcp/register.d.ts +1 -1
- package/dist/mcp/register.d.ts.map +1 -1
- package/dist/mcp/register.js +4 -6
- package/dist/mcp/register.js.map +1 -1
- package/dist/mcp/registry/address-book.d.ts +1 -1
- package/dist/mcp/registry/address-book.d.ts.map +1 -1
- package/dist/mcp/registry/address-book.js +1 -0
- package/dist/mcp/registry/address-book.js.map +1 -1
- package/dist/mcp/registry/networks.d.ts +1 -1
- package/dist/mcp/registry/networks.d.ts.map +1 -1
- package/dist/mcp/registry/networks.js +3 -1
- package/dist/mcp/registry/networks.js.map +1 -1
- package/dist/mcp/registry/tokens.d.ts +1 -1
- package/dist/mcp/registry/tokens.d.ts.map +1 -1
- package/dist/mcp/registry/tokens.js +2 -0
- package/dist/mcp/registry/tokens.js.map +1 -1
- package/dist/mcp/server/http-transport.d.ts +1 -1
- package/dist/mcp/server/http-transport.d.ts.map +1 -1
- package/dist/mcp/server/http-transport.js +30 -118
- package/dist/mcp/server/http-transport.js.map +1 -1
- package/dist/mcp/server/index.js +8 -1
- package/dist/mcp/server/index.js.map +1 -1
- package/dist/mcp/ta/register.d.ts +1 -1
- package/dist/mcp/ta/register.d.ts.map +1 -1
- package/dist/mcp/ta/register.js +3 -1
- package/dist/mcp/ta/register.js.map +1 -1
- package/dist/mcp/ta-server/index.js +3 -4
- package/dist/mcp/ta-server/index.js.map +1 -1
- package/dist/mcp/tool-utils.d.ts +1 -1
- package/dist/mcp/tool-utils.d.ts.map +1 -1
- package/dist/mcp/trade-tools.d.ts +1 -1
- package/dist/mcp/trade-tools.d.ts.map +1 -1
- package/dist/mcp/trade-tools.js +5 -0
- package/dist/mcp/trade-tools.js.map +1 -1
- package/dist/mcp/vpn.d.ts +1 -1
- package/dist/mcp/vpn.d.ts.map +1 -1
- package/dist/mcp/vpn.js +9 -1
- package/dist/mcp/vpn.js.map +1 -1
- package/package.json +7 -4
|
@@ -7,36 +7,192 @@ export const DEFAULT_PINNED_GROUPS = [
|
|
|
7
7
|
'node_info',
|
|
8
8
|
'management_signer',
|
|
9
9
|
'keygen',
|
|
10
|
-
'defi_discovery',
|
|
11
10
|
];
|
|
12
11
|
/** Bundles surfaced in list_tool_groups as easy chat entry points (not pinned at init). */
|
|
13
|
-
export const RECOMMENDED_CHAT_BUNDLES = ['chart'];
|
|
12
|
+
export const RECOMMENDED_CHAT_BUNDLES = ['chart:core', 'defi_discovery'];
|
|
13
|
+
/**
|
|
14
|
+
* Legacy / shorthand groupIds expanded by activate_tool_group and host LLM filter.
|
|
15
|
+
* `chart` → plot/fetch only (not full analyze/drawings/trade).
|
|
16
|
+
* `defi:<protocol>` (exactly two segments) → market-data pack only — handled in resolveActivateGroupIds.
|
|
17
|
+
*/
|
|
18
|
+
export const GROUP_ACTIVATE_ALIASES = {
|
|
19
|
+
chart: ['chart:core'],
|
|
20
|
+
};
|
|
14
21
|
/** Tags applied to all tools in a group for search_continuum_tools. */
|
|
15
22
|
export const GROUP_SEARCH_TAGS = {
|
|
16
|
-
|
|
23
|
+
discovery: [
|
|
24
|
+
'search tools',
|
|
25
|
+
'tool groups',
|
|
26
|
+
'activate bundle',
|
|
27
|
+
'load tools',
|
|
28
|
+
'discover tools',
|
|
29
|
+
'list bundles',
|
|
30
|
+
],
|
|
31
|
+
'chart:core': [
|
|
17
32
|
'chart',
|
|
18
33
|
'ohlcv',
|
|
19
34
|
'plot',
|
|
20
35
|
'graph',
|
|
21
36
|
'candlestick',
|
|
22
37
|
'candle',
|
|
38
|
+
'prepare chart',
|
|
39
|
+
'render chart',
|
|
40
|
+
'perp',
|
|
41
|
+
],
|
|
42
|
+
'chart:analyze': [
|
|
23
43
|
'analysis',
|
|
24
44
|
'analyze',
|
|
25
45
|
'trend',
|
|
26
|
-
'fibonacci',
|
|
27
|
-
'drawings',
|
|
28
|
-
'levels',
|
|
29
46
|
'momentum',
|
|
30
47
|
'pattern',
|
|
31
48
|
'elliott',
|
|
32
49
|
'wave',
|
|
33
|
-
'
|
|
50
|
+
'fibonacci',
|
|
51
|
+
'levels',
|
|
52
|
+
'indicator',
|
|
53
|
+
'ichimoku',
|
|
54
|
+
'bollinger',
|
|
55
|
+
'macd',
|
|
56
|
+
'obv',
|
|
57
|
+
'rsi',
|
|
58
|
+
'ema',
|
|
59
|
+
'sma',
|
|
60
|
+
'donchian',
|
|
61
|
+
'supertrend',
|
|
62
|
+
],
|
|
63
|
+
'chart:drawings': [
|
|
64
|
+
'drawings',
|
|
65
|
+
'overlay',
|
|
66
|
+
'apply drawings',
|
|
67
|
+
'pattern overlay',
|
|
68
|
+
'trend lines',
|
|
69
|
+
'key levels',
|
|
70
|
+
],
|
|
71
|
+
'chart:trade': [
|
|
34
72
|
'trade',
|
|
73
|
+
'trade ideas',
|
|
74
|
+
'build trade',
|
|
75
|
+
'multisign',
|
|
76
|
+
'consensus trade',
|
|
77
|
+
'tpsl',
|
|
78
|
+
],
|
|
79
|
+
node_info: [
|
|
80
|
+
'version',
|
|
81
|
+
'health',
|
|
82
|
+
'node health',
|
|
83
|
+
'status',
|
|
84
|
+
'connectivity',
|
|
85
|
+
'uptime',
|
|
86
|
+
'logs',
|
|
87
|
+
'machine',
|
|
88
|
+
'node id',
|
|
89
|
+
'peers',
|
|
90
|
+
],
|
|
91
|
+
management_signer: ['management', 'signer', 'ed25519', 'preferred signer', 'not keygen'],
|
|
92
|
+
group: [
|
|
93
|
+
'group',
|
|
94
|
+
'groups',
|
|
95
|
+
'group request',
|
|
96
|
+
'peers',
|
|
97
|
+
'formation',
|
|
98
|
+
'mpc group',
|
|
99
|
+
'create group',
|
|
100
|
+
'accept group',
|
|
101
|
+
'list groups',
|
|
102
|
+
'my groups',
|
|
103
|
+
],
|
|
104
|
+
keygen: [
|
|
105
|
+
'keygen',
|
|
106
|
+
'key gen',
|
|
107
|
+
'keygen request',
|
|
108
|
+
'key gen request',
|
|
109
|
+
'mpc key',
|
|
110
|
+
'generate key',
|
|
111
|
+
'preferred keygen',
|
|
112
|
+
'wallet key',
|
|
113
|
+
],
|
|
114
|
+
keygen_billing: ['billing', 'linea', 'mpa wallet', 'vpn billing', 'top up', 'overage', 'deposit'],
|
|
115
|
+
keygen_messaging: [
|
|
116
|
+
'message',
|
|
117
|
+
'messaging',
|
|
118
|
+
'thread',
|
|
119
|
+
'chat',
|
|
120
|
+
'attachment',
|
|
121
|
+
'inbox',
|
|
122
|
+
'keygen message',
|
|
123
|
+
'key gen message',
|
|
124
|
+
],
|
|
125
|
+
registry_chains: [
|
|
126
|
+
'chain',
|
|
127
|
+
'registry',
|
|
128
|
+
'rpc',
|
|
129
|
+
'gas config',
|
|
130
|
+
'evm chain',
|
|
131
|
+
'network',
|
|
132
|
+
'add chain',
|
|
133
|
+
'configure chain',
|
|
134
|
+
'blockchain',
|
|
135
|
+
// Brand names that are also EVM networks — prefer chain registry over DeFi load.
|
|
136
|
+
'hyperliquid',
|
|
137
|
+
'hyperevm',
|
|
138
|
+
'hyperliquid chain',
|
|
139
|
+
'hyperevm chain',
|
|
140
|
+
],
|
|
141
|
+
registry_address_book: ['address book', 'contact', 'contacts', 'saved address', 'known address'],
|
|
142
|
+
registry_tokens: ['token', 'tokens', 'token registry', 'saved token', 'erc20 registry'],
|
|
143
|
+
mpc_read: [
|
|
35
144
|
'multisign',
|
|
145
|
+
'multisign request',
|
|
146
|
+
'sign request',
|
|
147
|
+
'sign requests',
|
|
148
|
+
'status',
|
|
149
|
+
'pending',
|
|
150
|
+
'gas options',
|
|
151
|
+
'ready',
|
|
152
|
+
'sign transaction',
|
|
153
|
+
],
|
|
154
|
+
// Keep agree phrases on sign_request_agree tool tags — not bare "agree" group-wide.
|
|
155
|
+
mpc_agree: ['reject', 'shelve', 'sign request agree', 'multisign approve', 'join agree'],
|
|
156
|
+
mpc_execute: [
|
|
157
|
+
'broadcast',
|
|
158
|
+
'execute',
|
|
159
|
+
'trigger',
|
|
160
|
+
'get sig',
|
|
161
|
+
'bump',
|
|
162
|
+
'cancel',
|
|
163
|
+
'tx params',
|
|
164
|
+
'gas',
|
|
165
|
+
],
|
|
166
|
+
mpc_compose: [
|
|
167
|
+
'compose',
|
|
168
|
+
'forge',
|
|
169
|
+
'transfer',
|
|
170
|
+
'native gas',
|
|
171
|
+
'erc20',
|
|
172
|
+
'erc721',
|
|
173
|
+
'joined multisign',
|
|
36
174
|
'swap',
|
|
175
|
+
'send',
|
|
176
|
+
'transaction',
|
|
177
|
+
'create sign request',
|
|
178
|
+
'create multisign',
|
|
179
|
+
],
|
|
180
|
+
agent_config: ['environment variable', 'env var', 'agent config', 'secrets'],
|
|
181
|
+
agent_mcp_servers: ['mcp server', 'mcp catalog', 'add mcp', 'remove mcp', 'coinmarketcap', 'flags'],
|
|
182
|
+
agent_skills: [
|
|
183
|
+
'skill',
|
|
184
|
+
'skills',
|
|
185
|
+
'markdown guidance',
|
|
186
|
+
'agent skill',
|
|
187
|
+
'agent guidance',
|
|
188
|
+
'skill file',
|
|
189
|
+
'markdown skill',
|
|
37
190
|
],
|
|
38
|
-
|
|
39
|
-
|
|
191
|
+
agent_cron: ['cron', 'schedule', 'scheduled job', 'cron job', 'every n minutes'],
|
|
192
|
+
agent_webhooks: ['webhook', 'inbound webhook', 'automation trigger', 'webhook catalog'],
|
|
193
|
+
// No bare protocol brands here — they collide with chain names (e.g. Hyperliquid).
|
|
194
|
+
// Brands live on list_defi_protocols / load_defi_protocol tool tags only.
|
|
195
|
+
defi_discovery: ['defi', 'protocol', 'load protocol', 'list protocols', 'protocol tools'],
|
|
40
196
|
};
|
|
41
197
|
/** Tools visible at init when their group is pinned (subset of full group). */
|
|
42
198
|
export const PINNED_TOOL_NAMES = new Set([
|
|
@@ -68,24 +224,27 @@ export const GROUP_DESCRIPTIONS = {
|
|
|
68
224
|
discovery: 'Search and activate Continuum MCP tool bundles',
|
|
69
225
|
node_info: 'Node version, health, connectivity, logs, configured peers',
|
|
70
226
|
management_signer: 'Ed25519 management signer lifecycle and preferred signer',
|
|
71
|
-
group: 'MPC group
|
|
72
|
-
keygen: 'KeyGen
|
|
227
|
+
group: 'MPC group requests: create/list group requests and agree/accept pending group requests',
|
|
228
|
+
keygen: 'KeyGen requests: create/list keygen requests, agree/accept pending keygen, fetch results, preferred KeyGen',
|
|
73
229
|
keygen_billing: 'Linea MPA wallet, KeyGen/VPN billing multisign builders',
|
|
74
230
|
keygen_messaging: 'KeyGen message threads between nodes',
|
|
75
231
|
registry_chains: 'EVM chain registry (RPC, gas config)',
|
|
76
232
|
registry_address_book: 'Known address book',
|
|
77
233
|
registry_tokens: 'Saved token registry',
|
|
78
|
-
mpc_read: 'MultiSign list, get, status, gas options',
|
|
79
|
-
mpc_agree: '
|
|
80
|
-
mpc_execute: '
|
|
81
|
-
mpc_compose: '
|
|
234
|
+
mpc_read: 'MultiSign / sign requests: list, get, status, gas options',
|
|
235
|
+
mpc_agree: 'Agree to / reject / shelve a pending MultiSign (sign) request',
|
|
236
|
+
mpc_execute: 'Get Sig trigger, broadcast, bump/cancel, tx params',
|
|
237
|
+
mpc_compose: 'Create Multisign / sign requests: compose, forge, join batch, transfers',
|
|
82
238
|
agent_config: 'Agent environment variables',
|
|
83
239
|
agent_mcp_servers: 'Agent MCP server catalog and flags',
|
|
84
240
|
agent_skills: 'Agent skills (markdown guidance)',
|
|
85
241
|
agent_cron: 'Scheduled agent cron jobs',
|
|
86
242
|
agent_webhooks: 'Inbound webhooks for agent automation',
|
|
87
243
|
defi_discovery: 'List and load DeFi protocol tool bundles',
|
|
88
|
-
chart: 'OHLCV charts
|
|
244
|
+
'chart:core': 'Plot/prepare OHLCV charts (prepare_chart*) — activate chart:core; alias groupId "chart" expands here only',
|
|
245
|
+
'chart:analyze': 'Structured analyze_* OHLCV analysis (JSON, no chart render)',
|
|
246
|
+
'chart:drawings': 'calculate_* / apply_* drawing overlays on an existing chart',
|
|
247
|
+
'chart:trade': 'Trade ideas, build_trade_from_*, submit_trade_from_consensus, Uniswap TPSL monitor',
|
|
89
248
|
};
|
|
90
249
|
/** Static tool name → groupId on continuum main `/mcp` (DeFi protocol tools use defi:<protocolId> via metadata). */
|
|
91
250
|
export const TOOL_GROUP_BY_NAME = {
|
|
@@ -226,71 +385,386 @@ export const TOOL_GROUP_BY_NAME = {
|
|
|
226
385
|
search_continuum_tools: 'discovery',
|
|
227
386
|
activate_tool_group: 'discovery',
|
|
228
387
|
deactivate_tool_group: 'discovery',
|
|
229
|
-
// chart
|
|
230
|
-
prepare_chart_from_rows: 'chart',
|
|
231
|
-
prepare_chart: 'chart',
|
|
232
|
-
list_chart_analysis_options: 'chart',
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
analyze_divergence: 'chart',
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
calculate_key_levels: 'chart',
|
|
257
|
-
calculate_pivot_points: 'chart',
|
|
258
|
-
calculate_fibonacci_range: 'chart',
|
|
259
|
-
calculate_trend_lines: 'chart',
|
|
260
|
-
calculate_chart_pattern_drawings: 'chart',
|
|
261
|
-
calculate_elliott_wave_drawings: 'chart',
|
|
262
|
-
apply_chart_pattern_drawings: 'chart',
|
|
263
|
-
apply_elliott_wave_drawings: 'chart',
|
|
264
|
-
apply_trend_line_drawings: 'chart',
|
|
265
|
-
apply_key_level_drawings: 'chart',
|
|
266
|
-
apply_key_fib_drawings: 'chart',
|
|
267
|
-
apply_chart_drawings: 'chart',
|
|
268
|
-
list_trade_ideas: 'chart',
|
|
269
|
-
build_trade_from_trade_idea: 'chart',
|
|
270
|
-
build_trade_from_chart_pattern: 'chart',
|
|
271
|
-
build_trade_from_candlestick: 'chart',
|
|
272
|
-
build_trade_from_key_levels: 'chart',
|
|
273
|
-
build_trade_from_momentum: 'chart',
|
|
274
|
-
build_trade_from_divergence: 'chart',
|
|
275
|
-
evaluate_uniswap_tpsl_monitor: 'chart',
|
|
388
|
+
// chart packs (slim LLM exposure — do not use bare "chart" as a tool group)
|
|
389
|
+
prepare_chart_from_rows: 'chart:core',
|
|
390
|
+
prepare_chart: 'chart:core',
|
|
391
|
+
list_chart_analysis_options: 'chart:core',
|
|
392
|
+
list_chart_customization_options: 'chart:core',
|
|
393
|
+
analyze_trend_structure: 'chart:analyze',
|
|
394
|
+
analyze_elliott_waves: 'chart:analyze',
|
|
395
|
+
analyze_key_levels: 'chart:analyze',
|
|
396
|
+
analyze_key_level_fibonacci: 'chart:analyze',
|
|
397
|
+
analyze_momentum: 'chart:analyze',
|
|
398
|
+
analyze_liquidity_depth: 'chart:analyze',
|
|
399
|
+
analyze_divergence: 'chart:analyze',
|
|
400
|
+
analyze_range_volatility: 'chart:analyze',
|
|
401
|
+
analyze_bollinger_bands: 'chart:analyze',
|
|
402
|
+
analyze_donchian_breakout: 'chart:analyze',
|
|
403
|
+
analyze_supertrend: 'chart:analyze',
|
|
404
|
+
analyze_ichimoku: 'chart:analyze',
|
|
405
|
+
analyze_z_score: 'chart:analyze',
|
|
406
|
+
analyze_moving_averages: 'chart:analyze',
|
|
407
|
+
analyze_candlestick_patterns: 'chart:analyze',
|
|
408
|
+
analyze_chart_patterns: 'chart:analyze',
|
|
409
|
+
analyze_time_series_trend: 'chart:analyze',
|
|
410
|
+
analyze_time_series_momentum: 'chart:analyze',
|
|
411
|
+
analyze_time_series_stats: 'chart:analyze',
|
|
412
|
+
apply_liquidity_depth_drawings: 'chart:drawings',
|
|
413
|
+
calculate_divergence_drawings: 'chart:drawings',
|
|
414
|
+
apply_divergence_drawings: 'chart:drawings',
|
|
415
|
+
calculate_key_levels: 'chart:drawings',
|
|
416
|
+
calculate_pivot_points: 'chart:drawings',
|
|
417
|
+
calculate_fibonacci_range: 'chart:drawings',
|
|
418
|
+
calculate_trend_lines: 'chart:drawings',
|
|
419
|
+
calculate_chart_pattern_drawings: 'chart:drawings',
|
|
420
|
+
calculate_elliott_wave_drawings: 'chart:drawings',
|
|
421
|
+
apply_chart_pattern_drawings: 'chart:drawings',
|
|
422
|
+
apply_elliott_wave_drawings: 'chart:drawings',
|
|
423
|
+
apply_trend_line_drawings: 'chart:drawings',
|
|
424
|
+
apply_key_level_drawings: 'chart:drawings',
|
|
425
|
+
apply_key_fib_drawings: 'chart:drawings',
|
|
426
|
+
apply_chart_drawings: 'chart:drawings',
|
|
427
|
+
list_trade_ideas: 'chart:trade',
|
|
428
|
+
build_trade_from_trade_idea: 'chart:trade',
|
|
429
|
+
build_trade_from_chart_pattern: 'chart:trade',
|
|
430
|
+
build_trade_from_candlestick: 'chart:trade',
|
|
431
|
+
build_trade_from_key_levels: 'chart:trade',
|
|
432
|
+
build_trade_from_momentum: 'chart:trade',
|
|
433
|
+
build_trade_from_divergence: 'chart:trade',
|
|
434
|
+
evaluate_uniswap_tpsl_monitor: 'chart:trade',
|
|
276
435
|
register_uniswap_tpsl_monitor_cron: 'agent_cron',
|
|
277
|
-
submit_trade_from_consensus: 'chart',
|
|
436
|
+
submit_trade_from_consensus: 'chart:trade',
|
|
278
437
|
};
|
|
279
438
|
export const TOOL_SEARCH_TAGS = {
|
|
280
|
-
|
|
439
|
+
// discovery
|
|
440
|
+
search_continuum_tools: ['search tools', 'find tools', 'tool search', 'what tools'],
|
|
441
|
+
list_tool_groups: ['tool groups', 'list bundles', 'available bundles'],
|
|
442
|
+
activate_tool_group: ['activate bundle', 'load tools', 'enable group'],
|
|
443
|
+
deactivate_tool_group: ['deactivate bundle', 'unload tools', 'disable group'],
|
|
444
|
+
// preferred key / signer
|
|
445
|
+
get_preferred_key_gen: [
|
|
446
|
+
'keygen',
|
|
447
|
+
'key gen',
|
|
448
|
+
'preferred keygen',
|
|
449
|
+
'mpc key',
|
|
450
|
+
'default keygen',
|
|
451
|
+
'which keygen',
|
|
452
|
+
],
|
|
453
|
+
post_preferred_key_gen: ['set preferred keygen', 'preferred keygen', 'default keygen'],
|
|
281
454
|
get_preferred_management_signer: [
|
|
282
455
|
'management',
|
|
283
456
|
'ed25519',
|
|
284
457
|
'signer',
|
|
458
|
+
'preferred signer',
|
|
459
|
+
'not keygen',
|
|
460
|
+
],
|
|
461
|
+
set_preferred_management_signer: [
|
|
462
|
+
'preferred signer',
|
|
463
|
+
'set preferred signer',
|
|
464
|
+
'management signer',
|
|
285
465
|
'not keygen',
|
|
286
466
|
],
|
|
287
467
|
get_configured_node_keys: ['group', 'peers', 'configured', 'node keys'],
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
468
|
+
// node health / info
|
|
469
|
+
get_health: ['health', 'node health', 'status', 'is node ok', 'readiness'],
|
|
470
|
+
get_connectivity_health: ['connectivity', 'latency', 'peer health', 'ping'],
|
|
471
|
+
get_logs: ['logs', 'node logs', 'errors'],
|
|
472
|
+
node_id: ['node id', 'my node', 'public key'],
|
|
473
|
+
version: ['version', 'node version'],
|
|
474
|
+
get_machine_info: ['machine', 'cpu', 'memory', 'disk', 'vps'],
|
|
475
|
+
// chart entry + trade builds (multisign kept here, not on chart group)
|
|
476
|
+
prepare_chart: ['chart', 'plot', 'ohlcv', 'candlestick'],
|
|
477
|
+
prepare_chart_from_rows: ['chart', 'plot', 'ohlcv', 'candlestick'],
|
|
478
|
+
list_chart_analysis_options: ['chart', 'analysis', 'analysis options'],
|
|
479
|
+
list_chart_customization_options: ['chart', 'indicators', 'customization', 'overlays'],
|
|
480
|
+
list_trade_ideas: ['chart', 'trade', 'trade ideas'],
|
|
481
|
+
build_trade_from_trade_idea: ['chart', 'trade', 'multisign', 'build trade'],
|
|
482
|
+
build_trade_from_chart_pattern: ['chart', 'trade', 'multisign', 'chart pattern trade'],
|
|
483
|
+
build_trade_from_candlestick: ['chart', 'trade', 'multisign', 'candlestick trade'],
|
|
484
|
+
build_trade_from_key_levels: ['chart', 'trade', 'multisign', 'key levels trade'],
|
|
485
|
+
build_trade_from_momentum: ['chart', 'trade', 'multisign', 'momentum trade'],
|
|
486
|
+
build_trade_from_divergence: ['chart', 'trade', 'multisign', 'divergence trade'],
|
|
487
|
+
submit_trade_from_consensus: ['consensus trade', 'submit trade', 'cron trade'],
|
|
488
|
+
evaluate_uniswap_tpsl_monitor: [
|
|
489
|
+
'tpsl',
|
|
490
|
+
'take profit',
|
|
491
|
+
'stop loss',
|
|
492
|
+
'uniswap monitor',
|
|
493
|
+
],
|
|
494
|
+
// registries
|
|
495
|
+
get_chain_registry: ['chain', 'chains', 'rpc', 'gas', 'registry', 'hyperliquid', 'hyperevm'],
|
|
496
|
+
add_to_chain_registry: [
|
|
497
|
+
'chain',
|
|
498
|
+
'add chain',
|
|
499
|
+
'rpc',
|
|
500
|
+
'registry',
|
|
501
|
+
'configure chain',
|
|
502
|
+
'hyperliquid',
|
|
503
|
+
'hyperevm',
|
|
504
|
+
'hyperliquid chain',
|
|
505
|
+
],
|
|
506
|
+
remove_from_chain_registry: ['chain', 'remove chain', 'registry'],
|
|
507
|
+
get_address_book_registry: [
|
|
508
|
+
'address book',
|
|
509
|
+
'contacts',
|
|
510
|
+
'contact',
|
|
511
|
+
'saved address',
|
|
512
|
+
'saved contacts',
|
|
513
|
+
],
|
|
514
|
+
add_to_address_book_registry: ['address book', 'add contact', 'save address'],
|
|
515
|
+
remove_from_address_book_registry: ['address book', 'remove contact', 'delete address'],
|
|
516
|
+
get_token_registry: ['token', 'tokens', 'registry', 'saved token'],
|
|
517
|
+
add_to_token_registry: ['token', 'add token', 'registry'],
|
|
518
|
+
remove_from_token_registry: ['token', 'remove token', 'registry'],
|
|
519
|
+
// group requests (newGroupRequest / agree)
|
|
520
|
+
list_group_requests: [
|
|
521
|
+
'group',
|
|
522
|
+
'groups',
|
|
523
|
+
'group request',
|
|
524
|
+
'group requests',
|
|
525
|
+
'peers',
|
|
526
|
+
'pending group',
|
|
527
|
+
'list groups',
|
|
528
|
+
'list group requests',
|
|
529
|
+
],
|
|
530
|
+
list_group_results: ['group', 'groups', 'group result', 'formed group', 'list groups'],
|
|
531
|
+
create_group_request: [
|
|
532
|
+
'group',
|
|
533
|
+
'groups',
|
|
534
|
+
'group request',
|
|
535
|
+
'create group',
|
|
536
|
+
'form group',
|
|
537
|
+
'new group request',
|
|
538
|
+
'peers',
|
|
539
|
+
],
|
|
540
|
+
accept_group_request: [
|
|
541
|
+
'group',
|
|
542
|
+
'groups',
|
|
543
|
+
'accept group',
|
|
544
|
+
'join group',
|
|
545
|
+
'agree',
|
|
546
|
+
'agree to group',
|
|
547
|
+
'agree to group request',
|
|
548
|
+
'agree group request',
|
|
549
|
+
'accept group request',
|
|
550
|
+
],
|
|
551
|
+
// keygen requests
|
|
552
|
+
list_key_gen_requests: [
|
|
553
|
+
'keygen request',
|
|
554
|
+
'key gen request',
|
|
555
|
+
'keygen requests',
|
|
556
|
+
'list keygen',
|
|
557
|
+
'pending keygen',
|
|
558
|
+
],
|
|
559
|
+
create_key_gen_request: [
|
|
560
|
+
'keygen request',
|
|
561
|
+
'key gen request',
|
|
562
|
+
'create keygen',
|
|
563
|
+
'new keygen',
|
|
564
|
+
'generate key',
|
|
565
|
+
'start keygen',
|
|
566
|
+
],
|
|
567
|
+
accept_key_gen_request: [
|
|
568
|
+
'agree',
|
|
569
|
+
'agree to keygen',
|
|
570
|
+
'agree to key gen',
|
|
571
|
+
'agree to keygen request',
|
|
572
|
+
'agree to key gen request',
|
|
573
|
+
'accept keygen',
|
|
574
|
+
'accept key gen request',
|
|
575
|
+
'join keygen',
|
|
576
|
+
],
|
|
577
|
+
get_key_gen_request_by_id: ['keygen request', 'get keygen', 'key gen request'],
|
|
578
|
+
fetch_key_gen_result: [
|
|
579
|
+
'keygen result',
|
|
580
|
+
'ethereum address',
|
|
581
|
+
'executor address',
|
|
582
|
+
'wallet address',
|
|
583
|
+
],
|
|
584
|
+
// MultiSign / sign requests (read vs agree)
|
|
585
|
+
list_sign_requests: [
|
|
586
|
+
'sign request',
|
|
587
|
+
'sign requests',
|
|
588
|
+
'multisign request',
|
|
589
|
+
'multi sign request',
|
|
590
|
+
'list sign requests',
|
|
591
|
+
'pending sign',
|
|
592
|
+
'live sign',
|
|
593
|
+
],
|
|
594
|
+
list_sign_requests_awaiting_join: [
|
|
595
|
+
'sign request',
|
|
596
|
+
'awaiting join',
|
|
597
|
+
'join tab',
|
|
598
|
+
'pending agree',
|
|
599
|
+
'needs agreement',
|
|
600
|
+
'local agreement pending',
|
|
601
|
+
'agree pending',
|
|
602
|
+
],
|
|
603
|
+
get_sign_request_by_id: ['sign request', 'get sign request', 'sign request detail'],
|
|
604
|
+
get_sign_request_status: ['sign request status', 'lifecycle', 'ready to broadcast'],
|
|
605
|
+
list_sign_requests_ready: ['ready for get sig', 'quorum ready', 'ready to sign'],
|
|
606
|
+
get_sign_result_summary: ['sign result', 'ready to broadcast', 'get sig done'],
|
|
607
|
+
get_multi_sign_gas_options: ['gas options', 'custom gas', 'fee speed', 'get sig fee'],
|
|
608
|
+
wait_for_sign_request_ready: ['wait ready', 'poll sign ready'],
|
|
609
|
+
sign_request_agree: [
|
|
610
|
+
'agree',
|
|
611
|
+
'agree to sign',
|
|
612
|
+
'agree to sign request',
|
|
613
|
+
'agree to multisign',
|
|
614
|
+
'agree sign request',
|
|
615
|
+
'accept sign request',
|
|
616
|
+
'reject sign request',
|
|
617
|
+
'reject multisign',
|
|
618
|
+
'approve sign request',
|
|
619
|
+
'multisign approve',
|
|
620
|
+
'join agree',
|
|
621
|
+
],
|
|
622
|
+
shelve_sign_request: ['shelve', 'shelve sign request', 'pause sign request'],
|
|
623
|
+
// execute
|
|
624
|
+
trigger_sign_result: ['get sig', 'trigger sign', 'mpc signing', 'trigger get sig'],
|
|
625
|
+
broadcast_sign_result: ['broadcast', 'execute on chain', 'send transaction', 'execute sign'],
|
|
626
|
+
bump_or_cancel_sign_result: ['bump gas', 'cancel stuck', 'replace transaction'],
|
|
627
|
+
tx_params_from_get_sign_request_id_data: ['tx params', 'transaction params'],
|
|
628
|
+
// compose / transfers
|
|
629
|
+
transfer_native_gas: ['transfer', 'send eth', 'send gas', 'native transfer', 'top up gas'],
|
|
630
|
+
transfer_erc20: ['transfer', 'send token', 'send erc20', 'erc20 transfer'],
|
|
631
|
+
transfer_erc721: ['transfer', 'send nft', 'erc721', 'nft transfer'],
|
|
632
|
+
transfer_ctm_erc20: ['transfer', 'send ctm', 'ctm transfer'],
|
|
633
|
+
transfer_ctm_erc20_cross_chain: [
|
|
634
|
+
'transfer',
|
|
635
|
+
'bridge ctm',
|
|
636
|
+
'cross chain ctm',
|
|
637
|
+
'c3transfer',
|
|
638
|
+
],
|
|
639
|
+
create_compose_multi_sign_request: [
|
|
640
|
+
'compose',
|
|
641
|
+
'batch multisign',
|
|
642
|
+
'create multisign',
|
|
643
|
+
'create sign request',
|
|
644
|
+
'sign request',
|
|
645
|
+
],
|
|
646
|
+
create_forge_multi_sign_request: [
|
|
647
|
+
'forge',
|
|
648
|
+
'foundry',
|
|
649
|
+
'broadcast json',
|
|
650
|
+
'create multisign',
|
|
651
|
+
'create sign request',
|
|
652
|
+
],
|
|
653
|
+
create_joined_multi_sign_request: [
|
|
654
|
+
'join multisign',
|
|
655
|
+
'batch join',
|
|
656
|
+
'joined multisign',
|
|
657
|
+
'create sign request',
|
|
658
|
+
],
|
|
659
|
+
// defi discovery
|
|
660
|
+
list_defi_protocols: [
|
|
661
|
+
'defi',
|
|
662
|
+
'protocol',
|
|
663
|
+
'protocols',
|
|
664
|
+
'list protocols',
|
|
665
|
+
'available protocols',
|
|
666
|
+
'what protocols',
|
|
667
|
+
// Brands on list/load tools only (not group-wide).
|
|
668
|
+
'uniswap',
|
|
669
|
+
'aave',
|
|
670
|
+
'gmx',
|
|
671
|
+
'hyperliquid',
|
|
672
|
+
'arcus',
|
|
673
|
+
],
|
|
674
|
+
load_defi_protocol: [
|
|
675
|
+
'defi',
|
|
676
|
+
'protocol',
|
|
677
|
+
'load protocol',
|
|
678
|
+
'load defi',
|
|
679
|
+
'enable protocol',
|
|
680
|
+
'activate protocol',
|
|
681
|
+
'defi tools',
|
|
682
|
+
'uniswap',
|
|
683
|
+
'aave',
|
|
684
|
+
'gmx',
|
|
685
|
+
'hyperliquid',
|
|
686
|
+
'arcus',
|
|
687
|
+
],
|
|
688
|
+
unload_defi_protocol: ['defi', 'protocol', 'unload protocol'],
|
|
689
|
+
get_defi_protocol_skill: ['defi skill', 'protocol skill', 'skill md'],
|
|
690
|
+
get_defi_protocol_supported_chains: ['protocol chains', 'defi chains'],
|
|
691
|
+
get_defi_protocol_supported_tokens: ['protocol tokens', 'defi tokens'],
|
|
692
|
+
get_tools_for_protocol: ['protocol tools', 'defi tools list'],
|
|
693
|
+
// agent cron / skills / webhooks / config
|
|
694
|
+
list_cron_jobs: ['cron', 'scheduled jobs', 'list cron'],
|
|
695
|
+
add_cron_job: ['cron', 'schedule job', 'create cron', 'every n minutes'],
|
|
696
|
+
run_cron_job: ['run cron', 'trigger cron'],
|
|
697
|
+
update_cron_job: ['update cron', 'edit cron'],
|
|
698
|
+
activate_cron_job: ['activate cron', 'enable cron'],
|
|
699
|
+
deactivate_cron_job: ['deactivate cron', 'disable cron'],
|
|
700
|
+
list_skills: ['skills', 'agent skills', 'list skills'],
|
|
701
|
+
get_skill: ['skill', 'get skill', 'read skill'],
|
|
702
|
+
add_skill: ['add skill', 'create skill', 'skill markdown'],
|
|
703
|
+
remove_skill: ['remove skill', 'delete skill'],
|
|
704
|
+
list_webhooks: ['webhooks', 'inbound webhook', 'list webhooks'],
|
|
705
|
+
add_webhook: ['add webhook', 'create webhook'],
|
|
706
|
+
add_webhook_from_catalog: ['webhook catalog', 'catalog webhook'],
|
|
707
|
+
list_environment_variables: ['env var', 'environment variables', 'secrets'],
|
|
708
|
+
add_environment_variable: ['env var', 'add secret', 'set variable'],
|
|
709
|
+
remove_environment_variable: ['env var', 'remove secret'],
|
|
710
|
+
list_mcp_servers: ['mcp server', 'list mcp', 'mcp catalog'],
|
|
711
|
+
add_mcp_server: ['add mcp', 'mcp server'],
|
|
712
|
+
add_mcp_server_from_catalog: ['mcp catalog', 'catalog mcp'],
|
|
713
|
+
// keygen messaging
|
|
714
|
+
send_key_gen_message: ['keygen message', 'send message', 'message peers'],
|
|
715
|
+
list_key_gen_messages: ['keygen message', 'inbox', 'list messages'],
|
|
716
|
+
get_key_gen_message_thread: ['message thread', 'conversation'],
|
|
293
717
|
};
|
|
718
|
+
export function classifyDefiToolPack(toolName) {
|
|
719
|
+
const n = stripMcpToolServerPrefix(toolName).toLowerCase();
|
|
720
|
+
if ((n.includes('build_') && n.includes('multisign')) ||
|
|
721
|
+
n.includes('create_swap') ||
|
|
722
|
+
n.includes('_place_') ||
|
|
723
|
+
n.includes('cancel_order') ||
|
|
724
|
+
n.includes('_close_position') ||
|
|
725
|
+
n.includes('close_position')) {
|
|
726
|
+
return 'trading';
|
|
727
|
+
}
|
|
728
|
+
if (n.includes('fetch_ohlcv') ||
|
|
729
|
+
n.includes('fetch_markets') ||
|
|
730
|
+
n.includes('fetch_open_context') ||
|
|
731
|
+
n.includes('search_markets') ||
|
|
732
|
+
n.includes('market_snapshot') ||
|
|
733
|
+
n.includes('fetch_open_orders') ||
|
|
734
|
+
n.includes('fetch_positions') ||
|
|
735
|
+
n.includes('usd_class_balances') ||
|
|
736
|
+
n.includes('fetch_vaults') ||
|
|
737
|
+
n.includes('user_vault_equities') ||
|
|
738
|
+
(n.includes('_quote') && !n.includes('build'))) {
|
|
739
|
+
return 'market-data';
|
|
740
|
+
}
|
|
741
|
+
return 'other';
|
|
742
|
+
}
|
|
743
|
+
export function defiProtocolPackGroupId(protocolId, pack = 'market-data') {
|
|
744
|
+
return `defi:${protocolId.trim()}:${pack}`;
|
|
745
|
+
}
|
|
746
|
+
/** Expand activate_tool_group aliases to concrete pack ids. */
|
|
747
|
+
export function resolveActivateGroupIds(groupId) {
|
|
748
|
+
const id = groupId.trim();
|
|
749
|
+
if (!id) {
|
|
750
|
+
return [];
|
|
751
|
+
}
|
|
752
|
+
const aliased = GROUP_ACTIVATE_ALIASES[id];
|
|
753
|
+
if (aliased) {
|
|
754
|
+
return [...aliased];
|
|
755
|
+
}
|
|
756
|
+
// defi:<protocol> (no pack) → market-data only
|
|
757
|
+
if (id.startsWith('defi:')) {
|
|
758
|
+
const parts = id.split(':');
|
|
759
|
+
if (parts.length === 2 && parts[1]) {
|
|
760
|
+
return [defiProtocolPackGroupId(parts[1], 'market-data')];
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
return [id];
|
|
764
|
+
}
|
|
765
|
+
export function isChartFamilyGroupId(groupId) {
|
|
766
|
+
return groupId === 'chart' || groupId.startsWith('chart:');
|
|
767
|
+
}
|
|
294
768
|
export function resolveToolGroupId(name, options) {
|
|
295
769
|
const bare = stripMcpToolServerPrefix(name);
|
|
296
770
|
if (TOOL_GROUP_BY_NAME[bare]) {
|
|
@@ -300,10 +774,10 @@ export function resolveToolGroupId(name, options) {
|
|
|
300
774
|
return TOOL_GROUP_BY_NAME[name];
|
|
301
775
|
}
|
|
302
776
|
if (options?.protocolId) {
|
|
303
|
-
return
|
|
777
|
+
return defiProtocolPackGroupId(options.protocolId, classifyDefiToolPack(bare));
|
|
304
778
|
}
|
|
305
779
|
if (bare.startsWith('ctm_') || name.startsWith('ctm_')) {
|
|
306
|
-
return 'defi:unknown';
|
|
780
|
+
return 'defi:unknown:other';
|
|
307
781
|
}
|
|
308
782
|
return 'unknown';
|
|
309
783
|
}
|