@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.
Files changed (150) hide show
  1. package/README.md +249 -251
  2. package/dist/agent/compaction-summary.js +1 -1
  3. package/dist/agent/compaction-summary.js.map +1 -1
  4. package/dist/agent/plan-tool.js +110 -14
  5. package/dist/agent/plan-tool.js.map +1 -1
  6. package/dist/agent/reliability-policy.d.ts +4 -3
  7. package/dist/agent/reliability-policy.js +4 -3
  8. package/dist/agent/reliability-policy.js.map +1 -1
  9. package/dist/agent/responder-context.d.ts +10 -0
  10. package/dist/agent/responder-context.js +50 -0
  11. package/dist/agent/responder-context.js.map +1 -0
  12. package/dist/agent/runner.js +160 -12
  13. package/dist/agent/runner.js.map +1 -1
  14. package/dist/agent/task-plan.d.ts +4 -0
  15. package/dist/agent/task-plan.js.map +1 -1
  16. package/dist/app/adapters/current-jobs-adapter.js +7 -0
  17. package/dist/app/adapters/current-jobs-adapter.js.map +1 -1
  18. package/dist/app/controllers/job-controller.d.ts +9 -6
  19. package/dist/app/controllers/job-controller.js +21 -0
  20. package/dist/app/controllers/job-controller.js.map +1 -1
  21. package/dist/app/controllers/session-controller.d.ts +14 -33
  22. package/dist/app/controllers/session-controller.js +71 -132
  23. package/dist/app/controllers/session-controller.js.map +1 -1
  24. package/dist/app/controllers/session-prompt-queue.d.ts +34 -0
  25. package/dist/app/controllers/session-prompt-queue.js +141 -0
  26. package/dist/app/controllers/session-prompt-queue.js.map +1 -0
  27. package/dist/app/controllers/session-responder.d.ts +49 -0
  28. package/dist/app/controllers/session-responder.js +311 -0
  29. package/dist/app/controllers/session-responder.js.map +1 -0
  30. package/dist/app/ports/jobs-port.d.ts +10 -7
  31. package/dist/attachments/clipboard-image.d.ts +10 -0
  32. package/dist/attachments/clipboard-image.js +188 -0
  33. package/dist/attachments/clipboard-image.js.map +1 -0
  34. package/dist/attachments/image-content.d.ts +3 -0
  35. package/dist/attachments/image-content.js +51 -0
  36. package/dist/attachments/image-content.js.map +1 -0
  37. package/dist/attachments/service.js +6 -2
  38. package/dist/attachments/service.js.map +1 -1
  39. package/dist/commands/providers.js +4 -2
  40. package/dist/commands/providers.js.map +1 -1
  41. package/dist/commands/search-providers.d.ts +1 -0
  42. package/dist/commands/search-providers.js +4 -2
  43. package/dist/commands/search-providers.js.map +1 -1
  44. package/dist/llm/capabilities.js +17 -4
  45. package/dist/llm/capabilities.js.map +1 -1
  46. package/dist/prompts/embedded.js +2 -2
  47. package/dist/prompts/embedded.js.map +1 -1
  48. package/dist/prompts/index.js +1 -1
  49. package/dist/prompts/system.agent.md +19 -12
  50. package/dist/prompts/system.ask.md +1 -1
  51. package/dist/repl/prompt-line.js +39 -6
  52. package/dist/repl/prompt-line.js.map +1 -1
  53. package/dist/repl.js +25 -15
  54. package/dist/repl.js.map +1 -1
  55. package/dist/safety/engagement-policy.js +39 -7
  56. package/dist/safety/engagement-policy.js.map +1 -1
  57. package/dist/store/config.d.ts +5 -1
  58. package/dist/store/config.js +9 -1
  59. package/dist/store/config.js.map +1 -1
  60. package/dist/store/history.js +43 -5
  61. package/dist/store/history.js.map +1 -1
  62. package/dist/store/keys.js +1 -0
  63. package/dist/store/keys.js.map +1 -1
  64. package/dist/store/plan.d.ts +11 -0
  65. package/dist/store/plan.js +66 -3
  66. package/dist/store/plan.js.map +1 -1
  67. package/dist/tools/definitions.js +48 -11
  68. package/dist/tools/definitions.js.map +1 -1
  69. package/dist/tools/http.d.ts +6 -1
  70. package/dist/tools/http.js +247 -68
  71. package/dist/tools/http.js.map +1 -1
  72. package/dist/tools/jobs.d.ts +72 -3
  73. package/dist/tools/jobs.js +743 -121
  74. package/dist/tools/jobs.js.map +1 -1
  75. package/dist/tools/pentest-workflows.js +80 -4
  76. package/dist/tools/pentest-workflows.js.map +1 -1
  77. package/dist/tools/registry.js +62 -20
  78. package/dist/tools/registry.js.map +1 -1
  79. package/dist/tools/tool-types.d.ts +5 -0
  80. package/dist/tools/web/decode.d.ts +17 -0
  81. package/dist/tools/web/decode.js +65 -0
  82. package/dist/tools/web/decode.js.map +1 -0
  83. package/dist/tools/web/fetch-core.js +14 -20
  84. package/dist/tools/web/fetch-core.js.map +1 -1
  85. package/dist/tools/web/providers/exa.d.ts +51 -0
  86. package/dist/tools/web/providers/exa.js +303 -0
  87. package/dist/tools/web/providers/exa.js.map +1 -0
  88. package/dist/tools/web/readable.d.ts +5 -5
  89. package/dist/tools/web/readable.js +34 -12
  90. package/dist/tools/web/readable.js.map +1 -1
  91. package/dist/tools/web/search.d.ts +3 -1
  92. package/dist/tools/web/search.js +6 -4
  93. package/dist/tools/web/search.js.map +1 -1
  94. package/dist/tools/web/types.d.ts +25 -2
  95. package/dist/tools/web/types.js +32 -0
  96. package/dist/tools/web/types.js.map +1 -1
  97. package/dist/tools/wordlists.js +74 -87
  98. package/dist/tools/wordlists.js.map +1 -1
  99. package/dist/tui-v2/actions/action-id.js +1 -1
  100. package/dist/tui-v2/actions/action-id.js.map +1 -1
  101. package/dist/tui-v2/actions/keymap.js +1 -1
  102. package/dist/tui-v2/actions/keymap.js.map +1 -1
  103. package/dist/tui-v2/app/App.js +82 -12
  104. package/dist/tui-v2/app/App.js.map +1 -1
  105. package/dist/tui-v2/app/commands/key-commands.js +1 -1
  106. package/dist/tui-v2/app/commands/key-commands.js.map +1 -1
  107. package/dist/tui-v2/app/commands/picker-commands.js +59 -8
  108. package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
  109. package/dist/tui-v2/app/commands/session-commands.js +0 -5
  110. package/dist/tui-v2/app/commands/session-commands.js.map +1 -1
  111. package/dist/tui-v2/bootstrap/composition-root.js +2 -0
  112. package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
  113. package/dist/tui-v2/components/jobs/jobs-panel.d.ts +12 -0
  114. package/dist/tui-v2/components/jobs/jobs-panel.js +184 -14
  115. package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
  116. package/dist/tui-v2/components/plan/plan-view.js +7 -3
  117. package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
  118. package/dist/tui-v2/components/status/status-line.js +2 -3
  119. package/dist/tui-v2/components/status/status-line.js.map +1 -1
  120. package/dist/tui-v2/components/toast/toast-host.js +16 -1
  121. package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
  122. package/dist/tui-v2/components/transcript/intro-card.js +11 -5
  123. package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
  124. package/dist/tui-v2/components/transcript/tool-card.d.ts +3 -0
  125. package/dist/tui-v2/components/transcript/tool-card.js +12 -2
  126. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  127. package/dist/tui-v2/components/transcript/transcript-row.js +1 -1
  128. package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
  129. package/dist/tui-v2/composer/composer-editor.d.ts +6 -0
  130. package/dist/tui-v2/composer/composer-editor.js +20 -25
  131. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  132. package/dist/tui-v2/composer/composer-image-paste.d.ts +20 -0
  133. package/dist/tui-v2/composer/composer-image-paste.js +77 -0
  134. package/dist/tui-v2/composer/composer-image-paste.js.map +1 -0
  135. package/dist/tui-v2/state/transcript-store.d.ts +4 -0
  136. package/dist/tui-v2/state/transcript-store.js +13 -0
  137. package/dist/tui-v2/state/transcript-store.js.map +1 -1
  138. package/dist/ui/intro-card.js +3 -3
  139. package/dist/ui/intro-card.js.map +1 -1
  140. package/dist/ui/keys.d.ts +1 -0
  141. package/dist/ui/keys.js +4 -0
  142. package/dist/ui/keys.js.map +1 -1
  143. package/dist/ui/mentions.d.ts +13 -29
  144. package/dist/ui/mentions.js +200 -129
  145. package/dist/ui/mentions.js.map +1 -1
  146. package/dist/ui/plan-pane.js +6 -2
  147. package/dist/ui/plan-pane.js.map +1 -1
  148. package/dist/version.generated.d.ts +2 -2
  149. package/dist/version.generated.js +2 -2
  150. 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 `<script>`, `<style>`, `<noscript>`, `<nav>`, `<header>`,
19
- * `<footer>`, and `<aside>` subtrees outright.
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 every run of ASCII/Unicode whitespace (including newlines,
23
- * tabs, NBSPs) into a single space and trims the result so the agent
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
- "header",
29
- "footer",
30
- "aside",
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 `<script>`, `<style>`, `<noscript>`, `<nav>`, `<header>`,
38
- * `<footer>`, and `<aside>` subtrees outright.
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 every run of ASCII/Unicode whitespace (including newlines,
42
- * tabs, NBSPs) into a single space and trims the result so the agent
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
- $("[aria-hidden='true'], [hidden], template, svg, canvas").remove();
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{3,}/g, "\n\n").trim();
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").replace(/\n{3,}/g, "\n\n").trim();
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":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAKnC,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAG;IACzB,QAAQ;IACR,OAAO;IACP,UAAU;IACV,UAAU;IACV,KAAK;IACL,QAAQ;CACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,8EAA8E;AAC9E,MAAM,gBAAgB,GAAG;IACvB,KAAK;IACL,qBAAqB;IACrB,eAAe;IACf,eAAe;IACf,cAAc;CACf,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAgB;IAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE7D,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC,CAAC,gCAAgC,CAAC,CAAC,MAAM,EAAE,CAAC;IAE7C,CAAC,CAAC,GAAG,CAAC;SACH,QAAQ,EAAE;SACV,MAAM,CAAC;QACN,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACjC,CAAC,CAAC;SACD,MAAM,EAAE,CAAC;IAEZ,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,kBAAkB,CACpC,CAAC,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CACpD,CAAC;IACF,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,KAAK;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAClC,IAAI,WAAW,IAAI,WAAW,KAAK,KAAK;QAAE,GAAG,CAAC,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC,CAAC;IAC9E,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAEnB,yEAAyE;IACzE,yEAAyE;IACzE,uCAAuC;IACvC,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,IAAI;SACR,OAAO,CAAC,+DAA+D,EAAE,GAAG,CAAC;SAC7E,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,OAA2B;IAC5D,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,CAAqB,EACrB,OAA2B;IAE3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;QAC1B,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,oCAAoC;QACpC,IAAI,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO;QACxD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnB,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,QAAQ,GAAG,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC,CAAC,iDAAiD;IACzF,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,CAAqB;IAC5C,MAAM,UAAU,GAAG;QACjB,MAAM;QACN,SAAS;QACT,eAAe;QACf,UAAU;QACV,OAAO;QACP,UAAU;QACV,OAAO;QACP,MAAM;KACP,CAAC;IACF,IAAI,IAAI,GAA6B,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IACvD,IAAI,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACvD,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;YACzB,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACrD,IAAI,KAAK,GAAG,SAAS,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,QAAQ,KAAK,MAAM,CAAC,EAAE,CAAC;gBAC9D,IAAI,GAAG,IAAI,CAAC;gBACZ,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,MAAM,IAAI,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;YAAE,MAAM;IACzE,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,cAAc,CACrB,CAAqB,EACrB,IAA8B,EAC9B,OAAgB;IAEhB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QAChC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,CAAqB,EAAE,IAAa,EAAE,OAAgB;IACxE,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAmE,CAAC;IAC7F,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1D,IAAI,CAAC,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpE,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAE9B,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACxF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC;QAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACxC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE7D,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,UAAU,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAElD,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,UAAU,CAAC,CAAqB,EAAE,IAA8B,EAAE,OAAgB;IACzF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,WAAW,CAClB,CAAqB,EACrB,KAA+B,EAC/B,OAAgB;IAEhB,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YACxC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IAC9B,OAAO;QACL,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;QAC3B,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;QAC5C,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,CAAqB,EACrB,IAA8B;IAE9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,GAAG,GAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAA0B,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,OAAO,CAAC;QACrF,MAAM,KAAK,GAAG,kBAAkB,CAC9B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAClB,KAAK,CAAC,IAAI,EAAE;YACZ,EAAE,CACL,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAe;IAC7C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW;gBAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,WAAW,GAAG,CAAC,WAAW,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,uEAAuE;YACvE,qEAAqE;YACrE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1D,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/D,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,gBAAgB,GAAwC,IAAI,GAAG,CAAC;IACpE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,MAAM,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACjC,CAAC;IAED,qEAAqE;IACrE,qEAAqE;IACrE,mEAAmE;IACnE,oCAAoC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAY,CAAC;IACjB,IAAI,WAAmB,CAAC;IACxB,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,iEAAiE;QACjE,IAAI,GAAG,IAAI,CAAC;QACZ,WAAW,GAAG,EAAE,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,8DAA8D;QAC9D,oDAAoD;QACpD,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED,uEAAuE;IACvE,2DAA2D;IAC3D,MAAM,MAAM,GAAe,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,SAAS;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEnC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,QAAQ,GACZ,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEzC,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;gBACpD,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;gBAClD,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;gBACrC,IAAI,GAAG,KAAK,SAAS;oBAAE,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;gBAC5C,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;gBACjC,IAAI,CAAC,KAAK,SAAS;oBAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBACvC,MAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACvB,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;gBAChE,IAAI,SAAS,KAAK,SAAS;oBAAE,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;gBACzD,MAAM;YACR,CAAC;YACD;gBACE,2DAA2D;gBAC3D,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,kEAAkE;IAClE,kEAAkE;IAClE,6BAA6B;IAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -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
- * — Tavily first, then Brave — whenever a key is configured for it. Each
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
@@ -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
- * — Tavily first, then Brave — whenever a key is configured for it. Each
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 tavily\` then \`clai set tavily <KEY>\` (Brave also supported).`;
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) {