@pentoshi/clai 3.8.44 → 3.8.47
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 +249 -251
- package/dist/agent/compaction-summary.js +1 -1
- package/dist/agent/compaction-summary.js.map +1 -1
- package/dist/agent/plan-tool.js +110 -14
- package/dist/agent/plan-tool.js.map +1 -1
- package/dist/agent/reliability-policy.d.ts +4 -3
- package/dist/agent/reliability-policy.js +4 -3
- package/dist/agent/reliability-policy.js.map +1 -1
- package/dist/agent/responder-context.d.ts +10 -0
- package/dist/agent/responder-context.js +50 -0
- package/dist/agent/responder-context.js.map +1 -0
- package/dist/agent/runner.js +160 -12
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/task-plan.d.ts +4 -0
- package/dist/agent/task-plan.js.map +1 -1
- package/dist/app/adapters/current-jobs-adapter.js +7 -0
- package/dist/app/adapters/current-jobs-adapter.js.map +1 -1
- package/dist/app/controllers/job-controller.d.ts +9 -6
- package/dist/app/controllers/job-controller.js +21 -0
- package/dist/app/controllers/job-controller.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +14 -33
- package/dist/app/controllers/session-controller.js +71 -132
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/controllers/session-prompt-queue.d.ts +34 -0
- package/dist/app/controllers/session-prompt-queue.js +141 -0
- package/dist/app/controllers/session-prompt-queue.js.map +1 -0
- package/dist/app/controllers/session-responder.d.ts +49 -0
- package/dist/app/controllers/session-responder.js +311 -0
- package/dist/app/controllers/session-responder.js.map +1 -0
- package/dist/app/ports/jobs-port.d.ts +10 -7
- package/dist/attachments/clipboard-image.d.ts +10 -0
- package/dist/attachments/clipboard-image.js +188 -0
- package/dist/attachments/clipboard-image.js.map +1 -0
- package/dist/attachments/image-content.d.ts +3 -0
- package/dist/attachments/image-content.js +51 -0
- package/dist/attachments/image-content.js.map +1 -0
- package/dist/attachments/service.js +6 -2
- package/dist/attachments/service.js.map +1 -1
- package/dist/commands/providers.js +4 -2
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/search-providers.d.ts +1 -0
- package/dist/commands/search-providers.js +4 -2
- package/dist/commands/search-providers.js.map +1 -1
- package/dist/llm/capabilities.js +17 -4
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/prompts/embedded.js +2 -2
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/index.js +1 -1
- package/dist/prompts/system.agent.md +19 -12
- package/dist/prompts/system.ask.md +1 -1
- package/dist/repl/prompt-line.js +39 -6
- package/dist/repl/prompt-line.js.map +1 -1
- package/dist/repl.js +25 -15
- package/dist/repl.js.map +1 -1
- package/dist/safety/engagement-policy.js +39 -7
- package/dist/safety/engagement-policy.js.map +1 -1
- package/dist/store/config.d.ts +5 -1
- package/dist/store/config.js +9 -1
- package/dist/store/config.js.map +1 -1
- package/dist/store/history.js +43 -5
- package/dist/store/history.js.map +1 -1
- package/dist/store/keys.js +1 -0
- package/dist/store/keys.js.map +1 -1
- package/dist/store/plan.d.ts +11 -0
- package/dist/store/plan.js +66 -3
- package/dist/store/plan.js.map +1 -1
- package/dist/tools/definitions.js +48 -11
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/http.d.ts +6 -1
- package/dist/tools/http.js +247 -68
- package/dist/tools/http.js.map +1 -1
- package/dist/tools/jobs.d.ts +72 -3
- package/dist/tools/jobs.js +743 -121
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/pentest-workflows.js +80 -4
- package/dist/tools/pentest-workflows.js.map +1 -1
- package/dist/tools/registry.js +62 -20
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/tool-types.d.ts +5 -0
- package/dist/tools/web/decode.d.ts +17 -0
- package/dist/tools/web/decode.js +65 -0
- package/dist/tools/web/decode.js.map +1 -0
- package/dist/tools/web/fetch-core.js +14 -20
- package/dist/tools/web/fetch-core.js.map +1 -1
- package/dist/tools/web/providers/exa.d.ts +51 -0
- package/dist/tools/web/providers/exa.js +303 -0
- package/dist/tools/web/providers/exa.js.map +1 -0
- package/dist/tools/web/readable.d.ts +5 -5
- package/dist/tools/web/readable.js +34 -12
- package/dist/tools/web/readable.js.map +1 -1
- package/dist/tools/web/search.d.ts +3 -1
- package/dist/tools/web/search.js +6 -4
- package/dist/tools/web/search.js.map +1 -1
- package/dist/tools/web/types.d.ts +25 -2
- package/dist/tools/web/types.js +32 -0
- package/dist/tools/web/types.js.map +1 -1
- package/dist/tools/wordlists.js +74 -87
- package/dist/tools/wordlists.js.map +1 -1
- package/dist/tui-v2/actions/action-id.js +1 -1
- package/dist/tui-v2/actions/action-id.js.map +1 -1
- package/dist/tui-v2/actions/keymap.js +1 -1
- package/dist/tui-v2/actions/keymap.js.map +1 -1
- package/dist/tui-v2/app/App.js +82 -12
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/app/commands/key-commands.js +1 -1
- package/dist/tui-v2/app/commands/key-commands.js.map +1 -1
- package/dist/tui-v2/app/commands/picker-commands.js +59 -8
- package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
- package/dist/tui-v2/app/commands/session-commands.js +0 -5
- package/dist/tui-v2/app/commands/session-commands.js.map +1 -1
- package/dist/tui-v2/bootstrap/composition-root.js +2 -0
- package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
- package/dist/tui-v2/components/jobs/jobs-panel.d.ts +12 -0
- package/dist/tui-v2/components/jobs/jobs-panel.js +184 -14
- package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
- package/dist/tui-v2/components/plan/plan-view.js +7 -3
- package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
- package/dist/tui-v2/components/status/status-line.js +2 -3
- package/dist/tui-v2/components/status/status-line.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-host.js +16 -1
- package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
- package/dist/tui-v2/components/transcript/intro-card.js +11 -5
- package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/tool-card.d.ts +3 -0
- package/dist/tui-v2/components/transcript/tool-card.js +12 -2
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-row.js +1 -1
- package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
- package/dist/tui-v2/composer/composer-editor.d.ts +6 -0
- package/dist/tui-v2/composer/composer-editor.js +20 -25
- package/dist/tui-v2/composer/composer-editor.js.map +1 -1
- package/dist/tui-v2/composer/composer-image-paste.d.ts +20 -0
- package/dist/tui-v2/composer/composer-image-paste.js +77 -0
- package/dist/tui-v2/composer/composer-image-paste.js.map +1 -0
- package/dist/tui-v2/state/transcript-store.d.ts +4 -0
- package/dist/tui-v2/state/transcript-store.js +13 -0
- package/dist/tui-v2/state/transcript-store.js.map +1 -1
- package/dist/ui/intro-card.js +3 -3
- package/dist/ui/intro-card.js.map +1 -1
- package/dist/ui/keys.d.ts +1 -0
- package/dist/ui/keys.js +4 -0
- package/dist/ui/keys.js.map +1 -1
- package/dist/ui/mentions.d.ts +13 -29
- package/dist/ui/mentions.js +200 -129
- package/dist/ui/mentions.js.map +1 -1
- package/dist/ui/plan-pane.js +6 -2
- package/dist/ui/plan-pane.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exa search-provider 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. Like
|
|
6
|
+
* the Brave and Tavily adapters it issues exactly one outbound HTTPS request
|
|
7
|
+
* per invocation (Requirement 6.7), forwards the caller-provided
|
|
8
|
+
* {@link AbortSignal} so the `web.search` timeout is honored (Requirement
|
|
9
|
+
* 1.8), and returns a {@link RawProviderResponse} carrying the raw HTTP
|
|
10
|
+
* status plus the parsed hit list for uniform error classification in the
|
|
11
|
+
* handler (Requirements 6.1, 6.2, 6.5, 6.6).
|
|
12
|
+
*
|
|
13
|
+
* Endpoint and request shape follow Exa's `/search` reference
|
|
14
|
+
* (https://docs.exa.ai/reference/search-api-guide-for-coding-agents):
|
|
15
|
+
*
|
|
16
|
+
* - POST `https://api.exa.ai/search`
|
|
17
|
+
* - Header: `x-api-key: <key>`
|
|
18
|
+
* - Body: `{ query, type, numResults, contents: { highlights: true } }`
|
|
19
|
+
* where `type` is the user-configured {@link ExaSearchType} and
|
|
20
|
+
* `contents` is omitted for the `instant` tier so it keeps its
|
|
21
|
+
* sub-second latency profile.
|
|
22
|
+
* - Response: `{ results: [{ title, url, highlights?, text?, summary? }] }`
|
|
23
|
+
* mapped into `SearchResult { title, url, snippet }`.
|
|
24
|
+
*
|
|
25
|
+
* Only raw `results` + `highlights` are requested; `outputSchema` synthesis
|
|
26
|
+
* is intentionally not used because the handler maps discrete hits rather
|
|
27
|
+
* than a single grounded answer, and skipping it keeps latency and response
|
|
28
|
+
* shape stable across every search type.
|
|
29
|
+
*/
|
|
30
|
+
import https from "node:https";
|
|
31
|
+
import { type SearchProvider } from "./provider.js";
|
|
32
|
+
import { type ExaSearchType } from "../types.js";
|
|
33
|
+
type HttpsRequestFn = typeof https.request;
|
|
34
|
+
/**
|
|
35
|
+
* Test-only seam: swap the HTTPS transport used by the adapter. Production
|
|
36
|
+
* callers never invoke this; tests use it to inject a stubbed `request`
|
|
37
|
+
* implementation that emits scripted responses.
|
|
38
|
+
*/
|
|
39
|
+
export declare function __setExaHttpsRequestForTesting(fn: HttpsRequestFn | undefined): void;
|
|
40
|
+
/**
|
|
41
|
+
* Test-only seam: override how the adapter resolves the configured search
|
|
42
|
+
* type. Passing `undefined` restores the config-backed resolver.
|
|
43
|
+
*/
|
|
44
|
+
export declare function __setExaSearchTypeResolverForTesting(resolver: (() => ExaSearchType) | undefined): void;
|
|
45
|
+
/**
|
|
46
|
+
* Exa adapter. Registered in {@link searchProviders} as a side-effect of
|
|
47
|
+
* importing this module — `web.search` resolves the active provider via the
|
|
48
|
+
* registry.
|
|
49
|
+
*/
|
|
50
|
+
export declare const exaProvider: SearchProvider;
|
|
51
|
+
export {};
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exa search-provider 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. Like
|
|
6
|
+
* the Brave and Tavily adapters it issues exactly one outbound HTTPS request
|
|
7
|
+
* per invocation (Requirement 6.7), forwards the caller-provided
|
|
8
|
+
* {@link AbortSignal} so the `web.search` timeout is honored (Requirement
|
|
9
|
+
* 1.8), and returns a {@link RawProviderResponse} carrying the raw HTTP
|
|
10
|
+
* status plus the parsed hit list for uniform error classification in the
|
|
11
|
+
* handler (Requirements 6.1, 6.2, 6.5, 6.6).
|
|
12
|
+
*
|
|
13
|
+
* Endpoint and request shape follow Exa's `/search` reference
|
|
14
|
+
* (https://docs.exa.ai/reference/search-api-guide-for-coding-agents):
|
|
15
|
+
*
|
|
16
|
+
* - POST `https://api.exa.ai/search`
|
|
17
|
+
* - Header: `x-api-key: <key>`
|
|
18
|
+
* - Body: `{ query, type, numResults, contents: { highlights: true } }`
|
|
19
|
+
* where `type` is the user-configured {@link ExaSearchType} and
|
|
20
|
+
* `contents` is omitted for the `instant` tier so it keeps its
|
|
21
|
+
* sub-second latency profile.
|
|
22
|
+
* - Response: `{ results: [{ title, url, highlights?, text?, summary? }] }`
|
|
23
|
+
* mapped into `SearchResult { title, url, snippet }`.
|
|
24
|
+
*
|
|
25
|
+
* Only raw `results` + `highlights` are requested; `outputSchema` synthesis
|
|
26
|
+
* is intentionally not used because the handler maps discrete hits rather
|
|
27
|
+
* than a single grounded answer, and skipping it keeps latency and response
|
|
28
|
+
* shape stable across every search type.
|
|
29
|
+
*/
|
|
30
|
+
import { Buffer } from "node:buffer";
|
|
31
|
+
import https from "node:https";
|
|
32
|
+
import { searchProviders, } from "./provider.js";
|
|
33
|
+
import { DEFAULT_EXA_SEARCH_TYPE, } from "../types.js";
|
|
34
|
+
import { getExaSearchType } from "../../../store/config.js";
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Constants
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/** Exa search endpoint (host + path). */
|
|
39
|
+
const EXA_HOST = "api.exa.ai";
|
|
40
|
+
const EXA_PATH = "/search";
|
|
41
|
+
/**
|
|
42
|
+
* `numResults` accepted by Exa. The `web.search` handler already clamps the
|
|
43
|
+
* caller's `maxResults` to `[1, 20]`; we re-clamp defensively so the adapter
|
|
44
|
+
* is self-consistent when invoked directly (e.g. from a unit test).
|
|
45
|
+
*/
|
|
46
|
+
const EXA_MIN_RESULTS = 1;
|
|
47
|
+
const EXA_MAX_RESULTS = 20;
|
|
48
|
+
/** User-Agent sent on outbound Exa requests. */
|
|
49
|
+
const DEFAULT_USER_AGENT = "clai-web-search/1.0";
|
|
50
|
+
/**
|
|
51
|
+
* Hard cap on the number of body bytes read before surfacing a `parse`
|
|
52
|
+
* error. Deep-search responses with highlights are comfortably under this
|
|
53
|
+
* cap; it exists purely as a memory guard against a misbehaving upstream.
|
|
54
|
+
*/
|
|
55
|
+
const MAX_RESPONSE_BYTES = 4_194_304; // 4 MiB
|
|
56
|
+
let httpsRequestFn = https.request;
|
|
57
|
+
/**
|
|
58
|
+
* Test-only seam: swap the HTTPS transport used by the adapter. Production
|
|
59
|
+
* callers never invoke this; tests use it to inject a stubbed `request`
|
|
60
|
+
* implementation that emits scripted responses.
|
|
61
|
+
*/
|
|
62
|
+
export function __setExaHttpsRequestForTesting(fn) {
|
|
63
|
+
httpsRequestFn = fn ?? https.request;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Resolver for the configured search type. Reads `ClaiConfig.exaSearchType`
|
|
67
|
+
* lazily so a config-store failure degrades to {@link DEFAULT_EXA_SEARCH_TYPE}
|
|
68
|
+
* rather than throwing inside the search path. Tests may override it.
|
|
69
|
+
*/
|
|
70
|
+
let searchTypeResolver = defaultSearchTypeResolver;
|
|
71
|
+
function defaultSearchTypeResolver() {
|
|
72
|
+
try {
|
|
73
|
+
return getExaSearchType();
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return DEFAULT_EXA_SEARCH_TYPE;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Test-only seam: override how the adapter resolves the configured search
|
|
81
|
+
* type. Passing `undefined` restores the config-backed resolver.
|
|
82
|
+
*/
|
|
83
|
+
export function __setExaSearchTypeResolverForTesting(resolver) {
|
|
84
|
+
searchTypeResolver = resolver ?? defaultSearchTypeResolver;
|
|
85
|
+
}
|
|
86
|
+
/** Clamp `numResults` to the Exa-supported range. */
|
|
87
|
+
function clampResults(count) {
|
|
88
|
+
if (!Number.isFinite(count))
|
|
89
|
+
return EXA_MIN_RESULTS;
|
|
90
|
+
const rounded = Math.trunc(count);
|
|
91
|
+
if (rounded < EXA_MIN_RESULTS)
|
|
92
|
+
return EXA_MIN_RESULTS;
|
|
93
|
+
if (rounded > EXA_MAX_RESULTS)
|
|
94
|
+
return EXA_MAX_RESULTS;
|
|
95
|
+
return rounded;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Drain `res` into a UTF-8 string, capped at {@link MAX_RESPONSE_BYTES}. The
|
|
99
|
+
* body cap defends against a misbehaving upstream; the {@link AbortSignal}
|
|
100
|
+
* short-circuits the read on the `web.search` timeout (Requirement 1.8).
|
|
101
|
+
*/
|
|
102
|
+
function readBody(res, signal) {
|
|
103
|
+
return new Promise((resolve, reject) => {
|
|
104
|
+
const chunks = [];
|
|
105
|
+
let total = 0;
|
|
106
|
+
let aborted = false;
|
|
107
|
+
const onAbort = () => {
|
|
108
|
+
if (aborted)
|
|
109
|
+
return;
|
|
110
|
+
aborted = true;
|
|
111
|
+
res.destroy(new Error("aborted"));
|
|
112
|
+
reject(signal.reason instanceof Error ? signal.reason : new Error("aborted"));
|
|
113
|
+
};
|
|
114
|
+
if (signal.aborted) {
|
|
115
|
+
onAbort();
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
119
|
+
res.on("data", (chunk) => {
|
|
120
|
+
if (aborted)
|
|
121
|
+
return;
|
|
122
|
+
total += chunk.length;
|
|
123
|
+
if (total > MAX_RESPONSE_BYTES) {
|
|
124
|
+
aborted = true;
|
|
125
|
+
signal.removeEventListener("abort", onAbort);
|
|
126
|
+
res.destroy();
|
|
127
|
+
reject(new Error("response body exceeded 4 MiB cap"));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
chunks.push(chunk);
|
|
131
|
+
});
|
|
132
|
+
res.on("end", () => {
|
|
133
|
+
if (aborted)
|
|
134
|
+
return;
|
|
135
|
+
signal.removeEventListener("abort", onAbort);
|
|
136
|
+
resolve(Buffer.concat(chunks).toString("utf8"));
|
|
137
|
+
});
|
|
138
|
+
res.on("error", (err) => {
|
|
139
|
+
if (aborted)
|
|
140
|
+
return;
|
|
141
|
+
aborted = true;
|
|
142
|
+
signal.removeEventListener("abort", onAbort);
|
|
143
|
+
reject(err);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Build the JSON request body. `contents.highlights` is requested for every
|
|
149
|
+
* tier except `instant`, matching Exa's guidance that the instant tier stays
|
|
150
|
+
* content-free to preserve its ~250 ms latency.
|
|
151
|
+
*/
|
|
152
|
+
function buildPayload(query, numResults, type) {
|
|
153
|
+
const body = { query, type, numResults };
|
|
154
|
+
if (type !== "instant") {
|
|
155
|
+
body.contents = { highlights: true };
|
|
156
|
+
}
|
|
157
|
+
return JSON.stringify(body);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Issue the Exa HTTPS POST and resolve `{status, body}` once the response is
|
|
161
|
+
* fully read. Network failures propagate as a thrown error so the adapter
|
|
162
|
+
* can map them to a `status: 0` placeholder for the handler's `network`
|
|
163
|
+
* classification (Requirement 6.3).
|
|
164
|
+
*/
|
|
165
|
+
function dispatchRequest(query, numResults, type, apiKey, signal) {
|
|
166
|
+
const payload = buildPayload(query, numResults, type);
|
|
167
|
+
const bodyBytes = Buffer.from(payload, "utf8");
|
|
168
|
+
return new Promise((resolve, reject) => {
|
|
169
|
+
let req;
|
|
170
|
+
try {
|
|
171
|
+
req = httpsRequestFn({
|
|
172
|
+
method: "POST",
|
|
173
|
+
host: EXA_HOST,
|
|
174
|
+
path: EXA_PATH,
|
|
175
|
+
signal,
|
|
176
|
+
headers: {
|
|
177
|
+
accept: "application/json",
|
|
178
|
+
"content-type": "application/json",
|
|
179
|
+
"content-length": String(bodyBytes.length),
|
|
180
|
+
"user-agent": DEFAULT_USER_AGENT,
|
|
181
|
+
"x-api-key": apiKey,
|
|
182
|
+
},
|
|
183
|
+
}, (res) => {
|
|
184
|
+
const status = res.statusCode ?? 0;
|
|
185
|
+
readBody(res, signal).then((body) => resolve({ status, body }), (err) => reject(err));
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
reject(err);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
req.on("error", (err) => {
|
|
193
|
+
reject(err);
|
|
194
|
+
});
|
|
195
|
+
req.write(bodyBytes);
|
|
196
|
+
req.end();
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Collapse an Exa result's `highlights` (query-relevant excerpts) into a
|
|
201
|
+
* single snippet, falling back to `text` then `summary`. Returns an empty
|
|
202
|
+
* string when none is present so the handler's normaliser can decide.
|
|
203
|
+
*/
|
|
204
|
+
function extractSnippet(entry) {
|
|
205
|
+
if (Array.isArray(entry.highlights)) {
|
|
206
|
+
const joined = entry.highlights
|
|
207
|
+
.filter((h) => typeof h === "string" && h.trim().length > 0)
|
|
208
|
+
.join(" … ");
|
|
209
|
+
if (joined)
|
|
210
|
+
return joined;
|
|
211
|
+
}
|
|
212
|
+
if (typeof entry.text === "string" && entry.text.trim())
|
|
213
|
+
return entry.text;
|
|
214
|
+
if (typeof entry.summary === "string" && entry.summary.trim()) {
|
|
215
|
+
return entry.summary;
|
|
216
|
+
}
|
|
217
|
+
return "";
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Extract the Exa `results[]` array from a parsed JSON body and map it to
|
|
221
|
+
* the {@link RawProviderResponse.hits} shape. Returns `null` when the body
|
|
222
|
+
* did not carry a `{ results: [...] }` array so the adapter can surface a
|
|
223
|
+
* `parseError` (Requirement 6.5).
|
|
224
|
+
*/
|
|
225
|
+
function extractHits(parsed) {
|
|
226
|
+
if (!parsed || typeof parsed !== "object")
|
|
227
|
+
return null;
|
|
228
|
+
const results = parsed.results;
|
|
229
|
+
if (!Array.isArray(results))
|
|
230
|
+
return null;
|
|
231
|
+
const hits = [];
|
|
232
|
+
for (const entry of results) {
|
|
233
|
+
if (!entry || typeof entry !== "object")
|
|
234
|
+
continue;
|
|
235
|
+
const e = entry;
|
|
236
|
+
const hit = {};
|
|
237
|
+
if (typeof e.title === "string")
|
|
238
|
+
hit.title = e.title;
|
|
239
|
+
if (typeof e.url === "string")
|
|
240
|
+
hit.url = e.url;
|
|
241
|
+
const snippet = extractSnippet(e);
|
|
242
|
+
if (snippet)
|
|
243
|
+
hit.snippet = snippet;
|
|
244
|
+
hits.push(hit);
|
|
245
|
+
}
|
|
246
|
+
return hits;
|
|
247
|
+
}
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
// Provider definition
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
251
|
+
/**
|
|
252
|
+
* Exa adapter. Registered in {@link searchProviders} as a side-effect of
|
|
253
|
+
* importing this module — `web.search` resolves the active provider via the
|
|
254
|
+
* registry.
|
|
255
|
+
*/
|
|
256
|
+
export const exaProvider = {
|
|
257
|
+
id: "exa",
|
|
258
|
+
displayName: "Exa",
|
|
259
|
+
needsApiKey: true,
|
|
260
|
+
envVar: "EXA_API_KEY",
|
|
261
|
+
async search(query, maxResults, auth, signal) {
|
|
262
|
+
// Defensive: the handler resolves the key before calling us. If somehow
|
|
263
|
+
// invoked without one, surface a 0-status response so the handler maps
|
|
264
|
+
// it to `missing-key` / `network` rather than dispatching unauthenticated.
|
|
265
|
+
if (!auth.apiKey) {
|
|
266
|
+
return { status: 0, hits: [], parseError: "missing api key" };
|
|
267
|
+
}
|
|
268
|
+
const numResults = clampResults(maxResults);
|
|
269
|
+
const type = searchTypeResolver();
|
|
270
|
+
const { status, body } = await dispatchRequest(query, numResults, type, auth.apiKey, signal);
|
|
271
|
+
// Non-2xx: forward the status with an empty hit list; the handler maps
|
|
272
|
+
// the status to the appropriate error kind.
|
|
273
|
+
if (status < 200 || status >= 300) {
|
|
274
|
+
return { status, hits: [] };
|
|
275
|
+
}
|
|
276
|
+
let parsed;
|
|
277
|
+
try {
|
|
278
|
+
parsed = JSON.parse(body);
|
|
279
|
+
}
|
|
280
|
+
catch (err) {
|
|
281
|
+
return {
|
|
282
|
+
status,
|
|
283
|
+
hits: [],
|
|
284
|
+
parseError: err instanceof Error
|
|
285
|
+
? `non-JSON response: ${err.message}`
|
|
286
|
+
: "non-JSON response",
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
const hits = extractHits(parsed);
|
|
290
|
+
if (hits === null) {
|
|
291
|
+
return {
|
|
292
|
+
status,
|
|
293
|
+
hits: [],
|
|
294
|
+
parseError: "missing results array in Exa response",
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
return { status, hits };
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
// Register on import so `searchProviders.exa` is populated by the time the
|
|
301
|
+
// `web.search` handler dispatches.
|
|
302
|
+
searchProviders.exa = exaProvider;
|
|
303
|
+
//# sourceMappingURL=exa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exa.js","sourceRoot":"","sources":["../../../../src/tools/web/providers/exa.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,13 +15,13 @@ import type { CookieInfo } from "./types.js";
|
|
|
15
15
|
*
|
|
16
16
|
* The conversion:
|
|
17
17
|
* 1. Parses `html` with cheerio (no DOM/browser dependency).
|
|
18
|
-
* 2. Removes
|
|
19
|
-
*
|
|
18
|
+
* 2. Removes executable/non-text subtrees and obvious page-level chrome while
|
|
19
|
+
* preserving headers, footers, and asides nested inside the chosen article
|
|
20
|
+
* or main content.
|
|
20
21
|
* 3. Removes every HTML comment node anywhere in the tree.
|
|
21
22
|
* 4. Extracts the remaining text via `$.root().text()`.
|
|
22
|
-
* 5. Collapses
|
|
23
|
-
*
|
|
24
|
-
* receives compact prose.
|
|
23
|
+
* 5. Collapses runs of page-text whitespace while preserving line breaks and
|
|
24
|
+
* indentation inside `<pre>` blocks.
|
|
25
25
|
* 6. Appends a deduplicated "Links" section so the agent can find the
|
|
26
26
|
* correct URL for any link on the page without guessing.
|
|
27
27
|
*
|
|
@@ -24,23 +24,30 @@ const STRIPPED_SELECTORS = [
|
|
|
24
24
|
"script",
|
|
25
25
|
"style",
|
|
26
26
|
"noscript",
|
|
27
|
+
"template",
|
|
28
|
+
"svg",
|
|
29
|
+
"canvas",
|
|
30
|
+
].join(", ");
|
|
31
|
+
/** Obvious page chrome; scoped so article/main headers and asides survive. */
|
|
32
|
+
const CHROME_SELECTORS = [
|
|
27
33
|
"nav",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
34
|
+
"[role='navigation']",
|
|
35
|
+
"body > header",
|
|
36
|
+
"body > footer",
|
|
37
|
+
"body > aside",
|
|
31
38
|
].join(", ");
|
|
32
39
|
/**
|
|
33
40
|
* Convert an HTML document into a single readable text string.
|
|
34
41
|
*
|
|
35
42
|
* The conversion:
|
|
36
43
|
* 1. Parses `html` with cheerio (no DOM/browser dependency).
|
|
37
|
-
* 2. Removes
|
|
38
|
-
*
|
|
44
|
+
* 2. Removes executable/non-text subtrees and obvious page-level chrome while
|
|
45
|
+
* preserving headers, footers, and asides nested inside the chosen article
|
|
46
|
+
* or main content.
|
|
39
47
|
* 3. Removes every HTML comment node anywhere in the tree.
|
|
40
48
|
* 4. Extracts the remaining text via `$.root().text()`.
|
|
41
|
-
* 5. Collapses
|
|
42
|
-
*
|
|
43
|
-
* receives compact prose.
|
|
49
|
+
* 5. Collapses runs of page-text whitespace while preserving line breaks and
|
|
50
|
+
* indentation inside `<pre>` blocks.
|
|
44
51
|
* 6. Appends a deduplicated "Links" section so the agent can find the
|
|
45
52
|
* correct URL for any link on the page without guessing.
|
|
46
53
|
*
|
|
@@ -54,7 +61,8 @@ export function toReadableText(html, baseUrl) {
|
|
|
54
61
|
return "";
|
|
55
62
|
const $ = cheerio.load(html);
|
|
56
63
|
$(STRIPPED_SELECTORS).remove();
|
|
57
|
-
$(
|
|
64
|
+
$(CHROME_SELECTORS).remove();
|
|
65
|
+
$("[aria-hidden='true'], [hidden]").remove();
|
|
58
66
|
$('*')
|
|
59
67
|
.contents()
|
|
60
68
|
.filter(function () {
|
|
@@ -201,8 +209,8 @@ function renderNode($, node, baseUrl) {
|
|
|
201
209
|
if (tag === "br")
|
|
202
210
|
return [""];
|
|
203
211
|
if (tag === "pre") {
|
|
204
|
-
const text = wrapped.text().replace(/\n{
|
|
205
|
-
return text ? ["```", text, "```"] : [];
|
|
212
|
+
const text = wrapped.text().replace(/\r\n?/g, "\n").replace(/\n{4,}/g, "\n\n\n").trim();
|
|
213
|
+
return text ? ["```", ...text.split("\n"), "```"] : [];
|
|
206
214
|
}
|
|
207
215
|
if (tag === "code") {
|
|
208
216
|
const text = collapseWhitespace(wrapped.text());
|
|
@@ -292,7 +300,21 @@ function renderForm($, form) {
|
|
|
292
300
|
}
|
|
293
301
|
function normalizeReadableLines(lines) {
|
|
294
302
|
const out = [];
|
|
303
|
+
let inCodeBlock = false;
|
|
295
304
|
for (const line of lines) {
|
|
305
|
+
if (line === "```") {
|
|
306
|
+
if (out[out.length - 1] === "" && !inCodeBlock)
|
|
307
|
+
out.pop();
|
|
308
|
+
out.push(line);
|
|
309
|
+
inCodeBlock = !inCodeBlock;
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
if (inCodeBlock) {
|
|
313
|
+
// Preserve indentation and line structure inside <pre>; only remove CR
|
|
314
|
+
// and trailing horizontal whitespace that add no source information.
|
|
315
|
+
out.push(line.replace(/\r/g, "").replace(/[ \t]+$/g, ""));
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
296
318
|
const text = collapseWhitespace(line);
|
|
297
319
|
if (!text) {
|
|
298
320
|
if (out.length > 0 && out[out.length - 1] !== "")
|
|
@@ -302,7 +324,7 @@ function normalizeReadableLines(lines) {
|
|
|
302
324
|
if (out[out.length - 1] !== text)
|
|
303
325
|
out.push(text);
|
|
304
326
|
}
|
|
305
|
-
return out.join("\n").
|
|
327
|
+
return out.join("\n").trim();
|
|
306
328
|
}
|
|
307
329
|
// ---------------------------------------------------------------------------
|
|
308
330
|
// Set-Cookie parser
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable.js","sourceRoot":"","sources":["../../../src/tools/web/readable.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"readable.js","sourceRoot":"","sources":["../../../src/tools/web/readable.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* returns anti-bot challenges (HTTP 202) or upstream 502/5xx responses on
|
|
11
11
|
* shared or rate-limited networks. When the active provider is DuckDuckGo
|
|
12
12
|
* and it fails, the handler transparently falls back to a keyed provider
|
|
13
|
-
* —
|
|
13
|
+
* — Exa first, then Tavily, then Brave — whenever a key is configured for
|
|
14
|
+
* it. Each
|
|
14
15
|
* fallback is a single attempt against a *different* provider, so the
|
|
15
16
|
* per-provider single-attempt contract (Requirement 6.7) is preserved.
|
|
16
17
|
*
|
|
@@ -23,6 +24,7 @@ import { type SearchProvider } from "./providers/provider.js";
|
|
|
23
24
|
import "./providers/duckduckgo.js";
|
|
24
25
|
import "./providers/brave.js";
|
|
25
26
|
import "./providers/tavily.js";
|
|
27
|
+
import "./providers/exa.js";
|
|
26
28
|
import { type SearchProviderId, type WebSearchArgs, type WebSearchErrorKind, type WebSearchOutcome } from "./types.js";
|
|
27
29
|
/**
|
|
28
30
|
* Optional injection points for tests so the search dispatch can be
|
package/dist/tools/web/search.js
CHANGED
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* returns anti-bot challenges (HTTP 202) or upstream 502/5xx responses on
|
|
11
11
|
* shared or rate-limited networks. When the active provider is DuckDuckGo
|
|
12
12
|
* and it fails, the handler transparently falls back to a keyed provider
|
|
13
|
-
* —
|
|
13
|
+
* — Exa first, then Tavily, then Brave — whenever a key is configured for
|
|
14
|
+
* it. Each
|
|
14
15
|
* fallback is a single attempt against a *different* provider, so the
|
|
15
16
|
* per-provider single-attempt contract (Requirement 6.7) is preserved.
|
|
16
17
|
*
|
|
@@ -23,10 +24,11 @@ import { buildSearchAuditPayload } from "./audit.js";
|
|
|
23
24
|
import { searchProviders, } from "./providers/provider.js";
|
|
24
25
|
// Importing the provider modules below ensures their side-effect
|
|
25
26
|
// registration into `searchProviders` runs before the handler is
|
|
26
|
-
// invoked. (DDG → keyless default; Brave / Tavily → optional.)
|
|
27
|
+
// invoked. (DDG → keyless default; Exa / Brave / Tavily → optional.)
|
|
27
28
|
import "./providers/duckduckgo.js";
|
|
28
29
|
import "./providers/brave.js";
|
|
29
30
|
import "./providers/tavily.js";
|
|
31
|
+
import "./providers/exa.js";
|
|
30
32
|
import { DEFAULT_MAX_RESULTS, MAX_MAX_RESULTS, MAX_QUERY_LENGTH, MAX_SNIPPET_LENGTH, MAX_TITLE_LENGTH, MIN_MAX_RESULTS, MIN_QUERY_LENGTH, SEARCH_TIMEOUT_MS, } from "./types.js";
|
|
31
33
|
/**
|
|
32
34
|
* Run `web.search`. Always emits a single audit-log entry. Never
|
|
@@ -149,7 +151,7 @@ export async function webSearch(args, options = {}) {
|
|
|
149
151
|
primaryOutcome.error.message += ` Fallback also failed (${fallbackNotes.join("; ")}).`;
|
|
150
152
|
}
|
|
151
153
|
else if (!anyKeyConfigured) {
|
|
152
|
-
primaryOutcome.error.message += ` No keyed fallback provider is configured; set one so web.search can recover automatically, e.g. \`clai search-provider
|
|
154
|
+
primaryOutcome.error.message += ` No keyed fallback provider is configured; set one so web.search can recover automatically, e.g. \`clai search-provider exa\` then \`clai set exa <KEY>\` (Tavily and Brave also supported).`;
|
|
153
155
|
}
|
|
154
156
|
}
|
|
155
157
|
}
|
|
@@ -159,7 +161,7 @@ export async function webSearch(args, options = {}) {
|
|
|
159
161
|
// Per-provider attempt and API-key rotation
|
|
160
162
|
// ---------------------------------------------------------------------------
|
|
161
163
|
/** Ordered fallback after a keyless DuckDuckGo failure. */
|
|
162
|
-
const DDG_FALLBACK_ORDER = ["tavily", "brave"];
|
|
164
|
+
const DDG_FALLBACK_ORDER = ["exa", "tavily", "brave"];
|
|
163
165
|
const MAX_SEARCH_RETRIES = 6;
|
|
164
166
|
const MAX_SEARCH_RETRY_WAIT_MS = 120_000;
|
|
165
167
|
async function resolveSearchKeySet(id, resolveKey) {
|