@keystrokehq/exa 0.0.165 → 0.0.167

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 CHANGED
@@ -75,7 +75,17 @@ tools: [exaSearchMcp, exaWebsetsMcp],
75
75
  ## Client
76
76
 
77
77
  ```ts
78
- import { createExaClient, exaCredential } from "@keystrokehq/exa";
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
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_actions = require("../actions-CETDPOy-.cjs");
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;
@@ -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-R1HUC8cW.mjs";
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, createExaClient as g, 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 };
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-R1HUC8cW.mjs.map
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
- //#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
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-CETDPOy-.cjs.map
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"}
@@ -0,0 +1,3 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_client = require("./client-DlwHA71b.cjs");
3
+ exports.createExaClient = require_client.createExaClient;
@@ -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"}
@@ -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 require_actions = require("./actions-CETDPOy-.cjs");
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 = require_actions.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
- //#region src/client.d.ts
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/credential.ts","../src/client.ts"],"mappings":";;;;;cAGa,aAAA,gCAAa,UAAA,QAAA,CAAA,CAAA,SAAA;;;;;KCCd,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,iBAG9B,eAAA,CAAgB,MAAA,WAAiB,SAAS"}
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
- //#region src/client.d.ts
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/credential.ts","../src/client.ts"],"mappings":";;;;;cAGa,aAAA,gCAAa,UAAA,QAAA,CAAA,CAAA,SAAA;;;;;KCCd,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,iBAG9B,eAAA,CAAgB,MAAA,WAAiB,SAAS"}
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 { f as exaGetContents, g as createExaClient, h as exaAnswer, l as exaGetContext, o as exaSearch, r as exaSearchStructured } from "./actions-R1HUC8cW.mjs";
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.165",
3
+ "version": "0.0.167",
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.165"
49
+ "@keystrokehq/keystroke": "0.0.167"
44
50
  },
45
51
  "devDependencies": {
46
52
  "@types/node": "^25.9.1",
@@ -49,9 +55,9 @@
49
55
  "typescript": "^6.0.3",
50
56
  "vitest": "^4.1.7",
51
57
  "@keystrokehq/oxlint-config": "0.0.3",
58
+ "@keystrokehq/tsconfig": "0.0.3",
52
59
  "@keystrokehq/tsdown-config": "0.0.3",
53
- "@keystrokehq/vitest-config": "0.0.4",
54
- "@keystrokehq/tsconfig": "0.0.3"
60
+ "@keystrokehq/vitest-config": "0.0.4"
55
61
  },
56
62
  "scripts": {
57
63
  "build": "tsdown",
@@ -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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"}