@local-labs-jpollock/local-cli 0.0.1

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.
Files changed (86) hide show
  1. package/addon-dist/bin/mcp-stdio.js +2808 -0
  2. package/addon-dist/lib/common/constants.d.ts +22 -0
  3. package/addon-dist/lib/common/constants.js +26 -0
  4. package/addon-dist/lib/common/theme.d.ts +68 -0
  5. package/addon-dist/lib/common/theme.js +126 -0
  6. package/addon-dist/lib/common/types.d.ts +298 -0
  7. package/addon-dist/lib/common/types.js +6 -0
  8. package/addon-dist/lib/main/config/ConnectionInfo.d.ts +25 -0
  9. package/addon-dist/lib/main/config/ConnectionInfo.js +82 -0
  10. package/addon-dist/lib/main/index.d.ts +12 -0
  11. package/addon-dist/lib/main/index.js +3322 -0
  12. package/addon-dist/lib/main/mcp/McpAuth.d.ts +37 -0
  13. package/addon-dist/lib/main/mcp/McpAuth.js +87 -0
  14. package/addon-dist/lib/main/mcp/McpServer.d.ts +67 -0
  15. package/addon-dist/lib/main/mcp/McpServer.js +343 -0
  16. package/addon-dist/lib/main/mcp/tools/changePhpVersion.d.ts +7 -0
  17. package/addon-dist/lib/main/mcp/tools/changePhpVersion.js +81 -0
  18. package/addon-dist/lib/main/mcp/tools/cloneSite.d.ts +7 -0
  19. package/addon-dist/lib/main/mcp/tools/cloneSite.js +66 -0
  20. package/addon-dist/lib/main/mcp/tools/createSite.d.ts +7 -0
  21. package/addon-dist/lib/main/mcp/tools/createSite.js +137 -0
  22. package/addon-dist/lib/main/mcp/tools/deleteSite.d.ts +7 -0
  23. package/addon-dist/lib/main/mcp/tools/deleteSite.js +72 -0
  24. package/addon-dist/lib/main/mcp/tools/exportDatabase.d.ts +7 -0
  25. package/addon-dist/lib/main/mcp/tools/exportDatabase.js +72 -0
  26. package/addon-dist/lib/main/mcp/tools/exportSite.d.ts +7 -0
  27. package/addon-dist/lib/main/mcp/tools/exportSite.js +103 -0
  28. package/addon-dist/lib/main/mcp/tools/getLocalInfo.d.ts +7 -0
  29. package/addon-dist/lib/main/mcp/tools/getLocalInfo.js +72 -0
  30. package/addon-dist/lib/main/mcp/tools/getSite.d.ts +7 -0
  31. package/addon-dist/lib/main/mcp/tools/getSite.js +68 -0
  32. package/addon-dist/lib/main/mcp/tools/getSiteLogs.d.ts +7 -0
  33. package/addon-dist/lib/main/mcp/tools/getSiteLogs.js +149 -0
  34. package/addon-dist/lib/main/mcp/tools/helpers.d.ts +59 -0
  35. package/addon-dist/lib/main/mcp/tools/helpers.js +179 -0
  36. package/addon-dist/lib/main/mcp/tools/importDatabase.d.ts +7 -0
  37. package/addon-dist/lib/main/mcp/tools/importDatabase.js +109 -0
  38. package/addon-dist/lib/main/mcp/tools/importSite.d.ts +7 -0
  39. package/addon-dist/lib/main/mcp/tools/importSite.js +149 -0
  40. package/addon-dist/lib/main/mcp/tools/index.d.ts +26 -0
  41. package/addon-dist/lib/main/mcp/tools/index.js +117 -0
  42. package/addon-dist/lib/main/mcp/tools/listBlueprints.d.ts +7 -0
  43. package/addon-dist/lib/main/mcp/tools/listBlueprints.js +54 -0
  44. package/addon-dist/lib/main/mcp/tools/listServices.d.ts +7 -0
  45. package/addon-dist/lib/main/mcp/tools/listServices.js +112 -0
  46. package/addon-dist/lib/main/mcp/tools/listSites.d.ts +7 -0
  47. package/addon-dist/lib/main/mcp/tools/listSites.js +62 -0
  48. package/addon-dist/lib/main/mcp/tools/openAdminer.d.ts +7 -0
  49. package/addon-dist/lib/main/mcp/tools/openAdminer.js +59 -0
  50. package/addon-dist/lib/main/mcp/tools/openSite.d.ts +7 -0
  51. package/addon-dist/lib/main/mcp/tools/openSite.js +62 -0
  52. package/addon-dist/lib/main/mcp/tools/renameSite.d.ts +7 -0
  53. package/addon-dist/lib/main/mcp/tools/renameSite.js +70 -0
  54. package/addon-dist/lib/main/mcp/tools/restartSite.d.ts +7 -0
  55. package/addon-dist/lib/main/mcp/tools/restartSite.js +56 -0
  56. package/addon-dist/lib/main/mcp/tools/saveBlueprint.d.ts +7 -0
  57. package/addon-dist/lib/main/mcp/tools/saveBlueprint.js +89 -0
  58. package/addon-dist/lib/main/mcp/tools/startSite.d.ts +7 -0
  59. package/addon-dist/lib/main/mcp/tools/startSite.js +54 -0
  60. package/addon-dist/lib/main/mcp/tools/stopSite.d.ts +7 -0
  61. package/addon-dist/lib/main/mcp/tools/stopSite.js +54 -0
  62. package/addon-dist/lib/main/mcp/tools/toggleXdebug.d.ts +7 -0
  63. package/addon-dist/lib/main/mcp/tools/toggleXdebug.js +69 -0
  64. package/addon-dist/lib/main/mcp/tools/trustSsl.d.ts +7 -0
  65. package/addon-dist/lib/main/mcp/tools/trustSsl.js +59 -0
  66. package/addon-dist/lib/main/mcp/tools/wpCli.d.ts +7 -0
  67. package/addon-dist/lib/main/mcp/tools/wpCli.js +110 -0
  68. package/addon-dist/lib/main.d.ts +1 -0
  69. package/addon-dist/lib/main.js +10 -0
  70. package/addon-dist/lib/renderer/index.d.ts +7 -0
  71. package/addon-dist/lib/renderer/index.js +479 -0
  72. package/addon-dist/package.json +73 -0
  73. package/bin/lwp.js +10 -0
  74. package/lib/bootstrap/index.d.ts +98 -0
  75. package/lib/bootstrap/index.js +493 -0
  76. package/lib/bootstrap/paths.d.ts +28 -0
  77. package/lib/bootstrap/paths.js +96 -0
  78. package/lib/client/GraphQLClient.d.ts +38 -0
  79. package/lib/client/GraphQLClient.js +71 -0
  80. package/lib/client/index.d.ts +4 -0
  81. package/lib/client/index.js +10 -0
  82. package/lib/formatters/index.d.ts +75 -0
  83. package/lib/formatters/index.js +139 -0
  84. package/lib/index.d.ts +8 -0
  85. package/lib/index.js +1173 -0
  86. package/package.json +72 -0
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * list_services Tool
4
+ * List available Lightning Services (PHP, MySQL, Nginx versions)
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.listServicesDefinition = void 0;
8
+ exports.listServices = listServices;
9
+ exports.listServicesDefinition = {
10
+ name: 'list_services',
11
+ description: 'List available service versions (PHP, MySQL, Nginx) that can be used with sites',
12
+ inputSchema: {
13
+ type: 'object',
14
+ properties: {
15
+ type: {
16
+ type: 'string',
17
+ enum: ['php', 'database', 'webserver', 'all'],
18
+ description: 'Type of services to list (default: all)',
19
+ },
20
+ },
21
+ },
22
+ };
23
+ async function listServices(args, services) {
24
+ const { type = 'all' } = args;
25
+ try {
26
+ // Check if lightningServices is available
27
+ if (!services.lightningServices) {
28
+ return {
29
+ content: [{ type: 'text', text: 'Lightning Services not available' }],
30
+ isError: true,
31
+ };
32
+ }
33
+ const registeredServices = services.lightningServices.getRegisteredServices();
34
+ if (!registeredServices) {
35
+ return {
36
+ content: [{ type: 'text', text: 'No services registered' }],
37
+ isError: true,
38
+ };
39
+ }
40
+ const results = [];
41
+ // Helper to format service list
42
+ const formatServices = (serviceName, serviceData) => {
43
+ const versions = [];
44
+ if (serviceData && typeof serviceData === 'object') {
45
+ for (const version of Object.keys(serviceData)) {
46
+ const info = serviceData[version];
47
+ const label = info?.label || serviceName;
48
+ versions.push(` - ${version}${label !== serviceName ? ` (${label})` : ''}`);
49
+ }
50
+ }
51
+ return versions;
52
+ };
53
+ // PHP versions
54
+ if (type === 'all' || type === 'php') {
55
+ results.push('PHP Versions:');
56
+ const phpVersions = formatServices('php', registeredServices.php);
57
+ if (phpVersions.length > 0) {
58
+ results.push(...phpVersions);
59
+ }
60
+ else {
61
+ results.push(' [No PHP versions installed]');
62
+ }
63
+ }
64
+ // Database versions (MySQL and MariaDB)
65
+ if (type === 'all' || type === 'database') {
66
+ results.push('\nDatabase Versions:');
67
+ if (registeredServices.mysql) {
68
+ results.push(' MySQL:');
69
+ const mysqlVersions = formatServices('mysql', registeredServices.mysql);
70
+ if (mysqlVersions.length > 0) {
71
+ results.push(...mysqlVersions.map((v) => ' ' + v));
72
+ }
73
+ }
74
+ if (registeredServices.mariadb) {
75
+ results.push(' MariaDB:');
76
+ const mariadbVersions = formatServices('mariadb', registeredServices.mariadb);
77
+ if (mariadbVersions.length > 0) {
78
+ results.push(...mariadbVersions.map((v) => ' ' + v));
79
+ }
80
+ }
81
+ if (!registeredServices.mysql && !registeredServices.mariadb) {
82
+ results.push(' [No database versions installed]');
83
+ }
84
+ }
85
+ // Web server versions (Nginx)
86
+ if (type === 'all' || type === 'webserver') {
87
+ results.push('\nWeb Server Versions:');
88
+ const nginxVersions = formatServices('nginx', registeredServices.nginx);
89
+ if (nginxVersions.length > 0) {
90
+ results.push(...nginxVersions);
91
+ }
92
+ else {
93
+ results.push(' [No web server versions installed]');
94
+ }
95
+ }
96
+ return {
97
+ content: [
98
+ {
99
+ type: 'text',
100
+ text: results.join('\n'),
101
+ },
102
+ ],
103
+ };
104
+ }
105
+ catch (error) {
106
+ return {
107
+ content: [{ type: 'text', text: `Failed to list services: ${error.message}` }],
108
+ isError: true,
109
+ };
110
+ }
111
+ }
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdFNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21haW4vbWNwL3Rvb2xzL2xpc3RTZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUF1Qkgsb0NBb0dDO0FBdkhZLFFBQUEsc0JBQXNCLEdBQXNCO0lBQ3ZELElBQUksRUFBRSxlQUFlO0lBQ3JCLFdBQVcsRUFBRSxpRkFBaUY7SUFDOUYsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDO2dCQUM3QyxXQUFXLEVBQUUseUNBQXlDO2FBQ3ZEO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFNSyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxJQUE2QixFQUM3QixRQUF1QjtJQUV2QixNQUFNLEVBQUUsSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFHLElBQW1DLENBQUM7SUFFN0QsSUFBSSxDQUFDO1FBQ0gsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoQyxPQUFPO2dCQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQztnQkFDckUsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFOUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDeEIsT0FBTztnQkFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLENBQUM7Z0JBQzNELE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFFN0IsZ0NBQWdDO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLENBQUMsV0FBbUIsRUFBRSxXQUFnQixFQUFZLEVBQUU7WUFDekUsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1lBQzlCLElBQUksV0FBVyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNuRCxLQUFLLE1BQU0sT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDL0MsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLFdBQVcsQ0FBQztvQkFDekMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLE9BQU8sR0FBRyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQUVGLGVBQWU7UUFDZixJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDOUIsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBRXJDLElBQUksa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3pCLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hFLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlFLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDN0QsT0FBTyxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEUsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFDakMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2lCQUN6QjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUM5RSxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbGlzdF9zZXJ2aWNlcyBUb29sXG4gKiBMaXN0IGF2YWlsYWJsZSBMaWdodG5pbmcgU2VydmljZXMgKFBIUCwgTXlTUUwsIE5naW54IHZlcnNpb25zKVxuICovXG5cbmltcG9ydCB7IE1jcFRvb2xEZWZpbml0aW9uLCBNY3BUb29sUmVzdWx0LCBMb2NhbFNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGxpc3RTZXJ2aWNlc0RlZmluaXRpb246IE1jcFRvb2xEZWZpbml0aW9uID0ge1xuICBuYW1lOiAnbGlzdF9zZXJ2aWNlcycsXG4gIGRlc2NyaXB0aW9uOiAnTGlzdCBhdmFpbGFibGUgc2VydmljZSB2ZXJzaW9ucyAoUEhQLCBNeVNRTCwgTmdpbngpIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBzaXRlcycsXG4gIGlucHV0U2NoZW1hOiB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgdHlwZToge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZW51bTogWydwaHAnLCAnZGF0YWJhc2UnLCAnd2Vic2VydmVyJywgJ2FsbCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1R5cGUgb2Ygc2VydmljZXMgdG8gbGlzdCAoZGVmYXVsdDogYWxsKScsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59O1xuXG5pbnRlcmZhY2UgTGlzdFNlcnZpY2VzQXJncyB7XG4gIHR5cGU/OiAncGhwJyB8ICdkYXRhYmFzZScgfCAnd2Vic2VydmVyJyB8ICdhbGwnO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNlcnZpY2VzKFxuICBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2VydmljZXM6IExvY2FsU2VydmljZXNcbik6IFByb21pc2U8TWNwVG9vbFJlc3VsdD4ge1xuICBjb25zdCB7IHR5cGUgPSAnYWxsJyB9ID0gYXJncyBhcyB1bmtub3duIGFzIExpc3RTZXJ2aWNlc0FyZ3M7XG5cbiAgdHJ5IHtcbiAgICAvLyBDaGVjayBpZiBsaWdodG5pbmdTZXJ2aWNlcyBpcyBhdmFpbGFibGVcbiAgICBpZiAoIXNlcnZpY2VzLmxpZ2h0bmluZ1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6ICdMaWdodG5pbmcgU2VydmljZXMgbm90IGF2YWlsYWJsZScgfV0sXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ2lzdGVyZWRTZXJ2aWNlcyA9IHNlcnZpY2VzLmxpZ2h0bmluZ1NlcnZpY2VzLmdldFJlZ2lzdGVyZWRTZXJ2aWNlcygpO1xuXG4gICAgaWYgKCFyZWdpc3RlcmVkU2VydmljZXMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogJ05vIHNlcnZpY2VzIHJlZ2lzdGVyZWQnIH1dLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gSGVscGVyIHRvIGZvcm1hdCBzZXJ2aWNlIGxpc3RcbiAgICBjb25zdCBmb3JtYXRTZXJ2aWNlcyA9IChzZXJ2aWNlTmFtZTogc3RyaW5nLCBzZXJ2aWNlRGF0YTogYW55KTogc3RyaW5nW10gPT4ge1xuICAgICAgY29uc3QgdmVyc2lvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICBpZiAoc2VydmljZURhdGEgJiYgdHlwZW9mIHNlcnZpY2VEYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IHZlcnNpb24gb2YgT2JqZWN0LmtleXMoc2VydmljZURhdGEpKSB7XG4gICAgICAgICAgY29uc3QgaW5mbyA9IHNlcnZpY2VEYXRhW3ZlcnNpb25dO1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gaW5mbz8ubGFiZWwgfHwgc2VydmljZU5hbWU7XG4gICAgICAgICAgdmVyc2lvbnMucHVzaChgICAtICR7dmVyc2lvbn0ke2xhYmVsICE9PSBzZXJ2aWNlTmFtZSA/IGAgKCR7bGFiZWx9KWAgOiAnJ31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZlcnNpb25zO1xuICAgIH07XG5cbiAgICAvLyBQSFAgdmVyc2lvbnNcbiAgICBpZiAodHlwZSA9PT0gJ2FsbCcgfHwgdHlwZSA9PT0gJ3BocCcpIHtcbiAgICAgIHJlc3VsdHMucHVzaCgnUEhQIFZlcnNpb25zOicpO1xuICAgICAgY29uc3QgcGhwVmVyc2lvbnMgPSBmb3JtYXRTZXJ2aWNlcygncGhwJywgcmVnaXN0ZXJlZFNlcnZpY2VzLnBocCk7XG4gICAgICBpZiAocGhwVmVyc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLnB1c2goLi4ucGhwVmVyc2lvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKCcgIFtObyBQSFAgdmVyc2lvbnMgaW5zdGFsbGVkXScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERhdGFiYXNlIHZlcnNpb25zIChNeVNRTCBhbmQgTWFyaWFEQilcbiAgICBpZiAodHlwZSA9PT0gJ2FsbCcgfHwgdHlwZSA9PT0gJ2RhdGFiYXNlJykge1xuICAgICAgcmVzdWx0cy5wdXNoKCdcXG5EYXRhYmFzZSBWZXJzaW9uczonKTtcblxuICAgICAgaWYgKHJlZ2lzdGVyZWRTZXJ2aWNlcy5teXNxbCkge1xuICAgICAgICByZXN1bHRzLnB1c2goJyAgTXlTUUw6Jyk7XG4gICAgICAgIGNvbnN0IG15c3FsVmVyc2lvbnMgPSBmb3JtYXRTZXJ2aWNlcygnbXlzcWwnLCByZWdpc3RlcmVkU2VydmljZXMubXlzcWwpO1xuICAgICAgICBpZiAobXlzcWxWZXJzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLm15c3FsVmVyc2lvbnMubWFwKCh2KSA9PiAnICAnICsgdikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWdpc3RlcmVkU2VydmljZXMubWFyaWFkYikge1xuICAgICAgICByZXN1bHRzLnB1c2goJyAgTWFyaWFEQjonKTtcbiAgICAgICAgY29uc3QgbWFyaWFkYlZlcnNpb25zID0gZm9ybWF0U2VydmljZXMoJ21hcmlhZGInLCByZWdpc3RlcmVkU2VydmljZXMubWFyaWFkYik7XG4gICAgICAgIGlmIChtYXJpYWRiVmVyc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5tYXJpYWRiVmVyc2lvbnMubWFwKCh2KSA9PiAnICAnICsgdikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVnaXN0ZXJlZFNlcnZpY2VzLm15c3FsICYmICFyZWdpc3RlcmVkU2VydmljZXMubWFyaWFkYikge1xuICAgICAgICByZXN1bHRzLnB1c2goJyAgW05vIGRhdGFiYXNlIHZlcnNpb25zIGluc3RhbGxlZF0nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXZWIgc2VydmVyIHZlcnNpb25zIChOZ2lueClcbiAgICBpZiAodHlwZSA9PT0gJ2FsbCcgfHwgdHlwZSA9PT0gJ3dlYnNlcnZlcicpIHtcbiAgICAgIHJlc3VsdHMucHVzaCgnXFxuV2ViIFNlcnZlciBWZXJzaW9uczonKTtcbiAgICAgIGNvbnN0IG5naW54VmVyc2lvbnMgPSBmb3JtYXRTZXJ2aWNlcygnbmdpbngnLCByZWdpc3RlcmVkU2VydmljZXMubmdpbngpO1xuICAgICAgaWYgKG5naW54VmVyc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLnB1c2goLi4ubmdpbnhWZXJzaW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRzLnB1c2goJyAgW05vIHdlYiBzZXJ2ZXIgdmVyc2lvbnMgaW5zdGFsbGVkXScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogcmVzdWx0cy5qb2luKCdcXG4nKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBGYWlsZWQgdG8gbGlzdCBzZXJ2aWNlczogJHtlcnJvci5tZXNzYWdlfWAgfV0sXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * list_sites Tool
3
+ * List all WordPress sites in Local
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const listSitesDefinition: McpToolDefinition;
7
+ export declare function listSites(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * list_sites Tool
4
+ * List all WordPress sites in Local
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.listSitesDefinition = void 0;
8
+ exports.listSites = listSites;
9
+ exports.listSitesDefinition = {
10
+ name: 'list_sites',
11
+ description: 'List all WordPress sites in Local with their name, ID, status, and domain',
12
+ inputSchema: {
13
+ type: 'object',
14
+ properties: {
15
+ status: {
16
+ type: 'string',
17
+ enum: ['all', 'running', 'stopped'],
18
+ description: 'Filter sites by status (default: all)',
19
+ },
20
+ },
21
+ },
22
+ };
23
+ async function listSites(args, services) {
24
+ const { status = 'all' } = args;
25
+ try {
26
+ const sitesMap = services.siteData.getSites();
27
+ const allSites = Object.values(sitesMap);
28
+ // Get status for each site
29
+ const sitesWithStatus = await Promise.all(allSites.map(async (site) => {
30
+ const siteStatus = await services.siteProcessManager.getSiteStatus(site);
31
+ return {
32
+ id: site.id,
33
+ name: site.name,
34
+ status: siteStatus,
35
+ domain: site.domain,
36
+ path: site.path,
37
+ };
38
+ }));
39
+ // Filter by status if requested
40
+ let filteredSites = sitesWithStatus;
41
+ if (status === 'running') {
42
+ filteredSites = sitesWithStatus.filter((s) => s.status === 'running');
43
+ }
44
+ else if (status === 'stopped') {
45
+ filteredSites = sitesWithStatus.filter((s) => s.status !== 'running');
46
+ }
47
+ const result = {
48
+ count: filteredSites.length,
49
+ sites: filteredSites,
50
+ };
51
+ return {
52
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
53
+ };
54
+ }
55
+ catch (error) {
56
+ return {
57
+ content: [{ type: 'text', text: `Failed to list sites: ${error.message}` }],
58
+ isError: true,
59
+ };
60
+ }
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdFNpdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21haW4vbWNwL3Rvb2xzL2xpc3RTaXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUF1QkgsOEJBOENDO0FBakVZLFFBQUEsbUJBQW1CLEdBQXNCO0lBQ3BELElBQUksRUFBRSxZQUFZO0lBQ2xCLFdBQVcsRUFBRSwyRUFBMkU7SUFDeEYsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7Z0JBQ25DLFdBQVcsRUFBRSx1Q0FBdUM7YUFDckQ7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQU1LLEtBQUssVUFBVSxTQUFTLENBQzdCLElBQTZCLEVBQzdCLFFBQXVCO0lBRXZCLE1BQU0sRUFBRSxNQUFNLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBcUIsQ0FBQztJQUVqRCxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekMsMkJBQTJCO1FBQzNCLE1BQU0sZUFBZSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDdkMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBUyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pFLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDaEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixnQ0FBZ0M7UUFDaEMsSUFBSSxhQUFhLEdBQUcsZUFBZSxDQUFDO1FBQ3BDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLGFBQWEsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7YUFBTSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxhQUFhLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDYixLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU07WUFDM0IsS0FBSyxFQUFFLGFBQWE7U0FDckIsQ0FBQztRQUVGLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ25FLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSx5QkFBeUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDM0UsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGxpc3Rfc2l0ZXMgVG9vbFxuICogTGlzdCBhbGwgV29yZFByZXNzIHNpdGVzIGluIExvY2FsXG4gKi9cblxuaW1wb3J0IHsgTWNwVG9vbERlZmluaXRpb24sIE1jcFRvb2xSZXN1bHQsIExvY2FsU2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgbGlzdFNpdGVzRGVmaW5pdGlvbjogTWNwVG9vbERlZmluaXRpb24gPSB7XG4gIG5hbWU6ICdsaXN0X3NpdGVzJyxcbiAgZGVzY3JpcHRpb246ICdMaXN0IGFsbCBXb3JkUHJlc3Mgc2l0ZXMgaW4gTG9jYWwgd2l0aCB0aGVpciBuYW1lLCBJRCwgc3RhdHVzLCBhbmQgZG9tYWluJyxcbiAgaW5wdXRTY2hlbWE6IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBzdGF0dXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGVudW06IFsnYWxsJywgJ3J1bm5pbmcnLCAnc3RvcHBlZCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0ZpbHRlciBzaXRlcyBieSBzdGF0dXMgKGRlZmF1bHQ6IGFsbCknLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcblxuaW50ZXJmYWNlIExpc3RTaXRlc0FyZ3Mge1xuICBzdGF0dXM/OiAnYWxsJyB8ICdydW5uaW5nJyB8ICdzdG9wcGVkJztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RTaXRlcyhcbiAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNlcnZpY2VzOiBMb2NhbFNlcnZpY2VzXG4pOiBQcm9taXNlPE1jcFRvb2xSZXN1bHQ+IHtcbiAgY29uc3QgeyBzdGF0dXMgPSAnYWxsJyB9ID0gYXJncyBhcyBMaXN0U2l0ZXNBcmdzO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgc2l0ZXNNYXAgPSBzZXJ2aWNlcy5zaXRlRGF0YS5nZXRTaXRlcygpO1xuICAgIGNvbnN0IGFsbFNpdGVzID0gT2JqZWN0LnZhbHVlcyhzaXRlc01hcCk7XG5cbiAgICAvLyBHZXQgc3RhdHVzIGZvciBlYWNoIHNpdGVcbiAgICBjb25zdCBzaXRlc1dpdGhTdGF0dXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGFsbFNpdGVzLm1hcChhc3luYyAoc2l0ZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHNpdGVTdGF0dXMgPSBhd2FpdCBzZXJ2aWNlcy5zaXRlUHJvY2Vzc01hbmFnZXIuZ2V0U2l0ZVN0YXR1cyhzaXRlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogc2l0ZS5pZCxcbiAgICAgICAgICBuYW1lOiBzaXRlLm5hbWUsXG4gICAgICAgICAgc3RhdHVzOiBzaXRlU3RhdHVzLFxuICAgICAgICAgIGRvbWFpbjogc2l0ZS5kb21haW4sXG4gICAgICAgICAgcGF0aDogc2l0ZS5wYXRoLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gRmlsdGVyIGJ5IHN0YXR1cyBpZiByZXF1ZXN0ZWRcbiAgICBsZXQgZmlsdGVyZWRTaXRlcyA9IHNpdGVzV2l0aFN0YXR1cztcbiAgICBpZiAoc3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgIGZpbHRlcmVkU2l0ZXMgPSBzaXRlc1dpdGhTdGF0dXMuZmlsdGVyKChzKSA9PiBzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKTtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgICBmaWx0ZXJlZFNpdGVzID0gc2l0ZXNXaXRoU3RhdHVzLmZpbHRlcigocykgPT4gcy5zdGF0dXMgIT09ICdydW5uaW5nJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgY291bnQ6IGZpbHRlcmVkU2l0ZXMubGVuZ3RoLFxuICAgICAgc2l0ZXM6IGZpbHRlcmVkU2l0ZXMsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMikgfV0sXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBGYWlsZWQgdG8gbGlzdCBzaXRlczogJHtlcnJvci5tZXNzYWdlfWAgfV0sXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * open_adminer Tool
3
+ * Open Adminer database management UI for a site
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const openAdminerDefinition: McpToolDefinition;
7
+ export declare function openAdminer(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /**
3
+ * open_adminer Tool
4
+ * Open Adminer database management UI for a site
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.openAdminerDefinition = void 0;
8
+ exports.openAdminer = openAdminer;
9
+ const helpers_1 = require("./helpers");
10
+ exports.openAdminerDefinition = {
11
+ name: 'open_adminer',
12
+ description: 'Open Adminer database management UI for a site',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ site: {
17
+ type: 'string',
18
+ description: 'Site name or ID',
19
+ },
20
+ },
21
+ required: ['site'],
22
+ },
23
+ };
24
+ async function openAdminer(args, services) {
25
+ const { site: siteQuery } = args;
26
+ const paramError = (0, helpers_1.validateRequiredParam)(siteQuery, 'site');
27
+ if (paramError)
28
+ return paramError;
29
+ const siteResult = (0, helpers_1.findSiteOrError)(siteQuery, services.siteData);
30
+ if ('error' in siteResult)
31
+ return siteResult.error;
32
+ const { site } = siteResult;
33
+ try {
34
+ // Check if adminer service exists
35
+ if (!services.adminer) {
36
+ return {
37
+ content: [{ type: 'text', text: 'Adminer service not available' }],
38
+ isError: true,
39
+ };
40
+ }
41
+ // Open Adminer
42
+ await services.adminer.open(site);
43
+ return {
44
+ content: [
45
+ {
46
+ type: 'text',
47
+ text: `Opened Adminer for "${site.name}". Database admin UI should open in your browser.`,
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ catch (error) {
53
+ return {
54
+ content: [{ type: 'text', text: `Failed to open Adminer: ${error.message}` }],
55
+ isError: true,
56
+ };
57
+ }
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbkFkbWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWFpbi9tY3AvdG9vbHMvb3BlbkFkbWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBd0JILGtDQXVDQztBQTVERCx1Q0FBbUU7QUFFdEQsUUFBQSxxQkFBcUIsR0FBc0I7SUFDdEQsSUFBSSxFQUFFLGNBQWM7SUFDcEIsV0FBVyxFQUFFLGdEQUFnRDtJQUM3RCxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsaUJBQWlCO2FBQy9CO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7S0FDbkI7Q0FDRixDQUFDO0FBTUssS0FBSyxVQUFVLFdBQVcsQ0FDL0IsSUFBNkIsRUFDN0IsUUFBdUI7SUFFdkIsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFrQyxDQUFDO0lBRS9ELE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQXFCLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELElBQUksVUFBVTtRQUFFLE9BQU8sVUFBVSxDQUFDO0lBRWxDLE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQWUsRUFBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLElBQUksT0FBTyxJQUFJLFVBQVU7UUFBRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDbkQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUU1QixJQUFJLENBQUM7UUFDSCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixPQUFPO2dCQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsK0JBQStCLEVBQUUsQ0FBQztnQkFDbEUsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDO1FBQ0osQ0FBQztRQUVELGVBQWU7UUFDZixNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxDLE9BQU87WUFDTCxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLHVCQUF1QixJQUFJLENBQUMsSUFBSSxtREFBbUQ7aUJBQzFGO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzdFLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBvcGVuX2FkbWluZXIgVG9vbFxuICogT3BlbiBBZG1pbmVyIGRhdGFiYXNlIG1hbmFnZW1lbnQgVUkgZm9yIGEgc2l0ZVxuICovXG5cbmltcG9ydCB7IE1jcFRvb2xEZWZpbml0aW9uLCBNY3BUb29sUmVzdWx0LCBMb2NhbFNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IHZhbGlkYXRlUmVxdWlyZWRQYXJhbSwgZmluZFNpdGVPckVycm9yIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuZXhwb3J0IGNvbnN0IG9wZW5BZG1pbmVyRGVmaW5pdGlvbjogTWNwVG9vbERlZmluaXRpb24gPSB7XG4gIG5hbWU6ICdvcGVuX2FkbWluZXInLFxuICBkZXNjcmlwdGlvbjogJ09wZW4gQWRtaW5lciBkYXRhYmFzZSBtYW5hZ2VtZW50IFVJIGZvciBhIHNpdGUnLFxuICBpbnB1dFNjaGVtYToge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHNpdGU6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU2l0ZSBuYW1lIG9yIElEJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1aXJlZDogWydzaXRlJ10sXG4gIH0sXG59O1xuXG5pbnRlcmZhY2UgT3BlbkFkbWluZXJBcmdzIHtcbiAgc2l0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlbkFkbWluZXIoXG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzZXJ2aWNlczogTG9jYWxTZXJ2aWNlc1xuKTogUHJvbWlzZTxNY3BUb29sUmVzdWx0PiB7XG4gIGNvbnN0IHsgc2l0ZTogc2l0ZVF1ZXJ5IH0gPSBhcmdzIGFzIHVua25vd24gYXMgT3BlbkFkbWluZXJBcmdzO1xuXG4gIGNvbnN0IHBhcmFtRXJyb3IgPSB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0oc2l0ZVF1ZXJ5LCAnc2l0ZScpO1xuICBpZiAocGFyYW1FcnJvcikgcmV0dXJuIHBhcmFtRXJyb3I7XG5cbiAgY29uc3Qgc2l0ZVJlc3VsdCA9IGZpbmRTaXRlT3JFcnJvcihzaXRlUXVlcnksIHNlcnZpY2VzLnNpdGVEYXRhKTtcbiAgaWYgKCdlcnJvcicgaW4gc2l0ZVJlc3VsdCkgcmV0dXJuIHNpdGVSZXN1bHQuZXJyb3I7XG4gIGNvbnN0IHsgc2l0ZSB9ID0gc2l0ZVJlc3VsdDtcblxuICB0cnkge1xuICAgIC8vIENoZWNrIGlmIGFkbWluZXIgc2VydmljZSBleGlzdHNcbiAgICBpZiAoIXNlcnZpY2VzLmFkbWluZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogJ0FkbWluZXIgc2VydmljZSBub3QgYXZhaWxhYmxlJyB9XSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gT3BlbiBBZG1pbmVyXG4gICAgYXdhaXQgc2VydmljZXMuYWRtaW5lci5vcGVuKHNpdGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiBgT3BlbmVkIEFkbWluZXIgZm9yIFwiJHtzaXRlLm5hbWV9XCIuIERhdGFiYXNlIGFkbWluIFVJIHNob3VsZCBvcGVuIGluIHlvdXIgYnJvd3Nlci5gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogYEZhaWxlZCB0byBvcGVuIEFkbWluZXI6ICR7ZXJyb3IubWVzc2FnZX1gIH1dLFxuICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * open_site Tool
3
+ * Open a WordPress site in the default browser
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const openSiteDefinition: McpToolDefinition;
7
+ export declare function openSite(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * open_site Tool
4
+ * Open a WordPress site in the default browser
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.openSiteDefinition = void 0;
8
+ exports.openSite = openSite;
9
+ const helpers_1 = require("./helpers");
10
+ exports.openSiteDefinition = {
11
+ name: 'open_site',
12
+ description: 'Open a WordPress site in the default browser',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ site: {
17
+ type: 'string',
18
+ description: 'Site name or ID',
19
+ },
20
+ path: {
21
+ type: 'string',
22
+ description: 'Path to open (default: /, use /wp-admin for admin panel)',
23
+ },
24
+ },
25
+ required: ['site'],
26
+ },
27
+ };
28
+ async function openSite(args, services) {
29
+ const { site: siteQuery, path = '/' } = args;
30
+ const paramError = (0, helpers_1.validateRequiredParam)(siteQuery, 'site');
31
+ if (paramError)
32
+ return paramError;
33
+ const siteResult = (0, helpers_1.findSiteOrError)(siteQuery, services.siteData);
34
+ if ('error' in siteResult)
35
+ return siteResult.error;
36
+ const { site } = siteResult;
37
+ try {
38
+ // Get the site URL
39
+ const domain = site.domain || `${site.name}.local`;
40
+ const protocol = site.services?.nginx?.https === 'on' ? 'https' : 'http';
41
+ const url = `${protocol}://${domain}${path}`;
42
+ // Use the browser manager to open the URL
43
+ if (services.browserManager) {
44
+ await services.browserManager.openURL(url);
45
+ }
46
+ else {
47
+ // Fallback to shell open
48
+ const { shell } = require('electron');
49
+ await shell.openExternal(url);
50
+ }
51
+ return {
52
+ content: [{ type: 'text', text: `Opened ${url} in browser` }],
53
+ };
54
+ }
55
+ catch (error) {
56
+ return {
57
+ content: [{ type: 'text', text: `Failed to open site: ${error.message}` }],
58
+ isError: true,
59
+ };
60
+ }
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlblNpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWFpbi9tY3AvdG9vbHMvb3BlblNpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBNkJILDRCQXFDQztBQS9ERCx1Q0FBbUU7QUFFdEQsUUFBQSxrQkFBa0IsR0FBc0I7SUFDbkQsSUFBSSxFQUFFLFdBQVc7SUFDakIsV0FBVyxFQUFFLDhDQUE4QztJQUMzRCxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsaUJBQWlCO2FBQy9CO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSwwREFBMEQ7YUFDeEU7U0FDRjtRQUNELFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQztLQUNuQjtDQUNGLENBQUM7QUFPSyxLQUFLLFVBQVUsUUFBUSxDQUM1QixJQUE2QixFQUM3QixRQUF1QjtJQUV2QixNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBK0IsQ0FBQztJQUV4RSxNQUFNLFVBQVUsR0FBRyxJQUFBLCtCQUFxQixFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RCxJQUFJLFVBQVU7UUFBRSxPQUFPLFVBQVUsQ0FBQztJQUVsQyxNQUFNLFVBQVUsR0FBRyxJQUFBLHlCQUFlLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRSxJQUFJLE9BQU8sSUFBSSxVQUFVO1FBQUUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQ25ELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUM7SUFFNUIsSUFBSSxDQUFDO1FBQ0gsbUJBQW1CO1FBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUM7UUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDekUsTUFBTSxHQUFHLEdBQUcsR0FBRyxRQUFRLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDO1FBRTdDLDBDQUEwQztRQUMxQyxJQUFJLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1QixNQUFNLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLENBQUM7YUFBTSxDQUFDO1lBQ04seUJBQXlCO1lBQ3pCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEMsTUFBTSxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEdBQUcsYUFBYSxFQUFFLENBQUM7U0FDOUQsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUMxRSxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogb3Blbl9zaXRlIFRvb2xcbiAqIE9wZW4gYSBXb3JkUHJlc3Mgc2l0ZSBpbiB0aGUgZGVmYXVsdCBicm93c2VyXG4gKi9cblxuaW1wb3J0IHsgTWNwVG9vbERlZmluaXRpb24sIE1jcFRvb2xSZXN1bHQsIExvY2FsU2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVSZXF1aXJlZFBhcmFtLCBmaW5kU2l0ZU9yRXJyb3IgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgY29uc3Qgb3BlblNpdGVEZWZpbml0aW9uOiBNY3BUb29sRGVmaW5pdGlvbiA9IHtcbiAgbmFtZTogJ29wZW5fc2l0ZScsXG4gIGRlc2NyaXB0aW9uOiAnT3BlbiBhIFdvcmRQcmVzcyBzaXRlIGluIHRoZSBkZWZhdWx0IGJyb3dzZXInLFxuICBpbnB1dFNjaGVtYToge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHNpdGU6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU2l0ZSBuYW1lIG9yIElEJyxcbiAgICAgIH0sXG4gICAgICBwYXRoOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1BhdGggdG8gb3BlbiAoZGVmYXVsdDogLywgdXNlIC93cC1hZG1pbiBmb3IgYWRtaW4gcGFuZWwpJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1aXJlZDogWydzaXRlJ10sXG4gIH0sXG59O1xuXG5pbnRlcmZhY2UgT3BlblNpdGVBcmdzIHtcbiAgc2l0ZTogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblNpdGUoXG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzZXJ2aWNlczogTG9jYWxTZXJ2aWNlc1xuKTogUHJvbWlzZTxNY3BUb29sUmVzdWx0PiB7XG4gIGNvbnN0IHsgc2l0ZTogc2l0ZVF1ZXJ5LCBwYXRoID0gJy8nIH0gPSBhcmdzIGFzIHVua25vd24gYXMgT3BlblNpdGVBcmdzO1xuXG4gIGNvbnN0IHBhcmFtRXJyb3IgPSB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0oc2l0ZVF1ZXJ5LCAnc2l0ZScpO1xuICBpZiAocGFyYW1FcnJvcikgcmV0dXJuIHBhcmFtRXJyb3I7XG5cbiAgY29uc3Qgc2l0ZVJlc3VsdCA9IGZpbmRTaXRlT3JFcnJvcihzaXRlUXVlcnksIHNlcnZpY2VzLnNpdGVEYXRhKTtcbiAgaWYgKCdlcnJvcicgaW4gc2l0ZVJlc3VsdCkgcmV0dXJuIHNpdGVSZXN1bHQuZXJyb3I7XG4gIGNvbnN0IHsgc2l0ZSB9ID0gc2l0ZVJlc3VsdDtcblxuICB0cnkge1xuICAgIC8vIEdldCB0aGUgc2l0ZSBVUkxcbiAgICBjb25zdCBkb21haW4gPSBzaXRlLmRvbWFpbiB8fCBgJHtzaXRlLm5hbWV9LmxvY2FsYDtcbiAgICBjb25zdCBwcm90b2NvbCA9IHNpdGUuc2VydmljZXM/Lm5naW54Py5odHRwcyA9PT0gJ29uJyA/ICdodHRwcycgOiAnaHR0cCc7XG4gICAgY29uc3QgdXJsID0gYCR7cHJvdG9jb2x9Oi8vJHtkb21haW59JHtwYXRofWA7XG5cbiAgICAvLyBVc2UgdGhlIGJyb3dzZXIgbWFuYWdlciB0byBvcGVuIHRoZSBVUkxcbiAgICBpZiAoc2VydmljZXMuYnJvd3Nlck1hbmFnZXIpIHtcbiAgICAgIGF3YWl0IHNlcnZpY2VzLmJyb3dzZXJNYW5hZ2VyLm9wZW5VUkwodXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gc2hlbGwgb3BlblxuICAgICAgY29uc3QgeyBzaGVsbCB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGF3YWl0IHNoZWxsLm9wZW5FeHRlcm5hbCh1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBPcGVuZWQgJHt1cmx9IGluIGJyb3dzZXJgIH1dLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBgRmFpbGVkIHRvIG9wZW4gc2l0ZTogJHtlcnJvci5tZXNzYWdlfWAgfV0sXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * rename_site Tool
3
+ * Rename a WordPress site
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const renameSiteDefinition: McpToolDefinition;
7
+ export declare function renameSite(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * rename_site Tool
4
+ * Rename a WordPress site
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.renameSiteDefinition = void 0;
8
+ exports.renameSite = renameSite;
9
+ const helpers_1 = require("./helpers");
10
+ exports.renameSiteDefinition = {
11
+ name: 'rename_site',
12
+ description: 'Rename a WordPress site',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ site: {
17
+ type: 'string',
18
+ description: 'Current site name or ID',
19
+ },
20
+ newName: {
21
+ type: 'string',
22
+ description: 'New name for the site',
23
+ },
24
+ },
25
+ required: ['site', 'newName'],
26
+ },
27
+ };
28
+ async function renameSite(args, services) {
29
+ const { site: siteQuery, newName } = args;
30
+ const siteError = (0, helpers_1.validateRequiredParam)(siteQuery, 'site');
31
+ if (siteError)
32
+ return siteError;
33
+ const nameError = (0, helpers_1.validateRequiredParam)(newName, 'newName');
34
+ if (nameError)
35
+ return nameError;
36
+ if (!newName.trim()) {
37
+ return (0, helpers_1.createErrorResult)('Error: newName cannot be empty');
38
+ }
39
+ const siteResult = (0, helpers_1.findSiteOrError)(siteQuery, services.siteData);
40
+ if ('error' in siteResult)
41
+ return siteResult.error;
42
+ const { site } = siteResult;
43
+ const oldName = site.name;
44
+ try {
45
+ // Check if updateSite method exists on siteData
46
+ if (!services.siteData.updateSite) {
47
+ return {
48
+ content: [{ type: 'text', text: 'Site update service not available' }],
49
+ isError: true,
50
+ };
51
+ }
52
+ // Update the site name
53
+ services.siteData.updateSite(site.id, { name: newName.trim() });
54
+ return {
55
+ content: [
56
+ {
57
+ type: 'text',
58
+ text: `Successfully renamed site from "${oldName}" to "${newName.trim()}"`,
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ catch (error) {
64
+ return {
65
+ content: [{ type: 'text', text: `Failed to rename site: ${error.message}` }],
66
+ isError: true,
67
+ };
68
+ }
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuYW1lU2l0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tYWluL21jcC90b29scy9yZW5hbWVTaXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQTZCSCxnQ0FpREM7QUEzRUQsdUNBQXNGO0FBRXpFLFFBQUEsb0JBQW9CLEdBQXNCO0lBQ3JELElBQUksRUFBRSxhQUFhO0lBQ25CLFdBQVcsRUFBRSx5QkFBeUI7SUFDdEMsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLHlCQUF5QjthQUN2QztZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsdUJBQXVCO2FBQ3JDO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO0tBQzlCO0NBQ0YsQ0FBQztBQU9LLEtBQUssVUFBVSxVQUFVLENBQzlCLElBQTZCLEVBQzdCLFFBQXVCO0lBRXZCLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQWlDLENBQUM7SUFFdkUsTUFBTSxTQUFTLEdBQUcsSUFBQSwrQkFBcUIsRUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0QsSUFBSSxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFaEMsTUFBTSxTQUFTLEdBQUcsSUFBQSwrQkFBcUIsRUFBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUQsSUFBSSxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBQSwyQkFBaUIsRUFBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFBLHlCQUFlLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRSxJQUFJLE9BQU8sSUFBSSxVQUFVO1FBQUUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQ25ELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUM7SUFFNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUUxQixJQUFJLENBQUM7UUFFSCxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEMsT0FBTztnQkFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLG1DQUFtQyxFQUFFLENBQUM7Z0JBQ3RFLE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQztRQUNKLENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLE9BQU87WUFDTCxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLG1DQUFtQyxPQUFPLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHO2lCQUMzRTthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUM1RSxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVuYW1lX3NpdGUgVG9vbFxuICogUmVuYW1lIGEgV29yZFByZXNzIHNpdGVcbiAqL1xuXG5pbXBvcnQgeyBNY3BUb29sRGVmaW5pdGlvbiwgTWNwVG9vbFJlc3VsdCwgTG9jYWxTZXJ2aWNlcyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0sIGZpbmRTaXRlT3JFcnJvciwgY3JlYXRlRXJyb3JSZXN1bHQgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgY29uc3QgcmVuYW1lU2l0ZURlZmluaXRpb246IE1jcFRvb2xEZWZpbml0aW9uID0ge1xuICBuYW1lOiAncmVuYW1lX3NpdGUnLFxuICBkZXNjcmlwdGlvbjogJ1JlbmFtZSBhIFdvcmRQcmVzcyBzaXRlJyxcbiAgaW5wdXRTY2hlbWE6IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBzaXRlOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0N1cnJlbnQgc2l0ZSBuYW1lIG9yIElEJyxcbiAgICAgIH0sXG4gICAgICBuZXdOYW1lOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ05ldyBuYW1lIGZvciB0aGUgc2l0ZScsXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsnc2l0ZScsICduZXdOYW1lJ10sXG4gIH0sXG59O1xuXG5pbnRlcmZhY2UgUmVuYW1lU2l0ZUFyZ3Mge1xuICBzaXRlOiBzdHJpbmc7XG4gIG5ld05hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmFtZVNpdGUoXG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzZXJ2aWNlczogTG9jYWxTZXJ2aWNlc1xuKTogUHJvbWlzZTxNY3BUb29sUmVzdWx0PiB7XG4gIGNvbnN0IHsgc2l0ZTogc2l0ZVF1ZXJ5LCBuZXdOYW1lIH0gPSBhcmdzIGFzIHVua25vd24gYXMgUmVuYW1lU2l0ZUFyZ3M7XG5cbiAgY29uc3Qgc2l0ZUVycm9yID0gdmFsaWRhdGVSZXF1aXJlZFBhcmFtKHNpdGVRdWVyeSwgJ3NpdGUnKTtcbiAgaWYgKHNpdGVFcnJvcikgcmV0dXJuIHNpdGVFcnJvcjtcblxuICBjb25zdCBuYW1lRXJyb3IgPSB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0obmV3TmFtZSwgJ25ld05hbWUnKTtcbiAgaWYgKG5hbWVFcnJvcikgcmV0dXJuIG5hbWVFcnJvcjtcblxuICBpZiAoIW5ld05hbWUudHJpbSgpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yUmVzdWx0KCdFcnJvcjogbmV3TmFtZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIGNvbnN0IHNpdGVSZXN1bHQgPSBmaW5kU2l0ZU9yRXJyb3Ioc2l0ZVF1ZXJ5LCBzZXJ2aWNlcy5zaXRlRGF0YSk7XG4gIGlmICgnZXJyb3InIGluIHNpdGVSZXN1bHQpIHJldHVybiBzaXRlUmVzdWx0LmVycm9yO1xuICBjb25zdCB7IHNpdGUgfSA9IHNpdGVSZXN1bHQ7XG5cbiAgY29uc3Qgb2xkTmFtZSA9IHNpdGUubmFtZTtcblxuICB0cnkge1xuXG4gICAgLy8gQ2hlY2sgaWYgdXBkYXRlU2l0ZSBtZXRob2QgZXhpc3RzIG9uIHNpdGVEYXRhXG4gICAgaWYgKCFzZXJ2aWNlcy5zaXRlRGF0YS51cGRhdGVTaXRlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6ICdTaXRlIHVwZGF0ZSBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnIH1dLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHNpdGUgbmFtZVxuICAgIHNlcnZpY2VzLnNpdGVEYXRhLnVwZGF0ZVNpdGUoc2l0ZS5pZCwgeyBuYW1lOiBuZXdOYW1lLnRyaW0oKSB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogYFN1Y2Nlc3NmdWxseSByZW5hbWVkIHNpdGUgZnJvbSBcIiR7b2xkTmFtZX1cIiB0byBcIiR7bmV3TmFtZS50cmltKCl9XCJgLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogYEZhaWxlZCB0byByZW5hbWUgc2l0ZTogJHtlcnJvci5tZXNzYWdlfWAgfV0sXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * restart_site Tool
3
+ * Restart a WordPress site
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const restartSiteDefinition: McpToolDefinition;
7
+ export declare function restartSite(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * restart_site Tool
4
+ * Restart a WordPress site
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.restartSiteDefinition = void 0;
8
+ exports.restartSite = restartSite;
9
+ const helpers_1 = require("./helpers");
10
+ exports.restartSiteDefinition = {
11
+ name: 'restart_site',
12
+ description: 'Restart a WordPress site by name or ID. If stopped, it will be started.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ site: {
17
+ type: 'string',
18
+ description: 'Site name or ID (partial names work)',
19
+ },
20
+ },
21
+ required: ['site'],
22
+ },
23
+ };
24
+ async function restartSite(args, services) {
25
+ const { site: siteQuery } = args;
26
+ const paramError = (0, helpers_1.validateRequiredParam)(siteQuery, 'site');
27
+ if (paramError)
28
+ return paramError;
29
+ const siteResult = (0, helpers_1.findSiteOrError)(siteQuery, services.siteData);
30
+ if ('error' in siteResult)
31
+ return siteResult.error;
32
+ const { site } = siteResult;
33
+ try {
34
+ const currentStatus = await services.siteProcessManager.getSiteStatus(site);
35
+ if (currentStatus === 'running') {
36
+ await services.siteProcessManager.restart(site);
37
+ return {
38
+ content: [{ type: 'text', text: `Site "${site.name}" restarted successfully` }],
39
+ };
40
+ }
41
+ else {
42
+ // If not running, just start it
43
+ await services.siteProcessManager.start(site);
44
+ return {
45
+ content: [{ type: 'text', text: `Site "${site.name}" was stopped, now started` }],
46
+ };
47
+ }
48
+ }
49
+ catch (error) {
50
+ return {
51
+ content: [{ type: 'text', text: `Failed to restart site: ${error.message}` }],
52
+ isError: true,
53
+ };
54
+ }
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGFydFNpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWFpbi9tY3AvdG9vbHMvcmVzdGFydFNpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBd0JILGtDQWtDQztBQXZERCx1Q0FBbUU7QUFFdEQsUUFBQSxxQkFBcUIsR0FBc0I7SUFDdEQsSUFBSSxFQUFFLGNBQWM7SUFDcEIsV0FBVyxFQUFFLHlFQUF5RTtJQUN0RixXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsc0NBQXNDO2FBQ3BEO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7S0FDbkI7Q0FDRixDQUFDO0FBTUssS0FBSyxVQUFVLFdBQVcsQ0FDL0IsSUFBNkIsRUFDN0IsUUFBdUI7SUFFdkIsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFrQyxDQUFDO0lBRS9ELE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQXFCLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELElBQUksVUFBVTtRQUFFLE9BQU8sVUFBVSxDQUFDO0lBRWxDLE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQWUsRUFBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLElBQUksT0FBTyxJQUFJLFVBQVU7UUFBRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDbkQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUU1QixJQUFJLENBQUM7UUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUUsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hELE9BQU87Z0JBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFJLDBCQUEwQixFQUFFLENBQUM7YUFDaEYsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sZ0NBQWdDO1lBQ2hDLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QyxPQUFPO2dCQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO2FBQ2xGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzdFLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZXN0YXJ0X3NpdGUgVG9vbFxuICogUmVzdGFydCBhIFdvcmRQcmVzcyBzaXRlXG4gKi9cblxuaW1wb3J0IHsgTWNwVG9vbERlZmluaXRpb24sIE1jcFRvb2xSZXN1bHQsIExvY2FsU2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVSZXF1aXJlZFBhcmFtLCBmaW5kU2l0ZU9yRXJyb3IgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgY29uc3QgcmVzdGFydFNpdGVEZWZpbml0aW9uOiBNY3BUb29sRGVmaW5pdGlvbiA9IHtcbiAgbmFtZTogJ3Jlc3RhcnRfc2l0ZScsXG4gIGRlc2NyaXB0aW9uOiAnUmVzdGFydCBhIFdvcmRQcmVzcyBzaXRlIGJ5IG5hbWUgb3IgSUQuIElmIHN0b3BwZWQsIGl0IHdpbGwgYmUgc3RhcnRlZC4nLFxuICBpbnB1dFNjaGVtYToge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHNpdGU6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU2l0ZSBuYW1lIG9yIElEIChwYXJ0aWFsIG5hbWVzIHdvcmspJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1aXJlZDogWydzaXRlJ10sXG4gIH0sXG59O1xuXG5pbnRlcmZhY2UgUmVzdGFydFNpdGVBcmdzIHtcbiAgc2l0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzdGFydFNpdGUoXG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzZXJ2aWNlczogTG9jYWxTZXJ2aWNlc1xuKTogUHJvbWlzZTxNY3BUb29sUmVzdWx0PiB7XG4gIGNvbnN0IHsgc2l0ZTogc2l0ZVF1ZXJ5IH0gPSBhcmdzIGFzIHVua25vd24gYXMgUmVzdGFydFNpdGVBcmdzO1xuXG4gIGNvbnN0IHBhcmFtRXJyb3IgPSB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0oc2l0ZVF1ZXJ5LCAnc2l0ZScpO1xuICBpZiAocGFyYW1FcnJvcikgcmV0dXJuIHBhcmFtRXJyb3I7XG5cbiAgY29uc3Qgc2l0ZVJlc3VsdCA9IGZpbmRTaXRlT3JFcnJvcihzaXRlUXVlcnksIHNlcnZpY2VzLnNpdGVEYXRhKTtcbiAgaWYgKCdlcnJvcicgaW4gc2l0ZVJlc3VsdCkgcmV0dXJuIHNpdGVSZXN1bHQuZXJyb3I7XG4gIGNvbnN0IHsgc2l0ZSB9ID0gc2l0ZVJlc3VsdDtcblxuICB0cnkge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0dXMgPSBhd2FpdCBzZXJ2aWNlcy5zaXRlUHJvY2Vzc01hbmFnZXIuZ2V0U2l0ZVN0YXR1cyhzaXRlKTtcblxuICAgIGlmIChjdXJyZW50U3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgIGF3YWl0IHNlcnZpY2VzLnNpdGVQcm9jZXNzTWFuYWdlci5yZXN0YXJ0KHNpdGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBgU2l0ZSBcIiR7c2l0ZS5uYW1lfVwiIHJlc3RhcnRlZCBzdWNjZXNzZnVsbHlgIH1dLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgbm90IHJ1bm5pbmcsIGp1c3Qgc3RhcnQgaXRcbiAgICAgIGF3YWl0IHNlcnZpY2VzLnNpdGVQcm9jZXNzTWFuYWdlci5zdGFydChzaXRlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogYFNpdGUgXCIke3NpdGUubmFtZX1cIiB3YXMgc3RvcHBlZCwgbm93IHN0YXJ0ZWRgIH1dLFxuICAgICAgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBgRmFpbGVkIHRvIHJlc3RhcnQgc2l0ZTogJHtlcnJvci5tZXNzYWdlfWAgfV0sXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * save_blueprint Tool
3
+ * Save a site as a blueprint
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const saveBlueprintDefinition: McpToolDefinition;
7
+ export declare function saveBlueprint(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * save_blueprint Tool
4
+ * Save a site as a blueprint
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.saveBlueprintDefinition = void 0;
8
+ exports.saveBlueprint = saveBlueprint;
9
+ const helpers_1 = require("./helpers");
10
+ exports.saveBlueprintDefinition = {
11
+ name: 'save_blueprint',
12
+ description: 'Save a site as a blueprint (template) for creating new sites',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ site: {
17
+ type: 'string',
18
+ description: 'Site name or ID to save as blueprint',
19
+ },
20
+ name: {
21
+ type: 'string',
22
+ description: 'Name for the blueprint',
23
+ },
24
+ description: {
25
+ type: 'string',
26
+ description: 'Optional description for the blueprint',
27
+ },
28
+ },
29
+ required: ['site', 'name'],
30
+ },
31
+ };
32
+ async function saveBlueprint(args, services) {
33
+ const { site: siteQuery, name, description } = args;
34
+ if (!siteQuery) {
35
+ return {
36
+ content: [{ type: 'text', text: 'Error: site parameter is required' }],
37
+ isError: true,
38
+ };
39
+ }
40
+ if (!name) {
41
+ return {
42
+ content: [{ type: 'text', text: 'Error: name parameter is required' }],
43
+ isError: true,
44
+ };
45
+ }
46
+ try {
47
+ const site = (0, helpers_1.findSite)(siteQuery, services.siteData);
48
+ if (!site) {
49
+ const allSites = services.siteData.getSites();
50
+ const siteNames = allSites.map((s) => s.name).join(', ');
51
+ return {
52
+ content: [
53
+ {
54
+ type: 'text',
55
+ text: `Site not found: "${siteQuery}". Available sites: ${siteNames || 'none'}`,
56
+ },
57
+ ],
58
+ isError: true,
59
+ };
60
+ }
61
+ // Check if blueprints service exists
62
+ if (!services.blueprints) {
63
+ return {
64
+ content: [{ type: 'text', text: 'Blueprints service not available' }],
65
+ isError: true,
66
+ };
67
+ }
68
+ // Save the blueprint
69
+ const blueprint = await services.blueprints.saveBlueprint(site, {
70
+ name,
71
+ description: description || '',
72
+ });
73
+ return {
74
+ content: [
75
+ {
76
+ type: 'text',
77
+ text: `Successfully saved blueprint "${name}" from site "${site.name}" (ID: ${blueprint.id})`,
78
+ },
79
+ ],
80
+ };
81
+ }
82
+ catch (error) {
83
+ return {
84
+ content: [{ type: 'text', text: `Failed to save blueprint: ${error.message}` }],
85
+ isError: true,
86
+ };
87
+ }
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZUJsdWVwcmludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tYWluL21jcC90b29scy9zYXZlQmx1ZXByaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQWtDSCxzQ0FpRUM7QUFoR0QsdUNBQXFDO0FBRXhCLFFBQUEsdUJBQXVCLEdBQXNCO0lBQ3hELElBQUksRUFBRSxnQkFBZ0I7SUFDdEIsV0FBVyxFQUFFLDhEQUE4RDtJQUMzRSxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsc0NBQXNDO2FBQ3BEO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSx3QkFBd0I7YUFDdEM7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLHdDQUF3QzthQUN0RDtTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztLQUMzQjtDQUNGLENBQUM7QUFRSyxLQUFLLFVBQVUsYUFBYSxDQUNqQyxJQUE2QixFQUM3QixRQUF1QjtJQUV2QixNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBb0MsQ0FBQztJQUVwRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxtQ0FBbUMsRUFBRSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxtQ0FBbUMsRUFBRSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFRLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsT0FBTztnQkFDTCxPQUFPLEVBQUU7b0JBQ1A7d0JBQ0UsSUFBSSxFQUFFLE1BQU07d0JBQ1osSUFBSSxFQUFFLG9CQUFvQixTQUFTLHVCQUF1QixTQUFTLElBQUksTUFBTSxFQUFFO3FCQUNoRjtpQkFDRjtnQkFDRCxPQUFPLEVBQUUsSUFBSTthQUNkLENBQUM7UUFDSixDQUFDO1FBRUQscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDekIsT0FBTztnQkFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGtDQUFrQyxFQUFFLENBQUM7Z0JBQ3JFLE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQztRQUNKLENBQUM7UUFFRCxxQkFBcUI7UUFDckIsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDOUQsSUFBSTtZQUNKLFdBQVcsRUFBRSxXQUFXLElBQUksRUFBRTtTQUMvQixDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxpQ0FBaUMsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLElBQUksVUFBVSxTQUFTLENBQUMsRUFBRSxHQUFHO2lCQUM5RjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLDZCQUE2QixLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUMvRSxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogc2F2ZV9ibHVlcHJpbnQgVG9vbFxuICogU2F2ZSBhIHNpdGUgYXMgYSBibHVlcHJpbnRcbiAqL1xuXG5pbXBvcnQgeyBNY3BUb29sRGVmaW5pdGlvbiwgTWNwVG9vbFJlc3VsdCwgTG9jYWxTZXJ2aWNlcyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBmaW5kU2l0ZSB9IGZyb20gJy4vaGVscGVycyc7XG5cbmV4cG9ydCBjb25zdCBzYXZlQmx1ZXByaW50RGVmaW5pdGlvbjogTWNwVG9vbERlZmluaXRpb24gPSB7XG4gIG5hbWU6ICdzYXZlX2JsdWVwcmludCcsXG4gIGRlc2NyaXB0aW9uOiAnU2F2ZSBhIHNpdGUgYXMgYSBibHVlcHJpbnQgKHRlbXBsYXRlKSBmb3IgY3JlYXRpbmcgbmV3IHNpdGVzJyxcbiAgaW5wdXRTY2hlbWE6IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBzaXRlOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1NpdGUgbmFtZSBvciBJRCB0byBzYXZlIGFzIGJsdWVwcmludCcsXG4gICAgICB9LFxuICAgICAgbmFtZToge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdOYW1lIGZvciB0aGUgYmx1ZXByaW50JyxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGJsdWVwcmludCcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsnc2l0ZScsICduYW1lJ10sXG4gIH0sXG59O1xuXG5pbnRlcmZhY2UgU2F2ZUJsdWVwcmludEFyZ3Mge1xuICBzaXRlOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlQmx1ZXByaW50KFxuICBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2VydmljZXM6IExvY2FsU2VydmljZXNcbik6IFByb21pc2U8TWNwVG9vbFJlc3VsdD4ge1xuICBjb25zdCB7IHNpdGU6IHNpdGVRdWVyeSwgbmFtZSwgZGVzY3JpcHRpb24gfSA9IGFyZ3MgYXMgdW5rbm93biBhcyBTYXZlQmx1ZXByaW50QXJncztcblxuICBpZiAoIXNpdGVRdWVyeSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6ICdFcnJvcjogc2l0ZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQnIH1dLFxuICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogJ0Vycm9yOiBuYW1lIHBhcmFtZXRlciBpcyByZXF1aXJlZCcgfV0sXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHNpdGUgPSBmaW5kU2l0ZShzaXRlUXVlcnksIHNlcnZpY2VzLnNpdGVEYXRhKTtcblxuICAgIGlmICghc2l0ZSkge1xuICAgICAgY29uc3QgYWxsU2l0ZXMgPSBzZXJ2aWNlcy5zaXRlRGF0YS5nZXRTaXRlcygpO1xuICAgICAgY29uc3Qgc2l0ZU5hbWVzID0gYWxsU2l0ZXMubWFwKChzOiBhbnkpID0+IHMubmFtZSkuam9pbignLCAnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICB0ZXh0OiBgU2l0ZSBub3QgZm91bmQ6IFwiJHtzaXRlUXVlcnl9XCIuIEF2YWlsYWJsZSBzaXRlczogJHtzaXRlTmFtZXMgfHwgJ25vbmUnfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYmx1ZXByaW50cyBzZXJ2aWNlIGV4aXN0c1xuICAgIGlmICghc2VydmljZXMuYmx1ZXByaW50cykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiAnQmx1ZXByaW50cyBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnIH1dLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTYXZlIHRoZSBibHVlcHJpbnRcbiAgICBjb25zdCBibHVlcHJpbnQgPSBhd2FpdCBzZXJ2aWNlcy5ibHVlcHJpbnRzLnNhdmVCbHVlcHJpbnQoc2l0ZSwge1xuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB8fCAnJyxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogYFN1Y2Nlc3NmdWxseSBzYXZlZCBibHVlcHJpbnQgXCIke25hbWV9XCIgZnJvbSBzaXRlIFwiJHtzaXRlLm5hbWV9XCIgKElEOiAke2JsdWVwcmludC5pZH0pYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBGYWlsZWQgdG8gc2F2ZSBibHVlcHJpbnQ6ICR7ZXJyb3IubWVzc2FnZX1gIH1dLFxuICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * start_site Tool
3
+ * Start a WordPress site
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const startSiteDefinition: McpToolDefinition;
7
+ export declare function startSite(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;