@kya-os/cli 0.1.0-beta.1 → 0.1.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +210 -34
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +73 -57
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/claim.js +33 -39
- package/dist/commands/claim.js.map +1 -1
- package/dist/commands/cli-experience-demo-simple.d.ts +14 -0
- package/dist/commands/cli-experience-demo-simple.d.ts.map +1 -0
- package/dist/commands/cli-experience-demo-simple.js +119 -0
- package/dist/commands/cli-experience-demo-simple.js.map +1 -0
- package/dist/commands/cli-experience-demo.d.ts +14 -0
- package/dist/commands/cli-experience-demo.d.ts.map +1 -0
- package/dist/commands/cli-experience-demo.js +172 -0
- package/dist/commands/cli-experience-demo.js.map +1 -0
- package/dist/commands/effects-demo.d.ts +10 -0
- package/dist/commands/effects-demo.d.ts.map +1 -0
- package/dist/commands/effects-demo.js +292 -0
- package/dist/commands/effects-demo.js.map +1 -0
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +55 -51
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +527 -102
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rotate.d.ts.map +1 -1
- package/dist/commands/rotate.js +81 -60
- package/dist/commands/rotate.js.map +1 -1
- package/dist/dev.d.ts +7 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +9 -0
- package/dist/dev.js.map +1 -0
- package/dist/effects/__tests__/effects.test.d.ts +5 -0
- package/dist/effects/__tests__/effects.test.d.ts.map +1 -0
- package/dist/effects/__tests__/effects.test.js +206 -0
- package/dist/effects/__tests__/effects.test.js.map +1 -0
- package/dist/effects/animation-engine.d.ts +173 -0
- package/dist/effects/animation-engine.d.ts.map +1 -0
- package/dist/effects/animation-engine.js +254 -0
- package/dist/effects/animation-engine.js.map +1 -0
- package/dist/effects/cli-integration.d.ts +86 -0
- package/dist/effects/cli-integration.d.ts.map +1 -0
- package/dist/effects/cli-integration.js +309 -0
- package/dist/effects/cli-integration.js.map +1 -0
- package/dist/effects/config.d.ts +95 -0
- package/dist/effects/config.d.ts.map +1 -0
- package/dist/effects/config.js +216 -0
- package/dist/effects/config.js.map +1 -0
- package/dist/effects/effect-runner.d.ts +69 -0
- package/dist/effects/effect-runner.d.ts.map +1 -0
- package/dist/effects/effect-runner.js +255 -0
- package/dist/effects/effect-runner.js.map +1 -0
- package/dist/effects/gradient.d.ts +131 -0
- package/dist/effects/gradient.d.ts.map +1 -0
- package/dist/effects/gradient.js +236 -0
- package/dist/effects/gradient.js.map +1 -0
- package/dist/effects/implementations/beams.d.ts +80 -0
- package/dist/effects/implementations/beams.d.ts.map +1 -0
- package/dist/effects/implementations/beams.js +221 -0
- package/dist/effects/implementations/beams.js.map +1 -0
- package/dist/effects/implementations/binary-path.d.ts +88 -0
- package/dist/effects/implementations/binary-path.d.ts.map +1 -0
- package/dist/effects/implementations/binary-path.js +296 -0
- package/dist/effects/implementations/binary-path.js.map +1 -0
- package/dist/effects/implementations/blackhole.d.ts +98 -0
- package/dist/effects/implementations/blackhole.d.ts.map +1 -0
- package/dist/effects/implementations/blackhole.js +394 -0
- package/dist/effects/implementations/blackhole.js.map +1 -0
- package/dist/effects/implementations/burn.d.ts +74 -0
- package/dist/effects/implementations/burn.d.ts.map +1 -0
- package/dist/effects/implementations/burn.js +234 -0
- package/dist/effects/implementations/burn.js.map +1 -0
- package/dist/effects/implementations/decrypt.d.ts +115 -0
- package/dist/effects/implementations/decrypt.d.ts.map +1 -0
- package/dist/effects/implementations/decrypt.js +394 -0
- package/dist/effects/implementations/decrypt.js.map +1 -0
- package/dist/effects/implementations/test.d.ts +113 -0
- package/dist/effects/implementations/test.d.ts.map +1 -0
- package/dist/effects/implementations/test.js +552 -0
- package/dist/effects/implementations/test.js.map +1 -0
- package/dist/effects/implementations/waves.d.ts +78 -0
- package/dist/effects/implementations/waves.d.ts.map +1 -0
- package/dist/effects/implementations/waves.js +278 -0
- package/dist/effects/implementations/waves.js.map +1 -0
- package/dist/effects/index.d.ts +37 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/index.js +79 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/effects/motion-engine.d.ts +168 -0
- package/dist/effects/motion-engine.d.ts.map +1 -0
- package/dist/effects/motion-engine.js +353 -0
- package/dist/effects/motion-engine.js.map +1 -0
- package/dist/effects/safe-executor.d.ts +55 -0
- package/dist/effects/safe-executor.d.ts.map +1 -0
- package/dist/effects/safe-executor.js +210 -0
- package/dist/effects/safe-executor.js.map +1 -0
- package/dist/effects/template/effect-template.d.ts +97 -0
- package/dist/effects/template/effect-template.d.ts.map +1 -0
- package/dist/effects/template/effect-template.js +208 -0
- package/dist/effects/template/effect-template.js.map +1 -0
- package/dist/effects/types.d.ts +199 -0
- package/dist/effects/types.d.ts.map +1 -0
- package/dist/effects/types.js +80 -0
- package/dist/effects/types.js.map +1 -0
- package/dist/effects/utils.d.ts +104 -0
- package/dist/effects/utils.d.ts.map +1 -0
- package/dist/effects/utils.js +280 -0
- package/dist/effects/utils.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -51
- package/dist/index.js.map +1 -1
- package/dist/utils/env-manager.d.ts +66 -2
- package/dist/utils/env-manager.d.ts.map +1 -1
- package/dist/utils/env-manager.js +355 -65
- package/dist/utils/env-manager.js.map +1 -1
- package/dist/utils/platform-detector.js +15 -19
- package/dist/utils/platform-detector.js.map +1 -1
- package/dist/utils/prompts.js +21 -34
- package/dist/utils/prompts.js.map +1 -1
- package/package.json +10 -5
|
@@ -1,63 +1,353 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const fs_1 = require("fs");
|
|
5
|
-
const path_1 = require("path");
|
|
6
|
-
class EnvManager {
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, accessSync, constants, } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
export class EnvManager {
|
|
7
4
|
constructor(projectRoot = process.cwd()) {
|
|
8
5
|
this.projectRoot = projectRoot;
|
|
9
6
|
}
|
|
10
7
|
/**
|
|
11
|
-
*
|
|
8
|
+
* Scan for all .env files with detailed analysis
|
|
12
9
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
scanEnvFiles() {
|
|
11
|
+
// Files to scan (excluding test/example files)
|
|
12
|
+
const candidateFiles = [
|
|
13
|
+
".env.local", // Highest priority - local development secrets
|
|
14
|
+
".env", // Standard env file
|
|
15
|
+
".env.development",
|
|
16
|
+
".env.dev",
|
|
17
|
+
".env.production",
|
|
18
|
+
".env.prod",
|
|
19
|
+
];
|
|
20
|
+
const envFiles = [];
|
|
21
|
+
for (const filename of candidateFiles) {
|
|
22
|
+
const filepath = join(this.projectRoot, filename);
|
|
23
|
+
const exists = existsSync(filepath);
|
|
24
|
+
let writable = false;
|
|
25
|
+
let hasMcpIdentity = false;
|
|
26
|
+
let mcpVariables = {};
|
|
27
|
+
if (exists) {
|
|
28
|
+
// Check write permissions
|
|
29
|
+
try {
|
|
30
|
+
accessSync(filepath, constants.W_OK);
|
|
31
|
+
writable = true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
writable = false;
|
|
35
|
+
}
|
|
36
|
+
// Parse for MCP-I variables
|
|
37
|
+
mcpVariables = this.parseEnvFile(filepath);
|
|
38
|
+
hasMcpIdentity = Object.keys(mcpVariables).length > 0;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// Check if we can create the file (directory write permission)
|
|
42
|
+
try {
|
|
43
|
+
accessSync(this.projectRoot, constants.W_OK);
|
|
44
|
+
writable = true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
writable = false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
envFiles.push({
|
|
51
|
+
path: filepath,
|
|
52
|
+
filename,
|
|
53
|
+
exists,
|
|
54
|
+
writable,
|
|
55
|
+
hasMcpIdentity,
|
|
56
|
+
mcpVariables,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return envFiles;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Determine the best target file using precedence rules
|
|
63
|
+
*/
|
|
64
|
+
selectTargetEnvFile(envFiles) {
|
|
65
|
+
const warnings = [];
|
|
66
|
+
// Rule 1: Prefer .env.local if it exists and is writable
|
|
67
|
+
const envLocal = envFiles.find((f) => f.filename === ".env.local");
|
|
68
|
+
if (envLocal?.exists && envLocal.writable) {
|
|
69
|
+
return { target: envLocal, warnings };
|
|
70
|
+
}
|
|
71
|
+
// Rule 2: Prefer .env if it exists and is writable
|
|
72
|
+
const envDefault = envFiles.find((f) => f.filename === ".env");
|
|
73
|
+
if (envDefault?.exists && envDefault.writable) {
|
|
74
|
+
return { target: envDefault, warnings };
|
|
75
|
+
}
|
|
76
|
+
// Rule 3: Create .env.local if possible (safer than .env)
|
|
77
|
+
if (envLocal?.writable && !envLocal.exists) {
|
|
78
|
+
return { target: envLocal, warnings };
|
|
79
|
+
}
|
|
80
|
+
// Rule 4: Create .env if .env.local isn't writable
|
|
81
|
+
if (envDefault?.writable && !envDefault.exists) {
|
|
82
|
+
warnings.push("Unable to create .env.local, falling back to .env");
|
|
83
|
+
return { target: envDefault, warnings };
|
|
84
|
+
}
|
|
85
|
+
// Check for permission issues
|
|
86
|
+
const writableFiles = envFiles.filter((f) => f.writable);
|
|
87
|
+
if (writableFiles.length === 0) {
|
|
88
|
+
warnings.push("No writable .env files found. Check file permissions.");
|
|
89
|
+
return { target: null, warnings };
|
|
90
|
+
}
|
|
91
|
+
// Fallback to first writable file
|
|
92
|
+
const fallback = writableFiles[0];
|
|
93
|
+
warnings.push(`Using ${fallback.filename} as fallback target`);
|
|
94
|
+
return { target: fallback, warnings };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check for conflicts across multiple .env files
|
|
98
|
+
*/
|
|
99
|
+
detectConflicts(envFiles, newVariables) {
|
|
100
|
+
const conflicts = [];
|
|
101
|
+
for (const envFile of envFiles) {
|
|
102
|
+
if (!envFile.exists || !envFile.hasMcpIdentity)
|
|
103
|
+
continue;
|
|
104
|
+
for (const [key, newValue] of Object.entries(newVariables)) {
|
|
105
|
+
const existingValue = envFile.mcpVariables[key];
|
|
106
|
+
if (existingValue && existingValue !== newValue) {
|
|
107
|
+
conflicts.push({
|
|
108
|
+
file: envFile.filename,
|
|
109
|
+
variable: key,
|
|
110
|
+
value: existingValue,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return conflicts;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Smart insertion/update of MCP-I variables
|
|
119
|
+
*/
|
|
120
|
+
async smartInsertMcpVariables(variables, options = {}) {
|
|
121
|
+
const envFiles = this.scanEnvFiles();
|
|
122
|
+
const { target, warnings } = this.selectTargetEnvFile(envFiles);
|
|
123
|
+
if (!target) {
|
|
124
|
+
return {
|
|
125
|
+
success: false,
|
|
126
|
+
targetFile: "",
|
|
127
|
+
operation: "created",
|
|
128
|
+
warnings: [...warnings, "No suitable target file found"],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Detect conflicts
|
|
132
|
+
const conflicts = this.detectConflicts(envFiles, variables);
|
|
133
|
+
if (conflicts.length > 0 && !options.force) {
|
|
134
|
+
warnings.push(`Found conflicting values in other .env files. Using ${target.filename} as authoritative.`);
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
let operation;
|
|
138
|
+
if (!target.exists) {
|
|
139
|
+
await this.createEnvFile(target.path, variables);
|
|
140
|
+
operation = "created";
|
|
141
|
+
}
|
|
142
|
+
else if (target.hasMcpIdentity) {
|
|
143
|
+
await this.updateExistingEnvFile(target.path, variables);
|
|
144
|
+
operation = "replaced";
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
await this.appendToEnvFile(target.path, variables);
|
|
148
|
+
operation = "updated";
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
success: true,
|
|
152
|
+
targetFile: target.filename,
|
|
153
|
+
operation,
|
|
154
|
+
warnings,
|
|
155
|
+
conflicts: conflicts.length > 0 ? conflicts : undefined,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
return {
|
|
160
|
+
success: false,
|
|
161
|
+
targetFile: target.filename,
|
|
162
|
+
operation: "created",
|
|
163
|
+
warnings: [...warnings, `Failed to write file: ${error.message}`],
|
|
164
|
+
};
|
|
18
165
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Parse .env file and extract MCP-I variables
|
|
169
|
+
*/
|
|
170
|
+
parseEnvFile(filepath) {
|
|
171
|
+
if (!existsSync(filepath)) {
|
|
172
|
+
return {};
|
|
173
|
+
}
|
|
174
|
+
const content = readFileSync(filepath, "utf-8");
|
|
175
|
+
const vars = {};
|
|
176
|
+
// Parse each line
|
|
177
|
+
content.split("\n").forEach((line) => {
|
|
178
|
+
// Skip comments and empty lines
|
|
179
|
+
const trimmed = line.trim();
|
|
180
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
181
|
+
return;
|
|
182
|
+
// Match KEY=VALUE format (with optional quotes)
|
|
183
|
+
const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/);
|
|
184
|
+
if (!match)
|
|
185
|
+
return;
|
|
186
|
+
const [, key, value] = match;
|
|
187
|
+
// Only extract MCP-I variables
|
|
188
|
+
if (key.startsWith("MCP_IDENTITY_")) {
|
|
189
|
+
// Remove surrounding quotes if present
|
|
190
|
+
const cleanValue = value.replace(/^["']|["']$/g, "");
|
|
191
|
+
vars[key] = cleanValue;
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
return vars;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Create a new .env file
|
|
198
|
+
*/
|
|
199
|
+
async createEnvFile(filepath, variables) {
|
|
200
|
+
let content = "# MCP-I Identity Configuration\n";
|
|
22
201
|
content += `# Generated by kya-os CLI on ${new Date().toISOString()}\n`;
|
|
202
|
+
content += "# IMPORTANT: Do not commit this file to version control!\n\n";
|
|
203
|
+
Object.entries(variables).forEach(([key, value]) => {
|
|
204
|
+
// Escape quotes in values
|
|
205
|
+
const escapedValue = value.replace(/"/g, '\\"');
|
|
206
|
+
content += `${key}="${escapedValue}"\n`;
|
|
207
|
+
});
|
|
208
|
+
writeFileSync(filepath, content, "utf-8");
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Update existing .env file by replacing MCP-I variables
|
|
212
|
+
*/
|
|
213
|
+
async updateExistingEnvFile(filepath, variables) {
|
|
214
|
+
const content = readFileSync(filepath, "utf-8");
|
|
215
|
+
const lines = content.split("\n");
|
|
216
|
+
const updatedLines = [];
|
|
217
|
+
const processedKeys = new Set();
|
|
218
|
+
// Process existing lines
|
|
219
|
+
for (const line of lines) {
|
|
220
|
+
const trimmed = line.trim();
|
|
221
|
+
// Check if this is an MCP-I variable line
|
|
222
|
+
const match = trimmed.match(/^(MCP_IDENTITY_[A-Z0-9_]*)\s*=/);
|
|
223
|
+
if (match) {
|
|
224
|
+
const key = match[1];
|
|
225
|
+
if (key in variables) {
|
|
226
|
+
// Replace with new value
|
|
227
|
+
const escapedValue = variables[key].replace(/"/g, '\\"');
|
|
228
|
+
updatedLines.push(`${key}="${escapedValue}"`);
|
|
229
|
+
processedKeys.add(key);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// Keep existing line for unknown MCP-I variables
|
|
233
|
+
updatedLines.push(line);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
// Keep non-MCP-I lines as-is
|
|
238
|
+
updatedLines.push(line);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Add any new MCP-I variables that weren't in the file
|
|
242
|
+
const newKeys = Object.keys(variables).filter((key) => !processedKeys.has(key));
|
|
243
|
+
if (newKeys.length > 0) {
|
|
244
|
+
updatedLines.push(""); // Add blank line
|
|
245
|
+
updatedLines.push("# MCP-I Identity Configuration (updated)");
|
|
246
|
+
for (const key of newKeys) {
|
|
247
|
+
const escapedValue = variables[key].replace(/"/g, '\\"');
|
|
248
|
+
updatedLines.push(`${key}="${escapedValue}"`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
writeFileSync(filepath, updatedLines.join("\n"), "utf-8");
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Append MCP-I variables to existing .env file
|
|
255
|
+
*/
|
|
256
|
+
async appendToEnvFile(filepath, variables) {
|
|
257
|
+
let content = readFileSync(filepath, "utf-8");
|
|
258
|
+
// Ensure file ends with newline
|
|
259
|
+
if (content && !content.endsWith("\n")) {
|
|
260
|
+
content += "\n";
|
|
261
|
+
}
|
|
262
|
+
// Add MCP-I section
|
|
263
|
+
content += "\n# MCP-I Identity Configuration (auto-generated)\n";
|
|
264
|
+
content += `# Added by kya-os CLI on ${new Date().toISOString()}\n`;
|
|
265
|
+
Object.entries(variables).forEach(([key, value]) => {
|
|
266
|
+
const escapedValue = value.replace(/"/g, '\\"');
|
|
267
|
+
content += `${key}="${escapedValue}"\n`;
|
|
268
|
+
});
|
|
269
|
+
writeFileSync(filepath, content, "utf-8");
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Find existing .env files in the project
|
|
273
|
+
*/
|
|
274
|
+
findExistingEnvFiles() {
|
|
275
|
+
const possibleFiles = [
|
|
276
|
+
".env",
|
|
277
|
+
".env.local",
|
|
278
|
+
".env.development",
|
|
279
|
+
".env.dev",
|
|
280
|
+
];
|
|
281
|
+
return possibleFiles.filter((file) => existsSync(join(this.projectRoot, file)));
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Update or create environment file, merging with existing content
|
|
285
|
+
*/
|
|
286
|
+
async updateEnvFile(filename, variables, options = {}) {
|
|
287
|
+
const filepath = join(this.projectRoot, filename);
|
|
288
|
+
let content = "";
|
|
289
|
+
let hasExistingContent = false;
|
|
290
|
+
// Read existing content if file exists
|
|
291
|
+
if (existsSync(filepath)) {
|
|
292
|
+
const existingContent = readFileSync(filepath, "utf-8");
|
|
293
|
+
hasExistingContent = true;
|
|
294
|
+
// Parse existing content, removing old MCP-I variables
|
|
295
|
+
const lines = existingContent.split("\n");
|
|
296
|
+
const filteredLines = lines.filter((line) => {
|
|
297
|
+
const trimmed = line.trim();
|
|
298
|
+
// Keep non-MCP_IDENTITY lines and comments
|
|
299
|
+
return !trimmed.startsWith("MCP_IDENTITY_") || trimmed.startsWith("#");
|
|
300
|
+
});
|
|
301
|
+
content = filteredLines.join("\n");
|
|
302
|
+
// Ensure there's a newline at the end if content exists
|
|
303
|
+
if (content.trim() && !content.endsWith("\n")) {
|
|
304
|
+
content += "\n";
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// Add MCP-I section
|
|
308
|
+
if (hasExistingContent) {
|
|
309
|
+
content += "\n# MCP-I Identity Configuration (updated by kya-os CLI)\n";
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
content += "# MCP-I Identity Configuration\n";
|
|
313
|
+
content += `# Generated by kya-os CLI on ${new Date().toISOString()}\n`;
|
|
314
|
+
}
|
|
23
315
|
if (options.example) {
|
|
24
|
-
content +=
|
|
25
|
-
content +=
|
|
26
|
-
// Use
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
content += 'MCP_IDENTITY_AGENT_ID="your-agent-id-here"\n';
|
|
31
|
-
content += 'MCP_IDENTITY_AGENT_SLUG="your-agent-slug-here"\n';
|
|
316
|
+
content += "# Copy these values to your actual .env file\n";
|
|
317
|
+
content += "# DO NOT commit this file with real values\n\n";
|
|
318
|
+
// Use actual values for example file (user specifically asked for this)
|
|
319
|
+
Object.entries(variables).forEach(([key, value]) => {
|
|
320
|
+
content += `${key}="${value}"\n`;
|
|
321
|
+
});
|
|
32
322
|
}
|
|
33
323
|
else {
|
|
34
|
-
content +=
|
|
324
|
+
content += "# IMPORTANT: Do not commit this file to version control!\n\n";
|
|
35
325
|
// Use real values
|
|
36
326
|
Object.entries(variables).forEach(([key, value]) => {
|
|
37
327
|
content += `${key}="${value}"\n`;
|
|
38
328
|
});
|
|
39
329
|
}
|
|
40
330
|
// Write file
|
|
41
|
-
|
|
331
|
+
writeFileSync(filepath, content, "utf-8");
|
|
42
332
|
}
|
|
43
333
|
/**
|
|
44
334
|
* Read environment variables from file
|
|
45
335
|
*/
|
|
46
336
|
readEnvFile(filename) {
|
|
47
|
-
const filepath =
|
|
48
|
-
if (!
|
|
337
|
+
const filepath = join(this.projectRoot, filename);
|
|
338
|
+
if (!existsSync(filepath)) {
|
|
49
339
|
return {};
|
|
50
340
|
}
|
|
51
|
-
const content =
|
|
341
|
+
const content = readFileSync(filepath, "utf-8");
|
|
52
342
|
const vars = {};
|
|
53
343
|
// Parse env file
|
|
54
|
-
content.split(
|
|
344
|
+
content.split("\n").forEach((line) => {
|
|
55
345
|
// Skip comments and empty lines
|
|
56
|
-
if (line.startsWith(
|
|
346
|
+
if (line.startsWith("#") || !line.trim())
|
|
57
347
|
return;
|
|
58
|
-
const [key, ...valueParts] = line.split(
|
|
59
|
-
const value = valueParts.join(
|
|
60
|
-
if (key && value && key.startsWith(
|
|
348
|
+
const [key, ...valueParts] = line.split("=");
|
|
349
|
+
const value = valueParts.join("=").replace(/^["']|["']$/g, "");
|
|
350
|
+
if (key && value && key.startsWith("MCP_IDENTITY_")) {
|
|
61
351
|
vars[key] = value;
|
|
62
352
|
}
|
|
63
353
|
});
|
|
@@ -67,21 +357,22 @@ class EnvManager {
|
|
|
67
357
|
* Check if .gitignore includes env files
|
|
68
358
|
*/
|
|
69
359
|
checkGitignore(envFiles) {
|
|
70
|
-
const gitignorePath =
|
|
360
|
+
const gitignorePath = join(this.projectRoot, ".gitignore");
|
|
71
361
|
const missing = [];
|
|
72
362
|
const ignored = [];
|
|
73
|
-
if (!
|
|
363
|
+
if (!existsSync(gitignorePath)) {
|
|
74
364
|
return { missing: envFiles, ignored: [] };
|
|
75
365
|
}
|
|
76
|
-
const gitignoreContent =
|
|
77
|
-
const patterns = gitignoreContent
|
|
78
|
-
.
|
|
79
|
-
|
|
80
|
-
|
|
366
|
+
const gitignoreContent = readFileSync(gitignorePath, "utf-8");
|
|
367
|
+
const patterns = gitignoreContent
|
|
368
|
+
.split("\n")
|
|
369
|
+
.filter((line) => line.trim() && !line.startsWith("#"));
|
|
370
|
+
envFiles.forEach((file) => {
|
|
371
|
+
const isIgnored = patterns.some((pattern) => {
|
|
81
372
|
// Simple pattern matching (could be enhanced)
|
|
82
|
-
return pattern === file ||
|
|
373
|
+
return (pattern === file ||
|
|
83
374
|
pattern === `/${file}` ||
|
|
84
|
-
pattern.endsWith(
|
|
375
|
+
(pattern.endsWith("*") && file.startsWith(pattern.slice(0, -1))));
|
|
85
376
|
});
|
|
86
377
|
if (isIgnored) {
|
|
87
378
|
ignored.push(file);
|
|
@@ -96,29 +387,29 @@ class EnvManager {
|
|
|
96
387
|
* Add files to .gitignore
|
|
97
388
|
*/
|
|
98
389
|
addToGitignore(files) {
|
|
99
|
-
const gitignorePath =
|
|
390
|
+
const gitignorePath = join(this.projectRoot, ".gitignore");
|
|
100
391
|
// Read existing content or create new
|
|
101
|
-
let content =
|
|
102
|
-
?
|
|
103
|
-
:
|
|
392
|
+
let content = existsSync(gitignorePath)
|
|
393
|
+
? readFileSync(gitignorePath, "utf-8")
|
|
394
|
+
: "";
|
|
104
395
|
// Add newline if file doesn't end with one
|
|
105
|
-
if (content && !content.endsWith(
|
|
106
|
-
content +=
|
|
396
|
+
if (content && !content.endsWith("\n")) {
|
|
397
|
+
content += "\n";
|
|
107
398
|
}
|
|
108
399
|
// Add section for MCP-I
|
|
109
|
-
content +=
|
|
110
|
-
files.forEach(file => {
|
|
400
|
+
content += "\n# MCP-I Identity Files\n";
|
|
401
|
+
files.forEach((file) => {
|
|
111
402
|
content += `${file}\n`;
|
|
112
403
|
});
|
|
113
|
-
|
|
404
|
+
writeFileSync(gitignorePath, content, "utf-8");
|
|
114
405
|
}
|
|
115
406
|
/**
|
|
116
407
|
* Get environment variables from process.env
|
|
117
408
|
*/
|
|
118
409
|
getFromProcess() {
|
|
119
410
|
const vars = {};
|
|
120
|
-
Object.keys(process.env).forEach(key => {
|
|
121
|
-
if (key.startsWith(
|
|
411
|
+
Object.keys(process.env).forEach((key) => {
|
|
412
|
+
if (key.startsWith("MCP_IDENTITY_")) {
|
|
122
413
|
vars[key] = process.env[key];
|
|
123
414
|
}
|
|
124
415
|
});
|
|
@@ -128,13 +419,13 @@ class EnvManager {
|
|
|
128
419
|
* Format environment variables for display
|
|
129
420
|
*/
|
|
130
421
|
formatForDisplay(vars, hideSecrets = true) {
|
|
131
|
-
let output =
|
|
422
|
+
let output = "";
|
|
132
423
|
Object.entries(vars).forEach(([key, value]) => {
|
|
133
424
|
if (!value)
|
|
134
425
|
return;
|
|
135
|
-
if (hideSecrets && key.includes(
|
|
426
|
+
if (hideSecrets && key.includes("PRIVATE_KEY")) {
|
|
136
427
|
// Show only first/last few characters of private key
|
|
137
|
-
const masked = value.substring(0, 8) +
|
|
428
|
+
const masked = value.substring(0, 8) + "..." + value.substring(value.length - 8);
|
|
138
429
|
output += `${key}="${masked}"\n`;
|
|
139
430
|
}
|
|
140
431
|
else {
|
|
@@ -147,7 +438,7 @@ class EnvManager {
|
|
|
147
438
|
* Format for clipboard (no masking)
|
|
148
439
|
*/
|
|
149
440
|
formatForClipboard(vars) {
|
|
150
|
-
let output =
|
|
441
|
+
let output = "";
|
|
151
442
|
Object.entries(vars).forEach(([key, value]) => {
|
|
152
443
|
if (value) {
|
|
153
444
|
output += `${key}="${value}"\n`;
|
|
@@ -160,18 +451,17 @@ class EnvManager {
|
|
|
160
451
|
*/
|
|
161
452
|
validateVariables(vars) {
|
|
162
453
|
const required = [
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
454
|
+
"MCP_IDENTITY_DID",
|
|
455
|
+
"MCP_IDENTITY_PUBLIC_KEY",
|
|
456
|
+
"MCP_IDENTITY_PRIVATE_KEY",
|
|
457
|
+
"MCP_IDENTITY_AGENT_ID",
|
|
458
|
+
"MCP_IDENTITY_AGENT_SLUG",
|
|
168
459
|
];
|
|
169
|
-
const missing = required.filter(key => !vars[key]);
|
|
460
|
+
const missing = required.filter((key) => !vars[key]);
|
|
170
461
|
return {
|
|
171
462
|
valid: missing.length === 0,
|
|
172
|
-
missing
|
|
463
|
+
missing,
|
|
173
464
|
};
|
|
174
465
|
}
|
|
175
466
|
}
|
|
176
|
-
exports.EnvManager = EnvManager;
|
|
177
467
|
//# sourceMappingURL=env-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-manager.js","sourceRoot":"","sources":["../../src/utils/env-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"env-manager.js","sourceRoot":"","sources":["../../src/utils/env-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
exports.getPlatformSpecificConfig = getPlatformSpecificConfig;
|
|
5
|
-
const fs_1 = require("fs");
|
|
6
|
-
const path_1 = require("path");
|
|
7
|
-
function detectPlatform(projectRoot = process.cwd()) {
|
|
1
|
+
import { existsSync, readFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
export function detectPlatform(projectRoot = process.cwd()) {
|
|
8
4
|
const info = {
|
|
9
5
|
platform: 'unknown',
|
|
10
6
|
hasVercel: false,
|
|
@@ -12,10 +8,10 @@ function detectPlatform(projectRoot = process.cwd()) {
|
|
|
12
8
|
packageManager: 'npm'
|
|
13
9
|
};
|
|
14
10
|
// Check package.json
|
|
15
|
-
const packageJsonPath =
|
|
16
|
-
if (
|
|
11
|
+
const packageJsonPath = join(projectRoot, 'package.json');
|
|
12
|
+
if (existsSync(packageJsonPath)) {
|
|
17
13
|
try {
|
|
18
|
-
const packageJson = JSON.parse(
|
|
14
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
19
15
|
// Detect Next.js
|
|
20
16
|
if (packageJson.dependencies?.next || packageJson.devDependencies?.next) {
|
|
21
17
|
info.platform = 'nextjs';
|
|
@@ -39,38 +35,38 @@ function detectPlatform(projectRoot = process.cwd()) {
|
|
|
39
35
|
}
|
|
40
36
|
}
|
|
41
37
|
// Check for Vercel
|
|
42
|
-
if (
|
|
38
|
+
if (existsSync(join(projectRoot, 'vercel.json')) || existsSync(join(projectRoot, '.vercel'))) {
|
|
43
39
|
info.hasVercel = true;
|
|
44
40
|
if (info.platform === 'nextjs') {
|
|
45
41
|
info.platform = 'vercel'; // Next.js on Vercel
|
|
46
42
|
}
|
|
47
43
|
}
|
|
48
44
|
// Check for Docker
|
|
49
|
-
if (
|
|
45
|
+
if (existsSync(join(projectRoot, 'Dockerfile')) || existsSync(join(projectRoot, 'docker-compose.yml'))) {
|
|
50
46
|
info.hasDocker = true;
|
|
51
47
|
if (info.platform === 'unknown')
|
|
52
48
|
info.platform = 'docker';
|
|
53
49
|
}
|
|
54
50
|
// Check for Lambda
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
if (existsSync(join(projectRoot, 'serverless.yml')) ||
|
|
52
|
+
existsSync(join(projectRoot, 'template.yaml')) ||
|
|
53
|
+
existsSync(join(projectRoot, 'sam-template.yaml'))) {
|
|
58
54
|
info.platform = 'lambda';
|
|
59
55
|
}
|
|
60
56
|
// Detect package manager
|
|
61
|
-
if (
|
|
57
|
+
if (existsSync(join(projectRoot, 'pnpm-lock.yaml'))) {
|
|
62
58
|
info.packageManager = 'pnpm';
|
|
63
59
|
}
|
|
64
|
-
else if (
|
|
60
|
+
else if (existsSync(join(projectRoot, 'yarn.lock'))) {
|
|
65
61
|
info.packageManager = 'yarn';
|
|
66
62
|
}
|
|
67
63
|
// Default to Node.js if we found a package.json but nothing else
|
|
68
|
-
if (info.platform === 'unknown' &&
|
|
64
|
+
if (info.platform === 'unknown' && existsSync(packageJsonPath)) {
|
|
69
65
|
info.platform = 'node';
|
|
70
66
|
}
|
|
71
67
|
return info;
|
|
72
68
|
}
|
|
73
|
-
function getPlatformSpecificConfig(platform) {
|
|
69
|
+
export function getPlatformSpecificConfig(platform) {
|
|
74
70
|
const configs = {
|
|
75
71
|
nextjs: {
|
|
76
72
|
storage: 'memory',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-detector.js","sourceRoot":"","sources":["../../src/utils/platform-detector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"platform-detector.js","sourceRoot":"","sources":["../../src/utils/platform-detector.ts"],"names":[],"mappings":"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"}
|