@clarvis/agent-tools 0.1.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/CHANGELOG.md +40 -0
- package/CODE_OF_CONDUCT.md +117 -0
- package/CONTRIBUTING.md +78 -0
- package/LICENSE +21 -0
- package/README.md +203 -0
- package/SECURITY.md +58 -0
- package/SPEC.md +266 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +145 -0
- package/dist/config.js.map +1 -0
- package/dist/core.d.ts +13 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +43 -0
- package/dist/core.js.map +1 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +29 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/atomic.d.ts +11 -0
- package/dist/lib/atomic.d.ts.map +1 -0
- package/dist/lib/atomic.js +307 -0
- package/dist/lib/atomic.js.map +1 -0
- package/dist/lib/binary.d.ts +3 -0
- package/dist/lib/binary.d.ts.map +1 -0
- package/dist/lib/binary.js +20 -0
- package/dist/lib/binary.js.map +1 -0
- package/dist/lib/files.d.ts +9 -0
- package/dist/lib/files.d.ts.map +1 -0
- package/dist/lib/files.js +49 -0
- package/dist/lib/files.js.map +1 -0
- package/dist/lib/ignore.d.ts +5 -0
- package/dist/lib/ignore.d.ts.map +1 -0
- package/dist/lib/ignore.js +106 -0
- package/dist/lib/ignore.js.map +1 -0
- package/dist/lib/log.d.ts +4 -0
- package/dist/lib/log.d.ts.map +1 -0
- package/dist/lib/log.js +11 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/lib/match-cascade.d.ts +10 -0
- package/dist/lib/match-cascade.d.ts.map +1 -0
- package/dist/lib/match-cascade.js +153 -0
- package/dist/lib/match-cascade.js.map +1 -0
- package/dist/lib/output.d.ts +8 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +77 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/paths.d.ts +3 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +46 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/rg.d.ts +22 -0
- package/dist/lib/rg.d.ts.map +1 -0
- package/dist/lib/rg.js +285 -0
- package/dist/lib/rg.js.map +1 -0
- package/dist/lib/text.d.ts +18 -0
- package/dist/lib/text.d.ts.map +1 -0
- package/dist/lib/text.js +129 -0
- package/dist/lib/text.js.map +1 -0
- package/dist/lib/textfile.d.ts +4 -0
- package/dist/lib/textfile.d.ts.map +1 -0
- package/dist/lib/textfile.js +55 -0
- package/dist/lib/textfile.js.map +1 -0
- package/dist/lib/token.d.ts +2 -0
- package/dist/lib/token.d.ts.map +1 -0
- package/dist/lib/token.js +6 -0
- package/dist/lib/token.js.map +1 -0
- package/dist/tools/apply-patch.d.ts +3 -0
- package/dist/tools/apply-patch.d.ts.map +1 -0
- package/dist/tools/apply-patch.js +221 -0
- package/dist/tools/apply-patch.js.map +1 -0
- package/dist/tools/bash.d.ts +3 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +179 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit-file.d.ts +15 -0
- package/dist/tools/edit-file.d.ts.map +1 -0
- package/dist/tools/edit-file.js +163 -0
- package/dist/tools/edit-file.js.map +1 -0
- package/dist/tools/glob.d.ts +3 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +64 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +3 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +201 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/list-dir.d.ts +3 -0
- package/dist/tools/list-dir.d.ts.map +1 -0
- package/dist/tools/list-dir.js +59 -0
- package/dist/tools/list-dir.js.map +1 -0
- package/dist/tools/multi-edit.d.ts +3 -0
- package/dist/tools/multi-edit.d.ts.map +1 -0
- package/dist/tools/multi-edit.js +86 -0
- package/dist/tools/multi-edit.js.map +1 -0
- package/dist/tools/read-file.d.ts +3 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +102 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/registry.d.ts +6 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +28 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +9 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/write-file.d.ts +3 -0
- package/dist/tools/write-file.d.ts.map +1 -0
- package/dist/tools/write-file.js +61 -0
- package/dist/tools/write-file.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
import { ToolError, fsError } from "../errors.js";
|
|
3
|
+
import { resolvePath, displayPath } from "../lib/paths.js";
|
|
4
|
+
import { writeAtomic, withFileLock } from "../lib/atomic.js";
|
|
5
|
+
export const writeFile = {
|
|
6
|
+
name: "write_file",
|
|
7
|
+
description: "Create or completely overwrite a file with `content`, creating missing parent directories. " +
|
|
8
|
+
"Writes `content` verbatim (no trailing newline added or stripped). Use ONLY to create a new " +
|
|
9
|
+
"file or fully replace one; to change part of an existing file use edit_file or multi_edit so " +
|
|
10
|
+
"you do not lose the rest.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: "object",
|
|
13
|
+
properties: {
|
|
14
|
+
path: {
|
|
15
|
+
type: "string",
|
|
16
|
+
description: "Destination file. Relative to workspace root or absolute (~ is not expanded). An " +
|
|
17
|
+
"existing file is overwritten; missing parent directories are created.",
|
|
18
|
+
},
|
|
19
|
+
content: {
|
|
20
|
+
type: "string",
|
|
21
|
+
description: "Full file content. Replaces any existing content in its entirety.",
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
required: ["path", "content"],
|
|
25
|
+
additionalProperties: false,
|
|
26
|
+
},
|
|
27
|
+
async handler(args, config) {
|
|
28
|
+
const relPath = args.path;
|
|
29
|
+
const target = resolvePath(relPath, config.workspaceRoot, config.confineToWorkspace);
|
|
30
|
+
const content = args.content;
|
|
31
|
+
return withFileLock(target, async () => {
|
|
32
|
+
let existed = false;
|
|
33
|
+
try {
|
|
34
|
+
const stat = await fs.stat(target);
|
|
35
|
+
if (stat.isDirectory()) {
|
|
36
|
+
throw new ToolError("not_a_file", `Path is a directory: ${relPath}`, { path: relPath });
|
|
37
|
+
}
|
|
38
|
+
existed = true;
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (err instanceof ToolError)
|
|
42
|
+
throw err;
|
|
43
|
+
const e = err;
|
|
44
|
+
if (e.code !== "ENOENT")
|
|
45
|
+
throw fsError(e, relPath);
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
await writeAtomic(target, content);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (err instanceof ToolError)
|
|
52
|
+
throw err;
|
|
53
|
+
throw fsError(err, relPath);
|
|
54
|
+
}
|
|
55
|
+
const bytes = Buffer.byteLength(content, "utf8");
|
|
56
|
+
const rel = displayPath(target, config.workspaceRoot);
|
|
57
|
+
return `Wrote ${bytes} bytes to ${rel} (${existed ? "overwritten" : "created"}).`;
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=write-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../src/tools/write-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAG7D,MAAM,CAAC,MAAM,SAAS,GAAY;IAChC,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,6FAA6F;QAC7F,8FAA8F;QAC9F,+FAA+F;QAC/F,2BAA2B;IAC7B,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,mFAAmF;oBACnF,uEAAuE;aAC1E;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mEAAmE;aACjF;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;QAC7B,oBAAoB,EAAE,KAAK;KAC5B;IACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAc,CAAC;QACpC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;QAEvC,OAAO,YAAY,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YACrC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;oBACvB,MAAM,IAAI,SAAS,CAAC,YAAY,EAAE,wBAAwB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC1F,CAAC;gBACD,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,SAAS;oBAAE,MAAM,GAAG,CAAC;gBACxC,MAAM,CAAC,GAAG,GAA4B,CAAC;gBACvC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACrD,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,SAAS;oBAAE,MAAM,GAAG,CAAC;gBACxC,MAAM,OAAO,CAAC,GAA4B,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YACtD,OAAO,SAAS,KAAK,aAAa,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC;QACpF,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@clarvis/agent-tools",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A minimal, opinionated set of coding tools (read/write/edit/patch/bash/grep/glob) for driving an LLM agent over a workspace — usable as a plain library.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./package.json": "./package.json"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"SPEC.md",
|
|
19
|
+
"README.md",
|
|
20
|
+
"CHANGELOG.md",
|
|
21
|
+
"CONTRIBUTING.md",
|
|
22
|
+
"CODE_OF_CONDUCT.md",
|
|
23
|
+
"SECURITY.md",
|
|
24
|
+
"LICENSE"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=20"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc -p tsconfig.build.json",
|
|
31
|
+
"test": "vitest run",
|
|
32
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
33
|
+
"lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
34
|
+
"format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
35
|
+
"format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
36
|
+
"docs:dev": "vitepress dev docs",
|
|
37
|
+
"docs:build": "vitepress build docs",
|
|
38
|
+
"docs:preview": "vitepress preview docs",
|
|
39
|
+
"pre-commit": "npm run typecheck && npm run format:check && npm test",
|
|
40
|
+
"prepublishOnly": "test -f README.md && test -f SPEC.md && npm run build && npm test"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"ajv": "^8.17.1",
|
|
44
|
+
"diff": "^9.0.0",
|
|
45
|
+
"ignore": "^7.0.5",
|
|
46
|
+
"tinyglobby": "^0.2.10"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@eslint/js": "^10.0.1",
|
|
50
|
+
"@types/node": "^26.1.0",
|
|
51
|
+
"@typescript-eslint/eslint-plugin": "^8.62.1",
|
|
52
|
+
"@typescript-eslint/parser": "^8.62.1",
|
|
53
|
+
"eslint": "^10.6.0",
|
|
54
|
+
"prettier": "^3.9.4",
|
|
55
|
+
"typescript": "^6.0.3",
|
|
56
|
+
"vitepress": "^1.6.4",
|
|
57
|
+
"vitest": "^4.1.9"
|
|
58
|
+
},
|
|
59
|
+
"repository": {
|
|
60
|
+
"type": "git",
|
|
61
|
+
"url": "git+https://github.com/getclarvis/agent-tools.git"
|
|
62
|
+
},
|
|
63
|
+
"homepage": "https://github.com/getclarvis/agent-tools#readme",
|
|
64
|
+
"bugs": {
|
|
65
|
+
"url": "https://github.com/getclarvis/agent-tools/issues"
|
|
66
|
+
},
|
|
67
|
+
"publishConfig": {
|
|
68
|
+
"access": "public"
|
|
69
|
+
}
|
|
70
|
+
}
|