@markusylisiurunen/tau 0.1.10 → 0.1.11

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 +40 -20
  2. package/dist/app.js +83 -10
  3. package/dist/app.js.map +1 -1
  4. package/dist/bash_commands.js +37 -16
  5. package/dist/bash_commands.js.map +1 -1
  6. package/dist/cli.js +6 -6
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands.js +29 -1
  9. package/dist/commands.js.map +1 -1
  10. package/dist/config.js +27 -15
  11. package/dist/config.js.map +1 -1
  12. package/dist/content_loader.js +201 -48
  13. package/dist/content_loader.js.map +1 -1
  14. package/dist/main.js +4 -0
  15. package/dist/main.js.map +1 -1
  16. package/dist/personas.js +27 -7
  17. package/dist/personas.js.map +1 -1
  18. package/dist/session/session_engine.js +1 -1
  19. package/dist/session/session_engine.js.map +1 -1
  20. package/dist/subagents/registry.js +4 -1
  21. package/dist/subagents/registry.js.map +1 -1
  22. package/dist/subagents/subagent_engine.js +20 -2
  23. package/dist/subagents/subagent_engine.js.map +1 -1
  24. package/dist/subagents/web.js +58 -0
  25. package/dist/subagents/web.js.map +1 -0
  26. package/dist/tools/bash.js +9 -4
  27. package/dist/tools/bash.js.map +1 -1
  28. package/dist/tools/edit.js +8 -5
  29. package/dist/tools/edit.js.map +1 -1
  30. package/dist/tools/registry.js.map +1 -1
  31. package/dist/tools/task.js +8 -5
  32. package/dist/tools/task.js.map +1 -1
  33. package/dist/tools/web_fetch.js +268 -0
  34. package/dist/tools/web_fetch.js.map +1 -0
  35. package/dist/tools/web_search.js +256 -0
  36. package/dist/tools/web_search.js.map +1 -0
  37. package/dist/tools/write.js +7 -4
  38. package/dist/tools/write.js.map +1 -1
  39. package/dist/types.js +5 -1
  40. package/dist/types.js.map +1 -1
  41. package/dist/ui/custom_editor.js +13 -0
  42. package/dist/ui/custom_editor.js.map +1 -1
  43. package/dist/ui/slash_autocomplete.js +6 -3
  44. package/dist/ui/slash_autocomplete.js.map +1 -1
  45. package/dist/ui/task_execution.js +15 -0
  46. package/dist/ui/task_execution.js.map +1 -1
  47. package/dist/utils/context.js +15 -0
  48. package/dist/utils/context.js.map +1 -1
  49. package/dist/utils/project_files.js +124 -1
  50. package/dist/utils/project_files.js.map +1 -1
  51. package/dist/utils/zod.js +9 -0
  52. package/dist/utils/zod.js.map +1 -0
  53. package/package.json +5 -4
@@ -0,0 +1,268 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { z } from "zod";
3
+ import { getParallelApiKey } from "../config.js";
4
+ import { createToolError, createToolResult } from "../utils/messages.js";
5
+ import { truncateMiddleForModel } from "../utils/truncate.js";
6
+ import { formatZodError } from "../utils/zod.js";
7
+ const PARALLEL_API_BASE_URL = "https://api.parallel.ai";
8
+ const PARALLEL_BETA_HEADER = "search-extract-2025-10-10";
9
+ const WEB_FETCH_DESCRIPTION = [
10
+ "Fetch and extract relevant content from a URL.",
11
+ "When you are interested in only a specific part, use excerpts=true and fullContent=false.",
12
+ "When you don't have a specific question or otherwise need the entire content of the page, use fullContent=true.",
13
+ "You can provide an objective and/or searchQueries to focus the extraction on specific topics or keywords.",
14
+ "Be mindful of the potential size of the content being fetched, especially when using fullContent=true.",
15
+ "You may use maxCharsPerResult to limit the size of the extracted content if needed.",
16
+ ].join(" ");
17
+ export const WEB_FETCH_TOOL = {
18
+ name: "web_fetch",
19
+ description: WEB_FETCH_DESCRIPTION,
20
+ parameters: Type.Object({
21
+ url: Type.String({
22
+ description: "URL to fetch.",
23
+ }),
24
+ objective: Type.Optional(Type.String({
25
+ description: "If provided, focuses extracted content on the specified search objective.",
26
+ })),
27
+ searchQueries: Type.Optional(Type.Array(Type.String(), {
28
+ description: "If provided, focuses extracted content on the specified keyword search queries.",
29
+ })),
30
+ excerpts: Type.Optional(Type.Boolean({
31
+ description: "Include excerpts from URL relevant to the search objective and queries.",
32
+ })),
33
+ fullContent: Type.Optional(Type.Boolean({
34
+ description: "Include full content from URL. Can be large.",
35
+ })),
36
+ maxCharsPerResult: Type.Optional(Type.Integer({
37
+ minimum: 200,
38
+ maximum: 100_000,
39
+ })),
40
+ }, { additionalProperties: false }),
41
+ };
42
+ const webFetchArgsSchema = z.object({
43
+ url: z.string().trim().catch(""),
44
+ objective: z.string().trim().optional().catch(undefined),
45
+ searchQueries: z
46
+ .array(z.string().trim())
47
+ .transform((queries) => queries.filter(Boolean))
48
+ .optional()
49
+ .catch(undefined),
50
+ excerpts: z.boolean().optional().catch(undefined),
51
+ fullContent: z.boolean().optional().catch(undefined),
52
+ maxCharsPerResult: z.number().int().min(200).max(100_000).optional().catch(undefined),
53
+ });
54
+ const parallelApiErrorSchema = z.union([
55
+ z.object({
56
+ type: z.literal("error"),
57
+ error: z.object({
58
+ message: z.string(),
59
+ }),
60
+ }),
61
+ z.object({
62
+ message: z.string(),
63
+ }),
64
+ ]);
65
+ const extractResultSchema = z
66
+ .object({
67
+ url: z.string().catch(""),
68
+ title: z.string().nullable().optional().catch(undefined),
69
+ publish_date: z.string().nullable().optional().catch(undefined),
70
+ excerpts: z.array(z.string()).nullable().optional().catch(undefined),
71
+ full_content: z.string().nullable().optional().catch(undefined),
72
+ })
73
+ .passthrough();
74
+ const extractErrorSchema = z
75
+ .object({
76
+ url: z.string().catch(""),
77
+ error_type: z.string().catch("unknown error"),
78
+ http_status_code: z.number().int().nullable().catch(null),
79
+ content: z.string().nullable().catch(null),
80
+ })
81
+ .passthrough();
82
+ const extractResponseSchema = z
83
+ .object({
84
+ extract_id: z.string().catch(""),
85
+ results: z.array(extractResultSchema).catch([]),
86
+ errors: z.array(extractErrorSchema).catch([]),
87
+ warnings: z.unknown().optional(),
88
+ usage: z.unknown().optional(),
89
+ })
90
+ .passthrough();
91
+ function parseArgs(raw) {
92
+ const parsed = webFetchArgsSchema.safeParse(raw);
93
+ if (!parsed.success) {
94
+ return { url: "" };
95
+ }
96
+ const args = parsed.data;
97
+ const objective = args.objective?.trim() || undefined;
98
+ const searchQueries = args.searchQueries?.map((q) => q.trim()).filter(Boolean);
99
+ return {
100
+ url: args.url,
101
+ ...(objective && { objective }),
102
+ ...(searchQueries && searchQueries.length > 0 && { searchQueries }),
103
+ ...(args.excerpts !== undefined && { excerpts: args.excerpts }),
104
+ ...(args.fullContent !== undefined && { fullContent: args.fullContent }),
105
+ ...(args.maxCharsPerResult !== undefined && { maxCharsPerResult: args.maxCharsPerResult }),
106
+ };
107
+ }
108
+ function extractParallelErrorMessage(raw) {
109
+ const parsed = parallelApiErrorSchema.safeParse(raw);
110
+ if (!parsed.success)
111
+ return undefined;
112
+ const obj = parsed.data;
113
+ if ("type" in obj && obj.type === "error") {
114
+ const msg = obj.error.message.trim();
115
+ return msg ? msg : undefined;
116
+ }
117
+ if ("message" in obj) {
118
+ const msg = obj.message.trim();
119
+ return msg ? msg : undefined;
120
+ }
121
+ return undefined;
122
+ }
123
+ function estimateParallelExtractCostUsd(urlCount) {
124
+ return 0.001 * urlCount;
125
+ }
126
+ function formatExtractResults(response) {
127
+ const results = response.results;
128
+ const errors = response.errors;
129
+ if (results.length === 0 && errors.length === 0) {
130
+ return "No extract results.";
131
+ }
132
+ const lines = [];
133
+ for (const r of results) {
134
+ const title = r.title?.trim() || "(no title)";
135
+ const date = r.publish_date ? ` (${r.publish_date})` : "";
136
+ lines.push(`${title}${date}\n${r.url}`);
137
+ const excerpts = (r.excerpts ?? []).map((e) => e.trim()).filter(Boolean);
138
+ if (excerpts.length > 0) {
139
+ lines.push("");
140
+ lines.push(...excerpts);
141
+ }
142
+ const full = r.full_content?.trim();
143
+ if (full) {
144
+ if (excerpts.length > 0)
145
+ lines.push("\n(full content)\n");
146
+ lines.push(full);
147
+ }
148
+ lines.push("\n---\n");
149
+ }
150
+ if (errors.length > 0) {
151
+ lines.push("Errors:\n");
152
+ for (const err of errors) {
153
+ const status = typeof err.http_status_code === "number" ? ` (HTTP ${err.http_status_code})` : "";
154
+ lines.push(`- ${err.url}: ${err.error_type}${status}`);
155
+ const content = err.content?.trim();
156
+ if (content) {
157
+ lines.push(` ${content}`);
158
+ }
159
+ }
160
+ lines.push("\n---\n");
161
+ }
162
+ const formatted = lines.join("\n");
163
+ return truncateMiddleForModel(formatted, {
164
+ maxLines: 4000,
165
+ maxBytes: 250_000,
166
+ bytesPerTokenApprox: 4,
167
+ }).content;
168
+ }
169
+ export function createWebFetchToolDefinition(config) {
170
+ return {
171
+ schema: WEB_FETCH_TOOL,
172
+ async dispatch(toolCall, riskLevel, signal) {
173
+ const args = parseArgs(toolCall.arguments);
174
+ const blocked = (reason) => {
175
+ const toolResult = createToolError(toolCall, reason);
176
+ const uiEvent = {
177
+ type: "web_fetch_finished",
178
+ toolCallId: toolCall.id,
179
+ url: args.url || "(missing url)",
180
+ status: "error",
181
+ };
182
+ return { kind: "single", toolResult, uiEvent };
183
+ };
184
+ if (riskLevel === "none") {
185
+ return blocked("web_fetch blocked due to risk level being set to 'none'. Ask the user to enable it with /risk:read-only or /risk:read-write.");
186
+ }
187
+ if (!args.url) {
188
+ return blocked("web_fetch error: missing required parameter 'url'.");
189
+ }
190
+ const apiKey = getParallelApiKey(config);
191
+ if (!apiKey) {
192
+ return blocked("web_fetch error: missing Parallel API key.");
193
+ }
194
+ return {
195
+ kind: "phased",
196
+ startedUiEvent: {
197
+ type: "web_fetch_started",
198
+ toolCallId: toolCall.id,
199
+ url: args.url,
200
+ },
201
+ run: (async () => {
202
+ try {
203
+ const body = {
204
+ urls: [args.url],
205
+ ...(args.objective && { objective: args.objective }),
206
+ ...(args.searchQueries && { search_queries: args.searchQueries }),
207
+ ...(args.fullContent !== undefined && { full_content: args.fullContent }),
208
+ ...(typeof args.maxCharsPerResult === "number"
209
+ ? { excerpts: { max_chars_per_result: args.maxCharsPerResult } }
210
+ : args.excerpts !== undefined
211
+ ? { excerpts: args.excerpts }
212
+ : {}),
213
+ };
214
+ const res = await fetch(`${PARALLEL_API_BASE_URL}/v1beta/extract`, {
215
+ method: "POST",
216
+ headers: {
217
+ "content-type": "application/json",
218
+ accept: "application/json",
219
+ "parallel-beta": PARALLEL_BETA_HEADER,
220
+ "x-api-key": apiKey,
221
+ },
222
+ body: JSON.stringify(body),
223
+ signal,
224
+ });
225
+ let parsed;
226
+ try {
227
+ parsed = await res.json();
228
+ }
229
+ catch {
230
+ parsed = undefined;
231
+ }
232
+ if (!res.ok) {
233
+ const details = extractParallelErrorMessage(parsed) || res.statusText || "request failed";
234
+ throw new Error(`Parallel API error (${res.status}): ${details}`);
235
+ }
236
+ const responseParsed = extractResponseSchema.safeParse(parsed);
237
+ if (!responseParsed.success) {
238
+ throw new Error(`Parallel API response parse error: ${formatZodError(responseParsed.error)}`);
239
+ }
240
+ const response = responseParsed.data;
241
+ const text = formatExtractResults(response);
242
+ const toolResult = createToolResult(toolCall, text, false);
243
+ const uiEvent = {
244
+ type: "web_fetch_finished",
245
+ toolCallId: toolCall.id,
246
+ url: args.url,
247
+ status: "success",
248
+ costUsd: estimateParallelExtractCostUsd(1),
249
+ };
250
+ return { kind: "single", toolResult, uiEvent };
251
+ }
252
+ catch (e) {
253
+ const msg = `web_fetch failed: ${e instanceof Error ? e.message : String(e)}`;
254
+ const toolResult = createToolError(toolCall, msg);
255
+ const uiEvent = {
256
+ type: "web_fetch_finished",
257
+ toolCallId: toolCall.id,
258
+ url: args.url,
259
+ status: "error",
260
+ };
261
+ return { kind: "single", toolResult, uiEvent };
262
+ }
263
+ })(),
264
+ };
265
+ },
266
+ };
267
+ }
268
+ //# sourceMappingURL=web_fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web_fetch.js","sourceRoot":"","sources":["../../src/tools/web_fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,256 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { z } from "zod";
3
+ import { getParallelApiKey } from "../config.js";
4
+ import { createToolError, createToolResult } from "../utils/messages.js";
5
+ import { truncateMiddleForModel } from "../utils/truncate.js";
6
+ import { formatZodError } from "../utils/zod.js";
7
+ const PARALLEL_API_BASE_URL = "https://api.parallel.ai";
8
+ const PARALLEL_BETA_HEADER = "search-extract-2025-10-10";
9
+ const WEB_SEARCH_DESCRIPTION = [
10
+ "Search the web for relevant sources.",
11
+ "Use this to discover good candidate URLs before fetching content with web_fetch.",
12
+ "Provide a clear objective describing what you are trying to find (preferred sources, recency, and constraints help).",
13
+ "Optionally provide searchQueries for keyword-style guidance.",
14
+ "Use includeDomains/excludeDomains to enforce source policies when needed.",
15
+ "You may adjust maxResults and maxCharsPerResult to balance coverage vs token usage.",
16
+ ].join(" ");
17
+ export const WEB_SEARCH_TOOL = {
18
+ name: "web_search",
19
+ description: WEB_SEARCH_DESCRIPTION,
20
+ parameters: Type.Object({
21
+ objective: Type.String({
22
+ description: "What you are trying to find out.",
23
+ }),
24
+ searchQueries: Type.Optional(Type.Array(Type.String(), {
25
+ description: "Optional keyword-style queries to guide the search.",
26
+ })),
27
+ maxResults: Type.Optional(Type.Integer({
28
+ minimum: 1,
29
+ maximum: 50,
30
+ })),
31
+ maxCharsPerResult: Type.Optional(Type.Integer({
32
+ minimum: 200,
33
+ maximum: 50_000,
34
+ })),
35
+ includeDomains: Type.Optional(Type.Array(Type.String())),
36
+ excludeDomains: Type.Optional(Type.Array(Type.String())),
37
+ }, { additionalProperties: false }),
38
+ };
39
+ const webSearchArgsSchema = z.object({
40
+ objective: z.string().trim().catch(""),
41
+ searchQueries: z
42
+ .array(z.string().trim())
43
+ .transform((queries) => queries.filter(Boolean))
44
+ .optional()
45
+ .catch(undefined),
46
+ maxResults: z.number().int().min(1).max(50).optional().catch(undefined),
47
+ maxCharsPerResult: z.number().int().min(200).max(50_000).optional().catch(undefined),
48
+ includeDomains: z
49
+ .array(z.string().trim())
50
+ .transform((domains) => domains.filter(Boolean))
51
+ .optional()
52
+ .catch(undefined),
53
+ excludeDomains: z
54
+ .array(z.string().trim())
55
+ .transform((domains) => domains.filter(Boolean))
56
+ .optional()
57
+ .catch(undefined),
58
+ });
59
+ const parallelApiErrorSchema = z.union([
60
+ z.object({
61
+ type: z.literal("error"),
62
+ error: z.object({
63
+ message: z.string(),
64
+ }),
65
+ }),
66
+ z.object({
67
+ message: z.string(),
68
+ }),
69
+ ]);
70
+ const searchResultSchema = z
71
+ .object({
72
+ url: z.string().catch(""),
73
+ title: z.string().nullable().optional().catch(undefined),
74
+ publish_date: z.string().nullable().optional().catch(undefined),
75
+ excerpts: z.array(z.string()).nullable().optional().catch(undefined),
76
+ })
77
+ .passthrough();
78
+ const parallelSearchResponseSchema = z
79
+ .object({
80
+ results: z.array(searchResultSchema).catch([]),
81
+ warnings: z.unknown().optional(),
82
+ usage: z.unknown().optional(),
83
+ })
84
+ .passthrough();
85
+ function parseArgs(raw) {
86
+ const parsed = webSearchArgsSchema.safeParse(raw);
87
+ if (!parsed.success) {
88
+ return { objective: "" };
89
+ }
90
+ const args = parsed.data;
91
+ const objective = args.objective.trim();
92
+ const searchQueries = args.searchQueries?.map((q) => q.trim()).filter(Boolean);
93
+ const includeDomains = args.includeDomains?.map((d) => d.trim()).filter(Boolean);
94
+ const excludeDomains = args.excludeDomains?.map((d) => d.trim()).filter(Boolean);
95
+ return {
96
+ objective,
97
+ ...(searchQueries && searchQueries.length > 0 && { searchQueries }),
98
+ ...(args.maxResults !== undefined && { maxResults: args.maxResults }),
99
+ ...(args.maxCharsPerResult !== undefined && { maxCharsPerResult: args.maxCharsPerResult }),
100
+ ...(includeDomains && includeDomains.length > 0 && { includeDomains }),
101
+ ...(excludeDomains && excludeDomains.length > 0 && { excludeDomains }),
102
+ };
103
+ }
104
+ function extractParallelErrorMessage(raw) {
105
+ const parsed = parallelApiErrorSchema.safeParse(raw);
106
+ if (!parsed.success)
107
+ return undefined;
108
+ const obj = parsed.data;
109
+ if ("type" in obj && obj.type === "error") {
110
+ const msg = obj.error.message.trim();
111
+ return msg ? msg : undefined;
112
+ }
113
+ if ("message" in obj) {
114
+ const msg = obj.message.trim();
115
+ return msg ? msg : undefined;
116
+ }
117
+ return undefined;
118
+ }
119
+ function estimateParallelSearchCostUsd(maxResultsRequested, resultsReturned) {
120
+ const resultsCount = typeof resultsReturned === "number" && Number.isFinite(resultsReturned)
121
+ ? resultsReturned
122
+ : typeof maxResultsRequested === "number" && Number.isFinite(maxResultsRequested)
123
+ ? maxResultsRequested
124
+ : 10;
125
+ const additionalResults = Math.max(0, resultsCount - 10);
126
+ return 0.005 + 0.001 * additionalResults;
127
+ }
128
+ function formatSearchResults(response) {
129
+ const results = response.results;
130
+ if (results.length === 0) {
131
+ return "No results.";
132
+ }
133
+ const lines = [];
134
+ for (const r of results) {
135
+ const title = r.title?.trim() || "(no title)";
136
+ const date = r.publish_date ? ` (${r.publish_date})` : "";
137
+ lines.push(`- ${title}${date}\n ${r.url}`);
138
+ const excerpts = (r.excerpts ?? []).map((e) => e.trim()).filter(Boolean);
139
+ if (excerpts.length > 0) {
140
+ for (const excerpt of excerpts.slice(0, 3)) {
141
+ const excerptOneLine = excerpt.replace(/\s+/g, " ").trim();
142
+ lines.push(` - ${excerptOneLine}`);
143
+ }
144
+ }
145
+ }
146
+ const formatted = lines.join("\n");
147
+ return truncateMiddleForModel(formatted, {
148
+ maxLines: 4000,
149
+ maxBytes: 200_000,
150
+ bytesPerTokenApprox: 4,
151
+ }).content;
152
+ }
153
+ export function createWebSearchToolDefinition(config) {
154
+ return {
155
+ schema: WEB_SEARCH_TOOL,
156
+ async dispatch(toolCall, riskLevel, signal) {
157
+ const args = parseArgs(toolCall.arguments);
158
+ const blocked = (reason) => {
159
+ const toolResult = createToolError(toolCall, reason);
160
+ const uiEvent = {
161
+ type: "web_search_finished",
162
+ toolCallId: toolCall.id,
163
+ objective: args.objective || "(missing objective)",
164
+ status: "error",
165
+ };
166
+ return { kind: "single", toolResult, uiEvent };
167
+ };
168
+ if (riskLevel === "none") {
169
+ return blocked("web_search blocked due to risk level being set to 'none'. Ask the user to enable it with /risk:read-only or /risk:read-write.");
170
+ }
171
+ if (!args.objective) {
172
+ return blocked("web_search error: missing required parameter 'objective'.");
173
+ }
174
+ const apiKey = getParallelApiKey(config);
175
+ if (!apiKey) {
176
+ return blocked("web_search error: missing Parallel API key.");
177
+ }
178
+ return {
179
+ kind: "phased",
180
+ startedUiEvent: {
181
+ type: "web_search_started",
182
+ toolCallId: toolCall.id,
183
+ objective: args.objective,
184
+ },
185
+ run: (async () => {
186
+ try {
187
+ const body = {
188
+ objective: args.objective,
189
+ mode: "one-shot",
190
+ ...(args.searchQueries && { search_queries: args.searchQueries }),
191
+ ...(typeof args.maxResults === "number" && { max_results: args.maxResults }),
192
+ ...(typeof args.maxCharsPerResult === "number" && {
193
+ excerpts: { max_chars_per_result: args.maxCharsPerResult },
194
+ }),
195
+ ...((args.includeDomains || args.excludeDomains) && {
196
+ source_policy: {
197
+ ...(args.includeDomains && { include_domains: args.includeDomains }),
198
+ ...(args.excludeDomains && { exclude_domains: args.excludeDomains }),
199
+ },
200
+ }),
201
+ };
202
+ const res = await fetch(`${PARALLEL_API_BASE_URL}/v1beta/search`, {
203
+ method: "POST",
204
+ headers: {
205
+ "content-type": "application/json",
206
+ accept: "application/json",
207
+ "parallel-beta": PARALLEL_BETA_HEADER,
208
+ "x-api-key": apiKey,
209
+ },
210
+ body: JSON.stringify(body),
211
+ signal,
212
+ });
213
+ let parsed;
214
+ try {
215
+ parsed = await res.json();
216
+ }
217
+ catch {
218
+ parsed = undefined;
219
+ }
220
+ if (!res.ok) {
221
+ const details = extractParallelErrorMessage(parsed) || res.statusText || "request failed";
222
+ throw new Error(`Parallel API error (${res.status}): ${details}`);
223
+ }
224
+ const responseParsed = parallelSearchResponseSchema.safeParse(parsed);
225
+ if (!responseParsed.success) {
226
+ throw new Error(`Parallel API response parse error: ${formatZodError(responseParsed.error)}`);
227
+ }
228
+ const response = responseParsed.data;
229
+ const text = formatSearchResults(response);
230
+ const toolResult = createToolResult(toolCall, text, false);
231
+ const uiEvent = {
232
+ type: "web_search_finished",
233
+ toolCallId: toolCall.id,
234
+ objective: args.objective,
235
+ status: "success",
236
+ costUsd: estimateParallelSearchCostUsd(args.maxResults, response.results.length),
237
+ };
238
+ return { kind: "single", toolResult, uiEvent };
239
+ }
240
+ catch (e) {
241
+ const msg = `web_search failed: ${e instanceof Error ? e.message : String(e)}`;
242
+ const toolResult = createToolError(toolCall, msg);
243
+ const uiEvent = {
244
+ type: "web_search_finished",
245
+ toolCallId: toolCall.id,
246
+ objective: args.objective,
247
+ status: "error",
248
+ };
249
+ return { kind: "single", toolResult, uiEvent };
250
+ }
251
+ })(),
252
+ };
253
+ },
254
+ };
255
+ }
256
+ //# sourceMappingURL=web_search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web_search.js","sourceRoot":"","sources":["../../src/tools/web_search.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { mkdirSync, writeFileSync } from "node:fs";
2
2
  import { dirname } from "node:path";
3
3
  import { Type } from "@sinclair/typebox";
4
+ import { z } from "zod";
4
5
  import { createToolError, createToolSuccess } from "../utils/messages.js";
5
6
  const WRITE_DESCRIPTION = [
6
7
  "Write content to a file, creating the file if it doesn't exist or overwriting if it does.",
@@ -16,11 +17,13 @@ export const WRITE_TOOL = {
16
17
  content: Type.String({ description: WRITE_CONTENT_DESCRIPTION }),
17
18
  }, { additionalProperties: false }),
18
19
  };
20
+ const writeArgsSchema = z.object({
21
+ path: z.string().trim().catch(""),
22
+ content: z.string().catch(""),
23
+ });
19
24
  function parseWriteArgs(raw) {
20
- const args = raw;
21
- const path = typeof args?.path === "string" ? args.path.trim() : "";
22
- const content = typeof args?.content === "string" ? args.content : "";
23
- return { path, content };
25
+ const parsed = writeArgsSchema.safeParse(raw);
26
+ return parsed.success ? parsed.data : { path: "", content: "" };
24
27
  }
25
28
  const PREVIEW_LINES = 16;
26
29
  function buildPreview(content) {
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,4 +1,6 @@
1
- export const REASONING_LEVELS = [
1
+ import { z } from "zod";
2
+ export const RiskLevelSchema = z.enum(["none", "read-only", "read-write"]);
3
+ export const REASONING_LEVELS_TUPLE = [
2
4
  "none",
3
5
  "minimal",
4
6
  "low",
@@ -6,4 +8,6 @@ export const REASONING_LEVELS = [
6
8
  "high",
7
9
  "xhigh",
8
10
  ];
11
+ export const ReasoningEffortSchema = z.enum(REASONING_LEVELS_TUPLE);
12
+ export const REASONING_LEVELS = [...REASONING_LEVELS_TUPLE];
9
13
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,MAAM;IACN,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAS3E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM;IACN,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,OAAO;CACC,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAsB,CAAC,GAAG,sBAAsB,CAAC,CAAC"}
@@ -8,6 +8,19 @@ export class CustomEditor extends Editor {
8
8
  onCtrlF;
9
9
  onAltUp;
10
10
  beforeSubmit;
11
+ getCursor() {
12
+ // FIXME: should use the `pi-tui` methods once they become available
13
+ const state = this.state;
14
+ return {
15
+ line: state?.cursorLine ?? 0,
16
+ col: state?.cursorCol ?? 0,
17
+ };
18
+ }
19
+ getLines() {
20
+ // FIXME: should use the `pi-tui` methods once they become available
21
+ const state = this.state;
22
+ return state?.lines ? [...state.lines] : this.getText().split("\n");
23
+ }
11
24
  handleInput(data) {
12
25
  if ((data === "\x1b[Z" || data === "\x1b[1;2Z") && this.onShiftTab) {
13
26
  this.onShiftTab();