agentx-sdk 0.5.3 → 0.5.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.
@@ -1,3 +1,3 @@
1
1
  import type { AgentTool } from '../../contracts/entities/agent-tool.js';
2
- export declare function createFileEditTool(): AgentTool;
2
+ export declare function createFileEditTool(workingDir?: string): AgentTool;
3
3
  //# sourceMappingURL=file-edit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-edit.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/file-edit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AASxE,wBAAgB,kBAAkB,IAAI,SAAS,CA6C9C"}
1
+ {"version":3,"file":"file-edit.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/file-edit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAUxE,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAqDjE"}
@@ -1,12 +1,13 @@
1
1
  import { readFile, writeFile } from 'node:fs/promises';
2
2
  import { z } from 'zod';
3
+ import { assertSafePath } from './path-guard.js';
3
4
  const FileEditParams = z.object({
4
5
  file_path: z.string().describe('Absolute path to the file to edit'),
5
6
  old_string: z.string().describe('Exact string to find and replace'),
6
7
  new_string: z.string().describe('Replacement string'),
7
8
  replace_all: z.boolean().optional().describe('Replace all occurrences. Default: false (must be unique).'),
8
9
  });
9
- export function createFileEditTool() {
10
+ export function createFileEditTool(workingDir) {
10
11
  return {
11
12
  name: 'Edit',
12
13
  description: 'Find and replace exact strings in a file. By default, old_string must be unique in the file.',
@@ -14,6 +15,14 @@ export function createFileEditTool() {
14
15
  getFilePath: (args) => args.file_path,
15
16
  async execute(rawArgs) {
16
17
  const { file_path, old_string, new_string, replace_all } = rawArgs;
18
+ if (workingDir) {
19
+ try {
20
+ assertSafePath(file_path, workingDir);
21
+ }
22
+ catch (error) {
23
+ return { content: error.message, isError: true };
24
+ }
25
+ }
17
26
  let content;
18
27
  try {
19
28
  content = await readFile(file_path, 'utf-8');
@@ -1 +1 @@
1
- {"version":3,"file":"file-edit.js","sourceRoot":"","sources":["../../../src/tools/builtin/file-edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACrD,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;CAC1G,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,8FAA8F;QAC3G,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,IAA8B,CAAC,SAAS;QAEhE,KAAK,CAAC,OAAO,CAAC,OAAgB;YAC5B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,OAAyC,CAAC;YAErG,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,qBAAqB,SAAS,MAAO,KAAe,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACpG,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClC,OAAO,EAAE,OAAO,EAAE,2BAA2B,SAAS,iCAAiC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3G,CAAC;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBACnD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACd,OAAO;wBACL,OAAO,EAAE,oBAAoB,KAAK,sBAAsB,SAAS,oEAAoE;wBACrI,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,WAAW;gBACzB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAE5C,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,sBAAsB,SAAS,MAAO,KAAe,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACrG,CAAC;YAED,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,OAAO,uBAAuB,SAAS,KAAK,YAAY,eAAe,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;QACxG,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"file-edit.js","sourceRoot":"","sources":["../../../src/tools/builtin/file-edit.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { AgentTool } from '../../contracts/entities/agent-tool.js';
2
- export declare function createFileWriteTool(): AgentTool;
2
+ export declare function createFileWriteTool(workingDir?: string): AgentTool;
3
3
  //# sourceMappingURL=file-write.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-write.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/file-write.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAOxE,wBAAgB,mBAAmB,IAAI,SAAS,CAqB/C"}
1
+ {"version":3,"file":"file-write.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/file-write.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAQxE,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CA6BlE"}
@@ -1,11 +1,12 @@
1
1
  import { writeFile, mkdir } from 'node:fs/promises';
2
2
  import { dirname } from 'node:path';
3
3
  import { z } from 'zod';
4
+ import { assertSafePath } from './path-guard.js';
4
5
  const FileWriteParams = z.object({
5
6
  file_path: z.string().describe('Absolute path to the file to write'),
6
7
  content: z.string().describe('Content to write to the file'),
7
8
  });
8
- export function createFileWriteTool() {
9
+ export function createFileWriteTool(workingDir) {
9
10
  return {
10
11
  name: 'Write',
11
12
  description: 'Write content to a file. Creates parent directories if needed. Overwrites existing files.',
@@ -14,6 +15,14 @@ export function createFileWriteTool() {
14
15
  getFilePath: (args) => args.file_path,
15
16
  async execute(rawArgs) {
16
17
  const { file_path, content } = rawArgs;
18
+ if (workingDir) {
19
+ try {
20
+ assertSafePath(file_path, workingDir);
21
+ }
22
+ catch (error) {
23
+ return { content: error.message, isError: true };
24
+ }
25
+ }
17
26
  try {
18
27
  await mkdir(dirname(file_path), { recursive: true });
19
28
  await writeFile(file_path, content, 'utf-8');
@@ -1 +1 @@
1
- {"version":3,"file":"file-write.js","sourceRoot":"","sources":["../../../src/tools/builtin/file-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,2FAA2F;QACxG,UAAU,EAAE,eAAe;QAC3B,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,IAA8B,CAAC,SAAS;QAEhE,KAAK,CAAC,OAAO,CAAC,OAAgB;YAC5B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAA0C,CAAC;YAE1E,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrD,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAClD,OAAO,sBAAsB,KAAK,aAAa,SAAS,EAAE,CAAC;YAC7D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,sBAAsB,SAAS,MAAO,KAAe,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACrG,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"file-write.js","sourceRoot":"","sources":["../../../src/tools/builtin/file-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB,CAAC,UAAmB;IACrD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,2FAA2F;QACxG,UAAU,EAAE,eAAe;QAC3B,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,IAA8B,CAAC,SAAS;QAEhE,KAAK,CAAC,OAAO,CAAC,OAAgB;YAC5B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAA0C,CAAC;YAE1E,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACxC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC9D,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrD,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAClD,OAAO,sBAAsB,KAAK,aAAa,SAAS,EAAE,CAAC;YAC7D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,sBAAsB,SAAS,MAAO,KAAe,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACrG,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Asserts that filePath is contained within rootDir.
3
+ * Throws if the resolved path escapes the root (path traversal).
4
+ */
5
+ export declare function assertSafePath(filePath: string, rootDir: string): void;
6
+ //# sourceMappingURL=path-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-guard.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/path-guard.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMtE"}
@@ -0,0 +1,13 @@
1
+ import { resolve, relative, isAbsolute } from 'node:path';
2
+ /**
3
+ * Asserts that filePath is contained within rootDir.
4
+ * Throws if the resolved path escapes the root (path traversal).
5
+ */
6
+ export function assertSafePath(filePath, rootDir) {
7
+ const abs = resolve(filePath);
8
+ const rel = relative(rootDir, abs);
9
+ if (rel.startsWith('..') || isAbsolute(rel)) {
10
+ throw new Error(`Path traversal blocked: "${filePath}" is outside working directory "${rootDir}"`);
11
+ }
12
+ }
13
+ //# sourceMappingURL=path-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-guard.js","sourceRoot":"","sources":["../../../src/tools/builtin/path-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE1D;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAe;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,mCAAmC,OAAO,GAAG,CAAC,CAAC;IACrG,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentx-sdk",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "AgentX SDK - Standalone TypeScript agent library with streaming, tools, memory, knowledge (RAG), and skills",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",