@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.
- package/LICENSE +21 -0
- package/README.md +246 -0
- package/agents/MrZeroEnvBuilder.md +155 -0
- package/agents/MrZeroExploitDeveloper.md +263 -0
- package/agents/MrZeroMapperOS.md +179 -0
- package/agents/MrZeroVulnHunterOS.md +172 -0
- package/dist/commands/check.d.ts +6 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +205 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/install.d.ts +10 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +256 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/uninstall.d.ts +8 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +123 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/config/agents.d.ts +20 -0
- package/dist/config/agents.d.ts.map +1 -0
- package/dist/config/agents.js +88 -0
- package/dist/config/agents.js.map +1 -0
- package/dist/config/mcp-servers.d.ts +16 -0
- package/dist/config/mcp-servers.d.ts.map +1 -0
- package/dist/config/mcp-servers.js +72 -0
- package/dist/config/mcp-servers.js.map +1 -0
- package/dist/config/tools.d.ts +15 -0
- package/dist/config/tools.d.ts.map +1 -0
- package/dist/config/tools.js +130 -0
- package/dist/config/tools.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/detector.d.ts +52 -0
- package/dist/installer/detector.d.ts.map +1 -0
- package/dist/installer/detector.js +381 -0
- package/dist/installer/detector.js.map +1 -0
- package/dist/installer/docker.d.ts +8 -0
- package/dist/installer/docker.d.ts.map +1 -0
- package/dist/installer/docker.js +197 -0
- package/dist/installer/docker.js.map +1 -0
- package/dist/installer/mcp.d.ts +11 -0
- package/dist/installer/mcp.d.ts.map +1 -0
- package/dist/installer/mcp.js +317 -0
- package/dist/installer/mcp.js.map +1 -0
- package/dist/installer/platforms.d.ts +7 -0
- package/dist/installer/platforms.d.ts.map +1 -0
- package/dist/installer/platforms.js +254 -0
- package/dist/installer/platforms.js.map +1 -0
- package/dist/installer/python.d.ts +5 -0
- package/dist/installer/python.d.ts.map +1 -0
- package/dist/installer/python.js +65 -0
- package/dist/installer/python.js.map +1 -0
- package/dist/installer/ruby.d.ts +5 -0
- package/dist/installer/ruby.d.ts.map +1 -0
- package/dist/installer/ruby.js +80 -0
- package/dist/installer/ruby.js.map +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +46 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/platform.d.ts +18 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +110 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/shell.d.ts +14 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +45 -0
- package/dist/utils/shell.js.map +1 -0
- package/docker/Dockerfile +118 -0
- 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
|