@claude-flow/cli 3.11.0 → 3.12.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.
Files changed (154) hide show
  1. package/dist/src/commands/doctor.d.ts.map +1 -1
  2. package/dist/src/commands/doctor.js +175 -1
  3. package/dist/src/commands/doctor.js.map +1 -1
  4. package/dist/src/commands/eject.d.ts +33 -0
  5. package/dist/src/commands/eject.d.ts.map +1 -0
  6. package/dist/src/commands/eject.js +195 -0
  7. package/dist/src/commands/eject.js.map +1 -0
  8. package/dist/src/commands/hooks.d.ts.map +1 -1
  9. package/dist/src/commands/hooks.js +2 -1
  10. package/dist/src/commands/hooks.js.map +1 -1
  11. package/dist/src/commands/index.d.ts.map +1 -1
  12. package/dist/src/commands/index.js +4 -0
  13. package/dist/src/commands/index.js.map +1 -1
  14. package/dist/src/commands/init.d.ts.map +1 -1
  15. package/dist/src/commands/init.js +3 -0
  16. package/dist/src/commands/init.js.map +1 -1
  17. package/dist/src/commands/metaharness.d.ts +39 -0
  18. package/dist/src/commands/metaharness.d.ts.map +1 -0
  19. package/dist/src/commands/metaharness.js +194 -0
  20. package/dist/src/commands/metaharness.js.map +1 -0
  21. package/dist/src/mcp-client.d.ts.map +1 -1
  22. package/dist/src/mcp-client.js +4 -0
  23. package/dist/src/mcp-client.js.map +1 -1
  24. package/dist/src/mcp-tools/index.d.ts +1 -0
  25. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  26. package/dist/src/mcp-tools/index.js +2 -0
  27. package/dist/src/mcp-tools/index.js.map +1 -1
  28. package/dist/src/mcp-tools/metaharness-tools.d.ts +31 -0
  29. package/dist/src/mcp-tools/metaharness-tools.d.ts.map +1 -0
  30. package/dist/src/mcp-tools/metaharness-tools.js +372 -0
  31. package/dist/src/mcp-tools/metaharness-tools.js.map +1 -0
  32. package/dist/src/plugins/store/discovery.d.ts.map +1 -1
  33. package/dist/src/plugins/store/discovery.js +3 -0
  34. package/dist/src/plugins/store/discovery.js.map +1 -1
  35. package/dist/src/plugins/store/types.d.ts +6 -1
  36. package/dist/src/plugins/store/types.d.ts.map +1 -1
  37. package/dist/src/ruvector/model-router.d.ts.map +1 -1
  38. package/dist/src/ruvector/model-router.js +37 -0
  39. package/dist/src/ruvector/model-router.js.map +1 -1
  40. package/dist/src/ruvector/router-parallel-recorder.d.ts +127 -0
  41. package/dist/src/ruvector/router-parallel-recorder.d.ts.map +1 -0
  42. package/dist/src/ruvector/router-parallel-recorder.js +183 -0
  43. package/dist/src/ruvector/router-parallel-recorder.js.map +1 -0
  44. package/dist/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +11 -9
  46. package/dist/src/benchmarks/capability-tasks.d.ts +0 -126
  47. package/dist/src/benchmarks/capability-tasks.d.ts.map +0 -1
  48. package/dist/src/benchmarks/capability-tasks.js +0 -147
  49. package/dist/src/benchmarks/capability-tasks.js.map +0 -1
  50. package/dist/src/benchmarks/gaia-agent-contrastive.d.ts +0 -53
  51. package/dist/src/benchmarks/gaia-agent-contrastive.d.ts.map +0 -1
  52. package/dist/src/benchmarks/gaia-agent-contrastive.js +0 -177
  53. package/dist/src/benchmarks/gaia-agent-contrastive.js.map +0 -1
  54. package/dist/src/benchmarks/gaia-agent-gemini.d.ts +0 -51
  55. package/dist/src/benchmarks/gaia-agent-gemini.d.ts.map +0 -1
  56. package/dist/src/benchmarks/gaia-agent-gemini.js +0 -352
  57. package/dist/src/benchmarks/gaia-agent-gemini.js.map +0 -1
  58. package/dist/src/benchmarks/gaia-claude-p.d.ts +0 -105
  59. package/dist/src/benchmarks/gaia-claude-p.d.ts.map +0 -1
  60. package/dist/src/benchmarks/gaia-claude-p.js +0 -269
  61. package/dist/src/benchmarks/gaia-claude-p.js.map +0 -1
  62. package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts +0 -20
  63. package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts.map +0 -1
  64. package/dist/src/benchmarks/gaia-claude-p.smoke.js +0 -168
  65. package/dist/src/benchmarks/gaia-claude-p.smoke.js.map +0 -1
  66. package/dist/src/benchmarks/gaia-codeagent-runner.py +0 -556
  67. package/dist/src/benchmarks/gaia-codeagent.d.ts +0 -129
  68. package/dist/src/benchmarks/gaia-codeagent.d.ts.map +0 -1
  69. package/dist/src/benchmarks/gaia-codeagent.js +0 -590
  70. package/dist/src/benchmarks/gaia-codeagent.js.map +0 -1
  71. package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts +0 -33
  72. package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts.map +0 -1
  73. package/dist/src/benchmarks/gaia-codeagent.smoke.js +0 -241
  74. package/dist/src/benchmarks/gaia-codeagent.smoke.js.map +0 -1
  75. package/dist/src/benchmarks/gaia-dag-pilot.d.ts +0 -22
  76. package/dist/src/benchmarks/gaia-dag-pilot.d.ts.map +0 -1
  77. package/dist/src/benchmarks/gaia-dag-pilot.js +0 -158
  78. package/dist/src/benchmarks/gaia-dag-pilot.js.map +0 -1
  79. package/dist/src/benchmarks/gaia-dag.d.ts +0 -110
  80. package/dist/src/benchmarks/gaia-dag.d.ts.map +0 -1
  81. package/dist/src/benchmarks/gaia-dag.js +0 -658
  82. package/dist/src/benchmarks/gaia-dag.js.map +0 -1
  83. package/dist/src/benchmarks/gaia-dag.smoke.d.ts +0 -21
  84. package/dist/src/benchmarks/gaia-dag.smoke.d.ts.map +0 -1
  85. package/dist/src/benchmarks/gaia-dag.smoke.js +0 -290
  86. package/dist/src/benchmarks/gaia-dag.smoke.js.map +0 -1
  87. package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts +0 -17
  88. package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts.map +0 -1
  89. package/dist/src/benchmarks/gaia-ensemble-pilot.js +0 -106
  90. package/dist/src/benchmarks/gaia-ensemble-pilot.js.map +0 -1
  91. package/dist/src/benchmarks/gaia-ensemble.d.ts +0 -103
  92. package/dist/src/benchmarks/gaia-ensemble.d.ts.map +0 -1
  93. package/dist/src/benchmarks/gaia-ensemble.js +0 -462
  94. package/dist/src/benchmarks/gaia-ensemble.js.map +0 -1
  95. package/dist/src/benchmarks/gaia-gemini-pilot.d.ts +0 -17
  96. package/dist/src/benchmarks/gaia-gemini-pilot.d.ts.map +0 -1
  97. package/dist/src/benchmarks/gaia-gemini-pilot.js +0 -168
  98. package/dist/src/benchmarks/gaia-gemini-pilot.js.map +0 -1
  99. package/dist/src/benchmarks/gaia-mode-router.d.ts +0 -67
  100. package/dist/src/benchmarks/gaia-mode-router.d.ts.map +0 -1
  101. package/dist/src/benchmarks/gaia-mode-router.js +0 -126
  102. package/dist/src/benchmarks/gaia-mode-router.js.map +0 -1
  103. package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts +0 -15
  104. package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts.map +0 -1
  105. package/dist/src/benchmarks/gaia-mode-router.smoke.js +0 -131
  106. package/dist/src/benchmarks/gaia-mode-router.smoke.js.map +0 -1
  107. package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts +0 -24
  108. package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts.map +0 -1
  109. package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js +0 -276
  110. package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js.map +0 -1
  111. package/dist/src/benchmarks/gaia-tools/image_describe.d.ts +0 -45
  112. package/dist/src/benchmarks/gaia-tools/image_describe.d.ts.map +0 -1
  113. package/dist/src/benchmarks/gaia-tools/image_describe.js +0 -222
  114. package/dist/src/benchmarks/gaia-tools/image_describe.js.map +0 -1
  115. package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts +0 -24
  116. package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts.map +0 -1
  117. package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js +0 -169
  118. package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js.map +0 -1
  119. package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts +0 -27
  120. package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts.map +0 -1
  121. package/dist/src/benchmarks/gaia-tools/pdf_read.js +0 -226
  122. package/dist/src/benchmarks/gaia-tools/pdf_read.js.map +0 -1
  123. package/dist/src/benchmarks/gaia-tools/python_exec.d.ts +0 -31
  124. package/dist/src/benchmarks/gaia-tools/python_exec.d.ts.map +0 -1
  125. package/dist/src/benchmarks/gaia-tools/python_exec.js +0 -94
  126. package/dist/src/benchmarks/gaia-tools/python_exec.js.map +0 -1
  127. package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts +0 -13
  128. package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts.map +0 -1
  129. package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js +0 -98
  130. package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js.map +0 -1
  131. package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts +0 -52
  132. package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts.map +0 -1
  133. package/dist/src/benchmarks/gaia-tools/visit_webpage.js +0 -304
  134. package/dist/src/benchmarks/gaia-tools/visit_webpage.js.map +0 -1
  135. package/dist/src/benchmarks/gaia-tools/web_browse.d.ts +0 -61
  136. package/dist/src/benchmarks/gaia-tools/web_browse.d.ts.map +0 -1
  137. package/dist/src/benchmarks/gaia-tools/web_browse.js +0 -217
  138. package/dist/src/benchmarks/gaia-tools/web_browse.js.map +0 -1
  139. package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts +0 -26
  140. package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts.map +0 -1
  141. package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js +0 -152
  142. package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js.map +0 -1
  143. package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts +0 -24
  144. package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts.map +0 -1
  145. package/dist/src/benchmarks/gaia-tools/web_search.smoke.js +0 -311
  146. package/dist/src/benchmarks/gaia-tools/web_search.smoke.js.map +0 -1
  147. package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts +0 -25
  148. package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts.map +0 -1
  149. package/dist/src/benchmarks/gaia-visit-webpage.smoke.js +0 -304
  150. package/dist/src/benchmarks/gaia-visit-webpage.smoke.js.map +0 -1
  151. package/dist/src/commands/performance-capability.d.ts +0 -30
  152. package/dist/src/commands/performance-capability.d.ts.map +0 -1
  153. package/dist/src/commands/performance-capability.js +0 -349
  154. package/dist/src/commands/performance-capability.js.map +0 -1
@@ -1,352 +0,0 @@
1
- /**
2
- * GAIA Agent — Gemini 2.5 Pro Thinking adapter (Phase 2 pilot)
3
- *
4
- * Adapts the existing GAIA tool catalogue to Google's generateContent API,
5
- * translating Anthropic tool_use ↔ Gemini functionCall/functionResponse.
6
- *
7
- * Loop algorithm mirrors gaia-agent.ts:
8
- * 1. Build initial contents array with system instruction + first user turn.
9
- * 2. Call Gemini generateContent with functionDeclarations.
10
- * 3. On functionCall parts: execute tools, append functionResponse, repeat.
11
- * 4. On text-only response: scan for FINAL_ANSWER pattern.
12
- * 5. On maxTurns: return timedOut result.
13
- *
14
- * Gemini 2.5 Pro pricing (2026-05-28, per million tokens):
15
- * Input: $1.25 (≤200k tokens), $2.50 (>200k)
16
- * Output: $10.00 (≤200k tokens), $15.00 (>200k)
17
- * Thinking tokens are billed as output tokens.
18
- *
19
- * Cost gate for pilot: ≤$0.12 per question average.
20
- * Expected per-question cost at ~10k input + ~2k output: ~$0.032 — well within gate.
21
- *
22
- * Refs: ADR-133, ADR-135, #2156 Phase 2
23
- */
24
- import { execSync } from 'node:child_process';
25
- import * as fs from 'node:fs';
26
- import * as path from 'node:path';
27
- import { createDefaultToolCatalogue, } from './gaia-tools/index.js';
28
- // ---------------------------------------------------------------------------
29
- // Constants
30
- // ---------------------------------------------------------------------------
31
- const GEMINI_API_BASE = 'https://generativelanguage.googleapis.com/v1beta/models';
32
- export const DEFAULT_GEMINI_MODEL = 'gemini-2.5-pro';
33
- const DEFAULT_MAX_TURNS = 12;
34
- const DEFAULT_MAX_TOKENS_PER_TURN = 8192;
35
- const DEFAULT_PER_TURN_TIMEOUT_MS = 120_000;
36
- /** Gemini 2.5 Pro pricing (USD per million tokens, ≤200k bracket). */
37
- const GEMINI_INPUT_COST_PER_M = 1.25;
38
- const GEMINI_OUTPUT_COST_PER_M = 10.00;
39
- const FINAL_ANSWER_RE = /FINAL_ANSWER:\s*(.+)/i;
40
- // ---------------------------------------------------------------------------
41
- // API key resolution
42
- // ---------------------------------------------------------------------------
43
- export function resolveGeminiApiKey(apiKey) {
44
- if (apiKey && apiKey.trim())
45
- return apiKey.trim();
46
- const envKey = process.env['GOOGLE_AI_API_KEY'];
47
- if (envKey && envKey.trim())
48
- return envKey.trim();
49
- try {
50
- const out = execSync('gcloud secrets versions access latest --secret=GOOGLE_AI_API_KEY --project=ruv-dev 2>/dev/null', { encoding: 'utf-8', timeout: 10_000 }).trim();
51
- if (out)
52
- return out;
53
- }
54
- catch {
55
- /* fall through */
56
- }
57
- throw new Error('GOOGLE_AI_API_KEY not found. Set the env var or store in GCP Secret Manager.');
58
- }
59
- function toGeminiType(anthropicType) {
60
- const map = {
61
- string: 'STRING',
62
- number: 'NUMBER',
63
- integer: 'INTEGER',
64
- boolean: 'BOOLEAN',
65
- array: 'ARRAY',
66
- object: 'OBJECT',
67
- };
68
- return map[anthropicType.toLowerCase()] ?? 'STRING';
69
- }
70
- function translateToolDef(def) {
71
- const props = {};
72
- for (const [key, val] of Object.entries(def.input_schema.properties)) {
73
- props[key] = { type: toGeminiType(val.type), description: val.description };
74
- }
75
- return {
76
- name: def.name,
77
- description: def.description,
78
- parameters: {
79
- type: 'OBJECT',
80
- properties: props,
81
- required: def.input_schema.required ?? [],
82
- },
83
- };
84
- }
85
- // ---------------------------------------------------------------------------
86
- // Single Gemini API call
87
- // ---------------------------------------------------------------------------
88
- async function callGemini(apiKey, model, contents, systemInstruction, functionDeclarations, maxTokens, timeoutMs) {
89
- const url = `${GEMINI_API_BASE}/${model}:generateContent?key=${encodeURIComponent(apiKey)}`;
90
- const requestBody = {
91
- contents,
92
- systemInstruction: { parts: [{ text: systemInstruction }] },
93
- generationConfig: {
94
- maxOutputTokens: maxTokens,
95
- thinkingConfig: { thinkingBudget: 8192 },
96
- },
97
- };
98
- if (functionDeclarations.length > 0) {
99
- requestBody['tools'] = [{ functionDeclarations }];
100
- requestBody['toolConfig'] = { functionCallingConfig: { mode: 'AUTO' } };
101
- }
102
- const controller = new AbortController();
103
- const timer = setTimeout(() => controller.abort(), timeoutMs);
104
- let res;
105
- try {
106
- res = await fetch(url, {
107
- method: 'POST',
108
- headers: { 'Content-Type': 'application/json' },
109
- body: JSON.stringify(requestBody),
110
- signal: controller.signal,
111
- });
112
- }
113
- finally {
114
- clearTimeout(timer);
115
- }
116
- if (!res.ok) {
117
- const errText = await res.text().catch(() => '<unreadable>');
118
- throw new Error(`Gemini API ${res.status}: ${errText.slice(0, 400)}`);
119
- }
120
- return (await res.json());
121
- }
122
- // ---------------------------------------------------------------------------
123
- // Build initial contents (handles image attachments inline)
124
- // ---------------------------------------------------------------------------
125
- function buildInitialContents(question) {
126
- const questionText = question.question;
127
- const parts = [];
128
- if (question.file_path) {
129
- const ext = path.extname(question.file_path).toLowerCase();
130
- const imageExts = ['.png', '.jpg', '.jpeg', '.gif', '.webp'];
131
- if (imageExts.includes(ext)) {
132
- try {
133
- const buf = fs.readFileSync(question.file_path);
134
- const mediaTypeMap = {
135
- '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg',
136
- '.gif': 'image/gif', '.webp': 'image/webp',
137
- };
138
- parts.push({ text: questionText });
139
- // Gemini inline image part
140
- parts.push({
141
- inlineData: {
142
- mimeType: mediaTypeMap[ext] ?? 'image/png',
143
- data: buf.toString('base64'),
144
- },
145
- });
146
- }
147
- catch {
148
- parts.push({
149
- text: questionText + `\n\nAttached file: ${question.file_path}. Call file_read to read it.`,
150
- });
151
- }
152
- }
153
- else {
154
- parts.push({
155
- text: questionText + `\n\nThis question has an attached file. Call file_read with path="${question.file_path}" to read it, then answer.`,
156
- });
157
- }
158
- }
159
- else {
160
- parts.push({ text: questionText });
161
- }
162
- return [{ role: 'user', parts }];
163
- }
164
- // ---------------------------------------------------------------------------
165
- // Extract FINAL_ANSWER from model response text
166
- // ---------------------------------------------------------------------------
167
- function extractFinalAnswer(candidate) {
168
- if (!candidate?.content?.parts)
169
- return null;
170
- for (const part of candidate.content.parts) {
171
- if (part.thought)
172
- continue;
173
- if (part.text) {
174
- const match = FINAL_ANSWER_RE.exec(part.text);
175
- if (match?.[1])
176
- return match[1].trim();
177
- }
178
- }
179
- return null;
180
- }
181
- // ---------------------------------------------------------------------------
182
- // Check if response has any functionCall parts
183
- // ---------------------------------------------------------------------------
184
- function getFunctionCalls(candidate) {
185
- if (!candidate?.content?.parts)
186
- return [];
187
- return candidate.content.parts
188
- .filter((p) => !!p.functionCall)
189
- .map((p) => p.functionCall);
190
- }
191
- // ---------------------------------------------------------------------------
192
- // Main agent loop
193
- // ---------------------------------------------------------------------------
194
- export async function runGeminiAgent(question, options = {}) {
195
- const { model = DEFAULT_GEMINI_MODEL, maxTurns = DEFAULT_MAX_TURNS, maxTokensPerTurn = DEFAULT_MAX_TOKENS_PER_TURN, perTurnTimeoutMs = DEFAULT_PER_TURN_TIMEOUT_MS, apiKey: suppliedKey, catalogue: suppliedCatalogue, } = options;
196
- const wallStart = Date.now();
197
- const apiKey = resolveGeminiApiKey(suppliedKey);
198
- const catalogue = suppliedCatalogue ?? createDefaultToolCatalogue();
199
- const functionDeclarations = catalogue.map((t) => translateToolDef(t.definition));
200
- const systemInstruction = [
201
- 'You are a precise question-answering agent. Answer the user\'s question using the tools available.',
202
- '',
203
- 'RULES:',
204
- '1. Use tools when you need information you do not have with certainty.',
205
- '2. When you have a final answer, output it on its own line in this EXACT format:',
206
- ' FINAL_ANSWER: <your answer here>',
207
- '3. Keep answers concise. For numbers, give just the number. For names, give just the name.',
208
- '4. Do not include units unless the question specifically asks for them.',
209
- '5. MANDATORY: You MUST ALWAYS end your final response with a FINAL_ANSWER line.',
210
- '6. If the question text appears garbled or reversed, try to interpret it before concluding you cannot answer.',
211
- ].join('\n');
212
- const toolCallsByName = {};
213
- let totalInputTokens = 0;
214
- let totalOutputTokens = 0;
215
- let totalThinkingTokens = 0;
216
- const contents = buildInitialContents(question);
217
- let turns = 0;
218
- for (let turn = 0; turn < maxTurns; turn++) {
219
- turns = turn + 1;
220
- let resp;
221
- try {
222
- resp = await callGemini(apiKey, model, contents, systemInstruction, functionDeclarations, maxTokensPerTurn, perTurnTimeoutMs);
223
- }
224
- catch (err) {
225
- return {
226
- questionId: question.task_id,
227
- finalAnswer: null,
228
- turns,
229
- toolCallsByName,
230
- totalInputTokens,
231
- totalOutputTokens,
232
- totalThinkingTokens,
233
- wallMs: Date.now() - wallStart,
234
- estimatedCostUsd: estimateCost(totalInputTokens, totalOutputTokens),
235
- error: err instanceof Error ? err.message : String(err),
236
- };
237
- }
238
- if (resp.error) {
239
- return {
240
- questionId: question.task_id,
241
- finalAnswer: null,
242
- turns,
243
- toolCallsByName,
244
- totalInputTokens,
245
- totalOutputTokens,
246
- totalThinkingTokens,
247
- wallMs: Date.now() - wallStart,
248
- estimatedCostUsd: estimateCost(totalInputTokens, totalOutputTokens),
249
- error: `Gemini error ${resp.error.code}: ${resp.error.message}`,
250
- };
251
- }
252
- // Accumulate token counts
253
- const usage = resp.usageMetadata ?? {};
254
- totalInputTokens += usage.promptTokenCount ?? 0;
255
- totalOutputTokens += usage.candidatesTokenCount ?? 0;
256
- totalThinkingTokens += usage.thoughtsTokenCount ?? 0;
257
- const candidate = resp.candidates?.[0];
258
- const functionCalls = getFunctionCalls(candidate);
259
- if (functionCalls.length > 0) {
260
- // Append model turn (with functionCall parts)
261
- if (candidate?.content) {
262
- contents.push({ role: 'model', parts: candidate.content.parts });
263
- }
264
- // Execute all function calls and build functionResponse parts
265
- const responseParts = await Promise.all(functionCalls.map(async (call) => {
266
- toolCallsByName[call.name] = (toolCallsByName[call.name] ?? 0) + 1;
267
- const tool = catalogue.find((t) => t.name === call.name);
268
- if (!tool) {
269
- return {
270
- functionResponse: {
271
- name: call.name,
272
- response: { error: `Unknown tool "${call.name}"` },
273
- },
274
- };
275
- }
276
- try {
277
- const output = await tool.execute(call.args);
278
- return {
279
- functionResponse: {
280
- name: call.name,
281
- response: { output },
282
- },
283
- };
284
- }
285
- catch (err) {
286
- return {
287
- functionResponse: {
288
- name: call.name,
289
- response: { error: err instanceof Error ? err.message : String(err) },
290
- },
291
- };
292
- }
293
- }));
294
- contents.push({ role: 'user', parts: responseParts });
295
- continue;
296
- }
297
- // No function calls — extract final answer
298
- const finalAnswer = extractFinalAnswer(candidate);
299
- return {
300
- questionId: question.task_id,
301
- finalAnswer,
302
- turns,
303
- toolCallsByName,
304
- totalInputTokens,
305
- totalOutputTokens,
306
- totalThinkingTokens,
307
- wallMs: Date.now() - wallStart,
308
- estimatedCostUsd: estimateCost(totalInputTokens, totalOutputTokens + totalThinkingTokens),
309
- };
310
- }
311
- // Exhausted maxTurns
312
- return {
313
- questionId: question.task_id,
314
- finalAnswer: null,
315
- turns,
316
- toolCallsByName,
317
- totalInputTokens,
318
- totalOutputTokens,
319
- totalThinkingTokens,
320
- wallMs: Date.now() - wallStart,
321
- estimatedCostUsd: estimateCost(totalInputTokens, totalOutputTokens + totalThinkingTokens),
322
- timedOut: true,
323
- };
324
- }
325
- function estimateCost(inputTokens, outputTokens) {
326
- return ((inputTokens / 1_000_000) * GEMINI_INPUT_COST_PER_M +
327
- (outputTokens / 1_000_000) * GEMINI_OUTPUT_COST_PER_M);
328
- }
329
- // ---------------------------------------------------------------------------
330
- // Answer matching (same as gaia-agent.ts)
331
- // ---------------------------------------------------------------------------
332
- export function isGeminiAnswerCorrect(modelAnswer, expected) {
333
- if (!modelAnswer)
334
- return false;
335
- const norm = (s) => s.trim().toLowerCase();
336
- const normModel = norm(modelAnswer);
337
- const normExpected = norm(expected);
338
- if (normModel === normExpected)
339
- return true;
340
- if (normModel.includes(normExpected))
341
- return true;
342
- if (normExpected.includes(normModel))
343
- return true;
344
- const numModel = parseFloat(normModel.replace(/[^0-9.\-]/g, ''));
345
- const numExpected = parseFloat(normExpected.replace(/[^0-9.\-]/g, ''));
346
- if (!Number.isNaN(numModel) && !Number.isNaN(numExpected) &&
347
- numExpected !== 0 &&
348
- Math.abs((numModel - numExpected) / numExpected) < 0.01)
349
- return true;
350
- return false;
351
- }
352
- //# sourceMappingURL=gaia-agent-gemini.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gaia-agent-gemini.js","sourceRoot":"","sources":["../../../src/benchmarks/gaia-agent-gemini.ts"],"names":[],"mappings":"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"}
@@ -1,105 +0,0 @@
1
- /**
2
- * GAIA Claude-p Wrapper — iter 54 (#2156)
3
- *
4
- * Delegates each GAIA question to `claude -p` (Claude Code headless mode),
5
- * which gives us WebSearch, WebFetch, Read (multimodal incl. PDF/DOCX/images),
6
- * and Bash (Python execution) for free — the same tools HAL uses.
7
- *
8
- * Why this approach over a native TS CodeAgent:
9
- * - HAL gaps vs ruflo were: visit_webpage, file reading (PDF/DOCX/XLSX/images),
10
- * Python execution. Claude Code's built-in tools solve ALL of these.
11
- * - No wheel-reinvention: battle-tested tool infra, native multimodal, proper
12
- * tool-budget management, Anthropic WebSearch API.
13
- * - Baseline: 24/53 (45.3%). Target: ≥45/53 to surpass HAL's 82.07%.
14
- *
15
- * SECURITY NOTE on --dangerously-skip-permissions:
16
- * This flag is ONLY used inside the GAIA harness context, which is a sandboxed
17
- * benchmark evaluation environment. GAIA questions have no real-world
18
- * side effects — they are read-only research questions. The flag lets Claude Code
19
- * use its tools (WebSearch, WebFetch, Read, Bash) without per-tool permission
20
- * prompts, which is required for unattended benchmark execution. It MUST NOT
21
- * be used in production workflows where Claude Code could affect real systems.
22
- *
23
- * JSON output format from `claude -p --output-format json`:
24
- * {
25
- * type: "result",
26
- * subtype: "success" | "error_max_budget_usd" | ...,
27
- * is_error: boolean,
28
- * result: string, // final assistant message text
29
- * total_cost_usd: number,
30
- * duration_ms: number,
31
- * num_turns: number,
32
- * ...
33
- * }
34
- *
35
- * Refs: ADR-138 (reference, NOT implemented), iter 54, #2156
36
- */
37
- import type { GaiaQuestion } from './gaia-loader.js';
38
- /** Default model for claude -p GAIA runs. Sonnet for quality parity with HAL. */
39
- export declare const CLAUDE_P_DEFAULT_MODEL = "claude-sonnet-4-6";
40
- /** Per-question budget cap (USD). HAL uses Sonnet 4.5 so $0.30 headroom is safe. */
41
- export declare const CLAUDE_P_PER_QUESTION_BUDGET_USD = 0.3;
42
- /** Subprocess timeout: 5 minutes per question. */
43
- export declare const CLAUDE_P_TIMEOUT_MS: number;
44
- export interface ClaudePResult {
45
- /** The extracted answer, or null if extraction failed. */
46
- finalAnswer: string | null;
47
- /** Raw result text from claude -p. */
48
- rawResult: string;
49
- /** Whether claude -p exited with an error. */
50
- isError: boolean;
51
- /** claude -p's reported error message (if any). */
52
- errorMessage?: string;
53
- /** Actual cost reported by claude -p. */
54
- costUsd: number;
55
- /** Wall-clock time in ms. */
56
- wallMs: number;
57
- /** Number of turns claude -p used. */
58
- numTurns: number;
59
- /** claude -p stop reason. */
60
- stopReason?: string;
61
- }
62
- export interface ClaudePOptions {
63
- /** Model ID (default: CLAUDE_P_DEFAULT_MODEL). */
64
- model?: string;
65
- /** Per-question budget cap in USD (default: CLAUDE_P_PER_QUESTION_BUDGET_USD). */
66
- budgetUsd?: number;
67
- /** Timeout in ms (default: CLAUDE_P_TIMEOUT_MS). */
68
- timeoutMs?: number;
69
- /** Absolute path to the claude binary (default: resolved from $PATH). */
70
- claudeBin?: string;
71
- }
72
- /**
73
- * Build the prompt sent to claude -p for a GAIA question.
74
- *
75
- * Includes the question text, optional attachment path, and precise instructions
76
- * for using available tools and producing FINAL_ANSWER: in the expected format.
77
- */
78
- export declare function buildClaudePPrompt(question: GaiaQuestion): string;
79
- /**
80
- * Run a single GAIA question via `claude -p` headless mode.
81
- *
82
- * Spawns a subprocess, captures JSON output, extracts the final answer.
83
- */
84
- export declare function runGaiaQuestionViaClaudeP(question: GaiaQuestion, options?: ClaudePOptions): Promise<ClaudePResult>;
85
- /**
86
- * Extract the FINAL_ANSWER value from claude -p's result text.
87
- *
88
- * Primary: regex match on `FINAL_ANSWER: <value>`
89
- * Fallback: last non-empty line if no FINAL_ANSWER marker found.
90
- */
91
- export declare function extractFinalAnswer(text: string): string | null;
92
- export interface ClaudePBatchOptions extends ClaudePOptions {
93
- /** Max parallel questions (default: 2 — claude -p uses significant local resources). */
94
- concurrency?: number;
95
- /** Callback for per-question progress logging. */
96
- onProgress?: (idx: number, total: number, questionId: string, answer: string | null, costUsd: number) => void;
97
- }
98
- /**
99
- * Run a batch of GAIA questions through the claude -p wrapper.
100
- *
101
- * Concurrency is limited (default 2) because each claude -p subprocess
102
- * is heavyweight — it starts a full Claude Code session with LSP etc.
103
- */
104
- export declare function runGaiaQuestionsBatchViaClaudeP(questions: GaiaQuestion[], options?: ClaudePBatchOptions): Promise<ClaudePResult[]>;
105
- //# sourceMappingURL=gaia-claude-p.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gaia-claude-p.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/gaia-claude-p.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMrD,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D,oFAAoF;AACpF,eAAO,MAAM,gCAAgC,MAAO,CAAC;AAErD,kDAAkD;AAClD,eAAO,MAAM,mBAAmB,QAAgB,CAAC;AASjD,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAiCjE;AAMD;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAsFxB;AA4ED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB9D;AAMD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/G;AAED;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,aAAa,EAAE,CAAC,CAqB1B"}