@curie-agent/tools 0.3.0 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/src/glob.js CHANGED
@@ -13,11 +13,11 @@ const GlobSchema = z.object({
13
13
  .optional()
14
14
  .describe('Directory to search in. Defaults to cwd. Accepts forward or backward slashes.'),
15
15
  });
16
- function minimatch(pattern, str) {
16
+ export function minimatch(pattern, str) {
17
17
  const regex = globToRegex(pattern);
18
18
  return regex.test(str);
19
19
  }
20
- function globToRegex(pattern) {
20
+ export function globToRegex(pattern) {
21
21
  // Use unique Unicode placeholders instead of backslash-escaping to avoid conflicts
22
22
  // between the ** protection and single-* replacement steps.
23
23
  const placeholder = '';
@@ -29,7 +29,7 @@ function globToRegex(pattern) {
29
29
  .replace(/\?/g, '[^/]');
30
30
  return new RegExp(`^${regex}$`);
31
31
  }
32
- function readGitignore(cwd) {
32
+ export function readGitignore(cwd) {
33
33
  const gitignorePath = path.join(cwd, '.gitignore');
34
34
  if (!fs.existsSync(gitignorePath))
35
35
  return [];
@@ -39,19 +39,29 @@ function readGitignore(cwd) {
39
39
  .map((l) => l.trim())
40
40
  .filter((l) => l && !l.startsWith('#'));
41
41
  }
42
- function shouldIgnore(relPath, patterns) {
42
+ export function shouldIgnore(relPath, patterns) {
43
43
  for (const p of patterns) {
44
- if (minimatch(p, relPath))
45
- return true;
46
- // Also match as directory prefix: "node_modules" should ignore node_modules/foo/bar
47
- const dirPrefix = p.replace(/\/$/, '') + '/';
48
- if (relPath.startsWith(dirPrefix))
49
- return true;
44
+ const clean = p.replace(/\/$/, '');
45
+ if (!clean)
46
+ continue;
47
+ if (clean.includes('/')) {
48
+ // Anchored pattern: match the relative path itself or as a directory prefix.
49
+ if (minimatch(clean, relPath))
50
+ return true;
51
+ if (relPath.startsWith(clean + '/'))
52
+ return true;
53
+ }
54
+ else {
55
+ // Bare pattern (gitignore semantics): matches any path segment at any depth,
56
+ // e.g. "dist" ignores dist/ and packages/foo/dist/.
57
+ if (relPath.split('/').some((segment) => minimatch(clean, segment)))
58
+ return true;
59
+ }
50
60
  }
51
61
  return false;
52
62
  }
53
63
  export const globTool = createTool('Glob', [
54
- 'Fast, gitignore-aware recursive file search by glob pattern.',
64
+ 'Fast, gitignore-aware recursive file search by glob pattern (finds files by NAME — use Grep to search file contents).',
55
65
  'Pattern syntax: `*` matches anything within one directory level; `**` matches across any depth.',
56
66
  'Always use forward slashes in patterns, even on Windows (e.g., `src/**/*.ts`).',
57
67
  'When `path` is supplied, the pattern matches relative to that directory.',
@@ -1 +1 @@
1
- {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,10 @@ export declare const grepTool: import("./tool.js").Tool & {
4
4
  path?: string | undefined;
5
5
  glob?: string | undefined;
6
6
  type?: string | undefined;
7
- '-i'?: boolean | undefined;
8
- '-n'?: boolean | undefined;
7
+ case_insensitive?: boolean | undefined;
8
+ line_numbers?: boolean | undefined;
9
9
  context?: number | undefined;
10
+ head_limit?: number | undefined;
10
11
  };
11
12
  };
12
13
  //# sourceMappingURL=grep.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/grep.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,QAAQ;;;;;;;;;;CAkEpB,CAAC"}
1
+ {"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/grep.ts"],"names":[],"mappings":"AAkFA,eAAO,MAAM,QAAQ;;;;;;;;;;;CAmLpB,CAAC"}
package/dist/src/grep.js CHANGED
@@ -2,28 +2,77 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { z } from 'zod';
4
4
  import { isPathAllowed, parseAllowlist } from '@curie-agent/core/safety/path-guard.js';
5
+ import { minimatch, readGitignore, shouldIgnore } from './glob.js';
5
6
  import { createTool, expandPath } from './tool.js';
6
- const GrepSchema = z.object({
7
- pattern: z.string().describe('The regular expression pattern to search for'),
8
- path: z.string().optional().describe('File or directory to search in'),
9
- glob: z.string().optional().describe('Glob pattern to filter files'),
10
- type: z.string().optional().describe('File type to search (js, py, ts, etc.)'),
11
- '-i': z.boolean().optional().describe('Case insensitive search'),
12
- '-n': z.boolean().optional().describe('Show line numbers'),
13
- context: z.number().optional().describe('Lines of context before and after'),
14
- });
15
7
  const EXT_MAP = {
16
- js: ['.js', '.jsx', '.mjs'],
17
- ts: ['.ts', '.tsx'],
8
+ js: ['.js', '.jsx', '.mjs', '.cjs'],
9
+ ts: ['.ts', '.tsx', '.mts', '.cts'],
18
10
  py: ['.py'],
19
11
  rust: ['.rs'],
12
+ rs: ['.rs'],
20
13
  go: ['.go'],
21
14
  java: ['.java'],
22
15
  rb: ['.rb'],
23
- rs: ['.rs'],
16
+ c: ['.c', '.h'],
17
+ cpp: ['.cpp', '.cc', '.cxx', '.hpp', '.hh'],
18
+ cs: ['.cs'],
19
+ php: ['.php'],
20
+ swift: ['.swift'],
21
+ kotlin: ['.kt', '.kts'],
22
+ scala: ['.scala'],
23
+ sh: ['.sh', '.bash'],
24
+ md: ['.md', '.markdown'],
25
+ json: ['.json', '.jsonc'],
26
+ yaml: ['.yml', '.yaml'],
27
+ html: ['.html', '.htm'],
28
+ css: ['.css', '.scss', '.less'],
29
+ sql: ['.sql'],
30
+ toml: ['.toml'],
31
+ xml: ['.xml'],
24
32
  };
25
- export const grepTool = createTool('Grep', 'Content search with regex support. Searches file contents for matching patterns.', GrepSchema, async (input, ctx) => {
26
- const searchPath = input.path ? path.resolve(ctx.cwd, expandPath(input.path)) : ctx.cwd;
33
+ const FILE_TYPES = Object.keys(EXT_MAP);
34
+ const MAX_FILE_SIZE = 1_000_000; // skip files larger than 1 MB
35
+ const MAX_LINE_LENGTH = 300;
36
+ const DEFAULT_HEAD_LIMIT = 250;
37
+ const GrepSchema = z.object({
38
+ pattern: z
39
+ .string()
40
+ .describe('The regular expression to search for (JavaScript RegExp syntax). ' +
41
+ 'Escape literal characters like ( ) [ ] { } . + * ? with a backslash.'),
42
+ path: z
43
+ .string()
44
+ .optional()
45
+ .describe('File or directory to search in. Defaults to the current working directory.'),
46
+ glob: z
47
+ .string()
48
+ .optional()
49
+ .describe('Glob pattern to filter which files are searched (e.g. "*.ts", "src/**/*.tsx"). ' +
50
+ 'Patterns without "/" match against the file name only.'),
51
+ type: z
52
+ .enum(FILE_TYPES)
53
+ .optional()
54
+ .describe(`File type to search, one of: ${FILE_TYPES.join(', ')}`),
55
+ case_insensitive: z.boolean().optional().describe('Case-insensitive search (default false)'),
56
+ line_numbers: z.boolean().optional().describe('Include 1-based line numbers in results (default true)'),
57
+ context: z.number().optional().describe('Number of lines to include before and after each match'),
58
+ head_limit: z
59
+ .number()
60
+ .optional()
61
+ .describe(`Maximum number of match rows to return (default ${String(DEFAULT_HEAD_LIMIT)})`),
62
+ });
63
+ function truncateLine(line) {
64
+ return line.length > MAX_LINE_LENGTH ? line.slice(0, MAX_LINE_LENGTH) + '…' : line;
65
+ }
66
+ export const grepTool = createTool('Grep', [
67
+ 'Searches file CONTENTS for a regular expression (use Glob to find files by NAME).',
68
+ 'Gitignore-aware: files ignored by .gitignore (plus node_modules/.git) are skipped,',
69
+ 'unless `path` points directly inside an ignored directory (e.g. deliberately searching dist/).',
70
+ 'Filter files with `glob` (e.g. "*.ts") or `type` (e.g. "ts"). `path` may be a directory or a single file.',
71
+ 'Results are grouped by file with cwd-relative forward-slash paths and 1-based line numbers,',
72
+ 'capped at `head_limit` rows (default 250) with an explicit truncation notice — narrow the search when you see one.',
73
+ ].join(' '), GrepSchema, async (input, ctx) => {
74
+ const rawPath = input.path ? input.path.replace(/\\/g, '/') : undefined;
75
+ const searchPath = rawPath ? path.resolve(ctx.cwd, expandPath(rawPath)) : ctx.cwd;
27
76
  // Safety: refuse searches outside allowed directories.
28
77
  if (ctx.settings.safety?.path_guard !== 'off') {
29
78
  const allowlist = parseAllowlist(ctx.settings.safety?.path_allowlist ?? '');
@@ -31,12 +80,113 @@ export const grepTool = createTool('Grep', 'Content search with regex support. S
31
80
  return { output: null, error: 'PathGuard: grep blocked — path is outside allowed directories' };
32
81
  }
33
82
  }
34
- const regexFlags = input['-i'] ? 'gi' : 'g';
35
- const pattern = input.pattern ?? '';
36
- const regex = new RegExp(pattern, regexFlags);
37
- const allowedExts = input.type ? EXT_MAP[input.type] : null;
38
- const results = [];
39
- function walk(dir) {
83
+ let regex;
84
+ try {
85
+ regex = new RegExp(input.pattern, input.case_insensitive ? 'i' : '');
86
+ }
87
+ catch (err) {
88
+ const msg = err instanceof Error ? err.message : String(err);
89
+ return {
90
+ output: null,
91
+ error: `Invalid regular expression "${input.pattern}": ${msg}. ` +
92
+ 'Escape literal characters like ( ) [ ] { } . + * ? with a backslash.',
93
+ };
94
+ }
95
+ let stat;
96
+ try {
97
+ stat = fs.statSync(searchPath);
98
+ }
99
+ catch {
100
+ return { output: null, error: `Path not found: ${searchPath}` };
101
+ }
102
+ const searchDir = stat.isDirectory() ? searchPath : path.dirname(searchPath);
103
+ const searchRel = path.relative(ctx.cwd, searchPath).replace(/\\/g, '/');
104
+ const insideCwd = searchRel === '' || (!searchRel.startsWith('..') && !path.isAbsolute(searchRel));
105
+ // Gitignore filtering: cwd patterns plus local patterns from the search dir.
106
+ // When the caller explicitly targets a path that is itself gitignored
107
+ // (e.g. grepping dist/ on purpose), respect that intent and skip filtering.
108
+ const cwdPatterns = insideCwd ? readGitignore(ctx.cwd) : [];
109
+ const localPatterns = searchDir !== ctx.cwd ? readGitignore(searchDir) : [];
110
+ // Check both "dist" and "dist/" forms so a directory target matches "dist/" patterns.
111
+ const explicitlyIgnored = searchRel !== '' &&
112
+ insideCwd &&
113
+ (shouldIgnore(searchRel, cwdPatterns) || shouldIgnore(searchRel + '/', cwdPatterns));
114
+ const ignoreBase = insideCwd ? ctx.cwd : searchDir;
115
+ const ignorePatterns = explicitlyIgnored ? [] : insideCwd ? [...cwdPatterns, ...localPatterns] : localPatterns;
116
+ const allowedExts = input.type ? EXT_MAP[input.type] : undefined;
117
+ const globPattern = input.glob;
118
+ const headLimit = input.head_limit ?? DEFAULT_HEAD_LIMIT;
119
+ const includeLineNumbers = input.line_numbers !== false;
120
+ const contextLines = input.context ?? 0;
121
+ const files = [];
122
+ let totalMatches = 0;
123
+ let emitted = 0;
124
+ function toRelative(fullPath) {
125
+ const rel = path.relative(ctx.cwd, fullPath).replace(/\\/g, '/');
126
+ return rel === '' || rel.startsWith('..') ? fullPath.replace(/\\/g, '/') : rel;
127
+ }
128
+ function matchesGlob(fullPath) {
129
+ if (!globPattern)
130
+ return true;
131
+ if (globPattern.includes('/')) {
132
+ const rel = path.relative(searchDir, fullPath).replace(/\\/g, '/');
133
+ return minimatch(globPattern, rel);
134
+ }
135
+ return minimatch(globPattern, path.basename(fullPath));
136
+ }
137
+ function scanFile(fullPath) {
138
+ let content;
139
+ try {
140
+ const fileStat = fs.statSync(fullPath);
141
+ if (fileStat.size > MAX_FILE_SIZE)
142
+ return;
143
+ const buf = fs.readFileSync(fullPath);
144
+ if (buf.subarray(0, 8192).includes(0))
145
+ return; // binary file
146
+ content = buf.toString('utf-8');
147
+ }
148
+ catch {
149
+ return; // unreadable file
150
+ }
151
+ const lines = content.split('\n');
152
+ let group;
153
+ for (let i = 0; i < lines.length; i++) {
154
+ const line = lines[i];
155
+ if (line === undefined || line === '' || !regex.test(line))
156
+ continue;
157
+ totalMatches++;
158
+ if (emitted >= headLimit)
159
+ continue; // keep counting, stop emitting
160
+ if (!group) {
161
+ group = { file: toRelative(fullPath), matches: [] };
162
+ files.push(group);
163
+ }
164
+ const row = { text: truncateLine(line) };
165
+ if (includeLineNumbers)
166
+ row.line = i + 1;
167
+ if (contextLines > 0) {
168
+ row.before = lines.slice(Math.max(0, i - contextLines), i).map(truncateLine);
169
+ row.after = lines.slice(i + 1, i + 1 + contextLines).map(truncateLine);
170
+ }
171
+ group.matches.push(row);
172
+ emitted++;
173
+ }
174
+ }
175
+ // Track visited real directories to prevent symlink cycle loops.
176
+ const visitedDirs = new Set();
177
+ function walk(dir, depth) {
178
+ if (depth > 100)
179
+ return; // Safety limit
180
+ let realDir;
181
+ try {
182
+ realDir = fs.realpathSync(dir);
183
+ }
184
+ catch {
185
+ return;
186
+ }
187
+ if (visitedDirs.has(realDir))
188
+ return;
189
+ visitedDirs.add(realDir);
40
190
  let entries;
41
191
  try {
42
192
  entries = fs.readdirSync(dir, { withFileTypes: true });
@@ -46,41 +196,47 @@ export const grepTool = createTool('Grep', 'Content search with regex support. S
46
196
  }
47
197
  for (const entry of entries) {
48
198
  const fullPath = path.join(dir, entry.name);
199
+ const relPath = path.relative(ignoreBase, fullPath).replace(/\\/g, '/');
49
200
  if (entry.isDirectory()) {
50
201
  if (entry.name === 'node_modules' || entry.name === '.git')
51
202
  continue;
52
- walk(fullPath);
203
+ if (shouldIgnore(relPath, ignorePatterns))
204
+ continue;
205
+ walk(fullPath, depth + 1);
53
206
  }
54
207
  else if (entry.isFile()) {
55
- if (allowedExts) {
56
- const ext = path.extname(entry.name).toLowerCase();
57
- if (!allowedExts.includes(ext))
58
- continue;
59
- }
60
- try {
61
- const content = fs.readFileSync(fullPath, 'utf-8');
62
- const lines = content.split('\n');
63
- for (let i = 0; i < lines.length; i++) {
64
- regex.lastIndex = 0;
65
- const line = lines[i];
66
- if (line && regex.test(line)) {
67
- results.push({ file: fullPath, line: i + 1, text: line });
68
- }
69
- }
70
- }
71
- catch {
72
- // skip binary files
73
- }
208
+ if (shouldIgnore(relPath, ignorePatterns))
209
+ continue;
210
+ if (allowedExts && !allowedExts.includes(path.extname(entry.name).toLowerCase()))
211
+ continue;
212
+ if (!matchesGlob(fullPath))
213
+ continue;
214
+ scanFile(fullPath);
74
215
  }
75
216
  }
76
217
  }
77
- walk(searchPath);
78
- return {
79
- output: {
80
- pattern: input.pattern,
81
- matches: results.length,
82
- results: results.slice(0, 250),
83
- },
218
+ if (stat.isFile()) {
219
+ scanFile(searchPath);
220
+ }
221
+ else {
222
+ walk(searchPath, 0);
223
+ }
224
+ const output = {
225
+ pattern: input.pattern,
226
+ total_matches: totalMatches,
227
+ files,
84
228
  };
229
+ if (totalMatches > emitted) {
230
+ output.truncated =
231
+ `Showing first ${String(emitted)} of ${String(totalMatches)} matches. ` +
232
+ 'Narrow the search with glob, path, type, or a more specific pattern, or raise head_limit.';
233
+ }
234
+ return { output };
235
+ }, undefined, {
236
+ aliases: {
237
+ '-i': 'case_insensitive',
238
+ '-n': 'line_numbers',
239
+ regex: 'pattern',
240
+ },
85
241
  });
86
242
  //# sourceMappingURL=grep.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/grep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/grep.ts"],"names":[],"mappings":"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"}
@@ -15,23 +15,9 @@ export { todoTool } from './todo.js';
15
15
  export { wikiTool } from './wiki.js';
16
16
  export declare const allTools: ((import("./tool.js").Tool & {
17
17
  validate: (raw: Record<string, unknown>) => {
18
- op: "init" | "list_sources" | "list_pages" | "page_get" | "page_put" | "index_get" | "index_upsert" | "log_append" | "search" | "graph" | "lint_report";
19
- slug?: string | undefined;
20
- content?: string | undefined;
21
- query?: string | undefined;
22
- title?: string | undefined;
23
- summary?: string | undefined;
24
- category?: string | undefined;
25
- date?: string | undefined;
26
- prefix?: "INGEST" | "QUERY" | "LINT" | "EDIT" | undefined;
27
- line?: string | undefined;
28
- };
29
- }) | (import("./tool.js").Tool & {
30
- validate: (raw: Record<string, unknown>) => {
31
- file_path: string;
32
- offset?: number | undefined;
33
- limit?: number | undefined;
34
- pages?: string | undefined;
18
+ command: string;
19
+ timeout?: number | undefined;
20
+ description?: string | undefined;
35
21
  };
36
22
  }) | (import("./tool.js").Tool & {
37
23
  validate: (raw: Record<string, unknown>) => {
@@ -42,19 +28,19 @@ export declare const allTools: ((import("./tool.js").Tool & {
42
28
  };
43
29
  }) | (import("./tool.js").Tool & {
44
30
  validate: (raw: Record<string, unknown>) => {
45
- file_path: string;
46
- content: string;
31
+ pattern: string;
32
+ path?: string | undefined;
47
33
  };
48
34
  }) | (import("./tool.js").Tool & {
49
35
  validate: (raw: Record<string, unknown>) => {
50
- pattern: string;
51
- path?: string | undefined;
36
+ file_path: string;
37
+ offset?: number | undefined;
38
+ limit?: number | undefined;
52
39
  };
53
40
  }) | (import("./tool.js").Tool & {
54
41
  validate: (raw: Record<string, unknown>) => {
55
- command: string;
56
- timeout?: number | undefined;
57
- description?: string | undefined;
42
+ file_path: string;
43
+ content: string;
58
44
  };
59
45
  }) | (import("./tool.js").Tool & {
60
46
  validate: (raw: Record<string, unknown>) => {
@@ -84,7 +70,7 @@ export declare const allTools: ((import("./tool.js").Tool & {
84
70
  };
85
71
  }) | (import("./tool.js").Tool & {
86
72
  validate: (raw: Record<string, unknown>) => {
87
- action: "list" | "add" | "edit" | "remove" | "complete" | "cancel" | "start" | "reorder";
73
+ action: "edit" | "list" | "add" | "remove" | "complete" | "cancel" | "start" | "reorder";
88
74
  scope: "personal" | "project";
89
75
  id?: string | undefined;
90
76
  title?: string | undefined;
@@ -96,5 +82,18 @@ export declare const allTools: ((import("./tool.js").Tool & {
96
82
  filter_status?: "backlog" | "todo" | "in_progress" | "done" | "canceled" | undefined;
97
83
  filter_priority?: "low" | "medium" | "high" | "critical" | undefined;
98
84
  };
85
+ }) | (import("./tool.js").Tool & {
86
+ validate: (raw: Record<string, unknown>) => {
87
+ op: "search" | "page_get" | "page_put" | "index_upsert" | "init" | "list_sources" | "list_pages" | "index_get" | "log_append" | "graph" | "lint_report";
88
+ slug?: string | undefined;
89
+ content?: string | undefined;
90
+ query?: string | undefined;
91
+ title?: string | undefined;
92
+ summary?: string | undefined;
93
+ category?: string | undefined;
94
+ date?: string | undefined;
95
+ prefix?: "INGEST" | "QUERY" | "LINT" | "EDIT" | undefined;
96
+ line?: string | undefined;
97
+ };
99
98
  }))[];
100
99
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACjI,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAgBrC,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAA6J,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACjI,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAgBrC,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAA6J,CAAC"}
@@ -3,7 +3,6 @@ export declare const readTool: import("./tool.js").Tool & {
3
3
  file_path: string;
4
4
  offset?: number | undefined;
5
5
  limit?: number | undefined;
6
- pages?: string | undefined;
7
6
  };
8
7
  };
9
8
  //# sourceMappingURL=read.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,QAAQ;;;;;;;CAuEpB,CAAC"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,QAAQ;;;;;;CAwFpB,CAAC"}
package/dist/src/read.js CHANGED
@@ -3,13 +3,23 @@ import path from 'node:path';
3
3
  import { z } from 'zod';
4
4
  import { isPathAllowed, parseAllowlist } from '@curie-agent/core/safety/path-guard.js';
5
5
  import { createTool, expandPath } from './tool.js';
6
+ const DEFAULT_LINE_LIMIT = 2000;
7
+ const MAX_LINE_LENGTH = 2000;
6
8
  const ReadSchema = z.object({
7
- file_path: z.string().describe('The absolute path to the file to read'),
8
- offset: z.number().optional().describe('The line number to start reading from'),
9
- limit: z.number().optional().describe('The number of lines to read'),
10
- pages: z.string().optional().describe('Page range for PDF files'),
9
+ file_path: z
10
+ .string()
11
+ .describe('The path to the file to read (absolute, or relative to the working directory)'),
12
+ offset: z.number().optional().describe('The 1-based line number to start reading from'),
13
+ limit: z
14
+ .number()
15
+ .optional()
16
+ .describe(`The number of lines to read (default ${String(DEFAULT_LINE_LIMIT)})`),
11
17
  });
12
- export const readTool = createTool('Read', 'Reads a file from the local filesystem. Supports text files, PDF, notebooks, and images.', ReadSchema, async (input, ctx) => {
18
+ export const readTool = createTool('Read', [
19
+ 'Reads a text or image file from the local filesystem and returns numbered lines (`<line>\\t<text>`).',
20
+ `Reads up to ${String(DEFAULT_LINE_LIMIT)} lines by default; use offset/limit to page through larger files.`,
21
+ 'Reading a directory returns its entries. PDFs are not supported.',
22
+ ].join(' '), ReadSchema, async (input, ctx) => {
13
23
  const filePath = path.resolve(ctx.cwd, expandPath(input.file_path));
14
24
  // Safety: refuse reads outside allowed directories (project cwd + user allowlist).
15
25
  if (ctx.settings.safety?.path_guard !== 'off') {
@@ -45,24 +55,35 @@ export const readTool = createTool('Read', 'Reads a file from the local filesyst
45
55
  };
46
56
  }
47
57
  if (ext === '.pdf') {
48
- return { output: null, error: `PDF reading requires a PDF library. Path: ${filePath}` };
58
+ return {
59
+ output: null,
60
+ error: `PDF files are not supported by this tool: ${filePath}. Use Bash with a converter, or ask the user for a text export.`,
61
+ };
49
62
  }
50
63
  const content = fs.readFileSync(filePath, 'utf-8');
51
64
  const lines = content.split('\n');
52
- let resultLines = lines;
53
- if (input.offset !== undefined) {
54
- const start = Math.max(0, input.offset - 1);
55
- resultLines = lines.slice(start);
56
- }
57
- if (input.limit !== undefined) {
58
- resultLines = resultLines.slice(0, input.limit);
59
- }
65
+ const start = input.offset !== undefined ? Math.max(0, input.offset - 1) : 0;
66
+ const limit = input.limit ?? DEFAULT_LINE_LIMIT;
67
+ const resultLines = lines.slice(start, start + limit);
60
68
  const numbered = resultLines
61
69
  .map((line, i) => {
62
- const ln = input.offset !== undefined ? input.offset + i : i + 1;
63
- return `${ln}\t${line}`;
70
+ const ln = start + i + 1;
71
+ const text = line.length > MAX_LINE_LENGTH ? line.slice(0, MAX_LINE_LENGTH) + '… [line truncated]' : line;
72
+ return `${String(ln)}\t${text}`;
64
73
  })
65
74
  .join('\n');
75
+ const end = start + resultLines.length;
76
+ if (end < lines.length) {
77
+ const footer = `\n[Showing lines ${String(start + 1)}-${String(end)} of ${String(lines.length)}. Use offset/limit to read more.]`;
78
+ return { output: numbered + footer };
79
+ }
66
80
  return { output: numbered };
81
+ }, undefined, {
82
+ aliases: {
83
+ path: 'file_path',
84
+ filename: 'file_path',
85
+ filepath: 'file_path',
86
+ file: 'file_path',
87
+ },
67
88
  });
68
89
  //# sourceMappingURL=read.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"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"}