lobstercage-cli 0.3.2 → 0.4.0
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/apikeys.d.ts.map +1 -1
- package/dist/commands/apikeys.js +14 -0
- package/dist/commands/apikeys.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +1 -0
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/billing.d.ts.map +1 -1
- package/dist/commands/billing.js +25 -5
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/cages.d.ts +0 -1
- package/dist/commands/cages.d.ts.map +1 -1
- package/dist/commands/cages.js +20 -15
- package/dist/commands/cages.js.map +1 -1
- package/dist/commands/config.d.ts +25 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +148 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +22 -0
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/exec.d.ts +1 -0
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +23 -2
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/migrate.d.ts +28 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +314 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/ssh-config.d.ts.map +1 -1
- package/dist/commands/ssh-config.js +5 -0
- package/dist/commands/ssh-config.js.map +1 -1
- package/dist/commands/tail.d.ts +5 -0
- package/dist/commands/tail.d.ts.map +1 -1
- package/dist/commands/tail.js +20 -0
- package/dist/commands/tail.js.map +1 -1
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +23 -9
- package/dist/commands/tunnel.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -9
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +184 -1
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +202 -3
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/error-handler.d.ts.map +1 -1
- package/dist/lib/error-handler.js +24 -3
- package/dist/lib/error-handler.js.map +1 -1
- package/dist/lib/migrate/analyze.d.ts +15 -0
- package/dist/lib/migrate/analyze.d.ts.map +1 -0
- package/dist/lib/migrate/analyze.js +241 -0
- package/dist/lib/migrate/analyze.js.map +1 -0
- package/dist/lib/migrate/cost.d.ts +16 -0
- package/dist/lib/migrate/cost.d.ts.map +1 -0
- package/dist/lib/migrate/cost.js +68 -0
- package/dist/lib/migrate/cost.js.map +1 -0
- package/dist/lib/migrate/detect.d.ts +12 -0
- package/dist/lib/migrate/detect.d.ts.map +1 -0
- package/dist/lib/migrate/detect.js +392 -0
- package/dist/lib/migrate/detect.js.map +1 -0
- package/dist/lib/migrate/display.d.ts +14 -0
- package/dist/lib/migrate/display.d.ts.map +1 -0
- package/dist/lib/migrate/display.js +157 -0
- package/dist/lib/migrate/display.js.map +1 -0
- package/dist/lib/migrate/platform.d.ts +16 -0
- package/dist/lib/migrate/platform.d.ts.map +1 -0
- package/dist/lib/migrate/platform.js +178 -0
- package/dist/lib/migrate/platform.js.map +1 -0
- package/dist/lib/migrate/types.d.ts +84 -0
- package/dist/lib/migrate/types.d.ts.map +1 -0
- package/dist/lib/migrate/types.js +6 -0
- package/dist/lib/migrate/types.js.map +1 -0
- package/dist/lib/migrate/utils.d.ts +9 -0
- package/dist/lib/migrate/utils.d.ts.map +1 -0
- package/dist/lib/migrate/utils.js +19 -0
- package/dist/lib/migrate/utils.js.map +1 -0
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +0 -1
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/ssh-errors.d.ts +5 -0
- package/dist/lib/ssh-errors.d.ts.map +1 -0
- package/dist/lib/ssh-errors.js +46 -0
- package/dist/lib/ssh-errors.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +21 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/types/index.d.ts +6 -5
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/commands/env.js
CHANGED
|
@@ -260,28 +260,50 @@ function createEnvCommands(program) {
|
|
|
260
260
|
.alias('ls')
|
|
261
261
|
.description('List environment variables')
|
|
262
262
|
.option('--json', 'Output as JSON')
|
|
263
|
+
.addHelpText('after', `
|
|
264
|
+
Examples:
|
|
265
|
+
$ lobster env list my-cage # List all env vars for a cage
|
|
266
|
+
$ lobster env ls my-cage # Same (alias)
|
|
267
|
+
$ lobster env list my-cage --json # Output as JSON`)
|
|
263
268
|
.action(envListHandler);
|
|
264
269
|
env
|
|
265
270
|
.command('set <cage> <keyValues...>')
|
|
266
271
|
.description('Set environment variables (KEY=VALUE format)')
|
|
267
272
|
.option('--no-scan', 'Skip security scan')
|
|
268
273
|
.option('--json', 'Output as JSON')
|
|
274
|
+
.addHelpText('after', `
|
|
275
|
+
Examples:
|
|
276
|
+
$ lobster env set my-cage API_KEY=sk-123 # Set a single variable
|
|
277
|
+
$ lobster env set my-cage DB_HOST=db.example.com DB_PORT=5432 # Set multiple
|
|
278
|
+
$ lobster env set my-cage SECRET=val --no-scan # Skip security scan`)
|
|
269
279
|
.action(envSetHandler);
|
|
270
280
|
env
|
|
271
281
|
.command('get <cage> <name>')
|
|
272
282
|
.description('Get environment variable value')
|
|
273
283
|
.option('--json', 'Output as JSON')
|
|
284
|
+
.addHelpText('after', `
|
|
285
|
+
Examples:
|
|
286
|
+
$ lobster env get my-cage API_KEY # Print the value (for scripting)
|
|
287
|
+
$ lobster env get my-cage API_KEY --json # Output as JSON`)
|
|
274
288
|
.action(envGetHandler);
|
|
275
289
|
env
|
|
276
290
|
.command('delete <cage> <names...>')
|
|
277
291
|
.alias('rm')
|
|
278
292
|
.description('Delete environment variables')
|
|
279
293
|
.option('--json', 'Output as JSON')
|
|
294
|
+
.addHelpText('after', `
|
|
295
|
+
Examples:
|
|
296
|
+
$ lobster env delete my-cage OLD_VAR # Delete one variable
|
|
297
|
+
$ lobster env rm my-cage VAR_A VAR_B # Delete multiple (alias)`)
|
|
280
298
|
.action(envDeleteHandler);
|
|
281
299
|
env
|
|
282
300
|
.command('scan <cage>')
|
|
283
301
|
.description('Scan environment variables for security issues')
|
|
284
302
|
.option('--json', 'Output as JSON')
|
|
303
|
+
.addHelpText('after', `
|
|
304
|
+
Examples:
|
|
305
|
+
$ lobster env scan my-cage # Check for leaked secrets or weak values
|
|
306
|
+
$ lobster env scan my-cage --json # Output warnings as JSON`)
|
|
285
307
|
.action(envScanHandler);
|
|
286
308
|
}
|
|
287
309
|
//# sourceMappingURL=env.js.map
|
package/dist/commands/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BH,wCAsBC;AAKD,sCA4DC;AAKD,sCA4BC;AAKD,4CA4DC;AAKD,wCAsBC;AAKD,
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/exec.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ type ExecOptions = {
|
|
|
9
9
|
local?: boolean;
|
|
10
10
|
shell?: string;
|
|
11
11
|
};
|
|
12
|
+
export declare function formatRemoteExecError(name: string, args: string[]): string;
|
|
12
13
|
export declare function execHandler(name: string, args: string[], options: ExecOptions): Promise<void>;
|
|
13
14
|
/**
|
|
14
15
|
* Detect whether bash is available in the container, falling back to sh.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/commands/exec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/commands/exec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,KAAK,WAAW,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAmB1E;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAMzD;AAgED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgBxD"}
|
package/dist/commands/exec.js
CHANGED
|
@@ -39,6 +39,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
39
39
|
};
|
|
40
40
|
})();
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.formatRemoteExecError = formatRemoteExecError;
|
|
42
43
|
exports.execHandler = execHandler;
|
|
43
44
|
exports.detectShell = detectShell;
|
|
44
45
|
exports.createExecCommand = createExecCommand;
|
|
@@ -46,9 +47,29 @@ const child_process_1 = require("child_process");
|
|
|
46
47
|
const docker = __importStar(require("../lib/docker"));
|
|
47
48
|
const output = __importStar(require("../lib/output"));
|
|
48
49
|
const error_handler_1 = require("../lib/error-handler");
|
|
50
|
+
const utils_1 = require("../lib/utils");
|
|
51
|
+
function formatRemoteExecError(name, args) {
|
|
52
|
+
const hasCommand = args.length > 0;
|
|
53
|
+
const command = args.join(' ');
|
|
54
|
+
const lines = ['Remote exec requires an SSH tunnel.', ''];
|
|
55
|
+
lines.push(' Instead, try:');
|
|
56
|
+
lines.push(` lobster ssh ${name} # Interactive shell`);
|
|
57
|
+
if (hasCommand) {
|
|
58
|
+
lines.push(` lobster ssh ${name} -- ${command} # Run a command`);
|
|
59
|
+
}
|
|
60
|
+
lines.push('');
|
|
61
|
+
lines.push(' Or for local Docker:');
|
|
62
|
+
if (hasCommand) {
|
|
63
|
+
lines.push(` lobster exec ${name} --local -- ${command}`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
lines.push(` lobster exec ${name} --local`);
|
|
67
|
+
}
|
|
68
|
+
return lines.join('\n');
|
|
69
|
+
}
|
|
49
70
|
async function execHandler(name, args, options) {
|
|
50
71
|
if (!options.local) {
|
|
51
|
-
output.error(
|
|
72
|
+
output.error(formatRemoteExecError(name, args));
|
|
52
73
|
process.exit(1);
|
|
53
74
|
}
|
|
54
75
|
return execHandlerLocal(name, args, options);
|
|
@@ -80,7 +101,7 @@ async function execHandlerLocal(name, args, options) {
|
|
|
80
101
|
try {
|
|
81
102
|
const cage = await docker.getCage(name);
|
|
82
103
|
if (cage.status !== 'running') {
|
|
83
|
-
output.error(
|
|
104
|
+
output.error((0, utils_1.formatCageNotRunningError)(name, cage.status));
|
|
84
105
|
process.exit(1);
|
|
85
106
|
}
|
|
86
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/commands/exec.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/commands/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migrate Command
|
|
3
|
+
*
|
|
4
|
+
* Scans the current environment, detects project type, platform, resource usage,
|
|
5
|
+
* calculates cost savings, and optionally migrates the agent into a LobsterCage cage.
|
|
6
|
+
*
|
|
7
|
+
* Designed to be run by either a human operator or the agent itself — the agent
|
|
8
|
+
* knows its own environment best.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* lobster migrate # Interactive scan + migrate
|
|
12
|
+
* lobster migrate --dry-run # Analyze only
|
|
13
|
+
* lobster migrate --json # Machine-readable output (for agents)
|
|
14
|
+
* lobster migrate --cost 14 # Specify current monthly cost
|
|
15
|
+
* lobster migrate --yes # Skip confirmation (for agent self-migration)
|
|
16
|
+
*/
|
|
17
|
+
import { Command } from 'commander';
|
|
18
|
+
interface MigrateOptions {
|
|
19
|
+
json?: boolean;
|
|
20
|
+
dryRun?: boolean;
|
|
21
|
+
dir?: string;
|
|
22
|
+
cost?: string;
|
|
23
|
+
yes?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function migrateHandler(options: MigrateOptions): Promise<void>;
|
|
26
|
+
export declare function createMigrateCommand(program: Command): void;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6I3E;AA4GD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB3D"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migrate Command
|
|
4
|
+
*
|
|
5
|
+
* Scans the current environment, detects project type, platform, resource usage,
|
|
6
|
+
* calculates cost savings, and optionally migrates the agent into a LobsterCage cage.
|
|
7
|
+
*
|
|
8
|
+
* Designed to be run by either a human operator or the agent itself — the agent
|
|
9
|
+
* knows its own environment best.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* lobster migrate # Interactive scan + migrate
|
|
13
|
+
* lobster migrate --dry-run # Analyze only
|
|
14
|
+
* lobster migrate --json # Machine-readable output (for agents)
|
|
15
|
+
* lobster migrate --cost 14 # Specify current monthly cost
|
|
16
|
+
* lobster migrate --yes # Skip confirmation (for agent self-migration)
|
|
17
|
+
*/
|
|
18
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
21
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
22
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
23
|
+
}
|
|
24
|
+
Object.defineProperty(o, k2, desc);
|
|
25
|
+
}) : (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
o[k2] = m[k];
|
|
28
|
+
}));
|
|
29
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
30
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
31
|
+
}) : function(o, v) {
|
|
32
|
+
o["default"] = v;
|
|
33
|
+
});
|
|
34
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
35
|
+
var ownKeys = function(o) {
|
|
36
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
37
|
+
var ar = [];
|
|
38
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
39
|
+
return ar;
|
|
40
|
+
};
|
|
41
|
+
return ownKeys(o);
|
|
42
|
+
};
|
|
43
|
+
return function (mod) {
|
|
44
|
+
if (mod && mod.__esModule) return mod;
|
|
45
|
+
var result = {};
|
|
46
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
47
|
+
__setModuleDefault(result, mod);
|
|
48
|
+
return result;
|
|
49
|
+
};
|
|
50
|
+
})();
|
|
51
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
52
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
53
|
+
};
|
|
54
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
+
exports.migrateHandler = migrateHandler;
|
|
56
|
+
exports.createMigrateCommand = createMigrateCommand;
|
|
57
|
+
const ora_1 = __importDefault(require("ora"));
|
|
58
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
59
|
+
const output = __importStar(require("../lib/output"));
|
|
60
|
+
const error_handler_1 = require("../lib/error-handler");
|
|
61
|
+
const utils_1 = require("../lib/utils");
|
|
62
|
+
const detect_1 = require("../lib/migrate/detect");
|
|
63
|
+
const platform_1 = require("../lib/migrate/platform");
|
|
64
|
+
const analyze_1 = require("../lib/migrate/analyze");
|
|
65
|
+
const cost_1 = require("../lib/migrate/cost");
|
|
66
|
+
const display = __importStar(require("../lib/migrate/display"));
|
|
67
|
+
const utils_2 = require("../lib/migrate/utils");
|
|
68
|
+
async function migrateHandler(options) {
|
|
69
|
+
const dir = options.dir || process.cwd();
|
|
70
|
+
const isJson = !!options.json;
|
|
71
|
+
if (!isJson) {
|
|
72
|
+
display.displayBanner();
|
|
73
|
+
}
|
|
74
|
+
// ── Phase 1: Detect project ──
|
|
75
|
+
const projectSpinner = isJson ? null : (0, ora_1.default)('Scanning project...').start();
|
|
76
|
+
let project;
|
|
77
|
+
try {
|
|
78
|
+
project = await (0, detect_1.detectProject)(dir);
|
|
79
|
+
projectSpinner?.stop();
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
(0, error_handler_1.handleError)(err, { spinner: projectSpinner ?? undefined, json: isJson, context: 'scanning project' });
|
|
83
|
+
return; // unreachable — handleError exits, but satisfies TS
|
|
84
|
+
}
|
|
85
|
+
if (!isJson) {
|
|
86
|
+
display.displayProject(project);
|
|
87
|
+
}
|
|
88
|
+
if (project.type === 'unknown') {
|
|
89
|
+
if (isJson) {
|
|
90
|
+
output.json({ error: 'unknown_project', message: 'Could not detect project type' });
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
output.warning('Could not detect project type. Run this from your project root.');
|
|
94
|
+
}
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
// ── Phase 2: Detect platform ──
|
|
98
|
+
const platformSpinner = isJson ? null : (0, ora_1.default)('Detecting platform...').start();
|
|
99
|
+
let platform;
|
|
100
|
+
try {
|
|
101
|
+
platform = await (0, platform_1.detectPlatform)();
|
|
102
|
+
platformSpinner?.stop();
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
(0, error_handler_1.handleError)(err, { spinner: platformSpinner ?? undefined, json: isJson, context: 'detecting platform' });
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!isJson) {
|
|
109
|
+
display.displayPlatform(platform);
|
|
110
|
+
}
|
|
111
|
+
// Resolve monthly cost
|
|
112
|
+
let monthlyCost = platform.monthlyCost;
|
|
113
|
+
if (options.cost) {
|
|
114
|
+
const parsed = parseFloat(options.cost);
|
|
115
|
+
if (isNaN(parsed) || parsed < 0) {
|
|
116
|
+
if (isJson) {
|
|
117
|
+
output.json({ error: 'invalid_cost', message: 'Invalid --cost value: must be a non-negative number' });
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
output.error('Invalid --cost value: must be a non-negative number');
|
|
121
|
+
}
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
monthlyCost = parsed;
|
|
125
|
+
}
|
|
126
|
+
else if (monthlyCost === null && !isJson) {
|
|
127
|
+
const answer = await inquirer_1.default.prompt([{
|
|
128
|
+
type: 'input',
|
|
129
|
+
name: 'cost',
|
|
130
|
+
message: 'What do you pay per month for this server? ($/mo)',
|
|
131
|
+
validate: (v) => {
|
|
132
|
+
const n = parseFloat(v);
|
|
133
|
+
return !isNaN(n) && n >= 0 ? true : 'Enter a valid number';
|
|
134
|
+
},
|
|
135
|
+
}]);
|
|
136
|
+
monthlyCost = parseFloat(answer.cost);
|
|
137
|
+
}
|
|
138
|
+
monthlyCost = monthlyCost ?? 0;
|
|
139
|
+
// ── Phase 3: Sample resources ──
|
|
140
|
+
const resourceSpinner = isJson ? null : (0, ora_1.default)('Sampling resources...').start();
|
|
141
|
+
let resources, activeTime;
|
|
142
|
+
try {
|
|
143
|
+
resources = await (0, analyze_1.sampleResources)();
|
|
144
|
+
activeTime = (0, analyze_1.estimateActiveTime)(resources, project.triggers);
|
|
145
|
+
resourceSpinner?.stop();
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
(0, error_handler_1.handleError)(err, { spinner: resourceSpinner ?? undefined, json: isJson, context: 'analyzing resources' });
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (!isJson) {
|
|
152
|
+
display.displayResources(resources, activeTime);
|
|
153
|
+
}
|
|
154
|
+
// ── Phase 4: Cost comparison ──
|
|
155
|
+
const cost = (0, cost_1.calculateCost)(resources, activeTime, monthlyCost);
|
|
156
|
+
if (!isJson) {
|
|
157
|
+
console.log();
|
|
158
|
+
display.displayCostComparison(cost);
|
|
159
|
+
}
|
|
160
|
+
// ── Phase 5: Migration plan ──
|
|
161
|
+
const plan = buildMigrationPlan(project, cost);
|
|
162
|
+
if (!isJson) {
|
|
163
|
+
display.displayPlan(plan);
|
|
164
|
+
}
|
|
165
|
+
// ── Dry run stops here ──
|
|
166
|
+
if (options.dryRun) {
|
|
167
|
+
if (isJson) {
|
|
168
|
+
const result = { project, platform, resources, activeTime, cost, plan };
|
|
169
|
+
output.json(result);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
console.log();
|
|
173
|
+
output.info('Dry run complete. Run without --dry-run to migrate.');
|
|
174
|
+
}
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// ── JSON output (non-dry-run) ──
|
|
178
|
+
if (isJson) {
|
|
179
|
+
const result = { project, platform, resources, activeTime, cost, plan };
|
|
180
|
+
output.json(result);
|
|
181
|
+
}
|
|
182
|
+
// ── Phase 6: Confirm and execute ──
|
|
183
|
+
if (!options.yes && !isJson) {
|
|
184
|
+
console.log();
|
|
185
|
+
const { confirm } = await inquirer_1.default.prompt([{
|
|
186
|
+
type: 'confirm',
|
|
187
|
+
name: 'confirm',
|
|
188
|
+
message: 'Migrate now?',
|
|
189
|
+
default: false,
|
|
190
|
+
}]);
|
|
191
|
+
if (!confirm) {
|
|
192
|
+
output.info('Migration cancelled.');
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
(0, utils_1.requireAuth)();
|
|
197
|
+
await executeMigration(plan, { json: isJson });
|
|
198
|
+
}
|
|
199
|
+
function buildMigrationPlan(project, cost) {
|
|
200
|
+
const steps = [];
|
|
201
|
+
let order = 1;
|
|
202
|
+
steps.push({
|
|
203
|
+
order: order++,
|
|
204
|
+
description: `Create cage "${project.name}" (${cost.cageSize})`,
|
|
205
|
+
action: 'create-cage',
|
|
206
|
+
automated: true,
|
|
207
|
+
});
|
|
208
|
+
if (project.envVarCount > 0) {
|
|
209
|
+
steps.push({
|
|
210
|
+
order: order++,
|
|
211
|
+
description: `Set ${project.envVarCount} environment variables`,
|
|
212
|
+
action: 'set-env',
|
|
213
|
+
automated: true,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
for (const trigger of project.triggers) {
|
|
217
|
+
if (trigger.type === 'webhook' && trigger.service) {
|
|
218
|
+
steps.push({
|
|
219
|
+
order: order++,
|
|
220
|
+
description: `Configure ${trigger.service} webhook trigger`,
|
|
221
|
+
action: 'configure-webhook',
|
|
222
|
+
automated: false,
|
|
223
|
+
details: `Update ${trigger.service} webhook URL to your cage's webhook endpoint`,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
if (trigger.type === 'cron' && trigger.schedule) {
|
|
227
|
+
steps.push({
|
|
228
|
+
order: order++,
|
|
229
|
+
description: `Set up cron: ${trigger.schedule}${trigger.command ? ` → ${trigger.command}` : ''}`,
|
|
230
|
+
action: 'configure-cron',
|
|
231
|
+
automated: false,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
steps.push({
|
|
236
|
+
order: order++,
|
|
237
|
+
description: 'Deploy code via SSH',
|
|
238
|
+
action: 'deploy-code',
|
|
239
|
+
automated: false,
|
|
240
|
+
details: 'SSH into your cage and deploy your application code',
|
|
241
|
+
});
|
|
242
|
+
return {
|
|
243
|
+
cageName: (0, utils_2.sanitizeCageName)(project.name),
|
|
244
|
+
cageSize: cost.cageSize,
|
|
245
|
+
image: 'default',
|
|
246
|
+
envVars: project.envVars,
|
|
247
|
+
triggers: project.triggers,
|
|
248
|
+
steps,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
async function executeMigration(plan, options) {
|
|
252
|
+
const api = await Promise.resolve().then(() => __importStar(require('../lib/api')));
|
|
253
|
+
// Step 1: Create cage
|
|
254
|
+
const createSpinner = options.json ? null : (0, ora_1.default)(`Creating cage "${plan.cageName}"...`).start();
|
|
255
|
+
try {
|
|
256
|
+
const cage = await api.createCage({
|
|
257
|
+
name: plan.cageName,
|
|
258
|
+
image: plan.image,
|
|
259
|
+
size: plan.cageSize,
|
|
260
|
+
});
|
|
261
|
+
if (createSpinner) {
|
|
262
|
+
createSpinner.succeed(`Created cage "${plan.cageName}" (${cage.id})`);
|
|
263
|
+
}
|
|
264
|
+
// Step 2: Set env vars
|
|
265
|
+
if (Object.keys(plan.envVars).length > 0) {
|
|
266
|
+
const envSpinner = options.json ? null : (0, ora_1.default)(`Setting ${Object.keys(plan.envVars).length} environment variables...`).start();
|
|
267
|
+
try {
|
|
268
|
+
await api.setEnvVars(cage.id, { variables: plan.envVars, scan: true });
|
|
269
|
+
if (envSpinner) {
|
|
270
|
+
envSpinner.succeed(`Set ${Object.keys(plan.envVars).length} environment variables`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
catch (envErr) {
|
|
274
|
+
envSpinner?.stop();
|
|
275
|
+
output.warning(`Some env vars failed to set: ${envErr instanceof Error ? envErr.message : String(envErr)}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Display result
|
|
279
|
+
if (options.json) {
|
|
280
|
+
output.json({
|
|
281
|
+
success: true,
|
|
282
|
+
cageId: cage.id,
|
|
283
|
+
cageName: plan.cageName,
|
|
284
|
+
webhookUrl: cage.webhookUrl,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
display.displayResult(plan.cageName);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
catch (err) {
|
|
292
|
+
(0, error_handler_1.handleError)(err, { spinner: createSpinner ?? undefined, json: options.json, context: 'creating cage' });
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
function createMigrateCommand(program) {
|
|
296
|
+
program
|
|
297
|
+
.command('migrate')
|
|
298
|
+
.description('Analyze your environment and migrate an agent to LobsterCage')
|
|
299
|
+
.option('--json', 'Output as JSON (ideal for agent self-migration)')
|
|
300
|
+
.option('--dry-run', 'Analyze only — do not create a cage')
|
|
301
|
+
.option('--dir <path>', 'Project directory to scan (default: cwd)')
|
|
302
|
+
.option('--cost <amount>', 'Current monthly hosting cost in dollars')
|
|
303
|
+
.option('--yes', 'Skip confirmation prompt (for non-interactive use)')
|
|
304
|
+
.addHelpText('after', `
|
|
305
|
+
Examples:
|
|
306
|
+
$ lobster migrate # Interactive scan + migrate
|
|
307
|
+
$ lobster migrate --dry-run # Analyze without migrating
|
|
308
|
+
$ lobster migrate --json # Machine-readable output
|
|
309
|
+
$ lobster migrate --cost 14 # Specify current monthly cost
|
|
310
|
+
$ lobster migrate --dir /opt/mybot # Scan a different directory
|
|
311
|
+
$ lobster migrate --json --yes # Agent self-migration (no prompts)`)
|
|
312
|
+
.action(migrateHandler);
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-config.d.ts","sourceRoot":"","sources":["../../src/commands/ssh-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWpG;AAqED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"ssh-config.d.ts","sourceRoot":"","sources":["../../src/commands/ssh-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWpG;AAqED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAY7D"}
|
|
@@ -143,6 +143,11 @@ function createSshConfigCommand(program) {
|
|
|
143
143
|
.description('Install SSH config for *.lobster hosts')
|
|
144
144
|
.option('--print', 'Print the config block without installing')
|
|
145
145
|
.option('--remove', 'Remove the LobsterCage SSH config block')
|
|
146
|
+
.addHelpText('after', `
|
|
147
|
+
Examples:
|
|
148
|
+
$ lobster ssh-config # Install config into ~/.ssh/config
|
|
149
|
+
$ lobster ssh-config --print # Preview the config block
|
|
150
|
+
$ lobster ssh-config --remove # Remove the LobsterCage config block`)
|
|
146
151
|
.action(sshConfigHandler);
|
|
147
152
|
}
|
|
148
153
|
//# sourceMappingURL=ssh-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-config.js","sourceRoot":"","sources":["../../src/commands/ssh-config.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BH,4CAWC;AAwED,
|
|
1
|
+
{"version":3,"file":"ssh-config.js","sourceRoot":"","sources":["../../src/commands/ssh-config.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/tail.d.ts
CHANGED
|
@@ -4,10 +4,15 @@
|
|
|
4
4
|
* `lobster tail <cage-name>` polls cage lifecycle events and prints
|
|
5
5
|
* them to the terminal, similar to `tail -f` for logs.
|
|
6
6
|
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
7
8
|
export declare function tailHandler(nameOrId: string, options: {
|
|
8
9
|
lines?: string;
|
|
9
10
|
follow?: boolean;
|
|
10
11
|
json?: boolean;
|
|
11
12
|
verbose?: boolean;
|
|
12
13
|
}): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Create tail command
|
|
16
|
+
*/
|
|
17
|
+
export declare function createTailCommand(program: Command): void;
|
|
13
18
|
//# sourceMappingURL=tail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../src/commands/tail.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../src/commands/tail.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACA,OAAO,CAAC,IAAI,CAAC,CA8Ef;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAexD"}
|
package/dist/commands/tail.js
CHANGED
|
@@ -43,6 +43,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
43
43
|
};
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
exports.tailHandler = tailHandler;
|
|
46
|
+
exports.createTailCommand = createTailCommand;
|
|
46
47
|
const chalk_1 = __importDefault(require("chalk"));
|
|
47
48
|
const ora_1 = __importDefault(require("ora"));
|
|
48
49
|
const api = __importStar(require("../lib/api"));
|
|
@@ -123,4 +124,23 @@ async function tailHandler(nameOrId, options) {
|
|
|
123
124
|
(0, error_handler_1.handleError)(err, { spinner, json: options.json, context: 'fetching cage events' });
|
|
124
125
|
}
|
|
125
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Create tail command
|
|
129
|
+
*/
|
|
130
|
+
function createTailCommand(program) {
|
|
131
|
+
program
|
|
132
|
+
.command('tail <name>')
|
|
133
|
+
.description('Stream cage events in real-time')
|
|
134
|
+
.option('-n, --lines <count>', 'Number of historical events to show (default: 10)')
|
|
135
|
+
.option('--no-follow', 'Print history and exit (don\'t stream)')
|
|
136
|
+
.option('-v, --verbose', 'Show event metadata')
|
|
137
|
+
.option('--json', 'Output as NDJSON')
|
|
138
|
+
.addHelpText('after', `
|
|
139
|
+
Examples:
|
|
140
|
+
$ lobster tail my-cage # Stream events in real-time
|
|
141
|
+
$ lobster tail my-cage -n 50 # Show last 50 events then stream
|
|
142
|
+
$ lobster tail my-cage --no-follow # Print recent events and exit
|
|
143
|
+
$ lobster tail my-cage --json # Output as newline-delimited JSON`)
|
|
144
|
+
.action(tailHandler);
|
|
145
|
+
}
|
|
126
146
|
//# sourceMappingURL=tail.js.map
|