@finchagentic/mcp 4.1.0 → 4.4.1
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/README.md +19 -15
- package/dist/agent-loop.js +75 -72
- package/dist/annotations.js +23 -14
- package/dist/convex.js +15 -18
- package/dist/index.js +14 -12
- package/dist/llm.js +12 -1
- package/dist/local-memory-file.js +14 -1
- package/dist/local-memory.js +13 -0
- package/dist/output-schemas.js +71 -17
- package/dist/project.js +36 -0
- package/dist/resources.js +6 -11
- package/dist/server.js +35 -13
- package/dist/token-gate.js +2 -2
- package/dist/tool-filter.js +14 -5
- package/dist/tools/agents.js +106 -394
- package/dist/tools/automation.js +42 -6
- package/dist/tools/base-mcp.js +3 -15
- package/dist/tools/base.js +34 -20
- package/dist/tools/coder.js +1 -1
- package/dist/tools/deep-research.js +1 -1
- package/dist/tools/defi.js +14 -34
- package/dist/tools/equity.js +10 -2
- package/dist/tools/events.js +1 -1
- package/dist/tools/github.js +51 -1
- package/dist/tools/insider.js +1 -1
- package/dist/tools/insight.js +4 -4
- package/dist/tools/market.js +5 -5
- package/dist/tools/memory.js +52 -88
- package/dist/tools/miroshark.js +8 -1
- package/dist/tools/monitor.js +8 -8
- package/dist/tools/os.js +9 -4
- package/dist/tools/packets.js +2 -2
- package/dist/tools/research-chain.js +1 -1
- package/dist/tools/research-compare.js +1 -1
- package/dist/tools/research.js +2 -2
- package/dist/tools/rh-bridge.js +1 -1
- package/dist/tools/rh-mcp.js +29 -4
- package/dist/tools/rh-orders.js +201 -123
- package/dist/tools/scanner.js +33 -3
- package/dist/tools/stake.js +369 -0
- package/dist/tools/vault.js +294 -40
- package/dist/wallet.js +130 -19
- package/package.json +4 -5
- package/dist/tools/framework.js +0 -150
package/dist/output-schemas.js
CHANGED
|
@@ -200,6 +200,30 @@ exports.OUTPUT_SCHEMAS = {
|
|
|
200
200
|
required: ["input", "resolved"],
|
|
201
201
|
},
|
|
202
202
|
// ── SEC equities ────────────────────────────────────────────────────────────
|
|
203
|
+
stock_fundamentals: {
|
|
204
|
+
type: "object",
|
|
205
|
+
properties: {
|
|
206
|
+
ticker: { type: "string" },
|
|
207
|
+
companyName: string_null,
|
|
208
|
+
cik: string_null,
|
|
209
|
+
quote: {
|
|
210
|
+
type: ["object", "null"],
|
|
211
|
+
additionalProperties: true,
|
|
212
|
+
description: "{ price, currency, prevClose, prevDate } - null when a live quote wasn't available",
|
|
213
|
+
},
|
|
214
|
+
quarterly: {
|
|
215
|
+
type: "object",
|
|
216
|
+
additionalProperties: { type: "array", items: { type: "object", additionalProperties: true } },
|
|
217
|
+
description: "Per-concept arrays of { end, val, form, fy, fp } facts, most recent last",
|
|
218
|
+
},
|
|
219
|
+
annual: {
|
|
220
|
+
type: "object",
|
|
221
|
+
additionalProperties: { type: "array", items: { type: "object", additionalProperties: true } },
|
|
222
|
+
description: "Per-concept arrays of { end, val, form, fy, fp } facts, most recent last",
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
required: ["ticker", "quarterly", "annual"],
|
|
226
|
+
},
|
|
203
227
|
stock_events: {
|
|
204
228
|
type: "object",
|
|
205
229
|
properties: {
|
|
@@ -415,6 +439,53 @@ exports.OUTPUT_SCHEMAS = {
|
|
|
415
439
|
},
|
|
416
440
|
required: ["count", "packets"],
|
|
417
441
|
},
|
|
442
|
+
// ── vault ───────────────────────────────────────────────────────────────────
|
|
443
|
+
vault_list: {
|
|
444
|
+
type: "object",
|
|
445
|
+
properties: {
|
|
446
|
+
type: string_null,
|
|
447
|
+
count: { type: "number" },
|
|
448
|
+
entries: {
|
|
449
|
+
type: "array",
|
|
450
|
+
items: {
|
|
451
|
+
type: "object",
|
|
452
|
+
properties: {
|
|
453
|
+
key: { type: "string" },
|
|
454
|
+
title: string_null,
|
|
455
|
+
type: string_null,
|
|
456
|
+
version: { type: "number" },
|
|
457
|
+
size: number_null,
|
|
458
|
+
updatedAt: number_null,
|
|
459
|
+
isPinned: { type: "boolean" },
|
|
460
|
+
},
|
|
461
|
+
required: ["key"],
|
|
462
|
+
},
|
|
463
|
+
},
|
|
464
|
+
},
|
|
465
|
+
required: ["count", "entries"],
|
|
466
|
+
},
|
|
467
|
+
vault_search: {
|
|
468
|
+
type: "object",
|
|
469
|
+
properties: {
|
|
470
|
+
query: { type: "string" },
|
|
471
|
+
count: { type: "number" },
|
|
472
|
+
results: {
|
|
473
|
+
type: "array",
|
|
474
|
+
items: {
|
|
475
|
+
type: "object",
|
|
476
|
+
properties: {
|
|
477
|
+
key: { type: "string" },
|
|
478
|
+
title: string_null,
|
|
479
|
+
type: string_null,
|
|
480
|
+
score: number_null,
|
|
481
|
+
preview: string_null,
|
|
482
|
+
},
|
|
483
|
+
required: ["key"],
|
|
484
|
+
},
|
|
485
|
+
},
|
|
486
|
+
},
|
|
487
|
+
required: ["query", "count", "results"],
|
|
488
|
+
},
|
|
418
489
|
// ── memory ──────────────────────────────────────────────────────────────────
|
|
419
490
|
memory_search: {
|
|
420
491
|
type: "object",
|
|
@@ -453,14 +524,6 @@ exports.OUTPUT_SCHEMAS = {
|
|
|
453
524
|
required: ["count", "memories"],
|
|
454
525
|
},
|
|
455
526
|
// ── agents ──────────────────────────────────────────────────────────────────
|
|
456
|
-
list_agents: {
|
|
457
|
-
type: "object",
|
|
458
|
-
properties: {
|
|
459
|
-
count: { type: "number" },
|
|
460
|
-
agents: { type: "array", items: { type: "object", additionalProperties: true } },
|
|
461
|
-
},
|
|
462
|
-
required: ["count", "agents"],
|
|
463
|
-
},
|
|
464
527
|
agent_ledger: {
|
|
465
528
|
type: "object",
|
|
466
529
|
properties: {
|
|
@@ -470,15 +533,6 @@ exports.OUTPUT_SCHEMAS = {
|
|
|
470
533
|
},
|
|
471
534
|
required: ["name", "count", "versions"],
|
|
472
535
|
},
|
|
473
|
-
agent_runs: {
|
|
474
|
-
type: "object",
|
|
475
|
-
properties: {
|
|
476
|
-
name: { type: "string" },
|
|
477
|
-
count: { type: "number" },
|
|
478
|
-
runs: { type: "array", items: { type: "object", additionalProperties: true } },
|
|
479
|
-
},
|
|
480
|
-
required: ["name", "count", "runs"],
|
|
481
|
-
},
|
|
482
536
|
// ── scanner / orders / wallet ────────────────────────────────────────────────
|
|
483
537
|
scan_market: {
|
|
484
538
|
type: "object",
|
package/dist/project.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isLocalVaultActive = isLocalVaultActive;
|
|
4
|
+
exports.resolveProjectId = resolveProjectId;
|
|
5
|
+
const convex_js_1 = require("./convex.js");
|
|
6
|
+
const local_vault_js_1 = require("./local-vault.js");
|
|
7
|
+
// MCP has no persistent "active project" UI state the way the webapp Sidebar
|
|
8
|
+
// switcher does - a caller (vault_save, agent_spawn) names the project it
|
|
9
|
+
// wants by string on each call instead. Resolution + auto-create both happen
|
|
10
|
+
// server-side (POST /projects/resolve, see convex/http.ts +
|
|
11
|
+
// convex/projects.ts's resolveOrCreateProjectForUser) so the match/dedup
|
|
12
|
+
// logic exists in exactly one place, shared with the webapp's own project
|
|
13
|
+
// picker.
|
|
14
|
+
//
|
|
15
|
+
// Local-vault mode (vaultBackend: "local") has no project concept at all -
|
|
16
|
+
// it's a flat, unauthenticated file store on the user's own machine with no
|
|
17
|
+
// server to resolve a name against. Callers should check
|
|
18
|
+
// isLocalVaultActive() first and skip resolution entirely rather than call
|
|
19
|
+
// this and get a confusing network-style failure.
|
|
20
|
+
function isLocalVaultActive() {
|
|
21
|
+
return !!(0, local_vault_js_1.getLocalVaultConfig)();
|
|
22
|
+
}
|
|
23
|
+
async function resolveProjectId(name) {
|
|
24
|
+
const trimmed = name.trim();
|
|
25
|
+
if (!trimmed)
|
|
26
|
+
return null;
|
|
27
|
+
try {
|
|
28
|
+
return await (0, convex_js_1.callConvex)("/projects/resolve", "POST", { name: trimmed }, "vault_save");
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Resolution is best-effort - a save should never fail just because the
|
|
32
|
+
// project lookup did. Falls back to unassigned, same as the webapp's
|
|
33
|
+
// agent_spawn membership check when a stale/bad id doesn't match.
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
package/dist/resources.js
CHANGED
|
@@ -81,17 +81,12 @@ async function readVaultResource(uri) {
|
|
|
81
81
|
if (data.error) {
|
|
82
82
|
throw new Error(`Vault entry not found: ${key}`);
|
|
83
83
|
}
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
catch (err) {
|
|
92
|
-
body = (data.content ?? "") + `\n\n_(could not load full blob: ${err.message})_`;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
84
|
+
// No blob-storage tier exists on the backend (see app/convex/vault.ts) -
|
|
85
|
+
// oversized content is rejected at save time, so `contentFileId` never
|
|
86
|
+
// comes back here. A `/vault/blob` fallback used to live here but the route
|
|
87
|
+
// was never registered in http.ts either; removed as dead code rather than
|
|
88
|
+
// fixed against a storage tier that doesn't exist.
|
|
89
|
+
const body = data.content ?? "";
|
|
95
90
|
const mime = mimeForContentType(data.contentType);
|
|
96
91
|
// Only prepend a friendly header for markdown (the default) - JSON/code
|
|
97
92
|
// payloads must remain valid in their own grammar so consuming tools can
|
package/dist/server.js
CHANGED
|
@@ -61,7 +61,13 @@ const market_js_1 = require("./tools/market.js");
|
|
|
61
61
|
const defi_js_1 = require("./tools/defi.js");
|
|
62
62
|
const automation_js_1 = require("./tools/automation.js");
|
|
63
63
|
const insight_js_1 = require("./tools/insight.js");
|
|
64
|
-
|
|
64
|
+
// tools/framework.ts removed - list_playbooks, run_playbook and
|
|
65
|
+
// get_finch_ledger called /framework/playbooks, /framework/playbook/run and
|
|
66
|
+
// /swarm/ledger, none of which are registered in app/convex/http.ts (only
|
|
67
|
+
// dangling section-header comments) and none of which have a backing data
|
|
68
|
+
// model (no playbook table, no Sentinel ledger table in schema.ts). All 3
|
|
69
|
+
// tools always 404'd. Re-add only alongside building the Noel Framework
|
|
70
|
+
// playbook/Sentinel backend for real.
|
|
65
71
|
const wallet_js_1 = require("./tools/wallet.js");
|
|
66
72
|
const vault_js_1 = require("./tools/vault.js");
|
|
67
73
|
const miroshark_js_1 = require("./tools/miroshark.js");
|
|
@@ -86,6 +92,7 @@ const monitor_js_1 = require("./tools/monitor.js");
|
|
|
86
92
|
const github_js_1 = require("./tools/github.js");
|
|
87
93
|
const chronicle_js_1 = require("./tools/chronicle.js");
|
|
88
94
|
const packets_js_1 = require("./tools/packets.js");
|
|
95
|
+
const stake_js_1 = require("./tools/stake.js");
|
|
89
96
|
const token_gate_js_1 = require("./token-gate.js");
|
|
90
97
|
const PRIVATE_KEY_RESPONSE = {
|
|
91
98
|
content: [{
|
|
@@ -107,38 +114,52 @@ exports.ALL_TOOLS = [
|
|
|
107
114
|
...automation_js_1.AUTOMATION_TOOLS, // 6 - create, list, pause, delete, get_runs, run
|
|
108
115
|
// SWARM_TOOLS removed v3.19 - multi-agent research is now built into
|
|
109
116
|
// deep_research (depth=standard|deep). Handler fully removed v3.21.
|
|
110
|
-
|
|
111
|
-
...vault_js_1.VAULT_TOOLS, //
|
|
117
|
+
// FRAMEWORK_TOOLS removed - list_playbooks/run_playbook/get_finch_ledger backend routes never existed, see tools/ import comment above.
|
|
118
|
+
...vault_js_1.VAULT_TOOLS, // 17 - save, code_session_save, read, list, search, history, diff, export, pin, unpublish, tag, delete, link, related, store_credential, get_credential, list_projects
|
|
112
119
|
...wallet_js_1.WALLET_TOOLS, // 3 - get_wallet_address, get_wallet_balance, wallet_sign_message
|
|
113
120
|
...miroshark_js_1.MIROSHARK_TOOLS, // 3 - simulate, status, stop
|
|
114
|
-
...agents_js_1.AGENT_TOOLS, //
|
|
121
|
+
...agents_js_1.AGENT_TOOLS, // 4 - agent_spawn, agent_recall, agent_update, agent_ledger (vault-backed, all working). list_agents/hire_agent and the autonomous-schedule tools (agent_identity/agent_schedule/agent_unschedule/agent_pause/agent_resume/agent_runs) removed - their backend routes were never implemented, see tools/agents.ts
|
|
115
122
|
...scanner_js_1.SCANNER_TOOLS, // 3 - score_token, check_token, scan_market (dips+momentum merged)
|
|
116
123
|
...equity_js_1.EQUITY_TOOLS, // 1 - stock_fundamentals (SEC EDGAR XBRL; no key)
|
|
117
124
|
...insider_js_1.INSIDER_TOOLS, // 1 - stock_insider (SEC Form 4; separates discretionary from automatic)
|
|
118
125
|
...events_js_1.EVENT_TOOLS, // 1 - stock_events (SEC 8-K item codes decoded)
|
|
119
126
|
...coder_js_1.CODER_TOOLS, // 1 - audit_contract (static Solidity scan; the client model does the reasoning)
|
|
120
|
-
...base_js_1.BASE_TOOLS, // 4 -
|
|
127
|
+
...base_js_1.BASE_TOOLS, // 4 - base_mcp_yield_vaults, base_mcp_lending_rates, base_mcp_deposit_guide, base_mcp_network
|
|
121
128
|
...base_mcp_js_1.BASE_MCP_TOOLS, // 7 - base_mcp_{status,balance,send,swap,estimate,lend,resolve} (analyze removed v3.17.5 - dead backend route)
|
|
122
129
|
...rh_mcp_js_1.RH_MCP_TOOLS, // 8 - rh_mcp_{status,list_stocks,balance,estimate,swap} + rh_token_resolve, rh_analyze, rh_safety_check (RH Chain 4663 Uni V4: stocks + arbitrary crypto via DexScreener/Blockscout)
|
|
123
130
|
...rh_orders_js_1.RH_ORDER_TOOLS, // 5 - rh_dca_create, rh_bracket_create, rh_orders_list, rh_order_cancel, rh_orders_tick (RH automated DCA/TP/SL)
|
|
124
131
|
...rh_bridge_js_1.BRIDGE_TOOLS, // 1 - rh_stock_bridge (tokenized stock vs real equity)
|
|
125
|
-
...memory_js_1.MEMORY_TOOLS, //
|
|
132
|
+
...memory_js_1.MEMORY_TOOLS, // 9 - memory_add, memory_search, memory_context, memory_profile, memory_list, memory_delete, memory_insight, memory_extract, memory_consolidate. memory_publish removed - promised a "Memory Marketplace" that doesn't exist at any layer (no browse route, no query, no UI), see tools/memory.ts
|
|
126
133
|
...os_js_1.OS_TOOLS, // 3 - finch_status, finch_diagnostics, finch_shell_chat
|
|
127
134
|
...research_js_1.RESEARCH_TOOLS, // 2 - web_scrape, web_search
|
|
128
135
|
...deep_research_js_1.DEEP_RESEARCH_TOOLS, // 1 - deep_research (search → scrape → rank → cited evidence pack; caller synthesises)
|
|
129
136
|
...research_compare_js_1.RESEARCH_COMPARE_TOOLS, // 1 - research_compare (diff two reports across time)
|
|
130
137
|
...research_chain_js_1.RESEARCH_CHAIN_TOOLS, // 1 - research_chain (walk continueFrom evolution timeline)
|
|
131
|
-
...monitor_js_1.MONITOR_TOOLS, //
|
|
138
|
+
...monitor_js_1.MONITOR_TOOLS, // 3 - schedule_research, list_monitors, cancel_monitor
|
|
132
139
|
...github_js_1.GITHUB_TOOLS, // 8 - list_repos, list_prs, get_pr, list_issues, get_issue, get_file, get_commits, search_code
|
|
133
140
|
...chronicle_js_1.CHRONICLE_TOOLS, // 4 - chronicle_add, chronicle_list, chronicle_search, chronicle_stats
|
|
134
141
|
...packets_js_1.PACKET_TOOLS, // 4 - packet_create, packet_run, packet_list, packet_share
|
|
135
|
-
|
|
142
|
+
...stake_js_1.STAKE_TOOLS, // 5 - stake_finch_status, stake_finch, unstake_finch, claim_vested_rewards, stake_auto_restake (custodial wallet; requires `finch login`)
|
|
143
|
+
// total: 116 tools as measured by ALL_TOOLS.length - do not hand-maintain a
|
|
144
|
+
// count in this comment (drifted stale multiple times already: before
|
|
145
|
+
// staking was added, after the P1 audit removed 9 dead framework/agent-
|
|
146
|
+
// schedule tools, after memory_publish was removed for promising a
|
|
147
|
+
// marketplace that doesn't exist, after stake_auto_restake was added,
|
|
148
|
+
// after claim_vested_rewards was added to close the gap where the
|
|
149
|
+
// stake-lifecycle notification told users to "run claimVestedRewards" but
|
|
150
|
+
// no MCP tool by that name existed, after code_session_save was added so
|
|
151
|
+
// coding sessions persist the same way deep_research already auto-saves
|
|
152
|
+
// research, and after list_projects was added alongside `workspaceProject`
|
|
153
|
+
// support on vault_save/agent_spawn - MCP tools can now file into the same
|
|
154
|
+
// Projects the webapp Agents page organizes by, resolved/auto-created
|
|
155
|
+
// server-side via POST /projects/resolve; ALL_TOOLS.length is the only
|
|
156
|
+
// number that can't lie). Per-category counts above are best-effort
|
|
157
|
+
// documentation, not load-bearing anywhere.
|
|
136
158
|
];
|
|
137
159
|
exports.HANDLER_MAP = new Map([
|
|
138
160
|
...market_js_1.MARKET_TOOLS.map(t => [t.name, market_js_1.handleMarketTool]),
|
|
139
161
|
...defi_js_1.DEFI_TOOLS.map(t => [t.name, defi_js_1.handleDefiTool]),
|
|
140
162
|
...automation_js_1.AUTOMATION_TOOLS.map(t => [t.name, automation_js_1.handleAutomationTool]),
|
|
141
|
-
...framework_js_1.FRAMEWORK_TOOLS.map(t => [t.name, framework_js_1.handleFrameworkTool]),
|
|
142
163
|
...vault_js_1.VAULT_TOOLS.map(t => [t.name, vault_js_1.handleVaultTool]),
|
|
143
164
|
...wallet_js_1.WALLET_TOOLS.map(t => [t.name, wallet_js_1.handleWalletTool]),
|
|
144
165
|
...insight_js_1.INSIGHT_TOOLS.map(t => [t.name, insight_js_1.handleInsightTool]),
|
|
@@ -164,6 +185,7 @@ exports.HANDLER_MAP = new Map([
|
|
|
164
185
|
...github_js_1.GITHUB_TOOLS.map(t => [t.name, github_js_1.handleGithubTool]),
|
|
165
186
|
...chronicle_js_1.CHRONICLE_TOOLS.map(t => [t.name, (n, a) => (0, chronicle_js_1.handleChronicle)(n, a)]),
|
|
166
187
|
...packets_js_1.PACKET_TOOLS.map(t => [t.name, (n, a) => (0, packets_js_1.handlePacket)(n, a)]),
|
|
188
|
+
...stake_js_1.STAKE_TOOLS.map(t => [t.name, stake_js_1.handleStakeTool]),
|
|
167
189
|
]);
|
|
168
190
|
// `instructions` is returned in the initialize result - it tells the client
|
|
169
191
|
// (and, through it, the model) what this server is and how to reach for it.
|
|
@@ -175,10 +197,10 @@ const SERVER_INSTRUCTIONS = [
|
|
|
175
197
|
"research, DeFi on Base (base_mcp_*), and Robinhood Chain trading (rh_*).",
|
|
176
198
|
"",
|
|
177
199
|
"Tool annotations are set: read-only tools are safe to run without asking;",
|
|
178
|
-
"tools with destructiveHint (deletes, cancels,
|
|
179
|
-
"that moves funds - base_mcp_swap/send
|
|
180
|
-
"rh_bracket_create,
|
|
181
|
-
"with the user before running.",
|
|
200
|
+
"tools with destructiveHint (deletes, cancels, packet_share, and anything",
|
|
201
|
+
"that moves funds - base_mcp_swap/send, rh_mcp_swap, rh_dca_create,",
|
|
202
|
+
"rh_bracket_create, run_automation, packet_run, stake_finch,",
|
|
203
|
+
"unstake_finch) should be confirmed with the user before running.",
|
|
182
204
|
"",
|
|
183
205
|
"Vault entries are also exposed as resources (finch://vault/<key>); prefer",
|
|
184
206
|
"reading those over a vault_read tool call when you only need the content.",
|
package/dist/token-gate.js
CHANGED
|
@@ -57,9 +57,9 @@ exports.PREMIUM_TOOLS = new Set([
|
|
|
57
57
|
// Automations
|
|
58
58
|
"create_automation", "run_automation", "pause_automation", "delete_automation", "get_automation_runs",
|
|
59
59
|
// Autonomous monitors
|
|
60
|
-
"schedule_research",
|
|
60
|
+
"schedule_research",
|
|
61
61
|
// Persistent agents
|
|
62
|
-
"
|
|
62
|
+
"agent_spawn", "agent_recall", "agent_update",
|
|
63
63
|
]);
|
|
64
64
|
function tokenGateError(toolName) {
|
|
65
65
|
return {
|
package/dist/tool-filter.js
CHANGED
|
@@ -17,12 +17,21 @@ exports.filterTools = filterTools;
|
|
|
17
17
|
// FINCH_TOOLS=all every registered tool
|
|
18
18
|
//
|
|
19
19
|
// Unknown presets fall back to all to avoid silently hiding tools.
|
|
20
|
+
// Each preset's regex is checked against every tool name in ALL_TOOLS by
|
|
21
|
+
// tools-registration.test.ts (see "every tool matches at least one preset")
|
|
22
|
+
// - a tool that matches no preset's regex is invisible under every FINCH_TOOLS
|
|
23
|
+
// setting except "all", which happened silently to 33/121 tools before that
|
|
24
|
+
// test existed (rh_* order-management tools, all *_automation tools, packets,
|
|
25
|
+
// playbooks, wallet balance/sign, miroshark, stock_* - a user on
|
|
26
|
+
// FINCH_TOOLS=defi couldn't even see rh_order_cancel for an order placed
|
|
27
|
+
// through that same preset). New tools MUST match a preset or the test fails
|
|
28
|
+
// the build, instead of quietly vanishing like these did.
|
|
20
29
|
const PRESETS = {
|
|
21
|
-
core: /^(memory_|vault_|
|
|
22
|
-
defi: /^(get_market_data|get_token_data|compare_tokens|market_overview|token_history|market_thesis|trade_plan|base_mcp_|
|
|
23
|
-
research: /^(memory_|vault_|deep_research|research_compare|research_chain|web_search|web_scrape|schedule_research|
|
|
24
|
-
memory: /^(memory_|vault_|
|
|
25
|
-
coder: /^(audit_contract|github_)/,
|
|
30
|
+
core: /^(memory_|vault_|code_session_save|list_projects|agent_|ask_finch|finch_status|finch_diagnostics|finch_shell_chat|get_wallet_address|get_wallet_balance|wallet_sign_message|chronicle_|packet_)/,
|
|
31
|
+
defi: /^(get_market_data|get_token_data|compare_tokens|market_overview|token_history|get_base_token_data|stock_fundamentals|stock_insider|stock_events|market_thesis|trade_plan|base_mcp_|rh_|base_|get_defi_yields|score_token|check_token|scan_market|get_wallet_balance|wallet_sign_message|create_automation|list_automations|pause_automation|delete_automation|get_automation_runs|run_automation|miroshark_|stake_|unstake_finch|claim_vested_rewards)/,
|
|
32
|
+
research: /^(memory_|vault_|code_session_save|list_projects|deep_research|research_compare|research_chain|web_search|web_scrape|schedule_research|list_monitors|cancel_monitor|ask_finch|stock_fundamentals|stock_insider|stock_events)/,
|
|
33
|
+
memory: /^(memory_|vault_|code_session_save|list_projects|agent_|chronicle_)/,
|
|
34
|
+
coder: /^(audit_contract|github_|code_session_save)/,
|
|
26
35
|
};
|
|
27
36
|
function filterTools(allTools) {
|
|
28
37
|
// Default is "core" - keeps LLM context cost low while everything
|