bash-tool 0.1.4 → 1.0.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 +12 -4
- package/dist/AGENTS.md +9 -2
- package/dist/tool.d.ts.map +1 -1
- package/dist/tool.js +4 -9
- package/dist/tool.js.map +1 -1
- package/dist/tools/bash.d.ts +5 -2
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +20 -4
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/read-file.d.ts +0 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +1 -2
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/write-file.d.ts +0 -1
- package/dist/tools/write-file.d.ts.map +1 -1
- package/dist/tools/write-file.js +1 -2
- package/dist/tools/write-file.js.map +1 -1
- package/dist/types.d.ts +58 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -91,13 +91,21 @@ const { tools } = await createBashTool({
|
|
|
91
91
|
});
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
###
|
|
94
|
+
### Intercept bash commands
|
|
95
95
|
|
|
96
96
|
```typescript
|
|
97
97
|
const { tools } = await createBashTool({
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
onBeforeBashCall: ({ command }) => {
|
|
99
|
+
console.log("Running:", command);
|
|
100
|
+
// Optionally modify the command
|
|
101
|
+
if (command.includes("rm -rf")) {
|
|
102
|
+
return { command: "echo 'Blocked dangerous command'" };
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
onAfterBashCall: ({ command, result }) => {
|
|
106
|
+
console.log(`Exit code: ${result.exitCode}`);
|
|
107
|
+
// Optionally modify the result
|
|
108
|
+
return { result: { ...result, stdout: result.stdout.trim() } };
|
|
101
109
|
},
|
|
102
110
|
});
|
|
103
111
|
```
|
package/dist/AGENTS.md
CHANGED
|
@@ -77,11 +77,18 @@ const { tools } = await createBashTool({ sandbox: existingSandbox });
|
|
|
77
77
|
// Previous files and state preserved
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
###
|
|
80
|
+
### Intercept bash commands
|
|
81
81
|
|
|
82
82
|
```typescript
|
|
83
83
|
const { tools } = await createBashTool({
|
|
84
|
-
|
|
84
|
+
onBeforeBashCall: ({ command }) => {
|
|
85
|
+
console.log("Running:", command);
|
|
86
|
+
// Return modified command or undefined to proceed unchanged
|
|
87
|
+
},
|
|
88
|
+
onAfterBashCall: ({ command, result }) => {
|
|
89
|
+
console.log(`Exit: ${result.exitCode}`);
|
|
90
|
+
// Return modified result or undefined to proceed unchanged
|
|
91
|
+
},
|
|
85
92
|
});
|
|
86
93
|
```
|
|
87
94
|
|
package/dist/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAW,MAAM,YAAY,CAAC;AAI9E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAW,MAAM,YAAY,CAAC;AAI9E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,WAAW,CAAC,CA4DtB"}
|
package/dist/tool.js
CHANGED
|
@@ -77,18 +77,13 @@ export async function createBashTool(options = {}) {
|
|
|
77
77
|
cwd: destination,
|
|
78
78
|
files: fileList,
|
|
79
79
|
extraInstructions: options.extraInstructions,
|
|
80
|
-
|
|
80
|
+
onBeforeBashCall: options.onBeforeBashCall,
|
|
81
|
+
onAfterBashCall: options.onAfterBashCall,
|
|
81
82
|
});
|
|
82
83
|
const tools = {
|
|
83
84
|
bash,
|
|
84
|
-
readFile: createReadFileTool({
|
|
85
|
-
|
|
86
|
-
onCall: options.onCall,
|
|
87
|
-
}),
|
|
88
|
-
writeFile: createWriteFileTool({
|
|
89
|
-
sandbox,
|
|
90
|
-
onCall: options.onCall,
|
|
91
|
-
}),
|
|
85
|
+
readFile: createReadFileTool({ sandbox }),
|
|
86
|
+
writeFile: createWriteFileTool({ sandbox }),
|
|
92
87
|
};
|
|
93
88
|
return { bash, tools, sandbox };
|
|
94
89
|
}
|
package/dist/tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAiC,EAAE;IAEnC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,mBAAmB,CAAC;IAE/D,wCAAwC;IACxC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,MAAM,oBAAoB,GAA2B,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAChE,oBAAoB,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;IAC/C,CAAC;IAED,4BAA4B;IAC5B,IAAI,OAAgB,CAAC;IAErB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,oDAAoD;QACpD,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,OAAO,CAAC,OAAkB,CAAC;QACvC,CAAC;QAED,kCAAkC;QAClC,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACvE,MAAM,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,OAAO,GAAG,MAAM,qBAAqB,CAAC;YACpC,KAAK,EAAE,oBAAoB;YAC3B,GAAG,EAAE,WAAW;SACjB,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAG,qBAAqB,CAAC;QACjC,OAAO;QACP,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,QAAQ;QACf,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAiC,EAAE;IAEnC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,mBAAmB,CAAC;IAE/D,wCAAwC;IACxC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,MAAM,oBAAoB,GAA2B,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAChE,oBAAoB,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;IAC/C,CAAC;IAED,4BAA4B;IAC5B,IAAI,OAAgB,CAAC;IAErB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,oDAAoD;QACpD,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,OAAO,CAAC,OAAkB,CAAC;QACvC,CAAC;QAED,kCAAkC;QAClC,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACvE,MAAM,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,OAAO,GAAG,MAAM,qBAAqB,CAAC;YACpC,KAAK,EAAE,oBAAoB;YAC3B,GAAG,EAAE,WAAW;SACjB,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAG,qBAAqB,CAAC;QACjC,OAAO;QACP,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,QAAQ;QACf,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,IAAI;QACJ,QAAQ,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC;QACzC,SAAS,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC;KAC5C,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC"}
|
package/dist/tools/bash.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Sandbox } from "../types.js";
|
|
1
|
+
import type { AfterBashCallInput, AfterBashCallOutput, BeforeBashCallInput, BeforeBashCallOutput, Sandbox } from "../types.js";
|
|
2
2
|
export interface CreateBashToolOptions {
|
|
3
3
|
sandbox: Sandbox;
|
|
4
4
|
/** Working directory for command execution */
|
|
@@ -6,7 +6,10 @@ export interface CreateBashToolOptions {
|
|
|
6
6
|
/** List of file paths available in the sandbox (relative to cwd) */
|
|
7
7
|
files?: string[];
|
|
8
8
|
extraInstructions?: string;
|
|
9
|
-
|
|
9
|
+
/** Callback before command execution, can modify the command */
|
|
10
|
+
onBeforeBashCall?: (input: BeforeBashCallInput) => BeforeBashCallOutput | undefined;
|
|
11
|
+
/** Callback after command execution, can modify the result */
|
|
12
|
+
onAfterBashCall?: (input: AfterBashCallInput) => AfterBashCallOutput | undefined;
|
|
10
13
|
}
|
|
11
14
|
export declare function createBashExecuteTool(options: CreateBashToolOptions): import("ai").Tool<{
|
|
12
15
|
command: string;
|
package/dist/tools/bash.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,OAAO,EACR,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,CACjB,KAAK,EAAE,mBAAmB,KACvB,oBAAoB,GAAG,SAAS,CAAC;IACtC,8DAA8D;IAC9D,eAAe,CAAC,EAAE,CAChB,KAAK,EAAE,kBAAkB,KACtB,mBAAmB,GAAG,SAAS,CAAC;CACtC;AA0CD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB;;wCA8BnE"}
|
package/dist/tools/bash.js
CHANGED
|
@@ -37,13 +37,29 @@ function generateDescription(options) {
|
|
|
37
37
|
return lines.join("\n").trim();
|
|
38
38
|
}
|
|
39
39
|
export function createBashExecuteTool(options) {
|
|
40
|
-
const { sandbox,
|
|
40
|
+
const { sandbox, onBeforeBashCall, onAfterBashCall } = options;
|
|
41
41
|
return tool({
|
|
42
42
|
description: generateDescription(options),
|
|
43
43
|
inputSchema: bashSchema,
|
|
44
|
-
execute: async ({ command }) => {
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
execute: async ({ command: originalCommand }) => {
|
|
45
|
+
// Allow modification of command before execution
|
|
46
|
+
let command = originalCommand;
|
|
47
|
+
if (onBeforeBashCall) {
|
|
48
|
+
const beforeResult = onBeforeBashCall({ command });
|
|
49
|
+
if (beforeResult?.command !== undefined) {
|
|
50
|
+
command = beforeResult.command;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Execute the command
|
|
54
|
+
let result = await sandbox.executeCommand(command);
|
|
55
|
+
// Allow modification of result after execution
|
|
56
|
+
if (onAfterBashCall) {
|
|
57
|
+
const afterResult = onAfterBashCall({ command, result });
|
|
58
|
+
if (afterResult?.result !== undefined) {
|
|
59
|
+
result = afterResult.result;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
47
63
|
},
|
|
48
64
|
});
|
|
49
65
|
}
|
package/dist/tools/bash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Sandbox } from "../types.js";
|
|
2
2
|
export interface CreateReadFileToolOptions {
|
|
3
3
|
sandbox: Sandbox;
|
|
4
|
-
onCall?: (toolName: string, args: unknown) => void;
|
|
5
4
|
}
|
|
6
5
|
export declare function createReadFileTool(options: CreateReadFileToolOptions): import("ai").Tool<{
|
|
7
6
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../src/tools/read-file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAM3C,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../src/tools/read-file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAM3C,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB;;;;GAWpE"}
|
package/dist/tools/read-file.js
CHANGED
|
@@ -4,12 +4,11 @@ const readFileSchema = z.object({
|
|
|
4
4
|
path: z.string().describe("The path to the file to read"),
|
|
5
5
|
});
|
|
6
6
|
export function createReadFileTool(options) {
|
|
7
|
-
const { sandbox
|
|
7
|
+
const { sandbox } = options;
|
|
8
8
|
return tool({
|
|
9
9
|
description: "Read the contents of a file from the sandbox.",
|
|
10
10
|
inputSchema: readFileSchema,
|
|
11
11
|
execute: async ({ path }) => {
|
|
12
|
-
onCall?.("readFile", { path });
|
|
13
12
|
const content = await sandbox.readFile(path);
|
|
14
13
|
return { content };
|
|
15
14
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../src/tools/read-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC1D,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../src/tools/read-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC1D,CAAC,CAAC;AAMH,MAAM,UAAU,kBAAkB,CAAC,OAAkC;IACnE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE5B,OAAO,IAAI,CAAC;QACV,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Sandbox } from "../types.js";
|
|
2
2
|
export interface CreateWriteFileToolOptions {
|
|
3
3
|
sandbox: Sandbox;
|
|
4
|
-
onCall?: (toolName: string, args: unknown) => void;
|
|
5
4
|
}
|
|
6
5
|
export declare function createWriteFileTool(options: CreateWriteFileToolOptions): import("ai").Tool<{
|
|
7
6
|
content: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-file.d.ts","sourceRoot":"","sources":["../../src/tools/write-file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAO3C,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"write-file.d.ts","sourceRoot":"","sources":["../../src/tools/write-file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAO3C,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B;;;;;GAYtE"}
|
package/dist/tools/write-file.js
CHANGED
|
@@ -5,12 +5,11 @@ const writeFileSchema = z.object({
|
|
|
5
5
|
content: z.string().describe("The content to write to the file"),
|
|
6
6
|
});
|
|
7
7
|
export function createWriteFileTool(options) {
|
|
8
|
-
const { sandbox
|
|
8
|
+
const { sandbox } = options;
|
|
9
9
|
return tool({
|
|
10
10
|
description: "Write content to a file in the sandbox. Creates parent directories if needed.",
|
|
11
11
|
inputSchema: writeFileSchema,
|
|
12
12
|
execute: async ({ path, content }) => {
|
|
13
|
-
onCall?.("writeFile", { path, content });
|
|
14
13
|
await sandbox.writeFile(path, content);
|
|
15
14
|
return { success: true };
|
|
16
15
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../src/tools/write-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CACjE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../src/tools/write-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CACjE,CAAC,CAAC;AAMH,MAAM,UAAU,mBAAmB,CAAC,OAAmC;IACrE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE5B,OAAO,IAAI,CAAC;QACV,WAAW,EACT,+EAA+E;QACjF,WAAW,EAAE,eAAe;QAC5B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YACnC,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -21,6 +21,38 @@ export interface JustBashInstance {
|
|
|
21
21
|
}>;
|
|
22
22
|
[key: string]: unknown;
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Input for onBeforeBashCall callback.
|
|
26
|
+
*/
|
|
27
|
+
export interface BeforeBashCallInput {
|
|
28
|
+
/** The command that will be executed */
|
|
29
|
+
command: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Output from onBeforeBashCall callback.
|
|
33
|
+
* Return undefined or the original input to proceed unchanged.
|
|
34
|
+
*/
|
|
35
|
+
export interface BeforeBashCallOutput {
|
|
36
|
+
/** The (potentially modified) command to execute */
|
|
37
|
+
command: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Input for onAfterBashCall callback.
|
|
41
|
+
*/
|
|
42
|
+
export interface AfterBashCallInput {
|
|
43
|
+
/** The command that was executed */
|
|
44
|
+
command: string;
|
|
45
|
+
/** The result from executing the command */
|
|
46
|
+
result: CommandResult;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Output from onAfterBashCall callback.
|
|
50
|
+
* Return undefined or the original result to proceed unchanged.
|
|
51
|
+
*/
|
|
52
|
+
export interface AfterBashCallOutput {
|
|
53
|
+
/** The (potentially modified) result */
|
|
54
|
+
result: CommandResult;
|
|
55
|
+
}
|
|
24
56
|
export interface CreateBashToolOptions {
|
|
25
57
|
/**
|
|
26
58
|
* Destination directory on the sandbox for files.
|
|
@@ -58,9 +90,33 @@ export interface CreateBashToolOptions {
|
|
|
58
90
|
*/
|
|
59
91
|
extraInstructions?: string;
|
|
60
92
|
/**
|
|
61
|
-
* Callback invoked before
|
|
93
|
+
* Callback invoked before bash command execution.
|
|
94
|
+
* Can modify the command before it runs.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* onBeforeBashCall: ({ command }) => {
|
|
99
|
+
* console.log("Running:", command);
|
|
100
|
+
* // Optionally modify the command
|
|
101
|
+
* return { command: command.replace(/rm -rf/, "echo 'blocked:'") };
|
|
102
|
+
* }
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
onBeforeBashCall?: (input: BeforeBashCallInput) => BeforeBashCallOutput | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Callback invoked after bash command execution.
|
|
108
|
+
* Can modify the result before it's returned.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* onAfterBashCall: ({ command, result }) => {
|
|
113
|
+
* console.log(`Command "${command}" exited with code ${result.exitCode}`);
|
|
114
|
+
* // Optionally modify the result
|
|
115
|
+
* return { result: { ...result, stdout: result.stdout.trim() } };
|
|
116
|
+
* }
|
|
117
|
+
* ```
|
|
62
118
|
*/
|
|
63
|
-
|
|
119
|
+
onAfterBashCall?: (input: AfterBashCallInput) => AfterBashCallOutput | undefined;
|
|
64
120
|
}
|
|
65
121
|
import type { createBashExecuteTool } from "./tools/bash.js";
|
|
66
122
|
import type { createReadFileTool } from "./tools/read-file.js";
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QACjC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/B;;OAEG;IACH,eAAe,CAAC,EAAE;QAChB,mCAAmC;QACnC,MAAM,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,gBAAgB,CAAC;IAErD;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "1.0.0",
|
|
7
7
|
"description": "Generic bash tool for AI agents, compatible with AI SDK",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"main": "dist/index.js",
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
"license": "MIT",
|
|
34
34
|
"repository": {
|
|
35
35
|
"type": "git",
|
|
36
|
-
"url": "git+https://github.com/vercel/bash-tool.git"
|
|
36
|
+
"url": "git+https://github.com/vercel-labs/bash-tool.git"
|
|
37
37
|
},
|
|
38
38
|
"bugs": {
|
|
39
|
-
"url": "https://github.com/vercel/bash-tool/issues"
|
|
39
|
+
"url": "https://github.com/vercel-labs/bash-tool/issues"
|
|
40
40
|
},
|
|
41
|
-
"homepage": "https://github.com/vercel/bash-tool#readme",
|
|
41
|
+
"homepage": "https://github.com/vercel-labs/bash-tool#readme",
|
|
42
42
|
"engines": {
|
|
43
43
|
"node": ">=18"
|
|
44
44
|
},
|