ai-agent-test 0.9.10 → 0.10.0

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/README.md CHANGED
@@ -6,15 +6,17 @@ A lightweight, extensible agentic workflow system built with TypeScript and the
6
6
 
7
7
  It works well with highend models like MiniMax too (OpenRouter). The agent sends minimum context which means a lot less money spent 💰.
8
8
 
9
+ See [TODOs.md](./TODOs.md) for roadmap, features in development, and known bugs.
10
+
9
11
  ## 🌟 Features
10
12
 
11
- - **Agentic Architecture**: Multi-iteration agent loop with tool calling capabilities
12
- - **Local LLM Support**: Connect to any OpenAI-compatible API endpoint or Google Generative AI
13
- - **Extensible Tools**: Built-in tools for file operations, bash execution, web search, and more
13
+ - Agentic Architecture: Multi-iteration agent loop with tool calling capabilities
14
+ - Local LLM Support: Connect to any OpenAI-compatible API endpoint or Google Generative AI
15
+ - Extensible Tools: Built-in tools for file operations, bash execution, web search, and more
14
16
  - See [src/tools/](./src/tools/) for all available tools
15
- - **Interactive CLI**: Real-time chat interface with streaming responses
16
- - **Session Management**: Session logs are stored in `~/.ai/logs/` to track agent behavior and progress. Agent can also restore previous sessions to continue conversations.
17
- - **Custom System Prompt**: Create `~/.ai/SYSTEM.md` to provide custom instructions that augment the agent's system prompt
17
+ - Interactive CLI: Real-time chat interface with streaming responses
18
+ - Session Management: Session logs are stored in `~/.ai/logs/` to track agent behavior and progress. Agent can also restore previous sessions to continue conversations.
19
+ - Custom System Prompt: Create `~/.ai/SYSTEM.md` or use `--system` CLI option to provide custom instructions that augment the agent's system prompt
18
20
 
19
21
  ## 🛠️ Prerequisites
20
22
 
@@ -101,6 +103,7 @@ ai
101
103
  ### Additional Environment Variables
102
104
 
103
105
  - `BRAVE_API_KEY`: (Required) API key for Brave Search for the internet search tool
106
+ - `AI_SYSTEM_PROMPT`: Additional system prompt content (set via `--system` CLI option)
104
107
 
105
108
  ### Session Management
106
109
 
package/SYSTEM.md CHANGED
@@ -30,4 +30,6 @@ Metadata:
30
30
 
31
31
  - Session (re)start: {date}
32
32
  - Current project: {pwd}
33
- - Root folder files of the project: {ls}
33
+ - ls: {ls}
34
+ - ls src: {ls src}
35
+ - ls packages: {ls packages}
package/TODOs.md CHANGED
@@ -3,6 +3,8 @@
3
3
  - 1. [x] find user's machine's ~/.ai/SYSTEM.md file and concat to ai-agent's system prompt.
4
4
  - 2. [x] add doc retrival tool. To get latest lib info so the agent can solve tasks more effectively. Not just library, it can be doc for technologies like postgres. so approach should be broader not just like npm library. and check internet_search tool if you can extract logic and have shared code. also improve SYSTEM.md once it's done.
5
5
  - 3. [ ] improve loop with testing tools so the agent can complete tasks in better shape.
6
+ - 4. [ ] Compaction-like feature, but not exactly compaction that is in other coding agents. Summarize current conversation and save to a file, then restart a new session with the summary.
7
+ - 5. [ ] one-off CLI command to run a task without starting the agent loop. For example, `ai-agent run "write a function to reverse a string in python"`. This may evolve into a sub-agent feature.
6
8
 
7
9
  ## Backlog ideas
8
10
 
@@ -10,5 +12,6 @@
10
12
 
11
13
  ## Bugs
12
14
 
13
- - 1. [ ] user can backspace to delete even "Prompt: ".
15
+ - 1. [x] user can backspace to delete even "Prompt: ".
14
16
  - 2. [ ] when user input gets to next line, the cursor can't come back to the first line with backspace. Backspace seems actually deleting but it's not visible to user.
17
+ - 3. [x] edit tool (or read tool) doesn't work well when there is backslash in the content that they need to handle. for example the codebase had a line like `systemPrompt += "\n\n---\n\nCLI System Prompt\n\" + cliSystemPrompt` and couldn't resolve it because there was a backslash before closing quote.
package/bin/ai CHANGED
@@ -31,6 +31,11 @@ const args = yargs(hideBin(argv))
31
31
  type: "number",
32
32
  describe: "Resume with session index from `ai sessions`",
33
33
  })
34
+ .option("system", {
35
+ alias: "sys",
36
+ type: "string",
37
+ describe: "Additional system prompt content to append",
38
+ })
34
39
  .command(
35
40
  "models",
36
41
  "List all available models",
@@ -120,6 +125,11 @@ if (args.session !== undefined) {
120
125
  console.log(`Loaded session ${sessionIndex} from ${sessionFile}`)
121
126
  }
122
127
 
128
+ // Handle additional system prompt from --system option
129
+ if (args.system !== undefined) {
130
+ process.env.AI_SYSTEM_PROMPT = args.system
131
+ }
132
+
123
133
  // Load config after setting model index
124
134
  const config = loadConfig()
125
135
  process.env.AI_MODEL_APITYPE = config.modelApiType
package/dist/index.js CHANGED
@@ -74,15 +74,26 @@ const userSystemPromptPath = join(homedir(), ".ai", "SYSTEM.md");
74
74
  let userSystemPrompt = "";
75
75
  try {
76
76
  userSystemPrompt = fs.readFileSync(userSystemPromptPath, "utf-8");
77
- systemPrompt += "\n\n---\n\nUser Custom System Prompt\n\n" + userSystemPrompt;
77
+ systemPrompt += "\n\n---\n\nUser Custom System Prompt:\n" + userSystemPrompt;
78
78
  }
79
79
  catch {
80
80
  // User's SYSTEM.md doesn't exist, which is fine
81
81
  }
82
+ // Check for additional system prompt from --system CLI option
83
+ const cliSystemPrompt = process.env.AI_SYSTEM_PROMPT || "";
84
+ if (cliSystemPrompt) {
85
+ systemPrompt += "\n\n---\n\nCLI System Prompt\n" + cliSystemPrompt;
86
+ }
82
87
  systemPrompt = systemPrompt
83
88
  .replace("{date}", new Date().toLocaleString())
84
89
  .replace("{pwd}", process.cwd())
85
- .replace("{ls}", fs.readdirSync(process.cwd()).join(", "));
90
+ .replace("{ls}", fs.readdirSync(process.cwd()).join(", "))
91
+ .replace("{ls src}", fs.existsSync(path.join(__dirname, "../src"))
92
+ ? fs.readdirSync(path.join(__dirname, "../src")).join(", ")
93
+ : "not found")
94
+ .replace("{ls packages}", fs.existsSync(path.join(__dirname, "../packages"))
95
+ ? fs.readdirSync(path.join(__dirname, "../packages")).join(", ")
96
+ : "not found");
86
97
  let interruptRequested = false;
87
98
  // Check for loaded messages from a previous session via env var
88
99
  const messages = [];
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,28 @@
1
1
  import { z } from "zod";
2
- export interface Edit {
2
+ export interface ReplaceEdit {
3
3
  oldText: string;
4
4
  newText: string;
5
5
  useReplaceAll?: boolean;
6
6
  }
7
+ export interface LineEdit {
8
+ startLine: number;
9
+ endLine?: number;
10
+ newText: string;
11
+ }
12
+ export type Edit = ReplaceEdit | LineEdit;
7
13
  export declare const editTool: {
8
14
  description: string;
9
15
  inputSchema: z.ZodObject<{
10
16
  path: z.ZodString;
11
- edits: z.ZodArray<z.ZodObject<{
17
+ edits: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
12
18
  oldText: z.ZodString;
13
19
  newText: z.ZodString;
14
20
  useReplaceAll: z.ZodOptional<z.ZodBoolean>;
15
- }, z.core.$strip>>;
21
+ }, z.core.$strip>, z.ZodObject<{
22
+ startLine: z.ZodNumber;
23
+ endLine: z.ZodOptional<z.ZodNumber>;
24
+ newText: z.ZodString;
25
+ }, z.core.$strip>]>>;
16
26
  }, z.core.$strip>;
17
27
  execute: ({ path: filePath, edits, }: {
18
28
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAWD,eAAO,MAAM,QAAQ;;;;;;;;;;0CAUhB;QACD,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,IAAI,EAAE,CAAA;KACd;;;;;;;;;;;;;;;CA8DF,CAAA"}
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,IAAI,GAAG,WAAW,GAAG,QAAQ,CAAA;AAiFzC,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;0CAchB;QACD,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,IAAI,EAAE,CAAA;KACd;;;;;;;;;;;;;;;CAiFF,CAAA"}
@@ -2,7 +2,7 @@ import { z } from "zod";
2
2
  import fs from "fs";
3
3
  import path from "path";
4
4
  import chalk from "chalk";
5
- const editSchema = z.object({
5
+ const replaceEditSchema = z.object({
6
6
  oldText: z.string().describe("The exact text for JS's `replace()` function"),
7
7
  newText: z.string().describe("The new text to insert"),
8
8
  useReplaceAll: z
@@ -10,11 +10,67 @@ const editSchema = z.object({
10
10
  .optional()
11
11
  .describe("If true, replace all occurrences instead of just the first one"),
12
12
  });
13
+ const lineEditSchema = z.object({
14
+ startLine: z
15
+ .number()
16
+ .int()
17
+ .positive()
18
+ .describe("The 1-indexed line number where replacement should start. Use this when exact text contains many escape characters."),
19
+ endLine: z
20
+ .number()
21
+ .int()
22
+ .positive()
23
+ .optional()
24
+ .describe("The 1-indexed line number where replacement should end. Defaults to startLine."),
25
+ newText: z
26
+ .string()
27
+ .describe("The replacement text for the specified line range."),
28
+ });
29
+ const editSchema = z.union([replaceEditSchema, lineEditSchema]);
30
+ function isReplaceEdit(edit) {
31
+ return "oldText" in edit;
32
+ }
33
+ function applyLineEdit(content, edit) {
34
+ const lines = content.split("\n");
35
+ const startLine = edit.startLine;
36
+ const endLine = edit.endLine ?? startLine;
37
+ if (endLine < startLine) {
38
+ return {
39
+ success: false,
40
+ error: `Invalid line range: endLine (${endLine}) must be greater than or equal to startLine (${startLine}).`,
41
+ };
42
+ }
43
+ if (startLine > lines.length) {
44
+ return {
45
+ success: false,
46
+ error: `Invalid line range: startLine ${startLine} is beyond the end of the file (${lines.length} lines).`,
47
+ };
48
+ }
49
+ if (endLine > lines.length) {
50
+ return {
51
+ success: false,
52
+ error: `Invalid line range: endLine ${endLine} is beyond the end of the file (${lines.length} lines).`,
53
+ };
54
+ }
55
+ const replacementLines = edit.newText.split("\n");
56
+ const updatedLines = [
57
+ ...lines.slice(0, startLine - 1),
58
+ ...replacementLines,
59
+ ...lines.slice(endLine),
60
+ ];
61
+ const updatedContent = updatedLines.join("\n");
62
+ return {
63
+ success: true,
64
+ content: updatedContent,
65
+ };
66
+ }
13
67
  export const editTool = {
14
- description: "Make precise, targeted edits to existing files. Replace specific text patterns without rewriting the entire file. Use this for modifications when you want to keep most of the file intact and only change specific lines or sections.",
68
+ description: "Make precise, targeted edits to existing files. Use exact text replacement for simple changes, or replace a line range when escaped characters make exact matching unreliable.",
15
69
  inputSchema: z.object({
16
70
  path: z.string().describe("The path to the file to edit"),
17
- edits: z.array(editSchema).describe("Array of edits to apply."),
71
+ edits: z
72
+ .array(editSchema)
73
+ .describe("Array of edits to apply. Each edit can be an exact text replacement or a line-range replacement."),
18
74
  }),
19
75
  execute: async ({ path: filePath, edits, }) => {
20
76
  console.log(chalk.yellow(`\n[TOOL - edit] Editing file: ${filePath} (edits: ${edits.length})`));
@@ -30,18 +86,35 @@ export const editTool = {
30
86
  let editsApplied = 0;
31
87
  for (const edit of edits) {
32
88
  let newContent = content;
33
- if (edit.useReplaceAll) {
34
- newContent = content.replaceAll(edit.oldText, edit.newText);
89
+ if (isReplaceEdit(edit)) {
90
+ if (edit.useReplaceAll) {
91
+ newContent = content.replaceAll(edit.oldText, edit.newText);
92
+ }
93
+ else {
94
+ newContent = content.replace(edit.oldText, edit.newText);
95
+ }
35
96
  }
36
97
  else {
37
- newContent = content.replace(edit.oldText, edit.newText);
98
+ const lineEditResult = applyLineEdit(content, edit);
99
+ if (!lineEditResult.success) {
100
+ return {
101
+ success: false,
102
+ error: lineEditResult.error,
103
+ };
104
+ }
105
+ newContent = lineEditResult.content;
38
106
  }
39
107
  if (newContent !== content) {
40
108
  editsApplied++;
41
109
  content = newContent;
42
110
  }
43
111
  else {
44
- console.warn(chalk.yellow(`[TOOL - edit] ⚠️ oldText not found in file: ${edit.oldText.substring(0, 50)}...`));
112
+ if (isReplaceEdit(edit)) {
113
+ console.warn(chalk.yellow(`[TOOL - edit] ⚠️ oldText not found in file: ${edit.oldText.substring(0, 50)}...`));
114
+ }
115
+ else {
116
+ console.warn(chalk.yellow(`[TOOL - edit] ⚠️ line range ${edit.startLine}-${edit.endLine ?? edit.startLine} produced no change.`));
117
+ }
45
118
  }
46
119
  }
47
120
  fs.writeFileSync(fullPath, content, "utf-8");
@@ -1 +1 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"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"}
@@ -110,11 +110,13 @@ export declare const tools: {
110
110
  path: import("zod").ZodString;
111
111
  offset: import("zod").ZodOptional<import("zod").ZodNumber>;
112
112
  limit: import("zod").ZodOptional<import("zod").ZodNumber>;
113
+ includeLineNumbers: import("zod").ZodOptional<import("zod").ZodBoolean>;
113
114
  }, import("zod/v4/core").$strip>;
114
- execute: ({ path: filePath, offset, limit, }: {
115
+ execute: ({ path: filePath, offset, limit, includeLineNumbers, }: {
115
116
  path: string;
116
117
  offset?: number;
117
118
  limit?: number;
119
+ includeLineNumbers?: boolean;
118
120
  }) => Promise<{
119
121
  success: boolean;
120
122
  output: string;
@@ -153,11 +155,15 @@ export declare const tools: {
153
155
  description: string;
154
156
  inputSchema: import("zod").ZodObject<{
155
157
  path: import("zod").ZodString;
156
- edits: import("zod").ZodArray<import("zod").ZodObject<{
158
+ edits: import("zod").ZodArray<import("zod").ZodUnion<readonly [import("zod").ZodObject<{
157
159
  oldText: import("zod").ZodString;
158
160
  newText: import("zod").ZodString;
159
161
  useReplaceAll: import("zod").ZodOptional<import("zod").ZodBoolean>;
160
- }, import("zod/v4/core").$strip>>;
162
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
163
+ startLine: import("zod").ZodNumber;
164
+ endLine: import("zod").ZodOptional<import("zod").ZodNumber>;
165
+ newText: import("zod").ZodString;
166
+ }, import("zod/v4/core").$strip>]>>;
161
167
  }, import("zod/v4/core").$strip>;
162
168
  execute: ({ path: filePath, edits, }: {
163
169
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,SAAS;;;;;;;;;;CAUZ,CAAA;AAEV,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAL,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAW69L,CAAC;4BAA+B,CAAC;sBAAyB,CAAC;6BAA8B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAVrjM,CAAC;iBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASP,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,SAAS;;;;;;;;;;CAUZ,CAAA;AAEV,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAL,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAW69L,CAAC;4BAA+B,CAAC;sBAAyB,CAAC;6BAA8B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAA1uL,CAAC;iBAAkB,CAAC;8BAA+B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CADlX,CAAA"}
@@ -5,11 +5,13 @@ export declare const readTool: {
5
5
  path: z.ZodString;
6
6
  offset: z.ZodOptional<z.ZodNumber>;
7
7
  limit: z.ZodOptional<z.ZodNumber>;
8
+ includeLineNumbers: z.ZodOptional<z.ZodBoolean>;
8
9
  }, z.core.$strip>;
9
- execute: ({ path: filePath, offset, limit, }: {
10
+ execute: ({ path: filePath, offset, limit, includeLineNumbers, }: {
10
11
  path: string;
11
12
  offset?: number;
12
13
  limit?: number;
14
+ includeLineNumbers?: boolean;
13
15
  }) => Promise<{
14
16
  success: boolean;
15
17
  output: string;
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,QAAQ;;;;;;;kDAsBhB;QACD,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;KACf;;;;;;;;;CA6DF,CAAA"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiBvB,eAAO,MAAM,QAAQ;;;;;;;;sEA6BhB;QACD,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAC7B;;;;;;;;;CAgEF,CAAA"}
@@ -2,8 +2,18 @@ import { z } from "zod";
2
2
  import fs from "fs";
3
3
  import path from "path";
4
4
  import chalk from "chalk";
5
+ function formatLineNumberedOutput(lines, startIndex) {
6
+ const lastLineNumber = startIndex + lines.length;
7
+ const width = String(lastLineNumber).length;
8
+ return lines
9
+ .map((line, index) => {
10
+ const lineNumber = String(startIndex + index + 1).padStart(width, " ");
11
+ return `${lineNumber}| ${line}`;
12
+ })
13
+ .join("\n");
14
+ }
5
15
  export const readTool = {
6
- description: "Read a file and return its contents. Useful for viewing source code, configuration files, documentation, or any text-based files.",
16
+ description: "Read a file and return its contents. Useful for viewing source code, configuration files, documentation, or any text-based files. You can optionally include line numbers when you need to make precise edits to escape-heavy content.",
7
17
  inputSchema: z.object({
8
18
  path: z.string().describe("The path to the file to read"),
9
19
  offset: z
@@ -14,9 +24,13 @@ export const readTool = {
14
24
  .number()
15
25
  .optional()
16
26
  .describe("Maximum number of lines to read. If not specified, reads the entire file."),
27
+ includeLineNumbers: z
28
+ .boolean()
29
+ .optional()
30
+ .describe("If true, prefix each returned line with its 1-indexed line number. Useful when escaped content makes exact text matching difficult."),
17
31
  }),
18
- execute: async ({ path: filePath, offset = 1, limit, }) => {
19
- console.log(chalk.yellow(`\n[TOOL - read] Reading file: ${filePath} (offset: ${offset}, limit: ${limit ?? "none"})`));
32
+ execute: async ({ path: filePath, offset = 1, limit, includeLineNumbers = false, }) => {
33
+ console.log(chalk.yellow(`\n[TOOL - read] Reading file: ${filePath} (offset: ${offset}, limit: ${limit ?? "none"}, includeLineNumbers: ${includeLineNumbers})`));
20
34
  try {
21
35
  // Resolve the path relative to current working directory
22
36
  const fullPath = path.resolve(filePath);
@@ -40,7 +54,9 @@ export const readTool = {
40
54
  };
41
55
  }
42
56
  const selectedLines = lines.slice(startIndex, endIndex);
43
- const resultContent = selectedLines.join("\n");
57
+ const resultContent = includeLineNumbers
58
+ ? formatLineNumberedOutput(selectedLines, startIndex)
59
+ : selectedLines.join("\n");
44
60
  let metadata = `\n\n[Read tool metadata:`;
45
61
  metadata += `\n File: ${fullPath}`;
46
62
  metadata += `\n Total lines in file: ${lines.length}`;
@@ -48,6 +64,7 @@ export const readTool = {
48
64
  if (limit) {
49
65
  metadata += `\n Limit: ${limit}`;
50
66
  }
67
+ metadata += `\n Include line numbers: ${includeLineNumbers}`;
51
68
  metadata += `\n Lines returned: ${selectedLines.length}`;
52
69
  metadata += `\n]`;
53
70
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-agent-test",
3
- "version": "0.9.10",
3
+ "version": "0.10.0",
4
4
  "main": "dist/index.js",
5
5
  "bin": {
6
6
  "ai": "./bin/ai"