@kya-os/cli 0.1.0-beta.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/README.md +81 -0
- package/dist/commands/check.d.ts +6 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +150 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/claim.d.ts +2 -0
- package/dist/commands/claim.d.ts.map +1 -0
- package/dist/commands/claim.js +71 -0
- package/dist/commands/claim.js.map +1 -0
- package/dist/commands/env.d.ts +2 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +217 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +159 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/rotate.d.ts +7 -0
- package/dist/commands/rotate.d.ts.map +1 -0
- package/dist/commands/rotate.js +106 -0
- package/dist/commands/rotate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/env-manager.d.ts +53 -0
- package/dist/utils/env-manager.d.ts.map +1 -0
- package/dist/utils/env-manager.js +177 -0
- package/dist/utils/env-manager.js.map +1 -0
- package/dist/utils/platform-detector.d.ts +42 -0
- package/dist/utils/platform-detector.d.ts.map +1 -0
- package/dist/utils/platform-detector.js +137 -0
- package/dist/utils/platform-detector.js.map +1 -0
- package/dist/utils/prompts.d.ts +23 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +158 -0
- package/dist/utils/prompts.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,159 @@
|
|
|
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.init = init;
|
|
7
|
+
const mcp_i_1 = require("@kya-os/mcp-i");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const platform_detector_1 = require("../utils/platform-detector");
|
|
11
|
+
const env_manager_1 = require("../utils/env-manager");
|
|
12
|
+
const prompts_1 = require("../utils/prompts");
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
const path_1 = require("path");
|
|
15
|
+
async function init(options) {
|
|
16
|
+
try {
|
|
17
|
+
// Detect platform
|
|
18
|
+
const platformInfo = (0, platform_detector_1.detectPlatform)();
|
|
19
|
+
console.log(chalk_1.default.cyan('\n🔍 Detected environment:'));
|
|
20
|
+
console.log(` Platform: ${chalk_1.default.bold(platformInfo.platform)}`);
|
|
21
|
+
if (platformInfo.framework) {
|
|
22
|
+
console.log(` Framework: ${chalk_1.default.bold(platformInfo.framework)}`);
|
|
23
|
+
}
|
|
24
|
+
console.log(` Package Manager: ${chalk_1.default.bold(platformInfo.packageManager)}`);
|
|
25
|
+
// Check for existing configuration
|
|
26
|
+
const envManager = new env_manager_1.EnvManager();
|
|
27
|
+
const existingIdentityFile = (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), '.mcp-identity.json'));
|
|
28
|
+
const existingEnvVars = envManager.getFromProcess();
|
|
29
|
+
if ((existingIdentityFile || existingEnvVars.MCP_IDENTITY_DID) && !options.force) {
|
|
30
|
+
(0, prompts_1.showWarning)('MCP-I is already configured in this project.');
|
|
31
|
+
console.log('Use --force to reconfigure.');
|
|
32
|
+
// Show current configuration
|
|
33
|
+
if (existingEnvVars.MCP_IDENTITY_DID) {
|
|
34
|
+
console.log(`\nCurrent DID: ${chalk_1.default.green(existingEnvVars.MCP_IDENTITY_DID)}`);
|
|
35
|
+
}
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Prompt for configuration
|
|
39
|
+
const answers = await (0, prompts_1.promptForInit)({
|
|
40
|
+
name: options.name,
|
|
41
|
+
description: options.description,
|
|
42
|
+
repository: options.repository
|
|
43
|
+
});
|
|
44
|
+
// Determine directories configuration
|
|
45
|
+
let directories;
|
|
46
|
+
if (answers.directories === 'verified') {
|
|
47
|
+
directories = 'verified';
|
|
48
|
+
}
|
|
49
|
+
else if (answers.directories === 'none') {
|
|
50
|
+
directories = 'none';
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
directories = answers.specificDirectories || [];
|
|
54
|
+
}
|
|
55
|
+
// Get platform-specific config
|
|
56
|
+
const platformConfig = (0, platform_detector_1.getPlatformSpecificConfig)(platformInfo.platform);
|
|
57
|
+
let identity;
|
|
58
|
+
let envVars = null;
|
|
59
|
+
if (!options.skipRegistration && answers.confirmRegistration) {
|
|
60
|
+
// Register agent
|
|
61
|
+
const spinner = (0, ora_1.default)('Registering agent with knowthat.ai...').start();
|
|
62
|
+
try {
|
|
63
|
+
identity = await (0, mcp_i_1.enableMCPIdentity)({
|
|
64
|
+
name: answers.name,
|
|
65
|
+
description: answers.description,
|
|
66
|
+
repository: answers.repository,
|
|
67
|
+
directories: directories,
|
|
68
|
+
storage: platformConfig.storage,
|
|
69
|
+
transport: platformConfig.transport,
|
|
70
|
+
mode: 'production',
|
|
71
|
+
logLevel: 'silent'
|
|
72
|
+
});
|
|
73
|
+
spinner.succeed('Agent registered successfully!');
|
|
74
|
+
// Extract environment variables
|
|
75
|
+
envVars = {
|
|
76
|
+
MCP_IDENTITY_DID: identity.did,
|
|
77
|
+
MCP_IDENTITY_PUBLIC_KEY: identity.publicKey,
|
|
78
|
+
MCP_IDENTITY_PRIVATE_KEY: identity.privateKey || '', // Access private key
|
|
79
|
+
MCP_IDENTITY_AGENT_ID: identity.agentId || '',
|
|
80
|
+
MCP_IDENTITY_AGENT_SLUG: identity.agentSlug || ''
|
|
81
|
+
};
|
|
82
|
+
console.log(`\n📝 ${chalk_1.default.bold('Agent Details:')}`);
|
|
83
|
+
console.log(` DID: ${chalk_1.default.green(identity.did)}`);
|
|
84
|
+
console.log(` Profile: ${chalk_1.default.cyan(`https://knowthat.ai/agents/${envVars.MCP_IDENTITY_AGENT_SLUG}`)}`);
|
|
85
|
+
// Try to get claim URL
|
|
86
|
+
try {
|
|
87
|
+
const { claimUrl } = await identity.requestEditAccess();
|
|
88
|
+
if (claimUrl) {
|
|
89
|
+
console.log(`\n🎯 ${chalk_1.default.bold('Claim your agent:')}`);
|
|
90
|
+
console.log(` ${chalk_1.default.cyan(claimUrl)}`);
|
|
91
|
+
console.log(` ${chalk_1.default.gray('(This link lets you manage your agent)')}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
// Claim URL might fail due to rate limiting
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
spinner.fail('Registration failed');
|
|
100
|
+
if (error.message?.includes('429')) {
|
|
101
|
+
(0, prompts_1.showError)('Rate limit exceeded. Please wait a few minutes and try again.');
|
|
102
|
+
}
|
|
103
|
+
else if (error.message?.includes('500')) {
|
|
104
|
+
(0, prompts_1.showError)('Server error. The registry might be temporarily down.');
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
(0, prompts_1.showError)(error.message || 'Failed to register agent');
|
|
108
|
+
}
|
|
109
|
+
console.log('\nYou can still create the configuration files and register later.');
|
|
110
|
+
answers.confirmEnvCreation = await (0, prompts_1.promptForInit)({ confirmEnvCreation: true }).then(a => a.confirmEnvCreation);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Create environment files
|
|
114
|
+
if (answers.confirmEnvCreation && envVars) {
|
|
115
|
+
console.log(`\n📄 ${chalk_1.default.bold('Creating environment files...')}`);
|
|
116
|
+
try {
|
|
117
|
+
// Create actual env file
|
|
118
|
+
const envFile = platformConfig.envFile;
|
|
119
|
+
await envManager.createEnvFile(envFile, envVars, { force: options.force });
|
|
120
|
+
console.log(` ✓ Created ${chalk_1.default.green(envFile)}`);
|
|
121
|
+
// Create example file
|
|
122
|
+
const exampleFile = `${envFile}.example`;
|
|
123
|
+
await envManager.createEnvFile(exampleFile, envVars, { example: true });
|
|
124
|
+
console.log(` ✓ Created ${chalk_1.default.green(exampleFile)}`);
|
|
125
|
+
// Check gitignore
|
|
126
|
+
const { missing } = envManager.checkGitignore([envFile, '.mcp-identity.json']);
|
|
127
|
+
if (missing.length > 0) {
|
|
128
|
+
envManager.addToGitignore(missing);
|
|
129
|
+
console.log(` ✓ Added to ${chalk_1.default.green('.gitignore')}: ${missing.join(', ')}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
(0, prompts_1.showError)(`Failed to create environment files: ${error.message}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Show next steps
|
|
137
|
+
console.log(`\n📋 ${chalk_1.default.bold('Next Steps:')}`);
|
|
138
|
+
console.log('\n1. Install the MCP-I package:');
|
|
139
|
+
console.log(` ${chalk_1.default.cyan(`${platformInfo.packageManager} install @kya-os/mcp-i`)}`);
|
|
140
|
+
console.log('\n2. Add to your code:');
|
|
141
|
+
console.log(` ${chalk_1.default.cyan('import "@kya-os/mcp-i/auto"')}`);
|
|
142
|
+
if (platformInfo.platform === 'vercel' || platformInfo.platform === 'nextjs') {
|
|
143
|
+
console.log('\n3. For production deployment:');
|
|
144
|
+
console.log(' - Go to Vercel Dashboard → Settings → Environment Variables');
|
|
145
|
+
console.log(' - Add all MCP_IDENTITY_* variables from .env.local');
|
|
146
|
+
console.log(` - Run: ${chalk_1.default.cyan('npx kya-os env copy')} to copy them to clipboard`);
|
|
147
|
+
}
|
|
148
|
+
console.log(`\n${chalk_1.default.bold('Platform-specific notes:')}`);
|
|
149
|
+
platformConfig.instructions.forEach((instruction, i) => {
|
|
150
|
+
console.log(`${i + 1}. ${instruction}`);
|
|
151
|
+
});
|
|
152
|
+
(0, prompts_1.showSuccess)('MCP-I initialization complete!');
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
(0, prompts_1.showError)(error.message || 'Initialization failed');
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotate.d.ts","sourceRoot":"","sources":["../../src/commands/rotate.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,iBAyGlD"}
|
|
@@ -0,0 +1,106 @@
|
|
|
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.rotate = rotate;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const ora_1 = __importDefault(require("ora"));
|
|
9
|
+
const mcp_i_1 = require("@kya-os/mcp-i");
|
|
10
|
+
const env_manager_1 = require("../utils/env-manager");
|
|
11
|
+
const prompts_1 = require("../utils/prompts");
|
|
12
|
+
const fs_1 = require("fs");
|
|
13
|
+
const path_1 = require("path");
|
|
14
|
+
async function rotate(options) {
|
|
15
|
+
console.log(chalk_1.default.cyan('\n🔄 Key Rotation\n'));
|
|
16
|
+
// Check for existing identity
|
|
17
|
+
const envManager = new env_manager_1.EnvManager();
|
|
18
|
+
const processVars = envManager.getFromProcess();
|
|
19
|
+
if (!processVars.MCP_IDENTITY_DID) {
|
|
20
|
+
(0, prompts_1.showError)('No MCP-I identity found. Run "npx kya-os init" first.');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// Confirm rotation
|
|
24
|
+
if (!options.force) {
|
|
25
|
+
const { confirm, reason } = await (0, prompts_1.confirmRotation)();
|
|
26
|
+
if (!confirm) {
|
|
27
|
+
console.log(chalk_1.default.gray('\nRotation cancelled.'));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
options.reason = reason;
|
|
31
|
+
}
|
|
32
|
+
(0, prompts_1.showWarning)('Key rotation will generate new cryptographic keys.');
|
|
33
|
+
console.log('The old keys will remain valid during a 7-day grace period.\n');
|
|
34
|
+
const spinner = (0, ora_1.default)('Rotating keys...').start();
|
|
35
|
+
try {
|
|
36
|
+
// Initialize identity from existing configuration
|
|
37
|
+
const identity = await mcp_i_1.MCPIdentity.init();
|
|
38
|
+
// Check if rotation is available
|
|
39
|
+
const keyHealth = identity.checkKeyHealth();
|
|
40
|
+
if (!keyHealth) {
|
|
41
|
+
spinner.fail('Key rotation not available (using memory storage)');
|
|
42
|
+
console.log(chalk_1.default.blue('ℹ️ Key rotation requires file storage. Serverless environments cannot rotate keys.'));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// Show current key health
|
|
46
|
+
spinner.info('Current key status:');
|
|
47
|
+
console.log(` Age: ${Math.floor(keyHealth.age / (24 * 60 * 60 * 1000))} days`);
|
|
48
|
+
console.log(` Signatures: ${keyHealth.signatureCount.toLocaleString()}`);
|
|
49
|
+
console.log(` Should rotate: ${keyHealth.shouldRotate ? chalk_1.default.yellow('Yes') : chalk_1.default.green('No')}`);
|
|
50
|
+
// Perform rotation
|
|
51
|
+
spinner.start('Contacting registry...');
|
|
52
|
+
const result = await identity.rotateKeys(options.reason);
|
|
53
|
+
if (result.success) {
|
|
54
|
+
spinner.succeed('Keys rotated successfully!');
|
|
55
|
+
console.log(`\n${chalk_1.default.bold('🔐 New Keys Generated:')}`);
|
|
56
|
+
console.log(` Grace period ends: ${new Date(result.gracePeriodEnd).toLocaleDateString()}`);
|
|
57
|
+
console.log(` Old keys remain valid until then`);
|
|
58
|
+
// Get new identity info
|
|
59
|
+
const newVars = {
|
|
60
|
+
MCP_IDENTITY_DID: identity.did,
|
|
61
|
+
MCP_IDENTITY_PUBLIC_KEY: identity.publicKey,
|
|
62
|
+
MCP_IDENTITY_PRIVATE_KEY: identity.privateKey || '',
|
|
63
|
+
MCP_IDENTITY_AGENT_ID: identity.agentId || '',
|
|
64
|
+
MCP_IDENTITY_AGENT_SLUG: identity.agentSlug || ''
|
|
65
|
+
};
|
|
66
|
+
// Update environment files
|
|
67
|
+
console.log(`\n${chalk_1.default.bold('📄 Updating Environment Files:')}`);
|
|
68
|
+
const files = ['.env', '.env.local'];
|
|
69
|
+
for (const file of files) {
|
|
70
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(process.cwd(), file))) {
|
|
71
|
+
try {
|
|
72
|
+
await envManager.createEnvFile(file, newVars, { force: true });
|
|
73
|
+
console.log(` ✓ Updated ${chalk_1.default.green(file)}`);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.log(` ✗ Failed to update ${chalk_1.default.red(file)}: ${error.message}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
(0, prompts_1.showSuccess)('Key rotation complete!');
|
|
81
|
+
console.log(`\n${chalk_1.default.bold('⚠️ Important Next Steps:')}`);
|
|
82
|
+
console.log('\n1. Update production environment variables:');
|
|
83
|
+
console.log(` ${chalk_1.default.cyan('npx kya-os env copy')}`);
|
|
84
|
+
console.log('\n2. Deploy your application with new keys');
|
|
85
|
+
console.log('\n3. Monitor for any authentication issues');
|
|
86
|
+
console.log(`\n${chalk_1.default.yellow('Note:')} Both old and new keys will work for 7 days.`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
spinner.fail('Key rotation failed');
|
|
90
|
+
(0, prompts_1.showError)(result.error || 'Unknown error during rotation');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
spinner.fail('Key rotation failed');
|
|
95
|
+
if (error.message?.includes('429')) {
|
|
96
|
+
(0, prompts_1.showError)('Rate limit exceeded. Please try again later.');
|
|
97
|
+
}
|
|
98
|
+
else if (error.message?.includes('Network')) {
|
|
99
|
+
(0, prompts_1.showError)('Network error. Check your internet connection.');
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
(0, prompts_1.showError)(error.message || 'Failed to rotate keys');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=rotate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../src/commands/rotate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const init_1 = require("./commands/init");
|
|
10
|
+
const check_1 = require("./commands/check");
|
|
11
|
+
const env_1 = require("./commands/env");
|
|
12
|
+
const rotate_1 = require("./commands/rotate");
|
|
13
|
+
const claim_1 = require("./commands/claim");
|
|
14
|
+
const program = new commander_1.Command();
|
|
15
|
+
// ASCII art logo
|
|
16
|
+
const logo = chalk_1.default.cyan(`
|
|
17
|
+
╦╔═╦ ╦╔═╗ ╔═╗╔═╗
|
|
18
|
+
╠╩╗╚╦╝╠═╣───║ ║╚═╗
|
|
19
|
+
╩ ╩ ╩ ╩ ╩ ╚═╝╚═╝
|
|
20
|
+
`);
|
|
21
|
+
program
|
|
22
|
+
.name('kya-os')
|
|
23
|
+
.description('CLI for KYA-OS MCP-I setup and management')
|
|
24
|
+
.version('0.1.0')
|
|
25
|
+
.addHelpText('before', logo);
|
|
26
|
+
// Init command
|
|
27
|
+
program
|
|
28
|
+
.command('init')
|
|
29
|
+
.description('Initialize MCP-I in your project')
|
|
30
|
+
.option('-n, --name <name>', 'Agent name')
|
|
31
|
+
.option('-d, --description <description>', 'Agent description')
|
|
32
|
+
.option('-r, --repository <url>', 'Repository URL')
|
|
33
|
+
.option('-p, --platform <platform>', 'Target platform (auto-detected if not specified)')
|
|
34
|
+
.option('--skip-registration', 'Skip agent registration (create files only)')
|
|
35
|
+
.option('--force', 'Overwrite existing configuration')
|
|
36
|
+
.action(init_1.init);
|
|
37
|
+
// Check command
|
|
38
|
+
program
|
|
39
|
+
.command('check')
|
|
40
|
+
.description('Check MCP-I setup status')
|
|
41
|
+
.option('-v, --verbose', 'Show detailed information')
|
|
42
|
+
.action(check_1.check);
|
|
43
|
+
// Env command with subcommands
|
|
44
|
+
const envCommand = program
|
|
45
|
+
.command('env')
|
|
46
|
+
.description('Manage environment variables');
|
|
47
|
+
envCommand
|
|
48
|
+
.command('show')
|
|
49
|
+
.description('Show required environment variables')
|
|
50
|
+
.action(() => (0, env_1.env)('show'));
|
|
51
|
+
envCommand
|
|
52
|
+
.command('copy')
|
|
53
|
+
.description('Copy environment variables to clipboard')
|
|
54
|
+
.action(() => (0, env_1.env)('copy'));
|
|
55
|
+
envCommand
|
|
56
|
+
.command('verify')
|
|
57
|
+
.description('Verify environment variables are set correctly')
|
|
58
|
+
.action(() => (0, env_1.env)('verify'));
|
|
59
|
+
// Rotate command
|
|
60
|
+
program
|
|
61
|
+
.command('rotate')
|
|
62
|
+
.description('Rotate identity keys')
|
|
63
|
+
.option('-f, --force', 'Force rotation without confirmation')
|
|
64
|
+
.option('-r, --reason <reason>', 'Reason for rotation')
|
|
65
|
+
.action(rotate_1.rotate);
|
|
66
|
+
// Claim command
|
|
67
|
+
program
|
|
68
|
+
.command('claim')
|
|
69
|
+
.description('Get agent claim/edit URLs')
|
|
70
|
+
.action(claim_1.claim);
|
|
71
|
+
// Parse arguments
|
|
72
|
+
program.parse();
|
|
73
|
+
// Show help if no command specified
|
|
74
|
+
if (!process.argv.slice(2).length) {
|
|
75
|
+
program.outputHelp();
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,yCAAoC;AACpC,kDAA0B;AAC1B,0CAAuC;AACvC,4CAAyC;AACzC,wCAAqC;AACrC,8CAA2C;AAC3C,4CAAyC;AAEzC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,iBAAiB;AACjB,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC;;;;CAIvB,CAAC,CAAC;AAEH,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAE/B,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,mBAAmB,EAAE,YAAY,CAAC;KACzC,MAAM,CAAC,iCAAiC,EAAE,mBAAmB,CAAC;KAC9D,MAAM,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;KAClD,MAAM,CAAC,2BAA2B,EAAE,kDAAkD,CAAC;KACvF,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;KAC5E,MAAM,CAAC,SAAS,EAAE,kCAAkC,CAAC;KACrD,MAAM,CAAC,WAAI,CAAC,CAAC;AAEhB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,aAAK,CAAC,CAAC;AAEjB,+BAA+B;AAC/B,MAAM,UAAU,GAAG,OAAO;KACvB,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,8BAA8B,CAAC,CAAC;AAE/C,UAAU;KACP,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,SAAG,EAAC,MAAM,CAAC,CAAC,CAAC;AAE7B,UAAU;KACP,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,SAAG,EAAC,MAAM,CAAC,CAAC,CAAC;AAE7B,UAAU;KACP,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,SAAG,EAAC,QAAQ,CAAC,CAAC,CAAC;AAE/B,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,aAAa,EAAE,qCAAqC,CAAC;KAC5D,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;KACtD,MAAM,CAAC,eAAM,CAAC,CAAC;AAElB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,aAAK,CAAC,CAAC;AAEjB,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,oCAAoC;AACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface EnvVariables {
|
|
2
|
+
MCP_IDENTITY_DID: string;
|
|
3
|
+
MCP_IDENTITY_PUBLIC_KEY: string;
|
|
4
|
+
MCP_IDENTITY_PRIVATE_KEY: string;
|
|
5
|
+
MCP_IDENTITY_AGENT_ID: string;
|
|
6
|
+
MCP_IDENTITY_AGENT_SLUG: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class EnvManager {
|
|
9
|
+
private projectRoot;
|
|
10
|
+
constructor(projectRoot?: string);
|
|
11
|
+
/**
|
|
12
|
+
* Create or update environment file with MCP-I variables
|
|
13
|
+
*/
|
|
14
|
+
createEnvFile(filename: string, variables: EnvVariables, options?: {
|
|
15
|
+
force?: boolean;
|
|
16
|
+
example?: boolean;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Read environment variables from file
|
|
20
|
+
*/
|
|
21
|
+
readEnvFile(filename: string): Partial<EnvVariables>;
|
|
22
|
+
/**
|
|
23
|
+
* Check if .gitignore includes env files
|
|
24
|
+
*/
|
|
25
|
+
checkGitignore(envFiles: string[]): {
|
|
26
|
+
missing: string[];
|
|
27
|
+
ignored: string[];
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Add files to .gitignore
|
|
31
|
+
*/
|
|
32
|
+
addToGitignore(files: string[]): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get environment variables from process.env
|
|
35
|
+
*/
|
|
36
|
+
getFromProcess(): Partial<EnvVariables>;
|
|
37
|
+
/**
|
|
38
|
+
* Format environment variables for display
|
|
39
|
+
*/
|
|
40
|
+
formatForDisplay(vars: Partial<EnvVariables>, hideSecrets?: boolean): string;
|
|
41
|
+
/**
|
|
42
|
+
* Format for clipboard (no masking)
|
|
43
|
+
*/
|
|
44
|
+
formatForClipboard(vars: Partial<EnvVariables>): string;
|
|
45
|
+
/**
|
|
46
|
+
* Check if all required variables are present
|
|
47
|
+
*/
|
|
48
|
+
validateVariables(vars: Partial<EnvVariables>): {
|
|
49
|
+
valid: boolean;
|
|
50
|
+
missing: string[];
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=env-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-manager.d.ts","sourceRoot":"","sources":["../../src/utils/env-manager.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,wBAAwB,EAAE,MAAM,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,GAAE,MAAsB;IAI/C;;OAEG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,YAAY,EACvB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GACnD,OAAO,CAAC,IAAI,CAAC;IAqChB;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0BpD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IA+B5E;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAsBrC;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;IAYvC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,WAAW,UAAO,GAAG,MAAM;IAkBzE;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM;IAYvD;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;QAC9C,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB;CAgBF"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnvManager = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
class EnvManager {
|
|
7
|
+
constructor(projectRoot = process.cwd()) {
|
|
8
|
+
this.projectRoot = projectRoot;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Create or update environment file with MCP-I variables
|
|
12
|
+
*/
|
|
13
|
+
async createEnvFile(filename, variables, options = {}) {
|
|
14
|
+
const filepath = (0, path_1.join)(this.projectRoot, filename);
|
|
15
|
+
// Check if file exists
|
|
16
|
+
if ((0, fs_1.existsSync)(filepath) && !options.force && !options.example) {
|
|
17
|
+
throw new Error(`${filename} already exists. Use --force to overwrite.`);
|
|
18
|
+
}
|
|
19
|
+
let content = '';
|
|
20
|
+
// Add header
|
|
21
|
+
content += '# MCP-I Identity Configuration\n';
|
|
22
|
+
content += `# Generated by kya-os CLI on ${new Date().toISOString()}\n`;
|
|
23
|
+
if (options.example) {
|
|
24
|
+
content += '# Copy this file to .env.local and fill in your values\n';
|
|
25
|
+
content += '# DO NOT commit this file with real values\n\n';
|
|
26
|
+
// Use placeholders for example file
|
|
27
|
+
content += 'MCP_IDENTITY_DID="your-did-here"\n';
|
|
28
|
+
content += 'MCP_IDENTITY_PUBLIC_KEY="your-public-key-here"\n';
|
|
29
|
+
content += 'MCP_IDENTITY_PRIVATE_KEY="your-private-key-here"\n';
|
|
30
|
+
content += 'MCP_IDENTITY_AGENT_ID="your-agent-id-here"\n';
|
|
31
|
+
content += 'MCP_IDENTITY_AGENT_SLUG="your-agent-slug-here"\n';
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
content += '# IMPORTANT: Do not commit this file to version control!\n\n';
|
|
35
|
+
// Use real values
|
|
36
|
+
Object.entries(variables).forEach(([key, value]) => {
|
|
37
|
+
content += `${key}="${value}"\n`;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// Write file
|
|
41
|
+
(0, fs_1.writeFileSync)(filepath, content, 'utf-8');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Read environment variables from file
|
|
45
|
+
*/
|
|
46
|
+
readEnvFile(filename) {
|
|
47
|
+
const filepath = (0, path_1.join)(this.projectRoot, filename);
|
|
48
|
+
if (!(0, fs_1.existsSync)(filepath)) {
|
|
49
|
+
return {};
|
|
50
|
+
}
|
|
51
|
+
const content = (0, fs_1.readFileSync)(filepath, 'utf-8');
|
|
52
|
+
const vars = {};
|
|
53
|
+
// Parse env file
|
|
54
|
+
content.split('\n').forEach(line => {
|
|
55
|
+
// Skip comments and empty lines
|
|
56
|
+
if (line.startsWith('#') || !line.trim())
|
|
57
|
+
return;
|
|
58
|
+
const [key, ...valueParts] = line.split('=');
|
|
59
|
+
const value = valueParts.join('=').replace(/^["']|["']$/g, '');
|
|
60
|
+
if (key && value && key.startsWith('MCP_IDENTITY_')) {
|
|
61
|
+
vars[key] = value;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return vars;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if .gitignore includes env files
|
|
68
|
+
*/
|
|
69
|
+
checkGitignore(envFiles) {
|
|
70
|
+
const gitignorePath = (0, path_1.join)(this.projectRoot, '.gitignore');
|
|
71
|
+
const missing = [];
|
|
72
|
+
const ignored = [];
|
|
73
|
+
if (!(0, fs_1.existsSync)(gitignorePath)) {
|
|
74
|
+
return { missing: envFiles, ignored: [] };
|
|
75
|
+
}
|
|
76
|
+
const gitignoreContent = (0, fs_1.readFileSync)(gitignorePath, 'utf-8');
|
|
77
|
+
const patterns = gitignoreContent.split('\n')
|
|
78
|
+
.filter(line => line.trim() && !line.startsWith('#'));
|
|
79
|
+
envFiles.forEach(file => {
|
|
80
|
+
const isIgnored = patterns.some(pattern => {
|
|
81
|
+
// Simple pattern matching (could be enhanced)
|
|
82
|
+
return pattern === file ||
|
|
83
|
+
pattern === `/${file}` ||
|
|
84
|
+
pattern.endsWith('*') && file.startsWith(pattern.slice(0, -1));
|
|
85
|
+
});
|
|
86
|
+
if (isIgnored) {
|
|
87
|
+
ignored.push(file);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
missing.push(file);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
return { missing, ignored };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Add files to .gitignore
|
|
97
|
+
*/
|
|
98
|
+
addToGitignore(files) {
|
|
99
|
+
const gitignorePath = (0, path_1.join)(this.projectRoot, '.gitignore');
|
|
100
|
+
// Read existing content or create new
|
|
101
|
+
let content = (0, fs_1.existsSync)(gitignorePath)
|
|
102
|
+
? (0, fs_1.readFileSync)(gitignorePath, 'utf-8')
|
|
103
|
+
: '';
|
|
104
|
+
// Add newline if file doesn't end with one
|
|
105
|
+
if (content && !content.endsWith('\n')) {
|
|
106
|
+
content += '\n';
|
|
107
|
+
}
|
|
108
|
+
// Add section for MCP-I
|
|
109
|
+
content += '\n# MCP-I Identity Files\n';
|
|
110
|
+
files.forEach(file => {
|
|
111
|
+
content += `${file}\n`;
|
|
112
|
+
});
|
|
113
|
+
(0, fs_1.writeFileSync)(gitignorePath, content, 'utf-8');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get environment variables from process.env
|
|
117
|
+
*/
|
|
118
|
+
getFromProcess() {
|
|
119
|
+
const vars = {};
|
|
120
|
+
Object.keys(process.env).forEach(key => {
|
|
121
|
+
if (key.startsWith('MCP_IDENTITY_')) {
|
|
122
|
+
vars[key] = process.env[key];
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
return vars;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Format environment variables for display
|
|
129
|
+
*/
|
|
130
|
+
formatForDisplay(vars, hideSecrets = true) {
|
|
131
|
+
let output = '';
|
|
132
|
+
Object.entries(vars).forEach(([key, value]) => {
|
|
133
|
+
if (!value)
|
|
134
|
+
return;
|
|
135
|
+
if (hideSecrets && key.includes('PRIVATE_KEY')) {
|
|
136
|
+
// Show only first/last few characters of private key
|
|
137
|
+
const masked = value.substring(0, 8) + '...' + value.substring(value.length - 8);
|
|
138
|
+
output += `${key}="${masked}"\n`;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
output += `${key}="${value}"\n`;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
return output;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Format for clipboard (no masking)
|
|
148
|
+
*/
|
|
149
|
+
formatForClipboard(vars) {
|
|
150
|
+
let output = '';
|
|
151
|
+
Object.entries(vars).forEach(([key, value]) => {
|
|
152
|
+
if (value) {
|
|
153
|
+
output += `${key}="${value}"\n`;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
return output;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Check if all required variables are present
|
|
160
|
+
*/
|
|
161
|
+
validateVariables(vars) {
|
|
162
|
+
const required = [
|
|
163
|
+
'MCP_IDENTITY_DID',
|
|
164
|
+
'MCP_IDENTITY_PUBLIC_KEY',
|
|
165
|
+
'MCP_IDENTITY_PRIVATE_KEY',
|
|
166
|
+
'MCP_IDENTITY_AGENT_ID',
|
|
167
|
+
'MCP_IDENTITY_AGENT_SLUG'
|
|
168
|
+
];
|
|
169
|
+
const missing = required.filter(key => !vars[key]);
|
|
170
|
+
return {
|
|
171
|
+
valid: missing.length === 0,
|
|
172
|
+
missing
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.EnvManager = EnvManager;
|
|
177
|
+
//# sourceMappingURL=env-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-manager.js","sourceRoot":"","sources":["../../src/utils/env-manager.ts"],"names":[],"mappings":"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"}
|