@ank1015/llm-agents 0.0.2

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 (104) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +21 -0
  3. package/README.md +117 -0
  4. package/dist/agents/skills/index.d.ts +37 -0
  5. package/dist/agents/skills/index.d.ts.map +1 -0
  6. package/dist/agents/skills/index.js +386 -0
  7. package/dist/agents/skills/index.js.map +1 -0
  8. package/dist/agents/system-prompt.d.ts +7 -0
  9. package/dist/agents/system-prompt.d.ts.map +1 -0
  10. package/dist/agents/system-prompt.js +106 -0
  11. package/dist/agents/system-prompt.js.map +1 -0
  12. package/dist/agents/tools.d.ts +3 -0
  13. package/dist/agents/tools.d.ts.map +1 -0
  14. package/dist/agents/tools.js +3 -0
  15. package/dist/agents/tools.js.map +1 -0
  16. package/dist/helpers/ai-image/ai-image.d.ts +75 -0
  17. package/dist/helpers/ai-image/ai-image.d.ts.map +1 -0
  18. package/dist/helpers/ai-image/ai-image.js +438 -0
  19. package/dist/helpers/ai-image/ai-image.js.map +1 -0
  20. package/dist/helpers/ai-image/index.d.ts +3 -0
  21. package/dist/helpers/ai-image/index.d.ts.map +1 -0
  22. package/dist/helpers/ai-image/index.js +2 -0
  23. package/dist/helpers/ai-image/index.js.map +1 -0
  24. package/dist/helpers/index.d.ts +2 -0
  25. package/dist/helpers/index.d.ts.map +1 -0
  26. package/dist/helpers/index.js +2 -0
  27. package/dist/helpers/index.js.map +1 -0
  28. package/dist/index.d.ts +12 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +12 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/tools/bash.d.ts +55 -0
  33. package/dist/tools/bash.d.ts.map +1 -0
  34. package/dist/tools/bash.js +246 -0
  35. package/dist/tools/bash.js.map +1 -0
  36. package/dist/tools/edit-diff.d.ts +63 -0
  37. package/dist/tools/edit-diff.d.ts.map +1 -0
  38. package/dist/tools/edit-diff.js +246 -0
  39. package/dist/tools/edit-diff.js.map +1 -0
  40. package/dist/tools/edit.d.ts +39 -0
  41. package/dist/tools/edit.d.ts.map +1 -0
  42. package/dist/tools/edit.js +150 -0
  43. package/dist/tools/edit.js.map +1 -0
  44. package/dist/tools/find.d.ts +39 -0
  45. package/dist/tools/find.d.ts.map +1 -0
  46. package/dist/tools/find.js +206 -0
  47. package/dist/tools/find.js.map +1 -0
  48. package/dist/tools/grep.d.ts +45 -0
  49. package/dist/tools/grep.d.ts.map +1 -0
  50. package/dist/tools/grep.js +244 -0
  51. package/dist/tools/grep.js.map +1 -0
  52. package/dist/tools/index.d.ts +73 -0
  53. package/dist/tools/index.d.ts.map +1 -0
  54. package/dist/tools/index.js +66 -0
  55. package/dist/tools/index.js.map +1 -0
  56. package/dist/tools/ls.d.ts +40 -0
  57. package/dist/tools/ls.d.ts.map +1 -0
  58. package/dist/tools/ls.js +121 -0
  59. package/dist/tools/ls.js.map +1 -0
  60. package/dist/tools/path-utils.d.ts +8 -0
  61. package/dist/tools/path-utils.d.ts.map +1 -0
  62. package/dist/tools/path-utils.js +81 -0
  63. package/dist/tools/path-utils.js.map +1 -0
  64. package/dist/tools/read.d.ts +39 -0
  65. package/dist/tools/read.d.ts.map +1 -0
  66. package/dist/tools/read.js +177 -0
  67. package/dist/tools/read.js.map +1 -0
  68. package/dist/tools/truncate.d.ts +70 -0
  69. package/dist/tools/truncate.d.ts.map +1 -0
  70. package/dist/tools/truncate.js +205 -0
  71. package/dist/tools/truncate.js.map +1 -0
  72. package/dist/tools/utils/config.d.ts +16 -0
  73. package/dist/tools/utils/config.d.ts.map +1 -0
  74. package/dist/tools/utils/config.js +40 -0
  75. package/dist/tools/utils/config.js.map +1 -0
  76. package/dist/tools/utils/image-resize.d.ts +36 -0
  77. package/dist/tools/utils/image-resize.d.ts.map +1 -0
  78. package/dist/tools/utils/image-resize.js +183 -0
  79. package/dist/tools/utils/image-resize.js.map +1 -0
  80. package/dist/tools/utils/mime.d.ts +3 -0
  81. package/dist/tools/utils/mime.d.ts.map +1 -0
  82. package/dist/tools/utils/mime.js +41 -0
  83. package/dist/tools/utils/mime.js.map +1 -0
  84. package/dist/tools/utils/photon.d.ts +21 -0
  85. package/dist/tools/utils/photon.d.ts.map +1 -0
  86. package/dist/tools/utils/photon.js +121 -0
  87. package/dist/tools/utils/photon.js.map +1 -0
  88. package/dist/tools/utils/shell.d.ts +26 -0
  89. package/dist/tools/utils/shell.d.ts.map +1 -0
  90. package/dist/tools/utils/shell.js +177 -0
  91. package/dist/tools/utils/shell.js.map +1 -0
  92. package/dist/tools/utils/tools-manager.d.ts +3 -0
  93. package/dist/tools/utils/tools-manager.d.ts.map +1 -0
  94. package/dist/tools/utils/tools-manager.js +209 -0
  95. package/dist/tools/utils/tools-manager.js.map +1 -0
  96. package/dist/tools/write.d.ts +29 -0
  97. package/dist/tools/write.d.ts.map +1 -0
  98. package/dist/tools/write.js +83 -0
  99. package/dist/tools/write.js.map +1 -0
  100. package/package.json +73 -0
  101. package/skills/ai-images/SKILL.md +45 -0
  102. package/skills/ai-images/references/create.md +106 -0
  103. package/skills/ai-images/references/edit.md +107 -0
  104. package/skills/registry.json +10 -0
@@ -0,0 +1,206 @@
1
+ import { spawnSync } from 'child_process';
2
+ import { existsSync } from 'fs';
3
+ import path from 'path';
4
+ import { Type } from '@sinclair/typebox';
5
+ import { globSync } from 'glob';
6
+ import { resolveToCwd } from './path-utils.js';
7
+ import { DEFAULT_MAX_BYTES, formatSize, truncateHead } from './truncate.js';
8
+ import { ensureTool } from './utils/tools-manager.js';
9
+ const findSchema = Type.Object({
10
+ pattern: Type.String({
11
+ description: "Glob pattern to match files, e.g. '*.ts', '**/*.json', or 'src/**/*.spec.ts'",
12
+ }),
13
+ path: Type.Optional(Type.String({ description: 'Directory to search in (default: current directory)' })),
14
+ limit: Type.Optional(Type.Number({ description: 'Maximum number of results (default: 1000)' })),
15
+ });
16
+ const DEFAULT_LIMIT = 1000;
17
+ const defaultFindOperations = {
18
+ exists: existsSync,
19
+ glob: (_pattern, _searchCwd, _options) => {
20
+ // This is a placeholder - actual fd execution happens in execute
21
+ return [];
22
+ },
23
+ };
24
+ export function createFindTool(cwd, options) {
25
+ const customOps = options?.operations;
26
+ return {
27
+ name: 'find',
28
+ label: 'find',
29
+ description: `Search for files by glob pattern. Returns matching file paths relative to the search directory. Respects .gitignore. Output is truncated to ${DEFAULT_LIMIT} results or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first).`,
30
+ parameters: findSchema,
31
+ execute: async (_toolCallId, { pattern, path: searchDir, limit }, signal) => {
32
+ return new Promise((resolve, reject) => {
33
+ if (signal?.aborted) {
34
+ reject(new Error('Operation aborted'));
35
+ return;
36
+ }
37
+ const onAbort = () => reject(new Error('Operation aborted'));
38
+ signal?.addEventListener('abort', onAbort, { once: true });
39
+ (async () => {
40
+ try {
41
+ const searchPath = resolveToCwd(searchDir || '.', cwd);
42
+ const effectiveLimit = limit ?? DEFAULT_LIMIT;
43
+ const ops = customOps ?? defaultFindOperations;
44
+ // If custom operations provided with glob, use that
45
+ if (customOps?.glob) {
46
+ if (!(await ops.exists(searchPath))) {
47
+ reject(new Error(`Path not found: ${searchPath}`));
48
+ return;
49
+ }
50
+ const results = await ops.glob(pattern, searchPath, {
51
+ ignore: ['**/node_modules/**', '**/.git/**'],
52
+ limit: effectiveLimit,
53
+ });
54
+ signal?.removeEventListener('abort', onAbort);
55
+ if (results.length === 0) {
56
+ resolve({
57
+ content: [{ type: 'text', content: 'No files found matching pattern' }],
58
+ details: undefined,
59
+ });
60
+ return;
61
+ }
62
+ // Relativize paths
63
+ const relativized = results.map((p) => {
64
+ if (p.startsWith(searchPath)) {
65
+ return p.slice(searchPath.length + 1);
66
+ }
67
+ return path.relative(searchPath, p);
68
+ });
69
+ const resultLimitReached = relativized.length >= effectiveLimit;
70
+ const rawOutput = relativized.join('\n');
71
+ const truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });
72
+ let resultOutput = truncation.content;
73
+ const details = {};
74
+ const notices = [];
75
+ if (resultLimitReached) {
76
+ notices.push(`${effectiveLimit} results limit reached`);
77
+ details.resultLimitReached = effectiveLimit;
78
+ }
79
+ if (truncation.truncated) {
80
+ notices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);
81
+ details.truncation = truncation;
82
+ }
83
+ if (notices.length > 0) {
84
+ resultOutput += `\n\n[${notices.join('. ')}]`;
85
+ }
86
+ resolve({
87
+ content: [{ type: 'text', content: resultOutput }],
88
+ details: Object.keys(details).length > 0 ? details : undefined,
89
+ });
90
+ return;
91
+ }
92
+ // Default: use fd
93
+ const fdPath = await ensureTool('fd', true);
94
+ if (!fdPath) {
95
+ reject(new Error('fd is not available and could not be downloaded'));
96
+ return;
97
+ }
98
+ // Build fd arguments
99
+ const args = [
100
+ '--glob',
101
+ '--color=never',
102
+ '--hidden',
103
+ '--max-results',
104
+ String(effectiveLimit),
105
+ ];
106
+ // Include .gitignore files
107
+ const gitignoreFiles = new Set();
108
+ const rootGitignore = path.join(searchPath, '.gitignore');
109
+ if (existsSync(rootGitignore)) {
110
+ gitignoreFiles.add(rootGitignore);
111
+ }
112
+ try {
113
+ const nestedGitignores = globSync('**/.gitignore', {
114
+ cwd: searchPath,
115
+ dot: true,
116
+ absolute: true,
117
+ ignore: ['**/node_modules/**', '**/.git/**'],
118
+ });
119
+ for (const file of nestedGitignores) {
120
+ gitignoreFiles.add(file);
121
+ }
122
+ }
123
+ catch {
124
+ // Ignore glob errors
125
+ }
126
+ for (const gitignorePath of gitignoreFiles) {
127
+ args.push('--ignore-file', gitignorePath);
128
+ }
129
+ args.push(pattern, searchPath);
130
+ const result = spawnSync(fdPath, args, {
131
+ encoding: 'utf-8',
132
+ maxBuffer: 10 * 1024 * 1024,
133
+ });
134
+ signal?.removeEventListener('abort', onAbort);
135
+ if (result.error) {
136
+ reject(new Error(`Failed to run fd: ${result.error.message}`));
137
+ return;
138
+ }
139
+ const output = result.stdout?.trim() || '';
140
+ if (result.status !== 0) {
141
+ const errorMsg = result.stderr?.trim() || `fd exited with code ${result.status}`;
142
+ if (!output) {
143
+ reject(new Error(errorMsg));
144
+ return;
145
+ }
146
+ }
147
+ if (!output) {
148
+ resolve({
149
+ content: [{ type: 'text', content: 'No files found matching pattern' }],
150
+ details: undefined,
151
+ });
152
+ return;
153
+ }
154
+ const lines = output.split('\n');
155
+ const relativized = [];
156
+ for (const rawLine of lines) {
157
+ const line = rawLine.replace(/\r$/, '').trim();
158
+ if (!line)
159
+ continue;
160
+ const hadTrailingSlash = line.endsWith('/') || line.endsWith('\\');
161
+ let relativePath = line;
162
+ if (line.startsWith(searchPath)) {
163
+ relativePath = line.slice(searchPath.length + 1);
164
+ }
165
+ else {
166
+ relativePath = path.relative(searchPath, line);
167
+ }
168
+ if (hadTrailingSlash && !relativePath.endsWith('/')) {
169
+ relativePath += '/';
170
+ }
171
+ relativized.push(relativePath);
172
+ }
173
+ const resultLimitReached = relativized.length >= effectiveLimit;
174
+ const rawOutput = relativized.join('\n');
175
+ const truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });
176
+ let resultOutput = truncation.content;
177
+ const details = {};
178
+ const notices = [];
179
+ if (resultLimitReached) {
180
+ notices.push(`${effectiveLimit} results limit reached. Use limit=${effectiveLimit * 2} for more, or refine pattern`);
181
+ details.resultLimitReached = effectiveLimit;
182
+ }
183
+ if (truncation.truncated) {
184
+ notices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);
185
+ details.truncation = truncation;
186
+ }
187
+ if (notices.length > 0) {
188
+ resultOutput += `\n\n[${notices.join('. ')}]`;
189
+ }
190
+ resolve({
191
+ content: [{ type: 'text', content: resultOutput }],
192
+ details: Object.keys(details).length > 0 ? details : undefined,
193
+ });
194
+ }
195
+ catch (e) {
196
+ signal?.removeEventListener('abort', onAbort);
197
+ reject(e);
198
+ }
199
+ })();
200
+ });
201
+ },
202
+ };
203
+ }
204
+ /** Default find tool using process.cwd() - for backwards compatibility */
205
+ export const findTool = createFindTool(process.cwd());
206
+ //# sourceMappingURL=find.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/tools/find.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { type Static } from '@sinclair/typebox';
2
+ import { type TruncationResult } from './truncate.js';
3
+ import type { AgentTool } from '@ank1015/llm-sdk';
4
+ declare const grepSchema: import("@sinclair/typebox").TObject<{
5
+ pattern: import("@sinclair/typebox").TString;
6
+ path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
7
+ glob: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
8
+ ignoreCase: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
9
+ literal: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
10
+ context: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
11
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
12
+ }>;
13
+ export type GrepToolInput = Static<typeof grepSchema>;
14
+ export interface GrepToolDetails {
15
+ truncation?: TruncationResult;
16
+ matchLimitReached?: number;
17
+ linesTruncated?: boolean;
18
+ }
19
+ /**
20
+ * Pluggable operations for the grep tool.
21
+ * Override these to delegate search to remote systems (e.g., SSH).
22
+ */
23
+ export interface GrepOperations {
24
+ /** Check if path is a directory. Throws if path doesn't exist. */
25
+ isDirectory: (absolutePath: string) => Promise<boolean> | boolean;
26
+ /** Read file contents for context lines */
27
+ readFile: (absolutePath: string) => Promise<string> | string;
28
+ }
29
+ export interface GrepToolOptions {
30
+ /** Custom operations for grep. Default: local filesystem + ripgrep */
31
+ operations?: GrepOperations;
32
+ }
33
+ export declare function createGrepTool(cwd: string, options?: GrepToolOptions): AgentTool<typeof grepSchema>;
34
+ /** Default grep tool using process.cwd() - for backwards compatibility */
35
+ export declare const grepTool: AgentTool<import("@sinclair/typebox").TObject<{
36
+ pattern: import("@sinclair/typebox").TString;
37
+ path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
38
+ glob: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
39
+ ignoreCase: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
40
+ literal: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
41
+ context: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
42
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
43
+ }>, unknown>;
44
+ export {};
45
+ //# sourceMappingURL=grep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAIL,KAAK,gBAAgB,EAGtB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,QAAA,MAAM,UAAU;;;;;;;;EAsBd,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;AAItD,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,WAAW,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAClE,2CAA2C;IAC3C,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAC9D;AAOD,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe,GACxB,SAAS,CAAC,OAAO,UAAU,CAAC,CA8R9B;AAED,0EAA0E;AAC1E,eAAO,MAAM,QAAQ;;;;;;;;YAAgC,CAAC"}
@@ -0,0 +1,244 @@
1
+ import { spawn } from 'child_process';
2
+ import { readFileSync, statSync } from 'fs';
3
+ import { createInterface } from 'node:readline';
4
+ import path from 'path';
5
+ import { Type } from '@sinclair/typebox';
6
+ import { resolveToCwd } from './path-utils.js';
7
+ import { DEFAULT_MAX_BYTES, formatSize, GREP_MAX_LINE_LENGTH, truncateHead, truncateLine, } from './truncate.js';
8
+ import { ensureTool } from './utils/tools-manager.js';
9
+ const grepSchema = Type.Object({
10
+ pattern: Type.String({ description: 'Search pattern (regex or literal string)' }),
11
+ path: Type.Optional(Type.String({ description: 'Directory or file to search (default: current directory)' })),
12
+ glob: Type.Optional(Type.String({ description: "Filter files by glob pattern, e.g. '*.ts' or '**/*.spec.ts'" })),
13
+ ignoreCase: Type.Optional(Type.Boolean({ description: 'Case-insensitive search (default: false)' })),
14
+ literal: Type.Optional(Type.Boolean({
15
+ description: 'Treat pattern as literal string instead of regex (default: false)',
16
+ })),
17
+ context: Type.Optional(Type.Number({ description: 'Number of lines to show before and after each match (default: 0)' })),
18
+ limit: Type.Optional(Type.Number({ description: 'Maximum number of matches to return (default: 100)' })),
19
+ });
20
+ const DEFAULT_LIMIT = 100;
21
+ const defaultGrepOperations = {
22
+ isDirectory: (p) => statSync(p).isDirectory(),
23
+ readFile: (p) => readFileSync(p, 'utf-8'),
24
+ };
25
+ export function createGrepTool(cwd, options) {
26
+ const customOps = options?.operations;
27
+ return {
28
+ name: 'grep',
29
+ label: 'grep',
30
+ description: `Search file contents for a pattern. Returns matching lines with file paths and line numbers. Respects .gitignore. Output is truncated to ${DEFAULT_LIMIT} matches or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first). Long lines are truncated to ${GREP_MAX_LINE_LENGTH} chars.`,
31
+ parameters: grepSchema,
32
+ execute: async (_toolCallId, { pattern, path: searchDir, glob, ignoreCase, literal, context, limit, }, signal) => {
33
+ return new Promise((resolve, reject) => {
34
+ if (signal?.aborted) {
35
+ reject(new Error('Operation aborted'));
36
+ return;
37
+ }
38
+ let settled = false;
39
+ const settle = (fn) => {
40
+ if (!settled) {
41
+ settled = true;
42
+ fn();
43
+ }
44
+ };
45
+ (async () => {
46
+ try {
47
+ const rgPath = await ensureTool('rg', true);
48
+ if (!rgPath) {
49
+ settle(() => reject(new Error('ripgrep (rg) is not available and could not be downloaded')));
50
+ return;
51
+ }
52
+ const searchPath = resolveToCwd(searchDir || '.', cwd);
53
+ const ops = customOps ?? defaultGrepOperations;
54
+ let isDirectory;
55
+ try {
56
+ isDirectory = await ops.isDirectory(searchPath);
57
+ }
58
+ catch (_err) {
59
+ settle(() => reject(new Error(`Path not found: ${searchPath}`)));
60
+ return;
61
+ }
62
+ const contextValue = context && context > 0 ? context : 0;
63
+ const effectiveLimit = Math.max(1, limit ?? DEFAULT_LIMIT);
64
+ const formatPath = (filePath) => {
65
+ if (isDirectory) {
66
+ const relative = path.relative(searchPath, filePath);
67
+ if (relative && !relative.startsWith('..')) {
68
+ return relative.replace(/\\/g, '/');
69
+ }
70
+ }
71
+ return path.basename(filePath);
72
+ };
73
+ const fileCache = new Map();
74
+ const getFileLines = async (filePath) => {
75
+ let lines = fileCache.get(filePath);
76
+ if (!lines) {
77
+ try {
78
+ const content = await ops.readFile(filePath);
79
+ lines = content.replace(/\r\n/g, '\n').replace(/\r/g, '\n').split('\n');
80
+ }
81
+ catch {
82
+ lines = [];
83
+ }
84
+ fileCache.set(filePath, lines);
85
+ }
86
+ return lines;
87
+ };
88
+ const args = ['--json', '--line-number', '--color=never', '--hidden'];
89
+ if (ignoreCase) {
90
+ args.push('--ignore-case');
91
+ }
92
+ if (literal) {
93
+ args.push('--fixed-strings');
94
+ }
95
+ if (glob) {
96
+ args.push('--glob', glob);
97
+ }
98
+ args.push(pattern, searchPath);
99
+ const child = spawn(rgPath, args, { stdio: ['ignore', 'pipe', 'pipe'] });
100
+ const rl = createInterface({ input: child.stdout });
101
+ let stderr = '';
102
+ let matchCount = 0;
103
+ let matchLimitReached = false;
104
+ let linesTruncated = false;
105
+ let aborted = false;
106
+ let killedDueToLimit = false;
107
+ const outputLines = [];
108
+ const cleanup = () => {
109
+ rl.close();
110
+ signal?.removeEventListener('abort', onAbort);
111
+ };
112
+ const stopChild = (dueToLimit = false) => {
113
+ if (!child.killed) {
114
+ killedDueToLimit = dueToLimit;
115
+ child.kill();
116
+ }
117
+ };
118
+ const onAbort = () => {
119
+ aborted = true;
120
+ stopChild();
121
+ };
122
+ signal?.addEventListener('abort', onAbort, { once: true });
123
+ child.stderr?.on('data', (chunk) => {
124
+ stderr += chunk.toString();
125
+ });
126
+ const formatBlock = async (filePath, lineNumber) => {
127
+ const relativePath = formatPath(filePath);
128
+ const lines = await getFileLines(filePath);
129
+ if (!lines.length) {
130
+ return [`${relativePath}:${lineNumber}: (unable to read file)`];
131
+ }
132
+ const block = [];
133
+ const start = contextValue > 0 ? Math.max(1, lineNumber - contextValue) : lineNumber;
134
+ const end = contextValue > 0 ? Math.min(lines.length, lineNumber + contextValue) : lineNumber;
135
+ for (let current = start; current <= end; current++) {
136
+ const lineText = lines[current - 1] ?? '';
137
+ const sanitized = lineText.replace(/\r/g, '');
138
+ const isMatchLine = current === lineNumber;
139
+ // Truncate long lines
140
+ const { text: truncatedText, wasTruncated } = truncateLine(sanitized);
141
+ if (wasTruncated) {
142
+ linesTruncated = true;
143
+ }
144
+ if (isMatchLine) {
145
+ block.push(`${relativePath}:${current}: ${truncatedText}`);
146
+ }
147
+ else {
148
+ block.push(`${relativePath}-${current}- ${truncatedText}`);
149
+ }
150
+ }
151
+ return block;
152
+ };
153
+ // Collect matches during streaming, format after
154
+ const matches = [];
155
+ rl.on('line', (line) => {
156
+ if (!line.trim() || matchCount >= effectiveLimit) {
157
+ return;
158
+ }
159
+ let event;
160
+ try {
161
+ event = JSON.parse(line);
162
+ }
163
+ catch {
164
+ return;
165
+ }
166
+ if (event.type === 'match') {
167
+ matchCount++;
168
+ const filePath = event.data?.path?.text;
169
+ const lineNumber = event.data?.line_number;
170
+ if (filePath && typeof lineNumber === 'number') {
171
+ matches.push({ filePath, lineNumber });
172
+ }
173
+ if (matchCount >= effectiveLimit) {
174
+ matchLimitReached = true;
175
+ stopChild(true);
176
+ }
177
+ }
178
+ });
179
+ child.on('error', (error) => {
180
+ cleanup();
181
+ settle(() => reject(new Error(`Failed to run ripgrep: ${error.message}`)));
182
+ });
183
+ child.on('close', async (code) => {
184
+ cleanup();
185
+ if (aborted) {
186
+ settle(() => reject(new Error('Operation aborted')));
187
+ return;
188
+ }
189
+ if (!killedDueToLimit && code !== 0 && code !== 1) {
190
+ const errorMsg = stderr.trim() || `ripgrep exited with code ${code}`;
191
+ settle(() => reject(new Error(errorMsg)));
192
+ return;
193
+ }
194
+ if (matchCount === 0) {
195
+ settle(() => resolve({
196
+ content: [{ type: 'text', content: 'No matches found' }],
197
+ details: undefined,
198
+ }));
199
+ return;
200
+ }
201
+ // Format matches (async to support remote file reading)
202
+ for (const match of matches) {
203
+ const block = await formatBlock(match.filePath, match.lineNumber);
204
+ outputLines.push(...block);
205
+ }
206
+ // Apply byte truncation (no line limit since we already have match limit)
207
+ const rawOutput = outputLines.join('\n');
208
+ const truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });
209
+ let output = truncation.content;
210
+ const details = {};
211
+ // Build notices
212
+ const notices = [];
213
+ if (matchLimitReached) {
214
+ notices.push(`${effectiveLimit} matches limit reached. Use limit=${effectiveLimit * 2} for more, or refine pattern`);
215
+ details.matchLimitReached = effectiveLimit;
216
+ }
217
+ if (truncation.truncated) {
218
+ notices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);
219
+ details.truncation = truncation;
220
+ }
221
+ if (linesTruncated) {
222
+ notices.push(`Some lines truncated to ${GREP_MAX_LINE_LENGTH} chars. Use read tool to see full lines`);
223
+ details.linesTruncated = true;
224
+ }
225
+ if (notices.length > 0) {
226
+ output += `\n\n[${notices.join('. ')}]`;
227
+ }
228
+ settle(() => resolve({
229
+ content: [{ type: 'text', content: output }],
230
+ details: Object.keys(details).length > 0 ? details : undefined,
231
+ }));
232
+ });
233
+ }
234
+ catch (err) {
235
+ settle(() => reject(err));
236
+ }
237
+ })();
238
+ });
239
+ },
240
+ };
241
+ }
242
+ /** Default grep tool using process.cwd() - for backwards compatibility */
243
+ export const grepTool = createGrepTool(process.cwd());
244
+ //# sourceMappingURL=grep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { type BashToolOptions } from './bash.js';
2
+ import { type ReadToolOptions } from './read.js';
3
+ import type { AgentTool } from '@ank1015/llm-sdk';
4
+ export { type BashOperations, type BashSpawnContext, type BashSpawnHook, type BashToolDetails, type BashToolInput, type BashToolOptions, bashTool, createBashTool, } from './bash.js';
5
+ export { createEditTool, type EditOperations, type EditToolDetails, type EditToolInput, type EditToolOptions, editTool, } from './edit.js';
6
+ export { createFindTool, type FindOperations, type FindToolDetails, type FindToolInput, type FindToolOptions, findTool, } from './find.js';
7
+ export { createGrepTool, type GrepOperations, type GrepToolDetails, type GrepToolInput, type GrepToolOptions, grepTool, } from './grep.js';
8
+ export { createLsTool, type LsOperations, type LsToolDetails, type LsToolInput, type LsToolOptions, lsTool, } from './ls.js';
9
+ export { createReadTool, type ReadOperations, type ReadToolDetails, type ReadToolInput, type ReadToolOptions, readTool, } from './read.js';
10
+ export { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, type TruncationOptions, type TruncationResult, truncateHead, truncateLine, truncateTail, } from './truncate.js';
11
+ export { createWriteTool, type WriteOperations, type WriteToolInput, type WriteToolOptions, writeTool, } from './write.js';
12
+ /** Tool type (AgentTool from pi-ai) */
13
+ export type Tool = AgentTool<any>;
14
+ export declare const codingTools: Tool[];
15
+ export declare const readOnlyTools: Tool[];
16
+ export declare const allTools: {
17
+ read: AgentTool<import("@sinclair/typebox").TObject<{
18
+ path: import("@sinclair/typebox").TString;
19
+ offset: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
20
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
21
+ }>, unknown>;
22
+ bash: AgentTool<import("@sinclair/typebox").TObject<{
23
+ command: import("@sinclair/typebox").TString;
24
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
25
+ }>, unknown>;
26
+ edit: AgentTool<import("@sinclair/typebox").TObject<{
27
+ path: import("@sinclair/typebox").TString;
28
+ oldText: import("@sinclair/typebox").TString;
29
+ newText: import("@sinclair/typebox").TString;
30
+ }>, unknown>;
31
+ write: AgentTool<import("@sinclair/typebox").TObject<{
32
+ path: import("@sinclair/typebox").TString;
33
+ content: import("@sinclair/typebox").TString;
34
+ }>, unknown>;
35
+ grep: AgentTool<import("@sinclair/typebox").TObject<{
36
+ pattern: import("@sinclair/typebox").TString;
37
+ path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
38
+ glob: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
39
+ ignoreCase: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
40
+ literal: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
41
+ context: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
42
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
43
+ }>, unknown>;
44
+ find: AgentTool<import("@sinclair/typebox").TObject<{
45
+ pattern: import("@sinclair/typebox").TString;
46
+ path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
47
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
48
+ }>, unknown>;
49
+ ls: AgentTool<import("@sinclair/typebox").TObject<{
50
+ path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
51
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
52
+ }>, unknown>;
53
+ };
54
+ export type ToolName = keyof typeof allTools;
55
+ export interface ToolsOptions {
56
+ /** Options for the read tool */
57
+ read?: ReadToolOptions;
58
+ /** Options for the bash tool */
59
+ bash?: BashToolOptions;
60
+ }
61
+ /**
62
+ * Create coding tools configured for a specific working directory.
63
+ */
64
+ export declare function createCodingTools(cwd: string, options?: ToolsOptions): Tool[];
65
+ /**
66
+ * Create read-only tools configured for a specific working directory.
67
+ */
68
+ export declare function createReadOnlyTools(cwd: string, options?: ToolsOptions): Tool[];
69
+ /**
70
+ * Create all tools configured for a specific working directory.
71
+ */
72
+ export declare function createAllTools(cwd: string, options?: ToolsOptions): Record<ToolName, Tool>;
73
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAA4B,MAAM,WAAW,CAAC;AAK3E,OAAO,EAAkB,KAAK,eAAe,EAAY,MAAM,WAAW,CAAC;AAG3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,QAAQ,EACR,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,MAAM,GACP,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,uCAAuC;AACvC,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAGlC,eAAO,MAAM,WAAW,EAAE,IAAI,EAA8C,CAAC;AAG7E,eAAO,MAAM,aAAa,EAAE,IAAI,EAA2C,CAAC;AAG5E,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQpB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,QAAQ,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,gCAAgC;IAChC,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,CAO7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,CAO/E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAU1F"}