@markusylisiurunen/tau 0.3.28 → 0.3.29

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 (93) hide show
  1. package/README.md +10 -8
  2. package/dist/core/config/runtime.js +5 -1
  3. package/dist/core/config/runtime.js.map +1 -1
  4. package/dist/core/config/runtime_config_snapshot.js +5 -1
  5. package/dist/core/config/runtime_config_snapshot.js.map +1 -1
  6. package/dist/core/config/schema.js.map +1 -1
  7. package/dist/core/diff_review/snapshot.js +3 -3
  8. package/dist/core/diff_review/snapshot.js.map +1 -1
  9. package/dist/core/index.js +0 -4
  10. package/dist/core/index.js.map +1 -1
  11. package/dist/core/runtime/runtime_bootstrap.js +5 -1
  12. package/dist/core/runtime/runtime_bootstrap.js.map +1 -1
  13. package/dist/core/session/direct_bash.js +1 -0
  14. package/dist/core/session/direct_bash.js.map +1 -1
  15. package/dist/core/session/runner.js +1 -0
  16. package/dist/core/session/runner.js.map +1 -1
  17. package/dist/core/session/session_engine.js +48 -12
  18. package/dist/core/session/session_engine.js.map +1 -1
  19. package/dist/core/subagents/control_plane.js +0 -37
  20. package/dist/core/subagents/control_plane.js.map +1 -1
  21. package/dist/core/subagents/subagent_engine.js +5 -8
  22. package/dist/core/subagents/subagent_engine.js.map +1 -1
  23. package/dist/core/telegram/adapter.js +45 -4
  24. package/dist/core/telegram/adapter.js.map +1 -1
  25. package/dist/core/telegram/config.js +0 -8
  26. package/dist/core/telegram/config.js.map +1 -1
  27. package/dist/core/telegram/session_manager.js +116 -42
  28. package/dist/core/telegram/session_manager.js.map +1 -1
  29. package/dist/core/telegram/workspace.js +18 -76
  30. package/dist/core/telegram/workspace.js.map +1 -1
  31. package/dist/core/tools/bash.js +16 -8
  32. package/dist/core/tools/bash.js.map +1 -1
  33. package/dist/core/tools/catalog.js +1 -5
  34. package/dist/core/tools/catalog.js.map +1 -1
  35. package/dist/core/tools/execution_backend.js +81 -153
  36. package/dist/core/tools/execution_backend.js.map +1 -1
  37. package/dist/core/tools/registry.js +0 -3
  38. package/dist/core/tools/registry.js.map +1 -1
  39. package/dist/core/tools/spawn_agent.js +1 -1
  40. package/dist/core/tools/spawn_agent.js.map +1 -1
  41. package/dist/core/tools/terminate_agent.js +5 -11
  42. package/dist/core/tools/terminate_agent.js.map +1 -1
  43. package/dist/core/tools/tool_names.js +0 -8
  44. package/dist/core/tools/tool_names.js.map +1 -1
  45. package/dist/core/tools/wait_for_agents.js +3 -11
  46. package/dist/core/tools/wait_for_agents.js.map +1 -1
  47. package/dist/core/utils/compact.js +53 -11
  48. package/dist/core/utils/compact.js.map +1 -1
  49. package/dist/core/utils/project_files.js +14 -1
  50. package/dist/core/utils/project_files.js.map +1 -1
  51. package/dist/core/utils/user_metadata.js +14 -0
  52. package/dist/core/utils/user_metadata.js.map +1 -1
  53. package/dist/core/version.js +1 -1
  54. package/dist/execution/cloudflare_sandbox_execution_environment.js +155 -112
  55. package/dist/execution/cloudflare_sandbox_execution_environment.js.map +1 -1
  56. package/dist/execution/fly_sprite_execution_environment.js +109 -91
  57. package/dist/execution/fly_sprite_execution_environment.js.map +1 -1
  58. package/dist/execution/sandbox_tool_helpers.js +0 -25
  59. package/dist/execution/sandbox_tool_helpers.js.map +1 -1
  60. package/dist/execution/tool_backend_execution_environment.js +4 -1
  61. package/dist/execution/tool_backend_execution_environment.js.map +1 -1
  62. package/dist/host/local_session_host.js +40 -7
  63. package/dist/host/local_session_host.js.map +1 -1
  64. package/dist/host/session_host.js +5 -0
  65. package/dist/host/session_host.js.map +1 -1
  66. package/dist/host/session_protocol_handler.js +55 -6
  67. package/dist/host/session_protocol_handler.js.map +1 -1
  68. package/dist/protocol/index.d.ts +2 -2
  69. package/dist/protocol/index.js +1 -1
  70. package/dist/protocol/index.js.map +1 -1
  71. package/dist/protocol/session_protocol.d.ts +21 -2
  72. package/dist/protocol/session_protocol.js +114 -28
  73. package/dist/protocol/session_protocol.js.map +1 -1
  74. package/dist/sdk/session.js +51 -2
  75. package/dist/sdk/session.js.map +1 -1
  76. package/dist/sdk/types.d.ts +5 -0
  77. package/dist/tui/session_chat_controller.js +5 -50
  78. package/dist/tui/session_chat_controller.js.map +1 -1
  79. package/dist/tui/session_tool_execution_backend.js +76 -98
  80. package/dist/tui/session_tool_execution_backend.js.map +1 -1
  81. package/dist/tui/ui/subagent_panel.js +0 -13
  82. package/dist/tui/ui/subagent_panel.js.map +1 -1
  83. package/package.json +1 -1
  84. package/dist/core/tools/emit_output.js +0 -58
  85. package/dist/core/tools/emit_output.js.map +0 -1
  86. package/dist/core/tools/grep.js +0 -250
  87. package/dist/core/tools/grep.js.map +0 -1
  88. package/dist/core/tools/list.js +0 -131
  89. package/dist/core/tools/list.js.map +0 -1
  90. package/dist/core/tools/read.js +0 -171
  91. package/dist/core/tools/read.js.map +0 -1
  92. package/dist/tui/ui/restricted_execution.js +0 -203
  93. package/dist/tui/ui/restricted_execution.js.map +0 -1
@@ -1,250 +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 } from "../utils/truncate.js";
6
- import { formatZodError } from "../utils/zod.js";
7
- import { createToolDispatch } from "./registry.js";
8
- import { TOOL_NAME_GREP } from "./tool_names.js";
9
- export const GREP_TOOL_MAX_TOKENS = 8192;
10
- export const GREP_DEFAULT_TIMEOUT_MS = 60_000;
11
- const GREP_DESCRIPTION = ["Search the project with ripgrep (rg).", "Runs without a shell."].join(" ");
12
- const GREP_PATTERN_DESCRIPTION = "Search pattern (ripgrep regex).";
13
- const GREP_PATHS_DESCRIPTION = "Paths to search (files or directories, relative to the current working directory).";
14
- const GREP_CASE_MODE_DESCRIPTION = "Case sensitivity mode. Must be one of: smart, sensitive, insensitive.";
15
- const GREP_FIXED_STRINGS_DESCRIPTION = "Treat pattern as a literal string.";
16
- const GREP_WORD_REGEXP_DESCRIPTION = "Match only whole words.";
17
- const GREP_MAX_COUNT_DESCRIPTION = "Max matches per file.";
18
- const GREP_BEFORE_CONTEXT_DESCRIPTION = "Lines of context before.";
19
- const GREP_AFTER_CONTEXT_DESCRIPTION = "Lines of context after.";
20
- const GREP_CONTEXT_DESCRIPTION = "Lines of context before and after.";
21
- const GREP_GLOB_DESCRIPTION = "Include/exclude glob(s) passed via --glob.";
22
- const GREP_HIDDEN_DESCRIPTION = "Search hidden files and directories.";
23
- export const GREP_TOOL = {
24
- name: TOOL_NAME_GREP,
25
- description: GREP_DESCRIPTION,
26
- parameters: Type.Object({
27
- pattern: Type.String({ description: GREP_PATTERN_DESCRIPTION }),
28
- paths: Type.Optional(Type.Array(Type.String(), {
29
- description: GREP_PATHS_DESCRIPTION,
30
- })),
31
- caseMode: Type.Optional(Type.String({
32
- description: GREP_CASE_MODE_DESCRIPTION,
33
- enum: ["smart", "sensitive", "insensitive"],
34
- })),
35
- fixedStrings: Type.Optional(Type.Boolean({ description: GREP_FIXED_STRINGS_DESCRIPTION })),
36
- wordRegexp: Type.Optional(Type.Boolean({ description: GREP_WORD_REGEXP_DESCRIPTION })),
37
- maxCount: Type.Optional(Type.Integer({ description: GREP_MAX_COUNT_DESCRIPTION, minimum: 1 })),
38
- beforeContext: Type.Optional(Type.Integer({ description: GREP_BEFORE_CONTEXT_DESCRIPTION, minimum: 0 })),
39
- afterContext: Type.Optional(Type.Integer({ description: GREP_AFTER_CONTEXT_DESCRIPTION, minimum: 0 })),
40
- context: Type.Optional(Type.Integer({ description: GREP_CONTEXT_DESCRIPTION, minimum: 0 })),
41
- glob: Type.Optional(Type.Array(Type.String(), { description: GREP_GLOB_DESCRIPTION })),
42
- hidden: Type.Optional(Type.Boolean({ description: GREP_HIDDEN_DESCRIPTION })),
43
- }, { additionalProperties: false }),
44
- };
45
- const grepArgsSchema = z.object({
46
- pattern: z.string().trim().min(1),
47
- paths: z.array(z.string().trim().min(1)).optional(),
48
- caseMode: z.enum(["smart", "sensitive", "insensitive"]).optional(),
49
- fixedStrings: z.boolean().optional(),
50
- wordRegexp: z.boolean().optional(),
51
- maxCount: z.number().int().positive().optional(),
52
- beforeContext: z.number().int().min(0).optional(),
53
- afterContext: z.number().int().min(0).optional(),
54
- context: z.number().int().min(0).optional(),
55
- glob: z.array(z.string().trim().min(1)).optional(),
56
- hidden: z.boolean().optional(),
57
- });
58
- function parseGrepArgs(raw) {
59
- const parsed = grepArgsSchema.safeParse(raw);
60
- if (!parsed.success) {
61
- return { ok: false, error: formatZodError(parsed.error) };
62
- }
63
- return { ok: true, data: parsed.data };
64
- }
65
- function getGrepDisplayTarget(raw) {
66
- const parsedArgs = parseGrepArgs(raw);
67
- return parsedArgs.ok ? parsedArgs.data.pattern : "(invalid arguments)";
68
- }
69
- function buildGrepArgs(raw) {
70
- const args = ["--color", "never", "--column", "--with-filename", "--line-number"];
71
- const caseMode = raw.caseMode ?? "smart";
72
- if (caseMode === "smart") {
73
- args.push("--smart-case");
74
- }
75
- else if (caseMode === "insensitive") {
76
- args.push("-i");
77
- }
78
- if (raw.fixedStrings) {
79
- args.push("--fixed-strings");
80
- }
81
- if (raw.wordRegexp) {
82
- args.push("--word-regexp");
83
- }
84
- if (raw.maxCount !== undefined) {
85
- args.push("--max-count", String(raw.maxCount));
86
- }
87
- if (raw.context !== undefined) {
88
- args.push("-C", String(raw.context));
89
- }
90
- else {
91
- if (raw.beforeContext !== undefined) {
92
- args.push("-B", String(raw.beforeContext));
93
- }
94
- if (raw.afterContext !== undefined) {
95
- args.push("-A", String(raw.afterContext));
96
- }
97
- }
98
- if (raw.hidden) {
99
- args.push("--hidden");
100
- }
101
- if (raw.glob) {
102
- for (const g of raw.glob) {
103
- const cleaned = g.trim();
104
- if (!cleaned)
105
- continue;
106
- args.push("--glob", cleaned);
107
- }
108
- }
109
- const paths = raw.paths && raw.paths.length > 0 ? raw.paths : ["."];
110
- return { args, paths };
111
- }
112
- function formatGrepToolResultText(args) {
113
- const parts = [];
114
- const out = args.output.content.trimEnd();
115
- if (out) {
116
- parts.push(out);
117
- }
118
- if (args.captureTruncated || args.output.truncated) {
119
- if (parts.length > 0) {
120
- parts.push("");
121
- }
122
- const shown = `${args.output.outputLines} of ${args.output.totalLines} lines`;
123
- parts.push(`truncated for model: ${shown}. narrow the search scope to see more.`);
124
- }
125
- if (args.exitCode === null) {
126
- if (parts.length > 0) {
127
- parts.push("");
128
- }
129
- parts.push("(terminated)");
130
- }
131
- else if (args.exitCode !== 0 && args.exitCode !== 1) {
132
- if (parts.length > 0) {
133
- parts.push("");
134
- }
135
- parts.push(`(exit ${args.exitCode})`);
136
- }
137
- return parts.join("\n");
138
- }
139
- function buildGrepUiText(args) {
140
- const { modelTruncation, fullText, captureTruncated } = args;
141
- const previewContentLines = buildHeadTailPreviewLines(modelTruncation.content, {
142
- headLines: 5,
143
- tailLines: 5,
144
- });
145
- const previewLines = previewContentLines.map((text) => ({ text }));
146
- const trimmedFullText = fullText.trimEnd();
147
- const fullLines = trimmedFullText
148
- ? trimmedFullText.split("\n").map((text) => ({ text }))
149
- : [];
150
- const statusLine = modelTruncation.truncated || captureTruncated ? TRUNCATION_MARKER : undefined;
151
- return {
152
- previewLines,
153
- fullLines,
154
- statusLine,
155
- };
156
- }
157
- export function createGrepToolDefinition(backend) {
158
- return {
159
- schema: GREP_TOOL,
160
- getDisplayTarget: (toolCall) => getGrepDisplayTarget(toolCall.arguments),
161
- async dispatch(toolCall, signal) {
162
- const parsedArgs = parseGrepArgs(toolCall.arguments);
163
- const pattern = parsedArgs.ok ? parsedArgs.data.pattern : "";
164
- const headerTarget = getGrepDisplayTarget(toolCall.arguments);
165
- const blocked = (reason) => {
166
- const toolResult = createToolError(toolCall, reason);
167
- const uiEvent = {
168
- type: "grep_blocked",
169
- toolCallId: toolCall.id,
170
- pattern: pattern || "(invalid pattern)",
171
- headerTarget,
172
- reason,
173
- };
174
- return { toolResult, uiEvent };
175
- };
176
- if (!parsedArgs.ok) {
177
- return createToolDispatch(() => blocked(`invalid arguments: ${parsedArgs.error}`));
178
- }
179
- const parsed = parsedArgs.data;
180
- const { args: baseArgs, paths } = buildGrepArgs(parsed);
181
- try {
182
- await backend.grep({
183
- baseArgs,
184
- pattern: parsed.pattern,
185
- paths,
186
- timeoutMs: GREP_DEFAULT_TIMEOUT_MS,
187
- dryRun: true,
188
- });
189
- }
190
- catch (e) {
191
- const errorMessage = e instanceof Error ? e.message : String(e);
192
- return createToolDispatch(() => blocked(`grep failed: ${errorMessage}`));
193
- }
194
- return {
195
- startedUiEvent: {
196
- type: "grep_started",
197
- toolCallId: toolCall.id,
198
- pattern: parsed.pattern,
199
- headerTarget,
200
- },
201
- run: (async () => {
202
- let result;
203
- try {
204
- result = await backend.grep({
205
- baseArgs,
206
- pattern: parsed.pattern,
207
- paths,
208
- signal,
209
- timeoutMs: GREP_DEFAULT_TIMEOUT_MS,
210
- });
211
- }
212
- catch (e) {
213
- const errorMessage = e instanceof Error ? e.message : String(e);
214
- return blocked(`grep failed: ${errorMessage}`);
215
- }
216
- const { output, exitCode, captureTruncated } = result;
217
- const outputModel = truncateForTokens(output, {
218
- maxTokens: GREP_TOOL_MAX_TOKENS,
219
- strategy: "head",
220
- });
221
- const toolText = formatGrepToolResultText({
222
- output: outputModel,
223
- exitCode,
224
- captureTruncated,
225
- });
226
- const uiText = buildGrepUiText({
227
- modelTruncation: outputModel,
228
- fullText: toolText,
229
- captureTruncated,
230
- });
231
- const isError = exitCode === null || (exitCode !== 0 && exitCode !== 1);
232
- const toolResult = createToolResult(toolCall, toolText, isError);
233
- const uiEvent = {
234
- type: "grep_finished",
235
- toolCallId: toolCall.id,
236
- pattern: parsed.pattern,
237
- headerTarget,
238
- status: isError ? "error" : "success",
239
- exitCode,
240
- output: outputModel.content,
241
- captureTruncated,
242
- uiText,
243
- };
244
- return { toolResult, uiEvent };
245
- })(),
246
- };
247
- },
248
- };
249
- }
250
- //# sourceMappingURL=grep.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/core/tools/grep.ts"],"names":[],"mappings":"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"}
@@ -1,131 +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 } from "../utils/truncate.js";
6
- import { formatZodError } from "../utils/zod.js";
7
- import { createToolDispatch } from "./registry.js";
8
- import { TOOL_NAME_LIST } from "./tool_names.js";
9
- export const LIST_MAX_ENTRIES = 4096;
10
- const LIST_DEFAULT_LIMIT = 256;
11
- const LIST_DESCRIPTION = ["List files in a directory (non-recursive)."].join(" ");
12
- const LIST_PATH_DESCRIPTION = "Directory path to list (relative to the current working directory). Use '.' for root.";
13
- const LIST_OFFSET_DESCRIPTION = "Number of entries to skip.";
14
- const LIST_LIMIT_DESCRIPTION = "Max number of entries to return (<= 4096).";
15
- export const LIST_TOOL = {
16
- name: TOOL_NAME_LIST,
17
- description: LIST_DESCRIPTION,
18
- parameters: Type.Object({
19
- path: Type.String({
20
- description: LIST_PATH_DESCRIPTION,
21
- }),
22
- offset: Type.Optional(Type.Integer({ description: LIST_OFFSET_DESCRIPTION, minimum: 0 })),
23
- limit: Type.Optional(Type.Integer({ description: LIST_LIMIT_DESCRIPTION, minimum: 1 })),
24
- }, { additionalProperties: false }),
25
- };
26
- const listArgsSchema = z.object({
27
- path: z.string().trim().min(1),
28
- offset: z.number().int().min(0).default(0),
29
- limit: z.number().int().min(1).default(LIST_DEFAULT_LIMIT),
30
- });
31
- function parseListArgs(raw) {
32
- const parsed = listArgsSchema.safeParse(raw);
33
- if (!parsed.success) {
34
- return { ok: false, error: formatZodError(parsed.error) };
35
- }
36
- return { ok: true, data: parsed.data };
37
- }
38
- function getListDisplayTarget(raw) {
39
- const parsedArgs = parseListArgs(raw);
40
- return parsedArgs.ok ? parsedArgs.data.path : "(invalid arguments)";
41
- }
42
- function formatListToolResultText(entries) {
43
- return entries.join("\n");
44
- }
45
- function buildListUiText(args) {
46
- const { offset, limit, total, returned, entries, fullText } = args;
47
- const previewContentLines = buildHeadTailPreviewLines(entries.join("\n"), {
48
- headLines: 5,
49
- tailLines: 5,
50
- unitLabel: "entries",
51
- unitLabelSingular: "entry",
52
- });
53
- const infoText = `${returned} of ${total} entries · offset ${offset} · limit ${limit}`;
54
- const hasMore = total > offset + returned;
55
- const summaryLine = hasMore ? `${TRUNCATION_MARKER} · ${infoText}` : infoText;
56
- const previewLines = previewContentLines.map((text) => ({ text }));
57
- const trimmedFullText = fullText.trimEnd();
58
- const fullLines = trimmedFullText
59
- ? trimmedFullText.split("\n").map((text) => ({ text }))
60
- : [];
61
- return { previewLines, statusLine: summaryLine, fullLines };
62
- }
63
- export function createListToolDefinition(backend) {
64
- return {
65
- schema: LIST_TOOL,
66
- getDisplayTarget: (toolCall) => getListDisplayTarget(toolCall.arguments),
67
- async dispatch(toolCall) {
68
- return createToolDispatch(async () => {
69
- const parsedArgs = parseListArgs(toolCall.arguments);
70
- const path = parsedArgs.ok ? parsedArgs.data.path : "";
71
- const headerTarget = getListDisplayTarget(toolCall.arguments);
72
- const blocked = (reason) => {
73
- const toolResult = createToolError(toolCall, reason);
74
- const uiEvent = {
75
- type: "list_blocked",
76
- toolCallId: toolCall.id,
77
- path: path || "(invalid path)",
78
- headerTarget,
79
- reason,
80
- };
81
- return { toolResult, uiEvent };
82
- };
83
- if (!parsedArgs.ok) {
84
- return blocked(`invalid arguments: ${parsedArgs.error}`);
85
- }
86
- const { offset, limit } = parsedArgs.data;
87
- const effectiveLimit = Math.min(Math.max(1, limit), LIST_MAX_ENTRIES);
88
- try {
89
- const { path: resolvedPath, entries: dirents } = await backend.listDir(path);
90
- const entries = dirents
91
- .map((d) => ({
92
- name: d.name,
93
- suffix: d.isDirectory ? "/" : d.isSymlink ? "@" : "",
94
- }))
95
- .sort((a, b) => a.name.localeCompare(b.name))
96
- .map((e) => `${e.name}${e.suffix}`);
97
- const total = entries.length;
98
- const windowed = entries.slice(offset, offset + effectiveLimit);
99
- const toolText = formatListToolResultText(windowed);
100
- const uiText = buildListUiText({
101
- offset,
102
- limit: effectiveLimit,
103
- total,
104
- returned: windowed.length,
105
- entries: windowed,
106
- fullText: toolText,
107
- });
108
- const toolResult = createToolResult(toolCall, toolText, false);
109
- const uiEvent = {
110
- type: "list_success",
111
- toolCallId: toolCall.id,
112
- path: resolvedPath,
113
- headerTarget: resolvedPath,
114
- offset,
115
- limit: effectiveLimit,
116
- total,
117
- returned: windowed.length,
118
- entries: windowed,
119
- uiText,
120
- };
121
- return { toolResult, uiEvent };
122
- }
123
- catch (e) {
124
- const errorMessage = e instanceof Error ? e.message : String(e);
125
- return blocked(`list failed: ${errorMessage}`);
126
- }
127
- });
128
- },
129
- };
130
- }
131
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/core/tools/list.ts"],"names":[],"mappings":"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"}
@@ -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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"}