codetree-claude 1.4.3 → 1.4.5
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/dist/hook/pre-tool-use.bundled.js +22 -3
- package/dist/hook/pre-tool-use.js +26 -3
- package/dist/hook/pre-tool-use.js.map +1 -1
- package/dist/server/mcp-server.js +7 -1
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/tools/codetree-edit.d.ts +42 -0
- package/dist/server/tools/codetree-edit.d.ts.map +1 -0
- package/dist/server/tools/codetree-edit.js +88 -0
- package/dist/server/tools/codetree-edit.js.map +1 -0
- package/dist/server/tools/codetree-write.d.ts +34 -0
- package/dist/server/tools/codetree-write.d.ts.map +1 -0
- package/dist/server/tools/codetree-write.js +61 -0
- package/dist/server/tools/codetree-write.js.map +1 -0
- package/package.json +1 -1
|
@@ -77,6 +77,12 @@ async function main() {
|
|
|
77
77
|
case "Glob":
|
|
78
78
|
await handleGlob(port, tool_input);
|
|
79
79
|
break;
|
|
80
|
+
case "Edit":
|
|
81
|
+
await handleEdit(port, tool_input);
|
|
82
|
+
break;
|
|
83
|
+
case "Write":
|
|
84
|
+
await handleWrite(port, tool_input);
|
|
85
|
+
break;
|
|
80
86
|
default:
|
|
81
87
|
process.exit(0);
|
|
82
88
|
}
|
|
@@ -85,7 +91,6 @@ async function handleRead(port, input) {
|
|
|
85
91
|
const filePath = input.file_path;
|
|
86
92
|
if (!filePath) {
|
|
87
93
|
process.exit(0);
|
|
88
|
-
return;
|
|
89
94
|
}
|
|
90
95
|
const result = await queryIpc(port, `/check?path=${encodeURIComponent(filePath)}`);
|
|
91
96
|
if (result?.cached) {
|
|
@@ -97,12 +102,27 @@ async function handleRead(port, input) {
|
|
|
97
102
|
}
|
|
98
103
|
process.exit(0);
|
|
99
104
|
}
|
|
105
|
+
async function handleEdit(port, input) {
|
|
106
|
+
const filePath = input.file_path;
|
|
107
|
+
if (!filePath) {
|
|
108
|
+
process.exit(0);
|
|
109
|
+
}
|
|
110
|
+
process.stderr.write(`Use the codetree_edit tool instead of Edit. It works without requiring a prior Read call. Call codetree_edit with file_path="${filePath}", old_string, and new_string.`);
|
|
111
|
+
process.exit(2);
|
|
112
|
+
}
|
|
113
|
+
async function handleWrite(port, input) {
|
|
114
|
+
const filePath = input.file_path;
|
|
115
|
+
if (!filePath) {
|
|
116
|
+
process.exit(0);
|
|
117
|
+
}
|
|
118
|
+
process.stderr.write(`Use the codetree_write tool instead of Write. It works without requiring a prior Read call. Call codetree_write with file_path="${filePath}" and content.`);
|
|
119
|
+
process.exit(2);
|
|
120
|
+
}
|
|
100
121
|
async function handleGrep(port, input) {
|
|
101
122
|
const pattern = input.pattern;
|
|
102
123
|
const searchPath = input.path;
|
|
103
124
|
if (!pattern) {
|
|
104
125
|
process.exit(0);
|
|
105
|
-
return;
|
|
106
126
|
}
|
|
107
127
|
const params = new URLSearchParams();
|
|
108
128
|
params.set("pattern", pattern);
|
|
@@ -120,7 +140,6 @@ async function handleGlob(port, input) {
|
|
|
120
140
|
const pattern = input.pattern;
|
|
121
141
|
if (!pattern) {
|
|
122
142
|
process.exit(0);
|
|
123
|
-
return;
|
|
124
143
|
}
|
|
125
144
|
const result = await queryIpc(port, `/check-glob?pattern=${encodeURIComponent(pattern)}`);
|
|
126
145
|
if (result?.cached) {
|
|
@@ -43,6 +43,12 @@ async function main() {
|
|
|
43
43
|
case "Glob":
|
|
44
44
|
await handleGlob(port, tool_input);
|
|
45
45
|
break;
|
|
46
|
+
case "Edit":
|
|
47
|
+
await handleEdit(port, tool_input);
|
|
48
|
+
break;
|
|
49
|
+
case "Write":
|
|
50
|
+
await handleWrite(port, tool_input);
|
|
51
|
+
break;
|
|
46
52
|
default:
|
|
47
53
|
process.exit(0); // Unknown tool → allow
|
|
48
54
|
}
|
|
@@ -51,7 +57,6 @@ async function handleRead(port, input) {
|
|
|
51
57
|
const filePath = input.file_path;
|
|
52
58
|
if (!filePath) {
|
|
53
59
|
process.exit(0);
|
|
54
|
-
return;
|
|
55
60
|
}
|
|
56
61
|
const result = await queryIpc(port, `/check?path=${encodeURIComponent(filePath)}`);
|
|
57
62
|
if (result?.cached) {
|
|
@@ -66,12 +71,31 @@ async function handleRead(port, input) {
|
|
|
66
71
|
}
|
|
67
72
|
process.exit(0); // Cache miss → allow native Read
|
|
68
73
|
}
|
|
74
|
+
async function handleEdit(port, input) {
|
|
75
|
+
const filePath = input.file_path;
|
|
76
|
+
if (!filePath) {
|
|
77
|
+
process.exit(0);
|
|
78
|
+
}
|
|
79
|
+
process.stderr.write(`Use the codetree_edit tool instead of Edit. ` +
|
|
80
|
+
`It works without requiring a prior Read call. ` +
|
|
81
|
+
`Call codetree_edit with file_path="${filePath}", old_string, and new_string.`);
|
|
82
|
+
process.exit(2);
|
|
83
|
+
}
|
|
84
|
+
async function handleWrite(port, input) {
|
|
85
|
+
const filePath = input.file_path;
|
|
86
|
+
if (!filePath) {
|
|
87
|
+
process.exit(0);
|
|
88
|
+
}
|
|
89
|
+
process.stderr.write(`Use the codetree_write tool instead of Write. ` +
|
|
90
|
+
`It works without requiring a prior Read call. ` +
|
|
91
|
+
`Call codetree_write with file_path="${filePath}" and content.`);
|
|
92
|
+
process.exit(2);
|
|
93
|
+
}
|
|
69
94
|
async function handleGrep(port, input) {
|
|
70
95
|
const pattern = input.pattern;
|
|
71
96
|
const searchPath = input.path;
|
|
72
97
|
if (!pattern) {
|
|
73
98
|
process.exit(0);
|
|
74
|
-
return;
|
|
75
99
|
}
|
|
76
100
|
const params = new URLSearchParams();
|
|
77
101
|
params.set("pattern", pattern);
|
|
@@ -90,7 +114,6 @@ async function handleGlob(port, input) {
|
|
|
90
114
|
const pattern = input.pattern;
|
|
91
115
|
if (!pattern) {
|
|
92
116
|
process.exit(0);
|
|
93
|
-
return;
|
|
94
117
|
}
|
|
95
118
|
const result = await queryIpc(port, `/check-glob?pattern=${encodeURIComponent(pattern)}`);
|
|
96
119
|
if (result?.cached) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../src/hook/pre-tool-use.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAU5C,KAAK,UAAU,IAAI;IACjB,0BAA0B;IAC1B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,QAAQ,IAAI,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,KAAgB,CAAC;IACrB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;IACzC,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAE7C,yBAAyB;IACzB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;IAC/C,CAAC;IAED,sBAAsB;IACtB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,MAAM;QACR;YACE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;IAC5C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,KAA8B;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAmB,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../src/hook/pre-tool-use.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAU5C,KAAK,UAAU,IAAI;IACjB,0BAA0B;IAC1B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,QAAQ,IAAI,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,KAAgB,CAAC;IACrB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;IACzC,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAE7C,yBAAyB;IACzB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;IAC/C,CAAC;IAED,sBAAsB;IACtB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,OAAO;YACV,MAAM,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACpC,MAAM;QACR;YACE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;IAC5C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,KAA8B;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAmB,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,eAAe,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEnF,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAc,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAmB,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAc,CAAC;QAEnC,sCAAsC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,SAAS,OAAO,4BAA4B,SAAS,WAAW,UAAU,CAAC,IAAI,CAAC,KAAK;YACrF,+CAA+C,OAAO,gBAAgB;YACtE,gDAAgD,CACjD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;AACpD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,KAA8B;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAmB,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8CAA8C;QAC9C,gDAAgD;QAChD,sCAAsC,QAAQ,gCAAgC,CAC/E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,KAA8B;IACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAmB,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gDAAgD;QAChD,gDAAgD;QAChD,uCAAuC,QAAQ,gBAAgB,CAChE,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,KAA8B;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAiB,CAAC;IACxC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAc,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,UAAU;QAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,iBAAiB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAE1E,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAc,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,8CAA8C,OAAO,yBAAyB;YACrF,yDAAyD,CAC1D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,8CAA8C;AACjE,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,KAA8B;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAiB,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,uBAAuB,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAE1F,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAc,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,gEAAgE;YACvE,4CAA4C,CAC7C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,sCAAsC;AACzD,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAClE,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK;oBAAE,OAAO,IAAI,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,GAAG,CAAC;IACrC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,MAAM;AACN,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;AACjD,CAAC,CAAC,CAAC"}
|
|
@@ -13,6 +13,8 @@ import { createStructureTool } from "./tools/codetree-structure.js";
|
|
|
13
13
|
import { createFindRefsTool } from "./tools/codetree-find-refs.js";
|
|
14
14
|
import { createSummaryTool } from "./tools/codetree-summary.js";
|
|
15
15
|
import { createMemoryTool } from "./tools/codetree-memory.js";
|
|
16
|
+
import { createEditTool } from "./tools/codetree-edit.js";
|
|
17
|
+
import { createWriteTool } from "./tools/codetree-write.js";
|
|
16
18
|
import { request as httpRequest } from "node:http";
|
|
17
19
|
async function main() {
|
|
18
20
|
// Load config
|
|
@@ -59,7 +61,9 @@ async function main() {
|
|
|
59
61
|
const findRefsTool = createFindRefsTool(config, indexer, db);
|
|
60
62
|
const summaryTool = createSummaryTool(config, db);
|
|
61
63
|
const memoryTool = createMemoryTool(config, db);
|
|
62
|
-
const
|
|
64
|
+
const editTool = createEditTool(config, indexer);
|
|
65
|
+
const writeTool = createWriteTool(config, indexer);
|
|
66
|
+
const tools = [readTool, searchTool, structureTool, findRefsTool, summaryTool, memoryTool, editTool, writeTool];
|
|
63
67
|
const toolMap = new Map(tools.map((t) => [t.name, t]));
|
|
64
68
|
// Create MCP server
|
|
65
69
|
const server = new Server({
|
|
@@ -86,6 +90,8 @@ async function main() {
|
|
|
86
90
|
codetree_find_refs: 400,
|
|
87
91
|
codetree_summary: 600,
|
|
88
92
|
codetree_memory: 100,
|
|
93
|
+
codetree_edit: 400,
|
|
94
|
+
codetree_write: 400,
|
|
89
95
|
};
|
|
90
96
|
// Handle tool calls
|
|
91
97
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type CodeTreeConfig } from "../../config.js";
|
|
2
|
+
import type { Indexer } from "../../indexer/indexer.js";
|
|
3
|
+
export interface EditParams {
|
|
4
|
+
file_path: string;
|
|
5
|
+
old_string: string;
|
|
6
|
+
new_string: string;
|
|
7
|
+
replace_all?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface EditResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
path: string;
|
|
12
|
+
replacements: number;
|
|
13
|
+
message: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function createEditTool(config: CodeTreeConfig, indexer: Indexer): {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: "object";
|
|
20
|
+
properties: {
|
|
21
|
+
file_path: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
old_string: {
|
|
26
|
+
type: string;
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
new_string: {
|
|
30
|
+
type: string;
|
|
31
|
+
description: string;
|
|
32
|
+
};
|
|
33
|
+
replace_all: {
|
|
34
|
+
type: string;
|
|
35
|
+
description: string;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
required: string[];
|
|
39
|
+
};
|
|
40
|
+
handler: (params: EditParams) => Promise<EditResult>;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=codetree-edit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codetree-edit.d.ts","sourceRoot":"","sources":["../../../src/server/tools/codetree-edit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;sBA8B3C,UAAU,KAAG,OAAO,CAAC,UAAU,CAAC;EAmE3D"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { resolve, relative } from "node:path";
|
|
2
|
+
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
3
|
+
import { normalizePath } from "../../config.js";
|
|
4
|
+
export function createEditTool(config, indexer) {
|
|
5
|
+
return {
|
|
6
|
+
name: "codetree_edit",
|
|
7
|
+
description: "Edit a file by replacing text. Works like the native Edit tool but does NOT require " +
|
|
8
|
+
"a prior Read call — use codetree_read to read, then codetree_edit to modify. " +
|
|
9
|
+
"The old_string must match exactly (including whitespace/indentation). " +
|
|
10
|
+
"If old_string is not unique, provide more surrounding context or use replace_all.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: "object",
|
|
13
|
+
properties: {
|
|
14
|
+
file_path: {
|
|
15
|
+
type: "string",
|
|
16
|
+
description: "Absolute or project-relative path to the file to edit",
|
|
17
|
+
},
|
|
18
|
+
old_string: {
|
|
19
|
+
type: "string",
|
|
20
|
+
description: "The exact text to find and replace",
|
|
21
|
+
},
|
|
22
|
+
new_string: {
|
|
23
|
+
type: "string",
|
|
24
|
+
description: "The replacement text",
|
|
25
|
+
},
|
|
26
|
+
replace_all: {
|
|
27
|
+
type: "boolean",
|
|
28
|
+
description: "Replace all occurrences (default: false — fails if old_string matches more than once)",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
required: ["file_path", "old_string", "new_string"],
|
|
32
|
+
},
|
|
33
|
+
handler: async (params) => {
|
|
34
|
+
// Resolve the path
|
|
35
|
+
let absPath;
|
|
36
|
+
let relPath;
|
|
37
|
+
if (params.file_path.startsWith("/") || params.file_path.match(/^[A-Za-z]:/)) {
|
|
38
|
+
absPath = resolve(params.file_path);
|
|
39
|
+
relPath = normalizePath(relative(config.projectRoot, absPath));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
relPath = normalizePath(params.file_path);
|
|
43
|
+
absPath = resolve(config.projectRoot, relPath);
|
|
44
|
+
}
|
|
45
|
+
if (!existsSync(absPath)) {
|
|
46
|
+
throw new Error(`File not found: ${absPath}`);
|
|
47
|
+
}
|
|
48
|
+
if (params.old_string === params.new_string) {
|
|
49
|
+
throw new Error("old_string and new_string are identical — nothing to change");
|
|
50
|
+
}
|
|
51
|
+
// Read current content
|
|
52
|
+
const content = readFileSync(absPath, "utf-8");
|
|
53
|
+
// Count occurrences
|
|
54
|
+
let count = 0;
|
|
55
|
+
let idx = 0;
|
|
56
|
+
while ((idx = content.indexOf(params.old_string, idx)) !== -1) {
|
|
57
|
+
count++;
|
|
58
|
+
idx += params.old_string.length;
|
|
59
|
+
}
|
|
60
|
+
if (count === 0) {
|
|
61
|
+
throw new Error(`old_string not found in ${relPath}. Make sure it matches exactly including whitespace and indentation.`);
|
|
62
|
+
}
|
|
63
|
+
if (count > 1 && !params.replace_all) {
|
|
64
|
+
throw new Error(`old_string found ${count} times in ${relPath}. ` +
|
|
65
|
+
`Provide more surrounding context to make it unique, or set replace_all=true.`);
|
|
66
|
+
}
|
|
67
|
+
// Perform replacement
|
|
68
|
+
let newContent;
|
|
69
|
+
if (params.replace_all) {
|
|
70
|
+
newContent = content.split(params.old_string).join(params.new_string);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
newContent = content.replace(params.old_string, params.new_string);
|
|
74
|
+
}
|
|
75
|
+
// Write back
|
|
76
|
+
writeFileSync(absPath, newContent, "utf-8");
|
|
77
|
+
// Update cache
|
|
78
|
+
indexer.indexFile(absPath);
|
|
79
|
+
return {
|
|
80
|
+
success: true,
|
|
81
|
+
path: relPath,
|
|
82
|
+
replacements: params.replace_all ? count : 1,
|
|
83
|
+
message: `Replaced ${params.replace_all ? count : 1} occurrence(s) in ${relPath}`,
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=codetree-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codetree-edit.js","sourceRoot":"","sources":["../../../src/server/tools/codetree-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type CodeTreeConfig } from "../../config.js";
|
|
2
|
+
import type { Indexer } from "../../indexer/indexer.js";
|
|
3
|
+
export interface WriteParams {
|
|
4
|
+
file_path: string;
|
|
5
|
+
content: string;
|
|
6
|
+
}
|
|
7
|
+
export interface WriteResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
path: string;
|
|
10
|
+
created: boolean;
|
|
11
|
+
size: number;
|
|
12
|
+
lineCount: number;
|
|
13
|
+
message: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function createWriteTool(config: CodeTreeConfig, indexer: Indexer): {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: "object";
|
|
20
|
+
properties: {
|
|
21
|
+
file_path: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
content: {
|
|
26
|
+
type: string;
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
required: string[];
|
|
31
|
+
};
|
|
32
|
+
handler: (params: WriteParams) => Promise<WriteResult>;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=codetree-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codetree-write.d.ts","sourceRoot":"","sources":["../../../src/server/tools/codetree-write.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO;;;;;;;;;;;;;;;;;sBAqB5C,WAAW,KAAG,OAAO,CAAC,WAAW,CAAC;EA0C7D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { resolve, relative, dirname } from "node:path";
|
|
2
|
+
import { writeFileSync, existsSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { normalizePath } from "../../config.js";
|
|
4
|
+
export function createWriteTool(config, indexer) {
|
|
5
|
+
return {
|
|
6
|
+
name: "codetree_write",
|
|
7
|
+
description: "Write content to a file. Creates the file if it doesn't exist, overwrites if it does. " +
|
|
8
|
+
"Works like the native Write tool but does NOT require a prior Read call. " +
|
|
9
|
+
"Use codetree_read first if you need to check existing content before overwriting.",
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: "object",
|
|
12
|
+
properties: {
|
|
13
|
+
file_path: {
|
|
14
|
+
type: "string",
|
|
15
|
+
description: "Absolute or project-relative path to the file to write",
|
|
16
|
+
},
|
|
17
|
+
content: {
|
|
18
|
+
type: "string",
|
|
19
|
+
description: "The full content to write to the file",
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
required: ["file_path", "content"],
|
|
23
|
+
},
|
|
24
|
+
handler: async (params) => {
|
|
25
|
+
// Resolve the path
|
|
26
|
+
let absPath;
|
|
27
|
+
let relPath;
|
|
28
|
+
if (params.file_path.startsWith("/") || params.file_path.match(/^[A-Za-z]:/)) {
|
|
29
|
+
absPath = resolve(params.file_path);
|
|
30
|
+
relPath = normalizePath(relative(config.projectRoot, absPath));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
relPath = normalizePath(params.file_path);
|
|
34
|
+
absPath = resolve(config.projectRoot, relPath);
|
|
35
|
+
}
|
|
36
|
+
const created = !existsSync(absPath);
|
|
37
|
+
// Ensure parent directory exists
|
|
38
|
+
const dir = dirname(absPath);
|
|
39
|
+
if (!existsSync(dir)) {
|
|
40
|
+
mkdirSync(dir, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
// Write file
|
|
43
|
+
writeFileSync(absPath, params.content, "utf-8");
|
|
44
|
+
// Update cache
|
|
45
|
+
indexer.indexFile(absPath);
|
|
46
|
+
const lineCount = params.content.split("\n").length;
|
|
47
|
+
const size = Buffer.byteLength(params.content, "utf-8");
|
|
48
|
+
return {
|
|
49
|
+
success: true,
|
|
50
|
+
path: relPath,
|
|
51
|
+
created,
|
|
52
|
+
size,
|
|
53
|
+
lineCount,
|
|
54
|
+
message: created
|
|
55
|
+
? `Created ${relPath} (${lineCount} lines, ${size} bytes)`
|
|
56
|
+
: `Updated ${relPath} (${lineCount} lines, ${size} bytes)`,
|
|
57
|
+
};
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=codetree-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codetree-write.js","sourceRoot":"","sources":["../../../src/server/tools/codetree-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAuB,MAAM,iBAAiB,CAAC;AAiBrE,MAAM,UAAU,eAAe,CAAC,MAAsB,EAAE,OAAgB;IACtE,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,wFAAwF;YACxF,2EAA2E;YAC3E,mFAAmF;QACrF,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wDAAwD;iBACtE;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uCAAuC;iBACrD;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;SACnC;QACD,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAwB,EAAE;YAC3D,mBAAmB;YACnB,IAAI,OAAe,CAAC;YACpB,IAAI,OAAe,CAAC;YAEpB,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7E,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACpC,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC1C,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAErC,iCAAiC;YACjC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC;YAED,aAAa;YACb,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEhD,eAAe;YACf,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAE3B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAExD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,OAAO;gBACb,OAAO;gBACP,IAAI;gBACJ,SAAS;gBACT,OAAO,EAAE,OAAO;oBACd,CAAC,CAAC,WAAW,OAAO,KAAK,SAAS,WAAW,IAAI,SAAS;oBAC1D,CAAC,CAAC,WAAW,OAAO,KAAK,SAAS,WAAW,IAAI,SAAS;aAC7D,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED