@claude-flow/cli 3.11.0 → 3.12.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/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +175 -1
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/eject.d.ts +33 -0
- package/dist/src/commands/eject.d.ts.map +1 -0
- package/dist/src/commands/eject.js +195 -0
- package/dist/src/commands/eject.js.map +1 -0
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +2 -1
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +4 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +3 -0
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/metaharness.d.ts +39 -0
- package/dist/src/commands/metaharness.d.ts.map +1 -0
- package/dist/src/commands/metaharness.js +194 -0
- package/dist/src/commands/metaharness.js.map +1 -0
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +4 -0
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +1 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +2 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/metaharness-tools.d.ts +31 -0
- package/dist/src/mcp-tools/metaharness-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/metaharness-tools.js +372 -0
- package/dist/src/mcp-tools/metaharness-tools.js.map +1 -0
- package/dist/src/plugins/store/discovery.d.ts.map +1 -1
- package/dist/src/plugins/store/discovery.js +3 -0
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/plugins/store/types.d.ts +6 -1
- package/dist/src/plugins/store/types.d.ts.map +1 -1
- package/dist/src/ruvector/model-router.d.ts.map +1 -1
- package/dist/src/ruvector/model-router.js +37 -0
- package/dist/src/ruvector/model-router.js.map +1 -1
- package/dist/src/ruvector/router-parallel-recorder.d.ts +127 -0
- package/dist/src/ruvector/router-parallel-recorder.d.ts.map +1 -0
- package/dist/src/ruvector/router-parallel-recorder.js +183 -0
- package/dist/src/ruvector/router-parallel-recorder.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -10
- package/plugins/ruflo-metaharness/.claude-flow/data/pending-insights.jsonl +1 -0
- package/plugins/ruflo-metaharness/.claude-flow/neural/stats.json +6 -0
- package/plugins/ruflo-metaharness/.claude-plugin/plugin.json +32 -0
- package/plugins/ruflo-metaharness/README.md +64 -0
- package/plugins/ruflo-metaharness/agents/metaharness-architect.md +58 -0
- package/plugins/ruflo-metaharness/commands/ruflo-metaharness.md +46 -0
- package/plugins/ruflo-metaharness/scripts/_harness.mjs +261 -0
- package/plugins/ruflo-metaharness/scripts/_similarity.mjs +161 -0
- package/plugins/ruflo-metaharness/scripts/_spike-similarity.mjs +223 -0
- package/plugins/ruflo-metaharness/scripts/audit-list.mjs +158 -0
- package/plugins/ruflo-metaharness/scripts/audit-trend.mjs +272 -0
- package/plugins/ruflo-metaharness/scripts/bench-parse-mcp-scan.mjs +146 -0
- package/plugins/ruflo-metaharness/scripts/bench-recordpair-overhead.mjs +186 -0
- package/plugins/ruflo-metaharness/scripts/bench-similarity.mjs +177 -0
- package/plugins/ruflo-metaharness/scripts/drift-from-history.mjs +363 -0
- package/plugins/ruflo-metaharness/scripts/genome.mjs +80 -0
- package/plugins/ruflo-metaharness/scripts/mcp-scan.mjs +111 -0
- package/plugins/ruflo-metaharness/scripts/mint.mjs +119 -0
- package/plugins/ruflo-metaharness/scripts/oia-audit.mjs +228 -0
- package/plugins/ruflo-metaharness/scripts/router-parallel-analyze.mjs +250 -0
- package/plugins/ruflo-metaharness/scripts/score.mjs +92 -0
- package/plugins/ruflo-metaharness/scripts/similarity.mjs +158 -0
- package/plugins/ruflo-metaharness/scripts/smoke.sh +2268 -0
- package/plugins/ruflo-metaharness/scripts/test-graceful-degradation.mjs +141 -0
- package/plugins/ruflo-metaharness/scripts/test-mcp-tools.mjs +437 -0
- package/plugins/ruflo-metaharness/scripts/test-parallel-pipeline.mjs +204 -0
- package/plugins/ruflo-metaharness/scripts/test-pipeline-roundtrip.mjs +586 -0
- package/plugins/ruflo-metaharness/scripts/test-similarity.mjs +334 -0
- package/plugins/ruflo-metaharness/scripts/test-with-openrouter.mjs +229 -0
- package/plugins/ruflo-metaharness/scripts/threat-model.mjs +59 -0
- package/plugins/ruflo-metaharness/skills/harness-drift-from-history/SKILL.md +65 -0
- package/plugins/ruflo-metaharness/skills/harness-genome/SKILL.md +54 -0
- package/plugins/ruflo-metaharness/skills/harness-mcp-scan/SKILL.md +47 -0
- package/plugins/ruflo-metaharness/skills/harness-mint/SKILL.md +72 -0
- package/plugins/ruflo-metaharness/skills/harness-oia-audit/SKILL.md +79 -0
- package/plugins/ruflo-metaharness/skills/harness-score/SKILL.md +66 -0
- package/plugins/ruflo-metaharness/skills/harness-similarity/SKILL.md +67 -0
- package/plugins/ruflo-metaharness/skills/harness-threat-model/SKILL.md +39 -0
- package/dist/src/benchmarks/capability-tasks.d.ts +0 -126
- package/dist/src/benchmarks/capability-tasks.d.ts.map +0 -1
- package/dist/src/benchmarks/capability-tasks.js +0 -147
- package/dist/src/benchmarks/capability-tasks.js.map +0 -1
- package/dist/src/benchmarks/gaia-agent-contrastive.d.ts +0 -53
- package/dist/src/benchmarks/gaia-agent-contrastive.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-agent-contrastive.js +0 -177
- package/dist/src/benchmarks/gaia-agent-contrastive.js.map +0 -1
- package/dist/src/benchmarks/gaia-agent-gemini.d.ts +0 -51
- package/dist/src/benchmarks/gaia-agent-gemini.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-agent-gemini.js +0 -352
- package/dist/src/benchmarks/gaia-agent-gemini.js.map +0 -1
- package/dist/src/benchmarks/gaia-claude-p.d.ts +0 -105
- package/dist/src/benchmarks/gaia-claude-p.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-claude-p.js +0 -269
- package/dist/src/benchmarks/gaia-claude-p.js.map +0 -1
- package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts +0 -20
- package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-claude-p.smoke.js +0 -168
- package/dist/src/benchmarks/gaia-claude-p.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-codeagent-runner.py +0 -556
- package/dist/src/benchmarks/gaia-codeagent.d.ts +0 -129
- package/dist/src/benchmarks/gaia-codeagent.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-codeagent.js +0 -590
- package/dist/src/benchmarks/gaia-codeagent.js.map +0 -1
- package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts +0 -33
- package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-codeagent.smoke.js +0 -241
- package/dist/src/benchmarks/gaia-codeagent.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-dag-pilot.d.ts +0 -22
- package/dist/src/benchmarks/gaia-dag-pilot.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-dag-pilot.js +0 -158
- package/dist/src/benchmarks/gaia-dag-pilot.js.map +0 -1
- package/dist/src/benchmarks/gaia-dag.d.ts +0 -110
- package/dist/src/benchmarks/gaia-dag.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-dag.js +0 -658
- package/dist/src/benchmarks/gaia-dag.js.map +0 -1
- package/dist/src/benchmarks/gaia-dag.smoke.d.ts +0 -21
- package/dist/src/benchmarks/gaia-dag.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-dag.smoke.js +0 -290
- package/dist/src/benchmarks/gaia-dag.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts +0 -17
- package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-ensemble-pilot.js +0 -106
- package/dist/src/benchmarks/gaia-ensemble-pilot.js.map +0 -1
- package/dist/src/benchmarks/gaia-ensemble.d.ts +0 -103
- package/dist/src/benchmarks/gaia-ensemble.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-ensemble.js +0 -462
- package/dist/src/benchmarks/gaia-ensemble.js.map +0 -1
- package/dist/src/benchmarks/gaia-gemini-pilot.d.ts +0 -17
- package/dist/src/benchmarks/gaia-gemini-pilot.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-gemini-pilot.js +0 -168
- package/dist/src/benchmarks/gaia-gemini-pilot.js.map +0 -1
- package/dist/src/benchmarks/gaia-mode-router.d.ts +0 -67
- package/dist/src/benchmarks/gaia-mode-router.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-mode-router.js +0 -126
- package/dist/src/benchmarks/gaia-mode-router.js.map +0 -1
- package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts +0 -15
- package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-mode-router.smoke.js +0 -131
- package/dist/src/benchmarks/gaia-mode-router.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts +0 -24
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js +0 -276
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/image_describe.d.ts +0 -45
- package/dist/src/benchmarks/gaia-tools/image_describe.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/image_describe.js +0 -222
- package/dist/src/benchmarks/gaia-tools/image_describe.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts +0 -24
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js +0 -169
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts +0 -27
- package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/pdf_read.js +0 -226
- package/dist/src/benchmarks/gaia-tools/pdf_read.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/python_exec.d.ts +0 -31
- package/dist/src/benchmarks/gaia-tools/python_exec.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/python_exec.js +0 -94
- package/dist/src/benchmarks/gaia-tools/python_exec.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts +0 -13
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js +0 -98
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts +0 -52
- package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/visit_webpage.js +0 -304
- package/dist/src/benchmarks/gaia-tools/visit_webpage.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_browse.d.ts +0 -61
- package/dist/src/benchmarks/gaia-tools/web_browse.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_browse.js +0 -217
- package/dist/src/benchmarks/gaia-tools/web_browse.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts +0 -26
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js +0 -152
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts +0 -24
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.js +0 -311
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts +0 -25
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.js +0 -304
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.js.map +0 -1
- package/dist/src/commands/performance-capability.d.ts +0 -30
- package/dist/src/commands/performance-capability.d.ts.map +0 -1
- package/dist/src/commands/performance-capability.js +0 -349
- package/dist/src/commands/performance-capability.js.map +0 -1
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GAIA Tool: web_browse — ADR-133-PR5
|
|
3
|
-
*
|
|
4
|
-
* Opens a URL in a headless Chromium browser via Playwright and extracts
|
|
5
|
-
* page content (text, HTML, or screenshot). Covers the ~10-15pp of GAIA
|
|
6
|
-
* Level-1 questions that require navigating dynamic JS pages, video pages
|
|
7
|
-
* (YouTube, Vimeo), and paywalled/login-required content.
|
|
8
|
-
*
|
|
9
|
-
* ============================================================
|
|
10
|
-
* PLAYWRIGHT DEPENDENCY — OPT-IN INSTALL
|
|
11
|
-
* ============================================================
|
|
12
|
-
* Playwright is NOT a hard runtime dep of @claude-flow/cli. It is loaded
|
|
13
|
-
* lazily via a dynamic import so the package installs cleanly without it.
|
|
14
|
-
*
|
|
15
|
-
* To use web_browse, run once:
|
|
16
|
-
* npm install playwright
|
|
17
|
-
* npx playwright install chromium
|
|
18
|
-
*
|
|
19
|
-
* If Playwright is not installed, execute() returns a structured error
|
|
20
|
-
* message that Claude can relay to the user rather than crashing.
|
|
21
|
-
*
|
|
22
|
-
* Install size: ~80 MB for the Playwright package + Chromium binary.
|
|
23
|
-
* Add as a devDependency in benchmark-specific contexts to avoid bloating
|
|
24
|
-
* the production bundle.
|
|
25
|
-
*
|
|
26
|
-
* ============================================================
|
|
27
|
-
* RESOURCE CAPS
|
|
28
|
-
* ============================================================
|
|
29
|
-
* - Text/HTML extraction capped at 8 000 characters (prevents context-window
|
|
30
|
-
* overflow; roughly 2 000 tokens).
|
|
31
|
-
* - Default timeout: 30 seconds.
|
|
32
|
-
* - Screenshots returned as base64-encoded PNG strings.
|
|
33
|
-
* - Browser instance is always closed in a `finally` block.
|
|
34
|
-
*
|
|
35
|
-
* Refs: ADR-133, #2156
|
|
36
|
-
*/
|
|
37
|
-
// ---------------------------------------------------------------------------
|
|
38
|
-
// Constants
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
41
|
-
const MAX_CONTENT_CHARS = 8_000;
|
|
42
|
-
/**
|
|
43
|
-
* Attempt to load Playwright's `chromium` launch function.
|
|
44
|
-
* Returns a missing-result (with install instructions) if Playwright is not
|
|
45
|
-
* installed rather than throwing — callers return the reason string to Claude.
|
|
46
|
-
*/
|
|
47
|
-
async function loadPlaywright() {
|
|
48
|
-
try {
|
|
49
|
-
// Dynamic import keeps Playwright out of the static dep graph.
|
|
50
|
-
// The string is built at runtime to prevent TS from statically resolving
|
|
51
|
-
// the module (which would fail with TS2307 when playwright is not installed).
|
|
52
|
-
const pwModuleName = 'play' + 'wright';
|
|
53
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
54
|
-
const pw = await import(/* @vite-ignore */ pwModuleName);
|
|
55
|
-
return { ok: true, chromium: pw.chromium };
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
return {
|
|
59
|
-
ok: false,
|
|
60
|
-
reason: 'Playwright is not installed. Install it with:\n' +
|
|
61
|
-
' npm install playwright\n' +
|
|
62
|
-
' npx playwright install chromium\n' +
|
|
63
|
-
'Then retry. web_browse requires Playwright to navigate dynamic pages.',
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
// ---------------------------------------------------------------------------
|
|
68
|
-
// Core browse logic
|
|
69
|
-
// ---------------------------------------------------------------------------
|
|
70
|
-
async function browseUrl(input) {
|
|
71
|
-
const extract = input.extract ?? 'text';
|
|
72
|
-
const timeoutMs = Math.min(Math.max(1_000, Math.round((input.timeout_seconds ?? DEFAULT_TIMEOUT_MS / 1000) * 1000)), 120_000);
|
|
73
|
-
const pw = await loadPlaywright();
|
|
74
|
-
if (!pw.ok) {
|
|
75
|
-
// Return as a structured result so the agent loop can forward the error
|
|
76
|
-
// to Claude without crashing.
|
|
77
|
-
return {
|
|
78
|
-
content: `[web_browse error] ${pw.reason}`,
|
|
79
|
-
final_url: input.url,
|
|
80
|
-
status: 0,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
const browser = await pw.chromium.launch({ headless: true });
|
|
84
|
-
try {
|
|
85
|
-
const page = await browser.newPage();
|
|
86
|
-
// Capture final HTTP status from the main-frame response.
|
|
87
|
-
let responseStatus = 200;
|
|
88
|
-
page.on('response', (resp) => {
|
|
89
|
-
if (resp.url() === page.url() || resp.url() === input.url) {
|
|
90
|
-
responseStatus = resp.status();
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
await page.goto(input.url, {
|
|
94
|
-
waitUntil: 'domcontentloaded',
|
|
95
|
-
timeout: timeoutMs,
|
|
96
|
-
});
|
|
97
|
-
if (input.wait_for_selector) {
|
|
98
|
-
await page.waitForSelector(input.wait_for_selector, { timeout: timeoutMs });
|
|
99
|
-
}
|
|
100
|
-
let rawContent;
|
|
101
|
-
if (extract === 'screenshot') {
|
|
102
|
-
const buf = await page.screenshot({ type: 'png', fullPage: false });
|
|
103
|
-
rawContent = buf.toString('base64');
|
|
104
|
-
}
|
|
105
|
-
else if (extract === 'html') {
|
|
106
|
-
rawContent = await page.content();
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
// Default: extract visible text
|
|
110
|
-
// page.evaluate runs inside the browser context (Chromium's V8 runtime),
|
|
111
|
-
// so `document` / `window` are available there. Cast to avoid the
|
|
112
|
-
// TypeScript "lib does not include dom" error from the Node.js tsconfig.
|
|
113
|
-
rawContent = await page.evaluate(() => {
|
|
114
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
115
|
-
const doc = globalThis.document;
|
|
116
|
-
if (!doc)
|
|
117
|
-
return '';
|
|
118
|
-
doc
|
|
119
|
-
.querySelectorAll('script, style, noscript, [hidden], [aria-hidden="true"]')
|
|
120
|
-
.forEach((el) => el.remove());
|
|
121
|
-
return (doc.body?.innerText ?? doc.documentElement?.innerText ?? '').trim();
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
const finalUrl = page.url();
|
|
125
|
-
// Cap text/html at MAX_CONTENT_CHARS; screenshots are kept as-is (base64
|
|
126
|
-
// of a 1280×720 PNG ≈ 300–800 KB — large but necessary for vision pass).
|
|
127
|
-
let content = rawContent;
|
|
128
|
-
let truncated = false;
|
|
129
|
-
if (extract !== 'screenshot' && rawContent.length > MAX_CONTENT_CHARS) {
|
|
130
|
-
content = rawContent.slice(0, MAX_CONTENT_CHARS);
|
|
131
|
-
truncated = true;
|
|
132
|
-
}
|
|
133
|
-
return { content, final_url: finalUrl, status: responseStatus, truncated };
|
|
134
|
-
}
|
|
135
|
-
finally {
|
|
136
|
-
await browser.close();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
// ---------------------------------------------------------------------------
|
|
140
|
-
// Format output for Claude
|
|
141
|
-
// ---------------------------------------------------------------------------
|
|
142
|
-
function formatBrowseResult(result, extract) {
|
|
143
|
-
const lines = [];
|
|
144
|
-
lines.push(`final_url: ${result.final_url}`);
|
|
145
|
-
lines.push(`status: ${result.status}`);
|
|
146
|
-
if (extract === 'screenshot') {
|
|
147
|
-
lines.push(`extract: screenshot (base64 PNG)`);
|
|
148
|
-
lines.push(`content:\n${result.content}`);
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
lines.push(`extract: ${extract}`);
|
|
152
|
-
if (result.truncated) {
|
|
153
|
-
lines.push(`[content truncated at ${MAX_CONTENT_CHARS} characters]`);
|
|
154
|
-
}
|
|
155
|
-
lines.push(`content:\n${result.content}`);
|
|
156
|
-
}
|
|
157
|
-
return lines.join('\n');
|
|
158
|
-
}
|
|
159
|
-
// ---------------------------------------------------------------------------
|
|
160
|
-
// GaiaTool implementation
|
|
161
|
-
// ---------------------------------------------------------------------------
|
|
162
|
-
export class WebBrowseTool {
|
|
163
|
-
name = 'web_browse';
|
|
164
|
-
definition = {
|
|
165
|
-
name: 'web_browse',
|
|
166
|
-
description: 'Open a URL in a headless Chromium browser and extract page content. ' +
|
|
167
|
-
'Use this for dynamic JavaScript pages, video pages (YouTube, Vimeo), ' +
|
|
168
|
-
'or any URL that web_search cannot fetch directly. ' +
|
|
169
|
-
'Returns page text by default; pass extract="html" for raw HTML or ' +
|
|
170
|
-
'extract="screenshot" for a base64 PNG screenshot. ' +
|
|
171
|
-
'Requires Playwright to be installed (npm install playwright && ' +
|
|
172
|
-
'npx playwright install chromium).',
|
|
173
|
-
input_schema: {
|
|
174
|
-
type: 'object',
|
|
175
|
-
properties: {
|
|
176
|
-
url: {
|
|
177
|
-
type: 'string',
|
|
178
|
-
description: 'The URL to navigate to (http or https).',
|
|
179
|
-
},
|
|
180
|
-
wait_for_selector: {
|
|
181
|
-
type: 'string',
|
|
182
|
-
description: 'Optional CSS selector to wait for before extracting content. ' +
|
|
183
|
-
'Useful for SPAs that render after the initial DOM load.',
|
|
184
|
-
},
|
|
185
|
-
extract: {
|
|
186
|
-
type: 'string',
|
|
187
|
-
description: 'What to extract: "text" (default, visible text), ' +
|
|
188
|
-
'"html" (full page HTML), or "screenshot" (base64 PNG).',
|
|
189
|
-
},
|
|
190
|
-
timeout_seconds: {
|
|
191
|
-
type: 'number',
|
|
192
|
-
description: `Navigation timeout in seconds (default: ${DEFAULT_TIMEOUT_MS / 1000}, max: 120).`,
|
|
193
|
-
},
|
|
194
|
-
},
|
|
195
|
-
required: ['url'],
|
|
196
|
-
},
|
|
197
|
-
};
|
|
198
|
-
async execute(input) {
|
|
199
|
-
const url = String(input['url'] ?? '').trim();
|
|
200
|
-
if (!url)
|
|
201
|
-
throw new Error('web_browse: `url` input is required and must be non-empty.');
|
|
202
|
-
const rawExtract = String(input['extract'] ?? 'text').toLowerCase();
|
|
203
|
-
const extract = rawExtract === 'html' ? 'html' : rawExtract === 'screenshot' ? 'screenshot' : 'text';
|
|
204
|
-
const browseInput = {
|
|
205
|
-
url,
|
|
206
|
-
wait_for_selector: input['wait_for_selector'] != null ? String(input['wait_for_selector']) : undefined,
|
|
207
|
-
extract,
|
|
208
|
-
timeout_seconds: input['timeout_seconds'] != null ? Number(input['timeout_seconds']) : undefined,
|
|
209
|
-
};
|
|
210
|
-
const result = await browseUrl(browseInput);
|
|
211
|
-
return formatBrowseResult(result, extract);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
export function createWebBrowseTool(_opts) {
|
|
215
|
-
return new WebBrowseTool();
|
|
216
|
-
}
|
|
217
|
-
//# sourceMappingURL=web_browse.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web_browse.js","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-tools/web_browse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Smoke tests for web_browse — ADR-133-PR5
|
|
3
|
-
*
|
|
4
|
-
* Run with:
|
|
5
|
-
* cd v3/@claude-flow/cli
|
|
6
|
-
* npx tsx src/benchmarks/gaia-tools/web_browse.smoke.ts
|
|
7
|
-
*
|
|
8
|
-
* Requires Playwright to be installed:
|
|
9
|
-
* npm install playwright
|
|
10
|
-
* npx playwright install chromium
|
|
11
|
-
*
|
|
12
|
-
* If Playwright is not installed, tests that require it are skipped with
|
|
13
|
-
* a SKIP result (not a failure) — the install instructions are printed.
|
|
14
|
-
*
|
|
15
|
-
* Tests:
|
|
16
|
-
* 1. Browse Wikipedia page — content contains 'Mercedes', status 200
|
|
17
|
-
* 2. Bad URL with short timeout — returns error message (no crash)
|
|
18
|
-
* 3. Screenshot mode — returns non-empty base64 string
|
|
19
|
-
* 4. HTML extract mode — content contains '<html' or '<HTML'
|
|
20
|
-
*
|
|
21
|
-
* Cost: $0 (all local Playwright calls — no LLM).
|
|
22
|
-
*
|
|
23
|
-
* Refs: ADR-133, #2156
|
|
24
|
-
*/
|
|
25
|
-
export {};
|
|
26
|
-
//# sourceMappingURL=web_browse.smoke.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web_browse.smoke.d.ts","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-tools/web_browse.smoke.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Smoke tests for web_browse — ADR-133-PR5
|
|
3
|
-
*
|
|
4
|
-
* Run with:
|
|
5
|
-
* cd v3/@claude-flow/cli
|
|
6
|
-
* npx tsx src/benchmarks/gaia-tools/web_browse.smoke.ts
|
|
7
|
-
*
|
|
8
|
-
* Requires Playwright to be installed:
|
|
9
|
-
* npm install playwright
|
|
10
|
-
* npx playwright install chromium
|
|
11
|
-
*
|
|
12
|
-
* If Playwright is not installed, tests that require it are skipped with
|
|
13
|
-
* a SKIP result (not a failure) — the install instructions are printed.
|
|
14
|
-
*
|
|
15
|
-
* Tests:
|
|
16
|
-
* 1. Browse Wikipedia page — content contains 'Mercedes', status 200
|
|
17
|
-
* 2. Bad URL with short timeout — returns error message (no crash)
|
|
18
|
-
* 3. Screenshot mode — returns non-empty base64 string
|
|
19
|
-
* 4. HTML extract mode — content contains '<html' or '<HTML'
|
|
20
|
-
*
|
|
21
|
-
* Cost: $0 (all local Playwright calls — no LLM).
|
|
22
|
-
*
|
|
23
|
-
* Refs: ADR-133, #2156
|
|
24
|
-
*/
|
|
25
|
-
import { createWebBrowseTool } from './web_browse.js';
|
|
26
|
-
async function runTest(name, fn) {
|
|
27
|
-
try {
|
|
28
|
-
await fn();
|
|
29
|
-
return { name, status: 'PASS', message: 'OK' };
|
|
30
|
-
}
|
|
31
|
-
catch (e) {
|
|
32
|
-
const msg = String(e);
|
|
33
|
-
// If Playwright isn't installed, mark as SKIP rather than FAIL.
|
|
34
|
-
if (msg.includes('Playwright is not installed') ||
|
|
35
|
-
msg.includes('Cannot find module') ||
|
|
36
|
-
msg.includes('playwright')) {
|
|
37
|
-
return { name, status: 'SKIP', message: `Playwright not installed — ${msg}` };
|
|
38
|
-
}
|
|
39
|
-
return { name, status: 'FAIL', message: msg };
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function assert(condition, msg) {
|
|
43
|
-
if (!condition)
|
|
44
|
-
throw new Error(`Assertion failed: ${msg}`);
|
|
45
|
-
}
|
|
46
|
-
// ---------------------------------------------------------------------------
|
|
47
|
-
// Tests
|
|
48
|
-
// ---------------------------------------------------------------------------
|
|
49
|
-
const tool = createWebBrowseTool();
|
|
50
|
-
// Test 1: Wikipedia text extraction
|
|
51
|
-
async function testWikipedia() {
|
|
52
|
-
const out = await tool.execute({
|
|
53
|
-
url: 'https://en.wikipedia.org/wiki/Mercedes_Sosa',
|
|
54
|
-
extract: 'text',
|
|
55
|
-
timeout_seconds: 30,
|
|
56
|
-
});
|
|
57
|
-
// If Playwright is missing, execute() returns a structured error string.
|
|
58
|
-
if (out.startsWith('[web_browse error]')) {
|
|
59
|
-
throw new Error(out);
|
|
60
|
-
}
|
|
61
|
-
assert(out.toLowerCase().includes('mercedes') || out.toLowerCase().includes('sosa'), `Expected page text to contain "Mercedes" or "Sosa", got:\n${out.slice(0, 500)}`);
|
|
62
|
-
assert(out.includes('final_url:'), `Expected final_url in output, got:\n${out.slice(0, 200)}`);
|
|
63
|
-
}
|
|
64
|
-
// Test 2: Bad URL with short timeout — should return gracefully, not throw
|
|
65
|
-
async function testBadUrlTimeout() {
|
|
66
|
-
const out = await tool.execute({
|
|
67
|
-
url: 'https://this-domain-absolutely-does-not-exist-gaia-bench.example',
|
|
68
|
-
extract: 'text',
|
|
69
|
-
timeout_seconds: 5,
|
|
70
|
-
});
|
|
71
|
-
// Either a Playwright "not installed" error or a network error — both are
|
|
72
|
-
// acceptable. The tool must NOT throw; it must return a string.
|
|
73
|
-
assert(typeof out === 'string', 'Expected string output from bad-URL test');
|
|
74
|
-
}
|
|
75
|
-
// Test 3: Screenshot mode — returns base64 PNG
|
|
76
|
-
async function testScreenshotMode() {
|
|
77
|
-
const out = await tool.execute({
|
|
78
|
-
url: 'https://en.wikipedia.org/wiki/Main_Page',
|
|
79
|
-
extract: 'screenshot',
|
|
80
|
-
timeout_seconds: 30,
|
|
81
|
-
});
|
|
82
|
-
if (out.startsWith('[web_browse error]')) {
|
|
83
|
-
throw new Error(out);
|
|
84
|
-
}
|
|
85
|
-
assert(out.includes('content:'), `Expected "content:" in output, got:\n${out.slice(0, 200)}`);
|
|
86
|
-
// Extract the base64 portion after "content:\n"
|
|
87
|
-
const contentIdx = out.indexOf('content:\n');
|
|
88
|
-
if (contentIdx !== -1) {
|
|
89
|
-
const b64 = out.slice(contentIdx + 'content:\n'.length).trim();
|
|
90
|
-
assert(b64.length > 100, `Expected non-trivial base64 data, got length ${b64.length}`);
|
|
91
|
-
// Base64 charset only
|
|
92
|
-
assert(/^[A-Za-z0-9+/=]+$/.test(b64.slice(0, 100)), `Expected base64-encoded output, got:\n${b64.slice(0, 100)}`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
// Test 4: HTML extract mode
|
|
96
|
-
async function testHtmlExtract() {
|
|
97
|
-
const out = await tool.execute({
|
|
98
|
-
url: 'https://en.wikipedia.org/wiki/Main_Page',
|
|
99
|
-
extract: 'html',
|
|
100
|
-
timeout_seconds: 30,
|
|
101
|
-
});
|
|
102
|
-
if (out.startsWith('[web_browse error]')) {
|
|
103
|
-
throw new Error(out);
|
|
104
|
-
}
|
|
105
|
-
assert(out.toLowerCase().includes('<html') || out.includes('<!DOCTYPE'), `Expected HTML markup in output, got:\n${out.slice(0, 300)}`);
|
|
106
|
-
}
|
|
107
|
-
// ---------------------------------------------------------------------------
|
|
108
|
-
// Runner
|
|
109
|
-
// ---------------------------------------------------------------------------
|
|
110
|
-
async function main() {
|
|
111
|
-
console.log('web_browse smoke tests — ADR-133-PR5\n');
|
|
112
|
-
const tests = [
|
|
113
|
-
runTest('Test 1: Wikipedia text extraction (contains "Mercedes")', testWikipedia),
|
|
114
|
-
runTest('Test 2: Bad URL with 5s timeout — no crash', testBadUrlTimeout),
|
|
115
|
-
runTest('Test 3: Screenshot mode — non-empty base64', testScreenshotMode),
|
|
116
|
-
runTest('Test 4: HTML extract mode — markup present', testHtmlExtract),
|
|
117
|
-
];
|
|
118
|
-
// Run sequentially to avoid spawning 4 browser instances simultaneously.
|
|
119
|
-
const results = [];
|
|
120
|
-
for (const t of tests) {
|
|
121
|
-
results.push(await t);
|
|
122
|
-
}
|
|
123
|
-
let passed = 0;
|
|
124
|
-
let failed = 0;
|
|
125
|
-
let skipped = 0;
|
|
126
|
-
for (const r of results) {
|
|
127
|
-
console.log(`[${r.status}] ${r.name}`);
|
|
128
|
-
if (r.status !== 'PASS') {
|
|
129
|
-
console.log(` ${r.message.slice(0, 300)}`);
|
|
130
|
-
}
|
|
131
|
-
if (r.status === 'PASS')
|
|
132
|
-
passed++;
|
|
133
|
-
else if (r.status === 'FAIL')
|
|
134
|
-
failed++;
|
|
135
|
-
else
|
|
136
|
-
skipped++;
|
|
137
|
-
}
|
|
138
|
-
console.log(`\nResults: ${passed} passed, ${failed} failed, ${skipped} skipped`);
|
|
139
|
-
if (skipped > 0) {
|
|
140
|
-
console.log('\nInstall Playwright to run skipped tests:');
|
|
141
|
-
console.log(' npm install playwright');
|
|
142
|
-
console.log(' npx playwright install chromium');
|
|
143
|
-
}
|
|
144
|
-
if (failed > 0) {
|
|
145
|
-
process.exit(1);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
main().catch((e) => {
|
|
149
|
-
console.error('Fatal:', e);
|
|
150
|
-
process.exit(1);
|
|
151
|
-
});
|
|
152
|
-
//# sourceMappingURL=web_browse.smoke.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web_browse.smoke.js","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-tools/web_browse.smoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Smoke tests for web_search.ts — ADR-135
|
|
3
|
-
*
|
|
4
|
-
* All tests are mock-based using webSearchTestHooks for ESM-safe injection.
|
|
5
|
-
* NO live API calls are made.
|
|
6
|
-
*
|
|
7
|
-
* Coverage:
|
|
8
|
-
* 1. resolveGoogleCustomSearchCredentials — env var path
|
|
9
|
-
* 2. resolveGoogleCustomSearchCredentials — returns null when creds missing
|
|
10
|
-
* 3. searchGoogleCustomSearch — parses items correctly (unit parse test)
|
|
11
|
-
* 4. searchGoogleCustomSearch — throws on API error object in response
|
|
12
|
-
* 5. searchWikipedia — strips HTML from snippet
|
|
13
|
-
* 6. WebSearchTool.execute — Google creds present → Google used first
|
|
14
|
-
* 7. WebSearchTool.execute — Google creds absent → Wikipedia used
|
|
15
|
-
* 8. WebSearchTool.execute — Google throws → falls back to Wikipedia
|
|
16
|
-
* 9. WebSearchTool.execute — Google 0 results → falls back to Wikipedia
|
|
17
|
-
* 10. WebSearchTool.execute — Google + Wikipedia both fail → DDG used
|
|
18
|
-
* 11. WebSearchTool.execute — rejects empty query
|
|
19
|
-
* 12. WebSearchTool.execute — max_results capped at 10
|
|
20
|
-
*
|
|
21
|
-
* Run with: npx tsx web_search.smoke.ts (from gaia-tools directory)
|
|
22
|
-
*/
|
|
23
|
-
export {};
|
|
24
|
-
//# sourceMappingURL=web_search.smoke.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web_search.smoke.d.ts","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-tools/web_search.smoke.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
|