@kya-os/cli 0.1.0-beta.8 → 1.0.0-beta
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 +24 -26
- package/dist/commands/claim.d.ts.map +1 -1
- package/dist/commands/claim.js +29 -29
- package/dist/commands/claim.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +240 -212
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rotate.d.ts.map +1 -1
- package/dist/commands/rotate.js +63 -52
- package/dist/commands/rotate.js.map +1 -1
- package/dist/components/agent-card.d.ts +14 -0
- package/dist/components/agent-card.d.ts.map +1 -0
- package/dist/components/agent-card.js +170 -0
- package/dist/components/agent-card.js.map +1 -0
- package/dist/components/agent-table.d.ts +20 -0
- package/dist/components/agent-table.d.ts.map +1 -0
- package/dist/components/agent-table.js +201 -0
- package/dist/components/agent-table.js.map +1 -0
- package/dist/components/box.d.ts +14 -0
- package/dist/components/box.d.ts.map +1 -0
- package/dist/components/box.js +222 -0
- package/dist/components/box.js.map +1 -0
- package/dist/components/index.d.ts +16 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +17 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/messages.d.ts +62 -0
- package/dist/components/messages.d.ts.map +1 -0
- package/dist/components/messages.js +146 -0
- package/dist/components/messages.js.map +1 -0
- package/dist/components/types.d.ts +51 -0
- package/dist/components/types.d.ts.map +1 -0
- package/dist/components/types.js +5 -0
- package/dist/components/types.js.map +1 -0
- package/dist/components/welcome.d.ts +34 -0
- package/dist/components/welcome.d.ts.map +1 -0
- package/dist/components/welcome.js +115 -0
- package/dist/components/welcome.js.map +1 -0
- package/dist/effects/cli-integration.js +3 -3
- package/dist/effects/cli-integration.js.map +1 -1
- package/dist/effects/index.d.ts +9 -12
- package/dist/effects/index.d.ts.map +1 -1
- package/dist/effects/index.js +69 -34
- package/dist/effects/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -19
- 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 +381 -56
- package/dist/utils/env-manager.js.map +1 -1
- package/dist/utils/screen-manager.d.ts +10 -0
- package/dist/utils/screen-manager.d.ts.map +1 -0
- package/dist/utils/screen-manager.js +50 -0
- package/dist/utils/screen-manager.js.map +1 -0
- package/dist/utils/validation.d.ts +92 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +102 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +24 -9
- package/dist/commands/cli-experience-demo-simple.d.ts +0 -14
- package/dist/commands/cli-experience-demo-simple.d.ts.map +0 -1
- package/dist/commands/cli-experience-demo-simple.js +0 -119
- package/dist/commands/cli-experience-demo-simple.js.map +0 -1
- package/dist/commands/cli-experience-demo.d.ts +0 -14
- package/dist/commands/cli-experience-demo.d.ts.map +0 -1
- package/dist/commands/cli-experience-demo.js +0 -172
- package/dist/commands/cli-experience-demo.js.map +0 -1
- package/dist/commands/effects-demo.d.ts +0 -10
- package/dist/commands/effects-demo.d.ts.map +0 -1
- package/dist/commands/effects-demo.js +0 -292
- package/dist/commands/effects-demo.js.map +0 -1
- package/dist/dev.d.ts +0 -7
- package/dist/dev.d.ts.map +0 -1
- package/dist/dev.js +0 -9
- package/dist/dev.js.map +0 -1
- package/dist/effects/__tests__/effects.test.d.ts +0 -5
- package/dist/effects/__tests__/effects.test.d.ts.map +0 -1
- package/dist/effects/__tests__/effects.test.js +0 -206
- package/dist/effects/__tests__/effects.test.js.map +0 -1
- package/dist/effects/implementations/binary-path.d.ts +0 -88
- package/dist/effects/implementations/binary-path.d.ts.map +0 -1
- package/dist/effects/implementations/binary-path.js +0 -296
- package/dist/effects/implementations/binary-path.js.map +0 -1
- package/dist/effects/implementations/test.d.ts +0 -113
- package/dist/effects/implementations/test.d.ts.map +0 -1
- package/dist/effects/implementations/test.js +0 -552
- package/dist/effects/implementations/test.js.map +0 -1
- package/dist/effects/template/effect-template.d.ts +0 -97
- package/dist/effects/template/effect-template.d.ts.map +0 -1
- package/dist/effects/template/effect-template.js +0 -208
- package/dist/effects/template/effect-template.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -1,41 +1,365 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync } from
|
|
2
|
-
import { join } from
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, accessSync, constants, unlinkSync, } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
3
|
export class EnvManager {
|
|
4
4
|
constructor(projectRoot = process.cwd()) {
|
|
5
5
|
this.projectRoot = projectRoot;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Scan for all .env files with detailed analysis
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
+
// Create backup before updating
|
|
144
|
+
const backupPath = `${target.path}.bak`;
|
|
145
|
+
writeFileSync(backupPath, readFileSync(target.path, "utf-8"), "utf-8");
|
|
146
|
+
await this.updateExistingEnvFile(target.path, variables);
|
|
147
|
+
operation = "replaced";
|
|
148
|
+
// Clean up backup after successful update
|
|
149
|
+
if (existsSync(backupPath)) {
|
|
150
|
+
unlinkSync(backupPath);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// Create backup before appending
|
|
155
|
+
const backupPath = `${target.path}.bak`;
|
|
156
|
+
writeFileSync(backupPath, readFileSync(target.path, "utf-8"), "utf-8");
|
|
157
|
+
await this.appendToEnvFile(target.path, variables);
|
|
158
|
+
operation = "updated";
|
|
159
|
+
// Clean up backup after successful update
|
|
160
|
+
if (existsSync(backupPath)) {
|
|
161
|
+
unlinkSync(backupPath);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
success: true,
|
|
166
|
+
targetFile: target.filename,
|
|
167
|
+
operation,
|
|
168
|
+
warnings,
|
|
169
|
+
conflicts: conflicts.length > 0 ? conflicts : undefined,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
// Restore from backup if available
|
|
174
|
+
const backupPath = `${target.path}.bak`;
|
|
175
|
+
if (existsSync(backupPath)) {
|
|
176
|
+
try {
|
|
177
|
+
writeFileSync(target.path, readFileSync(backupPath, "utf-8"), "utf-8");
|
|
178
|
+
unlinkSync(backupPath);
|
|
179
|
+
warnings.push("Restored from backup after error");
|
|
180
|
+
}
|
|
181
|
+
catch (restoreError) {
|
|
182
|
+
warnings.push("Failed to restore from backup");
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
success: false,
|
|
187
|
+
targetFile: target.filename,
|
|
188
|
+
operation: "created",
|
|
189
|
+
warnings: [...warnings, `Failed to write file: ${error.message}`],
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Parse .env file and extract MCP-I variables
|
|
195
|
+
*/
|
|
196
|
+
parseEnvFile(filepath) {
|
|
197
|
+
if (!existsSync(filepath)) {
|
|
198
|
+
return {};
|
|
199
|
+
}
|
|
200
|
+
const content = readFileSync(filepath, "utf-8");
|
|
201
|
+
const vars = {};
|
|
202
|
+
// Parse each line
|
|
203
|
+
content.split("\n").forEach((line) => {
|
|
204
|
+
// Skip comments and empty lines
|
|
205
|
+
const trimmed = line.trim();
|
|
206
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
207
|
+
return;
|
|
208
|
+
// Match KEY=VALUE format (with optional quotes)
|
|
209
|
+
const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/);
|
|
210
|
+
if (!match)
|
|
211
|
+
return;
|
|
212
|
+
const [, key, value] = match;
|
|
213
|
+
// Only extract MCP-I variables
|
|
214
|
+
if (key.startsWith("MCP_IDENTITY_")) {
|
|
215
|
+
// Remove surrounding quotes if present
|
|
216
|
+
const cleanValue = value.replace(/^["']|["']$/g, "");
|
|
217
|
+
vars[key] = cleanValue;
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
return vars;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Create a new .env file
|
|
224
|
+
*/
|
|
225
|
+
async createEnvFile(filepath, variables) {
|
|
226
|
+
// Create backup if file already exists (shouldn't happen, but safety check)
|
|
227
|
+
if (existsSync(filepath)) {
|
|
228
|
+
const backupPath = `${filepath}.bak`;
|
|
229
|
+
writeFileSync(backupPath, readFileSync(filepath, "utf-8"), "utf-8");
|
|
15
230
|
}
|
|
16
|
-
let content =
|
|
17
|
-
// Add header
|
|
18
|
-
content += '# MCP-I Identity Configuration\n';
|
|
231
|
+
let content = "# MCP-I Identity Configuration\n";
|
|
19
232
|
content += `# Generated by kya-os CLI on ${new Date().toISOString()}\n`;
|
|
233
|
+
content += "# IMPORTANT: Do not commit this file to version control!\n\n";
|
|
234
|
+
Object.entries(variables).forEach(([key, value]) => {
|
|
235
|
+
// Escape quotes in values
|
|
236
|
+
const escapedValue = value.replace(/"/g, '\\"');
|
|
237
|
+
content += `${key}="${escapedValue}"\n`;
|
|
238
|
+
});
|
|
239
|
+
writeFileSync(filepath, content, "utf-8");
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Update existing .env file by replacing MCP-I variables
|
|
243
|
+
*/
|
|
244
|
+
async updateExistingEnvFile(filepath, variables) {
|
|
245
|
+
const content = readFileSync(filepath, "utf-8");
|
|
246
|
+
const lines = content.split("\n");
|
|
247
|
+
const updatedLines = [];
|
|
248
|
+
const processedKeys = new Set();
|
|
249
|
+
// Process existing lines
|
|
250
|
+
for (const line of lines) {
|
|
251
|
+
const trimmed = line.trim();
|
|
252
|
+
// Check if this is an MCP-I variable line
|
|
253
|
+
const match = trimmed.match(/^(MCP_IDENTITY_[A-Z0-9_]*)\s*=/);
|
|
254
|
+
if (match) {
|
|
255
|
+
const key = match[1];
|
|
256
|
+
if (key in variables) {
|
|
257
|
+
// Replace with new value
|
|
258
|
+
const escapedValue = variables[key].replace(/"/g, '\\"');
|
|
259
|
+
updatedLines.push(`${key}="${escapedValue}"`);
|
|
260
|
+
processedKeys.add(key);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
// Keep existing line for unknown MCP-I variables
|
|
264
|
+
updatedLines.push(line);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
// Keep non-MCP-I lines as-is
|
|
269
|
+
updatedLines.push(line);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Add any new MCP-I variables that weren't in the file
|
|
273
|
+
const newKeys = Object.keys(variables).filter((key) => !processedKeys.has(key));
|
|
274
|
+
if (newKeys.length > 0) {
|
|
275
|
+
updatedLines.push(""); // Add blank line
|
|
276
|
+
updatedLines.push("# MCP-I Identity Configuration (updated)");
|
|
277
|
+
for (const key of newKeys) {
|
|
278
|
+
const escapedValue = variables[key].replace(/"/g, '\\"');
|
|
279
|
+
updatedLines.push(`${key}="${escapedValue}"`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
writeFileSync(filepath, updatedLines.join("\n"), "utf-8");
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Append MCP-I variables to existing .env file
|
|
286
|
+
*/
|
|
287
|
+
async appendToEnvFile(filepath, variables) {
|
|
288
|
+
let content = readFileSync(filepath, "utf-8");
|
|
289
|
+
// Ensure file ends with newline
|
|
290
|
+
if (content && !content.endsWith("\n")) {
|
|
291
|
+
content += "\n";
|
|
292
|
+
}
|
|
293
|
+
// Add MCP-I section
|
|
294
|
+
content += "\n# MCP-I Identity Configuration (auto-generated)\n";
|
|
295
|
+
content += `# Added by kya-os CLI on ${new Date().toISOString()}\n`;
|
|
296
|
+
Object.entries(variables).forEach(([key, value]) => {
|
|
297
|
+
const escapedValue = value.replace(/"/g, '\\"');
|
|
298
|
+
content += `${key}="${escapedValue}"\n`;
|
|
299
|
+
});
|
|
300
|
+
writeFileSync(filepath, content, "utf-8");
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Find existing .env files in the project
|
|
304
|
+
*/
|
|
305
|
+
findExistingEnvFiles() {
|
|
306
|
+
const possibleFiles = [
|
|
307
|
+
".env",
|
|
308
|
+
".env.local",
|
|
309
|
+
".env.development",
|
|
310
|
+
".env.dev",
|
|
311
|
+
];
|
|
312
|
+
return possibleFiles.filter((file) => existsSync(join(this.projectRoot, file)));
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Update or create environment file, merging with existing content
|
|
316
|
+
*/
|
|
317
|
+
async updateEnvFile(filename, variables, options = {}) {
|
|
318
|
+
const filepath = join(this.projectRoot, filename);
|
|
319
|
+
let content = "";
|
|
320
|
+
let hasExistingContent = false;
|
|
321
|
+
// Read existing content if file exists
|
|
322
|
+
if (existsSync(filepath)) {
|
|
323
|
+
const existingContent = readFileSync(filepath, "utf-8");
|
|
324
|
+
hasExistingContent = true;
|
|
325
|
+
// Parse existing content, removing old MCP-I variables
|
|
326
|
+
const lines = existingContent.split("\n");
|
|
327
|
+
const filteredLines = lines.filter((line) => {
|
|
328
|
+
const trimmed = line.trim();
|
|
329
|
+
// Keep non-MCP_IDENTITY lines and comments
|
|
330
|
+
return !trimmed.startsWith("MCP_IDENTITY_") || trimmed.startsWith("#");
|
|
331
|
+
});
|
|
332
|
+
content = filteredLines.join("\n");
|
|
333
|
+
// Ensure there's a newline at the end if content exists
|
|
334
|
+
if (content.trim() && !content.endsWith("\n")) {
|
|
335
|
+
content += "\n";
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
// Add MCP-I section
|
|
339
|
+
if (hasExistingContent) {
|
|
340
|
+
content += "\n# MCP-I Identity Configuration (updated by kya-os CLI)\n";
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
content += "# MCP-I Identity Configuration\n";
|
|
344
|
+
content += `# Generated by kya-os CLI on ${new Date().toISOString()}\n`;
|
|
345
|
+
}
|
|
20
346
|
if (options.example) {
|
|
21
|
-
content +=
|
|
22
|
-
content +=
|
|
23
|
-
// Use
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
content += 'MCP_IDENTITY_AGENT_ID="your-agent-id-here"\n';
|
|
28
|
-
content += 'MCP_IDENTITY_AGENT_SLUG="your-agent-slug-here"\n';
|
|
347
|
+
content += "# Copy these values to your actual .env file\n";
|
|
348
|
+
content += "# DO NOT commit this file with real values\n\n";
|
|
349
|
+
// Use actual values for example file (user specifically asked for this)
|
|
350
|
+
Object.entries(variables).forEach(([key, value]) => {
|
|
351
|
+
content += `${key}="${value}"\n`;
|
|
352
|
+
});
|
|
29
353
|
}
|
|
30
354
|
else {
|
|
31
|
-
content +=
|
|
355
|
+
content += "# IMPORTANT: Do not commit this file to version control!\n\n";
|
|
32
356
|
// Use real values
|
|
33
357
|
Object.entries(variables).forEach(([key, value]) => {
|
|
34
358
|
content += `${key}="${value}"\n`;
|
|
35
359
|
});
|
|
36
360
|
}
|
|
37
361
|
// Write file
|
|
38
|
-
writeFileSync(filepath, content,
|
|
362
|
+
writeFileSync(filepath, content, "utf-8");
|
|
39
363
|
}
|
|
40
364
|
/**
|
|
41
365
|
* Read environment variables from file
|
|
@@ -45,16 +369,16 @@ export class EnvManager {
|
|
|
45
369
|
if (!existsSync(filepath)) {
|
|
46
370
|
return {};
|
|
47
371
|
}
|
|
48
|
-
const content = readFileSync(filepath,
|
|
372
|
+
const content = readFileSync(filepath, "utf-8");
|
|
49
373
|
const vars = {};
|
|
50
374
|
// Parse env file
|
|
51
|
-
content.split(
|
|
375
|
+
content.split("\n").forEach((line) => {
|
|
52
376
|
// Skip comments and empty lines
|
|
53
|
-
if (line.startsWith(
|
|
377
|
+
if (line.startsWith("#") || !line.trim())
|
|
54
378
|
return;
|
|
55
|
-
const [key, ...valueParts] = line.split(
|
|
56
|
-
const value = valueParts.join(
|
|
57
|
-
if (key && value && key.startsWith(
|
|
379
|
+
const [key, ...valueParts] = line.split("=");
|
|
380
|
+
const value = valueParts.join("=").replace(/^["']|["']$/g, "");
|
|
381
|
+
if (key && value && key.startsWith("MCP_IDENTITY_")) {
|
|
58
382
|
vars[key] = value;
|
|
59
383
|
}
|
|
60
384
|
});
|
|
@@ -64,21 +388,22 @@ export class EnvManager {
|
|
|
64
388
|
* Check if .gitignore includes env files
|
|
65
389
|
*/
|
|
66
390
|
checkGitignore(envFiles) {
|
|
67
|
-
const gitignorePath = join(this.projectRoot,
|
|
391
|
+
const gitignorePath = join(this.projectRoot, ".gitignore");
|
|
68
392
|
const missing = [];
|
|
69
393
|
const ignored = [];
|
|
70
394
|
if (!existsSync(gitignorePath)) {
|
|
71
395
|
return { missing: envFiles, ignored: [] };
|
|
72
396
|
}
|
|
73
|
-
const gitignoreContent = readFileSync(gitignorePath,
|
|
74
|
-
const patterns = gitignoreContent
|
|
75
|
-
.
|
|
76
|
-
|
|
77
|
-
|
|
397
|
+
const gitignoreContent = readFileSync(gitignorePath, "utf-8");
|
|
398
|
+
const patterns = gitignoreContent
|
|
399
|
+
.split("\n")
|
|
400
|
+
.filter((line) => line.trim() && !line.startsWith("#"));
|
|
401
|
+
envFiles.forEach((file) => {
|
|
402
|
+
const isIgnored = patterns.some((pattern) => {
|
|
78
403
|
// Simple pattern matching (could be enhanced)
|
|
79
|
-
return pattern === file ||
|
|
404
|
+
return (pattern === file ||
|
|
80
405
|
pattern === `/${file}` ||
|
|
81
|
-
pattern.endsWith(
|
|
406
|
+
(pattern.endsWith("*") && file.startsWith(pattern.slice(0, -1))));
|
|
82
407
|
});
|
|
83
408
|
if (isIgnored) {
|
|
84
409
|
ignored.push(file);
|
|
@@ -93,29 +418,29 @@ export class EnvManager {
|
|
|
93
418
|
* Add files to .gitignore
|
|
94
419
|
*/
|
|
95
420
|
addToGitignore(files) {
|
|
96
|
-
const gitignorePath = join(this.projectRoot,
|
|
421
|
+
const gitignorePath = join(this.projectRoot, ".gitignore");
|
|
97
422
|
// Read existing content or create new
|
|
98
423
|
let content = existsSync(gitignorePath)
|
|
99
|
-
? readFileSync(gitignorePath,
|
|
100
|
-
:
|
|
424
|
+
? readFileSync(gitignorePath, "utf-8")
|
|
425
|
+
: "";
|
|
101
426
|
// Add newline if file doesn't end with one
|
|
102
|
-
if (content && !content.endsWith(
|
|
103
|
-
content +=
|
|
427
|
+
if (content && !content.endsWith("\n")) {
|
|
428
|
+
content += "\n";
|
|
104
429
|
}
|
|
105
430
|
// Add section for MCP-I
|
|
106
|
-
content +=
|
|
107
|
-
files.forEach(file => {
|
|
431
|
+
content += "\n# MCP-I Identity Files\n";
|
|
432
|
+
files.forEach((file) => {
|
|
108
433
|
content += `${file}\n`;
|
|
109
434
|
});
|
|
110
|
-
writeFileSync(gitignorePath, content,
|
|
435
|
+
writeFileSync(gitignorePath, content, "utf-8");
|
|
111
436
|
}
|
|
112
437
|
/**
|
|
113
438
|
* Get environment variables from process.env
|
|
114
439
|
*/
|
|
115
440
|
getFromProcess() {
|
|
116
441
|
const vars = {};
|
|
117
|
-
Object.keys(process.env).forEach(key => {
|
|
118
|
-
if (key.startsWith(
|
|
442
|
+
Object.keys(process.env).forEach((key) => {
|
|
443
|
+
if (key.startsWith("MCP_IDENTITY_")) {
|
|
119
444
|
vars[key] = process.env[key];
|
|
120
445
|
}
|
|
121
446
|
});
|
|
@@ -125,13 +450,13 @@ export class EnvManager {
|
|
|
125
450
|
* Format environment variables for display
|
|
126
451
|
*/
|
|
127
452
|
formatForDisplay(vars, hideSecrets = true) {
|
|
128
|
-
let output =
|
|
453
|
+
let output = "";
|
|
129
454
|
Object.entries(vars).forEach(([key, value]) => {
|
|
130
455
|
if (!value)
|
|
131
456
|
return;
|
|
132
|
-
if (hideSecrets && key.includes(
|
|
457
|
+
if (hideSecrets && key.includes("PRIVATE_KEY")) {
|
|
133
458
|
// Show only first/last few characters of private key
|
|
134
|
-
const masked = value.substring(0, 8) +
|
|
459
|
+
const masked = value.substring(0, 8) + "..." + value.substring(value.length - 8);
|
|
135
460
|
output += `${key}="${masked}"\n`;
|
|
136
461
|
}
|
|
137
462
|
else {
|
|
@@ -144,7 +469,7 @@ export class EnvManager {
|
|
|
144
469
|
* Format for clipboard (no masking)
|
|
145
470
|
*/
|
|
146
471
|
formatForClipboard(vars) {
|
|
147
|
-
let output =
|
|
472
|
+
let output = "";
|
|
148
473
|
Object.entries(vars).forEach(([key, value]) => {
|
|
149
474
|
if (value) {
|
|
150
475
|
output += `${key}="${value}"\n`;
|
|
@@ -157,16 +482,16 @@ export class EnvManager {
|
|
|
157
482
|
*/
|
|
158
483
|
validateVariables(vars) {
|
|
159
484
|
const required = [
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
485
|
+
"MCP_IDENTITY_DID",
|
|
486
|
+
"MCP_IDENTITY_PUBLIC_KEY",
|
|
487
|
+
"MCP_IDENTITY_PRIVATE_KEY",
|
|
488
|
+
"MCP_IDENTITY_AGENT_ID",
|
|
489
|
+
"MCP_IDENTITY_AGENT_SLUG",
|
|
165
490
|
];
|
|
166
|
-
const missing = required.filter(key => !vars[key]);
|
|
491
|
+
const missing = required.filter((key) => !vars[key]);
|
|
167
492
|
return {
|
|
168
493
|
valid: missing.length === 0,
|
|
169
|
-
missing
|
|
494
|
+
missing,
|
|
170
495
|
};
|
|
171
496
|
}
|
|
172
497
|
}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface ScreenOptions {
|
|
2
|
+
requireInput: boolean;
|
|
3
|
+
inputKey?: string;
|
|
4
|
+
clearBefore?: boolean;
|
|
5
|
+
clearAfter?: boolean;
|
|
6
|
+
prompt?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function showScreen(content: string, options?: ScreenOptions): Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=screen-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-manager.d.ts","sourceRoot":"","sources":["../../src/utils/screen-manager.ts"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,aAAsC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import readline from "readline";
|
|
3
|
+
export async function showScreen(content, options = { requireInput: true }) {
|
|
4
|
+
const { requireInput = true, inputKey = "Enter", clearBefore = true, clearAfter = false, prompt = "Press Enter to continue...", } = options;
|
|
5
|
+
if (clearBefore) {
|
|
6
|
+
console.clear();
|
|
7
|
+
}
|
|
8
|
+
console.log(content);
|
|
9
|
+
if (requireInput) {
|
|
10
|
+
console.log("\n" + chalk.gray(prompt));
|
|
11
|
+
await waitForKey(inputKey);
|
|
12
|
+
}
|
|
13
|
+
if (clearAfter) {
|
|
14
|
+
console.clear();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
async function waitForKey(expectedKey = "Enter") {
|
|
18
|
+
return new Promise((resolve) => {
|
|
19
|
+
// Handle non-TTY environments (like CI)
|
|
20
|
+
if (!process.stdin.isTTY) {
|
|
21
|
+
// In non-TTY environments, just resolve immediately
|
|
22
|
+
resolve();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
readline.emitKeypressEvents(process.stdin);
|
|
26
|
+
process.stdin.setRawMode(true);
|
|
27
|
+
const handleKeypress = (str, key) => {
|
|
28
|
+
// Always cleanup first
|
|
29
|
+
process.stdin.setRawMode(false);
|
|
30
|
+
process.stdin.removeAllListeners("keypress");
|
|
31
|
+
process.stdin.pause();
|
|
32
|
+
// Check for the expected key
|
|
33
|
+
if (expectedKey === "Enter" && key && key.name === "return") {
|
|
34
|
+
resolve();
|
|
35
|
+
}
|
|
36
|
+
else if (expectedKey !== "Enter" && str === expectedKey) {
|
|
37
|
+
resolve();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// If wrong key, re-enable and keep waiting
|
|
41
|
+
process.stdin.setRawMode(true);
|
|
42
|
+
process.stdin.on("keypress", handleKeypress);
|
|
43
|
+
process.stdin.resume();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
process.stdin.on("keypress", handleKeypress);
|
|
47
|
+
process.stdin.resume();
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=screen-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-manager.js","sourceRoot":"","sources":["../../src/utils/screen-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAUhC,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,UAAyB,EAAE,YAAY,EAAE,IAAI,EAAE;IAE/C,MAAM,EACJ,YAAY,GAAG,IAAI,EACnB,QAAQ,GAAG,OAAO,EAClB,WAAW,GAAG,IAAI,EAClB,UAAU,GAAG,KAAK,EAClB,MAAM,GAAG,4BAA4B,GACtC,GAAG,OAAO,CAAC;IAEZ,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAErB,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,cAAsB,OAAO;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,wCAAwC;QACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,oDAAoD;YACpD,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,GAAiB,EAAE,EAAE;YACxD,uBAAuB;YACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAEtB,6BAA6B;YAC7B,IAAI,WAAW,KAAK,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5D,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,IAAI,WAAW,KAAK,OAAO,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;gBAC1D,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,2CAA2C;gBAC3C,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;gBAC7C,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
|