cmdr-agent 2.2.0 → 2.4.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.
- package/dist/package.json +1 -1
- package/dist/src/cli/commands.js +1 -1
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/ink/App.d.ts +2 -0
- package/dist/src/cli/ink/App.d.ts.map +1 -1
- package/dist/src/cli/ink/App.js +56 -7
- package/dist/src/cli/ink/App.js.map +1 -1
- package/dist/src/cli/repl.d.ts.map +1 -1
- package/dist/src/cli/repl.js +91 -1
- package/dist/src/cli/repl.js.map +1 -1
- package/dist/src/config/mcp-config.d.ts +41 -0
- package/dist/src/config/mcp-config.d.ts.map +1 -0
- package/dist/src/config/mcp-config.js +55 -0
- package/dist/src/config/mcp-config.js.map +1 -0
- package/dist/src/config/mcp-registry.d.ts +45 -0
- package/dist/src/config/mcp-registry.d.ts.map +1 -0
- package/dist/src/config/mcp-registry.js +156 -0
- package/dist/src/config/mcp-registry.js.map +1 -0
- package/dist/src/config/schema.d.ts +8 -8
- package/dist/src/core/agent-runner.d.ts +4 -0
- package/dist/src/core/agent-runner.d.ts.map +1 -1
- package/dist/src/core/agent-runner.js +60 -1
- package/dist/src/core/agent-runner.js.map +1 -1
- package/dist/src/core/agent.d.ts +4 -0
- package/dist/src/core/agent.d.ts.map +1 -1
- package/dist/src/core/agent.js +6 -0
- package/dist/src/core/agent.js.map +1 -1
- package/dist/src/core/graph-context.d.ts +83 -0
- package/dist/src/core/graph-context.d.ts.map +1 -0
- package/dist/src/core/graph-context.js +370 -0
- package/dist/src/core/graph-context.js.map +1 -0
- package/dist/src/core/hooks.d.ts +61 -0
- package/dist/src/core/hooks.d.ts.map +1 -0
- package/dist/src/core/hooks.js +140 -0
- package/dist/src/core/hooks.js.map +1 -0
- package/dist/src/core/intent.d.ts.map +1 -1
- package/dist/src/core/intent.js +3 -0
- package/dist/src/core/intent.js.map +1 -1
- package/dist/src/core/permissions.d.ts +43 -0
- package/dist/src/core/permissions.d.ts.map +1 -1
- package/dist/src/core/permissions.js +108 -0
- package/dist/src/core/permissions.js.map +1 -1
- package/dist/src/core/presets.d.ts.map +1 -1
- package/dist/src/core/presets.js +6 -2
- package/dist/src/core/presets.js.map +1 -1
- package/dist/src/core/types.d.ts +7 -0
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/tools/built-in/bash.d.ts +1 -1
- package/dist/src/tools/built-in/cron-tools.d.ts +19 -0
- package/dist/src/tools/built-in/cron-tools.d.ts.map +1 -0
- package/dist/src/tools/built-in/cron-tools.js +86 -0
- package/dist/src/tools/built-in/cron-tools.js.map +1 -0
- package/dist/src/tools/built-in/graph-tools.d.ts +31 -0
- package/dist/src/tools/built-in/graph-tools.d.ts.map +1 -0
- package/dist/src/tools/built-in/graph-tools.js +103 -0
- package/dist/src/tools/built-in/graph-tools.js.map +1 -0
- package/dist/src/tools/built-in/index.d.ts +8 -1
- package/dist/src/tools/built-in/index.d.ts.map +1 -1
- package/dist/src/tools/built-in/index.js +15 -2
- package/dist/src/tools/built-in/index.js.map +1 -1
- package/dist/src/tools/built-in/mcp-resource-tools.d.ts +16 -0
- package/dist/src/tools/built-in/mcp-resource-tools.d.ts.map +1 -0
- package/dist/src/tools/built-in/mcp-resource-tools.js +73 -0
- package/dist/src/tools/built-in/mcp-resource-tools.js.map +1 -0
- package/dist/src/tools/built-in/plan-tools.d.ts +13 -0
- package/dist/src/tools/built-in/plan-tools.d.ts.map +1 -0
- package/dist/src/tools/built-in/plan-tools.js +42 -0
- package/dist/src/tools/built-in/plan-tools.js.map +1 -0
- package/dist/src/tools/built-in/task-tools.d.ts +22 -0
- package/dist/src/tools/built-in/task-tools.d.ts.map +1 -0
- package/dist/src/tools/built-in/task-tools.js +113 -0
- package/dist/src/tools/built-in/task-tools.js.map +1 -0
- package/dist/src/tools/built-in/todo-tool.d.ts +21 -0
- package/dist/src/tools/built-in/todo-tool.d.ts.map +1 -0
- package/dist/src/tools/built-in/todo-tool.js +52 -0
- package/dist/src/tools/built-in/todo-tool.js.map +1 -0
- package/dist/src/tools/built-in/web-fetch.d.ts +1 -1
- package/dist/src/tools/built-in/web-search.d.ts +9 -0
- package/dist/src/tools/built-in/web-search.d.ts.map +1 -0
- package/dist/src/tools/built-in/web-search.js +89 -0
- package/dist/src/tools/built-in/web-search.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* web_search — search the web using DuckDuckGo HTML scraping (no API key required).
|
|
3
|
+
* Falls back to Brave Search API if BRAVE_SEARCH_API_KEY is set.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { defineTool } from '../registry.js';
|
|
7
|
+
async function searchDuckDuckGo(query, maxResults) {
|
|
8
|
+
const encoded = encodeURIComponent(query);
|
|
9
|
+
const url = `https://html.duckduckgo.com/html/?q=${encoded}`;
|
|
10
|
+
const response = await fetch(url, {
|
|
11
|
+
headers: {
|
|
12
|
+
'User-Agent': 'Mozilla/5.0 (compatible; cmdr-agent/1.0)',
|
|
13
|
+
},
|
|
14
|
+
signal: AbortSignal.timeout(15000),
|
|
15
|
+
});
|
|
16
|
+
if (!response.ok) {
|
|
17
|
+
throw new Error(`DuckDuckGo returned ${response.status}`);
|
|
18
|
+
}
|
|
19
|
+
const html = await response.text();
|
|
20
|
+
const results = [];
|
|
21
|
+
// Parse result entries from DuckDuckGo HTML
|
|
22
|
+
const resultPattern = /<a[^>]+class="result__a"[^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>[\s\S]*?<a[^>]+class="result__snippet"[^>]*>([\s\S]*?)<\/a>/g;
|
|
23
|
+
let match;
|
|
24
|
+
while ((match = resultPattern.exec(html)) !== null && results.length < maxResults) {
|
|
25
|
+
const rawUrl = match[1];
|
|
26
|
+
const title = match[2].replace(/<[^>]*>/g, '').trim();
|
|
27
|
+
const snippet = match[3].replace(/<[^>]*>/g, '').trim();
|
|
28
|
+
// DuckDuckGo wraps URLs in a redirect — extract the actual URL
|
|
29
|
+
let finalUrl = rawUrl;
|
|
30
|
+
try {
|
|
31
|
+
const parsed = new URL(rawUrl, 'https://duckduckgo.com');
|
|
32
|
+
const uddg = parsed.searchParams.get('uddg');
|
|
33
|
+
if (uddg)
|
|
34
|
+
finalUrl = decodeURIComponent(uddg);
|
|
35
|
+
}
|
|
36
|
+
catch { /* use raw */ }
|
|
37
|
+
if (title && finalUrl) {
|
|
38
|
+
results.push({ title, url: finalUrl, snippet });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return results;
|
|
42
|
+
}
|
|
43
|
+
async function searchBrave(query, maxResults, apiKey) {
|
|
44
|
+
const encoded = encodeURIComponent(query);
|
|
45
|
+
const response = await fetch(`https://api.search.brave.com/res/v1/web/search?q=${encoded}&count=${maxResults}`, {
|
|
46
|
+
headers: {
|
|
47
|
+
'Accept': 'application/json',
|
|
48
|
+
'Accept-Encoding': 'gzip',
|
|
49
|
+
'X-Subscription-Token': apiKey,
|
|
50
|
+
},
|
|
51
|
+
signal: AbortSignal.timeout(15000),
|
|
52
|
+
});
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
throw new Error(`Brave Search returned ${response.status}`);
|
|
55
|
+
}
|
|
56
|
+
const data = await response.json();
|
|
57
|
+
return (data.web?.results ?? []).slice(0, maxResults).map(r => ({
|
|
58
|
+
title: r.title,
|
|
59
|
+
url: r.url,
|
|
60
|
+
snippet: r.description,
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
export const webSearchTool = defineTool({
|
|
64
|
+
name: 'web_search',
|
|
65
|
+
description: 'Search the web for information. Returns titles, URLs, and snippets of top results. Use this when you need current information not in your training data.',
|
|
66
|
+
inputSchema: z.object({
|
|
67
|
+
query: z.string().describe('The search query'),
|
|
68
|
+
maxResults: z.number().min(1).max(20).default(5).describe('Maximum number of results to return (default: 5)'),
|
|
69
|
+
}),
|
|
70
|
+
execute: async (input) => {
|
|
71
|
+
const braveKey = process.env.BRAVE_SEARCH_API_KEY;
|
|
72
|
+
const maxResults = input.maxResults ?? 5;
|
|
73
|
+
try {
|
|
74
|
+
const results = braveKey
|
|
75
|
+
? await searchBrave(input.query, maxResults, braveKey)
|
|
76
|
+
: await searchDuckDuckGo(input.query, maxResults);
|
|
77
|
+
if (results.length === 0) {
|
|
78
|
+
return { data: `No results found for: "${input.query}"` };
|
|
79
|
+
}
|
|
80
|
+
const formatted = results.map((r, i) => `${i + 1}. ${r.title}\n ${r.url}\n ${r.snippet}`).join('\n\n');
|
|
81
|
+
return { data: `Search results for "${input.query}":\n\n${formatted}` };
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
85
|
+
return { data: `Search failed: ${msg}`, isError: true };
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=web-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../../../src/tools/built-in/web-search.ts"],"names":[],"mappings":"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"}
|