@openclaw/exa-plugin 2026.11.1 → 2026.11.3
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/dist/.setup/{exa-web-search-provider-BFa1BlUM.mjs → exa-web-search-provider-UdcmLdNp.mjs} +3 -2
- package/dist/.setup/{exa-web-search-provider.runtime-Dw_U6tcp.mjs → exa-web-search-provider.runtime-C73kkrxv.mjs} +14 -10
- package/dist/index.js +3 -2
- package/dist/web-search-contract-api.js +2 -1
- package/dist/web-search-provider.js +2 -1
- package/package.json +4 -4
- package/dist/.source-module-urls/5cfcb03c5b0024dec174889a3f9c18da47ed3402dc2c1542d3c7152d85411a6d.json +0 -1
package/dist/.setup/{exa-web-search-provider-BFa1BlUM.mjs → exa-web-search-provider-UdcmLdNp.mjs}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
|
|
2
2
|
import { createWebSearchProviderContractFields } from "openclaw/plugin-sdk/provider-web-search-contract";
|
|
3
|
-
|
|
3
|
+
//#region extensions/exa/src/exa-web-search-provider.ts
|
|
4
4
|
const EXA_CREDENTIAL_PATH = "plugins.entries.exa.config.webSearch.apiKey";
|
|
5
5
|
const EXA_SEARCH_TYPES = [
|
|
6
6
|
"auto",
|
|
@@ -17,7 +17,7 @@ const EXA_FRESHNESS_VALUES = [
|
|
|
17
17
|
"year"
|
|
18
18
|
];
|
|
19
19
|
const EXA_MAX_SEARCH_COUNT = 100;
|
|
20
|
-
const loadExaWebSearchRuntime = createLazyRuntimeModule(() => import("./exa-web-search-provider.runtime-
|
|
20
|
+
const loadExaWebSearchRuntime = createLazyRuntimeModule(() => import("./exa-web-search-provider.runtime-C73kkrxv.mjs"));
|
|
21
21
|
const ExaSearchSchema = {
|
|
22
22
|
type: "object",
|
|
23
23
|
properties: {
|
|
@@ -94,4 +94,5 @@ function createExaWebSearchProvider() {
|
|
|
94
94
|
})
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
|
+
//#endregion
|
|
97
98
|
export { createExaWebSearchProvider as t };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import { parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
|
|
2
|
-
import { ProviderHttpError,
|
|
3
|
+
import { ProviderHttpError, readProviderResponseErrorText, redactProviderResponseErrorText } from "openclaw/plugin-sdk/provider-http";
|
|
3
4
|
import { DEFAULT_SEARCH_COUNT, buildSearchCacheKey, mergeScopedSearchConfig, parseIsoDateRange, readCachedSearchPayload, readConfiguredSecretString, readPositiveIntegerParam, readProviderEnvValue, readStringParam, resolveProviderWebSearchPluginConfig, resolveSearchCacheTtlMs, resolveSearchTimeoutSeconds, resolveSiteName, withTrustedWebSearchEndpoint, wrapWebContent, writeCachedSearchPayload } from "openclaw/plugin-sdk/provider-web-search";
|
|
4
5
|
import { readResponseWithLimit } from "openclaw/plugin-sdk/response-limit-runtime";
|
|
5
6
|
import { asOptionalObjectRecord, asOptionalRecord, isRecord, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
|
-
|
|
7
|
+
//#region extensions/exa/src/exa-web-search-provider.runtime.ts
|
|
7
8
|
const EXA_SEARCH_ENDPOINT = "https://api.exa.ai/search";
|
|
8
9
|
const EXA_SEARCH_TYPES = [
|
|
9
10
|
"auto",
|
|
@@ -183,6 +184,7 @@ async function executeExaWebSearchProviderTool(ctx, args, signal) {
|
|
|
183
184
|
const resolvedCount = Math.min(EXA_MAX_SEARCH_COUNT, parseStrictPositiveInteger(count) ?? DEFAULT_SEARCH_COUNT);
|
|
184
185
|
const cacheKey = buildSearchCacheKey([
|
|
185
186
|
"exa",
|
|
187
|
+
createHash("sha256").update(apiKey).digest("hex"),
|
|
186
188
|
endpoint,
|
|
187
189
|
type,
|
|
188
190
|
query,
|
|
@@ -206,24 +208,25 @@ async function executeExaWebSearchProviderTool(ctx, args, signal) {
|
|
|
206
208
|
if (dateAfter) body.startPublishedDate = dateAfter;
|
|
207
209
|
else if (freshness) body.startPublishedDate = resolveFreshnessStartDate(freshness);
|
|
208
210
|
if (dateBefore) body.endPublishedDate = dateBefore;
|
|
211
|
+
const headers = {
|
|
212
|
+
Accept: "application/json",
|
|
213
|
+
"Content-Type": "application/json",
|
|
214
|
+
"x-api-key": apiKey,
|
|
215
|
+
"x-exa-integration": "openclaw"
|
|
216
|
+
};
|
|
209
217
|
const results = await withTrustedWebSearchEndpoint({
|
|
210
218
|
url: endpoint,
|
|
211
219
|
timeoutSeconds,
|
|
212
220
|
signal,
|
|
213
221
|
init: {
|
|
214
222
|
method: "POST",
|
|
215
|
-
headers
|
|
216
|
-
Accept: "application/json",
|
|
217
|
-
"Content-Type": "application/json",
|
|
218
|
-
"x-api-key": apiKey,
|
|
219
|
-
"x-exa-integration": "openclaw"
|
|
220
|
-
},
|
|
223
|
+
headers,
|
|
221
224
|
body: JSON.stringify(body)
|
|
222
225
|
}
|
|
223
226
|
}, async (res) => {
|
|
224
227
|
if (!res.ok) {
|
|
225
|
-
const detail = await
|
|
226
|
-
throw new ProviderHttpError(`Exa API error (${res.status}): ${detail || res.statusText}`, { status: res.status });
|
|
228
|
+
const detail = await readProviderResponseErrorText(res, EXA_ERROR_BODY_LIMIT_BYTES, headers, signal);
|
|
229
|
+
throw new ProviderHttpError(`Exa API error (${res.status}): ${detail || redactProviderResponseErrorText(res.statusText, headers)}`, { status: res.status });
|
|
227
230
|
}
|
|
228
231
|
return (await readExaSearchResults(res)).slice(0, resolvedCount);
|
|
229
232
|
});
|
|
@@ -258,4 +261,5 @@ async function executeExaWebSearchProviderTool(ctx, args, signal) {
|
|
|
258
261
|
writeCachedSearchPayload(cacheKey, payload, cacheTtlMs);
|
|
259
262
|
return payload;
|
|
260
263
|
}
|
|
264
|
+
//#endregion
|
|
261
265
|
export { executeExaWebSearchProviderTool };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as createExaWebSearchProvider } from "./.setup/exa-web-search-provider-
|
|
1
|
+
import { t as createExaWebSearchProvider } from "./.setup/exa-web-search-provider-UdcmLdNp.mjs";
|
|
2
2
|
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
|
3
|
-
|
|
3
|
+
//#region extensions/exa/index.ts
|
|
4
4
|
var exa_default = definePluginEntry({
|
|
5
5
|
id: "exa",
|
|
6
6
|
name: "Exa Plugin",
|
|
@@ -9,4 +9,5 @@ var exa_default = definePluginEntry({
|
|
|
9
9
|
api.registerWebSearchProvider(createExaWebSearchProvider());
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
//#endregion
|
|
12
13
|
export { exa_default as default };
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { t as createExaWebSearchProvider } from "./.setup/exa-web-search-provider-UdcmLdNp.mjs";
|
|
2
|
+
export { createExaWebSearchProvider };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/exa-plugin",
|
|
3
|
-
"version": "2026.11.
|
|
3
|
+
"version": "2026.11.3",
|
|
4
4
|
"description": "OpenClaw Exa plugin.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
"minHostVersion": ">=2026.6.8"
|
|
19
19
|
},
|
|
20
20
|
"compat": {
|
|
21
|
-
"pluginApi": ">=2026.11.
|
|
21
|
+
"pluginApi": ">=2026.11.3"
|
|
22
22
|
},
|
|
23
23
|
"build": {
|
|
24
|
-
"openclawVersion": "2026.11.
|
|
24
|
+
"openclawVersion": "2026.11.3",
|
|
25
25
|
"bundledDist": false
|
|
26
26
|
},
|
|
27
27
|
"release": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"assets/activity.svg"
|
|
41
41
|
],
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"openclaw": ">=2026.11.
|
|
43
|
+
"openclaw": ">=2026.11.3"
|
|
44
44
|
},
|
|
45
45
|
"peerDependenciesMeta": {
|
|
46
46
|
"openclaw": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"entries":[{"output":"index.js","source":"extensions/exa/index.ts"},{"output":"web-search-contract-api.js","source":"extensions/exa/web-search-contract-api.ts"},{"output":"web-search-provider.js","source":"extensions/exa/web-search-provider.ts"}],"chunks":[{"output":".setup/exa-web-search-provider-BFa1BlUM.mjs","sha256":"7301a599c9b6d5eb245e7353b56a4b894772cae0514126c243180a4dbaf2b0f8","facadeSource":null,"sources":["extensions/exa/src/exa-web-search-provider.ts"]},{"output":".setup/exa-web-search-provider.runtime-Dw_U6tcp.mjs","sha256":"072b491558d684763e0a547f9e38fddd6e313062a1d28f72535beea852895ad8","facadeSource":"extensions/exa/src/exa-web-search-provider.runtime.ts","sources":["extensions/exa/src/exa-web-search-provider.runtime.ts"]},{"output":"index.js","sha256":"879fc6b5409d1763d469bf18035fa97d7df18d5066e2c3e8592a287e8e94b6c6","facadeSource":"extensions/exa/index.ts","sources":["extensions/exa/index.ts"]},{"output":"web-search-contract-api.js","sha256":"93f1c7d694e0cfccfd8839c2c2ef525a9c32a68f70b7c12f2f729199726382d0","facadeSource":"extensions/exa/web-search-contract-api.ts","sources":[]},{"output":"web-search-provider.js","sha256":"56b68cf40d95fc9fe392356ffbf6ee837f37768553515cda70f26a3442871943","facadeSource":"extensions/exa/web-search-provider.ts","sources":[]}],"unrenderedSources":["extensions/exa/web-search-contract-api.ts","extensions/exa/web-search-provider.ts"]}
|