@markusylisiurunen/tau 0.3.28 → 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 (128) hide show
  1. package/README.md +21 -19
  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/runtime.js +5 -1
  7. package/dist/core/config/runtime.js.map +1 -1
  8. package/dist/core/config/runtime_config_snapshot.js +5 -1
  9. package/dist/core/config/runtime_config_snapshot.js.map +1 -1
  10. package/dist/core/config/schema.js +3 -3
  11. package/dist/core/config/schema.js.map +1 -1
  12. package/dist/core/diff_review/snapshot.js +3 -3
  13. package/dist/core/diff_review/snapshot.js.map +1 -1
  14. package/dist/core/index.js +0 -4
  15. package/dist/core/index.js.map +1 -1
  16. package/dist/core/personas.js +2 -1
  17. package/dist/core/personas.js.map +1 -1
  18. package/dist/core/runtime/runtime_bootstrap.js +5 -1
  19. package/dist/core/runtime/runtime_bootstrap.js.map +1 -1
  20. package/dist/core/session/direct_bash.js +1 -0
  21. package/dist/core/session/direct_bash.js.map +1 -1
  22. package/dist/core/session/runner.js +2 -0
  23. package/dist/core/session/runner.js.map +1 -1
  24. package/dist/core/session/session_engine.js +48 -12
  25. package/dist/core/session/session_engine.js.map +1 -1
  26. package/dist/core/static/code_mode/web/documentation.md +236 -0
  27. package/dist/core/static/code_mode/web/sandbox_runner.mjs +112 -0
  28. package/dist/core/subagents/control_plane.js +0 -37
  29. package/dist/core/subagents/control_plane.js.map +1 -1
  30. package/dist/core/subagents/registry.js +2 -3
  31. package/dist/core/subagents/registry.js.map +1 -1
  32. package/dist/core/subagents/subagent_engine.js +6 -19
  33. package/dist/core/subagents/subagent_engine.js.map +1 -1
  34. package/dist/core/subagents/types.js +2 -3
  35. package/dist/core/subagents/types.js.map +1 -1
  36. package/dist/core/telegram/adapter.js +103 -21
  37. package/dist/core/telegram/adapter.js.map +1 -1
  38. package/dist/core/telegram/config.js +0 -8
  39. package/dist/core/telegram/config.js.map +1 -1
  40. package/dist/core/telegram/runtime.js +20 -2
  41. package/dist/core/telegram/runtime.js.map +1 -1
  42. package/dist/core/telegram/session_manager.js +116 -42
  43. package/dist/core/telegram/session_manager.js.map +1 -1
  44. package/dist/core/telegram/workspace.js +18 -76
  45. package/dist/core/telegram/workspace.js.map +1 -1
  46. package/dist/core/tools/bash.js +16 -8
  47. package/dist/core/tools/bash.js.map +1 -1
  48. package/dist/core/tools/catalog.js +7 -14
  49. package/dist/core/tools/catalog.js.map +1 -1
  50. package/dist/core/tools/code_mode.js +105 -0
  51. package/dist/core/tools/code_mode.js.map +1 -0
  52. package/dist/core/tools/execution_backend.js +81 -153
  53. package/dist/core/tools/execution_backend.js.map +1 -1
  54. package/dist/core/tools/registry.js +0 -3
  55. package/dist/core/tools/registry.js.map +1 -1
  56. package/dist/core/tools/spawn_agent.js +1 -1
  57. package/dist/core/tools/spawn_agent.js.map +1 -1
  58. package/dist/core/tools/terminate_agent.js +5 -11
  59. package/dist/core/tools/terminate_agent.js.map +1 -1
  60. package/dist/core/tools/tool_names.js +2 -12
  61. package/dist/core/tools/tool_names.js.map +1 -1
  62. package/dist/core/tools/wait_for_agents.js +3 -11
  63. package/dist/core/tools/wait_for_agents.js.map +1 -1
  64. package/dist/core/tools/web.js +537 -0
  65. package/dist/core/tools/web.js.map +1 -0
  66. package/dist/core/tools/web_discovery.js +201 -0
  67. package/dist/core/tools/web_discovery.js.map +1 -0
  68. package/dist/core/utils/compact.js +53 -11
  69. package/dist/core/utils/compact.js.map +1 -1
  70. package/dist/core/utils/project_files.js +14 -1
  71. package/dist/core/utils/project_files.js.map +1 -1
  72. package/dist/core/utils/subagent_utils.js +8 -8
  73. package/dist/core/utils/subagent_utils.js.map +1 -1
  74. package/dist/core/utils/user_metadata.js +14 -0
  75. package/dist/core/utils/user_metadata.js.map +1 -1
  76. package/dist/core/version.js +1 -1
  77. package/dist/execution/cloudflare_sandbox_execution_environment.js +155 -112
  78. package/dist/execution/cloudflare_sandbox_execution_environment.js.map +1 -1
  79. package/dist/execution/fly_sprite_execution_environment.js +109 -91
  80. package/dist/execution/fly_sprite_execution_environment.js.map +1 -1
  81. package/dist/execution/sandbox_tool_helpers.js +0 -25
  82. package/dist/execution/sandbox_tool_helpers.js.map +1 -1
  83. package/dist/execution/tool_backend_execution_environment.js +4 -1
  84. package/dist/execution/tool_backend_execution_environment.js.map +1 -1
  85. package/dist/host/hosted_ephemeral_agent_session.js +1 -1
  86. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
  87. package/dist/host/local_session_host.js +40 -7
  88. package/dist/host/local_session_host.js.map +1 -1
  89. package/dist/host/session_host.js +5 -0
  90. package/dist/host/session_host.js.map +1 -1
  91. package/dist/host/session_protocol_handler.js +55 -6
  92. package/dist/host/session_protocol_handler.js.map +1 -1
  93. package/dist/protocol/index.d.ts +2 -2
  94. package/dist/protocol/index.js +1 -1
  95. package/dist/protocol/index.js.map +1 -1
  96. package/dist/protocol/session_protocol.d.ts +22 -3
  97. package/dist/protocol/session_protocol.js +115 -30
  98. package/dist/protocol/session_protocol.js.map +1 -1
  99. package/dist/sdk/session.js +51 -2
  100. package/dist/sdk/session.js.map +1 -1
  101. package/dist/sdk/types.d.ts +5 -0
  102. package/dist/tui/session_chat_controller.js +5 -50
  103. package/dist/tui/session_chat_controller.js.map +1 -1
  104. package/dist/tui/session_tool_execution_backend.js +76 -98
  105. package/dist/tui/session_tool_execution_backend.js.map +1 -1
  106. package/dist/tui/ui/agent_activity_format.js +6 -15
  107. package/dist/tui/ui/agent_activity_format.js.map +1 -1
  108. package/dist/tui/ui/subagent_panel.js +0 -13
  109. package/dist/tui/ui/subagent_panel.js.map +1 -1
  110. package/dist/tui/ui/tool_ui_registry.js +83 -19
  111. package/dist/tui/ui/tool_ui_registry.js.map +1 -1
  112. package/package.json +3 -2
  113. package/dist/core/tools/emit_output.js +0 -58
  114. package/dist/core/tools/emit_output.js.map +0 -1
  115. package/dist/core/tools/grep.js +0 -250
  116. package/dist/core/tools/grep.js.map +0 -1
  117. package/dist/core/tools/list.js +0 -131
  118. package/dist/core/tools/list.js.map +0 -1
  119. package/dist/core/tools/read.js +0 -171
  120. package/dist/core/tools/read.js.map +0 -1
  121. package/dist/core/tools/web_fetch.js +0 -259
  122. package/dist/core/tools/web_fetch.js.map +0 -1
  123. package/dist/core/tools/web_search.js +0 -242
  124. package/dist/core/tools/web_search.js.map +0 -1
  125. package/dist/core/utils/parallel_api.js +0 -26
  126. package/dist/core/utils/parallel_api.js.map +0 -1
  127. package/dist/tui/ui/restricted_execution.js +0 -203
  128. package/dist/tui/ui/restricted_execution.js.map +0 -1
@@ -1,171 +0,0 @@
1
- import { Type } from "typebox";
2
- import { z } from "zod";
3
- import { createToolError, createToolResult } from "../utils/messages.js";
4
- import { buildHeadTailPreviewLines } from "../utils/tool_preview.js";
5
- import { TRUNCATION_MARKER, truncateForTokens, truncateToBytesFromStart, } from "../utils/truncate.js";
6
- import { formatZodError } from "../utils/zod.js";
7
- import { createToolDispatch } from "./registry.js";
8
- import { TOOL_NAME_READ } from "./tool_names.js";
9
- export const READ_TOOL_MAX_TOKENS = 8192;
10
- export const READ_MAX_CAPTURE_BYTES = 1024 * 1024;
11
- const READ_DESCRIPTION = ["Read a file from the project safely."].join(" ");
12
- const READ_PATH_DESCRIPTION = "File path to read (relative to the current working directory).";
13
- const READ_START_LINE_DESCRIPTION = "1-based inclusive start line.";
14
- const READ_END_LINE_DESCRIPTION = "1-based inclusive end line.";
15
- export const READ_TOOL = {
16
- name: TOOL_NAME_READ,
17
- description: READ_DESCRIPTION,
18
- parameters: Type.Object({
19
- path: Type.String({ description: READ_PATH_DESCRIPTION }),
20
- startLine: Type.Optional(Type.Integer({ description: READ_START_LINE_DESCRIPTION, minimum: 1 })),
21
- endLine: Type.Optional(Type.Integer({ description: READ_END_LINE_DESCRIPTION, minimum: 1 })),
22
- }, { additionalProperties: false }),
23
- };
24
- const readArgsSchema = z.object({
25
- path: z.string().trim().min(1),
26
- startLine: z.number().int().positive().optional(),
27
- endLine: z.number().int().positive().optional(),
28
- });
29
- function parseReadArgs(raw) {
30
- const parsed = readArgsSchema.safeParse(raw);
31
- if (!parsed.success) {
32
- return { ok: false, error: formatZodError(parsed.error) };
33
- }
34
- return { ok: true, data: parsed.data };
35
- }
36
- function getReadDisplayTarget(raw) {
37
- const parsedArgs = parseReadArgs(raw);
38
- return parsedArgs.ok ? parsedArgs.data.path : "(invalid arguments)";
39
- }
40
- function formatRange(startLine, endLine) {
41
- if (!endLine) {
42
- return `${startLine}-EOF`;
43
- }
44
- return `${startLine}-${endLine}`;
45
- }
46
- function formatReadToolResultText(args) {
47
- const parts = [];
48
- const body = args.content.trimEnd();
49
- if (body) {
50
- parts.push(body);
51
- }
52
- if (args.truncation.truncated || args.captureTruncated) {
53
- if (parts.length > 0) {
54
- parts.push("");
55
- }
56
- parts.push(`truncated for model: ${args.truncation.outputLines} of ${args.totalLines} lines. read smaller chunks with startLine/endLine to see more.`);
57
- }
58
- return parts.join("\n");
59
- }
60
- function buildReadUiText(args) {
61
- const { modelTruncation, startLine, endLine, fullText, totalLines, captureTruncated } = args;
62
- const totalLinesForSummary = modelTruncation.truncated || captureTruncated ? totalLines : modelTruncation.outputLines;
63
- const previewContentLines = buildHeadTailPreviewLines(modelTruncation.content, {
64
- headLines: 5,
65
- tailLines: 5,
66
- });
67
- const infoText = `${totalLinesForSummary} lines · ${formatRange(startLine, endLine)}`;
68
- const summaryLine = modelTruncation.truncated || captureTruncated ? `${TRUNCATION_MARKER} · ${infoText}` : infoText;
69
- const previewLines = previewContentLines.map((text) => ({ text }));
70
- const trimmedFullText = fullText.trimEnd();
71
- const fullLines = trimmedFullText
72
- ? trimmedFullText.split("\n").map((text) => ({ text }))
73
- : [];
74
- return {
75
- previewLines,
76
- statusLine: summaryLine,
77
- fullLines,
78
- };
79
- }
80
- export function createReadToolDefinition(backend) {
81
- return {
82
- schema: READ_TOOL,
83
- getDisplayTarget: (toolCall) => getReadDisplayTarget(toolCall.arguments),
84
- async dispatch(toolCall) {
85
- return createToolDispatch(async () => {
86
- const parsedArgs = parseReadArgs(toolCall.arguments);
87
- const path = parsedArgs.ok ? parsedArgs.data.path : "";
88
- const headerTarget = getReadDisplayTarget(toolCall.arguments);
89
- const blocked = (reason) => {
90
- const toolResult = createToolError(toolCall, reason);
91
- const uiEvent = {
92
- type: "read_blocked",
93
- toolCallId: toolCall.id,
94
- path: path || "(invalid path)",
95
- headerTarget,
96
- reason,
97
- };
98
- return { toolResult, uiEvent };
99
- };
100
- if (!parsedArgs.ok) {
101
- return blocked(`invalid arguments: ${parsedArgs.error}`);
102
- }
103
- const { startLine, endLine } = parsedArgs.data;
104
- if (startLine !== undefined && endLine !== undefined && endLine < startLine) {
105
- return blocked("endLine must be >= startLine.");
106
- }
107
- try {
108
- const { path: resolvedPath, content: rawContent } = await backend.readFile(path);
109
- const allLines = rawContent.split("\n");
110
- const totalLines = allLines.length;
111
- const start = startLine ?? 1;
112
- const endRequested = endLine ?? totalLines;
113
- const endEffective = Math.min(endRequested, totalLines);
114
- const endDisplay = endLine === undefined ? undefined : endEffective;
115
- if (start > totalLines) {
116
- return blocked(`startLine (${start}) exceeds total lines (${totalLines}).`);
117
- }
118
- const startIndex = Math.max(0, start - 1);
119
- const endIndex = Math.max(startIndex, endEffective);
120
- const selected = allLines.slice(startIndex, endIndex).join("\n");
121
- const selectedLines = Math.max(0, endIndex - startIndex);
122
- const selectedBytes = Buffer.byteLength(selected, "utf-8");
123
- const captureTruncated = selectedBytes > READ_MAX_CAPTURE_BYTES;
124
- const captured = captureTruncated
125
- ? truncateToBytesFromStart(selected, READ_MAX_CAPTURE_BYTES)
126
- : selected;
127
- const modelTruncation = truncateForTokens(captured, {
128
- maxTokens: READ_TOOL_MAX_TOKENS,
129
- strategy: "head",
130
- });
131
- const toolText = formatReadToolResultText({
132
- content: modelTruncation.content,
133
- truncation: modelTruncation,
134
- captureTruncated,
135
- totalLines: selectedLines,
136
- });
137
- const uiText = buildReadUiText({
138
- modelTruncation,
139
- startLine: start,
140
- endLine: endDisplay,
141
- fullText: toolText,
142
- totalLines: selectedLines,
143
- captureTruncated,
144
- });
145
- const toolResult = createToolResult(toolCall, toolText, false);
146
- const uiEvent = {
147
- type: "read_success",
148
- toolCallId: toolCall.id,
149
- path: resolvedPath,
150
- headerTarget: resolvedPath,
151
- startLine: start,
152
- endLine: endDisplay,
153
- content: modelTruncation.content,
154
- modelTruncation: {
155
- truncated: modelTruncation.truncated,
156
- totalLines: modelTruncation.totalLines,
157
- outputLines: modelTruncation.outputLines,
158
- },
159
- uiText,
160
- };
161
- return { toolResult, uiEvent };
162
- }
163
- catch (e) {
164
- const errorMessage = e instanceof Error ? e.message : String(e);
165
- return blocked(`read failed: ${errorMessage}`);
166
- }
167
- });
168
- },
169
- };
170
- }
171
- //# sourceMappingURL=read.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/core/tools/read.ts"],"names":[],"mappings":"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"}
@@ -1,259 +0,0 @@
1
- import { Type } from "typebox";
2
- import { z } from "zod";
3
- import { getParallelApiKey } from "../config/index.js";
4
- import { createToolError, createToolResult } from "../utils/messages.js";
5
- import { extractParallelErrorMessage, PARALLEL_API_BASE_URL, PARALLEL_BETA_HEADER, } from "../utils/parallel_api.js";
6
- import { TRUNCATION_MARKER, truncateForTokens } from "../utils/truncate.js";
7
- import { formatZodError } from "../utils/zod.js";
8
- import { createToolDispatch } from "./registry.js";
9
- import { TOOL_NAME_WEB_FETCH } from "./tool_names.js";
10
- const WEB_FETCH_DESCRIPTION = [
11
- "Fetch and extract relevant content from a URL.",
12
- "When you are interested in only a specific part, use excerpts=true and fullContent=false.",
13
- "When you don't have a specific question or otherwise need the entire content of the page, use fullContent=true.",
14
- "You can provide an objective and/or searchQueries to focus the extraction on specific topics or keywords.",
15
- "Be mindful of the potential size of the content being fetched, especially when using fullContent=true.",
16
- "You may use maxCharsPerResult to limit the size of the extracted content if needed.",
17
- ].join(" ");
18
- const WEB_FETCH_URL_DESCRIPTION = "URL to fetch.";
19
- const WEB_FETCH_OBJECTIVE_DESCRIPTION = "If provided, focuses extracted content on the specified search objective.";
20
- const WEB_FETCH_SEARCH_QUERIES_DESCRIPTION = "If provided, focuses extracted content on the specified keyword search queries.";
21
- const WEB_FETCH_EXCERPTS_DESCRIPTION = "Include excerpts from URL relevant to the search objective and queries.";
22
- const WEB_FETCH_FULL_CONTENT_DESCRIPTION = "Include full content from URL. Can be large.";
23
- const WEB_FETCH_MAX_CHARS_PER_RESULT_DESCRIPTION = "Max number of characters per extracted excerpt.";
24
- export const WEB_FETCH_TOOL = {
25
- name: TOOL_NAME_WEB_FETCH,
26
- description: WEB_FETCH_DESCRIPTION,
27
- parameters: Type.Object({
28
- url: Type.String({
29
- description: WEB_FETCH_URL_DESCRIPTION,
30
- }),
31
- objective: Type.Optional(Type.String({
32
- description: WEB_FETCH_OBJECTIVE_DESCRIPTION,
33
- })),
34
- searchQueries: Type.Optional(Type.Array(Type.String(), {
35
- description: WEB_FETCH_SEARCH_QUERIES_DESCRIPTION,
36
- })),
37
- excerpts: Type.Optional(Type.Boolean({
38
- description: WEB_FETCH_EXCERPTS_DESCRIPTION,
39
- })),
40
- fullContent: Type.Optional(Type.Boolean({
41
- description: WEB_FETCH_FULL_CONTENT_DESCRIPTION,
42
- })),
43
- maxCharsPerResult: Type.Optional(Type.Integer({
44
- description: WEB_FETCH_MAX_CHARS_PER_RESULT_DESCRIPTION,
45
- minimum: 200,
46
- maximum: 100_000,
47
- })),
48
- }, { additionalProperties: false }),
49
- };
50
- const webFetchArgsSchema = z.object({
51
- url: z.string().trim().min(1),
52
- objective: z.string().trim().min(1).optional(),
53
- searchQueries: z.array(z.string().trim().min(1)).min(1).optional(),
54
- excerpts: z.boolean().optional(),
55
- fullContent: z.boolean().optional(),
56
- maxCharsPerResult: z.number().int().min(200).max(100_000).optional(),
57
- });
58
- const extractResultSchema = z
59
- .object({
60
- url: z.string().min(1),
61
- title: z.string().nullable().optional(),
62
- publish_date: z.string().nullable().optional(),
63
- excerpts: z.array(z.string()).nullable().optional(),
64
- full_content: z.string().nullable().optional(),
65
- })
66
- .passthrough();
67
- const extractErrorSchema = z
68
- .object({
69
- url: z.string().min(1),
70
- error_type: z.string().min(1),
71
- http_status_code: z.number().int().nullable(),
72
- content: z.string().nullable(),
73
- })
74
- .passthrough();
75
- const extractResponseSchema = z
76
- .object({
77
- extract_id: z.string().min(1),
78
- results: z.array(extractResultSchema),
79
- errors: z.array(extractErrorSchema),
80
- warnings: z.unknown().optional(),
81
- usage: z.unknown().optional(),
82
- })
83
- .passthrough();
84
- function parseArgs(raw) {
85
- const parsed = webFetchArgsSchema.safeParse(raw);
86
- if (!parsed.success) {
87
- return { ok: false, error: formatZodError(parsed.error) };
88
- }
89
- return { ok: true, data: parsed.data };
90
- }
91
- function getWebFetchDisplayTarget(raw) {
92
- const parsedArgs = parseArgs(raw);
93
- return parsedArgs.ok ? parsedArgs.data.url : "(invalid arguments)";
94
- }
95
- function estimateParallelExtractCostUsd(urlCount) {
96
- return 0.001 * urlCount;
97
- }
98
- function formatExtractResults(response) {
99
- const results = response.results;
100
- const errors = response.errors;
101
- if (results.length === 0 && errors.length === 0) {
102
- const content = "No extract results.";
103
- const bytes = Buffer.byteLength(content, "utf-8");
104
- return {
105
- content,
106
- truncated: false,
107
- truncatedBy: null,
108
- totalLines: 1,
109
- totalBytes: bytes,
110
- outputLines: 1,
111
- outputBytes: bytes,
112
- maxLines: 1,
113
- maxTokens: 16384,
114
- };
115
- }
116
- const lines = [];
117
- for (const r of results) {
118
- const title = r.title?.trim() || "(No title)";
119
- const date = r.publish_date ? ` (${r.publish_date})` : "";
120
- lines.push(`${title}${date}\n${r.url}`);
121
- const excerpts = (r.excerpts ?? []).map((e) => e.trim()).filter(Boolean);
122
- if (excerpts.length > 0) {
123
- lines.push("");
124
- lines.push(...excerpts);
125
- }
126
- const full = r.full_content?.trim();
127
- if (full) {
128
- if (excerpts.length > 0)
129
- lines.push("\n(Full content)\n");
130
- lines.push(full);
131
- }
132
- lines.push("\n---\n");
133
- }
134
- if (errors.length > 0) {
135
- lines.push("Errors:\n");
136
- for (const err of errors) {
137
- const status = typeof err.http_status_code === "number" ? ` (HTTP ${err.http_status_code})` : "";
138
- lines.push(`- ${err.url}: ${err.error_type}${status}`);
139
- const content = err.content?.trim();
140
- if (content) {
141
- lines.push(` ${content}`);
142
- }
143
- }
144
- lines.push("\n---\n");
145
- }
146
- const formatted = lines.join("\n");
147
- return truncateForTokens(formatted, {
148
- maxTokens: 16384,
149
- strategy: "middle",
150
- });
151
- }
152
- export function createWebFetchToolDefinition(config) {
153
- return {
154
- schema: WEB_FETCH_TOOL,
155
- getDisplayTarget: (toolCall) => getWebFetchDisplayTarget(toolCall.arguments),
156
- async dispatch(toolCall, signal) {
157
- const parsedArgs = parseArgs(toolCall.arguments);
158
- const url = parsedArgs.ok ? parsedArgs.data.url : "";
159
- const headerTarget = getWebFetchDisplayTarget(toolCall.arguments);
160
- const blocked = (reason) => {
161
- const toolResult = createToolError(toolCall, reason);
162
- const uiEvent = {
163
- type: "web_fetch_finished",
164
- toolCallId: toolCall.id,
165
- url: url || "(invalid url)",
166
- headerTarget,
167
- status: "error",
168
- message: reason,
169
- };
170
- return { toolResult, uiEvent };
171
- };
172
- if (!parsedArgs.ok) {
173
- return createToolDispatch(() => blocked(`Invalid arguments: ${parsedArgs.error}`));
174
- }
175
- const args = parsedArgs.data;
176
- const apiKey = getParallelApiKey(config);
177
- if (!apiKey) {
178
- return createToolDispatch(() => blocked("Missing Parallel API key."));
179
- }
180
- return {
181
- startedUiEvent: {
182
- type: "web_fetch_started",
183
- toolCallId: toolCall.id,
184
- url: args.url,
185
- headerTarget,
186
- },
187
- run: (async () => {
188
- try {
189
- const body = {
190
- urls: [args.url],
191
- ...(args.objective && { objective: args.objective }),
192
- ...(args.searchQueries && { search_queries: args.searchQueries }),
193
- ...(args.fullContent !== undefined && { full_content: args.fullContent }),
194
- ...(typeof args.maxCharsPerResult === "number"
195
- ? { excerpts: { max_chars_per_result: args.maxCharsPerResult } }
196
- : args.excerpts !== undefined
197
- ? { excerpts: args.excerpts }
198
- : {}),
199
- };
200
- const res = await fetch(`${PARALLEL_API_BASE_URL}/v1beta/extract`, {
201
- method: "POST",
202
- headers: {
203
- "content-type": "application/json",
204
- accept: "application/json",
205
- "parallel-beta": PARALLEL_BETA_HEADER,
206
- "x-api-key": apiKey,
207
- },
208
- body: JSON.stringify(body),
209
- signal,
210
- });
211
- let parsed;
212
- try {
213
- parsed = await res.json();
214
- }
215
- catch {
216
- parsed = undefined;
217
- }
218
- if (!res.ok) {
219
- const details = extractParallelErrorMessage(parsed) || res.statusText || "Request failed.";
220
- throw new Error(`Parallel API error (${res.status}): ${details}`);
221
- }
222
- const responseParsed = extractResponseSchema.safeParse(parsed);
223
- if (!responseParsed.success) {
224
- throw new Error(`Parallel API response parse error: ${formatZodError(responseParsed.error)}`);
225
- }
226
- const response = responseParsed.data;
227
- const resultText = formatExtractResults(response);
228
- const toolResult = createToolResult(toolCall, resultText.content, false);
229
- const uiEvent = {
230
- type: "web_fetch_finished",
231
- toolCallId: toolCall.id,
232
- url: args.url,
233
- headerTarget,
234
- status: "success",
235
- costUsd: estimateParallelExtractCostUsd(1),
236
- message: resultText.truncated ? TRUNCATION_MARKER : undefined,
237
- };
238
- return { toolResult, uiEvent };
239
- }
240
- catch (e) {
241
- const msg = e instanceof Error ? e.message : String(e);
242
- const reason = msg.trim() ? msg : "Request failed.";
243
- const toolResult = createToolError(toolCall, reason);
244
- const uiEvent = {
245
- type: "web_fetch_finished",
246
- toolCallId: toolCall.id,
247
- url: args.url,
248
- headerTarget,
249
- status: "error",
250
- message: reason,
251
- };
252
- return { toolResult, uiEvent };
253
- }
254
- })(),
255
- };
256
- },
257
- };
258
- }
259
- //# sourceMappingURL=web_fetch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"web_fetch.js","sourceRoot":"","sources":["../../../src/core/tools/web_fetch.ts"],"names":[],"mappings":"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"}