@defai.digital/ax-cli 3.8.7 → 3.8.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -393
- package/config-defaults/settings.yaml +3 -0
- package/dist/agent/llm-agent.d.ts +11 -2
- package/dist/agent/llm-agent.js +73 -104
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/loop-detector.d.ts +70 -0
- package/dist/agent/loop-detector.js +339 -0
- package/dist/agent/loop-detector.js.map +1 -0
- package/dist/agent/progress-tracker.d.ts +94 -0
- package/dist/agent/progress-tracker.js +222 -0
- package/dist/agent/progress-tracker.js.map +1 -0
- package/dist/agent/status-reporter.js +2 -2
- package/dist/agent/status-reporter.js.map +1 -1
- package/dist/agent/subagent.js +3 -3
- package/dist/agent/subagent.js.map +1 -1
- package/dist/analyzers/git/churn-calculator.js +2 -1
- package/dist/analyzers/git/churn-calculator.js.map +1 -1
- package/dist/checkpoint/storage.js +6 -4
- package/dist/checkpoint/storage.js.map +1 -1
- package/dist/commands/cache.js +8 -6
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/doctor.js +19 -27
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/mcp-migrate.js +6 -5
- package/dist/commands/mcp-migrate.js.map +1 -1
- package/dist/commands/models.js +8 -12
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/plan.js +1 -10
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/setup.js +2 -1
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.js +4 -4
- package/dist/commands/status.js.map +1 -1
- package/dist/constants.d.ts +12 -0
- package/dist/constants.js +16 -4
- package/dist/constants.js.map +1 -1
- package/dist/hooks/hook-runner.d.ts +138 -0
- package/dist/hooks/hook-runner.js +429 -0
- package/dist/hooks/hook-runner.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.js +1 -19
- package/dist/index.js.map +1 -1
- package/dist/llm/tools.js +2 -39
- package/dist/llm/tools.js.map +1 -1
- package/dist/mcp/automatosx-loader.js +2 -1
- package/dist/mcp/automatosx-loader.js.map +1 -1
- package/dist/mcp/config-migrator.js +3 -2
- package/dist/mcp/config-migrator.js.map +1 -1
- package/dist/mcp/config-v2.d.ts +5 -0
- package/dist/mcp/config-v2.js +26 -0
- package/dist/mcp/config-v2.js.map +1 -1
- package/dist/mcp/error-formatter.js +4 -1
- package/dist/mcp/error-formatter.js.map +1 -1
- package/dist/mcp/reconnection.js +2 -1
- package/dist/mcp/reconnection.js.map +1 -1
- package/dist/mcp/registry.js +3 -2
- package/dist/mcp/registry.js.map +1 -1
- package/dist/mcp/resources.js +2 -1
- package/dist/mcp/resources.js.map +1 -1
- package/dist/mcp/validation.js +9 -0
- package/dist/mcp/validation.js.map +1 -1
- package/dist/memory/context-store.js +4 -6
- package/dist/memory/context-store.js.map +1 -1
- package/dist/memory/types.d.ts +2 -0
- package/dist/memory/types.js +4 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/permissions/index.d.ts +6 -0
- package/dist/permissions/index.js +7 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/permissions/permission-manager.d.ts +145 -0
- package/dist/permissions/permission-manager.js +401 -0
- package/dist/permissions/permission-manager.js.map +1 -0
- package/dist/planner/task-planner.js +2 -1
- package/dist/planner/task-planner.js.map +1 -1
- package/dist/schemas/index.d.ts +2 -2
- package/dist/schemas/settings-schemas.d.ts +0 -14
- package/dist/schemas/settings-schemas.js +0 -10
- package/dist/schemas/settings-schemas.js.map +1 -1
- package/dist/schemas/tool-schemas.d.ts +2 -2
- package/dist/schemas/yaml-schemas.d.ts +15 -0
- package/dist/schemas/yaml-schemas.js +3 -0
- package/dist/schemas/yaml-schemas.js.map +1 -1
- package/dist/tools/bash.js +6 -5
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/confirmation-tool.js +3 -2
- package/dist/tools/confirmation-tool.js.map +1 -1
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.js +2 -1
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/todo-tool.js +3 -2
- package/dist/tools/todo-tool.js.map +1 -1
- package/dist/ui/components/tool-group-display.js +0 -6
- package/dist/ui/components/tool-group-display.js.map +1 -1
- package/dist/ui/hooks/use-input-handler.js +7 -6
- package/dist/ui/hooks/use-input-handler.js.map +1 -1
- package/dist/ui/hooks/use-input-history.js +4 -4
- package/dist/ui/hooks/use-input-history.js.map +1 -1
- package/dist/ui/utils/tool-grouper.d.ts +1 -2
- package/dist/ui/utils/tool-grouper.js +4 -15
- package/dist/ui/utils/tool-grouper.js.map +1 -1
- package/dist/utils/audit-logger.js +2 -1
- package/dist/utils/audit-logger.js.map +1 -1
- package/dist/utils/config-loader.d.ts +3 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/encryption.js +2 -1
- package/dist/utils/encryption.js.map +1 -1
- package/dist/utils/file-cache.js +4 -2
- package/dist/utils/file-cache.js.map +1 -1
- package/dist/utils/onboarding-manager.js +2 -1
- package/dist/utils/onboarding-manager.js.map +1 -1
- package/dist/utils/path-helpers.js +3 -2
- package/dist/utils/path-helpers.js.map +1 -1
- package/dist/utils/path-security.js +3 -2
- package/dist/utils/path-security.js.map +1 -1
- package/dist/utils/settings-manager.d.ts +1 -21
- package/dist/utils/settings-manager.js +2 -82
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/utils/streaming-analyzer.d.ts +2 -13
- package/dist/utils/streaming-analyzer.js +3 -25
- package/dist/utils/streaming-analyzer.js.map +1 -1
- package/dist/utils/token-counter.d.ts +8 -1
- package/dist/utils/token-counter.js +14 -5
- package/dist/utils/token-counter.js.map +1 -1
- package/package.json +3 -2
- package/packages/schemas/README.md +1 -1
- package/packages/schemas/package.json +1 -1
- package/.ax-cli/CUSTOM.md +0 -97
- package/.ax-cli/auto-accept-audit.json +0 -1302
- package/.ax-cli/index.json +0 -43
- package/.ax-cli/memory.json +0 -55
- package/.ax-cli/settings.json +0 -12
- package/ax.config.json +0 -303
- package/dist/tools/web-search/cache.d.ts +0 -62
- package/dist/tools/web-search/cache.js +0 -105
- package/dist/tools/web-search/cache.js.map +0 -1
- package/dist/tools/web-search/engines/crates.d.ts +0 -19
- package/dist/tools/web-search/engines/crates.js +0 -87
- package/dist/tools/web-search/engines/crates.js.map +0 -1
- package/dist/tools/web-search/engines/npm.d.ts +0 -18
- package/dist/tools/web-search/engines/npm.js +0 -86
- package/dist/tools/web-search/engines/npm.js.map +0 -1
- package/dist/tools/web-search/engines/pypi.d.ts +0 -18
- package/dist/tools/web-search/engines/pypi.js +0 -75
- package/dist/tools/web-search/engines/pypi.js.map +0 -1
- package/dist/tools/web-search/engines/stackoverflow.d.ts +0 -30
- package/dist/tools/web-search/engines/stackoverflow.js +0 -130
- package/dist/tools/web-search/engines/stackoverflow.js.map +0 -1
- package/dist/tools/web-search/engines/wikipedia.d.ts +0 -27
- package/dist/tools/web-search/engines/wikipedia.js +0 -112
- package/dist/tools/web-search/engines/wikipedia.js.map +0 -1
- package/dist/tools/web-search/index.d.ts +0 -11
- package/dist/tools/web-search/index.js +0 -11
- package/dist/tools/web-search/index.js.map +0 -1
- package/dist/tools/web-search/router.d.ts +0 -36
- package/dist/tools/web-search/router.js +0 -270
- package/dist/tools/web-search/router.js.map +0 -1
- package/dist/tools/web-search/types.d.ts +0 -45
- package/dist/tools/web-search/types.js +0 -6
- package/dist/tools/web-search/types.js.map +0 -1
- package/dist/tools/web-search/web-search-tool.d.ts +0 -51
- package/dist/tools/web-search/web-search-tool.js +0 -262
- package/dist/tools/web-search/web-search-tool.js.map +0 -1
- package/packages/schemas/dist/index.d.ts +0 -14
- package/packages/schemas/dist/index.d.ts.map +0 -1
- package/packages/schemas/dist/index.js +0 -19
- package/packages/schemas/dist/index.js.map +0 -1
- package/packages/schemas/dist/public/core/brand-types.d.ts +0 -308
- package/packages/schemas/dist/public/core/brand-types.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/brand-types.js +0 -243
- package/packages/schemas/dist/public/core/brand-types.js.map +0 -1
- package/packages/schemas/dist/public/core/enums.d.ts +0 -227
- package/packages/schemas/dist/public/core/enums.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/enums.js +0 -222
- package/packages/schemas/dist/public/core/enums.js.map +0 -1
- package/packages/schemas/dist/public/core/id-types.d.ts +0 -286
- package/packages/schemas/dist/public/core/id-types.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/id-types.js +0 -136
- package/packages/schemas/dist/public/core/id-types.js.map +0 -1
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* crates.io (Rust Crates) Search Engine
|
|
3
|
-
* Free, unlimited search for Rust crates
|
|
4
|
-
* No API key required
|
|
5
|
-
*/
|
|
6
|
-
import axios from "axios";
|
|
7
|
-
export class CratesSearch {
|
|
8
|
-
name = "crates.io";
|
|
9
|
-
baseUrl = "https://crates.io/api/v1/crates";
|
|
10
|
-
timeout = 10000; // 10 second timeout
|
|
11
|
-
/**
|
|
12
|
-
* Always available - no API key required
|
|
13
|
-
*/
|
|
14
|
-
isAvailable() {
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
async search(query, options) {
|
|
18
|
-
try {
|
|
19
|
-
const params = new URLSearchParams({
|
|
20
|
-
q: query,
|
|
21
|
-
per_page: Math.min(options?.maxResults || 5, 20).toString(),
|
|
22
|
-
});
|
|
23
|
-
const response = await axios.get(`${this.baseUrl}?${params.toString()}`, {
|
|
24
|
-
timeout: options?.timeout || this.timeout,
|
|
25
|
-
headers: {
|
|
26
|
-
"User-Agent": "ax-cli",
|
|
27
|
-
Accept: "application/json",
|
|
28
|
-
},
|
|
29
|
-
});
|
|
30
|
-
return this.formatResults(response.data);
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
if (axios.isAxiosError(error)) {
|
|
34
|
-
if (error.code === "ECONNABORTED") {
|
|
35
|
-
throw new Error("crates.io search timeout");
|
|
36
|
-
}
|
|
37
|
-
throw new Error(`crates.io error: ${error.response?.data?.errors?.[0]?.detail || error.message}`);
|
|
38
|
-
}
|
|
39
|
-
throw error;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
formatResults(response) {
|
|
43
|
-
return response.crates.map((crate) => ({
|
|
44
|
-
title: crate.name,
|
|
45
|
-
url: `https://crates.io/crates/${crate.name}`,
|
|
46
|
-
snippet: this.createSnippet(crate),
|
|
47
|
-
source: this.name,
|
|
48
|
-
relevanceScore: this.calculateScore(crate),
|
|
49
|
-
metadata: {
|
|
50
|
-
version: crate.newest_version,
|
|
51
|
-
downloads: crate.downloads,
|
|
52
|
-
recentDownloads: crate.recent_downloads,
|
|
53
|
-
documentation: crate.documentation,
|
|
54
|
-
homepage: crate.homepage,
|
|
55
|
-
repository: crate.repository,
|
|
56
|
-
},
|
|
57
|
-
}));
|
|
58
|
-
}
|
|
59
|
-
createSnippet(crate) {
|
|
60
|
-
const parts = [];
|
|
61
|
-
if (crate.description) {
|
|
62
|
-
parts.push(crate.description);
|
|
63
|
-
}
|
|
64
|
-
parts.push(`v${crate.newest_version}`);
|
|
65
|
-
if (crate.downloads > 1000000) {
|
|
66
|
-
parts.push(`${(crate.downloads / 1000000).toFixed(1)}M downloads`);
|
|
67
|
-
}
|
|
68
|
-
else if (crate.downloads > 1000) {
|
|
69
|
-
parts.push(`${(crate.downloads / 1000).toFixed(1)}K downloads`);
|
|
70
|
-
}
|
|
71
|
-
const indicators = [];
|
|
72
|
-
if (crate.downloads > 1000000)
|
|
73
|
-
indicators.push("very popular");
|
|
74
|
-
else if (crate.downloads > 100000)
|
|
75
|
-
indicators.push("popular");
|
|
76
|
-
if (indicators.length > 0) {
|
|
77
|
-
parts.push(`(${indicators.join(", ")})`);
|
|
78
|
-
}
|
|
79
|
-
return parts.join(" • ");
|
|
80
|
-
}
|
|
81
|
-
calculateScore(crate) {
|
|
82
|
-
// Score based on downloads (logarithmic scale)
|
|
83
|
-
const downloadScore = Math.min(Math.log10(crate.downloads + 1) * 10, 100);
|
|
84
|
-
return downloadScore;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=crates.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crates.js","sourceRoot":"","sources":["../../../../src/tools/web-search/engines/crates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* npm Registry Search Engine
|
|
3
|
-
* Free, unlimited search for npm packages
|
|
4
|
-
* No API key required
|
|
5
|
-
*/
|
|
6
|
-
import type { SearchEngine, WebSearchResult, SearchOptions } from "../types.js";
|
|
7
|
-
export declare class NpmSearch implements SearchEngine {
|
|
8
|
-
readonly name = "npm";
|
|
9
|
-
private baseUrl;
|
|
10
|
-
private timeout;
|
|
11
|
-
/**
|
|
12
|
-
* Always available - no API key required
|
|
13
|
-
*/
|
|
14
|
-
isAvailable(): boolean;
|
|
15
|
-
search(query: string, options?: SearchOptions): Promise<WebSearchResult[]>;
|
|
16
|
-
private formatResults;
|
|
17
|
-
private createSnippet;
|
|
18
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* npm Registry Search Engine
|
|
3
|
-
* Free, unlimited search for npm packages
|
|
4
|
-
* No API key required
|
|
5
|
-
*/
|
|
6
|
-
import axios from "axios";
|
|
7
|
-
export class NpmSearch {
|
|
8
|
-
name = "npm";
|
|
9
|
-
baseUrl = "https://registry.npmjs.org/-/v1/search";
|
|
10
|
-
timeout = 10000; // 10 second timeout
|
|
11
|
-
/**
|
|
12
|
-
* Always available - no API key required
|
|
13
|
-
*/
|
|
14
|
-
isAvailable() {
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
async search(query, options) {
|
|
18
|
-
try {
|
|
19
|
-
const params = new URLSearchParams({
|
|
20
|
-
text: query,
|
|
21
|
-
size: Math.min(options?.maxResults || 5, 20).toString(),
|
|
22
|
-
});
|
|
23
|
-
const response = await axios.get(`${this.baseUrl}?${params.toString()}`, {
|
|
24
|
-
timeout: options?.timeout || this.timeout,
|
|
25
|
-
headers: {
|
|
26
|
-
Accept: "application/json",
|
|
27
|
-
},
|
|
28
|
-
});
|
|
29
|
-
return this.formatResults(response.data);
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
if (axios.isAxiosError(error)) {
|
|
33
|
-
if (error.code === "ECONNABORTED") {
|
|
34
|
-
throw new Error("npm search timeout");
|
|
35
|
-
}
|
|
36
|
-
throw new Error(`npm registry error: ${error.response?.data?.error || error.message}`);
|
|
37
|
-
}
|
|
38
|
-
throw error;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
formatResults(response) {
|
|
42
|
-
return response.objects.map((pkg) => ({
|
|
43
|
-
title: pkg.package.name,
|
|
44
|
-
url: pkg.package.links.npm || `https://www.npmjs.com/package/${pkg.package.name}`,
|
|
45
|
-
snippet: this.createSnippet(pkg),
|
|
46
|
-
source: this.name,
|
|
47
|
-
relevanceScore: pkg.score.final * 100, // Convert 0-1 to 0-100
|
|
48
|
-
publishedDate: pkg.package.date,
|
|
49
|
-
metadata: {
|
|
50
|
-
version: pkg.package.version,
|
|
51
|
-
author: pkg.package.author?.name || pkg.package.publisher.username,
|
|
52
|
-
quality: pkg.score.detail.quality,
|
|
53
|
-
popularity: pkg.score.detail.popularity,
|
|
54
|
-
maintenance: pkg.score.detail.maintenance,
|
|
55
|
-
homepage: pkg.package.links.homepage,
|
|
56
|
-
repository: pkg.package.links.repository,
|
|
57
|
-
},
|
|
58
|
-
}));
|
|
59
|
-
}
|
|
60
|
-
createSnippet(pkg) {
|
|
61
|
-
const parts = [];
|
|
62
|
-
if (pkg.package.description) {
|
|
63
|
-
parts.push(pkg.package.description);
|
|
64
|
-
}
|
|
65
|
-
parts.push(`v${pkg.package.version}`);
|
|
66
|
-
if (pkg.package.author?.name) {
|
|
67
|
-
parts.push(`by ${pkg.package.author.name}`);
|
|
68
|
-
}
|
|
69
|
-
// Add quality indicators
|
|
70
|
-
const quality = pkg.score.detail.quality;
|
|
71
|
-
const popularity = pkg.score.detail.popularity;
|
|
72
|
-
const maintenance = pkg.score.detail.maintenance;
|
|
73
|
-
const indicators = [];
|
|
74
|
-
if (quality > 0.7)
|
|
75
|
-
indicators.push("high quality");
|
|
76
|
-
if (popularity > 0.7)
|
|
77
|
-
indicators.push("popular");
|
|
78
|
-
if (maintenance > 0.7)
|
|
79
|
-
indicators.push("well-maintained");
|
|
80
|
-
if (indicators.length > 0) {
|
|
81
|
-
parts.push(`(${indicators.join(", ")})`);
|
|
82
|
-
}
|
|
83
|
-
return parts.join(" • ");
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=npm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../../../src/tools/web-search/engines/npm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PyPI (Python Package Index) Search Engine
|
|
3
|
-
* Free, unlimited search for Python packages
|
|
4
|
-
* No API key required
|
|
5
|
-
*/
|
|
6
|
-
import type { SearchEngine, WebSearchResult, SearchOptions } from "../types.js";
|
|
7
|
-
export declare class PyPISearch implements SearchEngine {
|
|
8
|
-
readonly name = "pypi";
|
|
9
|
-
private baseUrl;
|
|
10
|
-
private timeout;
|
|
11
|
-
/**
|
|
12
|
-
* Always available - no API key required
|
|
13
|
-
*/
|
|
14
|
-
isAvailable(): boolean;
|
|
15
|
-
search(query: string, options?: SearchOptions): Promise<WebSearchResult[]>;
|
|
16
|
-
private formatResult;
|
|
17
|
-
private createSnippet;
|
|
18
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PyPI (Python Package Index) Search Engine
|
|
3
|
-
* Free, unlimited search for Python packages
|
|
4
|
-
* No API key required
|
|
5
|
-
*/
|
|
6
|
-
import axios from "axios";
|
|
7
|
-
// Note: PyPI's search API is being rebuilt, so we use direct package lookup instead
|
|
8
|
-
export class PyPISearch {
|
|
9
|
-
name = "pypi";
|
|
10
|
-
baseUrl = "https://pypi.org/pypi";
|
|
11
|
-
timeout = 10000; // 10 second timeout
|
|
12
|
-
/**
|
|
13
|
-
* Always available - no API key required
|
|
14
|
-
*/
|
|
15
|
-
isAvailable() {
|
|
16
|
-
return true;
|
|
17
|
-
}
|
|
18
|
-
async search(query, options) {
|
|
19
|
-
try {
|
|
20
|
-
// PyPI's official search is being rebuilt, so we use direct package lookup
|
|
21
|
-
// Try to fetch package info directly
|
|
22
|
-
const packageResponse = await axios.get(`${this.baseUrl}/${encodeURIComponent(query)}/json`, {
|
|
23
|
-
timeout: options?.timeout || this.timeout,
|
|
24
|
-
validateStatus: (status) => status === 200 || status === 404,
|
|
25
|
-
});
|
|
26
|
-
if (packageResponse.status === 404) {
|
|
27
|
-
// Package not found, return empty results
|
|
28
|
-
return [];
|
|
29
|
-
}
|
|
30
|
-
return this.formatResult(packageResponse.data);
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
// Return empty results on error rather than failing
|
|
34
|
-
// PyPI search is a best-effort feature
|
|
35
|
-
return [];
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
formatResult(data) {
|
|
39
|
-
if (!data.info)
|
|
40
|
-
return [];
|
|
41
|
-
const info = data.info;
|
|
42
|
-
return [
|
|
43
|
-
{
|
|
44
|
-
title: info.name,
|
|
45
|
-
url: `https://pypi.org/project/${info.name}/`,
|
|
46
|
-
snippet: this.createSnippet(info),
|
|
47
|
-
source: this.name,
|
|
48
|
-
relevanceScore: 100, // Exact match
|
|
49
|
-
publishedDate: info.release_date,
|
|
50
|
-
metadata: {
|
|
51
|
-
version: info.version,
|
|
52
|
-
author: info.author,
|
|
53
|
-
license: info.license,
|
|
54
|
-
homepage: info.home_page || info.project_urls?.Homepage,
|
|
55
|
-
requiresPython: info.requires_python,
|
|
56
|
-
},
|
|
57
|
-
},
|
|
58
|
-
];
|
|
59
|
-
}
|
|
60
|
-
createSnippet(info) {
|
|
61
|
-
const parts = [];
|
|
62
|
-
if (info.summary) {
|
|
63
|
-
parts.push(info.summary);
|
|
64
|
-
}
|
|
65
|
-
parts.push(`v${info.version}`);
|
|
66
|
-
if (info.author) {
|
|
67
|
-
parts.push(`by ${info.author}`);
|
|
68
|
-
}
|
|
69
|
-
if (info.license) {
|
|
70
|
-
parts.push(`License: ${info.license}`);
|
|
71
|
-
}
|
|
72
|
-
return parts.join(" • ");
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=pypi.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pypi.js","sourceRoot":"","sources":["../../../../src/tools/web-search/engines/pypi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,oFAAoF;AAEpF,MAAM,OAAO,UAAU;IACL,IAAI,GAAG,MAAM,CAAC;IACtB,OAAO,GAAG,uBAAuB,CAAC;IAClC,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB;IAE7C;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAa,EACb,OAAuB;QAEvB,IAAI,CAAC;YACH,2EAA2E;YAC3E,qCAAqC;YACrC,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,GAAG,CACrC,GAAG,IAAI,CAAC,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,EACnD;gBACE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO;gBACzC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;aAC7D,CACF,CAAC;YAEF,IAAI,eAAe,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,0CAA0C;gBAC1C,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,oDAAoD;YACpD,uCAAuC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,IAAS;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,OAAO;YACL;gBACE,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,GAAG,EAAE,4BAA4B,IAAI,CAAC,IAAI,GAAG;gBAC7C,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACjC,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,cAAc,EAAE,GAAG,EAAE,cAAc;gBACnC,aAAa,EAAE,IAAI,CAAC,YAAY;gBAChC,QAAQ,EAAE;oBACR,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,QAAQ;oBACvD,cAAc,EAAE,IAAI,CAAC,eAAe;iBACrC;aACF;SACF,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,IAAS;QAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAE/B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stack Overflow Search Engine
|
|
3
|
-
* Free API with 300 requests/day without API key
|
|
4
|
-
* Excellent for "how to" and error troubleshooting queries
|
|
5
|
-
*/
|
|
6
|
-
import type { SearchEngine, WebSearchResult, SearchOptions } from "../types.js";
|
|
7
|
-
export declare class StackOverflowSearch implements SearchEngine {
|
|
8
|
-
readonly name = "stackoverflow";
|
|
9
|
-
private baseUrl;
|
|
10
|
-
private timeout;
|
|
11
|
-
private quotaRemaining;
|
|
12
|
-
/**
|
|
13
|
-
* Available if we have quota remaining
|
|
14
|
-
*/
|
|
15
|
-
isAvailable(): boolean;
|
|
16
|
-
/**
|
|
17
|
-
* Get current quota status
|
|
18
|
-
*/
|
|
19
|
-
getQuota(): {
|
|
20
|
-
remaining: number;
|
|
21
|
-
limit: number;
|
|
22
|
-
};
|
|
23
|
-
search(query: string, options?: SearchOptions): Promise<WebSearchResult[]>;
|
|
24
|
-
private formatResults;
|
|
25
|
-
private createSnippet;
|
|
26
|
-
/**
|
|
27
|
-
* Decode HTML entities in Stack Overflow responses
|
|
28
|
-
*/
|
|
29
|
-
private decodeHtml;
|
|
30
|
-
}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stack Overflow Search Engine
|
|
3
|
-
* Free API with 300 requests/day without API key
|
|
4
|
-
* Excellent for "how to" and error troubleshooting queries
|
|
5
|
-
*/
|
|
6
|
-
import axios from "axios";
|
|
7
|
-
export class StackOverflowSearch {
|
|
8
|
-
name = "stackoverflow";
|
|
9
|
-
baseUrl = "https://api.stackexchange.com/2.3";
|
|
10
|
-
timeout = 10000;
|
|
11
|
-
quotaRemaining = 300;
|
|
12
|
-
/**
|
|
13
|
-
* Available if we have quota remaining
|
|
14
|
-
*/
|
|
15
|
-
isAvailable() {
|
|
16
|
-
return this.quotaRemaining > 0;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Get current quota status
|
|
20
|
-
*/
|
|
21
|
-
getQuota() {
|
|
22
|
-
return { remaining: this.quotaRemaining, limit: 300 };
|
|
23
|
-
}
|
|
24
|
-
async search(query, options) {
|
|
25
|
-
// Skip if quota exhausted
|
|
26
|
-
if (this.quotaRemaining <= 0) {
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
try {
|
|
30
|
-
const params = new URLSearchParams({
|
|
31
|
-
order: "desc",
|
|
32
|
-
sort: "relevance",
|
|
33
|
-
q: query,
|
|
34
|
-
site: "stackoverflow",
|
|
35
|
-
pagesize: Math.min(options?.maxResults || 5, 10).toString(),
|
|
36
|
-
filter: "!nNPvSNVZJS", // Lightweight filter with excerpt
|
|
37
|
-
});
|
|
38
|
-
const response = await axios.get(`${this.baseUrl}/search/excerpts?${params.toString()}`, {
|
|
39
|
-
timeout: options?.timeout || this.timeout,
|
|
40
|
-
headers: {
|
|
41
|
-
"User-Agent": "ax-cli",
|
|
42
|
-
Accept: "application/json",
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
// Validate response structure
|
|
46
|
-
if (!response.data || !Array.isArray(response.data.items)) {
|
|
47
|
-
return [];
|
|
48
|
-
}
|
|
49
|
-
// Update quota from response
|
|
50
|
-
if (response.data.quota_remaining !== undefined) {
|
|
51
|
-
this.quotaRemaining = response.data.quota_remaining;
|
|
52
|
-
}
|
|
53
|
-
return this.formatResults(response.data);
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
if (axios.isAxiosError(error)) {
|
|
57
|
-
// Handle throttling (HTTP 400 with backoff)
|
|
58
|
-
if (error.response?.status === 400) {
|
|
59
|
-
const backoff = error.response.data?.backoff;
|
|
60
|
-
if (backoff) {
|
|
61
|
-
console.warn(`Stack Overflow API throttled, backoff: ${backoff}s`);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (error.code === "ECONNABORTED") {
|
|
65
|
-
// Timeout - return empty, don't crash
|
|
66
|
-
return [];
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
// Graceful failure - return empty results
|
|
70
|
-
return [];
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
formatResults(response) {
|
|
74
|
-
return response.items.map((item) => ({
|
|
75
|
-
title: this.decodeHtml(item.title),
|
|
76
|
-
url: item.link,
|
|
77
|
-
snippet: this.createSnippet(item),
|
|
78
|
-
source: this.name,
|
|
79
|
-
relevanceScore: item.score,
|
|
80
|
-
metadata: {
|
|
81
|
-
score: item.score,
|
|
82
|
-
answerCount: item.answer_count,
|
|
83
|
-
isAnswered: item.is_answered,
|
|
84
|
-
tags: item.tags,
|
|
85
|
-
questionId: item.question_id,
|
|
86
|
-
},
|
|
87
|
-
}));
|
|
88
|
-
}
|
|
89
|
-
createSnippet(item) {
|
|
90
|
-
const parts = [];
|
|
91
|
-
// Add excerpt if available (decode first, then slice to avoid cutting HTML entities)
|
|
92
|
-
if (item.excerpt) {
|
|
93
|
-
const decoded = this.decodeHtml(item.excerpt);
|
|
94
|
-
parts.push(decoded.slice(0, 200));
|
|
95
|
-
}
|
|
96
|
-
// Add answer status
|
|
97
|
-
if (item.is_answered) {
|
|
98
|
-
parts.push(`✓ Answered (${item.answer_count} answers)`);
|
|
99
|
-
}
|
|
100
|
-
else if (item.answer_count > 0) {
|
|
101
|
-
parts.push(`${item.answer_count} answers`);
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
parts.push("No answers yet");
|
|
105
|
-
}
|
|
106
|
-
// Add score
|
|
107
|
-
if (item.score > 0) {
|
|
108
|
-
parts.push(`+${item.score} votes`);
|
|
109
|
-
}
|
|
110
|
-
// Add top tags
|
|
111
|
-
if (item.tags && item.tags.length > 0) {
|
|
112
|
-
parts.push(`[${item.tags.slice(0, 3).join(", ")}]`);
|
|
113
|
-
}
|
|
114
|
-
return parts.join(" • ");
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Decode HTML entities in Stack Overflow responses
|
|
118
|
-
*/
|
|
119
|
-
decodeHtml(html) {
|
|
120
|
-
return html
|
|
121
|
-
.replace(/&/g, "&")
|
|
122
|
-
.replace(/</g, "<")
|
|
123
|
-
.replace(/>/g, ">")
|
|
124
|
-
.replace(/"/g, '"')
|
|
125
|
-
.replace(/'/g, "'")
|
|
126
|
-
.replace(/ /g, " ")
|
|
127
|
-
.replace(/<[^>]*>/g, ""); // Strip HTML tags
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=stackoverflow.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stackoverflow.js","sourceRoot":"","sources":["../../../../src/tools/web-search/engines/stackoverflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wikipedia Search Engine
|
|
3
|
-
* Free API with effectively unlimited requests (200/s)
|
|
4
|
-
* Excellent for "what is" and concept explanation queries
|
|
5
|
-
*/
|
|
6
|
-
import type { SearchEngine, WebSearchResult, SearchOptions } from "../types.js";
|
|
7
|
-
export declare class WikipediaSearch implements SearchEngine {
|
|
8
|
-
readonly name = "wikipedia";
|
|
9
|
-
private baseUrl;
|
|
10
|
-
private timeout;
|
|
11
|
-
/**
|
|
12
|
-
* Always available - no API key or quota limits
|
|
13
|
-
*/
|
|
14
|
-
isAvailable(): boolean;
|
|
15
|
-
search(query: string, options?: SearchOptions): Promise<WebSearchResult[]>;
|
|
16
|
-
private formatResults;
|
|
17
|
-
/**
|
|
18
|
-
* Build Wikipedia article URL from title
|
|
19
|
-
* Wikipedia URLs use underscores for spaces but don't need full URI encoding
|
|
20
|
-
*/
|
|
21
|
-
private buildWikipediaUrl;
|
|
22
|
-
private createSnippet;
|
|
23
|
-
/**
|
|
24
|
-
* Strip HTML tags and decode entities from Wikipedia snippets
|
|
25
|
-
*/
|
|
26
|
-
private stripHtml;
|
|
27
|
-
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wikipedia Search Engine
|
|
3
|
-
* Free API with effectively unlimited requests (200/s)
|
|
4
|
-
* Excellent for "what is" and concept explanation queries
|
|
5
|
-
*/
|
|
6
|
-
import axios from "axios";
|
|
7
|
-
export class WikipediaSearch {
|
|
8
|
-
name = "wikipedia";
|
|
9
|
-
baseUrl = "https://en.wikipedia.org/w/api.php";
|
|
10
|
-
timeout = 10000;
|
|
11
|
-
/**
|
|
12
|
-
* Always available - no API key or quota limits
|
|
13
|
-
*/
|
|
14
|
-
isAvailable() {
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
async search(query, options) {
|
|
18
|
-
try {
|
|
19
|
-
const params = new URLSearchParams({
|
|
20
|
-
action: "query",
|
|
21
|
-
list: "search",
|
|
22
|
-
srsearch: query,
|
|
23
|
-
srlimit: Math.min(options?.maxResults || 5, 10).toString(),
|
|
24
|
-
srprop: "snippet|wordcount|timestamp",
|
|
25
|
-
format: "json",
|
|
26
|
-
origin: "*", // Enable CORS
|
|
27
|
-
});
|
|
28
|
-
const response = await axios.get(`${this.baseUrl}?${params.toString()}`, {
|
|
29
|
-
timeout: options?.timeout || this.timeout,
|
|
30
|
-
headers: {
|
|
31
|
-
"User-Agent": "ax-cli",
|
|
32
|
-
Accept: "application/json",
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
// Validate response structure to prevent crashes on malformed responses
|
|
36
|
-
if (!response.data) {
|
|
37
|
-
return [];
|
|
38
|
-
}
|
|
39
|
-
const searchResults = response.data.query?.search || [];
|
|
40
|
-
return this.formatResults(searchResults);
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
if (axios.isAxiosError(error)) {
|
|
44
|
-
if (error.code === "ECONNABORTED") {
|
|
45
|
-
// Timeout - return empty, don't crash
|
|
46
|
-
return [];
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
// Graceful failure - return empty results
|
|
50
|
-
return [];
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
formatResults(results) {
|
|
54
|
-
return results.map((item) => ({
|
|
55
|
-
title: item.title,
|
|
56
|
-
url: this.buildWikipediaUrl(item.title),
|
|
57
|
-
snippet: this.createSnippet(item),
|
|
58
|
-
source: this.name,
|
|
59
|
-
publishedDate: item.timestamp?.split("T")[0],
|
|
60
|
-
metadata: {
|
|
61
|
-
pageId: item.pageid,
|
|
62
|
-
wordcount: item.wordcount,
|
|
63
|
-
namespace: item.ns,
|
|
64
|
-
},
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Build Wikipedia article URL from title
|
|
69
|
-
* Wikipedia URLs use underscores for spaces but don't need full URI encoding
|
|
70
|
-
*/
|
|
71
|
-
buildWikipediaUrl(title) {
|
|
72
|
-
// Replace spaces with underscores (Wikipedia convention)
|
|
73
|
-
// Only encode characters that are invalid in URLs, not underscores
|
|
74
|
-
const urlTitle = title
|
|
75
|
-
.replace(/ /g, "_")
|
|
76
|
-
.replace(/[?#]/g, (c) => encodeURIComponent(c)); // Only encode URL-breaking chars
|
|
77
|
-
return `https://en.wikipedia.org/wiki/${urlTitle}`;
|
|
78
|
-
}
|
|
79
|
-
createSnippet(item) {
|
|
80
|
-
const parts = [];
|
|
81
|
-
// Add cleaned snippet
|
|
82
|
-
if (item.snippet) {
|
|
83
|
-
parts.push(this.stripHtml(item.snippet));
|
|
84
|
-
}
|
|
85
|
-
// Add word count for context
|
|
86
|
-
if (item.wordcount) {
|
|
87
|
-
if (item.wordcount > 5000) {
|
|
88
|
-
parts.push("(detailed article)");
|
|
89
|
-
}
|
|
90
|
-
else if (item.wordcount > 1000) {
|
|
91
|
-
parts.push("(comprehensive)");
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return parts.join(" ");
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Strip HTML tags and decode entities from Wikipedia snippets
|
|
98
|
-
*/
|
|
99
|
-
stripHtml(html) {
|
|
100
|
-
return html
|
|
101
|
-
.replace(/<span class="searchmatch">([^<]*)<\/span>/g, "$1") // Remove search highlighting
|
|
102
|
-
.replace(/<[^>]*>/g, "") // Strip remaining HTML tags
|
|
103
|
-
.replace(/&/g, "&")
|
|
104
|
-
.replace(/</g, "<")
|
|
105
|
-
.replace(/>/g, ">")
|
|
106
|
-
.replace(/"/g, '"')
|
|
107
|
-
.replace(/'/g, "'")
|
|
108
|
-
.replace(/ /g, " ")
|
|
109
|
-
.trim();
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=wikipedia.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wikipedia.js","sourceRoot":"","sources":["../../../../src/tools/web-search/engines/wikipedia.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Web Search Module
|
|
3
|
-
* Exports all web search functionality
|
|
4
|
-
*/
|
|
5
|
-
export { WebSearchTool } from "./web-search-tool.js";
|
|
6
|
-
export { WebSearchRouter } from "./router.js";
|
|
7
|
-
export { SearchCache } from "./cache.js";
|
|
8
|
-
export { NpmSearch } from "./engines/npm.js";
|
|
9
|
-
export { PyPISearch } from "./engines/pypi.js";
|
|
10
|
-
export { CratesSearch } from "./engines/crates.js";
|
|
11
|
-
export type { WebSearchResult, SearchOptions, SearchIntent, SearchEngine, SearchEngineResponse, } from "./types.js";
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Web Search Module
|
|
3
|
-
* Exports all web search functionality
|
|
4
|
-
*/
|
|
5
|
-
export { WebSearchTool } from "./web-search-tool.js";
|
|
6
|
-
export { WebSearchRouter } from "./router.js";
|
|
7
|
-
export { SearchCache } from "./cache.js";
|
|
8
|
-
export { NpmSearch } from "./engines/npm.js";
|
|
9
|
-
export { PyPISearch } from "./engines/pypi.js";
|
|
10
|
-
export { CratesSearch } from "./engines/crates.js";
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/web-search/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
|