replicas-cli 0.1.0 → 0.2.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/dist/commands/code.d.ts +4 -0
- package/dist/commands/code.d.ts.map +1 -0
- package/dist/commands/code.js +67 -0
- package/dist/commands/code.js.map +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +74 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +6 -111
- package/dist/commands/connect.js.map +1 -1
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +2 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +14 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/ssh-config.d.ts +12 -0
- package/dist/lib/ssh-config.d.ts.map +1 -0
- package/dist/lib/ssh-config.js +122 -0
- package/dist/lib/ssh-config.js.map +1 -0
- package/dist/lib/workspace-connection.d.ts +11 -0
- package/dist/lib/workspace-connection.d.ts.map +1 -0
- package/dist/lib/workspace-connection.js +127 -0
- package/dist/lib/workspace-connection.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqEnG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
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.codeCommand = codeCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const config_1 = require("../lib/config");
|
|
10
|
+
const workspace_connection_1 = require("../lib/workspace-connection");
|
|
11
|
+
const ssh_config_1 = require("../lib/ssh-config");
|
|
12
|
+
async function codeCommand(workspaceName, options) {
|
|
13
|
+
if (!(0, config_1.isAuthenticated)()) {
|
|
14
|
+
console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const { workspace, sshKeyPath, portMappings, repoName } = await (0, workspace_connection_1.prepareWorkspaceConnection)(workspaceName, options);
|
|
19
|
+
const hostAlias = (0, ssh_config_1.getWorkspaceHostAlias)(workspace.name);
|
|
20
|
+
console.log(chalk_1.default.blue('\nConfiguring SSH connection...'));
|
|
21
|
+
(0, ssh_config_1.addOrUpdateSSHConfigEntry)({
|
|
22
|
+
host: hostAlias,
|
|
23
|
+
hostname: workspace.ipv4_address,
|
|
24
|
+
user: 'ubuntu',
|
|
25
|
+
identityFile: sshKeyPath,
|
|
26
|
+
portForwards: portMappings,
|
|
27
|
+
});
|
|
28
|
+
console.log(chalk_1.default.green(`✓ SSH config entry created: ${hostAlias}`));
|
|
29
|
+
const remotePath = repoName
|
|
30
|
+
? `/home/ubuntu/workspaces/${repoName}`
|
|
31
|
+
: '/home/ubuntu';
|
|
32
|
+
const ideCommand = (0, config_1.getIdeCommand)();
|
|
33
|
+
const fullCommand = `${ideCommand} --remote ssh-remote+${hostAlias} ${remotePath}`;
|
|
34
|
+
console.log(chalk_1.default.blue(`\nOpening ${ideCommand} for workspace ${workspace.name}...`));
|
|
35
|
+
console.log(chalk_1.default.gray(`Command: ${fullCommand}`));
|
|
36
|
+
if (portMappings.size > 0) {
|
|
37
|
+
console.log(chalk_1.default.cyan('\nPort forwarding configured:'));
|
|
38
|
+
for (const [remotePort, localPort] of portMappings) {
|
|
39
|
+
console.log(chalk_1.default.cyan(` • localhost:${localPort} → workspace:${remotePort}`));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const ide = (0, child_process_1.spawn)(ideCommand, [
|
|
43
|
+
'--remote',
|
|
44
|
+
`ssh-remote+${hostAlias}`,
|
|
45
|
+
remotePath
|
|
46
|
+
], {
|
|
47
|
+
stdio: 'inherit',
|
|
48
|
+
detached: false,
|
|
49
|
+
});
|
|
50
|
+
ide.on('error', (error) => {
|
|
51
|
+
console.error(chalk_1.default.red(`\nFailed to launch ${ideCommand}: ${error.message}`));
|
|
52
|
+
console.log(chalk_1.default.yellow(`\nMake sure ${ideCommand} is installed and available in your PATH.`));
|
|
53
|
+
console.log(chalk_1.default.gray(`You can configure a different IDE with: replicas config set ide <command>`));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
});
|
|
56
|
+
ide.on('close', (code) => {
|
|
57
|
+
if (code === 0) {
|
|
58
|
+
console.log(chalk_1.default.green(`\n✓ ${ideCommand} closed successfully.\n`));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error(chalk_1.default.red(`\nError: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBjE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhF;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBvD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
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.configGetCommand = configGetCommand;
|
|
7
|
+
exports.configSetCommand = configSetCommand;
|
|
8
|
+
exports.configListCommand = configListCommand;
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const config_1 = require("../lib/config");
|
|
11
|
+
async function configGetCommand(key) {
|
|
12
|
+
if (!(0, config_1.isAuthenticated)()) {
|
|
13
|
+
console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
if (key === 'ide') {
|
|
18
|
+
const ideCommand = (0, config_1.getIdeCommand)();
|
|
19
|
+
console.log(chalk_1.default.green(`\nIDE command: ${ideCommand}\n`));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(chalk_1.default.red(`Unknown config key: ${key}`));
|
|
23
|
+
console.log(chalk_1.default.gray('Available keys: ide'));
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.error(chalk_1.default.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function configSetCommand(key, value) {
|
|
33
|
+
if (!(0, config_1.isAuthenticated)()) {
|
|
34
|
+
console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
if (key === 'ide') {
|
|
39
|
+
(0, config_1.setIdeCommand)(value);
|
|
40
|
+
console.log(chalk_1.default.green(`\n✓ IDE command set to: ${value}\n`));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(chalk_1.default.red(`Unknown config key: ${key}`));
|
|
44
|
+
console.log(chalk_1.default.gray('Available keys: ide'));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(chalk_1.default.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function configListCommand() {
|
|
54
|
+
if (!(0, config_1.isAuthenticated)()) {
|
|
55
|
+
console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const config = (0, config_1.readConfig)();
|
|
60
|
+
if (!config) {
|
|
61
|
+
console.log(chalk_1.default.red('No config found. Please login first.'));
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
console.log(chalk_1.default.green('\nCurrent configuration:'));
|
|
65
|
+
console.log(chalk_1.default.gray(` Organization ID: ${config.organization_id || '(not set)'}`));
|
|
66
|
+
console.log(chalk_1.default.gray(` IDE command: ${config.ide_command || 'code (default)'}`));
|
|
67
|
+
console.log();
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.error(chalk_1.default.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAKA,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCtG"}
|
package/dist/commands/connect.js
CHANGED
|
@@ -5,127 +5,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.connectCommand = connectCommand;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const prompts_1 = __importDefault(require("prompts"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const fs_1 = __importDefault(require("fs"));
|
|
11
8
|
const config_1 = require("../lib/config");
|
|
12
|
-
const api_1 = require("../lib/api");
|
|
13
9
|
const ssh_1 = require("../lib/ssh");
|
|
14
|
-
const
|
|
15
|
-
const replicas_config_1 = require("../lib/replicas-config");
|
|
16
|
-
const ports_1 = require("../lib/ports");
|
|
10
|
+
const workspace_connection_1 = require("../lib/workspace-connection");
|
|
17
11
|
async function connectCommand(workspaceName, options) {
|
|
18
12
|
if (!(0, config_1.isAuthenticated)()) {
|
|
19
13
|
console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
|
|
20
14
|
process.exit(1);
|
|
21
15
|
}
|
|
22
|
-
const orgId = (0, config_1.getOrganizationId)();
|
|
23
|
-
if (!orgId) {
|
|
24
|
-
console.log(chalk_1.default.red('No organization selected. Please run "replicas org switch" first.'));
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
16
|
try {
|
|
28
|
-
|
|
29
|
-
console.log(chalk_1.default.blue(`\
|
|
30
|
-
|
|
31
|
-
if (response.workspaces.length === 0) {
|
|
32
|
-
console.log(chalk_1.default.red(`No workspaces found with name matching "${workspaceName}".`));
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
// Step 2: If multiple workspaces, prompt user to select one
|
|
36
|
-
let selectedWorkspace;
|
|
37
|
-
if (response.workspaces.length === 1) {
|
|
38
|
-
selectedWorkspace = response.workspaces[0];
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
console.log(chalk_1.default.yellow(`\nFound ${response.workspaces.length} workspaces matching "${workspaceName}":`));
|
|
42
|
-
const selectResponse = await (0, prompts_1.default)({
|
|
43
|
-
type: 'select',
|
|
44
|
-
name: 'workspaceId',
|
|
45
|
-
message: 'Select a workspace:',
|
|
46
|
-
choices: response.workspaces.map(ws => ({
|
|
47
|
-
title: `${ws.name} (${ws.status || 'unknown'})`,
|
|
48
|
-
value: ws.id,
|
|
49
|
-
description: `IP: ${ws.ipv4_address || 'N/A'} | Instance: ${ws.instance_type || 'N/A'}`,
|
|
50
|
-
})),
|
|
51
|
-
});
|
|
52
|
-
if (!selectResponse.workspaceId) {
|
|
53
|
-
console.log(chalk_1.default.yellow('\nCancelled.'));
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
selectedWorkspace = response.workspaces.find(ws => ws.id === selectResponse.workspaceId);
|
|
57
|
-
}
|
|
58
|
-
console.log(chalk_1.default.green(`\n✓ Selected workspace: ${selectedWorkspace.name}`));
|
|
59
|
-
console.log(chalk_1.default.gray(` IP: ${selectedWorkspace.ipv4_address}`));
|
|
60
|
-
console.log(chalk_1.default.gray(` Status: ${selectedWorkspace.status || 'unknown'}`));
|
|
61
|
-
if (!selectedWorkspace.ipv4_address) {
|
|
62
|
-
console.log(chalk_1.default.red('\nWorkspace does not have an IP address. It may not be running yet.'));
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
// Step 3: Get SSH key
|
|
66
|
-
console.log(chalk_1.default.blue('\nRetrieving SSH key...'));
|
|
67
|
-
const privateKey = await (0, ssh_1.getSSHKey)(selectedWorkspace.ssh_key_id);
|
|
68
|
-
// Write key to a temporary file for SSH
|
|
69
|
-
const keyPath = path_1.default.join(config_1.CONFIG_DIR, 'keys', `${selectedWorkspace.ssh_key_id}.pem`);
|
|
70
|
-
fs_1.default.writeFileSync(keyPath, privateKey, { mode: 0o600 });
|
|
71
|
-
console.log(chalk_1.default.green('✓ SSH key ready'));
|
|
72
|
-
// Step 4: Handle --copy flag
|
|
73
|
-
if (options.copy) {
|
|
74
|
-
if (!(0, git_1.isInsideGitRepo)()) {
|
|
75
|
-
console.log(chalk_1.default.yellow('\nWarning: Not inside a git repository. Skipping file copy.'));
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
const repoName = (0, git_1.getGitRepoName)();
|
|
79
|
-
const replicasConfig = (0, replicas_config_1.readReplicasConfig)();
|
|
80
|
-
if (!replicasConfig || !replicasConfig.copy || replicasConfig.copy.length === 0) {
|
|
81
|
-
console.log(chalk_1.default.yellow('\nNo files to copy (replicas.json not found or empty).'));
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
console.log(chalk_1.default.blue(`\nCopying files to workspace (repo: ${repoName})...`));
|
|
85
|
-
const { valid, invalid } = (0, replicas_config_1.validateCopyFiles)(replicasConfig.copy);
|
|
86
|
-
if (invalid.length > 0) {
|
|
87
|
-
console.log(chalk_1.default.yellow(`\nWarning: ${invalid.length} file(s) not found locally:`));
|
|
88
|
-
invalid.forEach(file => console.log(chalk_1.default.gray(` - ${file}`)));
|
|
89
|
-
}
|
|
90
|
-
for (const file of valid) {
|
|
91
|
-
const localPath = (0, replicas_config_1.getAbsoluteCopyPath)(file);
|
|
92
|
-
const remotePath = `/home/ubuntu/workspaces/${repoName}/${file}`;
|
|
93
|
-
console.log(chalk_1.default.gray(` Copying ${file}...`));
|
|
94
|
-
try {
|
|
95
|
-
// Create remote directory first
|
|
96
|
-
await (0, ssh_1.scpCopyFile)(keyPath, localPath, remotePath, selectedWorkspace.ipv4_address);
|
|
97
|
-
console.log(chalk_1.default.green(` ✓ ${file}`));
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
console.log(chalk_1.default.red(` ✗ Failed to copy ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
console.log(chalk_1.default.green(`\n✓ File copy complete (${valid.length} files)`));
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// Step 5: Handle port forwarding
|
|
108
|
-
const portMappings = new Map();
|
|
109
|
-
if ((0, git_1.isInsideGitRepo)()) {
|
|
110
|
-
const replicasConfig = (0, replicas_config_1.readReplicasConfig)();
|
|
111
|
-
if (replicasConfig && replicasConfig.ports && replicasConfig.ports.length > 0) {
|
|
112
|
-
console.log(chalk_1.default.blue('\nSetting up port forwarding...'));
|
|
113
|
-
const mappings = await (0, ports_1.mapPortsToLocal)(replicasConfig.ports);
|
|
114
|
-
for (const [remotePort, localPort] of mappings) {
|
|
115
|
-
portMappings.set(remotePort, localPort);
|
|
116
|
-
console.log(chalk_1.default.gray(` Forwarding localhost:${localPort} -> workspace:${remotePort}`));
|
|
117
|
-
}
|
|
118
|
-
console.log(chalk_1.default.green('✓ Port forwarding configured'));
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
// Step 6: Connect via SSH
|
|
122
|
-
console.log(chalk_1.default.blue(`\nConnecting to ${selectedWorkspace.name}...`));
|
|
123
|
-
// Build display command
|
|
124
|
-
let sshCommand = `ssh -i ${keyPath}`;
|
|
17
|
+
const { workspace, sshKeyPath, portMappings } = await (0, workspace_connection_1.prepareWorkspaceConnection)(workspaceName, options);
|
|
18
|
+
console.log(chalk_1.default.blue(`\nConnecting to ${workspace.name}...`));
|
|
19
|
+
let sshCommand = `ssh -i ${sshKeyPath}`;
|
|
125
20
|
for (const [remotePort, localPort] of portMappings) {
|
|
126
21
|
sshCommand += ` -L ${localPort}:localhost:${remotePort}`;
|
|
127
22
|
}
|
|
128
|
-
sshCommand += ` ubuntu@${
|
|
23
|
+
sshCommand += ` ubuntu@${workspace.ipv4_address}`;
|
|
129
24
|
console.log(chalk_1.default.gray(`SSH command: ${sshCommand}`));
|
|
130
25
|
if (portMappings.size > 0) {
|
|
131
26
|
console.log(chalk_1.default.cyan('\nPort forwarding active:'));
|
|
@@ -134,7 +29,7 @@ async function connectCommand(workspaceName, options) {
|
|
|
134
29
|
}
|
|
135
30
|
}
|
|
136
31
|
console.log(chalk_1.default.gray('\nPress Ctrl+D to disconnect.\n'));
|
|
137
|
-
await (0, ssh_1.connectSSH)(
|
|
32
|
+
await (0, ssh_1.connectSSH)(sshKeyPath, workspace.ipv4_address, portMappings);
|
|
138
33
|
console.log(chalk_1.default.green('\n✓ Disconnected from workspace.\n'));
|
|
139
34
|
}
|
|
140
35
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":";;;;;AAKA,wCAsCC;AA3CD,kDAA0B;AAC1B,0CAAgD;AAChD,oCAAwC;AACxC,sEAAyE;AAElE,KAAK,UAAU,cAAc,CAAC,aAAqB,EAAE,OAA2B;IACrF,IAAI,CAAC,IAAA,wBAAe,GAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,iDAA0B,EAC9E,aAAa,EACb,OAAO,CACR,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAEhE,IAAI,UAAU,GAAG,UAAU,UAAU,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;YACnD,UAAU,IAAI,OAAO,SAAS,cAAc,UAAU,EAAE,CAAC;QAC3D,CAAC;QACD,UAAU,IAAI,WAAW,SAAS,CAAC,YAAY,EAAE,CAAC;QAElD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC,CAAC;QAEtD,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACrD,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,gBAAgB,UAAU,EAAE,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAE3D,MAAM,IAAA,gBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,YAAa,EAAE,YAAY,CAAC,CAAC;QAEpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,9 @@ const login_1 = require("./commands/login");
|
|
|
11
11
|
const logout_1 = require("./commands/logout");
|
|
12
12
|
const whoami_1 = require("./commands/whoami");
|
|
13
13
|
const connect_1 = require("./commands/connect");
|
|
14
|
+
const code_1 = require("./commands/code");
|
|
14
15
|
const org_1 = require("./commands/org");
|
|
16
|
+
const config_1 = require("./commands/config");
|
|
15
17
|
const program = new commander_1.Command();
|
|
16
18
|
program
|
|
17
19
|
.name('replicas')
|
|
@@ -105,5 +107,67 @@ program
|
|
|
105
107
|
process.exit(1);
|
|
106
108
|
}
|
|
107
109
|
});
|
|
110
|
+
// Code command
|
|
111
|
+
program
|
|
112
|
+
.command('code <workspace-name>')
|
|
113
|
+
.description('Open a workspace in VSCode/Cursor via Remote SSH')
|
|
114
|
+
.option('-c, --copy', 'Copy files from replicas.json to the workspace')
|
|
115
|
+
.action(async (workspaceName, options) => {
|
|
116
|
+
try {
|
|
117
|
+
await (0, code_1.codeCommand)(workspaceName, options);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (error instanceof Error) {
|
|
121
|
+
console.error(chalk_1.default.red(`\n✗ ${error.message}\n`));
|
|
122
|
+
}
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
// Config commands
|
|
127
|
+
const config = program
|
|
128
|
+
.command('config')
|
|
129
|
+
.description('Manage CLI configuration');
|
|
130
|
+
config
|
|
131
|
+
.command('get <key>')
|
|
132
|
+
.description('Get a configuration value')
|
|
133
|
+
.action(async (key) => {
|
|
134
|
+
try {
|
|
135
|
+
await (0, config_1.configGetCommand)(key);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (error instanceof Error) {
|
|
139
|
+
console.error(chalk_1.default.red(`\n✗ ${error.message}\n`));
|
|
140
|
+
}
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
config
|
|
145
|
+
.command('set <key> <value>')
|
|
146
|
+
.description('Set a configuration value')
|
|
147
|
+
.action(async (key, value) => {
|
|
148
|
+
try {
|
|
149
|
+
await (0, config_1.configSetCommand)(key, value);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (error instanceof Error) {
|
|
153
|
+
console.error(chalk_1.default.red(`\n✗ ${error.message}\n`));
|
|
154
|
+
}
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
config
|
|
159
|
+
.command('list')
|
|
160
|
+
.description('List all configuration values')
|
|
161
|
+
.action(async () => {
|
|
162
|
+
try {
|
|
163
|
+
await (0, config_1.configListCommand)();
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
if (error instanceof Error) {
|
|
167
|
+
console.error(chalk_1.default.red(`\n✗ ${error.message}\n`));
|
|
168
|
+
}
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
108
172
|
program.parse();
|
|
109
173
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yBAAuB;AACvB,yCAAoC;AACpC,kDAA0B;AAC1B,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,wCAA8D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -6,5 +6,7 @@ export declare function deleteConfig(): void;
|
|
|
6
6
|
export declare function isAuthenticated(): boolean;
|
|
7
7
|
export declare function setOrganizationId(organizationId: string): void;
|
|
8
8
|
export declare function getOrganizationId(): string | null;
|
|
9
|
+
export declare function setIdeCommand(ideCommand: string): void;
|
|
10
|
+
export declare function getIdeCommand(): string;
|
|
9
11
|
export { CONFIG_DIR };
|
|
10
12
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAA,MAAM,UAAU,QAAuC,CAAC;AASxD,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAY1C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAWhD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAA,MAAM,UAAU,QAAuC,CAAC;AASxD,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAY1C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAWhD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAQtD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/lib/config.js
CHANGED
|
@@ -10,6 +10,8 @@ exports.deleteConfig = deleteConfig;
|
|
|
10
10
|
exports.isAuthenticated = isAuthenticated;
|
|
11
11
|
exports.setOrganizationId = setOrganizationId;
|
|
12
12
|
exports.getOrganizationId = getOrganizationId;
|
|
13
|
+
exports.setIdeCommand = setIdeCommand;
|
|
14
|
+
exports.getIdeCommand = getIdeCommand;
|
|
13
15
|
const fs_1 = __importDefault(require("fs"));
|
|
14
16
|
const path_1 = __importDefault(require("path"));
|
|
15
17
|
const os_1 = __importDefault(require("os"));
|
|
@@ -67,4 +69,16 @@ function getOrganizationId() {
|
|
|
67
69
|
const config = readConfig();
|
|
68
70
|
return config?.organization_id || null;
|
|
69
71
|
}
|
|
72
|
+
function setIdeCommand(ideCommand) {
|
|
73
|
+
const config = readConfig();
|
|
74
|
+
if (!config) {
|
|
75
|
+
throw new Error('No config file found. Please login first.');
|
|
76
|
+
}
|
|
77
|
+
config.ide_command = ideCommand;
|
|
78
|
+
writeConfig(config);
|
|
79
|
+
}
|
|
80
|
+
function getIdeCommand() {
|
|
81
|
+
const config = readConfig();
|
|
82
|
+
return config?.ide_command || 'code';
|
|
83
|
+
}
|
|
70
84
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;;;;;AAcA,gCAYC;AAED,kCAWC;AAED,oCAIC;AAED,0CAGC;AAED,8CAQC;AAED,8CAGC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface SSHConfigEntry {
|
|
2
|
+
host: string;
|
|
3
|
+
hostname: string;
|
|
4
|
+
user: string;
|
|
5
|
+
identityFile: string;
|
|
6
|
+
portForwards?: Map<number, number>;
|
|
7
|
+
}
|
|
8
|
+
export declare function removeSSHConfigEntry(host: string): void;
|
|
9
|
+
export declare function addOrUpdateSSHConfigEntry(entry: SSHConfigEntry): void;
|
|
10
|
+
export declare function getWorkspaceHostAlias(workspaceName: string): string;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=ssh-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh-config.d.ts","sourceRoot":"","sources":["../../src/lib/ssh-config.ts"],"names":[],"mappings":"AAQA,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AA8CD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAmCvD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CA8CrE;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1,122 @@
|
|
|
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.removeSSHConfigEntry = removeSSHConfigEntry;
|
|
7
|
+
exports.addOrUpdateSSHConfigEntry = addOrUpdateSSHConfigEntry;
|
|
8
|
+
exports.getWorkspaceHostAlias = getWorkspaceHostAlias;
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const os_1 = __importDefault(require("os"));
|
|
12
|
+
const SSH_CONFIG_PATH = path_1.default.join(os_1.default.homedir(), '.ssh', 'config');
|
|
13
|
+
const REPLICAS_MARKER_START = '# === REPLICAS CLI MANAGED ENTRY START ===';
|
|
14
|
+
const REPLICAS_MARKER_END = '# === REPLICAS CLI MANAGED ENTRY END ===';
|
|
15
|
+
function ensureSSHDir() {
|
|
16
|
+
const sshDir = path_1.default.join(os_1.default.homedir(), '.ssh');
|
|
17
|
+
if (!fs_1.default.existsSync(sshDir)) {
|
|
18
|
+
fs_1.default.mkdirSync(sshDir, { recursive: true, mode: 0o700 });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function readSSHConfig() {
|
|
22
|
+
ensureSSHDir();
|
|
23
|
+
if (!fs_1.default.existsSync(SSH_CONFIG_PATH)) {
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
return fs_1.default.readFileSync(SSH_CONFIG_PATH, 'utf-8');
|
|
27
|
+
}
|
|
28
|
+
function writeSSHConfig(content) {
|
|
29
|
+
ensureSSHDir();
|
|
30
|
+
fs_1.default.writeFileSync(SSH_CONFIG_PATH, content, { mode: 0o600 });
|
|
31
|
+
}
|
|
32
|
+
function generateConfigBlock(entry) {
|
|
33
|
+
const lines = [
|
|
34
|
+
REPLICAS_MARKER_START,
|
|
35
|
+
`Host ${entry.host}`,
|
|
36
|
+
` HostName ${entry.hostname}`,
|
|
37
|
+
` User ${entry.user}`,
|
|
38
|
+
` IdentityFile ${entry.identityFile}`,
|
|
39
|
+
` StrictHostKeyChecking no`,
|
|
40
|
+
` UserKnownHostsFile /dev/null`,
|
|
41
|
+
];
|
|
42
|
+
if (entry.portForwards && entry.portForwards.size > 0) {
|
|
43
|
+
for (const [localPort, remotePort] of entry.portForwards) {
|
|
44
|
+
lines.push(` LocalForward ${localPort} localhost:${remotePort}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
lines.push(REPLICAS_MARKER_END);
|
|
48
|
+
return lines.join('\n');
|
|
49
|
+
}
|
|
50
|
+
function removeSSHConfigEntry(host) {
|
|
51
|
+
const config = readSSHConfig();
|
|
52
|
+
const lines = config.split('\n');
|
|
53
|
+
const result = [];
|
|
54
|
+
let inTargetBlock = false;
|
|
55
|
+
for (const line of lines) {
|
|
56
|
+
if (line.trim() === REPLICAS_MARKER_START) {
|
|
57
|
+
const nextLines = lines.slice(lines.indexOf(line) + 1, lines.indexOf(line) + 3);
|
|
58
|
+
const hostLine = nextLines.find(l => l.trim().startsWith('Host '));
|
|
59
|
+
if (hostLine && hostLine.includes(host)) {
|
|
60
|
+
inTargetBlock = true;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
result.push(line);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (line.trim() === REPLICAS_MARKER_END) {
|
|
67
|
+
if (inTargetBlock) {
|
|
68
|
+
inTargetBlock = false;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
result.push(line);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (inTargetBlock) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
result.push(line);
|
|
78
|
+
}
|
|
79
|
+
writeSSHConfig(result.join('\n').trim() + '\n');
|
|
80
|
+
}
|
|
81
|
+
function addOrUpdateSSHConfigEntry(entry) {
|
|
82
|
+
let config = readSSHConfig();
|
|
83
|
+
const lines = config.split('\n');
|
|
84
|
+
const result = [];
|
|
85
|
+
let inTargetBlock = false;
|
|
86
|
+
for (const line of lines) {
|
|
87
|
+
if (line.trim() === REPLICAS_MARKER_START) {
|
|
88
|
+
const nextLines = lines.slice(lines.indexOf(line) + 1, lines.indexOf(line) + 3);
|
|
89
|
+
const hostLine = nextLines.find(l => l.trim().startsWith('Host '));
|
|
90
|
+
if (hostLine && hostLine.includes(entry.host)) {
|
|
91
|
+
inTargetBlock = true;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
result.push(line);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (line.trim() === REPLICAS_MARKER_END) {
|
|
98
|
+
if (inTargetBlock) {
|
|
99
|
+
inTargetBlock = false;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
result.push(line);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (inTargetBlock) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
result.push(line);
|
|
109
|
+
}
|
|
110
|
+
config = result.join('\n');
|
|
111
|
+
const newEntry = generateConfigBlock(entry);
|
|
112
|
+
let finalConfig = config.trim();
|
|
113
|
+
if (finalConfig.length > 0) {
|
|
114
|
+
finalConfig += '\n\n';
|
|
115
|
+
}
|
|
116
|
+
finalConfig += newEntry + '\n';
|
|
117
|
+
writeSSHConfig(finalConfig);
|
|
118
|
+
}
|
|
119
|
+
function getWorkspaceHostAlias(workspaceName) {
|
|
120
|
+
return `replicas-${workspaceName.toLowerCase().replace(/[^a-z0-9-]/g, '-')}`;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=ssh-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh-config.js","sourceRoot":"","sources":["../../src/lib/ssh-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Workspace } from '../types';
|
|
2
|
+
export interface WorkspaceConnectionInfo {
|
|
3
|
+
workspace: Workspace;
|
|
4
|
+
sshKeyPath: string;
|
|
5
|
+
portMappings: Map<number, number>;
|
|
6
|
+
repoName: string | null;
|
|
7
|
+
}
|
|
8
|
+
export declare function prepareWorkspaceConnection(workspaceName: string, options: {
|
|
9
|
+
copy?: boolean;
|
|
10
|
+
}): Promise<WorkspaceConnectionInfo>;
|
|
11
|
+
//# sourceMappingURL=workspace-connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-connection.d.ts","sourceRoot":"","sources":["../../src/lib/workspace-connection.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAcrC,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,uBAAuB,CAAC,CAuIlC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
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.prepareWorkspaceConnection = prepareWorkspaceConnection;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const config_1 = require("./config");
|
|
12
|
+
const api_1 = require("./api");
|
|
13
|
+
const ssh_1 = require("./ssh");
|
|
14
|
+
const git_1 = require("./git");
|
|
15
|
+
const replicas_config_1 = require("./replicas-config");
|
|
16
|
+
const ports_1 = require("./ports");
|
|
17
|
+
async function prepareWorkspaceConnection(workspaceName, options) {
|
|
18
|
+
const orgId = (0, config_1.getOrganizationId)();
|
|
19
|
+
if (!orgId) {
|
|
20
|
+
throw new Error('No organization selected. Please run "replicas org switch" first.');
|
|
21
|
+
}
|
|
22
|
+
// Step 1: Query workspaces by name
|
|
23
|
+
console.log(chalk_1.default.blue(`\nSearching for workspace: ${workspaceName}...`));
|
|
24
|
+
const response = await (0, api_1.orgAuthenticatedFetch)(`/api/workspaces?name=${encodeURIComponent(workspaceName)}`);
|
|
25
|
+
if (response.workspaces.length === 0) {
|
|
26
|
+
throw new Error(`No workspaces found with name matching "${workspaceName}".`);
|
|
27
|
+
}
|
|
28
|
+
// Step 2: If multiple workspaces, prompt user to select one
|
|
29
|
+
let selectedWorkspace;
|
|
30
|
+
if (response.workspaces.length === 1) {
|
|
31
|
+
selectedWorkspace = response.workspaces[0];
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log(chalk_1.default.yellow(`\nFound ${response.workspaces.length} workspaces matching "${workspaceName}":`));
|
|
35
|
+
const selectResponse = await (0, prompts_1.default)({
|
|
36
|
+
type: 'select',
|
|
37
|
+
name: 'workspaceId',
|
|
38
|
+
message: 'Select a workspace:',
|
|
39
|
+
choices: response.workspaces.map(ws => ({
|
|
40
|
+
title: `${ws.name} (${ws.status || 'unknown'})`,
|
|
41
|
+
value: ws.id,
|
|
42
|
+
description: `IP: ${ws.ipv4_address || 'N/A'} | Instance: ${ws.instance_type || 'N/A'}`,
|
|
43
|
+
})),
|
|
44
|
+
});
|
|
45
|
+
if (!selectResponse.workspaceId) {
|
|
46
|
+
throw new Error('Workspace selection cancelled.');
|
|
47
|
+
}
|
|
48
|
+
selectedWorkspace = response.workspaces.find(ws => ws.id === selectResponse.workspaceId);
|
|
49
|
+
}
|
|
50
|
+
console.log(chalk_1.default.green(`\n✓ Selected workspace: ${selectedWorkspace.name}`));
|
|
51
|
+
console.log(chalk_1.default.gray(` IP: ${selectedWorkspace.ipv4_address}`));
|
|
52
|
+
console.log(chalk_1.default.gray(` Status: ${selectedWorkspace.status || 'unknown'}`));
|
|
53
|
+
if (!selectedWorkspace.ipv4_address) {
|
|
54
|
+
throw new Error('Workspace does not have an IP address. It may not be running yet.');
|
|
55
|
+
}
|
|
56
|
+
// Step 3: Get SSH key
|
|
57
|
+
console.log(chalk_1.default.blue('\nRetrieving SSH key...'));
|
|
58
|
+
const privateKey = await (0, ssh_1.getSSHKey)(selectedWorkspace.ssh_key_id);
|
|
59
|
+
// Write key to a temporary file for SSH
|
|
60
|
+
const keyPath = path_1.default.join(config_1.CONFIG_DIR, 'keys', `${selectedWorkspace.ssh_key_id}.pem`);
|
|
61
|
+
fs_1.default.writeFileSync(keyPath, privateKey, { mode: 0o600 });
|
|
62
|
+
console.log(chalk_1.default.green('✓ SSH key ready'));
|
|
63
|
+
// Step 4: Handle --copy flag
|
|
64
|
+
let repoName = null;
|
|
65
|
+
if (options.copy) {
|
|
66
|
+
if (!(0, git_1.isInsideGitRepo)()) {
|
|
67
|
+
console.log(chalk_1.default.yellow('\nWarning: Not inside a git repository. Skipping file copy.'));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
repoName = (0, git_1.getGitRepoName)();
|
|
71
|
+
const replicasConfig = (0, replicas_config_1.readReplicasConfig)();
|
|
72
|
+
if (!replicasConfig || !replicasConfig.copy || replicasConfig.copy.length === 0) {
|
|
73
|
+
console.log(chalk_1.default.yellow('\nNo files to copy (replicas.json not found or empty).'));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(chalk_1.default.blue(`\nCopying files to workspace (repo: ${repoName})...`));
|
|
77
|
+
const { valid, invalid } = (0, replicas_config_1.validateCopyFiles)(replicasConfig.copy);
|
|
78
|
+
if (invalid.length > 0) {
|
|
79
|
+
console.log(chalk_1.default.yellow(`\nWarning: ${invalid.length} file(s) not found locally:`));
|
|
80
|
+
invalid.forEach(file => console.log(chalk_1.default.gray(` - ${file}`)));
|
|
81
|
+
}
|
|
82
|
+
for (const file of valid) {
|
|
83
|
+
const localPath = (0, replicas_config_1.getAbsoluteCopyPath)(file);
|
|
84
|
+
const remotePath = `/home/ubuntu/workspaces/${repoName}/${file}`;
|
|
85
|
+
console.log(chalk_1.default.gray(` Copying ${file}...`));
|
|
86
|
+
try {
|
|
87
|
+
await (0, ssh_1.scpCopyFile)(keyPath, localPath, remotePath, selectedWorkspace.ipv4_address);
|
|
88
|
+
console.log(chalk_1.default.green(` ✓ ${file}`));
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.log(chalk_1.default.red(` ✗ Failed to copy ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
console.log(chalk_1.default.green(`\n✓ File copy complete (${valid.length} files)`));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (!repoName && (0, git_1.isInsideGitRepo)()) {
|
|
99
|
+
try {
|
|
100
|
+
repoName = (0, git_1.getGitRepoName)();
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Ignore errors, repo name is optional
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Step 5: Handle port forwarding
|
|
107
|
+
const portMappings = new Map();
|
|
108
|
+
if ((0, git_1.isInsideGitRepo)()) {
|
|
109
|
+
const replicasConfig = (0, replicas_config_1.readReplicasConfig)();
|
|
110
|
+
if (replicasConfig && replicasConfig.ports && replicasConfig.ports.length > 0) {
|
|
111
|
+
console.log(chalk_1.default.blue('\nSetting up port forwarding...'));
|
|
112
|
+
const mappings = await (0, ports_1.mapPortsToLocal)(replicasConfig.ports);
|
|
113
|
+
for (const [remotePort, localPort] of mappings) {
|
|
114
|
+
portMappings.set(remotePort, localPort);
|
|
115
|
+
console.log(chalk_1.default.gray(` Forwarding localhost:${localPort} -> workspace:${remotePort}`));
|
|
116
|
+
}
|
|
117
|
+
console.log(chalk_1.default.green('✓ Port forwarding configured'));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
workspace: selectedWorkspace,
|
|
122
|
+
sshKeyPath: keyPath,
|
|
123
|
+
portMappings,
|
|
124
|
+
repoName,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=workspace-connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-connection.js","sourceRoot":"","sources":["../../src/lib/workspace-connection.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB"}
|