localwp-mcp 0.1.2 → 0.1.3
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 +33 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/local-graphql.d.ts +8 -0
- package/dist/local-graphql.js +78 -0
- package/dist/local-graphql.js.map +1 -0
- package/dist/site-files.d.ts +196 -0
- package/dist/site-files.js +411 -0
- package/dist/site-files.js.map +1 -0
- package/dist/site-lifecycle.d.ts +33 -0
- package/dist/site-lifecycle.js +66 -0
- package/dist/site-lifecycle.js.map +1 -0
- package/dist/tool-schemas.d.ts +1 -0
- package/dist/tool-schemas.js +4 -0
- package/dist/tool-schemas.js.map +1 -1
- package/dist/tools/delete-site-file.d.ts +2 -0
- package/dist/tools/delete-site-file.js +29 -0
- package/dist/tools/delete-site-file.js.map +1 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list-site-files.d.ts +2 -0
- package/dist/tools/list-site-files.js +46 -0
- package/dist/tools/list-site-files.js.map +1 -0
- package/dist/tools/read-site-file.d.ts +2 -0
- package/dist/tools/read-site-file.js +30 -0
- package/dist/tools/read-site-file.js.map +1 -0
- package/dist/tools/restart-local-site.d.ts +2 -0
- package/dist/tools/restart-local-site.js +19 -0
- package/dist/tools/restart-local-site.js.map +1 -0
- package/dist/tools/search-site-files.d.ts +2 -0
- package/dist/tools/search-site-files.js +57 -0
- package/dist/tools/search-site-files.js.map +1 -0
- package/dist/tools/start-local-site.d.ts +2 -0
- package/dist/tools/start-local-site.js +19 -0
- package/dist/tools/start-local-site.js.map +1 -0
- package/dist/tools/stop-local-site.d.ts +2 -0
- package/dist/tools/stop-local-site.js +19 -0
- package/dist/tools/stop-local-site.js.map +1 -0
- package/dist/tools/write-site-file.d.ts +2 -0
- package/dist/tools/write-site-file.js +30 -0
- package/dist/tools/write-site-file.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/package.json +1 -1
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
import { lstat, mkdir, readFile, readdir, realpath, rm, stat, writeFile, } from "fs/promises";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { config } from "./config.js";
|
|
4
|
+
import { resolveSite, summarizeSite } from "./local-sites.js";
|
|
5
|
+
import { isReadablePath } from "./process-utils.js";
|
|
6
|
+
const DEFAULT_READ_BYTES = 256 * 1024;
|
|
7
|
+
const MAX_READ_BYTES = 1024 * 1024;
|
|
8
|
+
const DEFAULT_LIST_ENTRIES = 200;
|
|
9
|
+
const MAX_LIST_ENTRIES = 1000;
|
|
10
|
+
const DEFAULT_SEARCH_MATCHES = 100;
|
|
11
|
+
const MAX_SEARCH_MATCHES = 500;
|
|
12
|
+
const SEARCH_FILE_SIZE_LIMIT = 512 * 1024;
|
|
13
|
+
export function clampSiteFileReadBytes(value) {
|
|
14
|
+
if (!value) {
|
|
15
|
+
return DEFAULT_READ_BYTES;
|
|
16
|
+
}
|
|
17
|
+
return Math.min(Math.max(value, 1), MAX_READ_BYTES);
|
|
18
|
+
}
|
|
19
|
+
export function clampSiteFileListEntries(value) {
|
|
20
|
+
if (!value) {
|
|
21
|
+
return DEFAULT_LIST_ENTRIES;
|
|
22
|
+
}
|
|
23
|
+
return Math.min(Math.max(value, 1), MAX_LIST_ENTRIES);
|
|
24
|
+
}
|
|
25
|
+
export function clampSiteFileSearchMatches(value) {
|
|
26
|
+
if (!value) {
|
|
27
|
+
return DEFAULT_SEARCH_MATCHES;
|
|
28
|
+
}
|
|
29
|
+
return Math.min(Math.max(value, 1), MAX_SEARCH_MATCHES);
|
|
30
|
+
}
|
|
31
|
+
export async function listSiteFiles(selection, options = {}) {
|
|
32
|
+
const site = await resolveSite(selection);
|
|
33
|
+
const target = await resolveSiteScopedPath(site.absolutePath, options.directoryPath || ".", {
|
|
34
|
+
allowSiteRoot: true,
|
|
35
|
+
});
|
|
36
|
+
const targetStats = await lstat(target.absolutePath);
|
|
37
|
+
if (!targetStats.isDirectory()) {
|
|
38
|
+
throw new Error(`The path '${target.relativePath}' is not a directory inside the selected Local site.`);
|
|
39
|
+
}
|
|
40
|
+
const recursive = options.recursive ?? false;
|
|
41
|
+
const maxDepth = recursive ? Math.max(options.maxDepth ?? 10, 0) : 0;
|
|
42
|
+
const maxEntries = clampSiteFileListEntries(options.maxEntries);
|
|
43
|
+
const includeHidden = options.includeHidden ?? false;
|
|
44
|
+
const entries = [];
|
|
45
|
+
const visitedDirectories = new Set();
|
|
46
|
+
let truncated = false;
|
|
47
|
+
await walkDirectory(target.absolutePath, 0);
|
|
48
|
+
return {
|
|
49
|
+
site: summarizeSite(site),
|
|
50
|
+
selectionMethod: site.selectionMethod,
|
|
51
|
+
directoryPath: target.relativePath,
|
|
52
|
+
absoluteDirectoryPath: target.absolutePath,
|
|
53
|
+
recursive,
|
|
54
|
+
maxDepth,
|
|
55
|
+
maxEntries,
|
|
56
|
+
includeHidden,
|
|
57
|
+
truncated,
|
|
58
|
+
entries,
|
|
59
|
+
};
|
|
60
|
+
async function walkDirectory(directoryPath, depth) {
|
|
61
|
+
if (entries.length >= maxEntries || depth > maxDepth) {
|
|
62
|
+
if (entries.length >= maxEntries) {
|
|
63
|
+
truncated = true;
|
|
64
|
+
}
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const directoryRealPath = await realpath(directoryPath);
|
|
68
|
+
if (visitedDirectories.has(directoryRealPath)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
visitedDirectories.add(directoryRealPath);
|
|
72
|
+
const directoryEntries = await readdir(directoryPath, { withFileTypes: true });
|
|
73
|
+
directoryEntries.sort((left, right) => left.name.localeCompare(right.name));
|
|
74
|
+
for (const entry of directoryEntries) {
|
|
75
|
+
if (!includeHidden && entry.name.startsWith(".")) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (entries.length >= maxEntries) {
|
|
79
|
+
truncated = true;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
const absoluteEntryPath = path.join(directoryPath, entry.name);
|
|
83
|
+
const entryStats = await lstat(absoluteEntryPath);
|
|
84
|
+
const relativeEntryPath = path.relative(target.siteRoot, absoluteEntryPath) || ".";
|
|
85
|
+
entries.push({
|
|
86
|
+
path: relativeEntryPath,
|
|
87
|
+
absolutePath: absoluteEntryPath,
|
|
88
|
+
kind: classifyDirent(entryStats),
|
|
89
|
+
sizeBytes: entryStats.size,
|
|
90
|
+
modifiedAt: entryStats.mtime.toISOString(),
|
|
91
|
+
});
|
|
92
|
+
if (recursive &&
|
|
93
|
+
entryStats.isDirectory() &&
|
|
94
|
+
depth < maxDepth) {
|
|
95
|
+
await walkDirectory(absoluteEntryPath, depth + 1);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export async function readSiteFile(selection, options) {
|
|
101
|
+
const site = await resolveSite(selection);
|
|
102
|
+
const target = await resolveSiteScopedPath(site.absolutePath, options.filePath);
|
|
103
|
+
const fileStats = await stat(target.absolutePath);
|
|
104
|
+
if (!fileStats.isFile()) {
|
|
105
|
+
throw new Error(`The path '${target.relativePath}' is not a regular file inside the selected Local site.`);
|
|
106
|
+
}
|
|
107
|
+
const maxBytes = clampSiteFileReadBytes(options.maxBytes);
|
|
108
|
+
const buffer = await readFile(target.absolutePath);
|
|
109
|
+
if (isLikelyBinaryBuffer(buffer)) {
|
|
110
|
+
throw new Error(`The file '${target.relativePath}' looks binary. This tool is for text files only.`);
|
|
111
|
+
}
|
|
112
|
+
const truncated = buffer.length > maxBytes;
|
|
113
|
+
const excerptBuffer = truncated ? buffer.subarray(0, maxBytes) : buffer;
|
|
114
|
+
const content = excerptBuffer.toString("utf8");
|
|
115
|
+
return {
|
|
116
|
+
site: summarizeSite(site),
|
|
117
|
+
selectionMethod: site.selectionMethod,
|
|
118
|
+
filePath: target.relativePath,
|
|
119
|
+
absolutePath: target.absolutePath,
|
|
120
|
+
sizeBytes: buffer.length,
|
|
121
|
+
returnedBytes: excerptBuffer.length,
|
|
122
|
+
maxBytes,
|
|
123
|
+
truncated,
|
|
124
|
+
content,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
export async function searchSiteFiles(selection, options) {
|
|
128
|
+
const site = await resolveSite(selection);
|
|
129
|
+
const target = await resolveSiteScopedPath(site.absolutePath, options.directoryPath || ".", {
|
|
130
|
+
allowSiteRoot: true,
|
|
131
|
+
});
|
|
132
|
+
const targetStats = await lstat(target.absolutePath);
|
|
133
|
+
if (!targetStats.isDirectory()) {
|
|
134
|
+
throw new Error(`The path '${target.relativePath}' is not a directory inside the selected Local site.`);
|
|
135
|
+
}
|
|
136
|
+
const query = options.query.trim();
|
|
137
|
+
if (!query) {
|
|
138
|
+
throw new Error("search_site_files requires a non-empty query.");
|
|
139
|
+
}
|
|
140
|
+
const caseSensitive = options.caseSensitive ?? false;
|
|
141
|
+
const includeHidden = options.includeHidden ?? false;
|
|
142
|
+
const maxDepth = Math.max(options.maxDepth ?? 10, 0);
|
|
143
|
+
const maxMatches = clampSiteFileSearchMatches(options.maxMatches);
|
|
144
|
+
const visitedDirectories = new Set();
|
|
145
|
+
const matches = [];
|
|
146
|
+
let scannedFiles = 0;
|
|
147
|
+
let skippedBinaryFiles = 0;
|
|
148
|
+
let skippedLargeFiles = 0;
|
|
149
|
+
let truncated = false;
|
|
150
|
+
await walkDirectory(target.absolutePath, 0);
|
|
151
|
+
return {
|
|
152
|
+
site: summarizeSite(site),
|
|
153
|
+
selectionMethod: site.selectionMethod,
|
|
154
|
+
query,
|
|
155
|
+
caseSensitive,
|
|
156
|
+
directoryPath: target.relativePath,
|
|
157
|
+
absoluteDirectoryPath: target.absolutePath,
|
|
158
|
+
includeHidden,
|
|
159
|
+
maxDepth,
|
|
160
|
+
maxMatches,
|
|
161
|
+
scannedFiles,
|
|
162
|
+
skippedBinaryFiles,
|
|
163
|
+
skippedLargeFiles,
|
|
164
|
+
truncated,
|
|
165
|
+
matches,
|
|
166
|
+
};
|
|
167
|
+
async function walkDirectory(directoryPath, depth) {
|
|
168
|
+
if (matches.length >= maxMatches || depth > maxDepth) {
|
|
169
|
+
if (matches.length >= maxMatches) {
|
|
170
|
+
truncated = true;
|
|
171
|
+
}
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const directoryRealPath = await realpath(directoryPath);
|
|
175
|
+
if (visitedDirectories.has(directoryRealPath)) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
visitedDirectories.add(directoryRealPath);
|
|
179
|
+
const directoryEntries = await readdir(directoryPath, { withFileTypes: true });
|
|
180
|
+
directoryEntries.sort((left, right) => left.name.localeCompare(right.name));
|
|
181
|
+
for (const entry of directoryEntries) {
|
|
182
|
+
if (!includeHidden && entry.name.startsWith(".")) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (matches.length >= maxMatches) {
|
|
186
|
+
truncated = true;
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
const absoluteEntryPath = path.join(directoryPath, entry.name);
|
|
190
|
+
const entryStats = await lstat(absoluteEntryPath);
|
|
191
|
+
if (entryStats.isSymbolicLink()) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
if (entryStats.isDirectory()) {
|
|
195
|
+
if (depth < maxDepth) {
|
|
196
|
+
await walkDirectory(absoluteEntryPath, depth + 1);
|
|
197
|
+
}
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
if (!entryStats.isFile()) {
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
scannedFiles += 1;
|
|
204
|
+
if (entryStats.size > SEARCH_FILE_SIZE_LIMIT) {
|
|
205
|
+
skippedLargeFiles += 1;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const buffer = await readFile(absoluteEntryPath);
|
|
209
|
+
if (isLikelyBinaryBuffer(buffer)) {
|
|
210
|
+
skippedBinaryFiles += 1;
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
const content = buffer.toString("utf8");
|
|
214
|
+
const contentToSearch = caseSensitive ? content : content.toLowerCase();
|
|
215
|
+
const queryToSearch = caseSensitive ? query : query.toLowerCase();
|
|
216
|
+
let startIndex = 0;
|
|
217
|
+
while (matches.length < maxMatches) {
|
|
218
|
+
const matchIndex = contentToSearch.indexOf(queryToSearch, startIndex);
|
|
219
|
+
if (matchIndex === -1) {
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
const location = getLineAndColumn(content, matchIndex);
|
|
223
|
+
const lineText = getLineText(content, location.line);
|
|
224
|
+
matches.push({
|
|
225
|
+
path: path.relative(target.siteRoot, absoluteEntryPath) || ".",
|
|
226
|
+
absolutePath: absoluteEntryPath,
|
|
227
|
+
line: location.line,
|
|
228
|
+
column: location.column,
|
|
229
|
+
excerpt: lineText,
|
|
230
|
+
});
|
|
231
|
+
startIndex = matchIndex + Math.max(queryToSearch.length, 1);
|
|
232
|
+
}
|
|
233
|
+
if (matches.length >= maxMatches) {
|
|
234
|
+
truncated = true;
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
export async function writeSiteFile(selection, options) {
|
|
241
|
+
assertFullAccessForSiteFiles("write_site_file");
|
|
242
|
+
const site = await resolveSite(selection);
|
|
243
|
+
const target = await resolveSiteScopedPath(site.absolutePath, options.filePath, {
|
|
244
|
+
allowMissingTarget: true,
|
|
245
|
+
});
|
|
246
|
+
const targetStats = target.exists ? await lstat(target.absolutePath) : null;
|
|
247
|
+
if (targetStats?.isDirectory()) {
|
|
248
|
+
throw new Error(`The path '${target.relativePath}' is a directory. Use a file path instead.`);
|
|
249
|
+
}
|
|
250
|
+
const overwrite = options.overwrite ?? true;
|
|
251
|
+
if (target.exists && !overwrite) {
|
|
252
|
+
throw new Error(`The file '${target.relativePath}' already exists. Set overwrite=true to replace it.`);
|
|
253
|
+
}
|
|
254
|
+
const parentDirectory = path.dirname(target.absolutePath);
|
|
255
|
+
const parentExists = await isReadablePath(parentDirectory);
|
|
256
|
+
const createDirectories = options.createDirectories ?? true;
|
|
257
|
+
let createdDirectories = false;
|
|
258
|
+
if (!parentExists) {
|
|
259
|
+
if (!createDirectories) {
|
|
260
|
+
throw new Error(`The parent directory for '${target.relativePath}' does not exist.`);
|
|
261
|
+
}
|
|
262
|
+
await mkdir(parentDirectory, { recursive: true });
|
|
263
|
+
createdDirectories = true;
|
|
264
|
+
}
|
|
265
|
+
await writeFile(target.absolutePath, options.content, "utf8");
|
|
266
|
+
return {
|
|
267
|
+
site: summarizeSite(site),
|
|
268
|
+
selectionMethod: site.selectionMethod,
|
|
269
|
+
filePath: target.relativePath,
|
|
270
|
+
absolutePath: target.absolutePath,
|
|
271
|
+
existedBefore: target.exists,
|
|
272
|
+
overwrite,
|
|
273
|
+
createdDirectories,
|
|
274
|
+
bytesWritten: Buffer.byteLength(options.content, "utf8"),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
export async function deleteSiteFile(selection, options) {
|
|
278
|
+
assertFullAccessForSiteFiles("delete_site_file");
|
|
279
|
+
const site = await resolveSite(selection);
|
|
280
|
+
const target = await resolveSiteScopedPath(site.absolutePath, options.targetPath, {
|
|
281
|
+
allowSiteRoot: false,
|
|
282
|
+
allowMissingTarget: true,
|
|
283
|
+
});
|
|
284
|
+
if (!target.exists) {
|
|
285
|
+
if (options.missingOk) {
|
|
286
|
+
return {
|
|
287
|
+
site: summarizeSite(site),
|
|
288
|
+
selectionMethod: site.selectionMethod,
|
|
289
|
+
targetPath: target.relativePath,
|
|
290
|
+
absolutePath: target.absolutePath,
|
|
291
|
+
existedBefore: false,
|
|
292
|
+
deleted: false,
|
|
293
|
+
recursive: options.recursive ?? false,
|
|
294
|
+
missingOk: true,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
throw new Error(`The path '${target.relativePath}' does not exist inside the selected Local site.`);
|
|
298
|
+
}
|
|
299
|
+
const targetStats = await lstat(target.absolutePath);
|
|
300
|
+
const recursive = options.recursive ?? false;
|
|
301
|
+
await rm(target.absolutePath, {
|
|
302
|
+
recursive,
|
|
303
|
+
force: false,
|
|
304
|
+
});
|
|
305
|
+
return {
|
|
306
|
+
site: summarizeSite(site),
|
|
307
|
+
selectionMethod: site.selectionMethod,
|
|
308
|
+
targetPath: target.relativePath,
|
|
309
|
+
absolutePath: target.absolutePath,
|
|
310
|
+
existedBefore: true,
|
|
311
|
+
deleted: true,
|
|
312
|
+
kind: classifyDirent(targetStats),
|
|
313
|
+
recursive,
|
|
314
|
+
missingOk: options.missingOk ?? false,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
export async function resolveSiteScopedPath(siteRoot, requestedPath, options = {}) {
|
|
318
|
+
const trimmedPath = requestedPath.trim();
|
|
319
|
+
const normalizedInput = trimmedPath || ".";
|
|
320
|
+
const absolutePath = path.resolve(siteRoot, normalizedInput);
|
|
321
|
+
const relativePath = path.relative(siteRoot, absolutePath) || ".";
|
|
322
|
+
if (relativePath.startsWith("..") || path.isAbsolute(relativePath)) {
|
|
323
|
+
throw new Error(`The path '${requestedPath}' points outside the selected Local site.`);
|
|
324
|
+
}
|
|
325
|
+
if (!options.allowSiteRoot && relativePath === ".") {
|
|
326
|
+
throw new Error("Refusing to operate on the Local site root directory itself.");
|
|
327
|
+
}
|
|
328
|
+
const siteRootReal = await realpath(siteRoot);
|
|
329
|
+
const exists = await isReadablePath(absolutePath);
|
|
330
|
+
const anchorPath = exists
|
|
331
|
+
? absolutePath
|
|
332
|
+
: await findNearestExistingAncestor(absolutePath, siteRoot);
|
|
333
|
+
if (!anchorPath) {
|
|
334
|
+
throw new Error(`The path '${requestedPath}' does not exist inside the selected Local site.`);
|
|
335
|
+
}
|
|
336
|
+
const anchorRealPath = await realpath(anchorPath);
|
|
337
|
+
if (!isPathWithinBase(siteRootReal, anchorRealPath)) {
|
|
338
|
+
throw new Error(`The path '${requestedPath}' resolves outside the selected Local site.`);
|
|
339
|
+
}
|
|
340
|
+
if (!exists && !options.allowMissingTarget) {
|
|
341
|
+
throw new Error(`The path '${requestedPath}' does not exist inside the selected Local site.`);
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
siteRoot,
|
|
345
|
+
siteRootReal,
|
|
346
|
+
absolutePath,
|
|
347
|
+
relativePath,
|
|
348
|
+
exists,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
async function findNearestExistingAncestor(absolutePath, siteRoot) {
|
|
352
|
+
let currentPath = absolutePath;
|
|
353
|
+
while (true) {
|
|
354
|
+
if (await isReadablePath(currentPath)) {
|
|
355
|
+
return currentPath;
|
|
356
|
+
}
|
|
357
|
+
const parentPath = path.dirname(currentPath);
|
|
358
|
+
if (currentPath === parentPath) {
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
if (path.relative(siteRoot, parentPath).startsWith("..")) {
|
|
362
|
+
return null;
|
|
363
|
+
}
|
|
364
|
+
currentPath = parentPath;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
function isPathWithinBase(basePath, candidatePath) {
|
|
368
|
+
const relativePath = path.relative(basePath, candidatePath);
|
|
369
|
+
return (relativePath === "" ||
|
|
370
|
+
relativePath === "." ||
|
|
371
|
+
(!relativePath.startsWith("..") && !path.isAbsolute(relativePath)));
|
|
372
|
+
}
|
|
373
|
+
function classifyDirent(fileStats) {
|
|
374
|
+
if (fileStats.isFile()) {
|
|
375
|
+
return "file";
|
|
376
|
+
}
|
|
377
|
+
if (fileStats.isDirectory()) {
|
|
378
|
+
return "directory";
|
|
379
|
+
}
|
|
380
|
+
if (fileStats.isSymbolicLink()) {
|
|
381
|
+
return "symlink";
|
|
382
|
+
}
|
|
383
|
+
return "other";
|
|
384
|
+
}
|
|
385
|
+
function isLikelyBinaryBuffer(buffer) {
|
|
386
|
+
return buffer.subarray(0, Math.min(buffer.length, 4096)).includes(0);
|
|
387
|
+
}
|
|
388
|
+
function getLineAndColumn(content, index) {
|
|
389
|
+
let line = 1;
|
|
390
|
+
let column = 1;
|
|
391
|
+
for (let cursor = 0; cursor < index; cursor += 1) {
|
|
392
|
+
if (content[cursor] === "\n") {
|
|
393
|
+
line += 1;
|
|
394
|
+
column = 1;
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
column += 1;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return { line, column };
|
|
401
|
+
}
|
|
402
|
+
function getLineText(content, lineNumber) {
|
|
403
|
+
const lines = content.split(/\r?\n/);
|
|
404
|
+
return lines[Math.max(lineNumber - 1, 0)] || "";
|
|
405
|
+
}
|
|
406
|
+
function assertFullAccessForSiteFiles(toolName) {
|
|
407
|
+
if (config.profile !== "full-access") {
|
|
408
|
+
throw new Error(`${toolName} requires LOCALWP_MCP_PROFILE=full-access.`);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
//# sourceMappingURL=site-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-files.js","sourceRoot":"","sources":["../src/site-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { LocalSiteStatus, SiteSelection } from "./types.js";
|
|
2
|
+
export type SiteLifecycleAction = "start" | "stop" | "restart";
|
|
3
|
+
export type SiteLifecycleStep = "start" | "stop";
|
|
4
|
+
interface SiteLifecyclePlan {
|
|
5
|
+
noOp: boolean;
|
|
6
|
+
performedActions: SiteLifecycleStep[];
|
|
7
|
+
}
|
|
8
|
+
export declare function runSiteLifecycleAction(action: SiteLifecycleAction, selection: SiteSelection): Promise<{
|
|
9
|
+
action: SiteLifecycleAction;
|
|
10
|
+
performedActions: SiteLifecycleStep[];
|
|
11
|
+
noOp: boolean;
|
|
12
|
+
previousStatus: string;
|
|
13
|
+
reportedStatus: string;
|
|
14
|
+
metadataStatus: string;
|
|
15
|
+
statusSettled: boolean;
|
|
16
|
+
site: {
|
|
17
|
+
status: string;
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
domain: string | undefined;
|
|
21
|
+
path: string;
|
|
22
|
+
wpRoot: string;
|
|
23
|
+
localVersion: string | undefined;
|
|
24
|
+
phpVersion: string | null;
|
|
25
|
+
mysqlVersion: string | null;
|
|
26
|
+
httpPort: number | null;
|
|
27
|
+
mysqlPort: number | null;
|
|
28
|
+
};
|
|
29
|
+
selectionMethod: string;
|
|
30
|
+
accessProfile: import("./types.js").AccessProfile;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function planSiteLifecycleAction(action: SiteLifecycleAction, currentStatus: LocalSiteStatus): SiteLifecyclePlan;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { config } from "./config.js";
|
|
2
|
+
import { startLocalSite, stopLocalSite } from "./local-graphql.js";
|
|
3
|
+
import { readJsonFile, resolveSite, summarizeSite } from "./local-sites.js";
|
|
4
|
+
export async function runSiteLifecycleAction(action, selection) {
|
|
5
|
+
const site = await resolveSite(selection);
|
|
6
|
+
const plan = planSiteLifecycleAction(action, site.status);
|
|
7
|
+
let reportedStatus = site.status;
|
|
8
|
+
let metadataStatus = site.status;
|
|
9
|
+
for (const step of plan.performedActions) {
|
|
10
|
+
const result = step === "start" ? await startLocalSite(site.id) : await stopLocalSite(site.id);
|
|
11
|
+
reportedStatus = result.status;
|
|
12
|
+
metadataStatus = await waitForSiteStatus(site.id, result.status);
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
action,
|
|
16
|
+
performedActions: plan.performedActions,
|
|
17
|
+
noOp: plan.noOp,
|
|
18
|
+
previousStatus: site.status,
|
|
19
|
+
reportedStatus,
|
|
20
|
+
metadataStatus,
|
|
21
|
+
statusSettled: metadataStatus === reportedStatus,
|
|
22
|
+
site: {
|
|
23
|
+
...summarizeSite(site),
|
|
24
|
+
status: reportedStatus,
|
|
25
|
+
},
|
|
26
|
+
selectionMethod: site.selectionMethod,
|
|
27
|
+
accessProfile: config.profile,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function planSiteLifecycleAction(action, currentStatus) {
|
|
31
|
+
const normalizedStatus = currentStatus.toLowerCase();
|
|
32
|
+
if (action === "start") {
|
|
33
|
+
return normalizedStatus === "running"
|
|
34
|
+
? { noOp: true, performedActions: [] }
|
|
35
|
+
: { noOp: false, performedActions: ["start"] };
|
|
36
|
+
}
|
|
37
|
+
if (action === "stop") {
|
|
38
|
+
return normalizedStatus === "halted"
|
|
39
|
+
? { noOp: true, performedActions: [] }
|
|
40
|
+
: { noOp: false, performedActions: ["stop"] };
|
|
41
|
+
}
|
|
42
|
+
if (normalizedStatus === "running") {
|
|
43
|
+
return { noOp: false, performedActions: ["stop", "start"] };
|
|
44
|
+
}
|
|
45
|
+
return { noOp: false, performedActions: ["start"] };
|
|
46
|
+
}
|
|
47
|
+
async function waitForSiteStatus(siteId, expectedStatus) {
|
|
48
|
+
const timeoutMs = Math.min(config.defaultTimeoutMs, 30_000);
|
|
49
|
+
const startedAt = Date.now();
|
|
50
|
+
let lastStatus = expectedStatus;
|
|
51
|
+
while (Date.now() - startedAt < timeoutMs) {
|
|
52
|
+
const statuses = await readJsonFile(config.localSiteStatusesJson, {});
|
|
53
|
+
lastStatus = statuses[siteId] || "unknown";
|
|
54
|
+
if (lastStatus === expectedStatus) {
|
|
55
|
+
return lastStatus;
|
|
56
|
+
}
|
|
57
|
+
await delay(500);
|
|
58
|
+
}
|
|
59
|
+
return lastStatus;
|
|
60
|
+
}
|
|
61
|
+
function delay(ms) {
|
|
62
|
+
return new Promise((resolve) => {
|
|
63
|
+
setTimeout(resolve, ms);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=site-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-lifecycle.js","sourceRoot":"","sources":["../src/site-lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/tool-schemas.d.ts
CHANGED
package/dist/tool-schemas.js
CHANGED
|
@@ -17,4 +17,8 @@ export const backupScopeSchema = z
|
|
|
17
17
|
.enum(["database", "full"])
|
|
18
18
|
.optional()
|
|
19
19
|
.describe("Backup only the database, or create a full Local-style backup with app, conf, logs, and a fresh SQL export.");
|
|
20
|
+
export const siteRelativePathSchema = z
|
|
21
|
+
.string()
|
|
22
|
+
.min(1)
|
|
23
|
+
.describe("Path relative to the selected site's root directory, for example 'app/public/wp-content/themes/my-theme/style.css'.");
|
|
20
24
|
//# sourceMappingURL=tool-schemas.js.map
|
package/dist/tool-schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-schemas.js","sourceRoot":"","sources":["../src/tool-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;CACrE,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;KAC/B,QAAQ,EAAE;KACV,QAAQ,CACP,0EAA0E,CAC3E,CAAC;AAEJ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;KAC1B,QAAQ,EAAE;KACV,QAAQ,CACP,6GAA6G,CAC9G,CAAC"}
|
|
1
|
+
{"version":3,"file":"tool-schemas.js","sourceRoot":"","sources":["../src/tool-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;CACrE,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;KAC/B,QAAQ,EAAE;KACV,QAAQ,CACP,0EAA0E,CAC3E,CAAC;AAEJ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;KAC1B,QAAQ,EAAE;KACV,QAAQ,CACP,6GAA6G,CAC9G,CAAC;AAEJ,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,QAAQ,CACP,qHAAqH,CACtH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createErrorToolResult, createJsonToolResult } from "../results.js";
|
|
3
|
+
import { deleteSiteFile } from "../site-files.js";
|
|
4
|
+
import { siteRelativePathSchema, siteSelectorSchema } from "../tool-schemas.js";
|
|
5
|
+
export function registerDeleteSiteFileTool(server) {
|
|
6
|
+
server.registerTool("delete_site_file", {
|
|
7
|
+
description: "Deletes a file or directory inside the selected LocalWP site. Requires the 'full-access' profile.",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
...siteSelectorSchema,
|
|
10
|
+
targetPath: siteRelativePathSchema.describe("File or directory path relative to the selected site's root directory."),
|
|
11
|
+
recursive: z
|
|
12
|
+
.boolean()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("When true, allow deleting non-empty directories recursively."),
|
|
15
|
+
missingOk: z
|
|
16
|
+
.boolean()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("When true, return success even if the target path does not exist."),
|
|
19
|
+
},
|
|
20
|
+
}, async ({ siteId, siteName, targetPath, recursive, missingOk }) => {
|
|
21
|
+
try {
|
|
22
|
+
return createJsonToolResult(await deleteSiteFile({ siteId, siteName }, { targetPath, recursive, missingOk }));
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return createErrorToolResult(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=delete-site-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-site-file.js","sourceRoot":"","sources":["../../src/tools/delete-site-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,mGAAmG;QACrG,WAAW,EAAE;YACX,GAAG,kBAAkB;YACrB,UAAU,EAAE,sBAAsB,CAAC,QAAQ,CACzC,wEAAwE,CACzE;YACD,SAAS,EAAE,CAAC;iBACT,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,8DAA8D,CAC/D;YACH,SAAS,EAAE,CAAC;iBACT,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,mEAAmE,CACpE;SACJ;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QAC/D,IAAI,CAAC;YACH,OAAO,oBAAoB,CACzB,MAAM,cAAc,CAClB,EAAE,MAAM,EAAE,QAAQ,EAAE,EACpB,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,CACrC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { registerBackupSiteTool } from "./backup-site.js";
|
|
2
2
|
import { registerDbExportTool } from "./db-export.js";
|
|
3
3
|
import { registerDbImportTool } from "./db-import.js";
|
|
4
|
+
import { registerDeleteSiteFileTool } from "./delete-site-file.js";
|
|
4
5
|
import { registerExecuteWpCliTool } from "./execute-wp-cli.js";
|
|
6
|
+
import { registerListSiteFilesTool } from "./list-site-files.js";
|
|
5
7
|
import { registerLocalDoctorTool } from "./local-doctor.js";
|
|
6
8
|
import { registerLocalEnvironmentCheckTool } from "./local-environment-check.js";
|
|
7
9
|
import { registerLocalLogsTool } from "./local-logs.js";
|
|
@@ -10,13 +12,27 @@ import { registerLocalSiteInfoTool } from "./local-site-info.js";
|
|
|
10
12
|
import { registerMysqlExecuteTool } from "./mysql-execute.js";
|
|
11
13
|
import { registerMysqlQueryTool } from "./mysql-query.js";
|
|
12
14
|
import { registerMysqlSchemaTool } from "./mysql-schema.js";
|
|
15
|
+
import { registerReadSiteFileTool } from "./read-site-file.js";
|
|
16
|
+
import { registerRestartLocalSiteTool } from "./restart-local-site.js";
|
|
13
17
|
import { registerRestoreBackupTool } from "./restore-backup.js";
|
|
18
|
+
import { registerSearchSiteFilesTool } from "./search-site-files.js";
|
|
19
|
+
import { registerStartLocalSiteTool } from "./start-local-site.js";
|
|
20
|
+
import { registerStopLocalSiteTool } from "./stop-local-site.js";
|
|
21
|
+
import { registerWriteSiteFileTool } from "./write-site-file.js";
|
|
14
22
|
export function registerTools(server) {
|
|
15
23
|
registerListLocalSitesTool(server);
|
|
24
|
+
registerStartLocalSiteTool(server);
|
|
25
|
+
registerStopLocalSiteTool(server);
|
|
26
|
+
registerRestartLocalSiteTool(server);
|
|
16
27
|
registerLocalEnvironmentCheckTool(server);
|
|
17
28
|
registerLocalDoctorTool(server);
|
|
18
29
|
registerLocalLogsTool(server);
|
|
19
30
|
registerLocalSiteInfoTool(server);
|
|
31
|
+
registerListSiteFilesTool(server);
|
|
32
|
+
registerReadSiteFileTool(server);
|
|
33
|
+
registerSearchSiteFilesTool(server);
|
|
34
|
+
registerWriteSiteFileTool(server);
|
|
35
|
+
registerDeleteSiteFileTool(server);
|
|
20
36
|
registerBackupSiteTool(server);
|
|
21
37
|
registerDbExportTool(server);
|
|
22
38
|
registerDbImportTool(server);
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,iCAAiC,CAAC,MAAM,CAAC,CAAC;IAC1C,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
|