openhorse 0.1.18 → 0.1.19
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 +7 -1
- package/dist/framework/tool.d.ts +1 -0
- package/dist/framework/tool.d.ts.map +1 -1
- package/dist/framework/tool.js.map +1 -1
- package/dist/services/config.d.ts +4 -2
- package/dist/services/config.d.ts.map +1 -1
- package/dist/services/config.js +42 -0
- package/dist/services/config.js.map +1 -1
- package/dist/services/global-config.d.ts +23 -0
- package/dist/services/global-config.d.ts.map +1 -1
- package/dist/services/global-config.js.map +1 -1
- package/dist/services/web-search-adapters.d.ts +24 -0
- package/dist/services/web-search-adapters.d.ts.map +1 -0
- package/dist/services/web-search-adapters.js +338 -0
- package/dist/services/web-search-adapters.js.map +1 -0
- package/dist/services/web-search-mcp.d.ts +32 -0
- package/dist/services/web-search-mcp.d.ts.map +1 -0
- package/dist/services/web-search-mcp.js +251 -0
- package/dist/services/web-search-mcp.js.map +1 -0
- package/dist/services/web-search-provider.d.ts +33 -0
- package/dist/services/web-search-provider.d.ts.map +1 -0
- package/dist/services/web-search-provider.js +139 -0
- package/dist/services/web-search-provider.js.map +1 -0
- package/dist/tools/web.d.ts +2 -2
- package/dist/tools/web.d.ts.map +1 -1
- package/dist/tools/web.js +95 -139
- package/dist/tools/web.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -150,6 +150,7 @@ Only a small set of fields are user-configurable. The agent controls internal ge
|
|
|
150
150
|
| `defaultModel` | No | Default model (`glm-5`) |
|
|
151
151
|
| `fallbackModel` | No | Fallback model on failure |
|
|
152
152
|
| `toolConfirmation` | No | How to handle tools that ask for confirmation: `allow`, `deny`, or `ask`. Defaults to `allow` until the Ink UI can prompt interactively. |
|
|
153
|
+
| `webSearch` | No | Optional WebSearch mode/provider overrides. `auto` uses provider MCP first, then adapter fallback (`tavily`, `brave`, `custom`, `ddg`). |
|
|
153
154
|
|
|
154
155
|
### Agent-Controlled Internals
|
|
155
156
|
|
|
@@ -178,6 +179,10 @@ CLI flags > ~/.openhorse/openhorse.json > env vars > internal defaults
|
|
|
178
179
|
| `OPENHORSE_MODE` | `development` | Run mode |
|
|
179
180
|
| `OPENHORSE_LOG_LEVEL` | `info` | Log level |
|
|
180
181
|
| `OPENHORSE_TOOL_CONFIRMATION` | `allow` | Tool confirmation fallback: `allow`, `deny`, or `ask` |
|
|
182
|
+
| `OPENHORSE_WEBSEARCH_PROVIDER` | `auto` | WebSearch mode/provider: `auto`, `native`, `bailian`, `zhipu`, `tavily-mcp`, `tavily`, `brave`, `custom`, `ddg` |
|
|
183
|
+
| `OPENHORSE_WEBSEARCH_API_KEY` | configured API key | Provider-specific API key for MCP or adapters |
|
|
184
|
+
| `OPENHORSE_WEBSEARCH_MCP_ENDPOINT` | provider default | WebSearch MCP endpoint override |
|
|
185
|
+
| `OPENHORSE_WEBSEARCH_AUTH_TYPE` | `bearer` | MCP API key auth style: `bearer`, `header`, `query`, or `none` |
|
|
181
186
|
| `OPENHORSE_EMBEDDING_PROVIDER` | - | Embedding service (ollama/openai) |
|
|
182
187
|
|
|
183
188
|
See [docs/config.md](docs/config.md) for full details.
|
|
@@ -251,7 +256,7 @@ At startup, OpenHorse queries the `/models` endpoint for context window data. If
|
|
|
251
256
|
| Tool | Description |
|
|
252
257
|
|------|-------------|
|
|
253
258
|
| `web_fetch` | Fetch web page content |
|
|
254
|
-
| `web_search` | Web search |
|
|
259
|
+
| `web_search` | Web search through configured provider MCP service |
|
|
255
260
|
|
|
256
261
|
### Memory
|
|
257
262
|
|
|
@@ -445,6 +450,7 @@ openhorse/
|
|
|
445
450
|
- **Model context awareness** — per-model context windows (15+ known models)
|
|
446
451
|
- **Dynamic model discovery** — queries `/models` endpoint at startup
|
|
447
452
|
- **Simplified user config** — core fields: `apiKey`, `apiBaseUrl`, `defaultModel`, `fallbackModel`, `toolConfirmation`
|
|
453
|
+
- **Provider WebSearch** — `web_search` delegates to WebSearch MCP instead of scraping search engines locally
|
|
448
454
|
- **Agent-controlled internals** — `maxTokens`, `temperature`, `retries` managed internally
|
|
449
455
|
- **Fallback model** configurable by user
|
|
450
456
|
- **Streamlined command panel** rendering
|
package/dist/framework/tool.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/framework/tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,4BAA4B;AAC5B,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/framework/tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/framework/tool.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/framework/tool.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA4GH,8BAQC;AAOD,oCASC;AAGD,sCAEC;AArDD,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,sDAAsD;AACtD,MAAM,aAAa,GAAG;IACpB,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK;IAC9B,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK;IACvB,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;IAC1B,gBAAgB,EAAE,GAAqB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;CAClE,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,SAAgB,SAAS,CAAC,GAAkB;IAC1C,OAAO;QACL,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;QAClD,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,GAAG,GAAG;KACP,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,iEAAiE;AACjE,SAAgB,YAAY,CAAC,IAAmB;IAC9C,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,SAAgB,aAAa,CAAC,KAAsB;IAClD,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* 3. 环境变量
|
|
10
10
|
* 4. Agent 内部默认值
|
|
11
11
|
*/
|
|
12
|
-
import { type ToolConfirmationPolicy } from './global-config';
|
|
13
|
-
export type { ToolConfirmationPolicy };
|
|
12
|
+
import { type ToolConfirmationPolicy, type WebSearchMcpConfig } from './global-config';
|
|
13
|
+
export type { ToolConfirmationPolicy, WebSearchMcpConfig };
|
|
14
14
|
/**
|
|
15
15
|
* OpenHorse 运行时配置
|
|
16
16
|
* 用户可配置核心项:apiKey, apiBaseUrl, model, fallbackModel, toolConfirmation
|
|
@@ -27,6 +27,8 @@ export interface OpenHorseCLIConfig {
|
|
|
27
27
|
fallbackModel?: string;
|
|
28
28
|
/** How to handle tool permission checks that need confirmation. */
|
|
29
29
|
toolConfirmation: ToolConfirmationPolicy;
|
|
30
|
+
/** Remote MCP service used by web_search. */
|
|
31
|
+
webSearch?: WebSearchMcpConfig;
|
|
30
32
|
/** 实例名称 */
|
|
31
33
|
name: string;
|
|
32
34
|
/** 运行模式 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,CAAC;AAM3D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAEjC,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,gBAAgB,EAAE,sBAAsB,CAAC;IACzC,6CAA6C;IAC7C,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAG/B,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,WAAW;IACX,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC/C;AAkED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAAG,kBAAkB,CA8B1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAEhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAMpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcnF"}
|
package/dist/services/config.js
CHANGED
|
@@ -35,6 +35,44 @@ function normalizeToolConfirmationPolicy(value) {
|
|
|
35
35
|
? value
|
|
36
36
|
: undefined;
|
|
37
37
|
}
|
|
38
|
+
function parsePositiveInt(value) {
|
|
39
|
+
if (!value)
|
|
40
|
+
return undefined;
|
|
41
|
+
const parsed = Number.parseInt(value, 10);
|
|
42
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
|
|
43
|
+
}
|
|
44
|
+
function loadWebSearchConfig(globalConfig, overrides) {
|
|
45
|
+
const merged = {
|
|
46
|
+
...globalConfig.webSearch,
|
|
47
|
+
...overrides.webSearch,
|
|
48
|
+
};
|
|
49
|
+
const endpoint = process.env.OPENHORSE_WEBSEARCH_MCP_ENDPOINT;
|
|
50
|
+
const apiKey = process.env.OPENHORSE_WEBSEARCH_API_KEY ?? process.env.DASHSCOPE_API_KEY;
|
|
51
|
+
const provider = process.env.OPENHORSE_WEBSEARCH_PROVIDER ?? process.env.OPENHORSE_WEBSEARCH_MCP_PROVIDER;
|
|
52
|
+
const toolName = process.env.OPENHORSE_WEBSEARCH_MCP_TOOL;
|
|
53
|
+
const timeoutMs = parsePositiveInt(process.env.OPENHORSE_WEBSEARCH_MCP_TIMEOUT_MS);
|
|
54
|
+
const authType = process.env.OPENHORSE_WEBSEARCH_AUTH_TYPE;
|
|
55
|
+
const apiKeyHeader = process.env.OPENHORSE_WEBSEARCH_API_KEY_HEADER;
|
|
56
|
+
const apiKeyQueryParam = process.env.OPENHORSE_WEBSEARCH_API_KEY_QUERY_PARAM;
|
|
57
|
+
if (provider)
|
|
58
|
+
merged.provider = provider;
|
|
59
|
+
if (endpoint)
|
|
60
|
+
merged.endpoint = endpoint;
|
|
61
|
+
if (apiKey)
|
|
62
|
+
merged.apiKey = apiKey;
|
|
63
|
+
if (toolName)
|
|
64
|
+
merged.toolName = toolName;
|
|
65
|
+
if (timeoutMs)
|
|
66
|
+
merged.timeoutMs = timeoutMs;
|
|
67
|
+
if (authType === 'bearer' || authType === 'header' || authType === 'query' || authType === 'none') {
|
|
68
|
+
merged.authType = authType;
|
|
69
|
+
}
|
|
70
|
+
if (apiKeyHeader)
|
|
71
|
+
merged.apiKeyHeader = apiKeyHeader;
|
|
72
|
+
if (apiKeyQueryParam)
|
|
73
|
+
merged.apiKeyQueryParam = apiKeyQueryParam;
|
|
74
|
+
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
75
|
+
}
|
|
38
76
|
// ============================================================================
|
|
39
77
|
// 加载配置
|
|
40
78
|
// ============================================================================
|
|
@@ -54,6 +92,7 @@ function loadConfig(overrides = {}) {
|
|
|
54
92
|
?? normalizeToolConfirmationPolicy(globalConfig.toolConfirmation)
|
|
55
93
|
?? normalizeToolConfirmationPolicy(process.env.OPENHORSE_TOOL_CONFIRMATION)
|
|
56
94
|
?? INTERNAL_DEFAULTS.toolConfirmation,
|
|
95
|
+
webSearch: loadWebSearchConfig(globalConfig, overrides),
|
|
57
96
|
// Agent 内部参数
|
|
58
97
|
name: overrides.name ?? process.env.OPENHORSE_NAME ?? INTERNAL_DEFAULTS.name,
|
|
59
98
|
mode: (overrides.mode ?? process.env.OPENHORSE_MODE ?? INTERNAL_DEFAULTS.mode),
|
|
@@ -90,6 +129,9 @@ function getConfigSummary(config) {
|
|
|
90
129
|
mode: config.mode,
|
|
91
130
|
logLevel: config.logLevel,
|
|
92
131
|
toolConfirmation: config.toolConfirmation,
|
|
132
|
+
webSearch: config.webSearch?.endpoint || config.webSearch?.apiKey || config.webSearch?.toolName
|
|
133
|
+
? 'configured'
|
|
134
|
+
: '(default)',
|
|
93
135
|
};
|
|
94
136
|
}
|
|
95
137
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,27 @@ export interface ProjectConfig {
|
|
|
18
18
|
}
|
|
19
19
|
/** How to handle tool permission checks that request interactive confirmation. */
|
|
20
20
|
export type ToolConfirmationPolicy = 'ask' | 'allow' | 'deny';
|
|
21
|
+
/** Remote MCP service used by the built-in web_search tool. */
|
|
22
|
+
export interface WebSearchMcpConfig {
|
|
23
|
+
/** Provider profile id. Use "auto" or omit to infer from apiBaseUrl/model. */
|
|
24
|
+
provider?: string;
|
|
25
|
+
/** Streamable HTTP MCP endpoint. */
|
|
26
|
+
endpoint?: string;
|
|
27
|
+
/** API key for the WebSearch MCP service. */
|
|
28
|
+
apiKey?: string;
|
|
29
|
+
/** Optional tool name override when the MCP exposes multiple tools. */
|
|
30
|
+
toolName?: string;
|
|
31
|
+
/** Request timeout in milliseconds. */
|
|
32
|
+
timeoutMs?: number;
|
|
33
|
+
/** How to apply apiKey. Defaults to bearer Authorization. */
|
|
34
|
+
authType?: 'bearer' | 'header' | 'query' | 'none';
|
|
35
|
+
/** Header name for authType "bearer" or "header". Defaults to Authorization. */
|
|
36
|
+
apiKeyHeader?: string;
|
|
37
|
+
/** Query parameter name for authType "query". */
|
|
38
|
+
apiKeyQueryParam?: string;
|
|
39
|
+
/** Extra HTTP headers for the MCP endpoint. */
|
|
40
|
+
headers?: Record<string, string>;
|
|
41
|
+
}
|
|
21
42
|
/**
|
|
22
43
|
* 全局配置 — 用户只需关注少量核心项
|
|
23
44
|
* maxTokens/temperature/retries 等由 Agent 智能控制
|
|
@@ -33,6 +54,8 @@ export interface GlobalConfig {
|
|
|
33
54
|
fallbackModel?: string;
|
|
34
55
|
/** Tool confirmation fallback while the current CLI cannot show prompts. */
|
|
35
56
|
toolConfirmation?: ToolConfirmationPolicy;
|
|
57
|
+
/** WebSearch MCP configuration. */
|
|
58
|
+
webSearch?: WebSearchMcpConfig;
|
|
36
59
|
totalSessions: number;
|
|
37
60
|
totalTokens: number;
|
|
38
61
|
totalCost: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../../src/services/global-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,YAAY;AACZ,MAAM,WAAW,aAAa;IAC5B,cAAc;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,kFAAkF;AAClF,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../../src/services/global-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../src/services/global-config.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../src/services/global-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { OpenHorseCLIConfig } from './config';
|
|
2
|
+
export interface WebSearchAdapterInput {
|
|
3
|
+
query: string;
|
|
4
|
+
limit: number;
|
|
5
|
+
}
|
|
6
|
+
export interface WebSearchHit {
|
|
7
|
+
title: string;
|
|
8
|
+
url: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface WebSearchAdapterOutput {
|
|
12
|
+
provider: string;
|
|
13
|
+
hits: WebSearchHit[];
|
|
14
|
+
durationSeconds: number;
|
|
15
|
+
}
|
|
16
|
+
export type WebSearchMode = 'auto' | 'native' | 'mcp' | 'bailian' | 'zhipu' | 'tavily-mcp' | 'ddg' | 'duckduckgo' | 'tavily' | 'brave' | 'custom';
|
|
17
|
+
export declare function getWebSearchMode(config: OpenHorseCLIConfig): WebSearchMode;
|
|
18
|
+
export declare function shouldTryMcpFirst(mode: WebSearchMode): boolean;
|
|
19
|
+
export declare function shouldFallbackToAdapters(mode: WebSearchMode): boolean;
|
|
20
|
+
export declare function isExplicitAdapterMode(mode: WebSearchMode): boolean;
|
|
21
|
+
export declare function isMcpOnlyMode(mode: WebSearchMode): boolean;
|
|
22
|
+
export declare function runWebSearchAdapters(input: WebSearchAdapterInput, mode: WebSearchMode): Promise<WebSearchAdapterOutput>;
|
|
23
|
+
export declare function formatAdapterOutput(result: WebSearchAdapterOutput, query: string): string;
|
|
24
|
+
//# sourceMappingURL=web-search-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-search-adapters.d.ts","sourceRoot":"","sources":["../../src/services/web-search-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAeD,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,QAAQ,GACR,KAAK,GACL,SAAS,GACT,OAAO,GACP,YAAY,GACZ,KAAK,GACL,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAkDb,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAiB1E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAErE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAElE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE1D;AAsPD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,qBAAqB,EAC5B,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,sBAAsB,CAAC,CAuBjC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAazF"}
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getWebSearchMode = getWebSearchMode;
|
|
7
|
+
exports.shouldTryMcpFirst = shouldTryMcpFirst;
|
|
8
|
+
exports.shouldFallbackToAdapters = shouldFallbackToAdapters;
|
|
9
|
+
exports.isExplicitAdapterMode = isExplicitAdapterMode;
|
|
10
|
+
exports.isMcpOnlyMode = isMcpOnlyMode;
|
|
11
|
+
exports.runWebSearchAdapters = runWebSearchAdapters;
|
|
12
|
+
exports.formatAdapterOutput = formatAdapterOutput;
|
|
13
|
+
const axios_1 = __importDefault(require("axios"));
|
|
14
|
+
const ADAPTER_MODES = new Set(['ddg', 'duckduckgo', 'tavily', 'brave', 'custom']);
|
|
15
|
+
const MCP_ONLY_MODES = new Set(['native', 'mcp', 'bailian', 'zhipu', 'tavily-mcp']);
|
|
16
|
+
function hasProxyEnv() {
|
|
17
|
+
return Boolean(process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.https_proxy || process.env.http_proxy);
|
|
18
|
+
}
|
|
19
|
+
function isFetchMocked() {
|
|
20
|
+
return Boolean(global.fetch?._isMockFunction || global.fetch?.mock);
|
|
21
|
+
}
|
|
22
|
+
async function adapterFetch(url, init = {}) {
|
|
23
|
+
if (!hasProxyEnv() || isFetchMocked()) {
|
|
24
|
+
const response = await fetch(url, init);
|
|
25
|
+
return {
|
|
26
|
+
ok: response.ok,
|
|
27
|
+
status: response.status,
|
|
28
|
+
text: () => response.text(),
|
|
29
|
+
json: () => response.json(),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const response = await axios_1.default.request({
|
|
33
|
+
url,
|
|
34
|
+
method: init.method || 'GET',
|
|
35
|
+
headers: init.headers,
|
|
36
|
+
data: init.body,
|
|
37
|
+
timeout: 30000,
|
|
38
|
+
validateStatus: () => true,
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
ok: response.status >= 200 && response.status < 300,
|
|
42
|
+
status: response.status,
|
|
43
|
+
text: async () => typeof response.data === 'string' ? response.data : JSON.stringify(response.data),
|
|
44
|
+
json: async () => typeof response.data === 'string' ? JSON.parse(response.data) : response.data,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function getRawMode(config) {
|
|
48
|
+
return (config.webSearch?.provider
|
|
49
|
+
|| process.env.OPENHORSE_WEBSEARCH_PROVIDER
|
|
50
|
+
|| process.env.OPENHORSE_WEBSEARCH_MCP_PROVIDER
|
|
51
|
+
|| 'auto').trim().toLowerCase();
|
|
52
|
+
}
|
|
53
|
+
function getWebSearchMode(config) {
|
|
54
|
+
const mode = getRawMode(config);
|
|
55
|
+
if (mode === 'native'
|
|
56
|
+
|| mode === 'mcp'
|
|
57
|
+
|| mode === 'bailian'
|
|
58
|
+
|| mode === 'zhipu'
|
|
59
|
+
|| mode === 'tavily-mcp'
|
|
60
|
+
|| mode === 'ddg'
|
|
61
|
+
|| mode === 'duckduckgo'
|
|
62
|
+
|| mode === 'tavily'
|
|
63
|
+
|| mode === 'brave'
|
|
64
|
+
|| mode === 'custom') {
|
|
65
|
+
return mode;
|
|
66
|
+
}
|
|
67
|
+
return 'auto';
|
|
68
|
+
}
|
|
69
|
+
function shouldTryMcpFirst(mode) {
|
|
70
|
+
return !ADAPTER_MODES.has(mode);
|
|
71
|
+
}
|
|
72
|
+
function shouldFallbackToAdapters(mode) {
|
|
73
|
+
return mode === 'auto';
|
|
74
|
+
}
|
|
75
|
+
function isExplicitAdapterMode(mode) {
|
|
76
|
+
return ADAPTER_MODES.has(mode);
|
|
77
|
+
}
|
|
78
|
+
function isMcpOnlyMode(mode) {
|
|
79
|
+
return MCP_ONLY_MODES.has(mode);
|
|
80
|
+
}
|
|
81
|
+
function decodeHtml(value) {
|
|
82
|
+
return value
|
|
83
|
+
.replace(/&/g, '&')
|
|
84
|
+
.replace(/"/g, '"')
|
|
85
|
+
.replace(/'/g, "'")
|
|
86
|
+
.replace(/</g, '<')
|
|
87
|
+
.replace(/>/g, '>')
|
|
88
|
+
.replace(/<[^>]+>/g, '')
|
|
89
|
+
.trim();
|
|
90
|
+
}
|
|
91
|
+
function unwrapDuckDuckGoUrl(rawUrl) {
|
|
92
|
+
const decoded = decodeHtml(rawUrl);
|
|
93
|
+
try {
|
|
94
|
+
const url = decoded.startsWith('//') ? new URL('https:' + decoded) : new URL(decoded);
|
|
95
|
+
const uddg = url.searchParams.get('uddg');
|
|
96
|
+
return uddg ? decodeURIComponent(uddg) : url.toString();
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return decoded;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function limitHits(hits, limit) {
|
|
103
|
+
const seen = new Set();
|
|
104
|
+
const out = [];
|
|
105
|
+
for (const hit of hits) {
|
|
106
|
+
if (!hit.url || seen.has(hit.url))
|
|
107
|
+
continue;
|
|
108
|
+
seen.add(hit.url);
|
|
109
|
+
out.push(hit);
|
|
110
|
+
if (out.length >= limit)
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
function normalizeHit(raw) {
|
|
116
|
+
if (!raw || typeof raw !== 'object')
|
|
117
|
+
return null;
|
|
118
|
+
const title = raw.title || raw.name || raw.headline || raw.heading || raw.url || raw.link;
|
|
119
|
+
const url = raw.url || raw.link || raw.href || raw.uri;
|
|
120
|
+
if (typeof title !== 'string' || typeof url !== 'string')
|
|
121
|
+
return null;
|
|
122
|
+
const description = raw.description || raw.snippet || raw.content || raw.summary || raw.text;
|
|
123
|
+
return {
|
|
124
|
+
title,
|
|
125
|
+
url,
|
|
126
|
+
...(typeof description === 'string' && description ? { description } : {}),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function extractHits(payload) {
|
|
130
|
+
const arrays = [
|
|
131
|
+
payload?.results,
|
|
132
|
+
payload?.web?.results,
|
|
133
|
+
payload?.organic_results,
|
|
134
|
+
payload?.data,
|
|
135
|
+
payload?.items,
|
|
136
|
+
].filter(Array.isArray);
|
|
137
|
+
for (const array of arrays) {
|
|
138
|
+
const hits = array.map(normalizeHit).filter(Boolean);
|
|
139
|
+
if (hits.length > 0)
|
|
140
|
+
return hits;
|
|
141
|
+
}
|
|
142
|
+
if (Array.isArray(payload)) {
|
|
143
|
+
return payload.map(normalizeHit).filter(Boolean);
|
|
144
|
+
}
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
function withDuration(provider, start, hits) {
|
|
148
|
+
return {
|
|
149
|
+
provider,
|
|
150
|
+
hits,
|
|
151
|
+
durationSeconds: (Date.now() - start) / 1000,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const tavilyAdapter = {
|
|
155
|
+
name: 'tavily',
|
|
156
|
+
isConfigured() {
|
|
157
|
+
return Boolean(process.env.TAVILY_API_KEY || process.env.OPENHORSE_WEBSEARCH_API_KEY);
|
|
158
|
+
},
|
|
159
|
+
async search(input) {
|
|
160
|
+
const start = Date.now();
|
|
161
|
+
const apiKey = process.env.TAVILY_API_KEY || process.env.OPENHORSE_WEBSEARCH_API_KEY;
|
|
162
|
+
if (!apiKey)
|
|
163
|
+
throw new Error('Tavily search is not configured. Set TAVILY_API_KEY.');
|
|
164
|
+
const response = await adapterFetch('https://api.tavily.com/search', {
|
|
165
|
+
method: 'POST',
|
|
166
|
+
headers: {
|
|
167
|
+
'Content-Type': 'application/json',
|
|
168
|
+
Authorization: `Bearer ${apiKey}`,
|
|
169
|
+
},
|
|
170
|
+
body: JSON.stringify({
|
|
171
|
+
query: input.query,
|
|
172
|
+
max_results: input.limit,
|
|
173
|
+
search_depth: 'basic',
|
|
174
|
+
}),
|
|
175
|
+
});
|
|
176
|
+
if (!response.ok) {
|
|
177
|
+
throw new Error(`Tavily search failed: HTTP ${response.status} ${await response.text()}`);
|
|
178
|
+
}
|
|
179
|
+
const payload = await response.json();
|
|
180
|
+
return withDuration('tavily', start, limitHits(extractHits(payload), input.limit));
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
const braveAdapter = {
|
|
184
|
+
name: 'brave',
|
|
185
|
+
isConfigured() {
|
|
186
|
+
return Boolean(process.env.BRAVE_API_KEY);
|
|
187
|
+
},
|
|
188
|
+
async search(input) {
|
|
189
|
+
const start = Date.now();
|
|
190
|
+
if (!process.env.BRAVE_API_KEY)
|
|
191
|
+
throw new Error('Brave search is not configured. Set BRAVE_API_KEY.');
|
|
192
|
+
const url = new URL('https://api.search.brave.com/res/v1/web/search');
|
|
193
|
+
url.searchParams.set('q', input.query);
|
|
194
|
+
url.searchParams.set('count', String(Math.min(Math.max(input.limit, 1), 20)));
|
|
195
|
+
const response = await adapterFetch(url.toString(), {
|
|
196
|
+
headers: {
|
|
197
|
+
Accept: 'application/json',
|
|
198
|
+
'X-Subscription-Token': process.env.BRAVE_API_KEY,
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
if (!response.ok) {
|
|
202
|
+
throw new Error(`Brave search failed: HTTP ${response.status} ${await response.text()}`);
|
|
203
|
+
}
|
|
204
|
+
const payload = await response.json();
|
|
205
|
+
return withDuration('brave', start, limitHits(extractHits(payload), input.limit));
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
const customAdapter = {
|
|
209
|
+
name: 'custom',
|
|
210
|
+
isConfigured() {
|
|
211
|
+
return Boolean(process.env.OPENHORSE_WEBSEARCH_API || process.env.WEB_SEARCH_API);
|
|
212
|
+
},
|
|
213
|
+
async search(input) {
|
|
214
|
+
const start = Date.now();
|
|
215
|
+
const endpoint = process.env.OPENHORSE_WEBSEARCH_API || process.env.WEB_SEARCH_API;
|
|
216
|
+
if (!endpoint)
|
|
217
|
+
throw new Error('Custom search is not configured. Set OPENHORSE_WEBSEARCH_API.');
|
|
218
|
+
const method = (process.env.OPENHORSE_WEBSEARCH_METHOD || process.env.WEB_METHOD || 'GET').toUpperCase();
|
|
219
|
+
const queryParam = process.env.OPENHORSE_WEBSEARCH_QUERY_PARAM || process.env.WEB_QUERY_PARAM || 'q';
|
|
220
|
+
const headers = { Accept: 'application/json' };
|
|
221
|
+
const apiKey = process.env.OPENHORSE_WEBSEARCH_API_KEY || process.env.WEB_KEY;
|
|
222
|
+
const authHeader = process.env.OPENHORSE_WEBSEARCH_API_KEY_HEADER || process.env.WEB_AUTH_HEADER;
|
|
223
|
+
if (apiKey && authHeader)
|
|
224
|
+
headers[authHeader] = apiKey;
|
|
225
|
+
let response;
|
|
226
|
+
if (method === 'POST') {
|
|
227
|
+
headers['Content-Type'] = 'application/json';
|
|
228
|
+
response = await adapterFetch(endpoint, {
|
|
229
|
+
method: 'POST',
|
|
230
|
+
headers,
|
|
231
|
+
body: JSON.stringify({ [queryParam]: input.query, limit: input.limit }),
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
const url = new URL(endpoint);
|
|
236
|
+
url.searchParams.set(queryParam, input.query);
|
|
237
|
+
url.searchParams.set('limit', String(input.limit));
|
|
238
|
+
response = await adapterFetch(url.toString(), { headers });
|
|
239
|
+
}
|
|
240
|
+
if (!response.ok) {
|
|
241
|
+
throw new Error(`Custom search failed: HTTP ${response.status} ${await response.text()}`);
|
|
242
|
+
}
|
|
243
|
+
const payload = await response.json();
|
|
244
|
+
return withDuration('custom', start, limitHits(extractHits(payload), input.limit));
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
const duckDuckGoAdapter = {
|
|
248
|
+
name: 'duckduckgo',
|
|
249
|
+
isConfigured() {
|
|
250
|
+
return true;
|
|
251
|
+
},
|
|
252
|
+
async search(input) {
|
|
253
|
+
const start = Date.now();
|
|
254
|
+
const url = new URL('https://duckduckgo.com/html/');
|
|
255
|
+
url.searchParams.set('q', input.query);
|
|
256
|
+
const response = await adapterFetch(url.toString(), {
|
|
257
|
+
headers: {
|
|
258
|
+
'User-Agent': 'Mozilla/5.0 OpenHorse/0.1.18',
|
|
259
|
+
Accept: 'text/html,application/xhtml+xml,text/html;q=0.9,*/*;q=0.8',
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
if (!response.ok) {
|
|
263
|
+
throw new Error(`DuckDuckGo search failed: HTTP ${response.status}`);
|
|
264
|
+
}
|
|
265
|
+
const html = await response.text();
|
|
266
|
+
if (/anomaly in the request|making requests too quickly/i.test(html)) {
|
|
267
|
+
throw new Error('DuckDuckGo scraping is rate-limited from this network.');
|
|
268
|
+
}
|
|
269
|
+
const hits = [];
|
|
270
|
+
const anchorPattern = /<a[^>]+class="[^"]*result__a[^"]*"[^>]+href="([^"]+)"[^>]*>([\s\S]*?)<\/a>/gi;
|
|
271
|
+
let match;
|
|
272
|
+
while ((match = anchorPattern.exec(html)) !== null) {
|
|
273
|
+
hits.push({
|
|
274
|
+
title: decodeHtml(match[2]),
|
|
275
|
+
url: unwrapDuckDuckGoUrl(match[1]),
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
if (hits.length === 0) {
|
|
279
|
+
throw new Error('DuckDuckGo returned no parseable results.');
|
|
280
|
+
}
|
|
281
|
+
return withDuration('duckduckgo', start, limitHits(hits, input.limit));
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
const ADAPTER_BY_MODE = {
|
|
285
|
+
tavily: tavilyAdapter,
|
|
286
|
+
brave: braveAdapter,
|
|
287
|
+
custom: customAdapter,
|
|
288
|
+
ddg: duckDuckGoAdapter,
|
|
289
|
+
duckduckgo: duckDuckGoAdapter,
|
|
290
|
+
};
|
|
291
|
+
function autoAdapterChain() {
|
|
292
|
+
return [
|
|
293
|
+
tavilyAdapter,
|
|
294
|
+
braveAdapter,
|
|
295
|
+
customAdapter,
|
|
296
|
+
duckDuckGoAdapter,
|
|
297
|
+
].filter(adapter => adapter.isConfigured());
|
|
298
|
+
}
|
|
299
|
+
function explicitAdapterChain(mode) {
|
|
300
|
+
const adapter = ADAPTER_BY_MODE[mode];
|
|
301
|
+
return adapter ? [adapter] : [];
|
|
302
|
+
}
|
|
303
|
+
async function runWebSearchAdapters(input, mode) {
|
|
304
|
+
const chain = mode === 'auto' ? autoAdapterChain() : explicitAdapterChain(mode);
|
|
305
|
+
if (chain.length === 0) {
|
|
306
|
+
throw new Error(`No web search adapter is available for mode "${mode}".`);
|
|
307
|
+
}
|
|
308
|
+
const errors = [];
|
|
309
|
+
for (const adapter of chain) {
|
|
310
|
+
try {
|
|
311
|
+
const result = await adapter.search(input);
|
|
312
|
+
if (result.hits.length > 0 || mode !== 'auto')
|
|
313
|
+
return result;
|
|
314
|
+
errors.push(new Error(`${adapter.name} returned no results`));
|
|
315
|
+
}
|
|
316
|
+
catch (err) {
|
|
317
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
318
|
+
errors.push(error);
|
|
319
|
+
if (mode !== 'auto')
|
|
320
|
+
throw error;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
throw new Error(`All ${chain.length} web search adapters failed:\n`
|
|
324
|
+
+ errors.map((error, index) => ` ${index + 1}. ${error.message}`).join('\n'));
|
|
325
|
+
}
|
|
326
|
+
function formatAdapterOutput(result, query) {
|
|
327
|
+
const lines = [
|
|
328
|
+
`Web search results for "${query}" via ${result.provider}:`,
|
|
329
|
+
'',
|
|
330
|
+
'Sources:',
|
|
331
|
+
];
|
|
332
|
+
for (const hit of result.hits) {
|
|
333
|
+
const description = hit.description ? ` - ${hit.description}` : '';
|
|
334
|
+
lines.push(`- [${hit.title}](${hit.url})${description}`);
|
|
335
|
+
}
|
|
336
|
+
return lines.join('\n');
|
|
337
|
+
}
|
|
338
|
+
//# sourceMappingURL=web-search-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-search-adapters.js","sourceRoot":"","sources":["../../src/services/web-search-adapters.ts"],"names":[],"mappings":"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"}
|