@markusylisiurunen/tau 0.3.29 → 0.3.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +11 -11
  2. package/dist/core/config/content_loader.js +3 -1
  3. package/dist/core/config/content_loader.js.map +1 -1
  4. package/dist/core/config/index.js +1 -1
  5. package/dist/core/config/index.js.map +1 -1
  6. package/dist/core/config/schema.js +3 -3
  7. package/dist/core/config/schema.js.map +1 -1
  8. package/dist/core/personas.js +2 -1
  9. package/dist/core/personas.js.map +1 -1
  10. package/dist/core/session/runner.js +1 -0
  11. package/dist/core/session/runner.js.map +1 -1
  12. package/dist/core/static/code_mode/web/documentation.md +236 -0
  13. package/dist/core/static/code_mode/web/sandbox_runner.mjs +112 -0
  14. package/dist/core/subagents/registry.js +2 -3
  15. package/dist/core/subagents/registry.js.map +1 -1
  16. package/dist/core/subagents/subagent_engine.js +1 -11
  17. package/dist/core/subagents/subagent_engine.js.map +1 -1
  18. package/dist/core/subagents/types.js +2 -3
  19. package/dist/core/subagents/types.js.map +1 -1
  20. package/dist/core/telegram/adapter.js +58 -17
  21. package/dist/core/telegram/adapter.js.map +1 -1
  22. package/dist/core/telegram/runtime.js +20 -2
  23. package/dist/core/telegram/runtime.js.map +1 -1
  24. package/dist/core/tools/catalog.js +6 -9
  25. package/dist/core/tools/catalog.js.map +1 -1
  26. package/dist/core/tools/code_mode.js +105 -0
  27. package/dist/core/tools/code_mode.js.map +1 -0
  28. package/dist/core/tools/registry.js.map +1 -1
  29. package/dist/core/tools/tool_names.js +2 -4
  30. package/dist/core/tools/tool_names.js.map +1 -1
  31. package/dist/core/tools/web.js +537 -0
  32. package/dist/core/tools/web.js.map +1 -0
  33. package/dist/core/tools/web_discovery.js +201 -0
  34. package/dist/core/tools/web_discovery.js.map +1 -0
  35. package/dist/core/utils/subagent_utils.js +8 -8
  36. package/dist/core/utils/subagent_utils.js.map +1 -1
  37. package/dist/core/version.js +1 -1
  38. package/dist/host/hosted_ephemeral_agent_session.js +1 -1
  39. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
  40. package/dist/protocol/session_protocol.d.ts +1 -1
  41. package/dist/protocol/session_protocol.js +1 -2
  42. package/dist/protocol/session_protocol.js.map +1 -1
  43. package/dist/tui/ui/agent_activity_format.js +6 -15
  44. package/dist/tui/ui/agent_activity_format.js.map +1 -1
  45. package/dist/tui/ui/tool_ui_registry.js +83 -19
  46. package/dist/tui/ui/tool_ui_registry.js.map +1 -1
  47. package/package.json +3 -2
  48. package/dist/core/tools/web_fetch.js +0 -259
  49. package/dist/core/tools/web_fetch.js.map +0 -1
  50. package/dist/core/tools/web_search.js +0 -242
  51. package/dist/core/tools/web_search.js.map +0 -1
  52. package/dist/core/utils/parallel_api.js +0 -26
  53. package/dist/core/utils/parallel_api.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/tools/registry.ts"],"names":[],"mappings":"AA4OA,MAAM,UAAU,kBAAkB,CAChC,GAAkF,EAClF,cAA4B;IAE5B,OAAO;QACL,cAAc;QACd,GAAG,EAAE,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;KACpF,CAAC;AACJ,CAAC;AAuCD,MAAM,UAAU,yBAAyB,CACvC,OAA4B;IAE5B,OAAO,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC;AAClC,CAAC;AAYD,MAAM,OAAO,YAAY;IACN,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IAE5D,YAAY,WAA6B;QACvC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,qBAAqB,CAAC,YAAyB;QAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAED,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,qBAAqB,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,UAAU,CAAC,MAAM,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/tools/registry.ts"],"names":[],"mappings":"AAwOA,MAAM,UAAU,kBAAkB,CAChC,GAAkF,EAClF,cAA4B;IAE5B,OAAO;QACL,cAAc;QACd,GAAG,EAAE,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;KACpF,CAAC;AACJ,CAAC;AAuCD,MAAM,UAAU,yBAAyB,CACvC,OAA4B;IAE5B,OAAO,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC;AAClC,CAAC;AAaD,MAAM,OAAO,YAAY;IACN,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IAE5D,YAAY,WAA6B;QACvC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,qBAAqB,CAAC,YAAyB;QAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAED,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,qBAAqB,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,UAAU,CAAC,MAAM,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -7,8 +7,7 @@ export const TOOL_NAME_SPAWN_AGENT = "spawn_agent";
7
7
  export const TOOL_NAME_SEND_INPUT_TO_AGENT = "send_input_to_agent";
8
8
  export const TOOL_NAME_WAIT_FOR_AGENTS = "wait_for_agents";
9
9
  export const TOOL_NAME_TERMINATE_AGENT = "terminate_agent";
10
- export const TOOL_NAME_WEB_SEARCH = "web_search";
11
- export const TOOL_NAME_WEB_FETCH = "web_fetch";
10
+ export const TOOL_NAME_WEB = "web";
12
11
  export const TOOL_NAME_NOOK = "nook";
13
12
  export const TOOL_NAMES = [
14
13
  TOOL_NAME_BASH,
@@ -19,8 +18,7 @@ export const TOOL_NAMES = [
19
18
  TOOL_NAME_SEND_INPUT_TO_AGENT,
20
19
  TOOL_NAME_WAIT_FOR_AGENTS,
21
20
  TOOL_NAME_TERMINATE_AGENT,
22
- TOOL_NAME_WEB_SEARCH,
23
- TOOL_NAME_WEB_FETCH,
21
+ TOOL_NAME_WEB,
24
22
  TOOL_NAME_NOOK,
25
23
  ];
26
24
  //# sourceMappingURL=tool_names.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool_names.js","sourceRoot":"","sources":["../../../src/core/tools/tool_names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AACnD,MAAM,CAAC,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AACnE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AACjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc;IACd,eAAe;IACf,cAAc;IACd,oBAAoB;IACpB,qBAAqB;IACrB,6BAA6B;IAC7B,yBAAyB;IACzB,yBAAyB;IACzB,oBAAoB;IACpB,mBAAmB;IACnB,cAAc;CACN,CAAC"}
1
+ {"version":3,"file":"tool_names.js","sourceRoot":"","sources":["../../../src/core/tools/tool_names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AACnD,MAAM,CAAC,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AACnE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc;IACd,eAAe;IACf,cAAc;IACd,oBAAoB;IACpB,qBAAqB;IACrB,6BAA6B;IAC7B,yBAAyB;IACzB,yBAAyB;IACzB,aAAa;IACb,cAAc;CACN,CAAC"}
@@ -0,0 +1,537 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { finished } from "node:stream/promises";
3
+ import { StringDecoder } from "node:string_decoder";
4
+ import { Worker } from "node:worker_threads";
5
+ import { Type } from "typebox";
6
+ import { z } from "zod";
7
+ import { getExaApiKey } from "../config/index.js";
8
+ import { truncateToBytesFromEnd } from "../utils/truncate.js";
9
+ import { formatZodError } from "../utils/zod.js";
10
+ import { createCodeModeToolDefinition, } from "./code_mode.js";
11
+ import { DEFAULT_COMMAND_CAPTURE_BYTES, } from "./execution_backend.js";
12
+ import { TOOL_NAME_WEB } from "./tool_names.js";
13
+ import { discoverAgentContent } from "./web_discovery.js";
14
+ const WEB_CODE_MODE_TIMEOUT_MS = 60_000;
15
+ const WEB_CODE_MODE_OUTPUT_TOKENS = 8_192;
16
+ const EXA_API_BASE_URL = "https://api.exa.ai";
17
+ const EXA_MAX_RESPONSE_BYTES = 16 * 1024 * 1024;
18
+ const WEB_DESCRIPTION = [
19
+ "Run a one-shot JavaScript program to search the web and retrieve page content.",
20
+ "Use this tool only when the user asks to browse or search the web, provides a URL, or otherwise clearly implies that web access is needed.",
21
+ "For direct URLs, use web.discover first and print a concise discovery report before deciding in the next turn whether to use curl, web.fetch, or another approach.",
22
+ "Top-level await is supported. The program receives web, docs, and console globals.",
23
+ "Only text written through console methods is returned; program return values are ignored.",
24
+ "Format results as concise, readable plain text instead of dumping raw JSON. Select only relevant fields when possible. When all fields are needed, still flatten and label them compactly rather than serializing the response object. Emit JSON only when the user explicitly requests JSON or another machine-readable result.",
25
+ "To discover the available web APIs, run a program that prints docs with console.log(docs), then use that documentation in the next turn.",
26
+ ].join(" ");
27
+ export const WEB_TOOL = {
28
+ name: TOOL_NAME_WEB,
29
+ description: WEB_DESCRIPTION,
30
+ parameters: Type.Object({
31
+ code: Type.String({
32
+ description: "JavaScript source to execute. Use console output to return information.",
33
+ }),
34
+ }, { additionalProperties: false }),
35
+ };
36
+ const webArgsSchema = z
37
+ .object({
38
+ code: z.string().trim().min(1),
39
+ })
40
+ .strict();
41
+ const nonEmptyStringSchema = z.string().trim().min(1);
42
+ const nonEmptyStringArraySchema = z.array(nonEmptyStringSchema).min(1);
43
+ const domainFilterSchema = nonEmptyStringArraySchema.max(1_200);
44
+ const maxAgeHoursSchema = z.number().int().min(-1).max(720);
45
+ const fetchUrlSchema = nonEmptyStringSchema.max(2_048);
46
+ const subpageTargetSchema = z.union([
47
+ nonEmptyStringSchema.max(100),
48
+ z.array(nonEmptyStringSchema.max(100)).min(1).max(100),
49
+ ]);
50
+ const SEARCH_CATEGORIES = [
51
+ "company",
52
+ "people",
53
+ "publication",
54
+ "news",
55
+ "personal site",
56
+ "financial report",
57
+ ];
58
+ const searchOptionsSchema = z
59
+ .object({
60
+ numResults: z.number().int().min(1).max(100).optional(),
61
+ includeDomains: domainFilterSchema.optional(),
62
+ excludeDomains: domainFilterSchema.optional(),
63
+ startPublishedDate: nonEmptyStringSchema.optional(),
64
+ endPublishedDate: nonEmptyStringSchema.optional(),
65
+ category: z.enum(SEARCH_CATEGORIES).optional(),
66
+ userLocation: z
67
+ .string()
68
+ .trim()
69
+ .regex(/^[a-z]{2}$/i, "must be a two-letter country code")
70
+ .transform((value) => value.toUpperCase())
71
+ .optional(),
72
+ maxAgeHours: maxAgeHoursSchema.optional(),
73
+ })
74
+ .strict()
75
+ .superRefine((options, context) => {
76
+ if ((options.category === "company" || options.category === "people") &&
77
+ (options.excludeDomains || options.startPublishedDate || options.endPublishedDate)) {
78
+ context.addIssue({
79
+ code: z.ZodIssueCode.custom,
80
+ message: `category '${options.category}' does not support excludeDomains or publication-date filters`,
81
+ });
82
+ }
83
+ });
84
+ const fetchUrlsSchema = z.union([
85
+ fetchUrlSchema.transform((url) => [url]),
86
+ z.array(fetchUrlSchema).min(1).max(100),
87
+ ]);
88
+ const fetchOptionsSchema = z
89
+ .object({
90
+ mode: z.enum(["highlights", "text"]).default("highlights"),
91
+ query: nonEmptyStringSchema.optional(),
92
+ maxCharacters: z.number().int().min(1).max(10_000).optional(),
93
+ maxAgeHours: maxAgeHoursSchema.optional(),
94
+ subpages: z.number().int().min(0).max(100).optional(),
95
+ subpageTarget: subpageTargetSchema.optional(),
96
+ links: z.number().int().min(0).max(1_000).optional(),
97
+ })
98
+ .strict()
99
+ .superRefine((options, context) => {
100
+ if (options.mode === "text" && options.query !== undefined) {
101
+ context.addIssue({
102
+ code: z.ZodIssueCode.custom,
103
+ path: ["query"],
104
+ message: "is only supported in highlights mode",
105
+ });
106
+ }
107
+ });
108
+ const documentation = readFileSync(new URL("../static/code_mode/web/documentation.md", import.meta.url), "utf8");
109
+ const sandboxRunnerUrl = new URL("../static/code_mode/web/sandbox_runner.mjs", import.meta.url);
110
+ async function readExaResponse(response) {
111
+ const contentLength = response.headers.get("content-length");
112
+ if (contentLength !== null && Number(contentLength) > EXA_MAX_RESPONSE_BYTES) {
113
+ await response.body?.cancel().catch(() => { });
114
+ throw new Error("Exa response exceeded the 16 MiB limit");
115
+ }
116
+ if (!response.body)
117
+ return "";
118
+ const reader = response.body.getReader();
119
+ const chunks = [];
120
+ let bytes = 0;
121
+ while (true) {
122
+ const { done, value } = await reader.read();
123
+ if (done)
124
+ break;
125
+ bytes += value.byteLength;
126
+ if (bytes > EXA_MAX_RESPONSE_BYTES) {
127
+ await reader.cancel().catch(() => { });
128
+ throw new Error("Exa response exceeded the 16 MiB limit");
129
+ }
130
+ chunks.push(Buffer.from(value));
131
+ }
132
+ return Buffer.concat(chunks, bytes).toString("utf8");
133
+ }
134
+ async function requestExa(apiKey, endpoint, body, signal) {
135
+ const response = await fetch(`${EXA_API_BASE_URL}${endpoint}`, {
136
+ method: "POST",
137
+ headers: {
138
+ "Content-Type": "application/json",
139
+ "User-Agent": "tau-web",
140
+ "x-api-key": apiKey,
141
+ },
142
+ body: JSON.stringify(body),
143
+ signal,
144
+ });
145
+ const responseText = await readExaResponse(response);
146
+ let payload;
147
+ if (responseText) {
148
+ try {
149
+ payload = JSON.parse(responseText);
150
+ }
151
+ catch {
152
+ if (response.ok) {
153
+ throw new Error("Exa returned a non-JSON response");
154
+ }
155
+ }
156
+ }
157
+ if (!response.ok) {
158
+ const error = typeof payload === "object" && payload !== null
159
+ ? payload
160
+ : undefined;
161
+ const detail = [error?.error, error?.message]
162
+ .filter((value) => typeof value === "string" && Boolean(value.trim()))
163
+ .join(". ");
164
+ throw new Error(detail || `Exa request failed with HTTP ${response.status}`);
165
+ }
166
+ if (payload === undefined) {
167
+ throw new Error("Exa returned an empty response");
168
+ }
169
+ return payload;
170
+ }
171
+ function createExaClient(apiKey) {
172
+ return {
173
+ search: (query, options, signal) => requestExa(apiKey, "/search", { query, ...options }, signal),
174
+ getContents: (urls, options, signal) => requestExa(apiKey, "/contents", { urls, ...options }, signal),
175
+ };
176
+ }
177
+ function parseWebArguments(raw) {
178
+ const rawCode = typeof raw === "object" && raw !== null && typeof raw.code === "string"
179
+ ? raw.code
180
+ : "";
181
+ const displayTarget = rawCode
182
+ .split(/\r?\n/)
183
+ .map((line) => line.trim())
184
+ .find(Boolean) ?? "(invalid code)";
185
+ const parsed = webArgsSchema.safeParse(raw);
186
+ if (!parsed.success) {
187
+ return {
188
+ ok: false,
189
+ error: formatZodError(parsed.error),
190
+ code: rawCode,
191
+ displayTarget,
192
+ };
193
+ }
194
+ return {
195
+ ok: true,
196
+ args: parsed.data,
197
+ code: parsed.data.code,
198
+ displayTarget,
199
+ };
200
+ }
201
+ function requireString(value, name) {
202
+ const parsed = nonEmptyStringSchema.safeParse(value);
203
+ if (!parsed.success) {
204
+ throw new Error(`${name} must be a non-empty string`);
205
+ }
206
+ return parsed.data;
207
+ }
208
+ function parseMethodOptions(value, schema, method) {
209
+ const parsed = schema.safeParse(value ?? {});
210
+ if (!parsed.success) {
211
+ throw new Error(`Invalid web.${method} options: ${formatZodError(parsed.error)}`);
212
+ }
213
+ return parsed.data;
214
+ }
215
+ function normalizeSearchArguments(args) {
216
+ if (!Array.isArray(args) || args.length < 1 || args.length > 2) {
217
+ throw new Error("web.search expects query and optional options");
218
+ }
219
+ const query = requireString(args[0], "web.search query");
220
+ const options = parseMethodOptions(args[1], searchOptionsSchema, "search");
221
+ return [
222
+ query,
223
+ {
224
+ type: "auto",
225
+ ...(options.numResults !== undefined ? { numResults: options.numResults } : {}),
226
+ ...(options.includeDomains ? { includeDomains: options.includeDomains } : {}),
227
+ ...(options.excludeDomains ? { excludeDomains: options.excludeDomains } : {}),
228
+ ...(options.startPublishedDate ? { startPublishedDate: options.startPublishedDate } : {}),
229
+ ...(options.endPublishedDate ? { endPublishedDate: options.endPublishedDate } : {}),
230
+ ...(options.category ? { category: options.category } : {}),
231
+ ...(options.userLocation ? { userLocation: options.userLocation } : {}),
232
+ contents: {
233
+ highlights: true,
234
+ ...(options.maxAgeHours !== undefined ? { maxAgeHours: options.maxAgeHours } : {}),
235
+ },
236
+ },
237
+ ];
238
+ }
239
+ function normalizeFetchArguments(args) {
240
+ if (!Array.isArray(args) || args.length < 1 || args.length > 2) {
241
+ throw new Error("web.fetch expects urls and optional options");
242
+ }
243
+ const parsedUrls = fetchUrlsSchema.safeParse(args[0]);
244
+ if (!parsedUrls.success) {
245
+ throw new Error(`Invalid web.fetch urls: ${formatZodError(parsedUrls.error)}`);
246
+ }
247
+ const options = parseMethodOptions(args[1], fetchOptionsSchema, "fetch");
248
+ const contentOptions = options.mode === "text"
249
+ ? {
250
+ text: options.maxCharacters === undefined ? true : { maxCharacters: options.maxCharacters },
251
+ }
252
+ : {
253
+ highlights: options.query === undefined && options.maxCharacters === undefined
254
+ ? true
255
+ : {
256
+ ...(options.query ? { query: options.query } : {}),
257
+ ...(options.maxCharacters !== undefined
258
+ ? { maxCharacters: options.maxCharacters }
259
+ : {}),
260
+ },
261
+ };
262
+ return [
263
+ parsedUrls.data,
264
+ {
265
+ ...contentOptions,
266
+ ...(options.maxAgeHours !== undefined ? { maxAgeHours: options.maxAgeHours } : {}),
267
+ ...(options.subpages !== undefined ? { subpages: options.subpages } : {}),
268
+ ...(options.subpageTarget ? { subpageTarget: options.subpageTarget } : {}),
269
+ ...(options.links !== undefined ? { extras: { links: options.links } } : {}),
270
+ },
271
+ ];
272
+ }
273
+ const exaResultSchema = z.lazy(() => z
274
+ .object({
275
+ title: z.string(),
276
+ url: z.string(),
277
+ publishedDate: z.string().optional(),
278
+ author: z.string().nullable().optional(),
279
+ text: z.string().optional(),
280
+ highlights: z.array(z.string()).optional(),
281
+ subpages: z.array(exaResultSchema).optional(),
282
+ extras: z
283
+ .object({ links: z.array(z.string()).optional() })
284
+ .strip()
285
+ .optional(),
286
+ })
287
+ .strip());
288
+ const exaStatusSchema = z
289
+ .object({
290
+ id: z.string(),
291
+ status: z.enum(["success", "error"]),
292
+ error: z
293
+ .object({
294
+ tag: z.string().optional(),
295
+ httpStatusCode: z.number().int().nullable().optional(),
296
+ })
297
+ .strip()
298
+ .nullable()
299
+ .optional(),
300
+ })
301
+ .strip();
302
+ const exaResponseSchema = z
303
+ .object({
304
+ results: z.array(exaResultSchema),
305
+ statuses: z.array(exaStatusSchema).default([]),
306
+ })
307
+ .strip();
308
+ function normalizeStatus(status) {
309
+ const normalized = {
310
+ id: status.id,
311
+ status: status.status,
312
+ };
313
+ if (status.error) {
314
+ normalized.error = {
315
+ ...(status.error.tag !== undefined ? { tag: status.error.tag } : {}),
316
+ ...(status.error.httpStatusCode !== undefined && status.error.httpStatusCode !== null
317
+ ? { httpStatusCode: status.error.httpStatusCode }
318
+ : {}),
319
+ };
320
+ }
321
+ return normalized;
322
+ }
323
+ function normalizeResult(result) {
324
+ return {
325
+ title: result.title,
326
+ url: result.url,
327
+ ...(result.publishedDate !== undefined ? { publishedDate: result.publishedDate } : {}),
328
+ ...(result.author !== undefined && result.author !== null ? { author: result.author } : {}),
329
+ ...(result.text !== undefined ? { text: result.text } : {}),
330
+ ...(result.highlights !== undefined ? { highlights: result.highlights } : {}),
331
+ ...(result.subpages !== undefined ? { subpages: result.subpages.map(normalizeResult) } : {}),
332
+ ...(result.extras?.links !== undefined ? { links: result.extras.links } : {}),
333
+ };
334
+ }
335
+ function normalizeResponse(value) {
336
+ const parsed = exaResponseSchema.safeParse(value);
337
+ if (!parsed.success) {
338
+ throw new Error(`Invalid Exa response: ${formatZodError(parsed.error)}`);
339
+ }
340
+ return {
341
+ results: parsed.data.results.map(normalizeResult),
342
+ statuses: parsed.data.statuses.map(normalizeStatus),
343
+ };
344
+ }
345
+ function serializeError(error) {
346
+ if (error instanceof Error) {
347
+ return { name: error.name, message: error.message };
348
+ }
349
+ return { message: String(error) };
350
+ }
351
+ async function handleWebRequest(request, exa, deps, backend, signal) {
352
+ let args;
353
+ try {
354
+ args = JSON.parse(request.argsJson);
355
+ }
356
+ catch {
357
+ throw new Error("invalid web bridge arguments");
358
+ }
359
+ switch (request.method) {
360
+ case "discover": {
361
+ if (!Array.isArray(args) || args.length !== 1) {
362
+ throw new Error("web.discover expects one URL");
363
+ }
364
+ return deps.discover(backend, requireString(args[0], "web.discover url"), signal);
365
+ }
366
+ case "search": {
367
+ if (!exa)
368
+ throw new Error("Missing Exa API key.");
369
+ const [query, options] = normalizeSearchArguments(args);
370
+ return normalizeResponse(await exa.search(query, options, signal));
371
+ }
372
+ case "fetch": {
373
+ if (!exa)
374
+ throw new Error("Missing Exa API key.");
375
+ const [urls, options] = normalizeFetchArguments(args);
376
+ return normalizeResponse(await exa.getContents(urls, options, signal));
377
+ }
378
+ default:
379
+ throw new Error(`unsupported web method '${request.method}'`);
380
+ }
381
+ }
382
+ function appendCapture(current, chunk) {
383
+ return truncateToBytesFromEnd(current + chunk, DEFAULT_COMMAND_CAPTURE_BYTES);
384
+ }
385
+ function executeWebProgram(code, exa, deps, backend, signal, timeoutMs) {
386
+ return new Promise((resolve, reject) => {
387
+ const worker = new Worker(sandboxRunnerUrl, {
388
+ workerData: { code, docs: documentation },
389
+ env: {
390
+ ...(process.env.LANG ? { LANG: process.env.LANG } : {}),
391
+ ...(process.env.LC_ALL ? { LC_ALL: process.env.LC_ALL } : {}),
392
+ ...(process.env.TZ ? { TZ: process.env.TZ } : {}),
393
+ },
394
+ resourceLimits: {
395
+ maxOldGenerationSizeMb: 128,
396
+ maxYoungGenerationSizeMb: 32,
397
+ stackSizeMb: 4,
398
+ },
399
+ stdout: true,
400
+ stderr: true,
401
+ });
402
+ let stdout = "";
403
+ let stderr = "";
404
+ let output = "";
405
+ let capturedBytes = 0;
406
+ let truncated = false;
407
+ let timedOut = false;
408
+ let aborted = false;
409
+ let settled = false;
410
+ let terminating = false;
411
+ let workerError;
412
+ const stdoutDecoder = new StringDecoder("utf8");
413
+ const stderrDecoder = new StringDecoder("utf8");
414
+ const requestController = new AbortController();
415
+ const requestSignal = AbortSignal.any([signal, requestController.signal]);
416
+ const inFlightRequests = new Set();
417
+ const appendOutput = (target, text) => {
418
+ if (!text)
419
+ return;
420
+ output = appendCapture(output, text);
421
+ if (target === "stdout") {
422
+ stdout = appendCapture(stdout, text);
423
+ }
424
+ else {
425
+ stderr = appendCapture(stderr, text);
426
+ }
427
+ };
428
+ const capture = (target, decoder, chunk) => {
429
+ capturedBytes += chunk.length;
430
+ if (capturedBytes > DEFAULT_COMMAND_CAPTURE_BYTES)
431
+ truncated = true;
432
+ appendOutput(target, decoder.write(chunk));
433
+ };
434
+ const settleRequests = async () => {
435
+ requestController.abort();
436
+ while (inFlightRequests.size > 0) {
437
+ await Promise.allSettled([...inFlightRequests]);
438
+ }
439
+ };
440
+ const terminate = (reason) => {
441
+ if (terminating)
442
+ return;
443
+ terminating = true;
444
+ if (reason === "abort")
445
+ aborted = true;
446
+ if (reason === "timeout")
447
+ timedOut = true;
448
+ requestController.abort();
449
+ void worker.terminate().catch(() => { });
450
+ };
451
+ const abortHandler = () => terminate("abort");
452
+ const timeout = setTimeout(() => terminate("timeout"), timeoutMs);
453
+ timeout.unref?.();
454
+ const cleanup = () => {
455
+ clearTimeout(timeout);
456
+ signal.removeEventListener("abort", abortHandler);
457
+ };
458
+ const postResponse = (message) => {
459
+ if (settled || terminating)
460
+ return;
461
+ try {
462
+ worker.postMessage(message);
463
+ }
464
+ catch { }
465
+ };
466
+ worker.stdout.on("data", (chunk) => capture("stdout", stdoutDecoder, chunk));
467
+ worker.stderr.on("data", (chunk) => capture("stderr", stderrDecoder, chunk));
468
+ worker.on("message", (message) => {
469
+ if (settled || terminating)
470
+ return;
471
+ const request = handleWebRequest(message, exa, deps, backend, requestSignal).then((value) => postResponse({ type: "response", id: message.id, ok: true, value }), (error) => postResponse({
472
+ type: "response",
473
+ id: message.id,
474
+ ok: false,
475
+ error: serializeError(error),
476
+ }));
477
+ inFlightRequests.add(request);
478
+ void request.then(() => inFlightRequests.delete(request));
479
+ });
480
+ worker.once("error", (error) => {
481
+ workerError = error instanceof Error ? error : new Error(String(error));
482
+ requestController.abort();
483
+ });
484
+ worker.once("exit", (workerExitCode) => {
485
+ if (settled)
486
+ return;
487
+ settled = true;
488
+ cleanup();
489
+ void (async () => {
490
+ await Promise.allSettled([finished(worker.stdout), finished(worker.stderr)]);
491
+ appendOutput("stdout", stdoutDecoder.end());
492
+ appendOutput("stderr", stderrDecoder.end());
493
+ await settleRequests();
494
+ if (workerError && !terminating) {
495
+ reject(workerError);
496
+ return;
497
+ }
498
+ resolve({
499
+ output,
500
+ stdout,
501
+ stderr,
502
+ exitCode: aborted || timedOut ? null : workerExitCode,
503
+ truncated,
504
+ timedOut,
505
+ aborted,
506
+ closeSignal: null,
507
+ });
508
+ })();
509
+ });
510
+ if (signal.aborted) {
511
+ abortHandler();
512
+ }
513
+ else {
514
+ signal.addEventListener("abort", abortHandler, { once: true });
515
+ }
516
+ });
517
+ }
518
+ const defaultDeps = {
519
+ createExaClient,
520
+ discover: discoverAgentContent,
521
+ };
522
+ export function createWebToolDefinition(backend, deps = defaultDeps) {
523
+ const timeoutMs = deps.timeoutMs ?? WEB_CODE_MODE_TIMEOUT_MS;
524
+ const implementation = {
525
+ schema: WEB_TOOL,
526
+ outputPolicy: { maxTokens: WEB_CODE_MODE_OUTPUT_TOKENS },
527
+ timeoutMs,
528
+ parseArguments: parseWebArguments,
529
+ execute: async ({ code, context, signal, backend: executionBackend }) => {
530
+ const apiKey = getExaApiKey(context.config);
531
+ const exa = apiKey ? deps.createExaClient(apiKey) : undefined;
532
+ return executeWebProgram(code, exa, deps, executionBackend, signal, timeoutMs);
533
+ },
534
+ };
535
+ return createCodeModeToolDefinition(backend, implementation);
536
+ }
537
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/core/tools/web.ts"],"names":[],"mappings":"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"}