@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,54 @@
1
+ "use strict";
2
+ /**
3
+ * start_site Tool
4
+ * Start a WordPress site
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.startSiteDefinition = void 0;
8
+ exports.startSite = startSite;
9
+ const helpers_1 = require("./helpers");
10
+ exports.startSiteDefinition = {
11
+ name: 'start_site',
12
+ description: 'Start a WordPress site by name or ID',
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 startSite(args, services) {
25
+ const { site: siteQuery } = args;
26
+ // Validate required parameter
27
+ const paramError = (0, helpers_1.validateRequiredParam)(siteQuery, 'site');
28
+ if (paramError)
29
+ return paramError;
30
+ // Find site or return error
31
+ const siteResult = (0, helpers_1.findSiteOrError)(siteQuery, services.siteData);
32
+ if ('error' in siteResult)
33
+ return siteResult.error;
34
+ const { site } = siteResult;
35
+ try {
36
+ const currentStatus = await services.siteProcessManager.getSiteStatus(site);
37
+ if (currentStatus === 'running') {
38
+ return {
39
+ content: [{ type: 'text', text: `Site "${site.name}" is already running` }],
40
+ };
41
+ }
42
+ await services.siteProcessManager.start(site);
43
+ return {
44
+ content: [{ type: 'text', text: `Site "${site.name}" started successfully` }],
45
+ };
46
+ }
47
+ catch (error) {
48
+ return {
49
+ content: [{ type: 'text', text: `Failed to start site: ${error.message}` }],
50
+ isError: true,
51
+ };
52
+ }
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRTaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21haW4vbWNwL3Rvb2xzL3N0YXJ0U2l0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUF3QkgsOEJBbUNDO0FBeERELHVDQUFtRTtBQUV0RCxRQUFBLG1CQUFtQixHQUFzQjtJQUNwRCxJQUFJLEVBQUUsWUFBWTtJQUNsQixXQUFXLEVBQUUsc0NBQXNDO0lBQ25ELFdBQVcsRUFBRTtRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxzQ0FBc0M7YUFDcEQ7U0FDRjtRQUNELFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQztLQUNuQjtDQUNGLENBQUM7QUFNSyxLQUFLLFVBQVUsU0FBUyxDQUM3QixJQUE2QixFQUM3QixRQUF1QjtJQUV2QixNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQWdDLENBQUM7SUFFN0QsOEJBQThCO0lBQzlCLE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQXFCLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELElBQUksVUFBVTtRQUFFLE9BQU8sVUFBVSxDQUFDO0lBRWxDLDRCQUE0QjtJQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFBLHlCQUFlLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRSxJQUFJLE9BQU8sSUFBSSxVQUFVO1FBQUUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQ25ELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUM7SUFFNUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxhQUFhLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVFLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFJLHNCQUFzQixFQUFFLENBQUM7YUFDNUUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUMsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1NBQzlFLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSx5QkFBeUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDM0UsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHN0YXJ0X3NpdGUgVG9vbFxuICogU3RhcnQgYSBXb3JkUHJlc3Mgc2l0ZVxuICovXG5cbmltcG9ydCB7IE1jcFRvb2xEZWZpbml0aW9uLCBNY3BUb29sUmVzdWx0LCBMb2NhbFNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IHZhbGlkYXRlUmVxdWlyZWRQYXJhbSwgZmluZFNpdGVPckVycm9yIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuZXhwb3J0IGNvbnN0IHN0YXJ0U2l0ZURlZmluaXRpb246IE1jcFRvb2xEZWZpbml0aW9uID0ge1xuICBuYW1lOiAnc3RhcnRfc2l0ZScsXG4gIGRlc2NyaXB0aW9uOiAnU3RhcnQgYSBXb3JkUHJlc3Mgc2l0ZSBieSBuYW1lIG9yIElEJyxcbiAgaW5wdXRTY2hlbWE6IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBzaXRlOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1NpdGUgbmFtZSBvciBJRCAocGFydGlhbCBuYW1lcyB3b3JrKScsXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsnc2l0ZSddLFxuICB9LFxufTtcblxuaW50ZXJmYWNlIFN0YXJ0U2l0ZUFyZ3Mge1xuICBzaXRlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFNpdGUoXG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzZXJ2aWNlczogTG9jYWxTZXJ2aWNlc1xuKTogUHJvbWlzZTxNY3BUb29sUmVzdWx0PiB7XG4gIGNvbnN0IHsgc2l0ZTogc2l0ZVF1ZXJ5IH0gPSBhcmdzIGFzIHVua25vd24gYXMgU3RhcnRTaXRlQXJncztcblxuICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBwYXJhbWV0ZXJcbiAgY29uc3QgcGFyYW1FcnJvciA9IHZhbGlkYXRlUmVxdWlyZWRQYXJhbShzaXRlUXVlcnksICdzaXRlJyk7XG4gIGlmIChwYXJhbUVycm9yKSByZXR1cm4gcGFyYW1FcnJvcjtcblxuICAvLyBGaW5kIHNpdGUgb3IgcmV0dXJuIGVycm9yXG4gIGNvbnN0IHNpdGVSZXN1bHQgPSBmaW5kU2l0ZU9yRXJyb3Ioc2l0ZVF1ZXJ5LCBzZXJ2aWNlcy5zaXRlRGF0YSk7XG4gIGlmICgnZXJyb3InIGluIHNpdGVSZXN1bHQpIHJldHVybiBzaXRlUmVzdWx0LmVycm9yO1xuICBjb25zdCB7IHNpdGUgfSA9IHNpdGVSZXN1bHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjdXJyZW50U3RhdHVzID0gYXdhaXQgc2VydmljZXMuc2l0ZVByb2Nlc3NNYW5hZ2VyLmdldFNpdGVTdGF0dXMoc2l0ZSk7XG5cbiAgICBpZiAoY3VycmVudFN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBTaXRlIFwiJHtzaXRlLm5hbWV9XCIgaXMgYWxyZWFkeSBydW5uaW5nYCB9XSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYXdhaXQgc2VydmljZXMuc2l0ZVByb2Nlc3NNYW5hZ2VyLnN0YXJ0KHNpdGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogYFNpdGUgXCIke3NpdGUubmFtZX1cIiBzdGFydGVkIHN1Y2Nlc3NmdWxseWAgfV0sXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBGYWlsZWQgdG8gc3RhcnQgc2l0ZTogJHtlcnJvci5tZXNzYWdlfWAgfV0sXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * stop_site Tool
3
+ * Stop a WordPress site
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const stopSiteDefinition: McpToolDefinition;
7
+ export declare function stopSite(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * stop_site Tool
4
+ * Stop a WordPress site
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.stopSiteDefinition = void 0;
8
+ exports.stopSite = stopSite;
9
+ const helpers_1 = require("./helpers");
10
+ exports.stopSiteDefinition = {
11
+ name: 'stop_site',
12
+ description: 'Stop a running WordPress site by name or ID',
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 stopSite(args, services) {
25
+ const { site: siteQuery } = args;
26
+ // Validate required parameter
27
+ const paramError = (0, helpers_1.validateRequiredParam)(siteQuery, 'site');
28
+ if (paramError)
29
+ return paramError;
30
+ // Find site or return error
31
+ const siteResult = (0, helpers_1.findSiteOrError)(siteQuery, services.siteData);
32
+ if ('error' in siteResult)
33
+ return siteResult.error;
34
+ const { site } = siteResult;
35
+ try {
36
+ const currentStatus = await services.siteProcessManager.getSiteStatus(site);
37
+ if (currentStatus !== 'running') {
38
+ return {
39
+ content: [{ type: 'text', text: `Site "${site.name}" is already stopped` }],
40
+ };
41
+ }
42
+ await services.siteProcessManager.stop(site);
43
+ return {
44
+ content: [{ type: 'text', text: `Site "${site.name}" stopped successfully` }],
45
+ };
46
+ }
47
+ catch (error) {
48
+ return {
49
+ content: [{ type: 'text', text: `Failed to stop site: ${error.message}` }],
50
+ isError: true,
51
+ };
52
+ }
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcFNpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWFpbi9tY3AvdG9vbHMvc3RvcFNpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBd0JILDRCQW1DQztBQXhERCx1Q0FBbUU7QUFFdEQsUUFBQSxrQkFBa0IsR0FBc0I7SUFDbkQsSUFBSSxFQUFFLFdBQVc7SUFDakIsV0FBVyxFQUFFLDZDQUE2QztJQUMxRCxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsc0NBQXNDO2FBQ3BEO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7S0FDbkI7Q0FDRixDQUFDO0FBTUssS0FBSyxVQUFVLFFBQVEsQ0FDNUIsSUFBNkIsRUFDN0IsUUFBdUI7SUFFdkIsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUErQixDQUFDO0lBRTVELDhCQUE4QjtJQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFBLCtCQUFxQixFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RCxJQUFJLFVBQVU7UUFBRSxPQUFPLFVBQVUsQ0FBQztJQUVsQyw0QkFBNEI7SUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBQSx5QkFBZSxFQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakUsSUFBSSxPQUFPLElBQUksVUFBVTtRQUFFLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNuRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDO0lBRTVCLElBQUksQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFHLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1RSxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxPQUFPO2dCQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO2FBQzVFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdDLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksd0JBQXdCLEVBQUUsQ0FBQztTQUM5RSxDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzFFLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBzdG9wX3NpdGUgVG9vbFxuICogU3RvcCBhIFdvcmRQcmVzcyBzaXRlXG4gKi9cblxuaW1wb3J0IHsgTWNwVG9vbERlZmluaXRpb24sIE1jcFRvb2xSZXN1bHQsIExvY2FsU2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVSZXF1aXJlZFBhcmFtLCBmaW5kU2l0ZU9yRXJyb3IgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgY29uc3Qgc3RvcFNpdGVEZWZpbml0aW9uOiBNY3BUb29sRGVmaW5pdGlvbiA9IHtcbiAgbmFtZTogJ3N0b3Bfc2l0ZScsXG4gIGRlc2NyaXB0aW9uOiAnU3RvcCBhIHJ1bm5pbmcgV29yZFByZXNzIHNpdGUgYnkgbmFtZSBvciBJRCcsXG4gIGlucHV0U2NoZW1hOiB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgc2l0ZToge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTaXRlIG5hbWUgb3IgSUQgKHBhcnRpYWwgbmFtZXMgd29yayknLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVpcmVkOiBbJ3NpdGUnXSxcbiAgfSxcbn07XG5cbmludGVyZmFjZSBTdG9wU2l0ZUFyZ3Mge1xuICBzaXRlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdG9wU2l0ZShcbiAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNlcnZpY2VzOiBMb2NhbFNlcnZpY2VzXG4pOiBQcm9taXNlPE1jcFRvb2xSZXN1bHQ+IHtcbiAgY29uc3QgeyBzaXRlOiBzaXRlUXVlcnkgfSA9IGFyZ3MgYXMgdW5rbm93biBhcyBTdG9wU2l0ZUFyZ3M7XG5cbiAgLy8gVmFsaWRhdGUgcmVxdWlyZWQgcGFyYW1ldGVyXG4gIGNvbnN0IHBhcmFtRXJyb3IgPSB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0oc2l0ZVF1ZXJ5LCAnc2l0ZScpO1xuICBpZiAocGFyYW1FcnJvcikgcmV0dXJuIHBhcmFtRXJyb3I7XG5cbiAgLy8gRmluZCBzaXRlIG9yIHJldHVybiBlcnJvclxuICBjb25zdCBzaXRlUmVzdWx0ID0gZmluZFNpdGVPckVycm9yKHNpdGVRdWVyeSwgc2VydmljZXMuc2l0ZURhdGEpO1xuICBpZiAoJ2Vycm9yJyBpbiBzaXRlUmVzdWx0KSByZXR1cm4gc2l0ZVJlc3VsdC5lcnJvcjtcbiAgY29uc3QgeyBzaXRlIH0gPSBzaXRlUmVzdWx0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY3VycmVudFN0YXR1cyA9IGF3YWl0IHNlcnZpY2VzLnNpdGVQcm9jZXNzTWFuYWdlci5nZXRTaXRlU3RhdHVzKHNpdGUpO1xuXG4gICAgaWYgKGN1cnJlbnRTdGF0dXMgIT09ICdydW5uaW5nJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBgU2l0ZSBcIiR7c2l0ZS5uYW1lfVwiIGlzIGFscmVhZHkgc3RvcHBlZGAgfV0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGF3YWl0IHNlcnZpY2VzLnNpdGVQcm9jZXNzTWFuYWdlci5zdG9wKHNpdGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogYFNpdGUgXCIke3NpdGUubmFtZX1cIiBzdG9wcGVkIHN1Y2Nlc3NmdWxseWAgfV0sXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBGYWlsZWQgdG8gc3RvcCBzaXRlOiAke2Vycm9yLm1lc3NhZ2V9YCB9XSxcbiAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,7 @@
1
+ /**
2
+ * toggle_xdebug Tool
3
+ * Enable or disable Xdebug for a site
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const toggleXdebugDefinition: McpToolDefinition;
7
+ export declare function toggleXdebug(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * toggle_xdebug Tool
4
+ * Enable or disable Xdebug for a site
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.toggleXdebugDefinition = void 0;
8
+ exports.toggleXdebug = toggleXdebug;
9
+ const helpers_1 = require("./helpers");
10
+ exports.toggleXdebugDefinition = {
11
+ name: 'toggle_xdebug',
12
+ description: 'Enable or disable Xdebug for a site (requires site restart to take effect)',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ site: {
17
+ type: 'string',
18
+ description: 'Site name or ID',
19
+ },
20
+ enabled: {
21
+ type: 'boolean',
22
+ description: 'True to enable Xdebug, false to disable',
23
+ },
24
+ },
25
+ required: ['site', 'enabled'],
26
+ },
27
+ };
28
+ async function toggleXdebug(args, services) {
29
+ const { site: siteQuery, enabled } = args;
30
+ const paramError = (0, helpers_1.validateRequiredParam)(siteQuery, 'site');
31
+ if (paramError)
32
+ return paramError;
33
+ if (typeof enabled !== 'boolean') {
34
+ return (0, helpers_1.createErrorResult)('Error: enabled parameter must be true or false');
35
+ }
36
+ const siteResult = (0, helpers_1.findSiteOrError)(siteQuery, services.siteData);
37
+ if ('error' in siteResult)
38
+ return siteResult.error;
39
+ const { site } = siteResult;
40
+ try {
41
+ // Check if updateSite method exists
42
+ if (!services.siteData.updateSite) {
43
+ return {
44
+ content: [{ type: 'text', text: 'Site update service not available' }],
45
+ isError: true,
46
+ };
47
+ }
48
+ const previousState = site.xdebugEnabled ?? false;
49
+ // Update the xdebugEnabled property
50
+ services.siteData.updateSite(site.id, { xdebugEnabled: enabled });
51
+ const action = enabled ? 'enabled' : 'disabled';
52
+ const restartNote = previousState !== enabled ? ' Restart the site for changes to take effect.' : '';
53
+ return {
54
+ content: [
55
+ {
56
+ type: 'text',
57
+ text: `Xdebug ${action} for "${site.name}".${restartNote}`,
58
+ },
59
+ ],
60
+ };
61
+ }
62
+ catch (error) {
63
+ return {
64
+ content: [{ type: 'text', text: `Failed to toggle Xdebug: ${error.message}` }],
65
+ isError: true,
66
+ };
67
+ }
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlWGRlYnVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21haW4vbWNwL3Rvb2xzL3RvZ2dsZVhkZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUE2Qkgsb0NBaURDO0FBM0VELHVDQUFzRjtBQUV6RSxRQUFBLHNCQUFzQixHQUFzQjtJQUN2RCxJQUFJLEVBQUUsZUFBZTtJQUNyQixXQUFXLEVBQUUsNEVBQTRFO0lBQ3pGLFdBQVcsRUFBRTtRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxpQkFBaUI7YUFDL0I7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsV0FBVyxFQUFFLHlDQUF5QzthQUN2RDtTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztLQUM5QjtDQUNGLENBQUM7QUFPSyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxJQUE2QixFQUM3QixRQUF1QjtJQUV2QixNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFtQyxDQUFDO0lBRXpFLE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQXFCLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELElBQUksVUFBVTtRQUFFLE9BQU8sVUFBVSxDQUFDO0lBRWxDLElBQUksT0FBTyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDakMsT0FBTyxJQUFBLDJCQUFpQixFQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQWUsRUFBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLElBQUksT0FBTyxJQUFJLFVBQVU7UUFBRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDbkQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUU1QixJQUFJLENBQUM7UUFDSCxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEMsT0FBTztnQkFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLG1DQUFtQyxFQUFFLENBQUM7Z0JBQ3RFLE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQztRQUVsRCxvQ0FBb0M7UUFDcEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDaEQsTUFBTSxXQUFXLEdBQ2YsYUFBYSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVuRixPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxVQUFVLE1BQU0sU0FBUyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtpQkFDM0Q7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSw0QkFBNEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDOUUsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHRvZ2dsZV94ZGVidWcgVG9vbFxuICogRW5hYmxlIG9yIGRpc2FibGUgWGRlYnVnIGZvciBhIHNpdGVcbiAqL1xuXG5pbXBvcnQgeyBNY3BUb29sRGVmaW5pdGlvbiwgTWNwVG9vbFJlc3VsdCwgTG9jYWxTZXJ2aWNlcyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0sIGZpbmRTaXRlT3JFcnJvciwgY3JlYXRlRXJyb3JSZXN1bHQgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgY29uc3QgdG9nZ2xlWGRlYnVnRGVmaW5pdGlvbjogTWNwVG9vbERlZmluaXRpb24gPSB7XG4gIG5hbWU6ICd0b2dnbGVfeGRlYnVnJyxcbiAgZGVzY3JpcHRpb246ICdFbmFibGUgb3IgZGlzYWJsZSBYZGVidWcgZm9yIGEgc2l0ZSAocmVxdWlyZXMgc2l0ZSByZXN0YXJ0IHRvIHRha2UgZWZmZWN0KScsXG4gIGlucHV0U2NoZW1hOiB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgc2l0ZToge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTaXRlIG5hbWUgb3IgSUQnLFxuICAgICAgfSxcbiAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RydWUgdG8gZW5hYmxlIFhkZWJ1ZywgZmFsc2UgdG8gZGlzYWJsZScsXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsnc2l0ZScsICdlbmFibGVkJ10sXG4gIH0sXG59O1xuXG5pbnRlcmZhY2UgVG9nZ2xlWGRlYnVnQXJncyB7XG4gIHNpdGU6IHN0cmluZztcbiAgZW5hYmxlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZVhkZWJ1ZyhcbiAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNlcnZpY2VzOiBMb2NhbFNlcnZpY2VzXG4pOiBQcm9taXNlPE1jcFRvb2xSZXN1bHQ+IHtcbiAgY29uc3QgeyBzaXRlOiBzaXRlUXVlcnksIGVuYWJsZWQgfSA9IGFyZ3MgYXMgdW5rbm93biBhcyBUb2dnbGVYZGVidWdBcmdzO1xuXG4gIGNvbnN0IHBhcmFtRXJyb3IgPSB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0oc2l0ZVF1ZXJ5LCAnc2l0ZScpO1xuICBpZiAocGFyYW1FcnJvcikgcmV0dXJuIHBhcmFtRXJyb3I7XG5cbiAgaWYgKHR5cGVvZiBlbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3JSZXN1bHQoJ0Vycm9yOiBlbmFibGVkIHBhcmFtZXRlciBtdXN0IGJlIHRydWUgb3IgZmFsc2UnKTtcbiAgfVxuXG4gIGNvbnN0IHNpdGVSZXN1bHQgPSBmaW5kU2l0ZU9yRXJyb3Ioc2l0ZVF1ZXJ5LCBzZXJ2aWNlcy5zaXRlRGF0YSk7XG4gIGlmICgnZXJyb3InIGluIHNpdGVSZXN1bHQpIHJldHVybiBzaXRlUmVzdWx0LmVycm9yO1xuICBjb25zdCB7IHNpdGUgfSA9IHNpdGVSZXN1bHQ7XG5cbiAgdHJ5IHtcbiAgICAvLyBDaGVjayBpZiB1cGRhdGVTaXRlIG1ldGhvZCBleGlzdHNcbiAgICBpZiAoIXNlcnZpY2VzLnNpdGVEYXRhLnVwZGF0ZVNpdGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogJ1NpdGUgdXBkYXRlIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScgfV0sXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBzaXRlLnhkZWJ1Z0VuYWJsZWQgPz8gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHhkZWJ1Z0VuYWJsZWQgcHJvcGVydHlcbiAgICBzZXJ2aWNlcy5zaXRlRGF0YS51cGRhdGVTaXRlKHNpdGUuaWQsIHsgeGRlYnVnRW5hYmxlZDogZW5hYmxlZCB9KTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IGVuYWJsZWQgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnO1xuICAgIGNvbnN0IHJlc3RhcnROb3RlID1cbiAgICAgIHByZXZpb3VzU3RhdGUgIT09IGVuYWJsZWQgPyAnIFJlc3RhcnQgdGhlIHNpdGUgZm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QuJyA6ICcnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiBgWGRlYnVnICR7YWN0aW9ufSBmb3IgXCIke3NpdGUubmFtZX1cIi4ke3Jlc3RhcnROb3RlfWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBgRmFpbGVkIHRvIHRvZ2dsZSBYZGVidWc6ICR7ZXJyb3IubWVzc2FnZX1gIH1dLFxuICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * trust_ssl Tool
3
+ * Trust SSL certificate for a site
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const trustSslDefinition: McpToolDefinition;
7
+ export declare function trustSsl(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /**
3
+ * trust_ssl Tool
4
+ * Trust SSL certificate for a site
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.trustSslDefinition = void 0;
8
+ exports.trustSsl = trustSsl;
9
+ const helpers_1 = require("./helpers");
10
+ exports.trustSslDefinition = {
11
+ name: 'trust_ssl',
12
+ description: 'Trust the SSL certificate for a site (may require admin password)',
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 trustSsl(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 x509Cert service exists
35
+ if (!services.x509Cert) {
36
+ return {
37
+ content: [{ type: 'text', text: 'SSL certificate service not available' }],
38
+ isError: true,
39
+ };
40
+ }
41
+ // Trust the certificate
42
+ await services.x509Cert.trustCert(site);
43
+ return {
44
+ content: [
45
+ {
46
+ type: 'text',
47
+ text: `Successfully trusted SSL certificate for "${site.name}". You may need to restart your browser.`,
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ catch (error) {
53
+ return {
54
+ content: [{ type: 'text', text: `Failed to trust SSL certificate: ${error.message}` }],
55
+ isError: true,
56
+ };
57
+ }
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RTc2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWFpbi9tY3AvdG9vbHMvdHJ1c3RTc2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBd0JILDRCQXVDQztBQTVERCx1Q0FBbUU7QUFFdEQsUUFBQSxrQkFBa0IsR0FBc0I7SUFDbkQsSUFBSSxFQUFFLFdBQVc7SUFDakIsV0FBVyxFQUFFLG1FQUFtRTtJQUNoRixXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsaUJBQWlCO2FBQy9CO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7S0FDbkI7Q0FDRixDQUFDO0FBTUssS0FBSyxVQUFVLFFBQVEsQ0FDNUIsSUFBNkIsRUFDN0IsUUFBdUI7SUFFdkIsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUErQixDQUFDO0lBRTVELE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQXFCLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELElBQUksVUFBVTtRQUFFLE9BQU8sVUFBVSxDQUFDO0lBRWxDLE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQWUsRUFBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLElBQUksT0FBTyxJQUFJLFVBQVU7UUFBRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDbkQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUU1QixJQUFJLENBQUM7UUFDSCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixPQUFPO2dCQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsdUNBQXVDLEVBQUUsQ0FBQztnQkFDMUUsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDO1FBQ0osQ0FBQztRQUVELHdCQUF3QjtRQUN4QixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhDLE9BQU87WUFDTCxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLDZDQUE2QyxJQUFJLENBQUMsSUFBSSwwQ0FBMEM7aUJBQ3ZHO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsb0NBQW9DLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0cnVzdF9zc2wgVG9vbFxuICogVHJ1c3QgU1NMIGNlcnRpZmljYXRlIGZvciBhIHNpdGVcbiAqL1xuXG5pbXBvcnQgeyBNY3BUb29sRGVmaW5pdGlvbiwgTWNwVG9vbFJlc3VsdCwgTG9jYWxTZXJ2aWNlcyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0sIGZpbmRTaXRlT3JFcnJvciB9IGZyb20gJy4vaGVscGVycyc7XG5cbmV4cG9ydCBjb25zdCB0cnVzdFNzbERlZmluaXRpb246IE1jcFRvb2xEZWZpbml0aW9uID0ge1xuICBuYW1lOiAndHJ1c3Rfc3NsJyxcbiAgZGVzY3JpcHRpb246ICdUcnVzdCB0aGUgU1NMIGNlcnRpZmljYXRlIGZvciBhIHNpdGUgKG1heSByZXF1aXJlIGFkbWluIHBhc3N3b3JkKScsXG4gIGlucHV0U2NoZW1hOiB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgc2l0ZToge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTaXRlIG5hbWUgb3IgSUQnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVpcmVkOiBbJ3NpdGUnXSxcbiAgfSxcbn07XG5cbmludGVyZmFjZSBUcnVzdFNzbEFyZ3Mge1xuICBzaXRlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cnVzdFNzbChcbiAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNlcnZpY2VzOiBMb2NhbFNlcnZpY2VzXG4pOiBQcm9taXNlPE1jcFRvb2xSZXN1bHQ+IHtcbiAgY29uc3QgeyBzaXRlOiBzaXRlUXVlcnkgfSA9IGFyZ3MgYXMgdW5rbm93biBhcyBUcnVzdFNzbEFyZ3M7XG5cbiAgY29uc3QgcGFyYW1FcnJvciA9IHZhbGlkYXRlUmVxdWlyZWRQYXJhbShzaXRlUXVlcnksICdzaXRlJyk7XG4gIGlmIChwYXJhbUVycm9yKSByZXR1cm4gcGFyYW1FcnJvcjtcblxuICBjb25zdCBzaXRlUmVzdWx0ID0gZmluZFNpdGVPckVycm9yKHNpdGVRdWVyeSwgc2VydmljZXMuc2l0ZURhdGEpO1xuICBpZiAoJ2Vycm9yJyBpbiBzaXRlUmVzdWx0KSByZXR1cm4gc2l0ZVJlc3VsdC5lcnJvcjtcbiAgY29uc3QgeyBzaXRlIH0gPSBzaXRlUmVzdWx0O1xuXG4gIHRyeSB7XG4gICAgLy8gQ2hlY2sgaWYgeDUwOUNlcnQgc2VydmljZSBleGlzdHNcbiAgICBpZiAoIXNlcnZpY2VzLng1MDlDZXJ0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6ICdTU0wgY2VydGlmaWNhdGUgc2VydmljZSBub3QgYXZhaWxhYmxlJyB9XSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVHJ1c3QgdGhlIGNlcnRpZmljYXRlXG4gICAgYXdhaXQgc2VydmljZXMueDUwOUNlcnQudHJ1c3RDZXJ0KHNpdGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiBgU3VjY2Vzc2Z1bGx5IHRydXN0ZWQgU1NMIGNlcnRpZmljYXRlIGZvciBcIiR7c2l0ZS5uYW1lfVwiLiBZb3UgbWF5IG5lZWQgdG8gcmVzdGFydCB5b3VyIGJyb3dzZXIuYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBGYWlsZWQgdG8gdHJ1c3QgU1NMIGNlcnRpZmljYXRlOiAke2Vycm9yLm1lc3NhZ2V9YCB9XSxcbiAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,7 @@
1
+ /**
2
+ * wp_cli Tool
3
+ * Run WP-CLI commands against a site
4
+ */
5
+ import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
6
+ export declare const wpCliDefinition: McpToolDefinition;
7
+ export declare function wpCli(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * wp_cli Tool
4
+ * Run WP-CLI commands against a site
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.wpCliDefinition = void 0;
8
+ exports.wpCli = wpCli;
9
+ const helpers_1 = require("./helpers");
10
+ exports.wpCliDefinition = {
11
+ name: 'wp_cli',
12
+ description: 'Run a WP-CLI command against a WordPress site. The site must be running.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ site: {
17
+ type: 'string',
18
+ description: 'Site name or ID (partial names work)',
19
+ },
20
+ command: {
21
+ oneOf: [
22
+ {
23
+ type: 'array',
24
+ items: { type: 'string' },
25
+ description: 'WP-CLI command as array, e.g. ["plugin", "list", "--format=json"]',
26
+ },
27
+ {
28
+ type: 'string',
29
+ description: 'WP-CLI command as string, e.g. "plugin list --format=json"',
30
+ },
31
+ ],
32
+ description: 'WP-CLI command - either as array ["plugin", "list"] or string "plugin list"',
33
+ },
34
+ },
35
+ required: ['site', 'command'],
36
+ },
37
+ };
38
+ async function wpCli(args, services) {
39
+ const { site: siteQuery, command: rawCommand } = args;
40
+ // Validate required parameters
41
+ const siteError = (0, helpers_1.validateRequiredParam)(siteQuery, 'site');
42
+ if (siteError)
43
+ return siteError;
44
+ const commandError = (0, helpers_1.validateRequiredParam)(rawCommand, 'command');
45
+ if (commandError)
46
+ return commandError;
47
+ // Normalize command to array - accept both string and array formats
48
+ let command;
49
+ if (typeof rawCommand === 'string') {
50
+ // Split string on whitespace, preserving quoted strings would be complex
51
+ // For simple cases, split on spaces
52
+ command = rawCommand.trim().split(/\s+/).filter(Boolean);
53
+ }
54
+ else if (Array.isArray(rawCommand)) {
55
+ command = rawCommand;
56
+ }
57
+ else {
58
+ return {
59
+ content: [
60
+ {
61
+ type: 'text',
62
+ text: 'Error: command must be a string or array of strings',
63
+ },
64
+ ],
65
+ isError: true,
66
+ };
67
+ }
68
+ if (command.length === 0) {
69
+ return (0, helpers_1.createErrorResult)('Error: command cannot be empty');
70
+ }
71
+ // Security: Check for blocked commands
72
+ const blockedCommand = (0, helpers_1.isBlockedWpCommand)(command);
73
+ if (blockedCommand) {
74
+ return (0, helpers_1.createErrorResult)(`Error: Command "${blockedCommand}" is blocked for security reasons. This command could allow arbitrary code execution.`);
75
+ }
76
+ // Find site or return error
77
+ const siteResult = (0, helpers_1.findSiteOrError)(siteQuery, services.siteData);
78
+ if ('error' in siteResult)
79
+ return siteResult.error;
80
+ const { site } = siteResult;
81
+ try {
82
+ const currentStatus = await services.siteProcessManager.getSiteStatus(site);
83
+ if (currentStatus !== 'running') {
84
+ return {
85
+ content: [
86
+ {
87
+ type: 'text',
88
+ text: `Site "${site.name}" is not running. Start it first with the start_site tool.`,
89
+ },
90
+ ],
91
+ isError: true,
92
+ };
93
+ }
94
+ const output = await services.wpCli.run(site, command, {
95
+ skipPlugins: true,
96
+ skipThemes: true,
97
+ ignoreErrors: false,
98
+ });
99
+ return {
100
+ content: [{ type: 'text', text: output?.trim() || '(no output)' }],
101
+ };
102
+ }
103
+ catch (error) {
104
+ return {
105
+ content: [{ type: 'text', text: `WP-CLI error: ${error.message}` }],
106
+ isError: true,
107
+ };
108
+ }
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BDbGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWFpbi9tY3AvdG9vbHMvd3BDbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBdUNILHNCQWdGQztBQXBIRCx1Q0FBMEc7QUFFN0YsUUFBQSxlQUFlLEdBQXNCO0lBQ2hELElBQUksRUFBRSxRQUFRO0lBQ2QsV0FBVyxFQUFFLDBFQUEwRTtJQUN2RixXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsc0NBQXNDO2FBQ3BEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRTtvQkFDTDt3QkFDRSxJQUFJLEVBQUUsT0FBTzt3QkFDYixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO3dCQUN6QixXQUFXLEVBQUUsbUVBQW1FO3FCQUNqRjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsUUFBUTt3QkFDZCxXQUFXLEVBQUUsNERBQTREO3FCQUMxRTtpQkFDRjtnQkFDRCxXQUFXLEVBQUUsNkVBQTZFO2FBQzNGO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO0tBQzlCO0NBQ0YsQ0FBQztBQU9LLEtBQUssVUFBVSxLQUFLLENBQ3pCLElBQTZCLEVBQzdCLFFBQXVCO0lBRXZCLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUE0QixDQUFDO0lBRTlFLCtCQUErQjtJQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFBLCtCQUFxQixFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxJQUFJLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUVoQyxNQUFNLFlBQVksR0FBRyxJQUFBLCtCQUFxQixFQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRSxJQUFJLFlBQVk7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUV0QyxvRUFBb0U7SUFDcEUsSUFBSSxPQUFpQixDQUFDO0lBQ3RCLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMseUVBQXlFO1FBQ3pFLG9DQUFvQztRQUNwQyxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0QsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sR0FBRyxVQUFVLENBQUM7SUFDdkIsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxxREFBcUQ7aUJBQzVEO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sSUFBQSwyQkFBaUIsRUFBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsTUFBTSxjQUFjLEdBQUcsSUFBQSw0QkFBa0IsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sSUFBQSwyQkFBaUIsRUFDdEIsbUJBQW1CLGNBQWMsdUZBQXVGLENBQ3pILENBQUM7SUFDSixDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQWUsRUFBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLElBQUksT0FBTyxJQUFJLFVBQVU7UUFBRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDbkQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUU1QixJQUFJLENBQUM7UUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUUsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsT0FBTztnQkFDTCxPQUFPLEVBQUU7b0JBQ1A7d0JBQ0UsSUFBSSxFQUFFLE1BQU07d0JBQ1osSUFBSSxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksNERBQTREO3FCQUNyRjtpQkFDRjtnQkFDRCxPQUFPLEVBQUUsSUFBSTthQUNkLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ3JELFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxhQUFhLEVBQUUsQ0FBQztTQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ25FLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB3cF9jbGkgVG9vbFxuICogUnVuIFdQLUNMSSBjb21tYW5kcyBhZ2FpbnN0IGEgc2l0ZVxuICovXG5cbmltcG9ydCB7IE1jcFRvb2xEZWZpbml0aW9uLCBNY3BUb29sUmVzdWx0LCBMb2NhbFNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IHZhbGlkYXRlUmVxdWlyZWRQYXJhbSwgZmluZFNpdGVPckVycm9yLCBpc0Jsb2NrZWRXcENvbW1hbmQsIGNyZWF0ZUVycm9yUmVzdWx0IH0gZnJvbSAnLi9oZWxwZXJzJztcblxuZXhwb3J0IGNvbnN0IHdwQ2xpRGVmaW5pdGlvbjogTWNwVG9vbERlZmluaXRpb24gPSB7XG4gIG5hbWU6ICd3cF9jbGknLFxuICBkZXNjcmlwdGlvbjogJ1J1biBhIFdQLUNMSSBjb21tYW5kIGFnYWluc3QgYSBXb3JkUHJlc3Mgc2l0ZS4gVGhlIHNpdGUgbXVzdCBiZSBydW5uaW5nLicsXG4gIGlucHV0U2NoZW1hOiB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgc2l0ZToge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTaXRlIG5hbWUgb3IgSUQgKHBhcnRpYWwgbmFtZXMgd29yayknLFxuICAgICAgfSxcbiAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnV1AtQ0xJIGNvbW1hbmQgYXMgYXJyYXksIGUuZy4gW1wicGx1Z2luXCIsIFwibGlzdFwiLCBcIi0tZm9ybWF0PWpzb25cIl0nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1dQLUNMSSBjb21tYW5kIGFzIHN0cmluZywgZS5nLiBcInBsdWdpbiBsaXN0IC0tZm9ybWF0PWpzb25cIicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdXUC1DTEkgY29tbWFuZCAtIGVpdGhlciBhcyBhcnJheSBbXCJwbHVnaW5cIiwgXCJsaXN0XCJdIG9yIHN0cmluZyBcInBsdWdpbiBsaXN0XCInLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVpcmVkOiBbJ3NpdGUnLCAnY29tbWFuZCddLFxuICB9LFxufTtcblxuaW50ZXJmYWNlIFdwQ2xpQXJncyB7XG4gIHNpdGU6IHN0cmluZztcbiAgY29tbWFuZDogc3RyaW5nW10gfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cENsaShcbiAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNlcnZpY2VzOiBMb2NhbFNlcnZpY2VzXG4pOiBQcm9taXNlPE1jcFRvb2xSZXN1bHQ+IHtcbiAgY29uc3QgeyBzaXRlOiBzaXRlUXVlcnksIGNvbW1hbmQ6IHJhd0NvbW1hbmQgfSA9IGFyZ3MgYXMgdW5rbm93biBhcyBXcENsaUFyZ3M7XG5cbiAgLy8gVmFsaWRhdGUgcmVxdWlyZWQgcGFyYW1ldGVyc1xuICBjb25zdCBzaXRlRXJyb3IgPSB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0oc2l0ZVF1ZXJ5LCAnc2l0ZScpO1xuICBpZiAoc2l0ZUVycm9yKSByZXR1cm4gc2l0ZUVycm9yO1xuXG4gIGNvbnN0IGNvbW1hbmRFcnJvciA9IHZhbGlkYXRlUmVxdWlyZWRQYXJhbShyYXdDb21tYW5kLCAnY29tbWFuZCcpO1xuICBpZiAoY29tbWFuZEVycm9yKSByZXR1cm4gY29tbWFuZEVycm9yO1xuXG4gIC8vIE5vcm1hbGl6ZSBjb21tYW5kIHRvIGFycmF5IC0gYWNjZXB0IGJvdGggc3RyaW5nIGFuZCBhcnJheSBmb3JtYXRzXG4gIGxldCBjb21tYW5kOiBzdHJpbmdbXTtcbiAgaWYgKHR5cGVvZiByYXdDb21tYW5kID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNwbGl0IHN0cmluZyBvbiB3aGl0ZXNwYWNlLCBwcmVzZXJ2aW5nIHF1b3RlZCBzdHJpbmdzIHdvdWxkIGJlIGNvbXBsZXhcbiAgICAvLyBGb3Igc2ltcGxlIGNhc2VzLCBzcGxpdCBvbiBzcGFjZXNcbiAgICBjb21tYW5kID0gcmF3Q29tbWFuZC50cmltKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbik7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyYXdDb21tYW5kKSkge1xuICAgIGNvbW1hbmQgPSByYXdDb21tYW5kO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogJ0Vycm9yOiBjb21tYW5kIG11c3QgYmUgYSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNvbW1hbmQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yUmVzdWx0KCdFcnJvcjogY29tbWFuZCBjYW5ub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIC8vIFNlY3VyaXR5OiBDaGVjayBmb3IgYmxvY2tlZCBjb21tYW5kc1xuICBjb25zdCBibG9ja2VkQ29tbWFuZCA9IGlzQmxvY2tlZFdwQ29tbWFuZChjb21tYW5kKTtcbiAgaWYgKGJsb2NrZWRDb21tYW5kKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yUmVzdWx0KFxuICAgICAgYEVycm9yOiBDb21tYW5kIFwiJHtibG9ja2VkQ29tbWFuZH1cIiBpcyBibG9ja2VkIGZvciBzZWN1cml0eSByZWFzb25zLiBUaGlzIGNvbW1hbmQgY291bGQgYWxsb3cgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uLmBcbiAgICApO1xuICB9XG5cbiAgLy8gRmluZCBzaXRlIG9yIHJldHVybiBlcnJvclxuICBjb25zdCBzaXRlUmVzdWx0ID0gZmluZFNpdGVPckVycm9yKHNpdGVRdWVyeSwgc2VydmljZXMuc2l0ZURhdGEpO1xuICBpZiAoJ2Vycm9yJyBpbiBzaXRlUmVzdWx0KSByZXR1cm4gc2l0ZVJlc3VsdC5lcnJvcjtcbiAgY29uc3QgeyBzaXRlIH0gPSBzaXRlUmVzdWx0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY3VycmVudFN0YXR1cyA9IGF3YWl0IHNlcnZpY2VzLnNpdGVQcm9jZXNzTWFuYWdlci5nZXRTaXRlU3RhdHVzKHNpdGUpO1xuXG4gICAgaWYgKGN1cnJlbnRTdGF0dXMgIT09ICdydW5uaW5nJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHRleHQ6IGBTaXRlIFwiJHtzaXRlLm5hbWV9XCIgaXMgbm90IHJ1bm5pbmcuIFN0YXJ0IGl0IGZpcnN0IHdpdGggdGhlIHN0YXJ0X3NpdGUgdG9vbC5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHNlcnZpY2VzLndwQ2xpLnJ1bihzaXRlLCBjb21tYW5kLCB7XG4gICAgICBza2lwUGx1Z2luczogdHJ1ZSxcbiAgICAgIHNraXBUaGVtZXM6IHRydWUsXG4gICAgICBpZ25vcmVFcnJvcnM6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogb3V0cHV0Py50cmltKCkgfHwgJyhubyBvdXRwdXQpJyB9XSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogYFdQLUNMSSBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAgfV0sXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export { default } from './main/index';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = void 0;
7
+ // Re-export default from main/index
8
+ var index_1 = require("./main/index");
9
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(index_1).default; } });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9DQUFvQztBQUNwQyxzQ0FBdUM7QUFBOUIsaUhBQUEsT0FBTyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gUmUtZXhwb3J0IGRlZmF1bHQgZnJvbSBtYWluL2luZGV4XG5leHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9tYWluL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MCP Server Addon - Renderer Entry Point
3
+ * Adds MCP Server preferences panel to Local
4
+ *
5
+ * Uses class components for compatibility with Local's Electron environment.
6
+ */
7
+ export {};