@keystrokehq/exa 0.0.166 → 0.0.168
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 +11 -1
- package/dist/actions/index.cjs +1 -1
- package/dist/actions/index.mjs +1 -1
- package/dist/{actions-R1HUC8cW.mjs → actions-Bog0HOWp.mjs} +3 -21
- package/dist/actions-Bog0HOWp.mjs.map +1 -0
- package/dist/{actions-CETDPOy-.cjs → actions-CUxYXblx.cjs} +7 -54
- package/dist/actions-CUxYXblx.cjs.map +1 -0
- package/dist/client-DlwHA71b.cjs +56 -0
- package/dist/client-DlwHA71b.cjs.map +1 -0
- package/dist/client.cjs +3 -0
- package/dist/client.d.cts +16 -0
- package/dist/client.d.cts.map +1 -0
- package/dist/client.d.mts +16 -0
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +28 -0
- package/dist/client.mjs.map +1 -0
- package/dist/index.cjs +3 -2
- package/dist/index.d.cts +2 -10
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -10
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -1
- package/package.json +8 -2
- package/dist/actions-CETDPOy-.cjs.map +0 -1
- package/dist/actions-R1HUC8cW.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -75,7 +75,17 @@ tools: [exaSearchMcp, exaWebsetsMcp],
|
|
|
75
75
|
## Client
|
|
76
76
|
|
|
77
77
|
```ts
|
|
78
|
-
import {
|
|
78
|
+
import { exaCredential } from "@keystrokehq/exa";
|
|
79
|
+
import { createExaClient } from "@keystrokehq/exa/client";
|
|
80
|
+
|
|
81
|
+
// Direct API key
|
|
82
|
+
const client = createExaClient("your-api-key");
|
|
83
|
+
|
|
84
|
+
// Platform proxy or custom base URL
|
|
85
|
+
const proxied = createExaClient({
|
|
86
|
+
baseUrl: "https://platform.example/internal/projects/p1/web-search",
|
|
87
|
+
headers: { Authorization: "Bearer worker-token" },
|
|
88
|
+
});
|
|
79
89
|
```
|
|
80
90
|
|
|
81
91
|
## Dependencies
|
package/dist/actions/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_actions = require("../actions-
|
|
2
|
+
const require_actions = require("../actions-CUxYXblx.cjs");
|
|
3
3
|
exports.ExaAnswerInput = require_actions.ExaAnswerInput;
|
|
4
4
|
exports.ExaAnswerOutput = require_actions.ExaAnswerOutput;
|
|
5
5
|
exports.ExaGetContentsInput = require_actions.ExaGetContentsInput;
|
package/dist/actions/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as ExaSearchOutput, c as ExaGetContextOutput, d as ExaGetContentsOutput, f as exaGetContents, h as exaAnswer, i as ExaSearchInput, l as exaGetContext, m as ExaAnswerOutput, n as ExaSearchStructuredOutput, o as exaSearch, p as ExaAnswerInput, r as exaSearchStructured, s as ExaGetContextInput, t as ExaSearchStructuredInput, u as ExaGetContentsInput } from "../actions-
|
|
1
|
+
import { a as ExaSearchOutput, c as ExaGetContextOutput, d as ExaGetContentsOutput, f as exaGetContents, h as exaAnswer, i as ExaSearchInput, l as exaGetContext, m as ExaAnswerOutput, n as ExaSearchStructuredOutput, o as exaSearch, p as ExaAnswerInput, r as exaSearchStructured, s as ExaGetContextInput, t as ExaSearchStructuredInput, u as ExaGetContentsInput } from "../actions-Bog0HOWp.mjs";
|
|
2
2
|
export { ExaAnswerInput, ExaAnswerOutput, ExaGetContentsInput, ExaGetContentsOutput, ExaGetContextInput, ExaGetContextOutput, ExaSearchInput, ExaSearchOutput, ExaSearchStructuredInput, ExaSearchStructuredOutput, exaAnswer, exaGetContents, exaGetContext, exaSearch, exaSearchStructured };
|
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
import { t as exaCredential } from "./credential-NfXyV_Vy.mjs";
|
|
2
|
+
import { createExaClient } from "./client.mjs";
|
|
2
3
|
import { z } from "zod";
|
|
3
|
-
import ky from "ky";
|
|
4
4
|
import { defineAction } from "@keystrokehq/keystroke/action";
|
|
5
|
-
//#region src/client.ts
|
|
6
|
-
const EXA_API_BASE = "https://api.exa.ai";
|
|
7
|
-
function createExaClient(apiKey) {
|
|
8
|
-
const api = ky.create({
|
|
9
|
-
prefix: EXA_API_BASE,
|
|
10
|
-
headers: {
|
|
11
|
-
"x-api-key": apiKey,
|
|
12
|
-
"Content-Type": "application/json"
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
return {
|
|
16
|
-
search: (body) => api.post("search", { json: body }).json(),
|
|
17
|
-
contents: (body) => api.post("contents", { json: body }).json(),
|
|
18
|
-
answer: (body) => api.post("answer", { json: body }).json(),
|
|
19
|
-
context: (body) => api.post("context", { json: body }).json()
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
//#endregion
|
|
23
5
|
//#region src/schemas.ts
|
|
24
6
|
const exaSearchTypeSchema = z.enum([
|
|
25
7
|
"instant",
|
|
@@ -368,6 +350,6 @@ const exaSearchStructured = defineAction({
|
|
|
368
350
|
}
|
|
369
351
|
});
|
|
370
352
|
//#endregion
|
|
371
|
-
export { ExaSearchOutput as a, ExaGetContextOutput as c, ExaGetContentsOutput as d, exaGetContents as f,
|
|
353
|
+
export { ExaSearchOutput as a, ExaGetContextOutput as c, ExaGetContentsOutput as d, exaGetContents as f, exaAnswer as h, ExaSearchInput as i, exaGetContext as l, ExaAnswerOutput as m, ExaSearchStructuredOutput as n, exaSearch as o, ExaAnswerInput as p, exaSearchStructured as r, ExaGetContextInput as s, ExaSearchStructuredInput as t, ExaGetContentsInput as u };
|
|
372
354
|
|
|
373
|
-
//# sourceMappingURL=actions-
|
|
355
|
+
//# sourceMappingURL=actions-Bog0HOWp.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions-Bog0HOWp.mjs","names":[],"sources":["../src/schemas.ts","../src/actions/answer.ts","../src/actions/get-contents.ts","../src/actions/get-context.ts","../src/actions/search.ts","../src/actions/search-structured.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const exaSearchTypeSchema = z.enum([\n \"instant\",\n \"fast\",\n \"auto\",\n \"deep-lite\",\n \"deep\",\n \"deep-reasoning\",\n]);\n\nexport const exaCategorySchema = z.enum([\n \"company\",\n \"people\",\n \"research paper\",\n \"news\",\n \"personal site\",\n \"financial report\",\n]);\n\nexport const exaSearchResultSchema = z.object({\n title: z.string().nullable().optional(),\n url: z.string(),\n id: z.string().optional(),\n publishedDate: z.string().nullable().optional(),\n author: z.string().nullable().optional(),\n text: z.string().nullable().optional(),\n highlights: z.array(z.string()).optional(),\n summary: z.string().nullable().optional(),\n entities: z.unknown().optional(),\n});\n\nexport const exaGroundingCitationSchema = z.object({\n url: z.string(),\n title: z.string().optional(),\n});\n\nexport const exaGroundingSchema = z.object({\n field: z.string(),\n citations: z.array(exaGroundingCitationSchema),\n confidence: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n});\n\nexport const exaContentStatusSchema = z.object({\n id: z.string(),\n status: z.enum([\"success\", \"error\"]),\n source: z.enum([\"cached\", \"crawled\"]).optional(),\n error: z\n .object({\n tag: z.string().optional(),\n httpStatusCode: z.number().optional(),\n })\n .optional(),\n});\n\nexport const exaCitationSchema = z.object({\n title: z.string().nullable().optional(),\n url: z.string(),\n id: z.string().optional(),\n publishedDate: z.string().nullable().optional(),\n author: z.string().nullable().optional(),\n text: z.string().nullable().optional(),\n});\n\nconst restrictedCategory = new Set([\"company\", \"people\"]);\n\nexport function assertCategoryFilters(\n category: z.infer<typeof exaCategorySchema> | undefined,\n filters: {\n excludeDomains?: string[] | undefined;\n startPublishedDate?: string | undefined;\n endPublishedDate?: string | undefined;\n },\n): void {\n if (!category || !restrictedCategory.has(category)) {\n return;\n }\n if (filters.excludeDomains?.length) {\n throw new Error(\"excludeDomains is not supported for company or people category searches\");\n }\n if (filters.startPublishedDate || filters.endPublishedDate) {\n throw new Error(\n \"published date filters are not supported for company or people category searches\",\n );\n }\n}\n\nexport function buildSearchContents(input: {\n highlights?: boolean;\n text?: boolean;\n summary?: boolean;\n}): Record<string, unknown> | undefined {\n const contents: Record<string, unknown> = {};\n if (input.highlights !== false) {\n contents.highlights = input.highlights === true ? true : { maxCharacters: 4000 };\n }\n if (input.text) {\n contents.text = true;\n }\n if (input.summary) {\n contents.summary = true;\n }\n return Object.keys(contents).length > 0 ? contents : undefined;\n}\n\nexport function buildContentsOptions(input: {\n highlights?: boolean;\n text?: boolean;\n summary?: boolean;\n}): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n if (input.highlights) {\n body.highlights = typeof input.highlights === \"boolean\" ? true : input.highlights;\n }\n if (input.text) {\n body.text = true;\n }\n if (input.summary) {\n body.summary = true;\n }\n if (!Object.keys(body).length) {\n body.highlights = { maxCharacters: 4000 };\n }\n return body;\n}\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport { exaCitationSchema } from \"../schemas\";\n\nexport const ExaAnswerInput = z.object({\n query: z.string().describe(\"Natural-language question.\"),\n includeCitationText: z\n .boolean()\n .default(false)\n .describe(\"Include full text bodies on citations.\"),\n outputSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\"JSON Schema for structured answer output.\"),\n});\n\nexport const ExaAnswerOutput = z.object({\n requestId: z.string().optional(),\n answer: z.unknown(),\n citations: z.array(exaCitationSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaAnswer = defineAction({\n slug: \"exa-answer\",\n name: \"Exa Answer\",\n description: \"Search-backed grounded Q&A with citations.\",\n input: ExaAnswerInput,\n output: ExaAnswerOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n text: input.includeCitationText,\n };\n if (input.outputSchema) body.outputSchema = input.outputSchema;\n\n const response = (await client.answer(body)) as {\n requestId?: string;\n answer?: unknown;\n citations?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n answer: response.answer ?? null,\n citations: (response.citations ?? []).map((row) => exaCitationSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport { buildContentsOptions, exaContentStatusSchema, exaSearchResultSchema } from \"../schemas\";\n\nexport const ExaGetContentsInput = z.object({\n urls: z.array(z.string().url()).min(1).max(100).describe(\"URLs to extract content from.\"),\n highlights: z.boolean().optional().describe(\"Return token-efficient excerpts.\"),\n text: z.boolean().optional().describe(\"Return full page markdown.\"),\n summary: z.boolean().optional().describe(\"Return LLM summary per URL.\"),\n});\n\nexport const ExaGetContentsOutput = z.object({\n requestId: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n statuses: z.array(exaContentStatusSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaGetContents = defineAction({\n slug: \"exa-get-contents\",\n name: \"Exa Get Contents\",\n description:\n \"Extract webpage content from known URLs. Check statuses for per-URL errors (API returns 200 with error statuses).\",\n input: ExaGetContentsInput,\n output: ExaGetContentsOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n urls: input.urls,\n ...buildContentsOptions({\n highlights: input.highlights,\n text: input.text,\n summary: input.summary,\n }),\n };\n\n const response = (await client.contents(body)) as {\n requestId?: string;\n results?: unknown[];\n statuses?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n statuses: (response.statuses ?? []).map((row) => exaContentStatusSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\n\nexport const ExaGetContextInput = z.object({\n query: z\n .string()\n .min(1)\n .max(2000)\n .describe(\"Code, API, or how-to question for Exa Code context.\"),\n tokensNum: z\n .union([z.number().int().min(50).max(100_000), z.literal(\"dynamic\")])\n .default(\"dynamic\")\n .describe(\"Max output tokens or dynamic sizing.\"),\n});\n\nexport const ExaGetContextOutput = z.object({\n requestId: z.string().optional(),\n query: z.string().optional(),\n response: z.string(),\n resultsCount: z.number().optional(),\n searchTime: z.number().optional(),\n outputTokens: z.number().optional(),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaGetContext = defineAction({\n slug: \"exa-get-context\",\n name: \"Exa Get Context\",\n description: \"Exa Code — token-efficient documentation and code snippets for coding agents.\",\n input: ExaGetContextInput,\n output: ExaGetContextOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const response = (await client.context({\n query: input.query,\n tokensNum: input.tokensNum,\n })) as {\n requestId?: string;\n query?: string;\n response?: string;\n resultsCount?: number;\n searchTime?: number;\n outputTokens?: number;\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n query: response.query,\n response: response.response ?? \"\",\n resultsCount: response.resultsCount,\n searchTime: response.searchTime,\n outputTokens: response.outputTokens,\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport {\n assertCategoryFilters,\n buildSearchContents,\n exaCategorySchema,\n exaSearchResultSchema,\n exaSearchTypeSchema,\n} from \"../schemas\";\n\nexport const ExaSearchInput = z\n .object({\n query: z.string().describe(\"Natural-language search query.\"),\n type: exaSearchTypeSchema.default(\"auto\").describe(\"Search latency/depth profile.\"),\n category: exaCategorySchema\n .optional()\n .describe(\n \"Vertical index: company, people, research paper, news, personal site, financial report.\",\n ),\n numResults: z.number().int().min(1).max(100).default(10),\n includeDomains: z.array(z.string()).max(1200).optional(),\n excludeDomains: z.array(z.string()).max(1200).optional(),\n startPublishedDate: z.string().optional().describe(\"ISO8601 published-after filter.\"),\n endPublishedDate: z.string().optional().describe(\"ISO8601 published-before filter.\"),\n userLocation: z\n .string()\n .length(2)\n .optional()\n .describe(\"Two-letter ISO country code for localized results.\"),\n additionalQueries: z\n .array(z.string())\n .max(10)\n .optional()\n .describe(\"Extra queries for deep search types only.\"),\n systemPrompt: z.string().optional().describe(\"Guides deep search planning.\"),\n highlights: z\n .boolean()\n .default(true)\n .describe(\"Return token-efficient page excerpts (recommended).\"),\n text: z.boolean().optional().describe(\"Include full page markdown text.\"),\n summary: z.boolean().optional().describe(\"Include LLM summary per result.\"),\n })\n .superRefine((input, ctx) => {\n try {\n assertCategoryFilters(input.category, {\n excludeDomains: input.excludeDomains,\n startPublishedDate: input.startPublishedDate,\n endPublishedDate: input.endPublishedDate,\n });\n } catch (error) {\n ctx.addIssue({\n code: \"custom\",\n message: error instanceof Error ? error.message : \"Invalid category filters\",\n });\n }\n });\n\nexport const ExaSearchOutput = z.object({\n requestId: z.string().optional(),\n searchType: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaSearch = defineAction({\n slug: \"exa-search\",\n name: \"Exa Search\",\n description:\n \"Search the web with Exa. Supports categories (company, people, news, research paper, etc.), filters, and content modes.\",\n input: ExaSearchInput,\n output: ExaSearchOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n type: input.type,\n numResults: input.numResults,\n };\n\n if (input.category) body.category = input.category;\n if (input.includeDomains?.length) body.includeDomains = input.includeDomains;\n if (input.excludeDomains?.length) body.excludeDomains = input.excludeDomains;\n if (input.startPublishedDate) body.startPublishedDate = input.startPublishedDate;\n if (input.endPublishedDate) body.endPublishedDate = input.endPublishedDate;\n if (input.userLocation) body.userLocation = input.userLocation;\n if (input.additionalQueries?.length) body.additionalQueries = input.additionalQueries;\n if (input.systemPrompt) body.systemPrompt = input.systemPrompt;\n\n const contents = buildSearchContents({\n highlights: input.highlights,\n text: input.text,\n summary: input.summary,\n });\n if (contents) body.contents = contents;\n\n const response = (await client.search(body)) as {\n requestId?: string;\n searchType?: string;\n results?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n searchType: response.searchType,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport {\n assertCategoryFilters,\n buildSearchContents,\n exaCategorySchema,\n exaGroundingSchema,\n exaSearchResultSchema,\n exaSearchTypeSchema,\n} from \"../schemas\";\n\nexport const ExaSearchStructuredInput = z\n .object({\n query: z.string().describe(\"Natural-language search query.\"),\n outputSchema: z\n .record(z.string(), z.unknown())\n .describe(\"JSON Schema object for structured synthesis output.\"),\n type: exaSearchTypeSchema\n .default(\"deep\")\n .describe(\"Prefer deep or deep-reasoning for synthesis.\"),\n category: exaCategorySchema.optional(),\n numResults: z.number().int().min(1).max(100).default(10),\n includeDomains: z.array(z.string()).max(1200).optional(),\n excludeDomains: z.array(z.string()).max(1200).optional(),\n startPublishedDate: z.string().optional(),\n endPublishedDate: z.string().optional(),\n systemPrompt: z.string().optional(),\n additionalQueries: z.array(z.string()).max(10).optional(),\n highlights: z.boolean().default(true),\n text: z.boolean().optional(),\n })\n .superRefine((input, ctx) => {\n try {\n assertCategoryFilters(input.category, {\n excludeDomains: input.excludeDomains,\n startPublishedDate: input.startPublishedDate,\n endPublishedDate: input.endPublishedDate,\n });\n } catch (error) {\n ctx.addIssue({\n code: \"custom\",\n message: error instanceof Error ? error.message : \"Invalid category filters\",\n });\n }\n });\n\nexport const ExaSearchStructuredOutput = z.object({\n requestId: z.string().optional(),\n searchType: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n output: z\n .object({\n content: z.unknown(),\n grounding: z.array(exaGroundingSchema).optional(),\n })\n .optional(),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaSearchStructured = defineAction({\n slug: \"exa-search-structured\",\n name: \"Exa Structured Search\",\n description:\n \"Exa search with outputSchema for grounded structured JSON synthesis across sources.\",\n input: ExaSearchStructuredInput,\n output: ExaSearchStructuredOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n type: input.type,\n numResults: input.numResults,\n outputSchema: input.outputSchema,\n };\n\n if (input.category) body.category = input.category;\n if (input.includeDomains?.length) body.includeDomains = input.includeDomains;\n if (input.excludeDomains?.length) body.excludeDomains = input.excludeDomains;\n if (input.startPublishedDate) body.startPublishedDate = input.startPublishedDate;\n if (input.endPublishedDate) body.endPublishedDate = input.endPublishedDate;\n if (input.systemPrompt) body.systemPrompt = input.systemPrompt;\n if (input.additionalQueries?.length) body.additionalQueries = input.additionalQueries;\n\n const contents = buildSearchContents({\n highlights: input.highlights,\n text: input.text,\n });\n if (contents) body.contents = contents;\n\n const response = (await client.search(body)) as {\n requestId?: string;\n searchType?: string;\n results?: unknown[];\n output?: { content?: unknown; grounding?: unknown[] };\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n searchType: response.searchType,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n output: response.output\n ? {\n content: response.output.content,\n grounding: response.output.grounding?.map((g) => exaGroundingSchema.parse(g)),\n }\n : undefined,\n costDollars: response.costDollars,\n };\n },\n});\n"],"mappings":"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"}
|
|
@@ -1,48 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
-
key = keys[i];
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
-
get: ((k) => from[k]).bind(null, key),
|
|
13
|
-
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
-
value: mod,
|
|
20
|
-
enumerable: true
|
|
21
|
-
}) : target, mod));
|
|
22
|
-
//#endregion
|
|
1
|
+
const require_client = require("./client-DlwHA71b.cjs");
|
|
23
2
|
const require_credential = require("./credential-BWous9Uu.cjs");
|
|
24
3
|
let zod = require("zod");
|
|
25
|
-
let ky = require("ky");
|
|
26
|
-
ky = __toESM(ky, 1);
|
|
27
4
|
let _keystrokehq_keystroke_action = require("@keystrokehq/keystroke/action");
|
|
28
|
-
//#region src/client.ts
|
|
29
|
-
const EXA_API_BASE = "https://api.exa.ai";
|
|
30
|
-
function createExaClient(apiKey) {
|
|
31
|
-
const api = ky.default.create({
|
|
32
|
-
prefix: EXA_API_BASE,
|
|
33
|
-
headers: {
|
|
34
|
-
"x-api-key": apiKey,
|
|
35
|
-
"Content-Type": "application/json"
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
return {
|
|
39
|
-
search: (body) => api.post("search", { json: body }).json(),
|
|
40
|
-
contents: (body) => api.post("contents", { json: body }).json(),
|
|
41
|
-
answer: (body) => api.post("answer", { json: body }).json(),
|
|
42
|
-
context: (body) => api.post("context", { json: body }).json()
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
//#endregion
|
|
46
5
|
//#region src/schemas.ts
|
|
47
6
|
const exaSearchTypeSchema = zod.z.enum([
|
|
48
7
|
"instant",
|
|
@@ -143,7 +102,7 @@ const exaAnswer = (0, _keystrokehq_keystroke_action.defineAction)({
|
|
|
143
102
|
output: ExaAnswerOutput,
|
|
144
103
|
credentials: [require_credential.exaCredential],
|
|
145
104
|
async run(input, credentials) {
|
|
146
|
-
const client = createExaClient(credentials.exa.apiKey);
|
|
105
|
+
const client = require_client.createExaClient(credentials.exa.apiKey);
|
|
147
106
|
const body = {
|
|
148
107
|
query: input.query,
|
|
149
108
|
text: input.includeCitationText
|
|
@@ -180,7 +139,7 @@ const exaGetContents = (0, _keystrokehq_keystroke_action.defineAction)({
|
|
|
180
139
|
output: ExaGetContentsOutput,
|
|
181
140
|
credentials: [require_credential.exaCredential],
|
|
182
141
|
async run(input, credentials) {
|
|
183
|
-
const client = createExaClient(credentials.exa.apiKey);
|
|
142
|
+
const client = require_client.createExaClient(credentials.exa.apiKey);
|
|
184
143
|
const body = {
|
|
185
144
|
urls: input.urls,
|
|
186
145
|
...buildContentsOptions({
|
|
@@ -221,7 +180,7 @@ const exaGetContext = (0, _keystrokehq_keystroke_action.defineAction)({
|
|
|
221
180
|
output: ExaGetContextOutput,
|
|
222
181
|
credentials: [require_credential.exaCredential],
|
|
223
182
|
async run(input, credentials) {
|
|
224
|
-
const response = await createExaClient(credentials.exa.apiKey).context({
|
|
183
|
+
const response = await require_client.createExaClient(credentials.exa.apiKey).context({
|
|
225
184
|
query: input.query,
|
|
226
185
|
tokensNum: input.tokensNum
|
|
227
186
|
});
|
|
@@ -281,7 +240,7 @@ const exaSearch = (0, _keystrokehq_keystroke_action.defineAction)({
|
|
|
281
240
|
output: ExaSearchOutput,
|
|
282
241
|
credentials: [require_credential.exaCredential],
|
|
283
242
|
async run(input, credentials) {
|
|
284
|
-
const client = createExaClient(credentials.exa.apiKey);
|
|
243
|
+
const client = require_client.createExaClient(credentials.exa.apiKey);
|
|
285
244
|
const body = {
|
|
286
245
|
query: input.query,
|
|
287
246
|
type: input.type,
|
|
@@ -358,7 +317,7 @@ const exaSearchStructured = (0, _keystrokehq_keystroke_action.defineAction)({
|
|
|
358
317
|
output: ExaSearchStructuredOutput,
|
|
359
318
|
credentials: [require_credential.exaCredential],
|
|
360
319
|
async run(input, credentials) {
|
|
361
|
-
const client = createExaClient(credentials.exa.apiKey);
|
|
320
|
+
const client = require_client.createExaClient(credentials.exa.apiKey);
|
|
362
321
|
const body = {
|
|
363
322
|
query: input.query,
|
|
364
323
|
type: input.type,
|
|
@@ -451,12 +410,6 @@ Object.defineProperty(exports, "ExaSearchStructuredOutput", {
|
|
|
451
410
|
return ExaSearchStructuredOutput;
|
|
452
411
|
}
|
|
453
412
|
});
|
|
454
|
-
Object.defineProperty(exports, "createExaClient", {
|
|
455
|
-
enumerable: true,
|
|
456
|
-
get: function() {
|
|
457
|
-
return createExaClient;
|
|
458
|
-
}
|
|
459
|
-
});
|
|
460
413
|
Object.defineProperty(exports, "exaAnswer", {
|
|
461
414
|
enumerable: true,
|
|
462
415
|
get: function() {
|
|
@@ -488,4 +441,4 @@ Object.defineProperty(exports, "exaSearchStructured", {
|
|
|
488
441
|
}
|
|
489
442
|
});
|
|
490
443
|
|
|
491
|
-
//# sourceMappingURL=actions-
|
|
444
|
+
//# sourceMappingURL=actions-CUxYXblx.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions-CUxYXblx.cjs","names":["z","z","exaCredential","createExaClient","z","exaCredential","createExaClient","z","exaCredential","createExaClient","z","exaCredential","createExaClient","z","exaCredential","createExaClient"],"sources":["../src/schemas.ts","../src/actions/answer.ts","../src/actions/get-contents.ts","../src/actions/get-context.ts","../src/actions/search.ts","../src/actions/search-structured.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const exaSearchTypeSchema = z.enum([\n \"instant\",\n \"fast\",\n \"auto\",\n \"deep-lite\",\n \"deep\",\n \"deep-reasoning\",\n]);\n\nexport const exaCategorySchema = z.enum([\n \"company\",\n \"people\",\n \"research paper\",\n \"news\",\n \"personal site\",\n \"financial report\",\n]);\n\nexport const exaSearchResultSchema = z.object({\n title: z.string().nullable().optional(),\n url: z.string(),\n id: z.string().optional(),\n publishedDate: z.string().nullable().optional(),\n author: z.string().nullable().optional(),\n text: z.string().nullable().optional(),\n highlights: z.array(z.string()).optional(),\n summary: z.string().nullable().optional(),\n entities: z.unknown().optional(),\n});\n\nexport const exaGroundingCitationSchema = z.object({\n url: z.string(),\n title: z.string().optional(),\n});\n\nexport const exaGroundingSchema = z.object({\n field: z.string(),\n citations: z.array(exaGroundingCitationSchema),\n confidence: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n});\n\nexport const exaContentStatusSchema = z.object({\n id: z.string(),\n status: z.enum([\"success\", \"error\"]),\n source: z.enum([\"cached\", \"crawled\"]).optional(),\n error: z\n .object({\n tag: z.string().optional(),\n httpStatusCode: z.number().optional(),\n })\n .optional(),\n});\n\nexport const exaCitationSchema = z.object({\n title: z.string().nullable().optional(),\n url: z.string(),\n id: z.string().optional(),\n publishedDate: z.string().nullable().optional(),\n author: z.string().nullable().optional(),\n text: z.string().nullable().optional(),\n});\n\nconst restrictedCategory = new Set([\"company\", \"people\"]);\n\nexport function assertCategoryFilters(\n category: z.infer<typeof exaCategorySchema> | undefined,\n filters: {\n excludeDomains?: string[] | undefined;\n startPublishedDate?: string | undefined;\n endPublishedDate?: string | undefined;\n },\n): void {\n if (!category || !restrictedCategory.has(category)) {\n return;\n }\n if (filters.excludeDomains?.length) {\n throw new Error(\"excludeDomains is not supported for company or people category searches\");\n }\n if (filters.startPublishedDate || filters.endPublishedDate) {\n throw new Error(\n \"published date filters are not supported for company or people category searches\",\n );\n }\n}\n\nexport function buildSearchContents(input: {\n highlights?: boolean;\n text?: boolean;\n summary?: boolean;\n}): Record<string, unknown> | undefined {\n const contents: Record<string, unknown> = {};\n if (input.highlights !== false) {\n contents.highlights = input.highlights === true ? true : { maxCharacters: 4000 };\n }\n if (input.text) {\n contents.text = true;\n }\n if (input.summary) {\n contents.summary = true;\n }\n return Object.keys(contents).length > 0 ? contents : undefined;\n}\n\nexport function buildContentsOptions(input: {\n highlights?: boolean;\n text?: boolean;\n summary?: boolean;\n}): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n if (input.highlights) {\n body.highlights = typeof input.highlights === \"boolean\" ? true : input.highlights;\n }\n if (input.text) {\n body.text = true;\n }\n if (input.summary) {\n body.summary = true;\n }\n if (!Object.keys(body).length) {\n body.highlights = { maxCharacters: 4000 };\n }\n return body;\n}\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport { exaCitationSchema } from \"../schemas\";\n\nexport const ExaAnswerInput = z.object({\n query: z.string().describe(\"Natural-language question.\"),\n includeCitationText: z\n .boolean()\n .default(false)\n .describe(\"Include full text bodies on citations.\"),\n outputSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\"JSON Schema for structured answer output.\"),\n});\n\nexport const ExaAnswerOutput = z.object({\n requestId: z.string().optional(),\n answer: z.unknown(),\n citations: z.array(exaCitationSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaAnswer = defineAction({\n slug: \"exa-answer\",\n name: \"Exa Answer\",\n description: \"Search-backed grounded Q&A with citations.\",\n input: ExaAnswerInput,\n output: ExaAnswerOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n text: input.includeCitationText,\n };\n if (input.outputSchema) body.outputSchema = input.outputSchema;\n\n const response = (await client.answer(body)) as {\n requestId?: string;\n answer?: unknown;\n citations?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n answer: response.answer ?? null,\n citations: (response.citations ?? []).map((row) => exaCitationSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport { buildContentsOptions, exaContentStatusSchema, exaSearchResultSchema } from \"../schemas\";\n\nexport const ExaGetContentsInput = z.object({\n urls: z.array(z.string().url()).min(1).max(100).describe(\"URLs to extract content from.\"),\n highlights: z.boolean().optional().describe(\"Return token-efficient excerpts.\"),\n text: z.boolean().optional().describe(\"Return full page markdown.\"),\n summary: z.boolean().optional().describe(\"Return LLM summary per URL.\"),\n});\n\nexport const ExaGetContentsOutput = z.object({\n requestId: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n statuses: z.array(exaContentStatusSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaGetContents = defineAction({\n slug: \"exa-get-contents\",\n name: \"Exa Get Contents\",\n description:\n \"Extract webpage content from known URLs. Check statuses for per-URL errors (API returns 200 with error statuses).\",\n input: ExaGetContentsInput,\n output: ExaGetContentsOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n urls: input.urls,\n ...buildContentsOptions({\n highlights: input.highlights,\n text: input.text,\n summary: input.summary,\n }),\n };\n\n const response = (await client.contents(body)) as {\n requestId?: string;\n results?: unknown[];\n statuses?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n statuses: (response.statuses ?? []).map((row) => exaContentStatusSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\n\nexport const ExaGetContextInput = z.object({\n query: z\n .string()\n .min(1)\n .max(2000)\n .describe(\"Code, API, or how-to question for Exa Code context.\"),\n tokensNum: z\n .union([z.number().int().min(50).max(100_000), z.literal(\"dynamic\")])\n .default(\"dynamic\")\n .describe(\"Max output tokens or dynamic sizing.\"),\n});\n\nexport const ExaGetContextOutput = z.object({\n requestId: z.string().optional(),\n query: z.string().optional(),\n response: z.string(),\n resultsCount: z.number().optional(),\n searchTime: z.number().optional(),\n outputTokens: z.number().optional(),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaGetContext = defineAction({\n slug: \"exa-get-context\",\n name: \"Exa Get Context\",\n description: \"Exa Code — token-efficient documentation and code snippets for coding agents.\",\n input: ExaGetContextInput,\n output: ExaGetContextOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const response = (await client.context({\n query: input.query,\n tokensNum: input.tokensNum,\n })) as {\n requestId?: string;\n query?: string;\n response?: string;\n resultsCount?: number;\n searchTime?: number;\n outputTokens?: number;\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n query: response.query,\n response: response.response ?? \"\",\n resultsCount: response.resultsCount,\n searchTime: response.searchTime,\n outputTokens: response.outputTokens,\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport {\n assertCategoryFilters,\n buildSearchContents,\n exaCategorySchema,\n exaSearchResultSchema,\n exaSearchTypeSchema,\n} from \"../schemas\";\n\nexport const ExaSearchInput = z\n .object({\n query: z.string().describe(\"Natural-language search query.\"),\n type: exaSearchTypeSchema.default(\"auto\").describe(\"Search latency/depth profile.\"),\n category: exaCategorySchema\n .optional()\n .describe(\n \"Vertical index: company, people, research paper, news, personal site, financial report.\",\n ),\n numResults: z.number().int().min(1).max(100).default(10),\n includeDomains: z.array(z.string()).max(1200).optional(),\n excludeDomains: z.array(z.string()).max(1200).optional(),\n startPublishedDate: z.string().optional().describe(\"ISO8601 published-after filter.\"),\n endPublishedDate: z.string().optional().describe(\"ISO8601 published-before filter.\"),\n userLocation: z\n .string()\n .length(2)\n .optional()\n .describe(\"Two-letter ISO country code for localized results.\"),\n additionalQueries: z\n .array(z.string())\n .max(10)\n .optional()\n .describe(\"Extra queries for deep search types only.\"),\n systemPrompt: z.string().optional().describe(\"Guides deep search planning.\"),\n highlights: z\n .boolean()\n .default(true)\n .describe(\"Return token-efficient page excerpts (recommended).\"),\n text: z.boolean().optional().describe(\"Include full page markdown text.\"),\n summary: z.boolean().optional().describe(\"Include LLM summary per result.\"),\n })\n .superRefine((input, ctx) => {\n try {\n assertCategoryFilters(input.category, {\n excludeDomains: input.excludeDomains,\n startPublishedDate: input.startPublishedDate,\n endPublishedDate: input.endPublishedDate,\n });\n } catch (error) {\n ctx.addIssue({\n code: \"custom\",\n message: error instanceof Error ? error.message : \"Invalid category filters\",\n });\n }\n });\n\nexport const ExaSearchOutput = z.object({\n requestId: z.string().optional(),\n searchType: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaSearch = defineAction({\n slug: \"exa-search\",\n name: \"Exa Search\",\n description:\n \"Search the web with Exa. Supports categories (company, people, news, research paper, etc.), filters, and content modes.\",\n input: ExaSearchInput,\n output: ExaSearchOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n type: input.type,\n numResults: input.numResults,\n };\n\n if (input.category) body.category = input.category;\n if (input.includeDomains?.length) body.includeDomains = input.includeDomains;\n if (input.excludeDomains?.length) body.excludeDomains = input.excludeDomains;\n if (input.startPublishedDate) body.startPublishedDate = input.startPublishedDate;\n if (input.endPublishedDate) body.endPublishedDate = input.endPublishedDate;\n if (input.userLocation) body.userLocation = input.userLocation;\n if (input.additionalQueries?.length) body.additionalQueries = input.additionalQueries;\n if (input.systemPrompt) body.systemPrompt = input.systemPrompt;\n\n const contents = buildSearchContents({\n highlights: input.highlights,\n text: input.text,\n summary: input.summary,\n });\n if (contents) body.contents = contents;\n\n const response = (await client.search(body)) as {\n requestId?: string;\n searchType?: string;\n results?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n searchType: response.searchType,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport {\n assertCategoryFilters,\n buildSearchContents,\n exaCategorySchema,\n exaGroundingSchema,\n exaSearchResultSchema,\n exaSearchTypeSchema,\n} from \"../schemas\";\n\nexport const ExaSearchStructuredInput = z\n .object({\n query: z.string().describe(\"Natural-language search query.\"),\n outputSchema: z\n .record(z.string(), z.unknown())\n .describe(\"JSON Schema object for structured synthesis output.\"),\n type: exaSearchTypeSchema\n .default(\"deep\")\n .describe(\"Prefer deep or deep-reasoning for synthesis.\"),\n category: exaCategorySchema.optional(),\n numResults: z.number().int().min(1).max(100).default(10),\n includeDomains: z.array(z.string()).max(1200).optional(),\n excludeDomains: z.array(z.string()).max(1200).optional(),\n startPublishedDate: z.string().optional(),\n endPublishedDate: z.string().optional(),\n systemPrompt: z.string().optional(),\n additionalQueries: z.array(z.string()).max(10).optional(),\n highlights: z.boolean().default(true),\n text: z.boolean().optional(),\n })\n .superRefine((input, ctx) => {\n try {\n assertCategoryFilters(input.category, {\n excludeDomains: input.excludeDomains,\n startPublishedDate: input.startPublishedDate,\n endPublishedDate: input.endPublishedDate,\n });\n } catch (error) {\n ctx.addIssue({\n code: \"custom\",\n message: error instanceof Error ? error.message : \"Invalid category filters\",\n });\n }\n });\n\nexport const ExaSearchStructuredOutput = z.object({\n requestId: z.string().optional(),\n searchType: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n output: z\n .object({\n content: z.unknown(),\n grounding: z.array(exaGroundingSchema).optional(),\n })\n .optional(),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaSearchStructured = defineAction({\n slug: \"exa-search-structured\",\n name: \"Exa Structured Search\",\n description:\n \"Exa search with outputSchema for grounded structured JSON synthesis across sources.\",\n input: ExaSearchStructuredInput,\n output: ExaSearchStructuredOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n type: input.type,\n numResults: input.numResults,\n outputSchema: input.outputSchema,\n };\n\n if (input.category) body.category = input.category;\n if (input.includeDomains?.length) body.includeDomains = input.includeDomains;\n if (input.excludeDomains?.length) body.excludeDomains = input.excludeDomains;\n if (input.startPublishedDate) body.startPublishedDate = input.startPublishedDate;\n if (input.endPublishedDate) body.endPublishedDate = input.endPublishedDate;\n if (input.systemPrompt) body.systemPrompt = input.systemPrompt;\n if (input.additionalQueries?.length) body.additionalQueries = input.additionalQueries;\n\n const contents = buildSearchContents({\n highlights: input.highlights,\n text: input.text,\n });\n if (contents) body.contents = contents;\n\n const response = (await client.search(body)) as {\n requestId?: string;\n searchType?: string;\n results?: unknown[];\n output?: { content?: unknown; grounding?: unknown[] };\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n searchType: response.searchType,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n output: response.output\n ? {\n content: response.output.content,\n grounding: response.output.grounding?.map((g) => exaGroundingSchema.parse(g)),\n }\n : undefined,\n costDollars: response.costDollars,\n };\n },\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
//#endregion
|
|
23
|
+
let ky = require("ky");
|
|
24
|
+
ky = __toESM(ky, 1);
|
|
25
|
+
//#region src/client.ts
|
|
26
|
+
const EXA_API_BASE = "https://api.exa.ai";
|
|
27
|
+
function resolveCreateExaClientOptions(options) {
|
|
28
|
+
return typeof options === "string" ? { apiKey: options } : options;
|
|
29
|
+
}
|
|
30
|
+
function createExaClient(options) {
|
|
31
|
+
const resolved = resolveCreateExaClientOptions(options);
|
|
32
|
+
const headers = {
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
...resolved.headers
|
|
35
|
+
};
|
|
36
|
+
if (resolved.apiKey) headers["x-api-key"] = resolved.apiKey;
|
|
37
|
+
const api = ky.default.create({
|
|
38
|
+
prefix: `${(resolved.baseUrl ?? EXA_API_BASE).replace(/\/+$/, "")}/`,
|
|
39
|
+
headers
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
search: (body) => api.post("search", { json: body }).json(),
|
|
43
|
+
contents: (body) => api.post("contents", { json: body }).json(),
|
|
44
|
+
answer: (body) => api.post("answer", { json: body }).json(),
|
|
45
|
+
context: (body) => api.post("context", { json: body }).json()
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
Object.defineProperty(exports, "createExaClient", {
|
|
50
|
+
enumerable: true,
|
|
51
|
+
get: function() {
|
|
52
|
+
return createExaClient;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=client-DlwHA71b.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-DlwHA71b.cjs","names":[],"sources":["../src/client.ts"],"sourcesContent":["import ky, { type KyInstance } from \"ky\";\n\nconst EXA_API_BASE = \"https://api.exa.ai\";\n\nexport type ExaClient = {\n search: (body: Record<string, unknown>) => Promise<unknown>;\n contents: (body: Record<string, unknown>) => Promise<unknown>;\n answer: (body: Record<string, unknown>) => Promise<unknown>;\n context: (body: Record<string, unknown>) => Promise<unknown>;\n};\n\nexport type CreateExaClientOptions = {\n /** Sent as x-api-key. Omit when using custom headers (e.g. platform proxy). */\n apiKey?: string;\n /** Defaults to https://api.exa.ai */\n baseUrl?: string;\n headers?: Record<string, string>;\n};\n\nfunction resolveCreateExaClientOptions(\n options: CreateExaClientOptions | string,\n): CreateExaClientOptions {\n return typeof options === \"string\" ? { apiKey: options } : options;\n}\n\nexport function createExaClient(options: CreateExaClientOptions | string): ExaClient {\n const resolved = resolveCreateExaClientOptions(options);\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...resolved.headers,\n };\n\n if (resolved.apiKey) {\n headers[\"x-api-key\"] = resolved.apiKey;\n }\n\n const api: KyInstance = ky.create({\n prefix: `${(resolved.baseUrl ?? EXA_API_BASE).replace(/\\/+$/, \"\")}/`,\n headers,\n });\n\n return {\n search: (body) => api.post(\"search\", { json: body }).json(),\n contents: (body) => api.post(\"contents\", { json: body }).json(),\n answer: (body) => api.post(\"answer\", { json: body }).json(),\n context: (body) => api.post(\"context\", { json: body }).json(),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,eAAe;AAiBrB,SAAS,8BACP,SACwB;CACxB,OAAO,OAAO,YAAY,WAAW,EAAE,QAAQ,QAAQ,IAAI;AAC7D;AAEA,SAAgB,gBAAgB,SAAqD;CACnF,MAAM,WAAW,8BAA8B,OAAO;CACtD,MAAM,UAAkC;EACtC,gBAAgB;EAChB,GAAG,SAAS;CACd;CAEA,IAAI,SAAS,QACX,QAAQ,eAAe,SAAS;CAGlC,MAAM,MAAkB,GAAA,QAAG,OAAO;EAChC,QAAQ,IAAI,SAAS,WAAW,cAAc,QAAQ,QAAQ,EAAE,EAAE;EAClE;CACF,CAAC;CAED,OAAO;EACL,SAAS,SAAS,IAAI,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK;EAC1D,WAAW,SAAS,IAAI,KAAK,YAAY,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK;EAC9D,SAAS,SAAS,IAAI,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK;EAC1D,UAAU,SAAS,IAAI,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK;CAC9D;AACF"}
|
package/dist/client.cjs
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/client.d.ts
|
|
2
|
+
type ExaClient = {
|
|
3
|
+
search: (body: Record<string, unknown>) => Promise<unknown>;
|
|
4
|
+
contents: (body: Record<string, unknown>) => Promise<unknown>;
|
|
5
|
+
answer: (body: Record<string, unknown>) => Promise<unknown>;
|
|
6
|
+
context: (body: Record<string, unknown>) => Promise<unknown>;
|
|
7
|
+
};
|
|
8
|
+
type CreateExaClientOptions = {
|
|
9
|
+
/** Sent as x-api-key. Omit when using custom headers (e.g. platform proxy). */apiKey?: string; /** Defaults to https://api.exa.ai */
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
};
|
|
13
|
+
declare function createExaClient(options: CreateExaClientOptions | string): ExaClient;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { CreateExaClientOptions, ExaClient, createExaClient };
|
|
16
|
+
//# sourceMappingURL=client.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.cts","names":[],"sources":["../src/client.ts"],"mappings":";KAIY,SAAA;EACV,MAAA,GAAS,IAAA,EAAM,MAAA,sBAA4B,OAAA;EAC3C,QAAA,GAAW,IAAA,EAAM,MAAA,sBAA4B,OAAA;EAC7C,MAAA,GAAS,IAAA,EAAM,MAAA,sBAA4B,OAAA;EAC3C,OAAA,GAAU,IAAA,EAAM,MAAA,sBAA4B,OAAA;AAAA;AAAA,KAGlC,sBAAA;EALmC,+EAO7C,MAAA,WAN2C;EAQ3C,OAAA;EACA,OAAA,GAAU,MAAM;AAAA;AAAA,iBASF,eAAA,CAAgB,OAAA,EAAS,sBAAA,YAAkC,SAAS"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/client.d.ts
|
|
2
|
+
type ExaClient = {
|
|
3
|
+
search: (body: Record<string, unknown>) => Promise<unknown>;
|
|
4
|
+
contents: (body: Record<string, unknown>) => Promise<unknown>;
|
|
5
|
+
answer: (body: Record<string, unknown>) => Promise<unknown>;
|
|
6
|
+
context: (body: Record<string, unknown>) => Promise<unknown>;
|
|
7
|
+
};
|
|
8
|
+
type CreateExaClientOptions = {
|
|
9
|
+
/** Sent as x-api-key. Omit when using custom headers (e.g. platform proxy). */apiKey?: string; /** Defaults to https://api.exa.ai */
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
};
|
|
13
|
+
declare function createExaClient(options: CreateExaClientOptions | string): ExaClient;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { CreateExaClientOptions, ExaClient, createExaClient };
|
|
16
|
+
//# sourceMappingURL=client.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.mts","names":[],"sources":["../src/client.ts"],"mappings":";KAIY,SAAA;EACV,MAAA,GAAS,IAAA,EAAM,MAAA,sBAA4B,OAAA;EAC3C,QAAA,GAAW,IAAA,EAAM,MAAA,sBAA4B,OAAA;EAC7C,MAAA,GAAS,IAAA,EAAM,MAAA,sBAA4B,OAAA;EAC3C,OAAA,GAAU,IAAA,EAAM,MAAA,sBAA4B,OAAA;AAAA;AAAA,KAGlC,sBAAA;EALmC,+EAO7C,MAAA,WAN2C;EAQ3C,OAAA;EACA,OAAA,GAAU,MAAM;AAAA;AAAA,iBASF,eAAA,CAAgB,OAAA,EAAS,sBAAA,YAAkC,SAAS"}
|
package/dist/client.mjs
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import ky from "ky";
|
|
2
|
+
//#region src/client.ts
|
|
3
|
+
const EXA_API_BASE = "https://api.exa.ai";
|
|
4
|
+
function resolveCreateExaClientOptions(options) {
|
|
5
|
+
return typeof options === "string" ? { apiKey: options } : options;
|
|
6
|
+
}
|
|
7
|
+
function createExaClient(options) {
|
|
8
|
+
const resolved = resolveCreateExaClientOptions(options);
|
|
9
|
+
const headers = {
|
|
10
|
+
"Content-Type": "application/json",
|
|
11
|
+
...resolved.headers
|
|
12
|
+
};
|
|
13
|
+
if (resolved.apiKey) headers["x-api-key"] = resolved.apiKey;
|
|
14
|
+
const api = ky.create({
|
|
15
|
+
prefix: `${(resolved.baseUrl ?? EXA_API_BASE).replace(/\/+$/, "")}/`,
|
|
16
|
+
headers
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
search: (body) => api.post("search", { json: body }).json(),
|
|
20
|
+
contents: (body) => api.post("contents", { json: body }).json(),
|
|
21
|
+
answer: (body) => api.post("answer", { json: body }).json(),
|
|
22
|
+
context: (body) => api.post("context", { json: body }).json()
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { createExaClient };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.mjs","names":[],"sources":["../src/client.ts"],"sourcesContent":["import ky, { type KyInstance } from \"ky\";\n\nconst EXA_API_BASE = \"https://api.exa.ai\";\n\nexport type ExaClient = {\n search: (body: Record<string, unknown>) => Promise<unknown>;\n contents: (body: Record<string, unknown>) => Promise<unknown>;\n answer: (body: Record<string, unknown>) => Promise<unknown>;\n context: (body: Record<string, unknown>) => Promise<unknown>;\n};\n\nexport type CreateExaClientOptions = {\n /** Sent as x-api-key. Omit when using custom headers (e.g. platform proxy). */\n apiKey?: string;\n /** Defaults to https://api.exa.ai */\n baseUrl?: string;\n headers?: Record<string, string>;\n};\n\nfunction resolveCreateExaClientOptions(\n options: CreateExaClientOptions | string,\n): CreateExaClientOptions {\n return typeof options === \"string\" ? { apiKey: options } : options;\n}\n\nexport function createExaClient(options: CreateExaClientOptions | string): ExaClient {\n const resolved = resolveCreateExaClientOptions(options);\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...resolved.headers,\n };\n\n if (resolved.apiKey) {\n headers[\"x-api-key\"] = resolved.apiKey;\n }\n\n const api: KyInstance = ky.create({\n prefix: `${(resolved.baseUrl ?? EXA_API_BASE).replace(/\\/+$/, \"\")}/`,\n headers,\n });\n\n return {\n search: (body) => api.post(\"search\", { json: body }).json(),\n contents: (body) => api.post(\"contents\", { json: body }).json(),\n answer: (body) => api.post(\"answer\", { json: body }).json(),\n context: (body) => api.post(\"context\", { json: body }).json(),\n };\n}\n"],"mappings":";;AAEA,MAAM,eAAe;AAiBrB,SAAS,8BACP,SACwB;CACxB,OAAO,OAAO,YAAY,WAAW,EAAE,QAAQ,QAAQ,IAAI;AAC7D;AAEA,SAAgB,gBAAgB,SAAqD;CACnF,MAAM,WAAW,8BAA8B,OAAO;CACtD,MAAM,UAAkC;EACtC,gBAAgB;EAChB,GAAG,SAAS;CACd;CAEA,IAAI,SAAS,QACX,QAAQ,eAAe,SAAS;CAGlC,MAAM,MAAkB,GAAG,OAAO;EAChC,QAAQ,IAAI,SAAS,WAAW,cAAc,QAAQ,QAAQ,EAAE,EAAE;EAClE;CACF,CAAC;CAED,OAAO;EACL,SAAS,SAAS,IAAI,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK;EAC1D,WAAW,SAAS,IAAI,KAAK,YAAY,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK;EAC9D,SAAS,SAAS,IAAI,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK;EAC1D,UAAU,SAAS,IAAI,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK;CAC9D;AACF"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const
|
|
2
|
+
const require_client = require("./client-DlwHA71b.cjs");
|
|
3
3
|
const require_credential = require("./credential-BWous9Uu.cjs");
|
|
4
|
+
const require_actions = require("./actions-CUxYXblx.cjs");
|
|
4
5
|
const require_mcp = require("./mcp.cjs");
|
|
5
|
-
exports.createExaClient =
|
|
6
|
+
exports.createExaClient = require_client.createExaClient;
|
|
6
7
|
exports.exaAnswer = require_actions.exaAnswer;
|
|
7
8
|
exports.exaCredential = require_credential.exaCredential;
|
|
8
9
|
exports.exaGetContents = require_actions.exaGetContents;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { f as exaGetContents, h as exaAnswer, l as exaGetContext, o as exaSearch, r as exaSearchStructured } from "./index-BwCGHs6v.cjs";
|
|
2
|
+
import { CreateExaClientOptions, ExaClient, createExaClient } from "./client.cjs";
|
|
2
3
|
import { exaMcp, exaSearchMcp, exaWebsetsMcp } from "./mcp.cjs";
|
|
3
4
|
import { z } from "zod";
|
|
4
5
|
|
|
@@ -7,14 +8,5 @@ declare const exaCredential: import("@keystrokehq/shared").Credential<"exa", z.Z
|
|
|
7
8
|
apiKey: z.ZodString;
|
|
8
9
|
}, z.core.$strip>>;
|
|
9
10
|
//#endregion
|
|
10
|
-
|
|
11
|
-
type ExaClient = {
|
|
12
|
-
search: (body: Record<string, unknown>) => Promise<unknown>;
|
|
13
|
-
contents: (body: Record<string, unknown>) => Promise<unknown>;
|
|
14
|
-
answer: (body: Record<string, unknown>) => Promise<unknown>;
|
|
15
|
-
context: (body: Record<string, unknown>) => Promise<unknown>;
|
|
16
|
-
};
|
|
17
|
-
declare function createExaClient(apiKey: string): ExaClient;
|
|
18
|
-
//#endregion
|
|
19
|
-
export { type ExaClient, createExaClient, exaAnswer, exaCredential, exaGetContents, exaGetContext, exaMcp, exaSearch, exaSearchMcp, exaSearchStructured, exaWebsetsMcp };
|
|
11
|
+
export { type CreateExaClientOptions, type ExaClient, createExaClient, exaAnswer, exaCredential, exaGetContents, exaGetContext, exaMcp, exaSearch, exaSearchMcp, exaSearchStructured, exaWebsetsMcp };
|
|
20
12
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/credential.ts"
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/credential.ts"],"mappings":";;;;;;cAGa,aAAA,gCAAa,UAAA,QAAA,CAAA,CAAA,SAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { f as exaGetContents, h as exaAnswer, l as exaGetContext, o as exaSearch, r as exaSearchStructured } from "./index-BwCGHs6v.mjs";
|
|
2
|
+
import { CreateExaClientOptions, ExaClient, createExaClient } from "./client.mjs";
|
|
2
3
|
import { exaMcp, exaSearchMcp, exaWebsetsMcp } from "./mcp.mjs";
|
|
3
4
|
import { z } from "zod";
|
|
4
5
|
|
|
@@ -7,14 +8,5 @@ declare const exaCredential: import("@keystrokehq/shared").Credential<"exa", z.Z
|
|
|
7
8
|
apiKey: z.ZodString;
|
|
8
9
|
}, z.core.$strip>>;
|
|
9
10
|
//#endregion
|
|
10
|
-
|
|
11
|
-
type ExaClient = {
|
|
12
|
-
search: (body: Record<string, unknown>) => Promise<unknown>;
|
|
13
|
-
contents: (body: Record<string, unknown>) => Promise<unknown>;
|
|
14
|
-
answer: (body: Record<string, unknown>) => Promise<unknown>;
|
|
15
|
-
context: (body: Record<string, unknown>) => Promise<unknown>;
|
|
16
|
-
};
|
|
17
|
-
declare function createExaClient(apiKey: string): ExaClient;
|
|
18
|
-
//#endregion
|
|
19
|
-
export { type ExaClient, createExaClient, exaAnswer, exaCredential, exaGetContents, exaGetContext, exaMcp, exaSearch, exaSearchMcp, exaSearchStructured, exaWebsetsMcp };
|
|
11
|
+
export { type CreateExaClientOptions, type ExaClient, createExaClient, exaAnswer, exaCredential, exaGetContents, exaGetContext, exaMcp, exaSearch, exaSearchMcp, exaSearchStructured, exaWebsetsMcp };
|
|
20
12
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/credential.ts"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/credential.ts"],"mappings":";;;;;;cAGa,aAAA,gCAAa,UAAA,QAAA,CAAA,CAAA,SAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { t as exaCredential } from "./credential-NfXyV_Vy.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { createExaClient } from "./client.mjs";
|
|
3
|
+
import { f as exaGetContents, h as exaAnswer, l as exaGetContext, o as exaSearch, r as exaSearchStructured } from "./actions-Bog0HOWp.mjs";
|
|
3
4
|
import { exaMcp, exaSearchMcp, exaWebsetsMcp } from "./mcp.mjs";
|
|
4
5
|
export { createExaClient, exaAnswer, exaCredential, exaGetContents, exaGetContext, exaMcp, exaSearch, exaSearchMcp, exaSearchStructured, exaWebsetsMcp };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keystrokehq/exa",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.168",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/dallinbentley/keystroke.git",
|
|
@@ -26,6 +26,12 @@
|
|
|
26
26
|
"import": "./dist/actions/index.mjs",
|
|
27
27
|
"require": "./dist/actions/index.cjs"
|
|
28
28
|
},
|
|
29
|
+
"./client": {
|
|
30
|
+
"development": "./src/client.ts",
|
|
31
|
+
"types": "./dist/client.d.mts",
|
|
32
|
+
"import": "./dist/client.mjs",
|
|
33
|
+
"require": "./dist/client.cjs"
|
|
34
|
+
},
|
|
29
35
|
"./mcp": {
|
|
30
36
|
"development": "./src/mcp.ts",
|
|
31
37
|
"types": "./dist/mcp.d.mts",
|
|
@@ -40,7 +46,7 @@
|
|
|
40
46
|
"dependencies": {
|
|
41
47
|
"ky": "^2.0.2",
|
|
42
48
|
"zod": "^4.4.3",
|
|
43
|
-
"@keystrokehq/keystroke": "0.0.
|
|
49
|
+
"@keystrokehq/keystroke": "0.0.168"
|
|
44
50
|
},
|
|
45
51
|
"devDependencies": {
|
|
46
52
|
"@types/node": "^25.9.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"actions-CETDPOy-.cjs","names":["z","z","exaCredential","z","exaCredential","z","exaCredential","z","exaCredential","z","exaCredential"],"sources":["../src/client.ts","../src/schemas.ts","../src/actions/answer.ts","../src/actions/get-contents.ts","../src/actions/get-context.ts","../src/actions/search.ts","../src/actions/search-structured.ts"],"sourcesContent":["import ky, { type KyInstance } from \"ky\";\n\nconst EXA_API_BASE = \"https://api.exa.ai\";\n\nexport type ExaClient = {\n search: (body: Record<string, unknown>) => Promise<unknown>;\n contents: (body: Record<string, unknown>) => Promise<unknown>;\n answer: (body: Record<string, unknown>) => Promise<unknown>;\n context: (body: Record<string, unknown>) => Promise<unknown>;\n};\n\nexport function createExaClient(apiKey: string): ExaClient {\n const api: KyInstance = ky.create({\n prefix: EXA_API_BASE,\n headers: {\n \"x-api-key\": apiKey,\n \"Content-Type\": \"application/json\",\n },\n });\n\n return {\n search: (body) => api.post(\"search\", { json: body }).json(),\n contents: (body) => api.post(\"contents\", { json: body }).json(),\n answer: (body) => api.post(\"answer\", { json: body }).json(),\n context: (body) => api.post(\"context\", { json: body }).json(),\n };\n}\n","import { z } from \"zod\";\n\nexport const exaSearchTypeSchema = z.enum([\n \"instant\",\n \"fast\",\n \"auto\",\n \"deep-lite\",\n \"deep\",\n \"deep-reasoning\",\n]);\n\nexport const exaCategorySchema = z.enum([\n \"company\",\n \"people\",\n \"research paper\",\n \"news\",\n \"personal site\",\n \"financial report\",\n]);\n\nexport const exaSearchResultSchema = z.object({\n title: z.string().nullable().optional(),\n url: z.string(),\n id: z.string().optional(),\n publishedDate: z.string().nullable().optional(),\n author: z.string().nullable().optional(),\n text: z.string().nullable().optional(),\n highlights: z.array(z.string()).optional(),\n summary: z.string().nullable().optional(),\n entities: z.unknown().optional(),\n});\n\nexport const exaGroundingCitationSchema = z.object({\n url: z.string(),\n title: z.string().optional(),\n});\n\nexport const exaGroundingSchema = z.object({\n field: z.string(),\n citations: z.array(exaGroundingCitationSchema),\n confidence: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n});\n\nexport const exaContentStatusSchema = z.object({\n id: z.string(),\n status: z.enum([\"success\", \"error\"]),\n source: z.enum([\"cached\", \"crawled\"]).optional(),\n error: z\n .object({\n tag: z.string().optional(),\n httpStatusCode: z.number().optional(),\n })\n .optional(),\n});\n\nexport const exaCitationSchema = z.object({\n title: z.string().nullable().optional(),\n url: z.string(),\n id: z.string().optional(),\n publishedDate: z.string().nullable().optional(),\n author: z.string().nullable().optional(),\n text: z.string().nullable().optional(),\n});\n\nconst restrictedCategory = new Set([\"company\", \"people\"]);\n\nexport function assertCategoryFilters(\n category: z.infer<typeof exaCategorySchema> | undefined,\n filters: {\n excludeDomains?: string[] | undefined;\n startPublishedDate?: string | undefined;\n endPublishedDate?: string | undefined;\n },\n): void {\n if (!category || !restrictedCategory.has(category)) {\n return;\n }\n if (filters.excludeDomains?.length) {\n throw new Error(\"excludeDomains is not supported for company or people category searches\");\n }\n if (filters.startPublishedDate || filters.endPublishedDate) {\n throw new Error(\n \"published date filters are not supported for company or people category searches\",\n );\n }\n}\n\nexport function buildSearchContents(input: {\n highlights?: boolean;\n text?: boolean;\n summary?: boolean;\n}): Record<string, unknown> | undefined {\n const contents: Record<string, unknown> = {};\n if (input.highlights !== false) {\n contents.highlights = input.highlights === true ? true : { maxCharacters: 4000 };\n }\n if (input.text) {\n contents.text = true;\n }\n if (input.summary) {\n contents.summary = true;\n }\n return Object.keys(contents).length > 0 ? contents : undefined;\n}\n\nexport function buildContentsOptions(input: {\n highlights?: boolean;\n text?: boolean;\n summary?: boolean;\n}): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n if (input.highlights) {\n body.highlights = typeof input.highlights === \"boolean\" ? true : input.highlights;\n }\n if (input.text) {\n body.text = true;\n }\n if (input.summary) {\n body.summary = true;\n }\n if (!Object.keys(body).length) {\n body.highlights = { maxCharacters: 4000 };\n }\n return body;\n}\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport { exaCitationSchema } from \"../schemas\";\n\nexport const ExaAnswerInput = z.object({\n query: z.string().describe(\"Natural-language question.\"),\n includeCitationText: z\n .boolean()\n .default(false)\n .describe(\"Include full text bodies on citations.\"),\n outputSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\"JSON Schema for structured answer output.\"),\n});\n\nexport const ExaAnswerOutput = z.object({\n requestId: z.string().optional(),\n answer: z.unknown(),\n citations: z.array(exaCitationSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaAnswer = defineAction({\n slug: \"exa-answer\",\n name: \"Exa Answer\",\n description: \"Search-backed grounded Q&A with citations.\",\n input: ExaAnswerInput,\n output: ExaAnswerOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n text: input.includeCitationText,\n };\n if (input.outputSchema) body.outputSchema = input.outputSchema;\n\n const response = (await client.answer(body)) as {\n requestId?: string;\n answer?: unknown;\n citations?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n answer: response.answer ?? null,\n citations: (response.citations ?? []).map((row) => exaCitationSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport { buildContentsOptions, exaContentStatusSchema, exaSearchResultSchema } from \"../schemas\";\n\nexport const ExaGetContentsInput = z.object({\n urls: z.array(z.string().url()).min(1).max(100).describe(\"URLs to extract content from.\"),\n highlights: z.boolean().optional().describe(\"Return token-efficient excerpts.\"),\n text: z.boolean().optional().describe(\"Return full page markdown.\"),\n summary: z.boolean().optional().describe(\"Return LLM summary per URL.\"),\n});\n\nexport const ExaGetContentsOutput = z.object({\n requestId: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n statuses: z.array(exaContentStatusSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaGetContents = defineAction({\n slug: \"exa-get-contents\",\n name: \"Exa Get Contents\",\n description:\n \"Extract webpage content from known URLs. Check statuses for per-URL errors (API returns 200 with error statuses).\",\n input: ExaGetContentsInput,\n output: ExaGetContentsOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n urls: input.urls,\n ...buildContentsOptions({\n highlights: input.highlights,\n text: input.text,\n summary: input.summary,\n }),\n };\n\n const response = (await client.contents(body)) as {\n requestId?: string;\n results?: unknown[];\n statuses?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n statuses: (response.statuses ?? []).map((row) => exaContentStatusSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\n\nexport const ExaGetContextInput = z.object({\n query: z\n .string()\n .min(1)\n .max(2000)\n .describe(\"Code, API, or how-to question for Exa Code context.\"),\n tokensNum: z\n .union([z.number().int().min(50).max(100_000), z.literal(\"dynamic\")])\n .default(\"dynamic\")\n .describe(\"Max output tokens or dynamic sizing.\"),\n});\n\nexport const ExaGetContextOutput = z.object({\n requestId: z.string().optional(),\n query: z.string().optional(),\n response: z.string(),\n resultsCount: z.number().optional(),\n searchTime: z.number().optional(),\n outputTokens: z.number().optional(),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaGetContext = defineAction({\n slug: \"exa-get-context\",\n name: \"Exa Get Context\",\n description: \"Exa Code — token-efficient documentation and code snippets for coding agents.\",\n input: ExaGetContextInput,\n output: ExaGetContextOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const response = (await client.context({\n query: input.query,\n tokensNum: input.tokensNum,\n })) as {\n requestId?: string;\n query?: string;\n response?: string;\n resultsCount?: number;\n searchTime?: number;\n outputTokens?: number;\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n query: response.query,\n response: response.response ?? \"\",\n resultsCount: response.resultsCount,\n searchTime: response.searchTime,\n outputTokens: response.outputTokens,\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport {\n assertCategoryFilters,\n buildSearchContents,\n exaCategorySchema,\n exaSearchResultSchema,\n exaSearchTypeSchema,\n} from \"../schemas\";\n\nexport const ExaSearchInput = z\n .object({\n query: z.string().describe(\"Natural-language search query.\"),\n type: exaSearchTypeSchema.default(\"auto\").describe(\"Search latency/depth profile.\"),\n category: exaCategorySchema\n .optional()\n .describe(\n \"Vertical index: company, people, research paper, news, personal site, financial report.\",\n ),\n numResults: z.number().int().min(1).max(100).default(10),\n includeDomains: z.array(z.string()).max(1200).optional(),\n excludeDomains: z.array(z.string()).max(1200).optional(),\n startPublishedDate: z.string().optional().describe(\"ISO8601 published-after filter.\"),\n endPublishedDate: z.string().optional().describe(\"ISO8601 published-before filter.\"),\n userLocation: z\n .string()\n .length(2)\n .optional()\n .describe(\"Two-letter ISO country code for localized results.\"),\n additionalQueries: z\n .array(z.string())\n .max(10)\n .optional()\n .describe(\"Extra queries for deep search types only.\"),\n systemPrompt: z.string().optional().describe(\"Guides deep search planning.\"),\n highlights: z\n .boolean()\n .default(true)\n .describe(\"Return token-efficient page excerpts (recommended).\"),\n text: z.boolean().optional().describe(\"Include full page markdown text.\"),\n summary: z.boolean().optional().describe(\"Include LLM summary per result.\"),\n })\n .superRefine((input, ctx) => {\n try {\n assertCategoryFilters(input.category, {\n excludeDomains: input.excludeDomains,\n startPublishedDate: input.startPublishedDate,\n endPublishedDate: input.endPublishedDate,\n });\n } catch (error) {\n ctx.addIssue({\n code: \"custom\",\n message: error instanceof Error ? error.message : \"Invalid category filters\",\n });\n }\n });\n\nexport const ExaSearchOutput = z.object({\n requestId: z.string().optional(),\n searchType: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaSearch = defineAction({\n slug: \"exa-search\",\n name: \"Exa Search\",\n description:\n \"Search the web with Exa. Supports categories (company, people, news, research paper, etc.), filters, and content modes.\",\n input: ExaSearchInput,\n output: ExaSearchOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n type: input.type,\n numResults: input.numResults,\n };\n\n if (input.category) body.category = input.category;\n if (input.includeDomains?.length) body.includeDomains = input.includeDomains;\n if (input.excludeDomains?.length) body.excludeDomains = input.excludeDomains;\n if (input.startPublishedDate) body.startPublishedDate = input.startPublishedDate;\n if (input.endPublishedDate) body.endPublishedDate = input.endPublishedDate;\n if (input.userLocation) body.userLocation = input.userLocation;\n if (input.additionalQueries?.length) body.additionalQueries = input.additionalQueries;\n if (input.systemPrompt) body.systemPrompt = input.systemPrompt;\n\n const contents = buildSearchContents({\n highlights: input.highlights,\n text: input.text,\n summary: input.summary,\n });\n if (contents) body.contents = contents;\n\n const response = (await client.search(body)) as {\n requestId?: string;\n searchType?: string;\n results?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n searchType: response.searchType,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport {\n assertCategoryFilters,\n buildSearchContents,\n exaCategorySchema,\n exaGroundingSchema,\n exaSearchResultSchema,\n exaSearchTypeSchema,\n} from \"../schemas\";\n\nexport const ExaSearchStructuredInput = z\n .object({\n query: z.string().describe(\"Natural-language search query.\"),\n outputSchema: z\n .record(z.string(), z.unknown())\n .describe(\"JSON Schema object for structured synthesis output.\"),\n type: exaSearchTypeSchema\n .default(\"deep\")\n .describe(\"Prefer deep or deep-reasoning for synthesis.\"),\n category: exaCategorySchema.optional(),\n numResults: z.number().int().min(1).max(100).default(10),\n includeDomains: z.array(z.string()).max(1200).optional(),\n excludeDomains: z.array(z.string()).max(1200).optional(),\n startPublishedDate: z.string().optional(),\n endPublishedDate: z.string().optional(),\n systemPrompt: z.string().optional(),\n additionalQueries: z.array(z.string()).max(10).optional(),\n highlights: z.boolean().default(true),\n text: z.boolean().optional(),\n })\n .superRefine((input, ctx) => {\n try {\n assertCategoryFilters(input.category, {\n excludeDomains: input.excludeDomains,\n startPublishedDate: input.startPublishedDate,\n endPublishedDate: input.endPublishedDate,\n });\n } catch (error) {\n ctx.addIssue({\n code: \"custom\",\n message: error instanceof Error ? error.message : \"Invalid category filters\",\n });\n }\n });\n\nexport const ExaSearchStructuredOutput = z.object({\n requestId: z.string().optional(),\n searchType: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n output: z\n .object({\n content: z.unknown(),\n grounding: z.array(exaGroundingSchema).optional(),\n })\n .optional(),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaSearchStructured = defineAction({\n slug: \"exa-search-structured\",\n name: \"Exa Structured Search\",\n description:\n \"Exa search with outputSchema for grounded structured JSON synthesis across sources.\",\n input: ExaSearchStructuredInput,\n output: ExaSearchStructuredOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n type: input.type,\n numResults: input.numResults,\n outputSchema: input.outputSchema,\n };\n\n if (input.category) body.category = input.category;\n if (input.includeDomains?.length) body.includeDomains = input.includeDomains;\n if (input.excludeDomains?.length) body.excludeDomains = input.excludeDomains;\n if (input.startPublishedDate) body.startPublishedDate = input.startPublishedDate;\n if (input.endPublishedDate) body.endPublishedDate = input.endPublishedDate;\n if (input.systemPrompt) body.systemPrompt = input.systemPrompt;\n if (input.additionalQueries?.length) body.additionalQueries = input.additionalQueries;\n\n const contents = buildSearchContents({\n highlights: input.highlights,\n text: input.text,\n });\n if (contents) body.contents = contents;\n\n const response = (await client.search(body)) as {\n requestId?: string;\n searchType?: string;\n results?: unknown[];\n output?: { content?: unknown; grounding?: unknown[] };\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n searchType: response.searchType,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n output: response.output\n ? {\n content: response.output.content,\n grounding: response.output.grounding?.map((g) => exaGroundingSchema.parse(g)),\n }\n : undefined,\n costDollars: response.costDollars,\n };\n },\n});\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"actions-R1HUC8cW.mjs","names":[],"sources":["../src/client.ts","../src/schemas.ts","../src/actions/answer.ts","../src/actions/get-contents.ts","../src/actions/get-context.ts","../src/actions/search.ts","../src/actions/search-structured.ts"],"sourcesContent":["import ky, { type KyInstance } from \"ky\";\n\nconst EXA_API_BASE = \"https://api.exa.ai\";\n\nexport type ExaClient = {\n search: (body: Record<string, unknown>) => Promise<unknown>;\n contents: (body: Record<string, unknown>) => Promise<unknown>;\n answer: (body: Record<string, unknown>) => Promise<unknown>;\n context: (body: Record<string, unknown>) => Promise<unknown>;\n};\n\nexport function createExaClient(apiKey: string): ExaClient {\n const api: KyInstance = ky.create({\n prefix: EXA_API_BASE,\n headers: {\n \"x-api-key\": apiKey,\n \"Content-Type\": \"application/json\",\n },\n });\n\n return {\n search: (body) => api.post(\"search\", { json: body }).json(),\n contents: (body) => api.post(\"contents\", { json: body }).json(),\n answer: (body) => api.post(\"answer\", { json: body }).json(),\n context: (body) => api.post(\"context\", { json: body }).json(),\n };\n}\n","import { z } from \"zod\";\n\nexport const exaSearchTypeSchema = z.enum([\n \"instant\",\n \"fast\",\n \"auto\",\n \"deep-lite\",\n \"deep\",\n \"deep-reasoning\",\n]);\n\nexport const exaCategorySchema = z.enum([\n \"company\",\n \"people\",\n \"research paper\",\n \"news\",\n \"personal site\",\n \"financial report\",\n]);\n\nexport const exaSearchResultSchema = z.object({\n title: z.string().nullable().optional(),\n url: z.string(),\n id: z.string().optional(),\n publishedDate: z.string().nullable().optional(),\n author: z.string().nullable().optional(),\n text: z.string().nullable().optional(),\n highlights: z.array(z.string()).optional(),\n summary: z.string().nullable().optional(),\n entities: z.unknown().optional(),\n});\n\nexport const exaGroundingCitationSchema = z.object({\n url: z.string(),\n title: z.string().optional(),\n});\n\nexport const exaGroundingSchema = z.object({\n field: z.string(),\n citations: z.array(exaGroundingCitationSchema),\n confidence: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n});\n\nexport const exaContentStatusSchema = z.object({\n id: z.string(),\n status: z.enum([\"success\", \"error\"]),\n source: z.enum([\"cached\", \"crawled\"]).optional(),\n error: z\n .object({\n tag: z.string().optional(),\n httpStatusCode: z.number().optional(),\n })\n .optional(),\n});\n\nexport const exaCitationSchema = z.object({\n title: z.string().nullable().optional(),\n url: z.string(),\n id: z.string().optional(),\n publishedDate: z.string().nullable().optional(),\n author: z.string().nullable().optional(),\n text: z.string().nullable().optional(),\n});\n\nconst restrictedCategory = new Set([\"company\", \"people\"]);\n\nexport function assertCategoryFilters(\n category: z.infer<typeof exaCategorySchema> | undefined,\n filters: {\n excludeDomains?: string[] | undefined;\n startPublishedDate?: string | undefined;\n endPublishedDate?: string | undefined;\n },\n): void {\n if (!category || !restrictedCategory.has(category)) {\n return;\n }\n if (filters.excludeDomains?.length) {\n throw new Error(\"excludeDomains is not supported for company or people category searches\");\n }\n if (filters.startPublishedDate || filters.endPublishedDate) {\n throw new Error(\n \"published date filters are not supported for company or people category searches\",\n );\n }\n}\n\nexport function buildSearchContents(input: {\n highlights?: boolean;\n text?: boolean;\n summary?: boolean;\n}): Record<string, unknown> | undefined {\n const contents: Record<string, unknown> = {};\n if (input.highlights !== false) {\n contents.highlights = input.highlights === true ? true : { maxCharacters: 4000 };\n }\n if (input.text) {\n contents.text = true;\n }\n if (input.summary) {\n contents.summary = true;\n }\n return Object.keys(contents).length > 0 ? contents : undefined;\n}\n\nexport function buildContentsOptions(input: {\n highlights?: boolean;\n text?: boolean;\n summary?: boolean;\n}): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n if (input.highlights) {\n body.highlights = typeof input.highlights === \"boolean\" ? true : input.highlights;\n }\n if (input.text) {\n body.text = true;\n }\n if (input.summary) {\n body.summary = true;\n }\n if (!Object.keys(body).length) {\n body.highlights = { maxCharacters: 4000 };\n }\n return body;\n}\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport { exaCitationSchema } from \"../schemas\";\n\nexport const ExaAnswerInput = z.object({\n query: z.string().describe(\"Natural-language question.\"),\n includeCitationText: z\n .boolean()\n .default(false)\n .describe(\"Include full text bodies on citations.\"),\n outputSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\"JSON Schema for structured answer output.\"),\n});\n\nexport const ExaAnswerOutput = z.object({\n requestId: z.string().optional(),\n answer: z.unknown(),\n citations: z.array(exaCitationSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaAnswer = defineAction({\n slug: \"exa-answer\",\n name: \"Exa Answer\",\n description: \"Search-backed grounded Q&A with citations.\",\n input: ExaAnswerInput,\n output: ExaAnswerOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n text: input.includeCitationText,\n };\n if (input.outputSchema) body.outputSchema = input.outputSchema;\n\n const response = (await client.answer(body)) as {\n requestId?: string;\n answer?: unknown;\n citations?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n answer: response.answer ?? null,\n citations: (response.citations ?? []).map((row) => exaCitationSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport { buildContentsOptions, exaContentStatusSchema, exaSearchResultSchema } from \"../schemas\";\n\nexport const ExaGetContentsInput = z.object({\n urls: z.array(z.string().url()).min(1).max(100).describe(\"URLs to extract content from.\"),\n highlights: z.boolean().optional().describe(\"Return token-efficient excerpts.\"),\n text: z.boolean().optional().describe(\"Return full page markdown.\"),\n summary: z.boolean().optional().describe(\"Return LLM summary per URL.\"),\n});\n\nexport const ExaGetContentsOutput = z.object({\n requestId: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n statuses: z.array(exaContentStatusSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaGetContents = defineAction({\n slug: \"exa-get-contents\",\n name: \"Exa Get Contents\",\n description:\n \"Extract webpage content from known URLs. Check statuses for per-URL errors (API returns 200 with error statuses).\",\n input: ExaGetContentsInput,\n output: ExaGetContentsOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n urls: input.urls,\n ...buildContentsOptions({\n highlights: input.highlights,\n text: input.text,\n summary: input.summary,\n }),\n };\n\n const response = (await client.contents(body)) as {\n requestId?: string;\n results?: unknown[];\n statuses?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n statuses: (response.statuses ?? []).map((row) => exaContentStatusSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\n\nexport const ExaGetContextInput = z.object({\n query: z\n .string()\n .min(1)\n .max(2000)\n .describe(\"Code, API, or how-to question for Exa Code context.\"),\n tokensNum: z\n .union([z.number().int().min(50).max(100_000), z.literal(\"dynamic\")])\n .default(\"dynamic\")\n .describe(\"Max output tokens or dynamic sizing.\"),\n});\n\nexport const ExaGetContextOutput = z.object({\n requestId: z.string().optional(),\n query: z.string().optional(),\n response: z.string(),\n resultsCount: z.number().optional(),\n searchTime: z.number().optional(),\n outputTokens: z.number().optional(),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaGetContext = defineAction({\n slug: \"exa-get-context\",\n name: \"Exa Get Context\",\n description: \"Exa Code — token-efficient documentation and code snippets for coding agents.\",\n input: ExaGetContextInput,\n output: ExaGetContextOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const response = (await client.context({\n query: input.query,\n tokensNum: input.tokensNum,\n })) as {\n requestId?: string;\n query?: string;\n response?: string;\n resultsCount?: number;\n searchTime?: number;\n outputTokens?: number;\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n query: response.query,\n response: response.response ?? \"\",\n resultsCount: response.resultsCount,\n searchTime: response.searchTime,\n outputTokens: response.outputTokens,\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport {\n assertCategoryFilters,\n buildSearchContents,\n exaCategorySchema,\n exaSearchResultSchema,\n exaSearchTypeSchema,\n} from \"../schemas\";\n\nexport const ExaSearchInput = z\n .object({\n query: z.string().describe(\"Natural-language search query.\"),\n type: exaSearchTypeSchema.default(\"auto\").describe(\"Search latency/depth profile.\"),\n category: exaCategorySchema\n .optional()\n .describe(\n \"Vertical index: company, people, research paper, news, personal site, financial report.\",\n ),\n numResults: z.number().int().min(1).max(100).default(10),\n includeDomains: z.array(z.string()).max(1200).optional(),\n excludeDomains: z.array(z.string()).max(1200).optional(),\n startPublishedDate: z.string().optional().describe(\"ISO8601 published-after filter.\"),\n endPublishedDate: z.string().optional().describe(\"ISO8601 published-before filter.\"),\n userLocation: z\n .string()\n .length(2)\n .optional()\n .describe(\"Two-letter ISO country code for localized results.\"),\n additionalQueries: z\n .array(z.string())\n .max(10)\n .optional()\n .describe(\"Extra queries for deep search types only.\"),\n systemPrompt: z.string().optional().describe(\"Guides deep search planning.\"),\n highlights: z\n .boolean()\n .default(true)\n .describe(\"Return token-efficient page excerpts (recommended).\"),\n text: z.boolean().optional().describe(\"Include full page markdown text.\"),\n summary: z.boolean().optional().describe(\"Include LLM summary per result.\"),\n })\n .superRefine((input, ctx) => {\n try {\n assertCategoryFilters(input.category, {\n excludeDomains: input.excludeDomains,\n startPublishedDate: input.startPublishedDate,\n endPublishedDate: input.endPublishedDate,\n });\n } catch (error) {\n ctx.addIssue({\n code: \"custom\",\n message: error instanceof Error ? error.message : \"Invalid category filters\",\n });\n }\n });\n\nexport const ExaSearchOutput = z.object({\n requestId: z.string().optional(),\n searchType: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaSearch = defineAction({\n slug: \"exa-search\",\n name: \"Exa Search\",\n description:\n \"Search the web with Exa. Supports categories (company, people, news, research paper, etc.), filters, and content modes.\",\n input: ExaSearchInput,\n output: ExaSearchOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n type: input.type,\n numResults: input.numResults,\n };\n\n if (input.category) body.category = input.category;\n if (input.includeDomains?.length) body.includeDomains = input.includeDomains;\n if (input.excludeDomains?.length) body.excludeDomains = input.excludeDomains;\n if (input.startPublishedDate) body.startPublishedDate = input.startPublishedDate;\n if (input.endPublishedDate) body.endPublishedDate = input.endPublishedDate;\n if (input.userLocation) body.userLocation = input.userLocation;\n if (input.additionalQueries?.length) body.additionalQueries = input.additionalQueries;\n if (input.systemPrompt) body.systemPrompt = input.systemPrompt;\n\n const contents = buildSearchContents({\n highlights: input.highlights,\n text: input.text,\n summary: input.summary,\n });\n if (contents) body.contents = contents;\n\n const response = (await client.search(body)) as {\n requestId?: string;\n searchType?: string;\n results?: unknown[];\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n searchType: response.searchType,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n costDollars: response.costDollars,\n };\n },\n});\n","import { defineAction } from \"@keystrokehq/keystroke/action\";\nimport { z } from \"zod\";\nimport { createExaClient } from \"../client\";\nimport { exaCredential } from \"../credential\";\nimport {\n assertCategoryFilters,\n buildSearchContents,\n exaCategorySchema,\n exaGroundingSchema,\n exaSearchResultSchema,\n exaSearchTypeSchema,\n} from \"../schemas\";\n\nexport const ExaSearchStructuredInput = z\n .object({\n query: z.string().describe(\"Natural-language search query.\"),\n outputSchema: z\n .record(z.string(), z.unknown())\n .describe(\"JSON Schema object for structured synthesis output.\"),\n type: exaSearchTypeSchema\n .default(\"deep\")\n .describe(\"Prefer deep or deep-reasoning for synthesis.\"),\n category: exaCategorySchema.optional(),\n numResults: z.number().int().min(1).max(100).default(10),\n includeDomains: z.array(z.string()).max(1200).optional(),\n excludeDomains: z.array(z.string()).max(1200).optional(),\n startPublishedDate: z.string().optional(),\n endPublishedDate: z.string().optional(),\n systemPrompt: z.string().optional(),\n additionalQueries: z.array(z.string()).max(10).optional(),\n highlights: z.boolean().default(true),\n text: z.boolean().optional(),\n })\n .superRefine((input, ctx) => {\n try {\n assertCategoryFilters(input.category, {\n excludeDomains: input.excludeDomains,\n startPublishedDate: input.startPublishedDate,\n endPublishedDate: input.endPublishedDate,\n });\n } catch (error) {\n ctx.addIssue({\n code: \"custom\",\n message: error instanceof Error ? error.message : \"Invalid category filters\",\n });\n }\n });\n\nexport const ExaSearchStructuredOutput = z.object({\n requestId: z.string().optional(),\n searchType: z.string().optional(),\n results: z.array(exaSearchResultSchema),\n output: z\n .object({\n content: z.unknown(),\n grounding: z.array(exaGroundingSchema).optional(),\n })\n .optional(),\n costDollars: z.object({ total: z.number().optional() }).optional(),\n});\n\nexport const exaSearchStructured = defineAction({\n slug: \"exa-search-structured\",\n name: \"Exa Structured Search\",\n description:\n \"Exa search with outputSchema for grounded structured JSON synthesis across sources.\",\n input: ExaSearchStructuredInput,\n output: ExaSearchStructuredOutput,\n credentials: [exaCredential] as const,\n async run(input, credentials) {\n const client = createExaClient(credentials.exa.apiKey);\n\n const body: Record<string, unknown> = {\n query: input.query,\n type: input.type,\n numResults: input.numResults,\n outputSchema: input.outputSchema,\n };\n\n if (input.category) body.category = input.category;\n if (input.includeDomains?.length) body.includeDomains = input.includeDomains;\n if (input.excludeDomains?.length) body.excludeDomains = input.excludeDomains;\n if (input.startPublishedDate) body.startPublishedDate = input.startPublishedDate;\n if (input.endPublishedDate) body.endPublishedDate = input.endPublishedDate;\n if (input.systemPrompt) body.systemPrompt = input.systemPrompt;\n if (input.additionalQueries?.length) body.additionalQueries = input.additionalQueries;\n\n const contents = buildSearchContents({\n highlights: input.highlights,\n text: input.text,\n });\n if (contents) body.contents = contents;\n\n const response = (await client.search(body)) as {\n requestId?: string;\n searchType?: string;\n results?: unknown[];\n output?: { content?: unknown; grounding?: unknown[] };\n costDollars?: { total?: number };\n };\n\n return {\n requestId: response.requestId,\n searchType: response.searchType,\n results: (response.results ?? []).map((row) => exaSearchResultSchema.parse(row)),\n output: response.output\n ? {\n content: response.output.content,\n grounding: response.output.grounding?.map((g) => exaGroundingSchema.parse(g)),\n }\n : undefined,\n costDollars: response.costDollars,\n };\n },\n});\n"],"mappings":"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"}
|