nodebench-mcp 2.4.0 → 2.6.0

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.
@@ -21,7 +21,7 @@ Add to `~/.claude/settings.json`:
21
21
  }
22
22
  ```
23
23
 
24
- Restart Claude Code. 56 tools available immediately.
24
+ Restart Claude Code. 89 tools available immediately.
25
25
 
26
26
  **→ Quick Refs:** After setup, run `getMethodology("overview")` | First task? See [Verification Cycle](#verification-cycle-workflow) | New to codebase? See [Environment Setup](#environment-setup)
27
27
 
@@ -189,8 +189,9 @@ NODEBENCH_GAIA_CAPABILITY_TASK_LIMIT=6 NODEBENCH_GAIA_CAPABILITY_CONCURRENCY=1 n
189
189
  ```
190
190
 
191
191
  Modes:
192
- - Recommended (more stable): `NODEBENCH_GAIA_CAPABILITY_TOOLS_MODE=rag`
193
- - More realistic (higher variance): `NODEBENCH_GAIA_CAPABILITY_TOOLS_MODE=agent` (optional `NODEBENCH_GAIA_CAPABILITY_FORCE_WEB_SEARCH=1`)
192
+ - Recommended (more stable): `NODEBENCH_GAIA_CAPABILITY_TOOLS_MODE=rag` (single deterministic extract + answer)
193
+ - More realistic (higher variance): `NODEBENCH_GAIA_CAPABILITY_TOOLS_MODE=agent` (small tool loop)
194
+ Web lane only: `NODEBENCH_GAIA_CAPABILITY_FORCE_WEB_SEARCH=1` and/or `NODEBENCH_GAIA_CAPABILITY_FORCE_FETCH_URL=1`
194
195
 
195
196
  Run all public lanes:
196
197
  ```bash
@@ -256,6 +257,9 @@ Use `getMethodology("overview")` to see all available workflows.
256
257
  | **Bootstrap** | `discover_infrastructure`, `triple_verify`, `self_implement` | Self-setup, triple verification |
257
258
  | **Autonomous** | `assess_risk`, `decide_re_update`, `run_self_maintenance` | Risk-aware execution, self-maintenance |
258
259
  | **Parallel Agents** | `claim_agent_task`, `release_agent_task`, `list_agent_tasks`, `assign_agent_role`, `get_agent_role`, `log_context_budget`, `run_oracle_comparison`, `get_parallel_status` | Multi-agent coordination, task locking, role specialization, oracle testing |
260
+ | **LLM** | `call_llm`, `extract_structured_data`, `benchmark_models` | LLM calling, structured extraction, model comparison |
261
+ | **Security** | `scan_dependencies`, `run_code_analysis` | Dependency auditing, static code analysis |
262
+ | **Platform** | `query_daily_brief`, `query_funding_entities`, `query_research_queue`, `publish_to_queue` | Convex platform bridge: intelligence, funding, research, publishing |
259
263
  | **Meta** | `findTools`, `getMethodology` | Discover tools, get workflow guides |
260
264
 
261
265
  **→ Quick Refs:** Find tools by keyword: `findTools({ query: "verification" })` | Get workflow guide: `getMethodology({ topic: "..." })` | See [Methodology Topics](#methodology-topics) for all topics
package/README.md CHANGED
@@ -39,7 +39,7 @@ Every additional tool call produces a concrete artifact — an issue found, a ri
39
39
 
40
40
  **QA engineer** — Transitioned a manual QA workflow website into an AI agent-driven app for a pet care messaging platform. Uses NodeBench's quality gates, verification cycles, and eval runs to ensure the AI agent handles edge cases that manual QA caught but bare AI agents miss.
41
41
 
42
- Both found different subsets of the 75 tools useful — which is why v2.1 ships with `--preset` gating to load only what you need.
42
+ Both found different subsets of the 98 tools useful — which is why v2.6 ships with `--preset` gating to load only what you need.
43
43
 
44
44
  ---
45
45
 
@@ -77,10 +77,10 @@ Tasks 1-3 start with zero prior knowledge. By task 9, the agent finds 2+ relevan
77
77
  ### Install (30 seconds)
78
78
 
79
79
  ```bash
80
- # Claude Code CLI — all 75 tools
80
+ # Claude Code CLI — all 98 tools
81
81
  claude mcp add nodebench -- npx -y nodebench-mcp
82
82
 
83
- # Or start lean — 30 tools, ~60% less token overhead
83
+ # Or start lean — 34 tools, ~65% less token overhead
84
84
  claude mcp add nodebench -- npx -y nodebench-mcp --preset lite
85
85
  ```
86
86
 
@@ -117,6 +117,30 @@ export GEMINI_API_KEY="your-key" # Web search + vision (recommended)
117
117
  export GITHUB_TOKEN="your-token" # GitHub (higher rate limits)
118
118
  ```
119
119
 
120
+ ### Capability benchmarking (GAIA, gated)
121
+
122
+ NodeBench MCP treats tools as "Access". To measure real capability lift, we benchmark baseline (LLM-only) vs tool-augmented accuracy on GAIA (gated).
123
+
124
+ Notes:
125
+ - GAIA fixtures and attachments are written under `.cache/gaia` (gitignored). Do not commit GAIA content.
126
+ - Fixture generation requires `HF_TOKEN` or `HUGGINGFACE_HUB_TOKEN`.
127
+
128
+ Web lane (web_search + fetch_url):
129
+ ```bash
130
+ npm run mcp:dataset:gaia:capability:refresh
131
+ NODEBENCH_GAIA_CAPABILITY_TASK_LIMIT=6 NODEBENCH_GAIA_CAPABILITY_CONCURRENCY=1 npm run mcp:dataset:gaia:capability:test
132
+ ```
133
+
134
+ File-backed lane (PDF / XLSX / CSV via `local_file` tools):
135
+ ```bash
136
+ npm run mcp:dataset:gaia:capability:files:refresh
137
+ NODEBENCH_GAIA_CAPABILITY_TASK_LIMIT=6 NODEBENCH_GAIA_CAPABILITY_CONCURRENCY=1 npm run mcp:dataset:gaia:capability:files:test
138
+ ```
139
+
140
+ Modes:
141
+ - Stable: `NODEBENCH_GAIA_CAPABILITY_TOOLS_MODE=rag`
142
+ - More realistic: `NODEBENCH_GAIA_CAPABILITY_TOOLS_MODE=agent`
143
+
120
144
  ---
121
145
 
122
146
  ## What You Get
@@ -171,7 +195,7 @@ Research → Risk → Implement → Test (3 layers) → Eval → Gate → Learn
171
195
  **Outer loop** (over time): Eval-driven development ensures improvement.
172
196
  **Together**: The AI Flywheel — every verification produces eval artifacts, every regression triggers verification.
173
197
 
174
- Ask the agent: `Use getMethodology("overview")` to see all 18 methodology topics.
198
+ Ask the agent: `Use getMethodology("overview")` to see all 19 methodology topics.
175
199
 
176
200
  ---
177
201
 
@@ -200,20 +224,20 @@ Based on Anthropic's ["Building a C Compiler with Parallel Claudes"](https://www
200
224
 
201
225
  ---
202
226
 
203
- ## Toolset Gating (v2.1)
227
+ ## Toolset Gating (v2.6)
204
228
 
205
- 75 tools means ~19K tokens of schema per API call. If you only need core methodology, gate the toolset:
229
+ 98 tools means ~24K tokens of schema per API call. If you only need core methodology, gate the toolset:
206
230
 
207
231
  ### Presets
208
232
 
209
233
  ```bash
210
- # Lite — 30 tools (verification, eval, gates, learning, recon)
234
+ # Lite — 34 tools (verification, eval, gates, learning, recon, security)
211
235
  claude mcp add nodebench -- npx -y nodebench-mcp --preset lite
212
236
 
213
- # Core — 50 tools (adds flywheel, bootstrap, self-eval)
237
+ # Core — 70 tools (adds flywheel, bootstrap, self-eval, llm, platform, research_writing)
214
238
  claude mcp add nodebench -- npx -y nodebench-mcp --preset core
215
239
 
216
- # Full — all 75 tools (default)
240
+ # Full — all 98 tools (default)
217
241
  claude mcp add nodebench -- npx -y nodebench-mcp
218
242
  ```
219
243
 
@@ -248,20 +272,24 @@ npx nodebench-mcp --help
248
272
  | Toolset | Tools | What it covers |
249
273
  |---|---|---|
250
274
  | verification | 8 | Cycles, gaps, triple-verify, status |
251
- | eval | 5 | Eval runs, results, comparison |
275
+ | eval | 6 | Eval runs, results, comparison, diff |
252
276
  | quality_gate | 4 | Gates, presets, history |
253
277
  | learning | 4 | Knowledge, search, record |
254
- | recon | 5 | Research, findings, framework checks |
278
+ | recon | 7 | Research, findings, framework checks, risk |
255
279
  | flywheel | 4 | Mandatory flywheel, promote, investigate |
256
- | bootstrap | 4 | Project setup, agents.md, self-implement |
280
+ | bootstrap | 11 | Project setup, agents.md, self-implement, autonomous, test runner |
257
281
  | self_eval | 6 | Trajectory analysis, health reports |
258
282
  | parallel | 10 | Task locks, roles, context budget, oracle |
259
- | vision | 3 | Screenshot analysis, UI capture |
260
- | ui_capture | 3 | Playwright-based capture |
283
+ | vision | 4 | Screenshot analysis, UI capture, diff |
284
+ | ui_capture | 2 | Playwright-based capture |
261
285
  | web | 2 | Web search, URL fetch |
262
- | github | 3 | Repo search, analysis |
263
- | docs | 3 | Documentation generation |
286
+ | github | 3 | Repo search, analysis, monitoring |
287
+ | docs | 4 | Documentation generation, reports |
264
288
  | local_file | 3 | CSV, XLSX, PDF parsing |
289
+ | llm | 3 | LLM calling, extraction, benchmarking |
290
+ | security | 3 | Dependency scanning, code analysis, terminal security scanning |
291
+ | platform | 4 | Convex bridge: briefs, funding, research, publish |
292
+ | research_writing | 8 | Academic paper polishing, translation, de-AI, logic check, captions, experiment analysis, reviewer simulation |
265
293
 
266
294
  `findTools` and `getMethodology` are always available regardless of gating — agents can discover tools on demand.
267
295
 
@@ -592,7 +592,7 @@ describe("Scenario: Meta Tool Discovery", () => {
592
592
  }, "meta");
593
593
  expect(result.title).toContain("Overview");
594
594
  const topics = Object.keys(result.steps[0].topics);
595
- expect(topics.length).toBe(18);
595
+ expect(topics.length).toBe(19);
596
596
  });
597
597
  it("Step 4: Get specific methodology", async () => {
598
598
  const methodologies = [
@@ -120,6 +120,22 @@ function buildToolIndex() {
120
120
  byName.set(tool.name, tool);
121
121
  return byName;
122
122
  }
123
+ function extractJsonObject(text) {
124
+ const trimmed = text.trim();
125
+ const fenceMatch = trimmed.match(/```json\s*([\s\S]*?)\s*```/i);
126
+ const candidate = fenceMatch ? fenceMatch[1] : trimmed;
127
+ const start = candidate.indexOf("{");
128
+ const end = candidate.lastIndexOf("}");
129
+ if (start === -1 || end === -1 || end <= start)
130
+ return null;
131
+ const slice = candidate.slice(start, end + 1);
132
+ try {
133
+ return JSON.parse(slice);
134
+ }
135
+ catch {
136
+ return null;
137
+ }
138
+ }
123
139
  function resolveTaskLocalFilePath(task) {
124
140
  const repoRoot = resolveRepoRoot();
125
141
  const rel = String(task.localFilePath ?? "").trim();
@@ -131,80 +147,226 @@ function resolveTaskLocalFilePath(task) {
131
147
  throw new Error("Task missing filePath/localFilePath");
132
148
  return path.join(repoRoot, ".cache", "gaia", "data", filePath);
133
149
  }
134
- async function toolAugmentedAnswerFromFile(ai, task) {
150
+ async function toolAugmentedAnswerFromFile(ai, task, opts) {
135
151
  const toolIndex = buildToolIndex();
136
152
  const model = process.env.NODEBENCH_GAIA_TOOLS_MODEL ?? "gemini-2.5-flash";
153
+ const toolsMode = (process.env.NODEBENCH_GAIA_CAPABILITY_TOOLS_MODE ?? "rag").toLowerCase();
137
154
  const localPath = resolveTaskLocalFilePath(task);
138
155
  if (!existsSync(localPath)) {
139
156
  throw new Error(`Missing attachment on disk. Expected at ${localPath}. Refresh with dataset:gaia:capability:files:refresh`);
140
157
  }
141
158
  const ext = String(task.fileExt ?? "").trim().toLowerCase() ||
142
159
  path.extname(task.fileName || task.filePath || "").toLowerCase().replace(/^\./, "");
143
- let extract;
144
- let toolCalls = 0;
145
- if (ext === "csv") {
146
- const tool = toolIndex.get("read_csv_file");
147
- if (!tool)
148
- throw new Error("Missing tool: read_csv_file");
149
- extract = await tool.handler({
150
- path: localPath,
151
- hasHeader: true,
152
- maxRows: 500,
153
- maxCols: 80,
154
- maxCellChars: 2000,
155
- });
156
- toolCalls = 1;
157
- }
158
- else if (ext === "xlsx") {
159
- const tool = toolIndex.get("read_xlsx_file");
160
- if (!tool)
161
- throw new Error("Missing tool: read_xlsx_file");
162
- extract = await tool.handler({
163
- path: localPath,
164
- headerRow: 1,
165
- maxRows: 500,
166
- maxCols: 80,
167
- maxCellChars: 2000,
168
- });
169
- toolCalls = 1;
170
- }
171
- else if (ext === "pdf") {
172
- const tool = toolIndex.get("read_pdf_text");
173
- if (!tool)
174
- throw new Error("Missing tool: read_pdf_text");
175
- extract = await tool.handler({
176
- path: localPath,
177
- pageStart: 1,
178
- pageEnd: 12,
179
- maxChars: 40000,
180
- });
181
- toolCalls = 1;
182
- }
183
- else {
184
- throw new Error(`Unsupported attachment type: ${ext || "(unknown)"}`);
160
+ // "rag" mode: single deterministic file extract -> answer (more stable than agent loops).
161
+ if (toolsMode === "rag") {
162
+ let extract;
163
+ if (ext === "csv") {
164
+ const tool = toolIndex.get("read_csv_file");
165
+ if (!tool)
166
+ throw new Error("Missing tool: read_csv_file");
167
+ extract = await tool.handler({
168
+ path: localPath,
169
+ hasHeader: true,
170
+ maxRows: 500,
171
+ maxCols: 80,
172
+ maxCellChars: 2000,
173
+ });
174
+ }
175
+ else if (ext === "xlsx") {
176
+ const tool = toolIndex.get("read_xlsx_file");
177
+ if (!tool)
178
+ throw new Error("Missing tool: read_xlsx_file");
179
+ extract = await tool.handler({
180
+ path: localPath,
181
+ headerRow: 1,
182
+ maxRows: 500,
183
+ maxCols: 80,
184
+ maxCellChars: 2000,
185
+ });
186
+ }
187
+ else if (ext === "pdf") {
188
+ const tool = toolIndex.get("read_pdf_text");
189
+ if (!tool)
190
+ throw new Error("Missing tool: read_pdf_text");
191
+ extract = await tool.handler({
192
+ path: localPath,
193
+ pageStart: 1,
194
+ pageEnd: 12,
195
+ maxChars: 40000,
196
+ });
197
+ }
198
+ else {
199
+ throw new Error(`Unsupported attachment type: ${ext || "(unknown)"}`);
200
+ }
201
+ // Keep the model input bounded. The tools already return bounded previews,
202
+ // but JSON stringification can still be large on wide tables.
203
+ const extractText = JSON.stringify(extract).slice(0, 40000);
204
+ const contents = [
205
+ {
206
+ role: "user",
207
+ parts: [
208
+ {
209
+ text: "Answer the question using ONLY the provided file extract. " +
210
+ "If the extract is insufficient, make the best supported guess.\n\n" +
211
+ "Return ONLY the final answer, no explanation.\n\n" +
212
+ `TASK_ID: ${task.id}\n` +
213
+ `FILE_TYPE: ${ext}\n` +
214
+ `LOCAL_FILE_PATH: ${localPath}\n` +
215
+ `QUESTION:\n${task.prompt}\n\n` +
216
+ `FILE_EXTRACT_JSON:\n${extractText}`,
217
+ },
218
+ ],
219
+ },
220
+ ];
221
+ const answer = await geminiGenerateText(ai, model, contents);
222
+ return { answer, toolCalls: 1 };
185
223
  }
186
- // Keep the model input bounded. The tools already return bounded previews,
187
- // but JSON stringification can still be large on wide tables.
188
- const extractText = JSON.stringify(extract).slice(0, 40000);
224
+ // "agent" mode: small tool loop. This is more realistic but higher variance.
225
+ const toolUsageSummary = [
226
+ "You have access to deterministic local file tools:",
227
+ "- read_csv_file({path,hasHeader,delimiter,encoding,maxRows,maxCols,maxCellChars})",
228
+ "- read_xlsx_file({path,sheetName,headerRow,rangeA1,maxRows,maxCols,maxCellChars})",
229
+ "- read_pdf_text({path,pageStart,pageEnd,pageNumbers,maxChars})",
230
+ "",
231
+ "When using tools, respond with a single JSON object only:",
232
+ "{\"action\":\"tool\",\"name\":\"read_pdf_text\",\"arguments\":{\"pageStart\":1,\"pageEnd\":5}}",
233
+ "When done, respond with:",
234
+ "{\"action\":\"final\",\"answer\":\"...\"}",
235
+ "",
236
+ "Rules:",
237
+ "- Do NOT use any external knowledge or web browsing.",
238
+ "- Always use the provided LOCAL_FILE_PATH; you may not read any other files.",
239
+ "- Keep tool results bounded (maxRows<=500, maxCols<=80, maxCellChars<=2000, maxChars<=40000).",
240
+ "- Do NOT include any explanation. Final answer must match the requested formatting.",
241
+ ].join("\n");
189
242
  const contents = [
190
243
  {
191
244
  role: "user",
192
245
  parts: [
193
246
  {
194
- text: "Answer the question using ONLY the provided file extract. " +
195
- "If the extract is insufficient, make the best supported guess.\n\n" +
196
- "Return ONLY the final answer, no explanation.\n\n" +
197
- `TASK_ID: ${task.id}\n` +
198
- `FILE_TYPE: ${ext}\n` +
199
- `LOCAL_FILE_PATH: ${localPath}\n` +
200
- `QUESTION:\n${task.prompt}\n\n` +
201
- `FILE_EXTRACT_JSON:\n${extractText}`,
247
+ text: `${toolUsageSummary}\n\nTASK_ID: ${task.id}\nFILE_TYPE: ${ext}\nLOCAL_FILE_PATH: ${localPath}\nQUESTION:\n${task.prompt}`,
202
248
  },
203
249
  ],
204
250
  },
205
251
  ];
206
- const answer = await geminiGenerateText(ai, model, contents);
207
- return { answer, toolCalls };
252
+ let toolCalls = 0;
253
+ for (let step = 0; step < opts.maxSteps; step++) {
254
+ const out = await geminiGenerateText(ai, model, contents);
255
+ contents.push({ role: "model", parts: [{ text: out }] });
256
+ const parsed = extractJsonObject(out);
257
+ if (!parsed || typeof parsed !== "object") {
258
+ contents.push({
259
+ role: "user",
260
+ parts: [{ text: "Invalid format. Return JSON only with action tool|final." }],
261
+ });
262
+ continue;
263
+ }
264
+ if (parsed.action === "final") {
265
+ const answer = String(parsed.answer ?? "").trim();
266
+ return { answer, toolCalls };
267
+ }
268
+ if (parsed.action !== "tool") {
269
+ contents.push({
270
+ role: "user",
271
+ parts: [{ text: "Invalid action. Return JSON only with action tool|final." }],
272
+ });
273
+ continue;
274
+ }
275
+ if (toolCalls >= opts.maxToolCalls) {
276
+ contents.push({
277
+ role: "user",
278
+ parts: [{ text: "Tool call budget exceeded. Return final answer now." }],
279
+ });
280
+ continue;
281
+ }
282
+ const name = String(parsed.name ?? "");
283
+ const tool = toolIndex.get(name);
284
+ if (!tool) {
285
+ contents.push({
286
+ role: "user",
287
+ parts: [{ text: `Unknown tool "${name}". Use only read_csv_file, read_xlsx_file, or read_pdf_text.` }],
288
+ });
289
+ continue;
290
+ }
291
+ const args = (parsed.arguments ?? {});
292
+ // Security: force the path to the known GAIA attachment.
293
+ args.path = localPath;
294
+ // Hard limits for safety and stable prompts.
295
+ if (name === "read_csv_file") {
296
+ if (args.hasHeader === undefined)
297
+ args.hasHeader = true;
298
+ if (typeof args.maxRows !== "number")
299
+ args.maxRows = 200;
300
+ if (typeof args.maxCols !== "number")
301
+ args.maxCols = 50;
302
+ if (typeof args.maxCellChars !== "number")
303
+ args.maxCellChars = 2000;
304
+ args.maxRows = Math.min(Number(args.maxRows) || 200, 500);
305
+ args.maxCols = Math.min(Number(args.maxCols) || 50, 80);
306
+ args.maxCellChars = Math.min(Number(args.maxCellChars) || 2000, 2000);
307
+ }
308
+ else if (name === "read_xlsx_file") {
309
+ if (typeof args.headerRow !== "number")
310
+ args.headerRow = 1;
311
+ if (typeof args.maxRows !== "number")
312
+ args.maxRows = 200;
313
+ if (typeof args.maxCols !== "number")
314
+ args.maxCols = 50;
315
+ if (typeof args.maxCellChars !== "number")
316
+ args.maxCellChars = 2000;
317
+ args.maxRows = Math.min(Number(args.maxRows) || 200, 500);
318
+ args.maxCols = Math.min(Number(args.maxCols) || 50, 80);
319
+ args.maxCellChars = Math.min(Number(args.maxCellChars) || 2000, 2000);
320
+ }
321
+ else if (name === "read_pdf_text") {
322
+ if (typeof args.pageStart !== "number")
323
+ args.pageStart = 1;
324
+ if (typeof args.pageEnd !== "number")
325
+ args.pageEnd = 3;
326
+ if (typeof args.maxChars !== "number")
327
+ args.maxChars = 12000;
328
+ args.pageStart = Math.max(1, Math.min(Number(args.pageStart) || 1, 500));
329
+ args.pageEnd = Math.max(1, Math.min(Number(args.pageEnd) || 3, 500));
330
+ args.maxChars = Math.min(Number(args.maxChars) || 12000, 40000);
331
+ if (Array.isArray(args.pageNumbers)) {
332
+ // Keep explicit page lists short to avoid huge extracts.
333
+ args.pageNumbers = args.pageNumbers
334
+ .map((n) => Number(n))
335
+ .filter((n) => Number.isFinite(n) && n > 0)
336
+ .slice(0, 20);
337
+ }
338
+ }
339
+ // Reduce model confusion: enforce tool matches the attachment type.
340
+ const allowedByExt = (ext === "csv" && name === "read_csv_file") ||
341
+ (ext === "xlsx" && name === "read_xlsx_file") ||
342
+ (ext === "pdf" && name === "read_pdf_text");
343
+ if (!allowedByExt) {
344
+ contents.push({
345
+ role: "user",
346
+ parts: [{ text: `Wrong tool for FILE_TYPE=${ext}. Use the matching read_* tool.` }],
347
+ });
348
+ continue;
349
+ }
350
+ toolCalls++;
351
+ const toolResult = await tool.handler(args);
352
+ // Provide a bounded JSON summary to the model. Avoid dumping large content.
353
+ const toolResultText = JSON.stringify(toolResult).slice(0, 12000);
354
+ contents.push({
355
+ role: "user",
356
+ parts: [{ text: `TOOL_RESULT ${name}:\n${toolResultText}\n\nContinue. Return JSON only.` }],
357
+ });
358
+ }
359
+ // If we ran out of steps, force a final answer.
360
+ contents.push({
361
+ role: "user",
362
+ parts: [{ text: "Out of steps. Return final answer now as JSON." }],
363
+ });
364
+ const out = await geminiGenerateText(ai, model, contents);
365
+ const parsed = extractJsonObject(out);
366
+ if (parsed?.action === "final") {
367
+ return { answer: String(parsed.answer ?? "").trim(), toolCalls };
368
+ }
369
+ return { answer: String(out ?? "").trim(), toolCalls };
208
370
  }
209
371
  async function loadFixture(fixturePath) {
210
372
  const raw = await readFile(fixturePath, "utf8");
@@ -232,6 +394,8 @@ describe("Capability: GAIA accuracy (file-backed) (LLM-only vs LLM+local tools)"
232
394
  const tasks = fixture.tasks.slice(0, taskLimit);
233
395
  const requestedConcurrency = Number.parseInt(process.env.NODEBENCH_GAIA_CAPABILITY_CONCURRENCY ?? "1", 10);
234
396
  const concurrency = Math.max(1, Math.min(tasks.length, Number.isFinite(requestedConcurrency) ? requestedConcurrency : 1));
397
+ const maxSteps = Number.parseInt(process.env.NODEBENCH_GAIA_CAPABILITY_MAX_STEPS ?? "7", 10);
398
+ const maxToolCalls = Number.parseInt(process.env.NODEBENCH_GAIA_CAPABILITY_MAX_TOOL_CALLS ?? "5", 10);
235
399
  const results = new Array(tasks.length);
236
400
  let nextIndex = 0;
237
401
  const workers = Array.from({ length: concurrency }, () => (async () => {
@@ -246,7 +410,7 @@ describe("Capability: GAIA accuracy (file-backed) (LLM-only vs LLM+local tools)"
246
410
  const base = await baselineAnswer(ai, task);
247
411
  const baseMs = performance.now() - baseStart;
248
412
  const toolsStart = performance.now();
249
- const tools = await toolAugmentedAnswerFromFile(ai, task);
413
+ const tools = await toolAugmentedAnswerFromFile(ai, task, { maxSteps, maxToolCalls });
250
414
  const toolsMs = performance.now() - toolsStart;
251
415
  const baselineCorrect = normalizeAnswer(base) === expected;
252
416
  const toolsCorrect = normalizeAnswer(tools.answer) === expected;
@@ -1 +1 @@
1
- {"version":3,"file":"gaiaCapabilityFilesEval.test.js","sourceRoot":"","sources":["../../src/__tests__/gaiaCapabilityFilesEval.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gaiaCapabilityFilesEval.test.js","sourceRoot":"","sources":["../../src/__tests__/gaiaCapabilityFilesEval.test.ts"],"names":[],"mappings":"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"}