@pentoshi/clai 0.10.4 → 0.11.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/README.md +32 -0
- package/dist/agent/runner.js +41 -3
- package/dist/agent/runner.js.map +1 -1
- package/dist/commands/providers.js +28 -0
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/search-providers.d.ts +50 -0
- package/dist/commands/search-providers.js +134 -0
- package/dist/commands/search-providers.js.map +1 -0
- package/dist/commands/update.js +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/provider.js +9 -6
- package/dist/llm/provider.js.map +1 -1
- package/dist/prompts/index.d.ts +1 -1
- package/dist/prompts/index.js +6 -0
- package/dist/prompts/index.js.map +1 -1
- package/dist/repl.d.ts +1 -0
- package/dist/repl.js +139 -113
- package/dist/repl.js.map +1 -1
- package/dist/safety/classifier.js +40 -0
- package/dist/safety/classifier.js.map +1 -1
- package/dist/store/config.d.ts +5 -0
- package/dist/store/config.js +7 -0
- package/dist/store/config.js.map +1 -1
- package/dist/store/keys.d.ts +65 -0
- package/dist/store/keys.js +164 -28
- package/dist/store/keys.js.map +1 -1
- package/dist/tools/http.d.ts +12 -1
- package/dist/tools/http.js +8 -43
- package/dist/tools/http.js.map +1 -1
- package/dist/tools/registry.js +52 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/shell.d.ts +25 -0
- package/dist/tools/shell.js +155 -6
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/web/audit.d.ts +154 -0
- package/dist/tools/web/audit.js +147 -0
- package/dist/tools/web/audit.js.map +1 -0
- package/dist/tools/web/budget.d.ts +76 -0
- package/dist/tools/web/budget.js +187 -0
- package/dist/tools/web/budget.js.map +1 -0
- package/dist/tools/web/capture.d.ts +201 -0
- package/dist/tools/web/capture.js +380 -0
- package/dist/tools/web/capture.js.map +1 -0
- package/dist/tools/web/fetch-core.d.ts +66 -0
- package/dist/tools/web/fetch-core.js +1123 -0
- package/dist/tools/web/fetch-core.js.map +1 -0
- package/dist/tools/web/fetch.d.ts +42 -0
- package/dist/tools/web/fetch.js +115 -0
- package/dist/tools/web/fetch.js.map +1 -0
- package/dist/tools/web/providers/brave.d.ts +46 -0
- package/dist/tools/web/providers/brave.js +263 -0
- package/dist/tools/web/providers/brave.js.map +1 -0
- package/dist/tools/web/providers/duckduckgo.d.ts +47 -0
- package/dist/tools/web/providers/duckduckgo.js +248 -0
- package/dist/tools/web/providers/duckduckgo.js.map +1 -0
- package/dist/tools/web/providers/provider.d.ts +99 -0
- package/dist/tools/web/providers/provider.js +38 -0
- package/dist/tools/web/providers/provider.js.map +1 -0
- package/dist/tools/web/providers/tavily.d.ts +52 -0
- package/dist/tools/web/providers/tavily.js +285 -0
- package/dist/tools/web/providers/tavily.js.map +1 -0
- package/dist/tools/web/readable.d.ts +67 -0
- package/dist/tools/web/readable.js +248 -0
- package/dist/tools/web/readable.js.map +1 -0
- package/dist/tools/web/redact.d.ts +120 -0
- package/dist/tools/web/redact.js +155 -0
- package/dist/tools/web/redact.js.map +1 -0
- package/dist/tools/web/search.d.ts +51 -0
- package/dist/tools/web/search.js +389 -0
- package/dist/tools/web/search.js.map +1 -0
- package/dist/tools/web/ssrf-guard.d.ts +85 -0
- package/dist/tools/web/ssrf-guard.js +265 -0
- package/dist/tools/web/ssrf-guard.js.map +1 -0
- package/dist/tools/web/types.d.ts +331 -0
- package/dist/tools/web/types.js +71 -0
- package/dist/tools/web/types.js.map +1 -0
- package/dist/ui/keys.js +3 -2
- package/dist/ui/keys.js.map +1 -1
- package/dist/ui/spinner.js +87 -14
- package/dist/ui/spinner.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-core.js","sourceRoot":"","sources":["../../../src/tools/web/fetch-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `web.fetch` registry handler.
|
|
3
|
+
*
|
|
4
|
+
* Thin adapter that converts a {@link WebFetchArgs} call into a typed
|
|
5
|
+
* {@link WebFetchOutcome} via {@link webFetchCore}, emits exactly one
|
|
6
|
+
* `auditLog("tool.web_fetch", payload)` per invocation (Requirement 5.6),
|
|
7
|
+
* and returns the standard {@link ToolResult} shape consumed by the agent
|
|
8
|
+
* loop and `tool.batch`.
|
|
9
|
+
*
|
|
10
|
+
* Output composition (per the design's "ToolResult mapping" section):
|
|
11
|
+
*
|
|
12
|
+
* <final URL> <status> <content-type>
|
|
13
|
+
* mode=<readable|raw> resolvedIp=<ip> ...
|
|
14
|
+
*
|
|
15
|
+
* <metadata block as JSON>
|
|
16
|
+
*
|
|
17
|
+
* ---
|
|
18
|
+
* <body>
|
|
19
|
+
*
|
|
20
|
+
* On error outcomes the `output` field begins with the human-readable
|
|
21
|
+
* message defined in the design's error matrix (e.g.
|
|
22
|
+
* "Refusing binary content type: image/png").
|
|
23
|
+
*/
|
|
24
|
+
import type { ToolResult } from "../../types.js";
|
|
25
|
+
import type { ToolRunOptions } from "../registry.js";
|
|
26
|
+
import { type WebFetchCoreOptions } from "./fetch-core.js";
|
|
27
|
+
import type { WebFetchArgs } from "./types.js";
|
|
28
|
+
/**
|
|
29
|
+
* Optional injection point for tests so they can stub the underlying
|
|
30
|
+
* transport without monkey-patching `node:http`/`node:https`. Production
|
|
31
|
+
* callers never pass these; the registry handler invokes `webFetch`
|
|
32
|
+
* with no extra options.
|
|
33
|
+
*/
|
|
34
|
+
export interface WebFetchOptions extends ToolRunOptions {
|
|
35
|
+
core?: WebFetchCoreOptions;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Run `web.fetch`. Always emits a single audit-log entry; never throws —
|
|
39
|
+
* argument validation, SSRF blocks, network errors, HTTP errors, and
|
|
40
|
+
* timeouts surface as `ok=false` results.
|
|
41
|
+
*/
|
|
42
|
+
export declare function webFetch(args: WebFetchArgs, options?: WebFetchOptions): Promise<ToolResult>;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `web.fetch` registry handler.
|
|
3
|
+
*
|
|
4
|
+
* Thin adapter that converts a {@link WebFetchArgs} call into a typed
|
|
5
|
+
* {@link WebFetchOutcome} via {@link webFetchCore}, emits exactly one
|
|
6
|
+
* `auditLog("tool.web_fetch", payload)` per invocation (Requirement 5.6),
|
|
7
|
+
* and returns the standard {@link ToolResult} shape consumed by the agent
|
|
8
|
+
* loop and `tool.batch`.
|
|
9
|
+
*
|
|
10
|
+
* Output composition (per the design's "ToolResult mapping" section):
|
|
11
|
+
*
|
|
12
|
+
* <final URL> <status> <content-type>
|
|
13
|
+
* mode=<readable|raw> resolvedIp=<ip> ...
|
|
14
|
+
*
|
|
15
|
+
* <metadata block as JSON>
|
|
16
|
+
*
|
|
17
|
+
* ---
|
|
18
|
+
* <body>
|
|
19
|
+
*
|
|
20
|
+
* On error outcomes the `output` field begins with the human-readable
|
|
21
|
+
* message defined in the design's error matrix (e.g.
|
|
22
|
+
* "Refusing binary content type: image/png").
|
|
23
|
+
*/
|
|
24
|
+
import { auditLog } from "../../store/logs.js";
|
|
25
|
+
import { webFetchCore, } from "./fetch-core.js";
|
|
26
|
+
import { buildFetchAuditPayload } from "./audit.js";
|
|
27
|
+
/**
|
|
28
|
+
* Run `web.fetch`. Always emits a single audit-log entry; never throws —
|
|
29
|
+
* argument validation, SSRF blocks, network errors, HTTP errors, and
|
|
30
|
+
* timeouts surface as `ok=false` results.
|
|
31
|
+
*/
|
|
32
|
+
export async function webFetch(args, options = {}) {
|
|
33
|
+
const outcome = await webFetchCore(args, options.core ?? {});
|
|
34
|
+
// Audit every invocation, success or failure (Requirement 5.6).
|
|
35
|
+
// We never await the audit log so a slow disk does not delay the
|
|
36
|
+
// tool result; logging errors are swallowed because they should not
|
|
37
|
+
// cascade into a tool failure.
|
|
38
|
+
void emitAudit(outcome);
|
|
39
|
+
return outcome.ok ? renderSuccess(outcome) : renderError(outcome);
|
|
40
|
+
}
|
|
41
|
+
async function emitAudit(outcome) {
|
|
42
|
+
try {
|
|
43
|
+
await auditLog("tool.web_fetch", buildFetchAuditPayload(outcome));
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Audit-log failures must not surface as tool errors.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Compose the success-path `output` string. The first line is a one-shot
|
|
51
|
+
* summary so the agent sees the most useful facts before any JSON; the
|
|
52
|
+
* metadata JSON block follows; then `---` separates the body so the
|
|
53
|
+
* agent loop can split if needed.
|
|
54
|
+
*/
|
|
55
|
+
function renderSuccess(outcome) {
|
|
56
|
+
const meta = outcome.metadata;
|
|
57
|
+
const summary = `${meta.finalUrl} ${meta.status}${meta.contentType ? ` ${meta.contentType}` : ""}`;
|
|
58
|
+
const second = `mode=${meta.mode} resolvedIp=${meta.resolvedIp || "?"} bytes=${meta.bytesReceived}${meta.truncated ? ` (truncated@${meta.truncatedAt ?? meta.bytesReceived})` : ""}`;
|
|
59
|
+
// Stripped metadata for the JSON block — drop the body-shape fields
|
|
60
|
+
// so the agent reads them once on the first line.
|
|
61
|
+
const jsonBlock = JSON.stringify({
|
|
62
|
+
requestedUrl: meta.requestedUrl,
|
|
63
|
+
finalUrl: meta.finalUrl,
|
|
64
|
+
status: meta.status,
|
|
65
|
+
contentType: meta.contentType,
|
|
66
|
+
resolvedIp: meta.resolvedIp,
|
|
67
|
+
finalHostname: meta.finalHostname,
|
|
68
|
+
mode: meta.mode,
|
|
69
|
+
bytesReceived: meta.bytesReceived,
|
|
70
|
+
truncated: meta.truncated,
|
|
71
|
+
truncatedAt: meta.truncatedAt,
|
|
72
|
+
headers: meta.headers,
|
|
73
|
+
tls: meta.tls,
|
|
74
|
+
timing: meta.timing,
|
|
75
|
+
redirectChain: meta.redirectChain,
|
|
76
|
+
cookies: meta.cookies,
|
|
77
|
+
budget: meta.budget,
|
|
78
|
+
}, null, 2);
|
|
79
|
+
const output = `${summary}\n${second}\n\n${jsonBlock}\n\n---\n${outcome.body}`;
|
|
80
|
+
return {
|
|
81
|
+
ok: true,
|
|
82
|
+
output,
|
|
83
|
+
exitCode: 0,
|
|
84
|
+
truncated: meta.truncated || false,
|
|
85
|
+
stats: {
|
|
86
|
+
bytesRead: meta.bytesReceived,
|
|
87
|
+
bytesDropped: 0,
|
|
88
|
+
linesRead: outcome.body.split("\n").length,
|
|
89
|
+
elapsedMs: meta.timing?.totalMs ?? 0,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Compose the error-path `output` string. The first line is the
|
|
95
|
+
* human-readable error message from the design's error matrix; a JSON
|
|
96
|
+
* envelope of the outcome follows so callers can branch on
|
|
97
|
+
* `error.kind` if needed.
|
|
98
|
+
*/
|
|
99
|
+
function renderError(outcome) {
|
|
100
|
+
const err = outcome.error;
|
|
101
|
+
const head = err?.message ?? "web.fetch failed";
|
|
102
|
+
const body = JSON.stringify({
|
|
103
|
+
error: err,
|
|
104
|
+
requestedUrl: outcome.metadata.requestedUrl,
|
|
105
|
+
finalUrl: outcome.metadata.finalUrl,
|
|
106
|
+
resolvedIp: outcome.metadata.resolvedIp,
|
|
107
|
+
finalHostname: outcome.metadata.finalHostname,
|
|
108
|
+
}, null, 2);
|
|
109
|
+
return {
|
|
110
|
+
ok: false,
|
|
111
|
+
output: `${head}\n\n${body}`,
|
|
112
|
+
exitCode: 1,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/tools/web/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brave Search adapter for `web.search`.
|
|
3
|
+
*
|
|
4
|
+
* Implements the {@link SearchProvider} contract from `./provider.ts` and
|
|
5
|
+
* registers itself in the {@link searchProviders} registry on import. The
|
|
6
|
+
* adapter performs exactly one outbound HTTPS request per invocation
|
|
7
|
+
* (Requirement 6.7), forwards the caller-provided {@link AbortSignal} to
|
|
8
|
+
* the underlying transport so the 15-second `web.search` timeout is
|
|
9
|
+
* honored (Requirement 1.8), and returns a {@link RawProviderResponse}
|
|
10
|
+
* describing the HTTP outcome plus the raw hit list.
|
|
11
|
+
*
|
|
12
|
+
* Status-to-error-kind classification (`401/403 → auth`, `429 → rate-limit`,
|
|
13
|
+
* `5xx → server`, non-JSON → `parse`, other non-2xx → `http`) is the
|
|
14
|
+
* responsibility of the `web.search` handler; this adapter only exposes
|
|
15
|
+
* the raw HTTP `status` and the parsed (or `parseError`-flagged) hit list
|
|
16
|
+
* so that mapping can be applied uniformly across providers (Requirements
|
|
17
|
+
* 6.1, 6.2, 6.5, 6.6).
|
|
18
|
+
*
|
|
19
|
+
* Endpoint and request shape match the design's "Per-provider notes →
|
|
20
|
+
* Brave Search" section (`.kiro/specs/web-search-and-fetch/design.md`).
|
|
21
|
+
*/
|
|
22
|
+
import https from "node:https";
|
|
23
|
+
import { type SearchProvider } from "./provider.js";
|
|
24
|
+
/**
|
|
25
|
+
* Inject point for the underlying HTTPS transport so unit/property tests
|
|
26
|
+
* in epic 7.x can drive the adapter without touching the network. The
|
|
27
|
+
* default mirrors the standard `node:https.request` signature.
|
|
28
|
+
*
|
|
29
|
+
* Kept module-private (not exported) because the public adapter contract
|
|
30
|
+
* intentionally takes no transport argument — `web.search` always uses
|
|
31
|
+
* the default transport in production.
|
|
32
|
+
*/
|
|
33
|
+
type HttpsRequestFn = typeof https.request;
|
|
34
|
+
/**
|
|
35
|
+
* Test-only seam: swap the HTTPS transport used by the adapter.
|
|
36
|
+
* Production callers never invoke this; tests in 7.x use it to inject a
|
|
37
|
+
* stubbed `request` implementation that emits scripted responses.
|
|
38
|
+
*/
|
|
39
|
+
export declare function __setBraveHttpsRequestForTesting(fn: HttpsRequestFn | undefined): void;
|
|
40
|
+
/**
|
|
41
|
+
* Brave Search adapter. Registered in {@link searchProviders} as a
|
|
42
|
+
* side-effect of importing this module — `web.search` resolves the active
|
|
43
|
+
* provider via the registry.
|
|
44
|
+
*/
|
|
45
|
+
export declare const braveProvider: SearchProvider;
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brave Search adapter for `web.search`.
|
|
3
|
+
*
|
|
4
|
+
* Implements the {@link SearchProvider} contract from `./provider.ts` and
|
|
5
|
+
* registers itself in the {@link searchProviders} registry on import. The
|
|
6
|
+
* adapter performs exactly one outbound HTTPS request per invocation
|
|
7
|
+
* (Requirement 6.7), forwards the caller-provided {@link AbortSignal} to
|
|
8
|
+
* the underlying transport so the 15-second `web.search` timeout is
|
|
9
|
+
* honored (Requirement 1.8), and returns a {@link RawProviderResponse}
|
|
10
|
+
* describing the HTTP outcome plus the raw hit list.
|
|
11
|
+
*
|
|
12
|
+
* Status-to-error-kind classification (`401/403 → auth`, `429 → rate-limit`,
|
|
13
|
+
* `5xx → server`, non-JSON → `parse`, other non-2xx → `http`) is the
|
|
14
|
+
* responsibility of the `web.search` handler; this adapter only exposes
|
|
15
|
+
* the raw HTTP `status` and the parsed (or `parseError`-flagged) hit list
|
|
16
|
+
* so that mapping can be applied uniformly across providers (Requirements
|
|
17
|
+
* 6.1, 6.2, 6.5, 6.6).
|
|
18
|
+
*
|
|
19
|
+
* Endpoint and request shape match the design's "Per-provider notes →
|
|
20
|
+
* Brave Search" section (`.kiro/specs/web-search-and-fetch/design.md`).
|
|
21
|
+
*/
|
|
22
|
+
import https from "node:https";
|
|
23
|
+
import { searchProviders, } from "./provider.js";
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Constants
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/** Brave Search Web API endpoint (host + path). */
|
|
28
|
+
const BRAVE_HOST = "api.search.brave.com";
|
|
29
|
+
const BRAVE_PATH = "/res/v1/web/search";
|
|
30
|
+
/**
|
|
31
|
+
* `count` parameter accepted by the Brave Web Search API. The provider's
|
|
32
|
+
* documented range is 1..20, which already matches the `maxResults`
|
|
33
|
+
* clamp the `web.search` handler enforces, so we forward the value
|
|
34
|
+
* unchanged but defend against out-of-range inputs that might slip past
|
|
35
|
+
* the handler in tests.
|
|
36
|
+
*/
|
|
37
|
+
const BRAVE_MIN_COUNT = 1;
|
|
38
|
+
const BRAVE_MAX_COUNT = 20;
|
|
39
|
+
/** User-Agent sent on outbound Brave requests. */
|
|
40
|
+
const DEFAULT_USER_AGENT = "clai-web-search/1.0";
|
|
41
|
+
/**
|
|
42
|
+
* Hard cap on the number of body bytes we read from the provider before
|
|
43
|
+
* giving up and surfacing a `parse` error. Brave responses for 20 hits
|
|
44
|
+
* are well under 100 KiB; this cap is defensive against a misbehaving
|
|
45
|
+
* upstream that streams an unbounded body.
|
|
46
|
+
*/
|
|
47
|
+
const MAX_RESPONSE_BYTES = 1_048_576; // 1 MiB
|
|
48
|
+
let httpsRequestFn = https.request;
|
|
49
|
+
/**
|
|
50
|
+
* Test-only seam: swap the HTTPS transport used by the adapter.
|
|
51
|
+
* Production callers never invoke this; tests in 7.x use it to inject a
|
|
52
|
+
* stubbed `request` implementation that emits scripted responses.
|
|
53
|
+
*/
|
|
54
|
+
export function __setBraveHttpsRequestForTesting(fn) {
|
|
55
|
+
httpsRequestFn = fn ?? https.request;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Clamp `count` to the Brave-supported range. The handler is expected to
|
|
59
|
+
* pass an already-clamped value, but defending here keeps the adapter
|
|
60
|
+
* self-consistent if invoked directly (e.g. from a test).
|
|
61
|
+
*/
|
|
62
|
+
function clampCount(count) {
|
|
63
|
+
if (!Number.isFinite(count))
|
|
64
|
+
return BRAVE_MIN_COUNT;
|
|
65
|
+
const rounded = Math.trunc(count);
|
|
66
|
+
if (rounded < BRAVE_MIN_COUNT)
|
|
67
|
+
return BRAVE_MIN_COUNT;
|
|
68
|
+
if (rounded > BRAVE_MAX_COUNT)
|
|
69
|
+
return BRAVE_MAX_COUNT;
|
|
70
|
+
return rounded;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Drain `res` into a UTF-8 string, capped at {@link MAX_RESPONSE_BYTES}.
|
|
74
|
+
* The body cap defends against a misbehaving upstream; the
|
|
75
|
+
* {@link AbortSignal} short-circuits the read on `web.search`'s 15-second
|
|
76
|
+
* timeout (Requirement 1.8).
|
|
77
|
+
*/
|
|
78
|
+
function readBody(res, signal) {
|
|
79
|
+
return new Promise((resolve, reject) => {
|
|
80
|
+
const chunks = [];
|
|
81
|
+
let total = 0;
|
|
82
|
+
let aborted = false;
|
|
83
|
+
const onAbort = () => {
|
|
84
|
+
if (aborted)
|
|
85
|
+
return;
|
|
86
|
+
aborted = true;
|
|
87
|
+
res.destroy(new Error("aborted"));
|
|
88
|
+
reject(signal.reason instanceof Error
|
|
89
|
+
? signal.reason
|
|
90
|
+
: new Error("aborted"));
|
|
91
|
+
};
|
|
92
|
+
if (signal.aborted) {
|
|
93
|
+
onAbort();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
97
|
+
res.on("data", (chunk) => {
|
|
98
|
+
if (aborted)
|
|
99
|
+
return;
|
|
100
|
+
total += chunk.length;
|
|
101
|
+
if (total > MAX_RESPONSE_BYTES) {
|
|
102
|
+
aborted = true;
|
|
103
|
+
signal.removeEventListener("abort", onAbort);
|
|
104
|
+
res.destroy();
|
|
105
|
+
reject(new Error("response body exceeded 1 MiB cap"));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
chunks.push(chunk);
|
|
109
|
+
});
|
|
110
|
+
res.on("end", () => {
|
|
111
|
+
if (aborted)
|
|
112
|
+
return;
|
|
113
|
+
signal.removeEventListener("abort", onAbort);
|
|
114
|
+
resolve(Buffer.concat(chunks).toString("utf8"));
|
|
115
|
+
});
|
|
116
|
+
res.on("error", (err) => {
|
|
117
|
+
if (aborted)
|
|
118
|
+
return;
|
|
119
|
+
aborted = true;
|
|
120
|
+
signal.removeEventListener("abort", onAbort);
|
|
121
|
+
reject(err);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Issue the Brave HTTP GET and return `{status, body}` once the response
|
|
127
|
+
* is fully read. Network failures (DNS, connect, TLS, socket reset)
|
|
128
|
+
* propagate as a thrown error so the adapter can map them to
|
|
129
|
+
* `RawProviderResponse` with a `status: 0` placeholder for the search
|
|
130
|
+
* handler's `network` classification (Requirement 6.3).
|
|
131
|
+
*/
|
|
132
|
+
function dispatchRequest(query, count, apiKey, signal) {
|
|
133
|
+
const params = new URLSearchParams();
|
|
134
|
+
params.set("q", query);
|
|
135
|
+
params.set("count", String(count));
|
|
136
|
+
const path = `${BRAVE_PATH}?${params.toString()}`;
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
const req = httpsRequestFn({
|
|
139
|
+
method: "GET",
|
|
140
|
+
host: BRAVE_HOST,
|
|
141
|
+
path,
|
|
142
|
+
signal,
|
|
143
|
+
headers: {
|
|
144
|
+
accept: "application/json",
|
|
145
|
+
"user-agent": DEFAULT_USER_AGENT,
|
|
146
|
+
// Brave Search expects the key in this exact header
|
|
147
|
+
// (case-insensitive per HTTP, but we use the canonical casing
|
|
148
|
+
// from Brave's published examples for clarity in audit logs).
|
|
149
|
+
"X-Subscription-Token": apiKey,
|
|
150
|
+
},
|
|
151
|
+
}, (res) => {
|
|
152
|
+
const status = res.statusCode ?? 0;
|
|
153
|
+
readBody(res, signal).then((body) => resolve({ status, body }), (err) => reject(err));
|
|
154
|
+
});
|
|
155
|
+
req.on("error", (err) => {
|
|
156
|
+
reject(err);
|
|
157
|
+
});
|
|
158
|
+
req.end();
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Extract the Brave `web.results[]` array from a parsed JSON body and map
|
|
163
|
+
* it to the {@link RawProviderResponse.hits} shape. Each hit contributes
|
|
164
|
+
* `title`/`url`/`description` (Brave's snippet field) verbatim; the
|
|
165
|
+
* `web.search` handler is responsible for further validation (URL
|
|
166
|
+
* shape, whitespace, control chars — Requirement 7.3).
|
|
167
|
+
*
|
|
168
|
+
* Returns `null` when the JSON body did not have the expected
|
|
169
|
+
* `{ web: { results: [...] } }` shape, signalling the adapter to surface
|
|
170
|
+
* a `parseError` so the handler can emit `error.kind="parse"`
|
|
171
|
+
* (Requirement 6.5).
|
|
172
|
+
*/
|
|
173
|
+
function extractHits(parsed) {
|
|
174
|
+
if (!parsed || typeof parsed !== "object")
|
|
175
|
+
return null;
|
|
176
|
+
const web = parsed.web;
|
|
177
|
+
if (!web || typeof web !== "object")
|
|
178
|
+
return null;
|
|
179
|
+
const results = web.results;
|
|
180
|
+
if (!Array.isArray(results))
|
|
181
|
+
return null;
|
|
182
|
+
const hits = [];
|
|
183
|
+
for (const entry of results) {
|
|
184
|
+
if (!entry || typeof entry !== "object")
|
|
185
|
+
continue;
|
|
186
|
+
const e = entry;
|
|
187
|
+
const hit = {};
|
|
188
|
+
if (typeof e.title === "string")
|
|
189
|
+
hit.title = e.title;
|
|
190
|
+
if (typeof e.url === "string")
|
|
191
|
+
hit.url = e.url;
|
|
192
|
+
if (typeof e.description === "string")
|
|
193
|
+
hit.snippet = e.description;
|
|
194
|
+
hits.push(hit);
|
|
195
|
+
}
|
|
196
|
+
return hits;
|
|
197
|
+
}
|
|
198
|
+
// ---------------------------------------------------------------------------
|
|
199
|
+
// Provider definition
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
/**
|
|
202
|
+
* Brave Search adapter. Registered in {@link searchProviders} as a
|
|
203
|
+
* side-effect of importing this module — `web.search` resolves the active
|
|
204
|
+
* provider via the registry.
|
|
205
|
+
*/
|
|
206
|
+
export const braveProvider = {
|
|
207
|
+
id: "brave",
|
|
208
|
+
displayName: "Brave Search",
|
|
209
|
+
needsApiKey: true,
|
|
210
|
+
envVar: "BRAVE_SEARCH_API_KEY",
|
|
211
|
+
async search(query, maxResults, auth, signal) {
|
|
212
|
+
// Defensive: the handler resolves the key before calling us. If
|
|
213
|
+
// somehow we're invoked without one, surface a 0-status response so
|
|
214
|
+
// the handler can map it to `missing-key` / `network` rather than
|
|
215
|
+
// dispatching an unauthenticated request to Brave.
|
|
216
|
+
if (!auth.apiKey) {
|
|
217
|
+
return {
|
|
218
|
+
status: 0,
|
|
219
|
+
hits: [],
|
|
220
|
+
parseError: "missing api key",
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
const count = clampCount(maxResults);
|
|
224
|
+
const { status, body } = await dispatchRequest(query, count, auth.apiKey, signal);
|
|
225
|
+
// Non-2xx: forward the status with an empty hit list. The search
|
|
226
|
+
// handler maps the status to the appropriate error kind
|
|
227
|
+
// (`auth` for 401/403, `rate-limit` for 429, `server` for 5xx,
|
|
228
|
+
// `http` for everything else).
|
|
229
|
+
if (status < 200 || status >= 300) {
|
|
230
|
+
return { status, hits: [] };
|
|
231
|
+
}
|
|
232
|
+
// 2xx: parse JSON. Anything that does not parse, or whose shape
|
|
233
|
+
// does not match `{ web: { results: [...] } }`, surfaces as
|
|
234
|
+
// `parseError` so the handler emits `error.kind="parse"`
|
|
235
|
+
// (Requirement 6.5).
|
|
236
|
+
let parsed;
|
|
237
|
+
try {
|
|
238
|
+
parsed = JSON.parse(body);
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
return {
|
|
242
|
+
status,
|
|
243
|
+
hits: [],
|
|
244
|
+
parseError: err instanceof Error
|
|
245
|
+
? `non-JSON response: ${err.message}`
|
|
246
|
+
: "non-JSON response",
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
const hits = extractHits(parsed);
|
|
250
|
+
if (hits === null) {
|
|
251
|
+
return {
|
|
252
|
+
status,
|
|
253
|
+
hits: [],
|
|
254
|
+
parseError: "missing web.results array in Brave response",
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
return { status, hits };
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
// Register on import so `searchProviders.brave` is populated by the time
|
|
261
|
+
// the `web.search` handler dispatches.
|
|
262
|
+
searchProviders.brave = braveProvider;
|
|
263
|
+
//# sourceMappingURL=brave.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brave.js","sourceRoot":"","sources":["../../../../src/tools/web/providers/brave.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DuckDuckGo search-provider adapter.
|
|
3
|
+
*
|
|
4
|
+
* Used as the keyless default so `clai` works out of the box without
|
|
5
|
+
* any API key (Requirement 3.5). The adapter targets DuckDuckGo's
|
|
6
|
+
* lite-HTML endpoint at `https://html.duckduckgo.com/html/?q=…`,
|
|
7
|
+
* parses the response with `cheerio`, unwraps the in-page redirect
|
|
8
|
+
* shim (`/l/?uddg=<encoded>`) so callers see the destination URL, and
|
|
9
|
+
* applies the same URL filter `web.search` enforces (Requirement 7.3)
|
|
10
|
+
* before forwarding hits to the registry handler.
|
|
11
|
+
*
|
|
12
|
+
* The adapter does not need redirect-chain capture, fine-grained
|
|
13
|
+
* timing, TLS metadata, or DNS-rebinding protection beyond the
|
|
14
|
+
* per-invocation `AbortSignal`, so it deliberately bypasses the full
|
|
15
|
+
* `fetch-core` pipeline. A small `node:https.request`-based helper
|
|
16
|
+
* keeps the implementation simple while still honoring the 15-second
|
|
17
|
+
* `web.search` invocation timeout (Requirement 1.8) via the supplied
|
|
18
|
+
* `AbortSignal`.
|
|
19
|
+
*
|
|
20
|
+
* Per Requirement 6.7 the adapter issues exactly one outbound request
|
|
21
|
+
* per invocation and never retries on transient failure.
|
|
22
|
+
*/
|
|
23
|
+
import https from "node:https";
|
|
24
|
+
import type { SearchProvider } from "./provider.js";
|
|
25
|
+
/**
|
|
26
|
+
* Inject point for the underlying HTTPS transport. Mirrors the seam in
|
|
27
|
+
* `./brave.ts` so unit tests can drive the adapter without touching the
|
|
28
|
+
* network. Production code never invokes the setter.
|
|
29
|
+
*/
|
|
30
|
+
type HttpsRequestFn = typeof https.request;
|
|
31
|
+
/**
|
|
32
|
+
* Test-only seam: swap the HTTPS transport used by the adapter. Tests use
|
|
33
|
+
* this to inject a stubbed `request` implementation that emits scripted
|
|
34
|
+
* responses; production callers never invoke it.
|
|
35
|
+
*/
|
|
36
|
+
export declare function __setDuckduckgoHttpsRequestForTesting(fn: HttpsRequestFn | undefined): void;
|
|
37
|
+
/**
|
|
38
|
+
* The DuckDuckGo {@link SearchProvider} adapter.
|
|
39
|
+
*
|
|
40
|
+
* Resolves a search query into a {@link RawProviderResponse} carrying
|
|
41
|
+
* up to `maxResults` `{title, url, snippet}` hits. URL filtering and
|
|
42
|
+
* `maxResults` truncation happen here so the registry handler does not
|
|
43
|
+
* have to re-walk the cheerio tree; the handler still re-applies the
|
|
44
|
+
* filter for defense in depth (Requirement 7.3).
|
|
45
|
+
*/
|
|
46
|
+
export declare const duckduckgoProvider: SearchProvider;
|
|
47
|
+
export {};
|