@bengabay94/mrzero 0.1.0-alpha.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 (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +246 -0
  3. package/agents/MrZeroEnvBuilder.md +155 -0
  4. package/agents/MrZeroExploitDeveloper.md +263 -0
  5. package/agents/MrZeroMapperOS.md +179 -0
  6. package/agents/MrZeroVulnHunterOS.md +172 -0
  7. package/dist/commands/check.d.ts +6 -0
  8. package/dist/commands/check.d.ts.map +1 -0
  9. package/dist/commands/check.js +205 -0
  10. package/dist/commands/check.js.map +1 -0
  11. package/dist/commands/install.d.ts +10 -0
  12. package/dist/commands/install.d.ts.map +1 -0
  13. package/dist/commands/install.js +256 -0
  14. package/dist/commands/install.js.map +1 -0
  15. package/dist/commands/uninstall.d.ts +8 -0
  16. package/dist/commands/uninstall.d.ts.map +1 -0
  17. package/dist/commands/uninstall.js +123 -0
  18. package/dist/commands/uninstall.js.map +1 -0
  19. package/dist/config/agents.d.ts +20 -0
  20. package/dist/config/agents.d.ts.map +1 -0
  21. package/dist/config/agents.js +88 -0
  22. package/dist/config/agents.js.map +1 -0
  23. package/dist/config/mcp-servers.d.ts +16 -0
  24. package/dist/config/mcp-servers.d.ts.map +1 -0
  25. package/dist/config/mcp-servers.js +72 -0
  26. package/dist/config/mcp-servers.js.map +1 -0
  27. package/dist/config/tools.d.ts +15 -0
  28. package/dist/config/tools.d.ts.map +1 -0
  29. package/dist/config/tools.js +130 -0
  30. package/dist/config/tools.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +35 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/installer/detector.d.ts +52 -0
  36. package/dist/installer/detector.d.ts.map +1 -0
  37. package/dist/installer/detector.js +381 -0
  38. package/dist/installer/detector.js.map +1 -0
  39. package/dist/installer/docker.d.ts +8 -0
  40. package/dist/installer/docker.d.ts.map +1 -0
  41. package/dist/installer/docker.js +197 -0
  42. package/dist/installer/docker.js.map +1 -0
  43. package/dist/installer/mcp.d.ts +11 -0
  44. package/dist/installer/mcp.d.ts.map +1 -0
  45. package/dist/installer/mcp.js +317 -0
  46. package/dist/installer/mcp.js.map +1 -0
  47. package/dist/installer/platforms.d.ts +7 -0
  48. package/dist/installer/platforms.d.ts.map +1 -0
  49. package/dist/installer/platforms.js +254 -0
  50. package/dist/installer/platforms.js.map +1 -0
  51. package/dist/installer/python.d.ts +5 -0
  52. package/dist/installer/python.d.ts.map +1 -0
  53. package/dist/installer/python.js +65 -0
  54. package/dist/installer/python.js.map +1 -0
  55. package/dist/installer/ruby.d.ts +5 -0
  56. package/dist/installer/ruby.d.ts.map +1 -0
  57. package/dist/installer/ruby.js +80 -0
  58. package/dist/installer/ruby.js.map +1 -0
  59. package/dist/utils/logger.d.ts +16 -0
  60. package/dist/utils/logger.d.ts.map +1 -0
  61. package/dist/utils/logger.js +46 -0
  62. package/dist/utils/logger.js.map +1 -0
  63. package/dist/utils/platform.d.ts +18 -0
  64. package/dist/utils/platform.d.ts.map +1 -0
  65. package/dist/utils/platform.js +110 -0
  66. package/dist/utils/platform.js.map +1 -0
  67. package/dist/utils/shell.d.ts +14 -0
  68. package/dist/utils/shell.d.ts.map +1 -0
  69. package/dist/utils/shell.js +45 -0
  70. package/dist/utils/shell.js.map +1 -0
  71. package/docker/Dockerfile +118 -0
  72. package/package.json +56 -0
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.configureClaudeCode = configureClaudeCode;
37
+ exports.configureOpenCode = configureOpenCode;
38
+ exports.configurePlatform = configurePlatform;
39
+ exports.removeAgentsFromPlatform = removeAgentsFromPlatform;
40
+ exports.removeMcpServersFromPlatform = removeMcpServersFromPlatform;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const logger_js_1 = require("../utils/logger.js");
44
+ const platform_js_1 = require("../utils/platform.js");
45
+ const mcp_servers_js_1 = require("../config/mcp-servers.js");
46
+ const agents_js_1 = require("../config/agents.js");
47
+ // Get the path to the agents directory in the package
48
+ function getPackageAgentsDir() {
49
+ // When running from dist, agents are at ../agents relative to dist
50
+ const distAgents = path.join(__dirname, '..', '..', 'agents');
51
+ if (fs.existsSync(distAgents)) {
52
+ return distAgents;
53
+ }
54
+ // When running from source
55
+ const srcAgents = path.join(__dirname, '..', '..', '..', 'agents');
56
+ if (fs.existsSync(srcAgents)) {
57
+ return srcAgents;
58
+ }
59
+ throw new Error('Could not find agents directory');
60
+ }
61
+ function expandMrZeroDir(str) {
62
+ return str.replace(/\$\{MRZERO_DIR\}/g, (0, platform_js_1.getMrZeroDir)());
63
+ }
64
+ function buildClaudeMcpConfig(serverName) {
65
+ const server = mcp_servers_js_1.MCP_SERVERS[serverName];
66
+ if (!server)
67
+ return null;
68
+ const config = {
69
+ command: server.command,
70
+ };
71
+ if (server.args) {
72
+ config.args = server.args.map(expandMrZeroDir);
73
+ }
74
+ if (server.env) {
75
+ config.env = server.env;
76
+ }
77
+ return config;
78
+ }
79
+ function buildOpenCodeMcpConfig(serverName) {
80
+ const server = mcp_servers_js_1.MCP_SERVERS[serverName];
81
+ if (!server)
82
+ return null;
83
+ const config = {
84
+ command: server.command,
85
+ };
86
+ if (server.args) {
87
+ config.args = server.args.map(expandMrZeroDir);
88
+ }
89
+ if (server.env) {
90
+ config.env = server.env;
91
+ }
92
+ return config;
93
+ }
94
+ async function configureClaudeCode(mcpServers, agents) {
95
+ logger_js_1.logger.header('Configuring Claude Code');
96
+ const claudeDir = (0, platform_js_1.getClaudeConfigDir)();
97
+ const agentsDir = (0, platform_js_1.getClaudeAgentsDir)();
98
+ // Ensure directories exist
99
+ fs.mkdirSync(claudeDir, { recursive: true });
100
+ fs.mkdirSync(agentsDir, { recursive: true });
101
+ // Copy agent files
102
+ const packageAgentsDir = getPackageAgentsDir();
103
+ for (const agentName of agents) {
104
+ const agent = agents_js_1.AGENTS[agentName];
105
+ if (!agent)
106
+ continue;
107
+ const srcPath = path.join(packageAgentsDir, agent.filename);
108
+ const destPath = path.join(agentsDir, agent.filename);
109
+ if (fs.existsSync(srcPath)) {
110
+ fs.copyFileSync(srcPath, destPath);
111
+ logger_js_1.logger.success(`Installed agent: ${agent.displayName}`);
112
+ }
113
+ else {
114
+ logger_js_1.logger.warning(`Agent file not found: ${agent.filename}`);
115
+ }
116
+ }
117
+ // Configure MCP servers in settings.json
118
+ const settingsPath = path.join(claudeDir, 'settings.json');
119
+ let settings = {};
120
+ if (fs.existsSync(settingsPath)) {
121
+ try {
122
+ settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
123
+ }
124
+ catch {
125
+ logger_js_1.logger.warning('Could not parse existing settings.json, creating new one');
126
+ }
127
+ }
128
+ // Initialize mcpServers if not present
129
+ if (!settings.mcpServers) {
130
+ settings.mcpServers = {};
131
+ }
132
+ // Add MCP server configurations
133
+ for (const serverName of mcpServers) {
134
+ const config = buildClaudeMcpConfig(serverName);
135
+ if (config) {
136
+ // Use a clean name for the key
137
+ const keyName = serverName.replace('-mcp', '').replace('mcp-', '');
138
+ settings.mcpServers[keyName] = config;
139
+ logger_js_1.logger.success(`Configured MCP server: ${serverName}`);
140
+ }
141
+ }
142
+ // Write settings
143
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
144
+ logger_js_1.logger.success(`Updated ${settingsPath}`);
145
+ }
146
+ async function configureOpenCode(mcpServers, agents) {
147
+ logger_js_1.logger.header('Configuring OpenCode');
148
+ const openCodeDir = (0, platform_js_1.getOpenCodeConfigDir)();
149
+ const agentsDir = (0, platform_js_1.getOpenCodeAgentsDir)();
150
+ // Ensure directories exist
151
+ fs.mkdirSync(openCodeDir, { recursive: true });
152
+ fs.mkdirSync(agentsDir, { recursive: true });
153
+ // Copy agent files
154
+ const packageAgentsDir = getPackageAgentsDir();
155
+ for (const agentName of agents) {
156
+ const agent = agents_js_1.AGENTS[agentName];
157
+ if (!agent)
158
+ continue;
159
+ const srcPath = path.join(packageAgentsDir, agent.filename);
160
+ const destPath = path.join(agentsDir, agent.filename);
161
+ if (fs.existsSync(srcPath)) {
162
+ fs.copyFileSync(srcPath, destPath);
163
+ logger_js_1.logger.success(`Installed agent: ${agent.displayName}`);
164
+ }
165
+ else {
166
+ logger_js_1.logger.warning(`Agent file not found: ${agent.filename}`);
167
+ }
168
+ }
169
+ // Configure MCP servers in opencode.json
170
+ const configPath = path.join(openCodeDir, 'config.json');
171
+ let config = {};
172
+ if (fs.existsSync(configPath)) {
173
+ try {
174
+ config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
175
+ }
176
+ catch {
177
+ logger_js_1.logger.warning('Could not parse existing config.json, creating new one');
178
+ }
179
+ }
180
+ // Initialize mcp if not present
181
+ if (!config.mcp) {
182
+ config.mcp = {};
183
+ }
184
+ // Add MCP server configurations
185
+ for (const serverName of mcpServers) {
186
+ const serverConfig = buildOpenCodeMcpConfig(serverName);
187
+ if (serverConfig) {
188
+ const keyName = serverName.replace('-mcp', '').replace('mcp-', '');
189
+ config.mcp[keyName] = serverConfig;
190
+ logger_js_1.logger.success(`Configured MCP server: ${serverName}`);
191
+ }
192
+ }
193
+ // Write config
194
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
195
+ logger_js_1.logger.success(`Updated ${configPath}`);
196
+ }
197
+ async function configurePlatform(platform, mcpServers, agents) {
198
+ switch (platform) {
199
+ case 'claude-code':
200
+ await configureClaudeCode(mcpServers, agents);
201
+ break;
202
+ case 'opencode':
203
+ await configureOpenCode(mcpServers, agents);
204
+ break;
205
+ }
206
+ }
207
+ async function removeAgentsFromPlatform(platform, agents) {
208
+ const agentsDir = platform === 'claude-code' ? (0, platform_js_1.getClaudeAgentsDir)() : (0, platform_js_1.getOpenCodeAgentsDir)();
209
+ for (const agentName of agents) {
210
+ const agent = agents_js_1.AGENTS[agentName];
211
+ if (!agent)
212
+ continue;
213
+ const agentPath = path.join(agentsDir, agent.filename);
214
+ if (fs.existsSync(agentPath)) {
215
+ fs.unlinkSync(agentPath);
216
+ logger_js_1.logger.success(`Removed agent: ${agent.displayName}`);
217
+ }
218
+ }
219
+ }
220
+ async function removeMcpServersFromPlatform(platform, mcpServers) {
221
+ if (platform === 'claude-code') {
222
+ const settingsPath = path.join((0, platform_js_1.getClaudeConfigDir)(), 'settings.json');
223
+ if (fs.existsSync(settingsPath)) {
224
+ try {
225
+ const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
226
+ if (settings.mcpServers) {
227
+ for (const serverName of mcpServers) {
228
+ const keyName = serverName.replace('-mcp', '').replace('mcp-', '');
229
+ delete settings.mcpServers[keyName];
230
+ }
231
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
232
+ }
233
+ }
234
+ catch { }
235
+ }
236
+ }
237
+ else if (platform === 'opencode') {
238
+ const configPath = path.join((0, platform_js_1.getOpenCodeConfigDir)(), 'config.json');
239
+ if (fs.existsSync(configPath)) {
240
+ try {
241
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
242
+ if (config.mcp) {
243
+ for (const serverName of mcpServers) {
244
+ const keyName = serverName.replace('-mcp', '').replace('mcp-', '');
245
+ delete config.mcp[keyName];
246
+ }
247
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
248
+ }
249
+ }
250
+ catch { }
251
+ }
252
+ }
253
+ }
254
+ //# sourceMappingURL=platforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../src/installer/platforms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function installPythonTool(toolName: string): Promise<boolean>;
2
+ export declare function installAllPythonTools(tools: string[]): Promise<void>;
3
+ export declare function checkPythonTool(toolName: string): Promise<boolean>;
4
+ export declare function uninstallPythonTool(toolName: string): Promise<boolean>;
5
+ //# sourceMappingURL=python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/installer/python.ts"],"names":[],"mappings":"AAIA,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4B1E;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxE;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAc5E"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.installPythonTool = installPythonTool;
4
+ exports.installAllPythonTools = installAllPythonTools;
5
+ exports.checkPythonTool = checkPythonTool;
6
+ exports.uninstallPythonTool = uninstallPythonTool;
7
+ const shell_js_1 = require("../utils/shell.js");
8
+ const logger_js_1 = require("../utils/logger.js");
9
+ const tools_js_1 = require("../config/tools.js");
10
+ async function installPythonTool(toolName) {
11
+ const tool = tools_js_1.PYTHON_TOOLS[toolName];
12
+ if (!tool) {
13
+ logger_js_1.logger.error(`Unknown Python tool: ${toolName}`);
14
+ return false;
15
+ }
16
+ logger_js_1.logger.step(`Installing ${tool.displayName}...`);
17
+ // First check if uv is available
18
+ const uvCheck = await (0, shell_js_1.exec)('uv --version');
19
+ if (uvCheck.code !== 0) {
20
+ logger_js_1.logger.error('uv is not installed. Please install uv first:');
21
+ logger_js_1.logger.info(' curl -LsSf https://astral.sh/uv/install.sh | sh');
22
+ return false;
23
+ }
24
+ // Install using uv
25
+ const installCmd = tool.installCommand || `uv pip install ${toolName}`;
26
+ const result = await (0, shell_js_1.exec)(installCmd);
27
+ if (result.code === 0) {
28
+ logger_js_1.logger.success(`Installed ${tool.displayName}`);
29
+ return true;
30
+ }
31
+ else {
32
+ logger_js_1.logger.error(`Failed to install ${tool.displayName}: ${result.stderr}`);
33
+ return false;
34
+ }
35
+ }
36
+ async function installAllPythonTools(tools) {
37
+ if (tools.length === 0)
38
+ return;
39
+ logger_js_1.logger.header('Installing Python tools via uv');
40
+ for (const tool of tools) {
41
+ await installPythonTool(tool);
42
+ }
43
+ }
44
+ async function checkPythonTool(toolName) {
45
+ const tool = tools_js_1.PYTHON_TOOLS[toolName];
46
+ if (!tool || !tool.checkCommand) {
47
+ return false;
48
+ }
49
+ const result = await (0, shell_js_1.exec)(tool.checkCommand);
50
+ return result.code === 0;
51
+ }
52
+ async function uninstallPythonTool(toolName) {
53
+ const tool = tools_js_1.PYTHON_TOOLS[toolName];
54
+ if (!tool) {
55
+ return false;
56
+ }
57
+ logger_js_1.logger.step(`Uninstalling ${tool.displayName}...`);
58
+ const result = await (0, shell_js_1.exec)(`uv pip uninstall -y ${toolName}`);
59
+ if (result.code === 0) {
60
+ logger_js_1.logger.success(`Uninstalled ${tool.displayName}`);
61
+ return true;
62
+ }
63
+ return false;
64
+ }
65
+ //# sourceMappingURL=python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/installer/python.ts"],"names":[],"mappings":";;AAIA,8CA4BC;AAED,sDAQC;AAED,0CAQC;AAED,kDAcC;AApED,gDAAwD;AACxD,kDAA4C;AAC5C,iDAAkD;AAE3C,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,MAAM,IAAI,GAAG,uBAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,kBAAM,CAAC,KAAK,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC;IAEjD,iCAAiC;IACjC,MAAM,OAAO,GAAG,MAAM,IAAA,eAAI,EAAC,cAAc,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvB,kBAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC9D,kBAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,IAAI,kBAAkB,QAAQ,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,MAAM,IAAA,eAAI,EAAC,UAAU,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,kBAAM,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,kBAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,KAAe;IACzD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/B,kBAAM,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAEhD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,MAAM,IAAI,GAAG,uBAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;AAC3B,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,MAAM,IAAI,GAAG,uBAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,MAAM,IAAA,eAAI,EAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,kBAAM,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function installRubyTool(toolName: string): Promise<boolean>;
2
+ export declare function installAllRubyTools(tools: string[]): Promise<void>;
3
+ export declare function checkRubyTool(toolName: string): Promise<boolean>;
4
+ export declare function uninstallRubyTool(toolName: string): Promise<boolean>;
5
+ //# sourceMappingURL=ruby.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby.d.ts","sourceRoot":"","sources":["../../src/installer/ruby.ts"],"names":[],"mappings":"AAIA,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CxE;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQxE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQtE;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAc1E"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.installRubyTool = installRubyTool;
4
+ exports.installAllRubyTools = installAllRubyTools;
5
+ exports.checkRubyTool = checkRubyTool;
6
+ exports.uninstallRubyTool = uninstallRubyTool;
7
+ const shell_js_1 = require("../utils/shell.js");
8
+ const logger_js_1 = require("../utils/logger.js");
9
+ const tools_js_1 = require("../config/tools.js");
10
+ async function installRubyTool(toolName) {
11
+ const tool = tools_js_1.RUBY_TOOLS[toolName];
12
+ if (!tool) {
13
+ logger_js_1.logger.error(`Unknown Ruby tool: ${toolName}`);
14
+ return false;
15
+ }
16
+ logger_js_1.logger.step(`Installing ${tool.displayName}...`);
17
+ // Check if Ruby is available
18
+ const rubyCheck = await (0, shell_js_1.exec)('ruby --version');
19
+ if (rubyCheck.code !== 0) {
20
+ logger_js_1.logger.error('Ruby is not installed. Please install Ruby first:');
21
+ logger_js_1.logger.info(' sudo apt-get install ruby ruby-dev');
22
+ return false;
23
+ }
24
+ // Check if gem is available
25
+ const gemCheck = await (0, shell_js_1.exec)('gem --version');
26
+ if (gemCheck.code !== 0) {
27
+ logger_js_1.logger.error('gem is not installed. Please install RubyGems first.');
28
+ return false;
29
+ }
30
+ // Install using gem
31
+ const installCmd = tool.installCommand || `gem install ${toolName}`;
32
+ const result = await (0, shell_js_1.exec)(installCmd);
33
+ if (result.code === 0) {
34
+ logger_js_1.logger.success(`Installed ${tool.displayName}`);
35
+ return true;
36
+ }
37
+ else {
38
+ // Try with sudo if permission denied
39
+ if (result.stderr.includes('Permission denied') || result.stderr.includes('permission')) {
40
+ logger_js_1.logger.warning('Permission denied, trying with --user-install...');
41
+ const userResult = await (0, shell_js_1.exec)(`gem install --user-install ${toolName}`);
42
+ if (userResult.code === 0) {
43
+ logger_js_1.logger.success(`Installed ${tool.displayName}`);
44
+ return true;
45
+ }
46
+ }
47
+ logger_js_1.logger.error(`Failed to install ${tool.displayName}: ${result.stderr}`);
48
+ return false;
49
+ }
50
+ }
51
+ async function installAllRubyTools(tools) {
52
+ if (tools.length === 0)
53
+ return;
54
+ logger_js_1.logger.header('Installing Ruby tools via gem');
55
+ for (const tool of tools) {
56
+ await installRubyTool(tool);
57
+ }
58
+ }
59
+ async function checkRubyTool(toolName) {
60
+ const tool = tools_js_1.RUBY_TOOLS[toolName];
61
+ if (!tool || !tool.checkCommand) {
62
+ return false;
63
+ }
64
+ const result = await (0, shell_js_1.exec)(tool.checkCommand);
65
+ return result.code === 0;
66
+ }
67
+ async function uninstallRubyTool(toolName) {
68
+ const tool = tools_js_1.RUBY_TOOLS[toolName];
69
+ if (!tool) {
70
+ return false;
71
+ }
72
+ logger_js_1.logger.step(`Uninstalling ${tool.displayName}...`);
73
+ const result = await (0, shell_js_1.exec)(`gem uninstall -x ${toolName}`);
74
+ if (result.code === 0) {
75
+ logger_js_1.logger.success(`Uninstalled ${tool.displayName}`);
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+ //# sourceMappingURL=ruby.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../src/installer/ruby.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare const logger: {
2
+ info: (message: string) => void;
3
+ success: (message: string) => void;
4
+ warning: (message: string) => void;
5
+ error: (message: string) => void;
6
+ step: (message: string) => void;
7
+ header: (message: string) => void;
8
+ subheader: (message: string) => void;
9
+ list: (items: string[]) => void;
10
+ table: (rows: [string, string][]) => void;
11
+ blank: () => void;
12
+ box: (title: string, content: string[]) => void;
13
+ };
14
+ export declare function formatStatus(installed: boolean): string;
15
+ export declare function formatOptional(installed: boolean): string;
16
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,MAAM;uBACH,MAAM;uBACN,MAAM;qBACR,MAAM;oBACP,MAAM;sBAEJ,MAAM;yBAKH,MAAM;kBAIb,MAAM,EAAE;kBAIR,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;;iBASnB,MAAM,WAAW,MAAM,EAAE;CAMvC,CAAC;AAEF,wBAAgB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAEvD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,46 @@
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.logger = void 0;
7
+ exports.formatStatus = formatStatus;
8
+ exports.formatOptional = formatOptional;
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ exports.logger = {
11
+ info: (message) => console.log(chalk_1.default.blue('i') + ' ' + message),
12
+ success: (message) => console.log(chalk_1.default.green('✓') + ' ' + message),
13
+ warning: (message) => console.log(chalk_1.default.yellow('!') + ' ' + message),
14
+ error: (message) => console.log(chalk_1.default.red('✗') + ' ' + message),
15
+ step: (message) => console.log(chalk_1.default.cyan('→') + ' ' + message),
16
+ header: (message) => {
17
+ console.log('');
18
+ console.log(chalk_1.default.bold.cyan(message));
19
+ },
20
+ subheader: (message) => {
21
+ console.log(chalk_1.default.dim(message));
22
+ },
23
+ list: (items) => {
24
+ items.forEach((item) => console.log(' ' + chalk_1.default.dim('•') + ' ' + item));
25
+ },
26
+ table: (rows) => {
27
+ const maxKeyLen = Math.max(...rows.map(([key]) => key.length));
28
+ rows.forEach(([key, value]) => {
29
+ console.log(' ' + chalk_1.default.dim(key.padEnd(maxKeyLen)) + ' ' + value);
30
+ });
31
+ },
32
+ blank: () => console.log(''),
33
+ box: (title, content) => {
34
+ console.log('');
35
+ console.log(chalk_1.default.bold.yellow('┌─ ' + title + ' ─'));
36
+ content.forEach((line) => console.log(chalk_1.default.yellow('│ ') + line));
37
+ console.log(chalk_1.default.yellow('└' + '─'.repeat(title.length + 4)));
38
+ },
39
+ };
40
+ function formatStatus(installed) {
41
+ return installed ? chalk_1.default.green('✓ installed') : chalk_1.default.red('✗ not found');
42
+ }
43
+ function formatOptional(installed) {
44
+ return installed ? chalk_1.default.green('✓ installed') : chalk_1.default.dim('○ not installed (optional)');
45
+ }
46
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export type Platform = 'linux' | 'darwin' | 'win32' | 'unsupported';
2
+ export declare function getPlatform(): Platform;
3
+ export declare function isLinux(): boolean;
4
+ export declare function isMac(): boolean;
5
+ export declare function isWindows(): boolean;
6
+ export declare function getHomeDir(): string;
7
+ export declare function getMrZeroDir(): string;
8
+ export declare function getMcpServersDir(): string;
9
+ export declare function getWrappersDir(): string;
10
+ export declare function getClaudeConfigDir(): string;
11
+ export declare function getClaudeAgentsDir(): string;
12
+ export declare function getOpenCodeConfigDir(): string;
13
+ export declare function getOpenCodeAgentsDir(): string;
14
+ export declare function getDistroInfo(): {
15
+ name: string;
16
+ version: string;
17
+ } | null;
18
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;AAEpE,wBAAgB,WAAW,IAAI,QAAQ,CAMtC;AAED,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,aAAa,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiBxE"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getPlatform = getPlatform;
37
+ exports.isLinux = isLinux;
38
+ exports.isMac = isMac;
39
+ exports.isWindows = isWindows;
40
+ exports.getHomeDir = getHomeDir;
41
+ exports.getMrZeroDir = getMrZeroDir;
42
+ exports.getMcpServersDir = getMcpServersDir;
43
+ exports.getWrappersDir = getWrappersDir;
44
+ exports.getClaudeConfigDir = getClaudeConfigDir;
45
+ exports.getClaudeAgentsDir = getClaudeAgentsDir;
46
+ exports.getOpenCodeConfigDir = getOpenCodeConfigDir;
47
+ exports.getOpenCodeAgentsDir = getOpenCodeAgentsDir;
48
+ exports.getDistroInfo = getDistroInfo;
49
+ const os = __importStar(require("os"));
50
+ const path = __importStar(require("path"));
51
+ function getPlatform() {
52
+ const platform = os.platform();
53
+ if (platform === 'linux' || platform === 'darwin' || platform === 'win32') {
54
+ return platform;
55
+ }
56
+ return 'unsupported';
57
+ }
58
+ function isLinux() {
59
+ return os.platform() === 'linux';
60
+ }
61
+ function isMac() {
62
+ return os.platform() === 'darwin';
63
+ }
64
+ function isWindows() {
65
+ return os.platform() === 'win32';
66
+ }
67
+ function getHomeDir() {
68
+ return os.homedir();
69
+ }
70
+ function getMrZeroDir() {
71
+ return path.join(getHomeDir(), '.mrzero');
72
+ }
73
+ function getMcpServersDir() {
74
+ return path.join(getMrZeroDir(), 'mcp-servers');
75
+ }
76
+ function getWrappersDir() {
77
+ return path.join(getHomeDir(), '.local', 'bin');
78
+ }
79
+ function getClaudeConfigDir() {
80
+ return path.join(getHomeDir(), '.claude');
81
+ }
82
+ function getClaudeAgentsDir() {
83
+ return path.join(getClaudeConfigDir(), 'agents');
84
+ }
85
+ function getOpenCodeConfigDir() {
86
+ return path.join(getHomeDir(), '.config', 'opencode');
87
+ }
88
+ function getOpenCodeAgentsDir() {
89
+ return path.join(getOpenCodeConfigDir(), 'agents');
90
+ }
91
+ function getDistroInfo() {
92
+ if (!isLinux())
93
+ return null;
94
+ try {
95
+ const fs = require('fs');
96
+ const releaseFile = '/etc/os-release';
97
+ if (fs.existsSync(releaseFile)) {
98
+ const content = fs.readFileSync(releaseFile, 'utf-8');
99
+ const nameMatch = content.match(/^NAME="?([^"\n]+)"?/m);
100
+ const versionMatch = content.match(/^VERSION_ID="?([^"\n]+)"?/m);
101
+ return {
102
+ name: nameMatch?.[1] || 'Unknown',
103
+ version: versionMatch?.[1] || 'Unknown',
104
+ };
105
+ }
106
+ }
107
+ catch { }
108
+ return null;
109
+ }
110
+ //# sourceMappingURL=platform.js.map